From 2b8ef35a6b4268c72e8f7dcf7987556a7c56d813 Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Thu, 16 Mar 2017 15:59:50 -0700 Subject: [PATCH 0001/1049] Add files via upload --- XylophoneRezzer.js | 87 ++++++++++++++++++++++++++++++++++++++++++++++ xylophoneKey.js | 63 +++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 XylophoneRezzer.js create mode 100644 xylophoneKey.js diff --git a/XylophoneRezzer.js b/XylophoneRezzer.js new file mode 100644 index 0000000000..a1b3b9352b --- /dev/null +++ b/XylophoneRezzer.js @@ -0,0 +1,87 @@ +var soundFiles = ["C2.wav", "D2.wav", "E2.wav", "F2.wav", "G2.wav", "A2.wav", "B2.wav", "C3.wav"]; +var diffuseFile = "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/xylotex_bar"; +var center = MyAvatar.position; +var fwd = {x:0, y:0, z:-1}; + +var xyloFramePos = Vec3.sum(center, Vec3.multiply(fwd, 0.8)); +var xyloFrameID = Entities.addEntity( { + name: "Xylophone", + type: "Model", + modelURL: "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/xylophoneFrameWithWave.fbx", + position: xyloFramePos, + rotation: Quat.fromVec3Radians({x:0, y:Math.PI, z:0}), + shapeType: "static-mesh", +}); + +center.y += (0.45); //key Y offset from frame +var keyPos; +for (i=1, len=soundFiles.length; i<=len; i++) { + + keyRot = Quat.fromVec3Radians({x:0, y:(0.9 - (i*0.2)), z:0}); + keyPos = Vec3.sum(center, Vec3.multiplyQbyV(keyRot, fwd)); + + var ud = { + soundFile: soundFiles[i-1] + }; + + var td = { + "file4": (diffuseFile + i + ".png"), + "file5": (diffuseFile + "_black.png") + }; + + var keyID = Entities.addEntity( { + name: ("XyloKey" + i), + type: "Model", + modelURL: "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/xyloKey_2_a_e.fbx", + position: keyPos, + rotation: keyRot, + shapeType: "static-mesh", + script: "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/xylophoneKey.js", + textures: JSON.stringify(td), + userData: JSON.stringify(ud), + parentID: xyloFrameID, + } ); +}; + +//if rezzed on/above something, wait until after model has loaded so you can read its dimensions then move object on to that surface. +var pickRay = {origin: center, direction: {x:0, y:-1, z:0}}; +var intersection = Entities.findRayIntersection(pickRay, true); +if (intersection.intersects && (intersection.distance < 10)) { + var surfaceY = intersection.intersection.y; + Script.setTimeout( function() { + //should add loop to check for fbx loaded instead of delay + var xyloDimensions = Entities.getEntityProperties(xyloFrameID, ["dimensions"]).dimensions; + xyloFramePos.y = surfaceY + (xyloDimensions.y/2); + Entities.editEntity(xyloFrameID, {position: xyloFramePos}); + rezMallets(); + }, 2000); //timeout (ms) +} +else { + print("No surface detected."); + rezMallets(); +} + +function rezMallets() { + var malletProps = { + name: "Xylophone Mallet", + type: "Model", + modelURL: "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/Mallet2-2pc.fbx", + collidesWith: "static,dynamic,kinematic,", + collisionMask: 7, + collisionsWillMove: 1, + dynamic: 1, + damping: 1, + angularDamping: 1, + shapeType: "simple-compound", + userData: "{\"grabbableKey\":{\"grabbable\":true}}" + }; + + malletProps.position = Vec3.sum(xyloFramePos, {x: 0.1, y: 0.55, z: 0}); + malletProps.rotation = Quat.fromVec3Radians({x:0, y:Math.PI - 0.1, z:0}), + Entities.addEntity(malletProps); + + malletProps.position = Vec3.sum(xyloFramePos, {x: -0.1, y: 0.55, z: 0}); + malletProps.rotation = Quat.fromVec3Radians({x:0, y:Math.PI + 0.1, z:0}), + Entities.addEntity(malletProps); + Script.stop(); +}; \ No newline at end of file diff --git a/xylophoneKey.js b/xylophoneKey.js new file mode 100644 index 0000000000..60241440ea --- /dev/null +++ b/xylophoneKey.js @@ -0,0 +1,63 @@ +(function() { + var BASE_PATH = "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/"; + Script.include(BASE_PATH + "pUtils.js"); + var TIMEOUT = 150; + var _this; + + function XylophoneKey() { + _this = this; + return; + } + + XylophoneKey.prototype = { + sound: null, + isWaiting: false, + homePos: null, + injector: null, + + preload: function(entityID) { + _this.entityID = entityID; + + var soundURL = BASE_PATH + JSON.parse(Entities.getEntityProperties(_this.entityID, ["userData"]).userData).soundFile; + //_this.homePos = Entities.getEntityProperties(entityID, ["position"]).position; + //Entities.editEntity(_this.entityID, {position: _this.homePos}); //This is the workaround for collisionWithEntity not being triggered after entity is reloaded. + _this.sound = SoundCache.getSound(soundURL); + + MyAvatar.collisionWithEntity.connect(function(collision){ + print ("The avatar collided with an entity."); + if (!_this.isWaiting && collision.type == 0) {_this.hit();} + }); + }, + + collisionWithEntity: function(thisEntity, otherEntity, collision) { + if (!_this.isWaiting && collision.type == 0) {_this.hit();} + }, + + clickDownOnEntity: function() { + _this.hit(); + }, + + hit: function() { + _this.isWaiting = true; + _this.homePos = Entities.getEntityProperties(_this.entityID, ["position"]).position; + _this.injector = Audio.playSound(_this.sound, {position: _this.homePos, volume: 1}); + Controller.triggerHapticPulse(1, 15, 2); //This should be made to only pulse the hand thats holding the mallet. + editEntityTextures(_this.entityID, "file5", BASE_PATH + "xylotex_bar_gray.png"); + var newPos = Vec3.sum(_this.homePos, {x:0,y:-0.025,z:0}); + Entities.editEntity(_this.entityID, {position: newPos}); + _this.timeout(); + }, + + timeout: function() { + Script.setTimeout(function() { + editEntityTextures(_this.entityID, "file5", BASE_PATH + "xylotex_bar_black.png"); + Entities.editEntity(_this.entityID, {position: _this.homePos}); + _this.isWaiting = false; + }, TIMEOUT) + }, + + }; + + return new XylophoneKey(); + +}); \ No newline at end of file From 2e2a6318a6bbe14466ee6d2039108e156e0c5bca Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Thu, 16 Mar 2017 18:07:56 -0700 Subject: [PATCH 0002/1049] Update xylophoneKey.js --- xylophoneKey.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/xylophoneKey.js b/xylophoneKey.js index 60241440ea..69ce38dfee 100644 --- a/xylophoneKey.js +++ b/xylophoneKey.js @@ -22,11 +22,6 @@ //_this.homePos = Entities.getEntityProperties(entityID, ["position"]).position; //Entities.editEntity(_this.entityID, {position: _this.homePos}); //This is the workaround for collisionWithEntity not being triggered after entity is reloaded. _this.sound = SoundCache.getSound(soundURL); - - MyAvatar.collisionWithEntity.connect(function(collision){ - print ("The avatar collided with an entity."); - if (!_this.isWaiting && collision.type == 0) {_this.hit();} - }); }, collisionWithEntity: function(thisEntity, otherEntity, collision) { @@ -60,4 +55,4 @@ return new XylophoneKey(); -}); \ No newline at end of file +}); From 62287a6a9fe94b725a19ffd3f4f8ab86baaaeff3 Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Thu, 23 Mar 2017 06:09:40 -0700 Subject: [PATCH 0003/1049] Update xylophoneKey.js Made all the requested changes. --- xylophoneKey.js | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/xylophoneKey.js b/xylophoneKey.js index 69ce38dfee..fdeddd9c2d 100644 --- a/xylophoneKey.js +++ b/xylophoneKey.js @@ -1,12 +1,12 @@ (function() { - var BASE_PATH = "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/"; - Script.include(BASE_PATH + "pUtils.js"); - var TIMEOUT = 150; + Script.include(Script.resolvePath("pUtils.js")); + const TIMEOUT = 150; + const TEXGRAY = Script.resolvePath("xylotex_bar_gray.png"); + const TEXBLACK = Script.resolvePath("xylotex_bar_black.png"); var _this; function XylophoneKey() { _this = this; - return; } XylophoneKey.prototype = { @@ -17,15 +17,16 @@ preload: function(entityID) { _this.entityID = entityID; - - var soundURL = BASE_PATH + JSON.parse(Entities.getEntityProperties(_this.entityID, ["userData"]).userData).soundFile; - //_this.homePos = Entities.getEntityProperties(entityID, ["position"]).position; - //Entities.editEntity(_this.entityID, {position: _this.homePos}); //This is the workaround for collisionWithEntity not being triggered after entity is reloaded. + var soundURL = Script.resolvePath(JSON.parse(Entities.getEntityProperties(_this.entityID, ["userData"]).userData).soundFile); _this.sound = SoundCache.getSound(soundURL); + //Explicitly setting dimensions is a workaround for collisionWithEntity not being triggered after entity is reloaded. Fogbugz Case no. 1939 + Entities.editEntity(_this.entityID, {dimensions: {x: 0.15182036161422729, y: 0.049085158854722977, z: 0.39702033996582031}}); }, collisionWithEntity: function(thisEntity, otherEntity, collision) { - if (!_this.isWaiting && collision.type == 0) {_this.hit();} + if (collision.type === 0) { + _this.hit(); + } }, clickDownOnEntity: function() { @@ -33,25 +34,26 @@ }, hit: function() { - _this.isWaiting = true; - _this.homePos = Entities.getEntityProperties(_this.entityID, ["position"]).position; - _this.injector = Audio.playSound(_this.sound, {position: _this.homePos, volume: 1}); - Controller.triggerHapticPulse(1, 15, 2); //This should be made to only pulse the hand thats holding the mallet. - editEntityTextures(_this.entityID, "file5", BASE_PATH + "xylotex_bar_gray.png"); - var newPos = Vec3.sum(_this.homePos, {x:0,y:-0.025,z:0}); - Entities.editEntity(_this.entityID, {position: newPos}); - _this.timeout(); + if (!_this.isWaiting) { + _this.isWaiting = true; + _this.homePos = Entities.getEntityProperties(_this.entityID, ["position"]).position; + _this.injector = Audio.playSound(_this.sound, {position: _this.homePos, volume: 1}); + Controller.triggerHapticPulse(1, 15, 2); //This should be made to only pulse the hand thats holding the mallet. + editEntityTextures(_this.entityID, "file5", TEXGRAY); + var newPos = Vec3.sum(_this.homePos, {x:0,y:-0.025,z:0}); + Entities.editEntity(_this.entityID, {position: newPos}); + _this.timeout(); + }; }, timeout: function() { Script.setTimeout(function() { - editEntityTextures(_this.entityID, "file5", BASE_PATH + "xylotex_bar_black.png"); + editEntityTextures(_this.entityID, "file5", TEXBLACK); Entities.editEntity(_this.entityID, {position: _this.homePos}); _this.isWaiting = false; - }, TIMEOUT) + }, TIMEOUT); }, - - }; + } return new XylophoneKey(); From 0d11be948804545849113e2c3f212dec7fc01458 Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Thu, 23 Mar 2017 06:15:53 -0700 Subject: [PATCH 0004/1049] Add files via upload --- pUtils.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 pUtils.js diff --git a/pUtils.js b/pUtils.js new file mode 100644 index 0000000000..e3ed41fa8f --- /dev/null +++ b/pUtils.js @@ -0,0 +1,24 @@ +getEntityTextures = function(id) { + var results = null; + var properties = Entities.getEntityProperties(id, "textures"); + if (properties.textures) { + try { + results = JSON.parse(properties.textures); + } catch(err) { + logDebug(err); + logDebug(properties.textures); + } + } + return results ? results : {}; +} + +setEntityTextures = function(id, textureList) { + var json = JSON.stringify(textureList); + Entities.editEntity(id, {textures: json}); +} + +editEntityTextures = function(id, textureName, textureURL) { + var textureList = getEntityTextures(id); + textureList[textureName] = textureURL; + setEntityTextures(id, textureList); +} \ No newline at end of file From 5c59bb17140f430ec2ad7aa544fc8484f1e52642 Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Thu, 23 Mar 2017 15:02:23 -0700 Subject: [PATCH 0005/1049] Update XylophoneRezzer.js --- XylophoneRezzer.js | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/XylophoneRezzer.js b/XylophoneRezzer.js index a1b3b9352b..427d918f21 100644 --- a/XylophoneRezzer.js +++ b/XylophoneRezzer.js @@ -1,20 +1,24 @@ var soundFiles = ["C2.wav", "D2.wav", "E2.wav", "F2.wav", "G2.wav", "A2.wav", "B2.wav", "C3.wav"]; -var diffuseFile = "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/xylotex_bar"; +var keyModelURL = Script.resolvePath("xyloKey_2_a_e.fbx"); +var keyScriptURL = Script.resolvePath("xylophoneKey.js"); +var TEXBLACK = Script.resolvePath("xylotex_bar_black.png"); +var malletModelURL = Script.resolvePath("Mallet2-2pc.fbx"); var center = MyAvatar.position; var fwd = {x:0, y:0, z:-1}; var xyloFramePos = Vec3.sum(center, Vec3.multiply(fwd, 0.8)); var xyloFrameID = Entities.addEntity( { name: "Xylophone", - type: "Model", - modelURL: "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/xylophoneFrameWithWave.fbx", - position: xyloFramePos, - rotation: Quat.fromVec3Radians({x:0, y:Math.PI, z:0}), - shapeType: "static-mesh", + type: "Model", + modelURL: Script.resolvePath("xylophoneFrameWithWave.fbx"), + position: xyloFramePos, + rotation: Quat.fromVec3Radians({x:0, y:Math.PI, z:0}), + shapeType: "static-mesh", }); center.y += (0.45); //key Y offset from frame var keyPos; +var keyRot; for (i=1, len=soundFiles.length; i<=len; i++) { keyRot = Quat.fromVec3Radians({x:0, y:(0.9 - (i*0.2)), z:0}); @@ -25,18 +29,18 @@ for (i=1, len=soundFiles.length; i<=len; i++) { }; var td = { - "file4": (diffuseFile + i + ".png"), - "file5": (diffuseFile + "_black.png") + "file4": Script.resolvePath("xylotex_bar" + i + ".png"), + "file5": TEXBLACK }; var keyID = Entities.addEntity( { name: ("XyloKey" + i), type: "Model", - modelURL: "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/xyloKey_2_a_e.fbx", + modelURL: keyModelURL, position: keyPos, rotation: keyRot, shapeType: "static-mesh", - script: "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/xylophoneKey.js", + script: keyScriptURL, textures: JSON.stringify(td), userData: JSON.stringify(ud), parentID: xyloFrameID, @@ -55,8 +59,7 @@ if (intersection.intersects && (intersection.distance < 10)) { Entities.editEntity(xyloFrameID, {position: xyloFramePos}); rezMallets(); }, 2000); //timeout (ms) -} -else { +} else { print("No surface detected."); rezMallets(); } @@ -65,7 +68,7 @@ function rezMallets() { var malletProps = { name: "Xylophone Mallet", type: "Model", - modelURL: "http://mpassets.highfidelity.com/3fd92e5e-93cf-4bc1-b2f1-c6bae5629814-v1/Mallet2-2pc.fbx", + modelURL: malletModelURL, collidesWith: "static,dynamic,kinematic,", collisionMask: 7, collisionsWillMove: 1, @@ -84,4 +87,4 @@ function rezMallets() { malletProps.rotation = Quat.fromVec3Radians({x:0, y:Math.PI + 0.1, z:0}), Entities.addEntity(malletProps); Script.stop(); -}; \ No newline at end of file +}; From a340e2ceaa6cd3c93567f0838c0e22d2aefec8f8 Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Thu, 23 Mar 2017 16:08:08 -0700 Subject: [PATCH 0006/1049] Rename XylophoneRezzer.js to unpublishedScripts/marketplace/xylophone/XylophoneRezzer.js --- .../marketplace/xylophone/XylophoneRezzer.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename XylophoneRezzer.js => unpublishedScripts/marketplace/xylophone/XylophoneRezzer.js (100%) diff --git a/XylophoneRezzer.js b/unpublishedScripts/marketplace/xylophone/XylophoneRezzer.js similarity index 100% rename from XylophoneRezzer.js rename to unpublishedScripts/marketplace/xylophone/XylophoneRezzer.js From 885a279bb0d4df64e884bfc7df775770e01d1426 Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Thu, 23 Mar 2017 16:09:03 -0700 Subject: [PATCH 0007/1049] Rename xylophoneKey.js to unpublishedScripts/marketplace/xylophone/xylophoneKey.js --- .../marketplace/xylophone/xylophoneKey.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename xylophoneKey.js => unpublishedScripts/marketplace/xylophone/xylophoneKey.js (100%) diff --git a/xylophoneKey.js b/unpublishedScripts/marketplace/xylophone/xylophoneKey.js similarity index 100% rename from xylophoneKey.js rename to unpublishedScripts/marketplace/xylophone/xylophoneKey.js From f1c243ac4e5ab6f6900df92a202c8f8a47fbdebb Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Thu, 23 Mar 2017 16:10:31 -0700 Subject: [PATCH 0008/1049] Rename pUtils.js to unpublishedScripts/marketplace/xylophone/pUtils.js --- pUtils.js => unpublishedScripts/marketplace/xylophone/pUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename pUtils.js => unpublishedScripts/marketplace/xylophone/pUtils.js (96%) diff --git a/pUtils.js b/unpublishedScripts/marketplace/xylophone/pUtils.js similarity index 96% rename from pUtils.js rename to unpublishedScripts/marketplace/xylophone/pUtils.js index e3ed41fa8f..e133bbb03d 100644 --- a/pUtils.js +++ b/unpublishedScripts/marketplace/xylophone/pUtils.js @@ -21,4 +21,4 @@ editEntityTextures = function(id, textureName, textureURL) { var textureList = getEntityTextures(id); textureList[textureName] = textureURL; setEntityTextures(id, textureList); -} \ No newline at end of file +} From 7c37297a4dc99c3bd73c2584736b4734056adb64 Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Thu, 23 Mar 2017 16:15:21 -0700 Subject: [PATCH 0009/1049] Rename XylophoneRezzer.js to xylophoneRezzer.js --- .../xylophone/{XylophoneRezzer.js => xylophoneRezzer.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename unpublishedScripts/marketplace/xylophone/{XylophoneRezzer.js => xylophoneRezzer.js} (100%) diff --git a/unpublishedScripts/marketplace/xylophone/XylophoneRezzer.js b/unpublishedScripts/marketplace/xylophone/xylophoneRezzer.js similarity index 100% rename from unpublishedScripts/marketplace/xylophone/XylophoneRezzer.js rename to unpublishedScripts/marketplace/xylophone/xylophoneRezzer.js From 4588f175f45a7d74234c525543de434e91aa1969 Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Thu, 23 Mar 2017 16:20:24 -0700 Subject: [PATCH 0010/1049] Add files via upload --- .../marketplace/xylophone/A2.wav | Bin 0 -> 187288 bytes .../marketplace/xylophone/B2.wav | Bin 0 -> 180044 bytes .../marketplace/xylophone/C2.wav | Bin 0 -> 189454 bytes .../marketplace/xylophone/C3.wav | Bin 0 -> 177814 bytes .../marketplace/xylophone/D2.wav | Bin 0 -> 190076 bytes .../marketplace/xylophone/E2.wav | Bin 0 -> 189518 bytes .../marketplace/xylophone/F2.wav | Bin 0 -> 188960 bytes .../marketplace/xylophone/G2.wav | Bin 0 -> 188960 bytes .../marketplace/xylophone/Mallet2-2pc.fbx | 844 ++++++++++++++ .../marketplace/xylophone/xyloKey_2_a_e.fbx | Bin 0 -> 55664 bytes .../xylophone/xylophoneFrameWithWave.fbx | 1031 +++++++++++++++++ ...xylophoneFrameWithWave_Steel_BaseColor.png | Bin 0 -> 1902 bytes .../xylophoneFrameWithWave_Steel_Metallic.png | Bin 0 -> 1322 bytes .../xylophoneFrameWithWave_Steel_Normal.png | Bin 0 -> 76957 bytes ...xylophoneFrameWithWave_Steel_Roughness.png | Bin 0 -> 59566 bytes .../marketplace/xylophone/xylotex_bar1.png | Bin 0 -> 105 bytes .../marketplace/xylophone/xylotex_bar2.png | Bin 0 -> 105 bytes .../marketplace/xylophone/xylotex_bar3.png | Bin 0 -> 105 bytes .../marketplace/xylophone/xylotex_bar4.png | Bin 0 -> 105 bytes .../marketplace/xylophone/xylotex_bar5.png | Bin 0 -> 107 bytes .../marketplace/xylophone/xylotex_bar6.png | Bin 0 -> 106 bytes .../marketplace/xylophone/xylotex_bar7.png | Bin 0 -> 107 bytes .../marketplace/xylophone/xylotex_bar8.png | Bin 0 -> 107 bytes .../xylophone/xylotex_bar_black.png | Bin 0 -> 103 bytes .../xylophone/xylotex_bar_gray.png | Bin 0 -> 106 bytes 25 files changed, 1875 insertions(+) create mode 100644 unpublishedScripts/marketplace/xylophone/A2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/B2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/C2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/C3.wav create mode 100644 unpublishedScripts/marketplace/xylophone/D2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/E2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/F2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/G2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/Mallet2-2pc.fbx create mode 100644 unpublishedScripts/marketplace/xylophone/xyloKey_2_a_e.fbx create mode 100644 unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave.fbx create mode 100644 unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_BaseColor.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_Metallic.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_Normal.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_Roughness.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylotex_bar1.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylotex_bar2.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylotex_bar3.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylotex_bar4.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylotex_bar5.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylotex_bar6.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylotex_bar7.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylotex_bar8.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylotex_bar_black.png create mode 100644 unpublishedScripts/marketplace/xylophone/xylotex_bar_gray.png diff --git a/unpublishedScripts/marketplace/xylophone/A2.wav b/unpublishedScripts/marketplace/xylophone/A2.wav new file mode 100644 index 0000000000000000000000000000000000000000..a5e42b3cd6988e1f365d02a2668becb25e423fc6 GIT binary patch literal 187288 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 literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/B2.wav b/unpublishedScripts/marketplace/xylophone/B2.wav new file mode 100644 index 0000000000000000000000000000000000000000..0c58074b841cecfaebc14b0dd438b70957e71908 GIT binary patch literal 180044 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 literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/D2.wav b/unpublishedScripts/marketplace/xylophone/D2.wav new file mode 100644 index 0000000000000000000000000000000000000000..1c51c74d937b8c9179183a483dcbd5e67ff0f1b6 GIT binary patch literal 190076 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 bdjhXl+_RPbdA3(x|9@)TiDEr#-BZdxoQ9vo literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/Mallet2-2pc.fbx b/unpublishedScripts/marketplace/xylophone/Mallet2-2pc.fbx new file mode 100644 index 0000000000..2683eb0acd --- /dev/null +++ b/unpublishedScripts/marketplace/xylophone/Mallet2-2pc.fbx @@ -0,0 +1,844 @@ +; FBX 7.4.0 project file +; Copyright (C) 1997-2010 Autodesk Inc. and/or its licensors. +; All rights reserved. +; ---------------------------------------------------- + +FBXHeaderExtension: { + FBXHeaderVersion: 1003 + FBXVersion: 7400 + CreationTimeStamp: { + Version: 1000 + Year: 2017 + Month: 3 + Day: 5 + Hour: 18 + Minute: 30 + Second: 0 + Millisecond: 490 + } + Creator: "FBX SDK/FBX Plugins version 2016.0" + SceneInfo: "SceneInfo::GlobalInfo", "UserData" { + Type: "UserData" + Version: 100 + MetaData: { + Version: 100 + Title: "" + Subject: "" + Author: "" + Keywords: "" + Revision: "" + Comment: "" + } + Properties70: { + P: "DocumentUrl", "KString", "Url", "", "C:\Users\Lemondrop\Desktop\Mallet2-2pc.fbx" + P: "SrcDocumentUrl", "KString", "Url", "", "C:\Users\Lemondrop\Desktop\Mallet2-2pc.fbx" + P: "Original", "Compound", "", "" + P: "Original|ApplicationVendor", "KString", "", "", "Autodesk" + P: "Original|ApplicationName", "KString", "", "", "Maya" + P: "Original|ApplicationVersion", "KString", "", "", "2016" + P: "Original|DateTime_GMT", "DateTime", "", "", "06/03/2017 02:30:00.466" + P: "Original|FileName", "KString", "", "", "C:/Users/Lemondrop/Desktop/Mallet2-2pc.fbx" + P: "LastSaved", "Compound", "", "" + P: "LastSaved|ApplicationVendor", "KString", "", "", "Autodesk" + P: "LastSaved|ApplicationName", "KString", "", "", "Maya" + P: "LastSaved|ApplicationVersion", "KString", "", "", "2016" + P: "LastSaved|DateTime_GMT", "DateTime", "", "", "06/03/2017 02:30:00.466" + } + } +} +GlobalSettings: { + Version: 1000 + Properties70: { + P: "UpAxis", "int", "Integer", "",1 + P: "UpAxisSign", "int", "Integer", "",1 + P: "FrontAxis", "int", "Integer", "",2 + P: "FrontAxisSign", "int", "Integer", "",1 + P: "CoordAxis", "int", "Integer", "",0 + P: "CoordAxisSign", "int", "Integer", "",1 + P: "OriginalUpAxis", "int", "Integer", "",1 + P: "OriginalUpAxisSign", "int", "Integer", "",1 + P: "UnitScaleFactor", "double", "Number", "",1 + P: "OriginalUnitScaleFactor", "double", "Number", "",1 + P: "AmbientColor", "ColorRGB", "Color", "",0,0,0 + P: "DefaultCamera", "KString", "", "", "Producer Perspective" + P: "TimeMode", "enum", "", "",11 + P: "TimeProtocol", "enum", "", "",2 + P: "SnapOnFrameMode", "enum", "", "",0 + P: "TimeSpanStart", "KTime", "Time", "",1924423250 + P: "TimeSpanStop", "KTime", "Time", "",384884650000 + P: "CustomFrameRate", "double", "Number", "",-1 + P: "TimeMarker", "Compound", "", "" + P: "CurrentTimeMarker", "int", "Integer", "",-1 + } +} + +; Documents Description +;------------------------------------------------------------------ + +Documents: { + Count: 1 + Document: 1448204880, "", "Scene" { + Properties70: { + P: "SourceObject", "object", "", "" + P: "ActiveAnimStackName", "KString", "", "", "Take 001" + } + RootNode: 0 + } +} + +; Document References +;------------------------------------------------------------------ + +References: { +} + +; Object definitions +;------------------------------------------------------------------ + +Definitions: { + Version: 100 + Count: 18 + ObjectType: "GlobalSettings" { + Count: 1 + } + ObjectType: "AnimationStack" { + Count: 1 + PropertyTemplate: "FbxAnimStack" { + Properties70: { + P: "Description", "KString", "", "", "" + P: "LocalStart", "KTime", "Time", "",0 + P: "LocalStop", "KTime", "Time", "",0 + P: "ReferenceStart", "KTime", "Time", "",0 + P: "ReferenceStop", "KTime", "Time", "",0 + } + } + } + ObjectType: "AnimationLayer" { + Count: 1 + PropertyTemplate: "FbxAnimLayer" { + Properties70: { + P: "Weight", "Number", "", "A",100 + P: "Mute", "bool", "", "",0 + P: "Solo", "bool", "", "",0 + P: "Lock", "bool", "", "",0 + P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 + P: "BlendMode", "enum", "", "",0 + P: "RotationAccumulationMode", "enum", "", "",0 + P: "ScaleAccumulationMode", "enum", "", "",0 + P: "BlendModeBypass", "ULongLong", "", "",0 + } + } + } + ObjectType: "NodeAttribute" { + Count: 1 + PropertyTemplate: "FbxNull" { + Properties70: { + P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 + P: "Size", "double", "Number", "",100 + P: "Look", "enum", "", "",1 + } + } + } + ObjectType: "Model" { + Count: 3 + PropertyTemplate: "FbxNode" { + Properties70: { + P: "QuaternionInterpolate", "enum", "", "",0 + P: "RotationOffset", "Vector3D", "Vector", "",0,0,0 + P: "RotationPivot", "Vector3D", "Vector", "",0,0,0 + P: "ScalingOffset", "Vector3D", "Vector", "",0,0,0 + P: "ScalingPivot", "Vector3D", "Vector", "",0,0,0 + P: "TranslationActive", "bool", "", "",0 + P: "TranslationMin", "Vector3D", "Vector", "",0,0,0 + P: "TranslationMax", "Vector3D", "Vector", "",0,0,0 + P: "TranslationMinX", "bool", "", "",0 + P: "TranslationMinY", "bool", "", "",0 + P: "TranslationMinZ", "bool", "", "",0 + P: "TranslationMaxX", "bool", "", "",0 + P: "TranslationMaxY", "bool", "", "",0 + P: "TranslationMaxZ", "bool", "", "",0 + P: "RotationOrder", "enum", "", "",0 + P: "RotationSpaceForLimitOnly", "bool", "", "",0 + P: "RotationStiffnessX", "double", "Number", "",0 + P: "RotationStiffnessY", "double", "Number", "",0 + P: "RotationStiffnessZ", "double", "Number", "",0 + P: "AxisLen", "double", "Number", "",10 + P: "PreRotation", "Vector3D", "Vector", "",0,0,0 + P: "PostRotation", "Vector3D", "Vector", "",0,0,0 + P: "RotationActive", "bool", "", "",0 + P: "RotationMin", "Vector3D", "Vector", "",0,0,0 + P: "RotationMax", "Vector3D", "Vector", "",0,0,0 + P: "RotationMinX", "bool", "", "",0 + P: "RotationMinY", "bool", "", "",0 + P: "RotationMinZ", "bool", "", "",0 + P: "RotationMaxX", "bool", "", "",0 + P: "RotationMaxY", "bool", "", "",0 + P: "RotationMaxZ", "bool", "", "",0 + P: "InheritType", "enum", "", "",0 + P: "ScalingActive", "bool", "", "",0 + P: "ScalingMin", "Vector3D", "Vector", "",0,0,0 + P: "ScalingMax", "Vector3D", "Vector", "",1,1,1 + P: "ScalingMinX", "bool", "", "",0 + P: "ScalingMinY", "bool", "", "",0 + P: "ScalingMinZ", "bool", "", "",0 + P: "ScalingMaxX", "bool", "", "",0 + P: "ScalingMaxY", "bool", "", "",0 + P: "ScalingMaxZ", "bool", "", "",0 + P: "GeometricTranslation", "Vector3D", "Vector", "",0,0,0 + P: "GeometricRotation", "Vector3D", "Vector", "",0,0,0 + P: "GeometricScaling", "Vector3D", "Vector", "",1,1,1 + P: "MinDampRangeX", "double", "Number", "",0 + P: "MinDampRangeY", "double", "Number", "",0 + P: "MinDampRangeZ", "double", "Number", "",0 + P: "MaxDampRangeX", "double", "Number", "",0 + P: "MaxDampRangeY", "double", "Number", "",0 + P: "MaxDampRangeZ", "double", "Number", "",0 + P: "MinDampStrengthX", "double", "Number", "",0 + P: "MinDampStrengthY", "double", "Number", "",0 + P: "MinDampStrengthZ", "double", "Number", "",0 + P: "MaxDampStrengthX", "double", "Number", "",0 + P: "MaxDampStrengthY", "double", "Number", "",0 + P: "MaxDampStrengthZ", "double", "Number", "",0 + P: "PreferedAngleX", "double", "Number", "",0 + P: "PreferedAngleY", "double", "Number", "",0 + P: "PreferedAngleZ", "double", "Number", "",0 + P: "LookAtProperty", "object", "", "" + P: "UpVectorProperty", "object", "", "" + P: "Show", "bool", "", "",1 + P: "NegativePercentShapeSupport", "bool", "", "",1 + P: "DefaultAttributeIndex", "int", "Integer", "",-1 + P: "Freeze", "bool", "", "",0 + P: "LODBox", "bool", "", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,0,0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",0,0,0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",1,1,1 + P: "Visibility", "Visibility", "", "A",1 + P: "Visibility Inheritance", "Visibility Inheritance", "", "",1 + } + } + } + ObjectType: "Geometry" { + Count: 2 + PropertyTemplate: "FbxMesh" { + Properties70: { + P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 + P: "BBoxMin", "Vector3D", "Vector", "",0,0,0 + P: "BBoxMax", "Vector3D", "Vector", "",0,0,0 + P: "Primary Visibility", "bool", "", "",1 + P: "Casts Shadows", "bool", "", "",1 + P: "Receive Shadows", "bool", "", "",1 + } + } + } + ObjectType: "Material" { + Count: 1 + PropertyTemplate: "FbxSurfaceMaterial" { + Properties70: { + P: "ShadingModel", "KString", "", "", "Unknown" + P: "MultiLayer", "bool", "", "",0 + } + } + } + ObjectType: "Implementation" { + Count: 1 + PropertyTemplate: "FbxImplementation" { + Properties70: { + P: "ShaderLanguage", "KString", "", "", "MentalRaySL" + P: "ShaderLanguageVersion", "KString", "", "", "" + P: "RenderAPI", "KString", "", "", "MentalRay" + P: "RenderAPIVersion", "KString", "", "", "" + P: "RootBindingName", "KString", "", "", "" + P: "Constants", "Compound", "", "" + } + } + } + ObjectType: "BindingTable" { + Count: 1 + PropertyTemplate: "FbxBindingTable" { + Properties70: { + P: "TargetName", "KString", "", "", "" + P: "TargetType", "KString", "", "", "" + P: "CodeAbsoluteURL", "KString", "XRefUrl", "", "" + P: "CodeRelativeURL", "KString", "XRefUrl", "", "" + P: "CodeTAG", "KString", "", "", "shader" + P: "DescAbsoluteURL", "KString", "XRefUrl", "", "" + P: "DescRelativeURL", "KString", "XRefUrl", "", "" + P: "DescTAG", "KString", "", "", "shader" + } + } + } + ObjectType: "Texture" { + Count: 3 + PropertyTemplate: "FbxFileTexture" { + Properties70: { + P: "TextureTypeUse", "enum", "", "",0 + P: "Texture alpha", "Number", "", "A",1 + P: "CurrentMappingType", "enum", "", "",0 + P: "WrapModeU", "enum", "", "",0 + P: "WrapModeV", "enum", "", "",0 + P: "UVSwap", "bool", "", "",0 + P: "PremultiplyAlpha", "bool", "", "",1 + P: "Translation", "Vector", "", "A",0,0,0 + P: "Rotation", "Vector", "", "A",0,0,0 + P: "Scaling", "Vector", "", "A",1,1,1 + P: "TextureRotationPivot", "Vector3D", "Vector", "",0,0,0 + P: "TextureScalingPivot", "Vector3D", "Vector", "",0,0,0 + P: "CurrentTextureBlendMode", "enum", "", "",1 + P: "UVSet", "KString", "", "", "default" + P: "UseMaterial", "bool", "", "",0 + P: "UseMipMap", "bool", "", "",0 + } + } + } + ObjectType: "Video" { + Count: 3 + PropertyTemplate: "FbxVideo" { + Properties70: { + P: "ImageSequence", "bool", "", "",0 + P: "ImageSequenceOffset", "int", "Integer", "",0 + P: "FrameRate", "double", "Number", "",0 + P: "LastFrame", "int", "Integer", "",0 + P: "Width", "int", "Integer", "",0 + P: "Height", "int", "Integer", "",0 + P: "Path", "KString", "XRefUrl", "", "" + P: "StartFrame", "int", "Integer", "",0 + P: "StopFrame", "int", "Integer", "",0 + P: "PlaySpeed", "double", "Number", "",0 + P: "Offset", "KTime", "Time", "",0 + P: "InterlaceMode", "enum", "", "",0 + P: "FreeRunning", "bool", "", "",0 + P: "Loop", "bool", "", "",0 + P: "AccessMode", "enum", "", "",0 + } + } + } +} + +; Object properties +;------------------------------------------------------------------ + +Objects: { + NodeAttribute: 1448169328, "NodeAttribute::", "Null" { + Properties70: { + P: "Look", "enum", "", "",0 + } + TypeFlags: "Null" + } + Geometry: 1449852656, "Geometry::", "Mesh" { + Vertices: *114 { + a: 0.432443797588348,93.7839813232422,17.9454898834229,0.249671518802643,93.6012115478516,17.9454898834229,0,93.534309387207,17.9454879760742,-0.249671518802643,93.6012115478516,17.9454898834229,-0.432443797588348,93.7839813232422,17.9454898834229,-0.499343037605286,94.0336532592773,17.9454898834229,-0.432443797588348,94.2833251953125,17.9454898834229,-0.249671518802643,94.4660949707031,17.9454898834229,0,94.5329971313477,17.9454898834229,0.249671518802643,94.4660949707031,17.9454898834229,0.432443797588348,94.2833251953125,17.9454898834229,0.499343037605286,94.0336532592773,17.9454898834229,0,94.0336532592773,17.9454898834229,0,94.0336456298828,-30.0767383575439,0.750476241111755,93.6003646850586,-29.8675003051758,0.562875986099243,93.7086791992188,-30.0767402648926,0.433287680149078,93.2831802368164,-29.8675003051758,0.324976593255997,93.4707794189453,-30.0767383575439,0,93.1670761108398,-29.8674983978271,0,93.3836975097656,-30.0767402648926,-0.433287680149078,93.2831802368164,-29.8675003051758,-0.324976593255997,93.4707794189453,-30.0767383575439,-0.750476241111755,93.6003646850586,-29.8675003051758,-0.562875986099243,93.7086791992188,-30.0767402648926,-0.866575360298157,94.0336532592773,-29.8674983978271,-0.649953186511993,94.0336456298828,-30.0767383575439,-0.750476241111755,94.4669418334961,-29.8674983978271,-0.562875986099243,94.3586273193359,-30.0767383575439,-0.433287680149078,94.7841262817383,-29.8674983978271,-0.324976593255997,94.5965270996094,-30.0767383575439,0,94.9002304077148,-29.8674983978271,0,94.6836090087891,-30.0767383575439,0.433287680149078,94.7841262817383,-29.8674983978271,0.324976593255997,94.5965270996094,-30.0767383575439,0.750476241111755,94.4669418334961,-29.8674983978271,0.562875986099243,94.3586273193359,-30.0767383575439,0.866575360298157,94.0336532592773,-29.8674983978271,0.649953186511993,94.0336456298828,-30.0767383575439 + } + PolygonVertexIndex: *168 { + a: 1,0,-13,2,1,-13,3,2,-13,4,3,-13,5,4,-13,6,5,-13,7,6,-13,8,7,-13,9,8,-13,10,9,-13,11,10,-13,0,11,-13,14,15,37,-37,15,14,16,-18,17,16,18,-20,19,18,20,-22,21,20,22,-24,23,22,24,-26,25,24,26,-28,27,26,28,-30,29,28,30,-32,31,30,32,-34,33,32,34,-36,35,34,36,-38,0,1,16,-15,1,2,18,-17,2,3,20,-19,3,4,22,-21,4,5,24,-23,5,6,26,-25,6,7,28,-27,7,8,30,-29,8,9,32,-31,9,10,34,-33,10,11,36,-35,11,0,14,-37,15,17,-14,17,19,-14,19,21,-14,21,23,-14,23,25,-14,25,27,-14,27,29,-14,29,31,-14,31,33,-14,33,35,-14,35,37,-14,37,15,-14 + } + Edges: *84 { + a: 0,1,2,3,5,6,8,9,11,12,14,15,17,18,20,21,23,24,26,27,29,30,32,33,36,37,38,39,41,42,43,45,46,47,49,50,51,53,54,55,57,58,59,61,62,63,65,66,67,69,70,71,73,74,75,77,78,79,81,83,85,87,89,93,97,101,105,109,113,117,121,125,133,134,136,139,142,145,148,151,154,157,160,163 + } + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 102 + Name: "" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Normals: *504 { + a: -3.82479402105673e-006,-1.90994251170196e-006,1,-3.82461121262168e-006,0,1,3.89684985668826e-011,-6.36632137229753e-007,1,3.824852683465e-006,-3.81982727049035e-006,1,-3.82479402105673e-006,-1.90994251170196e-006,1,3.89684985668826e-011,-6.36632137229753e-007,1,7.64982178225182e-006,-1.9099134078715e-006,1,3.824852683465e-006,-3.81982727049035e-006,1,3.89684985668826e-011,-6.36632137229753e-007,1,3.82478674509912e-006,0,1,7.64982178225182e-006,-1.9099134078715e-006,1,3.89684985668826e-011,-6.36632137229753e-007,1,0,0,1,3.82478674509912e-006,0,1,3.89684985668826e-011,-6.36632137229753e-007,1,3.82484495276003e-006,0,1,0,0,1,3.89684985668826e-011,-6.36632137229753e-007,1,-3.82490952688386e-006,0,1,3.82484495276003e-006,0,1,3.89684985668826e-011,-6.36632137229753e-007,1,-3.824852683465e-006,0,1,-3.82490952688386e-006,0,1,3.89684985668826e-011,-6.36632137229753e-007,1,-6.96658388529142e-013,0,1,-3.824852683465e-006,0,1,3.89684985668826e-011,-6.36632137229753e-007,1,-3.82484495276003e-006,0,1,-6.96658388529142e-013,0,1,3.89684985668826e-011,-6.36632137229753e-007,1,0,0,1,-3.82484495276003e-006,0,1,3.89684985668826e-011,-6.36632137229753e-007,1,-3.82461121262168e-006,0,1,0,0,1,3.89684985668826e-011,-6.36632137229753e-007,1,0.601662158966064,-0.347378313541412,-0.719257235527039,0.601662993431091,-0.34737691283226,-0.719257235527039,0.694739699363709,-1.38254927151138e-006,-0.719261348247528,0.694739699363709,5.45310149391298e-006,-0.719261288642883,0.601662993431091,-0.34737691283226,-0.719257235527039,0.601662158966064,-0.347378313541412,-0.719257235527039,0.347372442483902,-0.60166609287262,-0.71925675868988,0.347372889518738,-0.601665854454041,-0.71925675868988,0.347372889518738,-0.601665854454041,-0.71925675868988,0.347372442483902,-0.60166609287262,-0.71925675868988,2.65282164946257e-006,-0.694744527339935,-0.719256639480591,2.65369590124465e-006,-0.69474458694458,-0.719256639480591,2.65369590124465e-006,-0.69474458694458,-0.719256639480591,2.65282164946257e-006,-0.694744527339935,-0.719256639480591, +-0.347369283437729,-0.601663172245026,-0.719260811805725,-0.347369730472565,-0.601662933826447,-0.71926075220108,-0.347369730472565,-0.601662933826447,-0.71926075220108,-0.347369283437729,-0.601663172245026,-0.719260811805725,-0.601662933826447,-0.347374767065048,-0.719258368015289,-0.601663649082184,-0.347373396158218,-0.719258368015289,-0.601663649082184,-0.347373396158218,-0.719258368015289,-0.601662933826447,-0.347374767065048,-0.719258368015289,-0.694743871688843,4.37429798694211e-006,-0.719257295131683,-0.694743871688843,-2.45891078520799e-006,-0.719257235527039,-0.694743871688843,-2.45891078520799e-006,-0.719257235527039,-0.694743871688843,4.37429798694211e-006,-0.719257295131683,-0.601661562919617,0.347372710704803,-0.719260454177856,-0.601662695407867,0.347370713949203,-0.719260394573212,-0.601662695407867,0.347370713949203,-0.719260394573212,-0.601661562919617,0.347372710704803,-0.719260454177856,-0.347377181053162,0.60166072845459,-0.719259023666382,-0.347377479076386,0.601660549640656,-0.719258964061737,-0.347377479076386,0.601660549640656,-0.719258964061737,-0.347377181053162,0.60166072845459,-0.719259023666382,-1.10238954675879e-006,0.694736123085022,-0.71926474571228,-1.10415362541971e-006,0.694736123085022,-0.71926474571228,-1.10415362541971e-006,0.694736123085022,-0.71926474571228,-1.10238954675879e-006,0.694736123085022,-0.71926474571228,0.347373455762863,0.601661920547485,-0.719259738922119,0.347373694181442,0.601661801338196,-0.719259798526764,0.347373694181442,0.601661801338196,-0.719259798526764,0.347373455762863,0.601661920547485,-0.719259738922119,0.601659297943115,0.347370594739914,-0.71926337480545,0.601660430431366,0.347368687391281,-0.719263315200806,0.601660430431366,0.347368687391281,-0.719263315200806,0.601659297943115,0.347370594739914,-0.71926337480545,0.694739699363709,5.45310149391298e-006,-0.719261288642883,0.694739699363709,-1.38254927151138e-006,-0.719261348247528,0.865998923778534,-0.499986976385117,0.00768040353432298,0.499986559152603,-0.865999162197113,0.00768037419766188, +0.499986320734024,-0.865999281406403,0.00768037373200059,0.865998685359955,-0.499987244606018,0.00768040306866169,0.499986559152603,-0.865999162197113,0.00768037419766188,-9.28422227985948e-009,-0.999970555305481,0.00768049480393529,-1.86155393322451e-008,-0.999970555305481,0.00768049480393529,0.499986320734024,-0.865999281406403,0.00768037373200059,-9.28422227985948e-009,-0.999970555305481,0.00768049480393529,-0.499986559152603,-0.865999162197113,0.00768037373200059,-0.499986320734024,-0.865999281406403,0.0076803732663393,-1.86155393322451e-008,-0.999970555305481,0.00768049480393529,-0.499986559152603,-0.865999162197113,0.00768037373200059,-0.865998864173889,-0.499986946582794,0.0076804026030004,-0.865998804569244,-0.499987214803696,0.00768040353432298,-0.499986320734024,-0.865999281406403,0.0076803732663393,-0.865998864173889,-0.499986946582794,0.0076804026030004,-0.999970555305481,0,0.0076804799027741,-0.999970555305481,-3.53695014609912e-007,0.00768048036843538,-0.865998804569244,-0.499987214803696,0.00768040353432298,-0.999970555305481,0,0.0076804799027741,-0.865998983383179,0.499986946582794,0.00768040353432298,-0.865998923778534,0.499986916780472,0.00768040353432298,-0.999970555305481,-3.53695014609912e-007,0.00768048036843538,-0.865998983383179,0.499986946582794,0.00768040353432298,-0.4999860227108,0.865999460220337,0.00768043287098408,-0.499985963106155,0.865999519824982,0.00768043240532279,-0.865998923778534,0.499986916780472,0.00768040353432298,-0.4999860227108,0.865999460220337,0.00768043287098408,0,0.999970555305481,0.0076805530115962,0,0.999970555305481,0.0076805530115962,-0.499985963106155,0.865999519824982,0.00768043240532279,0,0.999970555305481,0.0076805530115962,0.4999860227108,0.865999460220337,0.00768037466332316,0.499985963106155,0.865999519824982,0.00768037373200059,0,0.999970555305481,0.0076805530115962,0.4999860227108,0.865999460220337,0.00768037466332316,0.865998983383179,0.499986946582794,0.00768028758466244,0.865998923778534,0.499986916780472,0.00768028665333986,0.499985963106155,0.865999519824982,0.00768037373200059, +0.865998983383179,0.499986946582794,0.00768028758466244,0.999970555305481,-6.49897344828787e-008,0.00768036302179098,0.999970555305481,-4.18849367633811e-007,0.00768036255612969,0.865998923778534,0.499986916780472,0.00768028665333986,0.999970555305481,-6.49897344828787e-008,0.00768036302179098,0.865998923778534,-0.499986976385117,0.00768040353432298,0.865998685359955,-0.499987244606018,0.00768040306866169,0.999970555305481,-4.18849367633811e-007,0.00768036255612969,-4.51522600997123e-006,1.4673656778541e-006,-1,-4.51524556410732e-006,-2.72413550050921e-011,-1,-2.62132190953501e-011,9.78180196398171e-007,-1,-4.51524556410732e-006,-2.72413550050921e-011,-1,0,2.93464381684316e-006,-1,-2.62132190953501e-011,9.78180196398171e-007,-1,0,2.93464381684316e-006,-1,0,2.58024174942806e-011,-1,-2.62132190953501e-011,9.78180196398171e-007,-1,0,2.58024174942806e-011,-1,0,1.46743207096733e-006,-1,-2.62132190953501e-011,9.78180196398171e-007,-1,0,1.46743207096733e-006,-1,0,2.93457765110361e-006,-1,-2.62132190953501e-011,9.78180196398171e-007,-1,0,2.93457765110361e-006,-1,4.51503046861035e-006,0,-1,-2.62132190953501e-011,9.78180196398171e-007,-1,4.51503046861035e-006,0,-1,4.51504138254677e-006,0,-1,-2.62132190953501e-011,9.78180196398171e-007,-1,4.51504138254677e-006,0,-1,0,0,-1,-2.62132190953501e-011,9.78180196398171e-007,-1,0,0,-1,0,0,-1,-2.62132190953501e-011,9.78180196398171e-007,-1,0,0,-1,0,0,-1,-2.62132190953501e-011,9.78180196398171e-007,-1,0,0,-1,0,2.93457765110361e-006,-1,-2.62132190953501e-011,9.78180196398171e-007,-1,0,2.93457765110361e-006,-1,-4.51522600997123e-006,1.4673656778541e-006,-1,-2.62132190953501e-011,9.78180196398171e-007,-1 + } + NormalsW: *168 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementBinormal: 0 { + Version: 102 + Name: "map1" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Binormals: *504 { + a: 0.030156834051013,0.999545276165009,2.02441765395633e-006,0.030156834051013,0.999545276165009,1.15338167461232e-007,0.030156834051013,0.999545276165009,6.36341439985699e-007,0.0111528877168894,0.999937832355499,3.77693163500226e-006,0.0111528877168894,0.999937832355499,1.95248139789328e-006,0.0111528877168894,0.999937832355499,6.36592119462875e-007,-0.0111528877168894,0.999937832355499,1.99511237042316e-006,-0.0111528877168894,0.999937832355499,3.86224792237044e-006,-0.0111528877168894,0.999937832355499,6.36593028957577e-007,-0.030156834051013,0.999545276165009,1.15343461004613e-007,-0.030156834051013,0.999545276165009,2.13973930840439e-006,-0.030156834051013,0.999545276165009,6.36343827409291e-007,-0.0404003821313381,0.999183595180511,0,-0.0404003821313381,0.999183595180511,1.54522851403271e-007,-0.0404003821313381,0.999183595180511,6.36113952623418e-007,-0.0395448990166187,0.999217808246613,1.5125310426356e-007,-0.0395448990166187,0.999217808246613,0,-0.0395448990166187,0.999217808246613,6.36135723652842e-007,-0.0284317452460527,0.999595761299133,-1.08748849925178e-007,-0.0284317452460527,0.999595761299133,1.08747016724919e-007,-0.0284317452460527,0.999595761299133,6.36375887097529e-007,-0.0103161809965968,0.999946773052216,-3.94578734130846e-008,-0.0103161809965968,0.999946773052216,-3.94584596108416e-008,-0.0103161809965968,0.999946773052216,6.36598656456044e-007,0.0103161809965968,0.999946773052216,7.18685348185351e-015,0.0103161809965968,0.999946773052216,3.94578734130846e-008,0.0103161809965968,0.999946773052216,6.3659786064818e-007,0.0284317452460527,0.999595761299133,1.08747016724919e-007,0.0284317452460527,0.999595761299133,1.98072132561724e-014,0.0284317452460527,0.999595761299133,6.36373727047612e-007,0.0395448990166187,0.999217808246613,-0,0.0395448990166187,0.999217808246613,1.5125310426356e-007,0.0395448990166187,0.999217808246613,6.36132654108224e-007,0.0404003821313381,0.999183595180511,1.54515760186769e-007,0.0404003821313381,0.999183595180511,-0,0.0404003821313381,0.999183595180511,6.36110769391962e-007, +-0.706260621547699,0.189244657754898,-0.682189524173737,-0.706259071826935,0.18924780189991,-0.682190179824829,-0.70626300573349,0.189252495765686,-0.682184875011444,-0.70626425743103,0.189249232411385,-0.682184398174286,-0.517035186290741,0.516996145248413,-0.682194709777832,-0.516976833343506,0.517070889472961,-0.682182312011719,-0.516890645027161,0.51711767911911,-0.682212173938751,-0.516965389251709,0.51705938577652,-0.682199716567993,-0.189268991351128,0.706249237060547,-0.682194471359253,-0.189244329929352,0.706259191036224,-0.682191014289856,-0.189217954874039,0.70626300573349,-0.682194411754608,-0.189244359731674,0.706259310245514,-0.682190895080566,0.189247846603394,0.706259489059448,-0.682189702987671,0.189250290393829,0.706259250640869,-0.682189345359802,0.189252942800522,0.706259727478027,-0.682188034057617,0.189250692725182,0.706260681152344,-0.682187676429749,0.517006278038025,0.51703268289566,-0.682188928127289,0.516998171806335,0.517039120197296,-0.682190239429474,0.516994655132294,0.517050385475159,-0.682184338569641,0.517001271247864,0.517042279243469,-0.682185471057892,0.706249594688416,0.189272791147232,-0.682193040847778,0.706262052059174,0.189242675900459,-0.68218857049942,0.70626562833786,0.18921010196209,-0.68219381570816,0.706260323524475,0.189242154359818,-0.682190537452698,0.706261336803436,-0.189239174127579,-0.682190239429474,0.706260323524475,-0.189240232110024,-0.682191014289856,0.706264197826386,-0.189242541790009,-0.682186365127563,0.706264317035675,-0.189241290092468,-0.682186603546143,0.51703542470932,-0.517001986503601,-0.68219006061554,0.517037212848663,-0.516999363899231,-0.682190775871277,0.517042994499207,-0.517000734806061,-0.682185351848602,0.517040491104126,-0.517002582550049,-0.682185769081116,0.189273416996002,-0.706250727176666,-0.682191729545593,0.18924555182457,-0.706262052059174,-0.682187736034393,0.189217180013657,-0.706271290779114,-0.68218606710434,0.189246952533722,-0.706267178058624,-0.68218207359314,-0.189253747463226,-0.706266462802887,-0.682180821895599,-0.189252823591232,-0.706266641616821,-0.682181000709534, +-0.189250141382217,-0.706260442733765,-0.682188153266907,-0.189251005649567,-0.706260085105896,-0.682188212871552,-0.51700222492218,-0.51703405380249,-0.682191014289856,-0.516995489597321,-0.517039239406586,-0.682192146778107,-0.51699835062027,-0.51705402135849,-0.682178795337677,-0.517003774642944,-0.517047464847565,-0.682179689407349,-0.706258714199066,-0.189262330532074,-0.682186484336853,-0.706269502639771,-0.189236700534821,-0.682182490825653,-0.706268608570099,-0.189207911491394,-0.682191371917725,-0.706265687942505,-0.189235687255859,-0.682186722755432,0.00562240276485682,-0.00562247959896922,-0.999968409538269,0.00569096021354198,-0.0055828308686614,-0.999968230724335,0.00575955957174301,-0.00554322358220816,-0.9999680519104,0.00566200958564878,-0.00555387930944562,-0.999968647956848,0.00206463923677802,-0.00767649710178375,-0.999968469142914,0.00207728799432516,-0.00768047850579023,-0.999968409538269,0.00208887038752437,-0.00768047804012895,-0.999968349933624,0.00207466958090663,-0.00767070520669222,-0.999968469142914,-0.0020657058339566,-0.00768047850579023,-0.999968409538269,-0.00205942546017468,-0.00767950620502234,-0.999968469142914,-0.00205421168357134,-0.00768251530826092,-0.999968409538269,-0.00205968599766493,-0.00768047850579023,-0.999968409538269,-0.00562236085534096,-0.00562243815511465,-0.999968409538269,-0.00563120422884822,-0.00560723338276148,-0.999968409538269,-0.0056400066241622,-0.0055919885635376,-0.999968528747559,-0.00563760614022613,-0.00561363575980067,-0.999968349933624,-0.00768039282411337,-0.00205795024521649,-0.999968409538269,-0.00768046360462904,-0.00207337131723762,-0.999968409538269,-0.00768046267330647,-0.00208877306431532,-0.999968349933624,-0.00767269264906645,-0.00207128911279142,-0.999968409538269,-0.00768046360462904,0.00205796957015991,-0.999968409538269,-0.00768039328977466,0.00205795094370842,-0.999968469142914,-0.00768039328977466,0.00205795140936971,-0.999968409538269,-0.0076804650016129,0.00205797026865184,-0.999968409538269,-0.00562240229919553,0.00562247959896922,-0.999968469142914, +-0.00560716213658452,0.00563128339126706,-0.999968409538269,-0.00559191964566708,0.0056400834582746,-0.999968528747559,-0.00561360223218799,0.00563772255554795,-0.999968349933624,-0.00205803848803043,0.00768037419766188,-0.999968409538269,-0.0020756849553436,0.00768053671345115,-0.999968409538269,-0.00209328765049577,0.00768053624778986,-0.999968349933624,-0.00207328284159303,0.00767157133668661,-0.999968409538269,0.00205808226019144,0.00768053671345115,-0.999968409538269,0.00205802358686924,0.00768031599000096,-0.999968409538269,0.0020580233540386,0.0076803145930171,-0.999968469142914,0.00205808272585273,0.00768053671345115,-0.999968409538269,0.00562236225232482,0.00562243908643723,-0.999968469142914,0.00563111994415522,0.00560714909806848,-0.999968409538269,0.00563992140814662,0.00559190334752202,-0.999968469142914,0.0056376070715487,0.00561363715678453,-0.999968409538269,0.0076802778057754,0.00205791927874088,-0.999968469142914,0.00768034672364593,0.00207554106600583,-0.999968409538269,0.00768034672364593,0.00209314376115799,-0.999968349933624,0.00767147494480014,0.00207316409796476,-0.999968469142914,0.00768034672364593,-0.00205793813802302,-0.999968409538269,0.00768149364739656,-0.00205604475922883,-0.999968409538269,0.00768259447067976,-0.00205413927324116,-0.999968349933624,0.00768034532666206,-0.00205573718994856,-0.999968409538269,0.0284494925290346,-0.99959522485733,-1.59522767262388e-006,0.0284494925290346,-0.99959522485733,-1.28429221035731e-007,0.0284494925290346,-0.99959522485733,-9.7778502095025e-007,0.0103212837129831,-0.999946713447571,-4.65758880352496e-008,0.0103212846443057,-0.999946713447571,-2.93448738375446e-006,0.0103212837129831,-0.999946713447571,-9.7812835520017e-007,-0.0103212846443057,-0.999946713447571,-2.93448738375446e-006,-0.0103212837129831,-0.999946713447571,-2.58010418585641e-011,-0.0103212837129831,-0.999946713447571,-9.78127900452819e-007,-0.0284494925290346,-0.99959522485733,-2.57919727242317e-011,-0.0284494925290346,-0.99959522485733,-1.46683805724024e-006,-0.0284494925290346,-0.99959522485733,-9.77783429334522e-007, +-0.0395437143743038,-0.999217867851257,-1.4662842886537e-006,-0.0395437143743038,-0.999217867851257,-2.93228231385001e-006,-0.0395437143743038,-0.999217867851257,-9.77414060798765e-007,-0.040401067584753,-0.999183535575867,-2.93218158731179e-006,-0.040401067584753,-0.999183535575867,-1.82412051685787e-007,-0.040401067584753,-0.999183535575867,-9.77380523181637e-007,-0.0301568135619164,-0.999545276165009,-1.36158931240971e-007,-0.0301568135619164,-0.999545276165009,-1.36159258090629e-007,-0.0301568135619164,-0.999545276165009,-9.77734543994302e-007,-0.0111542204394937,-0.999937772750854,-5.03617627600761e-008,-0.0111542204394937,-0.999937772750854,-0,-0.0111542204394937,-0.999937772750854,-9.78119032879476e-007,0.0111542204394937,-0.999937772750854,0,0.0111542204394937,-0.999937772750854,0,0.0111542204394937,-0.999937772750854,-9.78119715000503e-007,0.0301568135619164,-0.999545276165009,0,0.0301568135619164,-0.999545276165009,0,0.0301568135619164,-0.999545276165009,-9.7773613561003e-007,0.040401067584753,-0.999183535575867,0,0.040401067584753,-0.999183535575867,-2.93218158731179e-006,0.040401067584753,-0.999183535575867,-9.77382569544716e-007,0.0395437143743038,-0.999217867851257,-2.93228231385001e-006,0.0395437143743038,-0.999217867851257,-1.64476682584791e-006,0.0395437143743038,-0.999217867851257,-9.77416107161844e-007 + } + BinormalsW: *168 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + + } + LayerElementTangent: 0 { + Version: 102 + Name: "map1" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Tangents: *504 { + a: 0.999545276165009,-0.030156834051013,3.76545699509734e-006,0.999545276165009,-0.030156834051013,3.82287225875189e-006,0.999545276165009,-0.030156834051013,-1.92377598295934e-008,0.999937832355499,-0.0111528877168894,-3.86721694667358e-006,0.999937832355499,-0.0111528877168894,3.80325468540832e-006,0.999937832355499,-0.0111528877168894,-7.13925274453686e-009,0.999937832355499,0.0111528877168894,-7.62804484111257e-006,0.999937832355499,0.0111528877168894,-3.78201275452739e-006,0.999937832355499,0.0111528877168894,7.0613208613679e-009,0.999545276165009,0.030156834051013,-3.82304779122933e-006,0.999545276165009,0.030156834051013,-7.58874648454366e-006,0.999545276165009,0.030156834051013,1.91598577004015e-008,0.999183595180511,0.0404003821313381,-0,0.999183595180511,0.0404003821313381,-3.82166399504058e-006,0.999183595180511,0.0404003821313381,2.56812437982035e-008,0.999217808246613,0.0395448990166187,-3.82185316993855e-006,0.999217808246613,0.0395448990166187,-0,0.999217808246613,0.0395448990166187,2.5136616343957e-008,0.999595761299133,0.0284317452460527,3.82336338589084e-006,0.999595761299133,0.0284317452460527,-3.82329881176702e-006,0.999595761299133,0.0284317452460527,1.80616090972308e-008,0.999946892261505,0.0103161819279194,3.82464941139915e-006,0.999946892261505,0.0103161819279194,3.82470625481801e-006,0.999946892261505,0.0103161819279194,6.528646956383e-009,0.999946892261505,-0.0103161819279194,6.9662141723506e-013,0.999946892261505,-0.0103161819279194,3.82464941139915e-006,0.999946892261505,-0.0103161819279194,-6.60657972773038e-009,0.999595761299133,-0.0284317452460527,3.82329881176702e-006,0.999595761299133,-0.0284317452460527,6.96376767014839e-013,0.999595761299133,-0.0284317452460527,-1.81395147791363e-008,0.999217808246613,-0.0395448990166187,-0,0.999217808246613,-0.0395448990166187,3.82185316993855e-006,0.999217808246613,-0.0395448990166187,-2.52144918277963e-008,0.999183595180511,-0.0404003821313381,3.82148891731049e-006,0.999183595180511,-0.0404003821313381,-0,0.999183595180511,-0.0404003821313381,-2.57591175056859e-008, +-0.373093396425247,-0.918430626392365,0.131478279829025,-0.373095005750656,-0.91843056678772,0.131474688649178,-0.136122912168503,-0.981928467750549,-0.131480246782303,-0.136115908622742,-0.981929063796997,-0.131482809782028,-0.608831942081451,-0.7823326587677,-0.131451413035393,-0.608882308006287,-0.782282590866089,-0.131515443325043,-0.78240430355072,-0.608758747577667,0.131363093852997,-0.782354712486267,-0.608808517456055,0.131427973508835,-0.918427646160126,-0.373108863830566,-0.131455138325691,-0.918432891368866,-0.373089611530304,-0.13147309422493,-0.981935203075409,-0.136098086833954,0.131456285715103,-0.981930017471313,-0.136117041110992,0.131474614143372,-0.981929361820221,0.136115938425064,-0.131480813026428,-0.981928884983063,0.136117696762085,-0.131482481956482,-0.918432295322418,0.373093396425247,0.131466418504715,-0.918432593345642,0.37309193611145,0.131468459963799,-0.782329082489014,0.608834087848663,-0.131462037563324,-0.782334685325623,0.60882842540741,-0.131455227732658,-0.608866393566132,0.782297730445862,0.131499141454697,-0.608860015869141,0.782303690910339,0.13149306178093,-0.37311178445816,0.918426752090454,-0.131453767418861,-0.37308943271637,0.918432354927063,-0.131477326154709,-0.136087760329247,0.981936633586884,0.131455659866333,-0.136115461587906,0.981930494308472,0.13147309422493,0.136109948158264,0.981931030750275,-0.131474480032921,0.136115372180939,0.98193085193634,-0.131470397114754,0.373087644577026,0.918433248996735,0.131476923823357,0.373085409402847,0.918434262275696,0.131476119160652,0.608831942081451,0.782331466674805,-0.131457820534706,0.608831644058228,0.782332360744476,-0.131453990936279,0.782301545143127,0.608863413333893,0.131490215659142,0.782303035259247,0.608861982822418,0.131487786769867,0.9184250831604,0.373114675283432,-0.131457254290581,0.918430924415588,0.373093038797379,-0.131477698683739,0.981935262680054,0.136097982525826,0.131455227732658,0.981929540634155,0.136119395494461,0.131475910544395,0.98192822933197,-0.136122778058052,-0.131482183933258,0.981928408145905,-0.136122092604637,-0.131481528282166, +0.918431401252747,-0.373094081878662,0.131471529603004,0.918431043624878,-0.373094886541367,0.131471067667007,0.78233003616333,-0.608834087848663,-0.131456464529037,0.782334566116333,-0.608829498291016,-0.131450787186623,0.608866930007935,-0.782297253608704,0.131500348448753,0.608861148357391,-0.782302379608154,0.131496116518974,0.373099714517593,-0.918430685997009,-0.131460502743721,0.373081147670746,-0.918435156345367,-0.131481230258942,0.136093631386757,-0.981937050819397,0.13144639134407,0.136108934879303,-0.981931686401367,0.131470516324043,-0.500014305114746,-0.866014719009399,0.0020579332485795,-0.86601448059082,-0.500014305114746,-0.0021370267495513,-0.866014182567596,-0.500014543533325,-0.00221623876132071,-0.500014185905457,-0.866014957427979,0.00197871960699558,-0.866030693054199,-0.499986618757248,0.00205016974359751,-0.999997854232788,-1.59181236085715e-005,-0.00207722699269652,-0.999997913837433,-1.59977516887011e-005,-0.00208880915306509,-0.866030812263489,-0.499986469745636,0.00203858548775315,-0.999997854232788,1.58477341756225e-005,0.00206564483232796,-0.866030693054199,0.499986588954926,-0.00205618957988918,-0.866030871868134,0.499986290931702,-0.00206220708787441,-0.999997973442078,1.58108286996139e-005,0.00205962522886693,-0.866014957427979,0.500013887882233,0.00205781636759639,-0.500014245510101,0.866014778614044,-0.00204032938927412,-0.500014305114746,0.866014778614044,-0.00202272413298488,-0.866015076637268,0.500013828277588,0.00207542208954692,-0.499986946582794,0.866030514240265,0.00205791345797479,-1.58973562065512e-005,0.999997854232788,-0.00207331031560898,-1.63693348440574e-005,0.999997913837433,-0.00208870903588831,-0.499987334012985,0.866030335426331,0.00204251450486481,1.57790636876598e-005,0.999997973442078,0.00205790903419256,0.499986946582794,0.866030514240265,-0.00205791275948286,0.499986916780472,0.866030514240265,-0.00205791229382157,1.54253848450026e-005,0.999997973442078,0.00205791252665222,0.500014245510101,0.866014719009399,0.00205793371424079,0.866015434265137,0.500013291835785,-0.00204023695550859, +0.866015493869781,0.500013113021851,-0.00202263705432415,0.500014424324036,0.866014719009399,0.00207553408108652,0.866031050682068,0.4999860227108,0.00205781939439476,0.999997854232788,1.59149749379139e-005,-0.00207562372088432,0.999997794628143,1.60501749633113e-005,-0.00209322618320584,0.866031050682068,0.499986112117767,0.00204021646641195,0.999997973442078,-1.57797785504954e-005,0.00205802172422409,0.866031050682068,-0.4999860227108,-0.00205780332908034,0.866031169891357,-0.4999860227108,-0.00205780239775777,0.999997973442078,-1.57797821884742e-005,0.00205802218988538,0.866015255451202,-0.50001335144043,0.00205782172270119,0.500014185905457,-0.866014838218689,-0.00204029912129045,0.500014066696167,-0.866014897823334,-0.00202269526198506,0.866015315055847,-0.500013411045074,0.00207542581483722,0.499986946582794,-0.866030514240265,0.00205788249149919,1.58492712216685e-005,-0.999997854232788,-0.00207548029720783,1.56306214194046e-005,-0.999997794628143,-0.00209308532066643,0.499987065792084,-0.86603045463562,0.00204027956351638,-1.58440507220803e-005,-0.999997973442078,0.00205787713639438,-0.499987006187439,-0.86603057384491,-0.00206011440604925,-0.49998727440834,-0.86603045463562,-0.0020623174495995,-1.61809985002037e-005,-0.999997973442078,0.00205567362718284,0.99959522485733,0.0284494925290346,-4.47165257355664e-006,0.99959522485733,0.0284494925290346,-4.51341884399881e-006,0.99959522485733,0.0284494925290346,2.78025282796079e-008,0.99994683265686,0.0103212846443057,-4.5150059122534e-006,0.99994683265686,0.0103212855756283,3.02892964043622e-008,0.99994683265686,0.0103212846443057,1.00698649418973e-008,0.99994683265686,-0.0103212855756283,-3.02892964043622e-008,0.99994683265686,-0.0103212846443057,-2.66314097510656e-013,0.99994683265686,-0.0103212846443057,-1.01222887849417e-008,0.99959522485733,-0.0284494925290346,-7.34065694514563e-013,0.99959522485733,-0.0284494925290346,-4.17476968550545e-008,0.99959522485733,-0.0284494925290346,-2.78549325827271e-008,0.999217867851257,-0.0395437143743038,-5.80277159656362e-008, +0.999217867851257,-0.0395437143743038,-1.16044105880064e-007,0.999217867851257,-0.0395437143743038,-3.87070713259163e-008,0.999183535575867,-0.040401067584753,-1.18560073758545e-007,0.999183535575867,-0.040401067584753,4.51134428658406e-006,0.999183535575867,-0.040401067584753,-3.95457178115066e-008,0.999545276165009,-0.0301568135619164,4.5129772843211e-006,0.999545276165009,-0.0301568135619164,4.51298819825752e-006,0.999545276165009,-0.0301568135619164,-2.9524999334285e-008,0.999937891960144,-0.0111542213708162,4.51476080343127e-006,0.999937891960144,-0.0111542213708162,0,0.999937891960144,-0.0111542213708162,-1.0937049488291e-008,0.999937891960144,0.0111542213708162,0,0.999937891960144,0.0111542213708162,0,0.999937891960144,0.0111542213708162,1.0884626533425e-008,0.999545276165009,0.0301568135619164,0,0.999545276165009,0.0301568135619164,0,0.999545276165009,0.0301568135619164,2.94725968075227e-008,0.999183535575867,0.040401067584753,0,0.999183535575867,0.040401067584753,1.18560073758545e-007,0.999183535575867,0.040401067584753,3.94933330483127e-008,0.999217867851257,0.0395437143743038,1.16044105880064e-007,0.999217867851257,0.0395437143743038,-4.45366913481848e-006,0.999217867851257,0.0395437143743038,3.86546865627224e-008 + } + TangentsW: *168 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementUV: 0 { + Version: 101 + Name: "map1" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *152 { + a: 0.578125,0.0209335386753082,0.635316491127014,0.078125,0.5,0.150000005960464,0.5,0,0.421875,0.0209335386753082,0.364683538675308,0.078125,0.34375,0.15625,0.364683538675308,0.234375,0.421875,0.291566461324692,0.5,0.3125,0.578125,0.291566461324692,0.635316491127014,0.234375,0.65625,0.15625,0.624999940395355,0.686170518398285,0.622396051883698,0.688439846038818,0.606770515441895,0.688439846038818,0.604166686534882,0.686170518398285,0.37760391831398,0.688439846038818,0.375,0.686171174049377,0.395833343267441,0.686170637607574,0.393229454755783,0.688439905643463,0.398437261581421,0.688439846038818,0.416666686534882,0.686170518398285,0.414062798023224,0.688439905643463,0.419270604848862,0.688439846038818,0.437500029802322,0.686170518398285,0.434896141290665,0.688439846038818,0.440103948116302,0.688439846038818,0.458333373069763,0.686170637607574,0.455729454755783,0.688439905643463,0.460937291383743,0.688439846038818,0.479166746139526,0.686170518398285,0.476562798023224,0.688439905643463,0.481770634651184,0.688439846038818,0.500000059604645,0.686170518398285,0.497396171092987,0.688439846038818,0.502603948116302,0.688439846038818,0.520833313465118,0.686170637607574,0.518229484558105,0.688439905643463,0.523437261581421,0.688439846038818,0.541666686534882,0.686170518398285,0.539062798023224,0.688439905643463,0.544270575046539,0.688439846038818,0.5625,0.686170518398285,0.559896111488342,0.688439846038818,0.565103888511658,0.688439846038818,0.583333313465118,0.686170637607574,0.580729424953461,0.688439905643463,0.585937201976776,0.688439846038818,0.601562738418579,0.688439905643463,0.375,0.3125,0.395833343267441,0.3125,0.416666686534882,0.3125,0.437500029802322,0.3125,0.458333373069763,0.3125,0.479166716337204,0.3125,0.500000059604645,0.3125,0.520833373069763,0.3125,0.541666686534882,0.3125,0.5625,0.3125,0.583333313465118,0.3125,0.604166626930237,0.3125,0.624999940395355,0.3125,0.60149073600769,0.900783360004425,0.558595716953278,0.943678379058838,0.5,0.837499976158142,0.5,0.959379076957703,0.441404283046722, +0.943678379058838,0.39850926399231,0.900783360004425,0.382808595895767,0.842187643051147,0.39850926399231,0.78359192609787,0.441404283046722,0.740696907043457,0.5,0.724996209144592,0.558595716953278,0.740696907043457,0.60149073600769,0.78359192609787,0.617191433906555,0.842187643051147 + } + UVIndex: *168 { + a: 0,1,2,3,0,2,4,3,2,5,4,2,6,5,2,7,6,2,8,7,2,9,8,2,10,9,2,11,10,2,12,11,2,1,12,2,13,14,15,16,17,18,19,20,21,19,22,23,24,22,25,26,27,25,28,29,30,28,31,32,33,31,34,35,36,34,37,38,39,37,40,41,42,40,43,44,45,43,46,47,48,46,16,49,50,51,19,18,51,52,22,19,52,53,25,22,53,54,28,25,54,55,31,28,55,56,34,31,56,57,37,34,57,58,40,37,58,59,43,40,59,60,46,43,60,61,16,46,61,62,13,16,63,64,65,64,66,65,66,67,65,67,68,65,68,69,65,69,70,65,70,71,65,71,72,65,72,73,65,73,74,65,74,75,65,75,63,65 + } + } + LayerElementSmoothing: 0 { + Version: 102 + Name: "" + MappingInformationType: "ByEdge" + ReferenceInformationType: "Direct" + Smoothing: *84 { + a: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + } + } + LayerElementMaterial: 0 { + Version: 101 + Name: "" + MappingInformationType: "AllSame" + ReferenceInformationType: "IndexToDirect" + Materials: *1 { + a: 0 + } + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementBinormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementTangent" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementSmoothing" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 0 + } + } + } + Geometry: 1449862384, "Geometry::", "Mesh" { + Vertices: *402 { + a: 0.648286879062653,93.6593627929688,21.9559593200684,0.374288618564606,93.385368347168,21.9559593200684,0,93.2850799560547,21.9559593200684,-0.374288618564606,93.385368347168,21.9559593200684,-0.648286879062653,93.6593627929688,21.9559593200684,-0.748577237129211,94.0336532592773,21.9559593200684,-0.648286879062653,94.4079437255859,21.9559593200684,-0.374288618564606,94.6819381713867,21.9559593200684,0,94.7822341918945,21.9559593200684,0.374288618564606,94.6819381713867,21.9559593200684,0.648286879062653,94.4079437255859,21.9559593200684,0.748577237129211,94.0336532592773,21.9559593200684,1.25239408016205,93.3105850219727,21.6670188903809,0.723070085048676,92.7812576293945,21.6670188903809,0,92.587516784668,21.6670188903809,-0.723070085048676,92.7812576293945,21.6670188903809,-1.25239408016205,93.3105850219727,21.6670188903809,-1.44614017009735,94.0336532592773,21.6670188903809,-1.25239408016205,94.756721496582,21.6670188903809,-0.723070085048676,95.2860488891602,21.6670188903809,0,95.4797973632813,21.6670188903809,0.723070085048676,95.2860488891602,21.6670188903809,1.25239408016205,94.756721496582,21.6670188903809,1.44614017009735,94.0336532592773,21.6670188903809,1.77115273475647,93.0110778808594,21.2073822021484,1.02257549762726,92.2624969482422,21.2073822021484,0,91.9885025024414,21.2073822021484,-1.02257549762726,92.2624969482422,21.2073822021484,-1.77115273475647,93.0110778808594,21.2073822021484,-2.04515099525452,94.0336532592773,21.2073822021484,-1.77115273475647,95.0562286376953,21.2073822021484,-1.02257549762726,95.804801940918,21.2073822021484,0,96.0788040161133,21.2073822021484,1.02257549762726,95.804801940918,21.2073822021484,1.77115273475647,95.0562286376953,21.2073822021484,2.04515099525452,94.0336532592773,21.2073822021484,2.16921043395996,92.7812576293945,20.6083717346191,1.25239419937134,91.8644409179688,20.6083717346191,0,91.5288696289063,20.6083717346191,-1.25239419937134,91.8644409179688,20.6083717346191,-2.16921043395996,92.7812576293945,20.6083717346191,-2.50478839874268,94.0336532592773,20.6083717346191, +-2.16921043395996,95.2860488891602,20.6083717346191,-1.25239419937134,96.2028656005859,20.6083717346191,0,96.538444519043,20.6083717346191,1.25239419937134,96.2028656005859,20.6083717346191,2.16921043395996,95.2860488891602,20.6083717346191,2.50478839874268,94.0336532592773,20.6083717346191,2.41943955421448,92.6367874145508,19.9108085632324,1.39686417579651,91.6142120361328,19.9108085632324,0,91.2399291992188,19.9108085632324,-1.39686417579651,91.6142120361328,19.9108085632324,-2.41943955421448,92.6367874145508,19.9108085632324,-2.79372835159302,94.0336532592773,19.9108085632324,-2.41943955421448,95.4305191040039,19.9108085632324,-1.39686417579651,96.4530944824219,19.9108085632324,0,96.8273849487305,19.9108085632324,1.39686417579651,96.4530944824219,19.9108085632324,2.41943955421448,95.4305191040039,19.9108085632324,2.79372835159302,94.0336532592773,19.9108085632324,2.5047881603241,92.5875091552734,19.1622314453125,1.44614017009735,91.5288619995117,19.1622314453125,0,91.1413726806641,19.1622314453125,-1.44614017009735,91.5288619995117,19.1622314453125,-2.5047881603241,92.5875091552734,19.1622314453125,-2.8922803401947,94.0336532592773,19.1622314453125,-2.5047881603241,95.4797897338867,19.1622314453125,-1.44614017009735,96.5384368896484,19.1622295379639,0,96.9259338378906,19.1622314453125,1.44614017009735,96.5384368896484,19.1622295379639,2.5047881603241,95.4797897338867,19.1622314453125,2.8922803401947,94.0336532592773,19.1622314453125,2.41943955421448,92.6367874145508,18.4136543273926,1.39686417579651,91.6142120361328,18.4136543273926,0,91.2399291992188,18.4136543273926,-1.39686417579651,91.6142120361328,18.4136543273926,-2.41943955421448,92.6367874145508,18.4136543273926,-2.79372835159302,94.0336532592773,18.4136543273926,-2.41943955421448,95.4305191040039,18.4136543273926,-1.39686417579651,96.4530944824219,18.4136543273926,0,96.8273849487305,18.4136543273926,1.39686417579651,96.4530944824219,18.4136543273926,2.41943955421448,95.4305191040039,18.4136543273926,2.79372835159302,94.0336532592773,18.4136543273926,2.16921043395996,92.7812576293945,17.7160911560059, +1.25239419937134,91.8644409179688,17.7160911560059,0,91.5288696289063,17.7160911560059,-1.25239419937134,91.8644409179688,17.7160911560059,-2.16921043395996,92.7812576293945,17.7160911560059,-2.50478839874268,94.0336532592773,17.7160911560059,-2.16921043395996,95.2860488891602,17.7160911560059,-1.25239419937134,96.2028656005859,17.7160911560059,0,96.538444519043,17.7160911560059,1.25239419937134,96.2028656005859,17.7160911560059,2.16921043395996,95.2860488891602,17.7160911560059,2.50478839874268,94.0336532592773,17.7160911560059,1.77115273475647,93.0110778808594,17.1170806884766,1.02257549762726,92.2624969482422,17.1170806884766,0,91.9885025024414,17.1170806884766,-1.02257549762726,92.2624969482422,17.1170806884766,-1.77115273475647,93.0110778808594,17.1170806884766,-2.04515099525452,94.0336532592773,17.1170806884766,-1.77115273475647,95.0562286376953,17.1170806884766,-1.02257549762726,95.804801940918,17.1170806884766,0,96.0788040161133,17.1170806884766,1.02257549762726,95.804801940918,17.1170806884766,1.77115273475647,95.0562286376953,17.1170806884766,2.04515099525452,94.0336532592773,17.1170806884766,1.25239408016205,93.3105850219727,16.6574440002441,0.723070085048676,92.7812576293945,16.6574440002441,0,92.587516784668,16.6574440002441,-0.723070085048676,92.7812576293945,16.6574440002441,-1.25239408016205,93.3105850219727,16.6574440002441,-1.44614017009735,94.0336532592773,16.6574440002441,-1.25239408016205,94.756721496582,16.6574440002441,-0.723070085048676,95.2860488891602,16.6574440002441,0,95.4797973632813,16.6574440002441,0.723070085048676,95.2860488891602,16.6574440002441,1.25239408016205,94.756721496582,16.6574440002441,1.44614017009735,94.0336532592773,16.6574440002441,0.648286879062653,93.6593627929688,16.3685035705566,0.374288618564606,93.385368347168,16.3685035705566,0,93.2850799560547,16.3685035705566,-0.374288618564606,93.385368347168,16.3685035705566,-0.648286879062653,93.6593627929688,16.3685035705566,-0.748577237129211,94.0336532592773,16.3685035705566,-0.648286879062653,94.4079437255859,16.3685035705566, +-0.374288618564606,94.6819381713867,16.3685035705566,0,94.7822341918945,16.3685035705566,0.374288618564606,94.6819381713867,16.3685035705566,0.648286879062653,94.4079437255859,16.3685035705566,0.748577237129211,94.0336532592773,16.3685035705566,0,94.0336532592773,22.0545120239258,0,94.0336532592773,16.2699508666992 + } + PolygonVertexIndex: *552 { + a: 0,1,13,-13,1,2,14,-14,2,3,15,-15,3,4,16,-16,4,5,17,-17,5,6,18,-18,6,7,19,-19,7,8,20,-20,8,9,21,-21,9,10,22,-22,10,11,23,-23,11,0,12,-24,12,13,25,-25,13,14,26,-26,14,15,27,-27,15,16,28,-28,16,17,29,-29,17,18,30,-30,18,19,31,-31,19,20,32,-32,20,21,33,-33,21,22,34,-34,22,23,35,-35,23,12,24,-36,24,25,37,-37,25,26,38,-38,26,27,39,-39,27,28,40,-40,28,29,41,-41,29,30,42,-42,30,31,43,-43,31,32,44,-44,32,33,45,-45,33,34,46,-46,34,35,47,-47,35,24,36,-48,36,37,49,-49,37,38,50,-50,38,39,51,-51,39,40,52,-52,40,41,53,-53,41,42,54,-54,42,43,55,-55,43,44,56,-56,44,45,57,-57,45,46,58,-58,46,47,59,-59,47,36,48,-60,48,49,61,-61,49,50,62,-62,50,51,63,-63,51,52,64,-64,52,53,65,-65,53,54,66,-66,54,55,67,-67,55,56,68,-68,56,57,69,-69,57,58,70,-70,58,59,71,-71,59,48,60,-72,60,61,73,-73,61,62,74,-74,62,63,75,-75,63,64,76,-76,64,65,77,-77,65,66,78,-78,66,67,79,-79,67,68,80,-80,68,69,81,-81,69,70,82,-82,70,71,83,-83,71,60,72,-84,72,73,85,-85,73,74,86,-86,74,75,87,-87,75,76,88,-88,76,77,89,-89,77,78,90,-90,78,79,91,-91,79,80,92,-92,80,81,93,-93,81,82,94,-94,82,83,95,-95,83,72,84,-96,84,85,97,-97,85,86,98,-98,86,87,99,-99,87,88,100,-100,88,89,101,-101,89,90,102,-102,90,91,103,-103,91,92,104,-104,92,93,105,-105,93,94,106,-106,94,95,107,-107,95,84,96,-108,96,97,109,-109,97,98,110,-110,98,99,111,-111,99,100,112,-112,100,101,113,-113,101,102,114,-114,102,103,115,-115,103,104,116,-116,104,105,117,-117,105,106,118,-118,106,107,119,-119,107,96,108,-120,108,109,121,-121,109,110,122,-122,110,111,123,-123,111,112,124,-124,112,113,125,-125,113,114,126,-126,114,115,127,-127,115,116,128,-128,116,117,129,-129,117,118,130,-130,118,119,131,-131,119,108,120,-132,1,0,-133,2,1,-133,3,2,-133,4,3,-133,5,4,-133,6,5,-133,7,6,-133,8,7,-133,9,8,-133,10,9,-133,11,10,-133,0,11,-133,120,121,-134,121,122,-134,122,123,-134,123,124,-134,124,125,-134,125,126,-134,126,127,-134,127,128,-134,128,129,-134,129,130,-134,130,131,-134,131,120,-134 + } + Edges: *276 { + a: 0,1,2,3,4,5,6,8,9,10,12,13,14,16,17,18,20,21,22,24,25,26,28,29,30,32,33,34,36,37,38,40,41,42,44,46,49,50,51,53,54,57,58,61,62,65,66,69,70,73,74,77,78,81,82,85,86,89,90,94,97,98,99,101,102,105,106,109,110,113,114,117,118,121,122,125,126,129,130,133,134,137,138,142,145,146,147,149,150,153,154,157,158,161,162,165,166,169,170,173,174,177,178,181,182,185,186,190,193,194,195,197,198,201,202,205,206,209,210,213,214,217,218,221,222,225,226,229,230,233,234,238,241,242,243,245,246,249,250,253,254,257,258,261,262,265,266,269,270,273,274,277,278,281,282,286,289,290,291,293,294,297,298,301,302,305,306,309,310,313,314,317,318,321,322,325,326,329,330,334,337,338,339,341,342,345,346,349,350,353,354,357,358,361,362,365,366,369,370,373,374,377,378,382,385,386,387,389,390,393,394,397,398,401,402,405,406,409,410,413,414,417,418,421,422,425,426,430,433,434,435,437,438,441,442,445,446,449,450,453,454,457,458,461,462,465,466,469,470,473,474,478,481,482,485,488,491,494,497,500,503,506,509,512,517,518,520,523,526,529,532,535,538,541,544,547 + } + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 102 + Name: "" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Normals: *1656 { + a: 0.289761811494827,-0.16729399561882,0.942364513874054,0.167292073369026,-0.289760500192642,0.942365229129791,0.270243257284164,-0.468077123165131,0.841351509094238,0.468076437711716,-0.27024319767952,0.841351866722107,0.167292073369026,-0.289760500192642,0.942365229129791,-1.25649273741146e-006,-0.334590792655945,0.942363560199738,-7.23545554137672e-007,-0.540489435195923,0.841350913047791,0.270243257284164,-0.468077123165131,0.841351509094238,-1.25649273741146e-006,-0.334590792655945,0.942363560199738,-0.167291983962059,-0.289760828018188,0.942365169525146,-0.270243763923645,-0.468076288700104,0.841351747512817,-7.23545554137672e-007,-0.540489435195923,0.841350913047791,-0.167291983962059,-0.289760828018188,0.942365169525146,-0.28975784778595,-0.167291864752769,0.942366182804108,-0.468074500560761,-0.27024257183075,0.841353237628937,-0.270243763923645,-0.468076288700104,0.841351747512817,-0.28975784778595,-0.167291864752769,0.942366182804108,-0.334584772586823,-9.30349486338855e-008,0.942365765571594,-0.540484488010406,1.04608609774459e-007,0.841354012489319,-0.468074500560761,-0.27024257183075,0.841353237628937,-0.334584772586823,-9.30349486338855e-008,0.942365765571594,-0.289758443832397,0.167293131351471,0.942365705966949,-0.468075811862946,0.27024444937706,0.841351866722107,-0.540484488010406,1.04608609774459e-007,0.841354012489319,-0.289758443832397,0.167293131351471,0.942365705966949,-0.167293146252632,0.28975909948349,0.942365527153015,-0.270245105028152,0.468078225851059,0.841350376605988,-0.468075811862946,0.27024444937706,0.841351866722107,-0.167293146252632,0.28975909948349,0.942365527153015,1.58633429236943e-006,0.334586709737778,0.942365050315857,8.32514217563585e-007,0.540490329265594,0.841350317001343,-0.270245105028152,0.468078225851059,0.841350376605988,1.58633429236943e-006,0.334586709737778,0.942365050315857,0.167293339967728,0.289758056402206,0.942365825176239,0.270244091749191,0.46807736158371,0.841351211071014,8.32514217563585e-007,0.540490329265594,0.841350317001343, +0.167293339967728,0.289758056402206,0.942365825176239,0.289760500192642,0.167292311787605,0.942365229129791,0.468075722455978,0.270242840051651,0.841352581977844,0.270244091749191,0.46807736158371,0.841351211071014,0.289760500192642,0.167292311787605,0.942365229129791,0.334590673446655,9.27845178466669e-008,0.942363679409027,0.540487110614777,-9.58907975245893e-008,0.841352343559265,0.468075722455978,0.270242840051651,0.841352581977844,0.334590673446655,9.27845178466669e-008,0.942363679409027,0.289761811494827,-0.16729399561882,0.942364513874054,0.468076437711716,-0.27024319767952,0.841351866722107,0.540487110614777,-9.58907975245893e-008,0.841352343559265,0.468076437711716,-0.27024319767952,0.841351866722107,0.270243257284164,-0.468077123165131,0.841351509094238,0.364803671836853,-0.631861448287964,0.683863639831543,0.63186115026474,-0.364804595708847,0.683863401412964,0.270243257284164,-0.468077123165131,0.841351509094238,-7.23545554137672e-007,-0.540489435195923,0.841350913047791,-2.07951188713196e-007,-0.729610919952393,0.683862507343292,0.364803671836853,-0.631861448287964,0.683863639831543,-7.23545554137672e-007,-0.540489435195923,0.841350913047791,-0.270243763923645,-0.468076288700104,0.841351747512817,-0.364804297685623,-0.631861507892609,0.68386322259903,-2.07951188713196e-007,-0.729610919952393,0.683862507343292,-0.270243763923645,-0.468076288700104,0.841351747512817,-0.468074500560761,-0.27024257183075,0.841353237628937,-0.631860256195068,-0.364804595708847,0.683864235877991,-0.364804297685623,-0.631861507892609,0.68386322259903,-0.468074500560761,-0.27024257183075,0.841353237628937,-0.540484488010406,1.04608609774459e-007,0.841354012489319,-0.729609370231628,2.39458501027912e-007,0.683864235877991,-0.631860256195068,-0.364804595708847,0.683864235877991,-0.540484488010406,1.04608609774459e-007,0.841354012489319,-0.468075811862946,0.27024444937706,0.841351866722107,-0.631861209869385,0.364805728197098,0.683862686157227,-0.729609370231628,2.39458501027912e-007,0.683864235877991,-0.468075811862946,0.27024444937706,0.841351866722107, +-0.270245105028152,0.468078225851059,0.841350376605988,-0.364805787801743,0.631860792636871,0.683863043785095,-0.631861209869385,0.364805728197098,0.683862686157227,-0.270245105028152,0.468078225851059,0.841350376605988,8.32514217563585e-007,0.540490329265594,0.841350317001343,3.46584783983417e-007,0.729610145092011,0.683863341808319,-0.364805787801743,0.631860792636871,0.683863043785095,8.32514217563585e-007,0.540490329265594,0.841350317001343,0.270244091749191,0.46807736158371,0.841351211071014,0.364805817604065,0.631861329078674,0.683862507343292,3.46584783983417e-007,0.729610145092011,0.683863341808319,0.270244091749191,0.46807736158371,0.841351211071014,0.468075722455978,0.270242840051651,0.841352581977844,0.631860613822937,0.364805221557617,0.683863580226898,0.364805817604065,0.631861329078674,0.683862507343292,0.468075722455978,0.270242840051651,0.841352581977844,0.540487110614777,-9.58907975245893e-008,0.841352343559265,0.729609668254852,-2.26855192408948e-007,0.683863818645477,0.631860613822937,0.364805221557617,0.683863580226898,0.540487110614777,-9.58907975245893e-008,0.841352343559265,0.468076437711716,-0.27024319767952,0.841351866722107,0.63186115026474,-0.364804595708847,0.683863401412964,0.729609668254852,-2.26855192408948e-007,0.683863818645477,0.63186115026474,-0.364804595708847,0.683863401412964,0.364803671836853,-0.631861448287964,0.683863639831543,0.438133180141449,-0.75887143611908,0.481823056936264,0.758871555328369,-0.438134431838989,0.481821984052658,0.364803671836853,-0.631861448287964,0.683863639831543,-2.07951188713196e-007,-0.729610919952393,0.683862507343292,-3.752155919301e-007,-0.876268923282623,0.481822431087494,0.438133180141449,-0.75887143611908,0.481823056936264,-2.07951188713196e-007,-0.729610919952393,0.683862507343292,-0.364804297685623,-0.631861507892609,0.68386322259903,-0.438133358955383,-0.758872330188751,0.4818215072155,-3.752155919301e-007,-0.876268923282623,0.481822431087494,-0.364804297685623,-0.631861507892609,0.68386322259903,-0.631860256195068,-0.364804595708847,0.683864235877991, +-0.758871018886566,-0.438133835792542,0.481823116540909,-0.438133358955383,-0.758872330188751,0.4818215072155,-0.631860256195068,-0.364804595708847,0.683864235877991,-0.729609370231628,2.39458501027912e-007,0.683864235877991,-0.876268684864044,1.56339552859208e-007,0.48182275891304,-0.758871018886566,-0.438133835792542,0.481823116540909,-0.729609370231628,2.39458501027912e-007,0.683864235877991,-0.631861209869385,0.364805728197098,0.683862686157227,-0.75887131690979,0.438134402036667,0.481822162866592,-0.876268684864044,1.56339552859208e-007,0.48182275891304,-0.631861209869385,0.364805728197098,0.683862686157227,-0.364805787801743,0.631860792636871,0.683863043785095,-0.43813368678093,0.758868515491486,0.481827229261398,-0.75887131690979,0.438134402036667,0.481822162866592,-0.364805787801743,0.631860792636871,0.683863043785095,3.46584783983417e-007,0.729610145092011,0.683863341808319,1.04226014485675e-008,0.876264274120331,0.481830775737762,-0.43813368678093,0.758868515491486,0.481827229261398,3.46584783983417e-007,0.729610145092011,0.683863341808319,0.364805817604065,0.631861329078674,0.683862507343292,0.438134163618088,0.758869528770447,0.481825232505798,1.04226014485675e-008,0.876264274120331,0.481830775737762,0.364805817604065,0.631861329078674,0.683862507343292,0.631860613822937,0.364805221557617,0.683863580226898,0.75887143611908,0.438134670257568,0.481821745634079,0.438134163618088,0.758869528770447,0.481825232505798,0.631860613822937,0.364805221557617,0.683863580226898,0.729609668254852,-2.26855192408948e-007,0.683863818645477,0.876268684864044,-1.77184816152476e-007,0.481822699308395,0.75887143611908,0.438134670257568,0.481821745634079,0.729609668254852,-2.26855192408948e-007,0.683863818645477,0.63186115026474,-0.364804595708847,0.683863401412964,0.758871555328369,-0.438134431838989,0.481821984052658,0.876268684864044,-1.77184816152476e-007,0.481822699308395,0.758871555328369,-0.438134431838989,0.481821984052658,0.438133180141449,-0.75887143611908,0.481823056936264,0.484271019697189,-0.838784456253052,0.248842254281044, +0.838784873485565,-0.484271854162216,0.248838797211647,0.438133180141449,-0.75887143611908,0.481823056936264,-3.752155919301e-007,-0.876268923282623,0.481822431087494,-9.88131816370696e-008,-0.968543827533722,0.248843282461166,0.484271019697189,-0.838784456253052,0.248842254281044,-3.752155919301e-007,-0.876268923282623,0.481822431087494,-0.438133358955383,-0.758872330188751,0.4818215072155,-0.484270662069321,-0.838784635066986,0.248842298984528,-9.88131816370696e-008,-0.968543827533722,0.248843282461166,-0.438133358955383,-0.758872330188751,0.4818215072155,-0.758871018886566,-0.438133835792542,0.481823116540909,-0.83878481388092,-0.484271675348282,0.248839497566223,-0.484270662069321,-0.838784635066986,0.248842298984528,-0.758871018886566,-0.438133835792542,0.481823116540909,-0.876268684864044,1.56339552859208e-007,0.48182275891304,-0.968545496463776,-2.35269776993619e-008,0.248836919665337,-0.83878481388092,-0.484271675348282,0.248839497566223,-0.876268684864044,1.56339552859208e-007,0.48182275891304,-0.75887131690979,0.438134402036667,0.481822162866592,-0.838784694671631,0.484273582696915,0.248836144804955,-0.968545496463776,-2.35269776993619e-008,0.248836919665337,-0.75887131690979,0.438134402036667,0.481822162866592,-0.43813368678093,0.758868515491486,0.481827229261398,-0.484273076057434,0.838784694671631,0.248836874961853,-0.838784694671631,0.484273582696915,0.248836144804955,-0.43813368678093,0.758868515491486,0.481827229261398,1.04226014485675e-008,0.876264274120331,0.481830775737762,-7.05810023760023e-008,0.96854555606842,0.248836368322372,-0.484273076057434,0.838784694671631,0.248836874961853,1.04226014485675e-008,0.876264274120331,0.481830775737762,0.438134163618088,0.758869528770447,0.481825232505798,0.48427352309227,0.838785409927368,0.248833641409874,-7.05810023760023e-008,0.96854555606842,0.248836368322372,0.438134163618088,0.758869528770447,0.481825232505798,0.75887143611908,0.438134670257568,0.481821745634079,0.838785171508789,0.484273850917816,0.248833775520325,0.48427352309227,0.838785409927368,0.248833641409874, +0.75887143611908,0.438134670257568,0.481821745634079,0.876268684864044,-1.77184816152476e-007,0.481822699308395,0.968545615673065,-7.99917216909307e-008,0.248836129903793,0.838785171508789,0.484273850917816,0.248833775520325,0.876268684864044,-1.77184816152476e-007,0.481822699308395,0.758871555328369,-0.438134431838989,0.481821984052658,0.838784873485565,-0.484271854162216,0.248838797211647,0.968545615673065,-7.99917216909307e-008,0.248836129903793,0.838784873485565,-0.484271854162216,0.248838797211647,0.484271019697189,-0.838784456253052,0.248842254281044,0.499998390674591,-0.866026282310486,1.8221777864369e-008,0.866025507450104,-0.499999910593033,4.4187734715706e-007,0.484271019697189,-0.838784456253052,0.248842254281044,-9.88131816370696e-008,-0.968543827533722,0.248843282461166,2.04994904606792e-007,-1,1.81762152351439e-006,0.499998390674591,-0.866026282310486,1.8221777864369e-008,-9.88131816370696e-008,-0.968543827533722,0.248843282461166,-0.484270662069321,-0.838784635066986,0.248842298984528,-0.499998211860657,-0.866026520729065,1.79484527507157e-006,2.04994904606792e-007,-1,1.81762152351439e-006,-0.484270662069321,-0.838784635066986,0.248842298984528,-0.83878481388092,-0.484271675348282,0.248839497566223,-0.866025388240814,-0.500000238418579,6.83315626304193e-009,-0.499998211860657,-0.866026520729065,1.79484527507157e-006,-0.83878481388092,-0.484271675348282,0.248839497566223,-0.968545496463776,-2.35269776993619e-008,0.248836919665337,-1,-8.65532570060168e-008,4.55543469612962e-009,-0.866025388240814,-0.500000238418579,6.83315626304193e-009,-0.968545496463776,-2.35269776993619e-008,0.248836919665337,-0.838784694671631,0.484273582696915,0.248836144804955,-0.866025805473328,0.499999523162842,1.81306495505851e-006,-1,-8.65532570060168e-008,4.55543469612962e-009,-0.838784694671631,0.484273582696915,0.248836144804955,-0.484273076057434,0.838784694671631,0.248836874961853,-0.500001192092896,0.866024732589722,1.65589926837129e-006,-0.866025805473328,0.499999523162842,1.81306495505851e-006,-0.484273076057434,0.838784694671631,0.248836874961853, +-7.05810023760023e-008,0.96854555606842,0.248836368322372,-2.73326250521677e-008,1,1.11608216002423e-007,-0.500001192092896,0.866024732589722,1.65589926837129e-006,-7.05810023760023e-008,0.96854555606842,0.248836368322372,0.48427352309227,0.838785409927368,0.248833641409874,0.50000125169754,0.866024672985077,-5.46651683919208e-008,-2.73326250521677e-008,1,1.11608216002423e-007,0.48427352309227,0.838785409927368,0.248833641409874,0.838785171508789,0.484273850917816,0.248833775520325,0.866025865077972,0.49999925494194,6.14984188018752e-008,0.50000125169754,0.866024672985077,-5.46651683919208e-008,0.838785171508789,0.484273850917816,0.248833775520325,0.968545615673065,-7.99917216909307e-008,0.248836129903793,1,-2.27771685956668e-008,4.07711297611968e-007,0.866025865077972,0.49999925494194,6.14984188018752e-008,0.968545615673065,-7.99917216909307e-008,0.248836129903793,0.838784873485565,-0.484271854162216,0.248838797211647,0.866025507450104,-0.499999910593033,4.4187734715706e-007,1,-2.27771685956668e-008,4.07711297611968e-007,0.866025507450104,-0.499999910593033,4.4187734715706e-007,0.499998390674591,-0.866026282310486,1.8221777864369e-008,0.484270423650742,-0.838784694671631,-0.248842313885689,0.83878481388092,-0.484272211790085,-0.24883845448494,0.499998390674591,-0.866026282310486,1.8221777864369e-008,2.04994904606792e-007,-1,1.81762152351439e-006,6.58754188975763e-008,-0.968543827533722,-0.248843222856522,0.484270423650742,-0.838784694671631,-0.248842313885689,2.04994904606792e-007,-1,1.81762152351439e-006,-0.499998211860657,-0.866026520729065,1.79484527507157e-006,-0.48427078127861,-0.83878493309021,-0.248840644955635,6.58754188975763e-008,-0.968543827533722,-0.248843222856522,-0.499998211860657,-0.866026520729065,1.79484527507157e-006,-0.866025388240814,-0.500000238418579,6.83315626304193e-009,-0.838784754276276,-0.484272360801697,-0.248838126659393,-0.48427078127861,-0.83878493309021,-0.248840644955635,-0.866025388240814,-0.500000238418579,6.83315626304193e-009,-1,-8.65532570060168e-008,4.55543469612962e-009,-0.968545496463776,3.76431543713807e-008,-0.248836934566498, +-0.838784754276276,-0.484272360801697,-0.248838126659393,-1,-8.65532570060168e-008,4.55543469612962e-009,-0.866025805473328,0.499999523162842,1.81306495505851e-006,-0.838785171508789,0.48427352309227,-0.248834386467934,-0.968545496463776,3.76431543713807e-008,-0.248836934566498,-0.866025805473328,0.499999523162842,1.81306495505851e-006,-0.500001192092896,0.866024732589722,1.65589926837129e-006,-0.484273254871368,0.838785111904144,-0.248835384845734,-0.838785171508789,0.48427352309227,-0.248834386467934,-0.500001192092896,0.866024732589722,1.65589926837129e-006,-2.73326250521677e-008,1,1.11608216002423e-007,5.17594678228761e-008,0.968545496463776,-0.248836681246758,-0.484273254871368,0.838785111904144,-0.248835384845734,-2.73326250521677e-008,1,1.11608216002423e-007,0.50000125169754,0.866024672985077,-5.46651683919208e-008,0.484273493289948,0.838785350322723,-0.24883396923542,5.17594678228761e-008,0.968545496463776,-0.248836681246758,0.50000125169754,0.866024672985077,-5.46651683919208e-008,0.866025865077972,0.49999925494194,6.14984188018752e-008,0.838785469532013,0.484273344278336,-0.248833939433098,0.484273493289948,0.838785350322723,-0.24883396923542,0.866025865077972,0.49999925494194,6.14984188018752e-008,1,-2.27771685956668e-008,4.07711297611968e-007,0.968545734882355,3.29377591867797e-008,-0.248835727572441,0.838785469532013,0.484273344278336,-0.248833939433098,1,-2.27771685956668e-008,4.07711297611968e-007,0.866025507450104,-0.499999910593033,4.4187734715706e-007,0.83878481388092,-0.484272211790085,-0.24883845448494,0.968545734882355,3.29377591867797e-008,-0.248835727572441,0.83878481388092,-0.484272211790085,-0.24883845448494,0.484270423650742,-0.838784694671631,-0.248842313885689,0.438132703304291,-0.758871793746948,-0.481823176145554,0.758871018886566,-0.43813419342041,-0.481822818517685,0.484270423650742,-0.838784694671631,-0.248842313885689,6.58754188975763e-008,-0.968543827533722,-0.248843222856522,-5.21131795494512e-008,-0.876268088817596,-0.481824070215225,0.438132703304291,-0.758871793746948,-0.481823176145554, +6.58754188975763e-008,-0.968543827533722,-0.248843222856522,-0.48427078127861,-0.83878493309021,-0.248840644955635,-0.43813356757164,-0.758872330188751,-0.4818215072155,-5.21131795494512e-008,-0.876268088817596,-0.481824070215225,-0.48427078127861,-0.83878493309021,-0.248840644955635,-0.838784754276276,-0.484272360801697,-0.248838126659393,-0.758871614933014,-0.438134640455246,-0.481821447610855,-0.43813356757164,-0.758872330188751,-0.4818215072155,-0.838784754276276,-0.484272360801697,-0.248838126659393,-0.968545496463776,3.76431543713807e-008,-0.248836934566498,-0.876268327236176,0,-0.4818235039711,-0.758871614933014,-0.438134640455246,-0.481821447610855,-0.968545496463776,3.76431543713807e-008,-0.248836934566498,-0.838785171508789,0.48427352309227,-0.248834386467934,-0.758870840072632,0.438134431838989,-0.481822907924652,-0.876268327236176,0,-0.4818235039711,-0.838785171508789,0.48427352309227,-0.248834386467934,-0.484273254871368,0.838785111904144,-0.248835384845734,-0.438133120536804,0.758868813514709,-0.481827288866043,-0.758870840072632,0.438134431838989,-0.481822907924652,-0.484273254871368,0.838785111904144,-0.248835384845734,5.17594678228761e-008,0.968545496463776,-0.248836681246758,2.08452028971351e-008,0.87626439332962,-0.481830805540085,-0.438133120536804,0.758868813514709,-0.481827288866043,5.17594678228761e-008,0.968545496463776,-0.248836681246758,0.484273493289948,0.838785350322723,-0.24883396923542,0.438133746385574,0.758869767189026,-0.481825411319733,2.08452028971351e-008,0.87626439332962,-0.481830805540085,0.484273493289948,0.838785350322723,-0.24883396923542,0.838785469532013,0.484273344278336,-0.248833939433098,0.75887131690979,0.438134700059891,-0.481821954250336,0.438133746385574,0.758869767189026,-0.481825411319733,0.838785469532013,0.484273344278336,-0.248833939433098,0.968545734882355,3.29377591867797e-008,-0.248835727572441,0.876268327236176,8.85923796545285e-008,-0.4818235039711,0.75887131690979,0.438134700059891,-0.481821954250336,0.968545734882355,3.29377591867797e-008,-0.248835727572441, +0.83878481388092,-0.484272211790085,-0.24883845448494,0.758871018886566,-0.43813419342041,-0.481822818517685,0.876268327236176,8.85923796545285e-008,-0.4818235039711,0.758871018886566,-0.43813419342041,-0.481822818517685,0.438132703304291,-0.758871793746948,-0.481823176145554,0.364804416894913,-0.631861805915833,-0.683862864971161,0.631861090660095,-0.364804625511169,-0.683863401412964,0.438132703304291,-0.758871793746948,-0.481823176145554,-5.21131795494512e-008,-0.876268088817596,-0.481824070215225,6.61662937773144e-008,-0.729610919952393,-0.683862566947937,0.364804416894913,-0.631861805915833,-0.683862864971161,-5.21131795494512e-008,-0.876268088817596,-0.481824070215225,-0.43813356757164,-0.758872330188751,-0.4818215072155,-0.364804297685623,-0.631861865520477,-0.683862924575806,6.61662937773144e-008,-0.729610919952393,-0.683862566947937,-0.43813356757164,-0.758872330188751,-0.4818215072155,-0.758871614933014,-0.438134640455246,-0.481821447610855,-0.63186115026474,-0.364804476499558,-0.683863461017609,-0.364804297685623,-0.631861865520477,-0.683862924575806,-0.758871614933014,-0.438134640455246,-0.481821447610855,-0.876268327236176,0,-0.4818235039711,-0.729609251022339,-1.26030585079207e-007,-0.683864295482636,-0.63186115026474,-0.364804476499558,-0.683863461017609,-0.876268327236176,0,-0.4818235039711,-0.758870840072632,0.438134431838989,-0.481822907924652,-0.631860971450806,0.36480525135994,-0.683863162994385,-0.729609251022339,-1.26030585079207e-007,-0.683864295482636,-0.758870840072632,0.438134431838989,-0.481822907924652,-0.438133120536804,0.758868813514709,-0.481827288866043,-0.364806115627289,0.631860852241516,-0.683862924575806,-0.631860971450806,0.36480525135994,-0.683863162994385,-0.438133120536804,0.758868813514709,-0.481827288866043,2.08452028971351e-008,0.87626439332962,-0.481830805540085,-7.24677207131208e-008,0.729610145092011,-0.683863282203674,-0.364806115627289,0.631860852241516,-0.683862924575806,2.08452028971351e-008,0.87626439332962,-0.481830805540085,0.438133746385574,0.758869767189026,-0.481825411319733, +0.364806443452835,0.631861507892609,-0.683862090110779,-7.24677207131208e-008,0.729610145092011,-0.683863282203674,0.438133746385574,0.758869767189026,-0.481825411319733,0.75887131690979,0.438134700059891,-0.481821954250336,0.631860911846161,0.364805489778519,-0.68386310338974,0.364806443452835,0.631861507892609,-0.683862090110779,0.75887131690979,0.438134700059891,-0.481821954250336,0.876268327236176,8.85923796545285e-008,-0.4818235039711,0.72960889339447,-1.54387620909802e-007,-0.683864653110504,0.631860911846161,0.364805489778519,-0.68386310338974,0.876268327236176,8.85923796545285e-008,-0.4818235039711,0.758871018886566,-0.43813419342041,-0.481822818517685,0.631861090660095,-0.364804625511169,-0.683863401412964,0.72960889339447,-1.54387620909802e-007,-0.683864653110504,0.631861090660095,-0.364804625511169,-0.683863401412964,0.364804416894913,-0.631861805915833,-0.683862864971161,0.270244389772415,-0.468077927827835,-0.841350793838501,0.468076646327972,-0.270243525505066,-0.841351687908173,0.364804416894913,-0.631861805915833,-0.683862864971161,6.61662937773144e-008,-0.729610919952393,-0.683862566947937,2.48445758188609e-007,-0.540488600730896,-0.841351449489594,0.270244389772415,-0.468077927827835,-0.841350793838501,6.61662937773144e-008,-0.729610919952393,-0.683862566947937,-0.364804297685623,-0.631861865520477,-0.683862924575806,-0.270242929458618,-0.468076139688492,-0.841352164745331,2.48445758188609e-007,-0.540488600730896,-0.841351449489594,-0.364804297685623,-0.631861865520477,-0.683862924575806,-0.63186115026474,-0.364804476499558,-0.683863461017609,-0.468076318502426,-0.270242691040039,-0.841352164745331,-0.270242929458618,-0.468076139688492,-0.841352164745331,-0.63186115026474,-0.364804476499558,-0.683863461017609,-0.729609251022339,-1.26030585079207e-007,-0.683864295482636,-0.540487408638,6.97388955472888e-008,-0.841352224349976,-0.468076318502426,-0.270242691040039,-0.841352164745331,-0.729609251022339,-1.26030585079207e-007,-0.683864295482636,-0.631860971450806,0.36480525135994,-0.683863162994385,-0.468077749013901,0.270244240760803,-0.841350972652435, +-0.540487408638,6.97388955472888e-008,-0.841352224349976,-0.631860971450806,0.36480525135994,-0.683863162994385,-0.364806115627289,0.631860852241516,-0.683862924575806,-0.2702457010746,0.468078345060349,-0.841350078582764,-0.468077749013901,0.270244240760803,-0.841350972652435,-0.364806115627289,0.631860852241516,-0.683862924575806,-7.24677207131208e-008,0.729610145092011,-0.683863282203674,4.35871294612866e-009,0.540490329265594,-0.841350197792053,-0.2702457010746,0.468078345060349,-0.841350078582764,-7.24677207131208e-008,0.729610145092011,-0.683863282203674,0.364806443452835,0.631861507892609,-0.683862090110779,0.270245939493179,0.468078345060349,-0.841350078582764,4.35871294612866e-009,0.540490329265594,-0.841350197792053,0.364806443452835,0.631861507892609,-0.683862090110779,0.631860911846161,0.364805489778519,-0.68386310338974,0.468076199293137,0.270243853330612,-0.841351807117462,0.270245939493179,0.468078345060349,-0.841350078582764,0.631860911846161,0.364805489778519,-0.68386310338974,0.72960889339447,-1.54387620909802e-007,-0.683864653110504,0.540485322475433,-4.28241065719703e-007,-0.841353535652161,0.468076199293137,0.270243853330612,-0.841351807117462,0.72960889339447,-1.54387620909802e-007,-0.683864653110504,0.631861090660095,-0.364804625511169,-0.683863401412964,0.468076646327972,-0.270243525505066,-0.841351687908173,0.540485322475433,-4.28241065719703e-007,-0.841353535652161,0.468076646327972,-0.270243525505066,-0.841351687908173,0.270244389772415,-0.468077927827835,-0.841350793838501,0.167291924357414,-0.289760828018188,-0.942365229129791,0.289759069681168,-0.167292684316635,-0.94236558675766,0.270244389772415,-0.468077927827835,-0.841350793838501,2.48445758188609e-007,-0.540488600730896,-0.841351449489594,0,-0.334589809179306,-0.942363917827606,0.167291924357414,-0.289760828018188,-0.942365229129791,2.48445758188609e-007,-0.540488600730896,-0.841351449489594,-0.270242929458618,-0.468076139688492,-0.841352164745331,-0.16729149222374,-0.289760828018188,-0.942365229129791,0,-0.334589809179306,-0.942363917827606, +-0.270242929458618,-0.468076139688492,-0.841352164745331,-0.468076318502426,-0.270242691040039,-0.841352164745331,-0.289759993553162,-0.167293325066566,-0.942365169525146,-0.16729149222374,-0.289760828018188,-0.942365229129791,-0.468076318502426,-0.270242691040039,-0.841352164745331,-0.540487408638,6.97388955472888e-008,-0.841352224349976,-0.334588289260864,2.72852417992908e-007,-0.942364394664764,-0.289759993553162,-0.167293325066566,-0.942365169525146,-0.540487408638,6.97388955472888e-008,-0.841352224349976,-0.468077749013901,0.270244240760803,-0.841350972652435,-0.28976121544838,0.167293459177017,-0.942364752292633,-0.334588289260864,2.72852417992908e-007,-0.942364394664764,-0.468077749013901,0.270244240760803,-0.841350972652435,-0.2702457010746,0.468078345060349,-0.841350078582764,-0.167293861508369,0.289759039878845,-0.942365348339081,-0.28976121544838,0.167293459177017,-0.942364752292633,-0.2702457010746,0.468078345060349,-0.841350078582764,4.35871294612866e-009,0.540490329265594,-0.841350197792053,0,0.334586679935455,-0.942364990711212,-0.167293861508369,0.289759039878845,-0.942365348339081,4.35871294612866e-009,0.540490329265594,-0.841350197792053,0.270245939493179,0.468078345060349,-0.841350078582764,0.167293444275856,0.28975909948349,-0.942365407943726,0,0.334586679935455,-0.942364990711212,0.270245939493179,0.468078345060349,-0.841350078582764,0.468076199293137,0.270243853330612,-0.841351807117462,0.289759457111359,0.16729311645031,-0.942365348339081,0.167293444275856,0.28975909948349,-0.942365407943726,0.468076199293137,0.270243853330612,-0.841351807117462,0.540485322475433,-4.28241065719703e-007,-0.841353535652161,0.334585398435593,7.90294407693182e-008,-0.94236546754837,0.289759457111359,0.16729311645031,-0.942365348339081,0.540485322475433,-4.28241065719703e-007,-0.841353535652161,0.468076646327972,-0.270243525505066,-0.841351687908173,0.289759069681168,-0.167292684316635,-0.94236558675766,0.334585398435593,7.90294407693182e-008,-0.94236546754837,0.167292073369026,-0.289760500192642,0.942365229129791, +0.289761811494827,-0.16729399561882,0.942364513874054,-1.81458155168457e-008,1.38762121792979e-008,1,-1.25649273741146e-006,-0.334590792655945,0.942363560199738,0.167292073369026,-0.289760500192642,0.942365229129791,-1.81458155168457e-008,1.38762121792979e-008,1,-0.167291983962059,-0.289760828018188,0.942365169525146,-1.25649273741146e-006,-0.334590792655945,0.942363560199738,-1.81458155168457e-008,1.38762121792979e-008,1,-0.28975784778595,-0.167291864752769,0.942366182804108,-0.167291983962059,-0.289760828018188,0.942365169525146,-1.81458155168457e-008,1.38762121792979e-008,1,-0.334584772586823,-9.30349486338855e-008,0.942365765571594,-0.28975784778595,-0.167291864752769,0.942366182804108,-1.81458155168457e-008,1.38762121792979e-008,1,-0.289758443832397,0.167293131351471,0.942365705966949,-0.334584772586823,-9.30349486338855e-008,0.942365765571594,-1.81458155168457e-008,1.38762121792979e-008,1,-0.167293146252632,0.28975909948349,0.942365527153015,-0.289758443832397,0.167293131351471,0.942365705966949,-1.81458155168457e-008,1.38762121792979e-008,1,1.58633429236943e-006,0.334586709737778,0.942365050315857,-0.167293146252632,0.28975909948349,0.942365527153015,-1.81458155168457e-008,1.38762121792979e-008,1,0.167293339967728,0.289758056402206,0.942365825176239,1.58633429236943e-006,0.334586709737778,0.942365050315857,-1.81458155168457e-008,1.38762121792979e-008,1,0.289760500192642,0.167292311787605,0.942365229129791,0.167293339967728,0.289758056402206,0.942365825176239,-1.81458155168457e-008,1.38762121792979e-008,1,0.334590673446655,9.27845178466669e-008,0.942363679409027,0.289760500192642,0.167292311787605,0.942365229129791,-1.81458155168457e-008,1.38762121792979e-008,1,0.289761811494827,-0.16729399561882,0.942364513874054,0.334590673446655,9.27845178466669e-008,0.942363679409027,-1.81458155168457e-008,1.38762121792979e-008,1,0.289759069681168,-0.167292684316635,-0.94236558675766,0.167291924357414,-0.289760828018188,-0.942365229129791,5.86003181979322e-007,1.46767646924673e-008,-1,0.167291924357414,-0.289760828018188,-0.942365229129791, +0,-0.334589809179306,-0.942363917827606,5.86003181979322e-007,1.46767646924673e-008,-1,0,-0.334589809179306,-0.942363917827606,-0.16729149222374,-0.289760828018188,-0.942365229129791,5.86003181979322e-007,1.46767646924673e-008,-1,-0.16729149222374,-0.289760828018188,-0.942365229129791,-0.289759993553162,-0.167293325066566,-0.942365169525146,5.86003181979322e-007,1.46767646924673e-008,-1,-0.289759993553162,-0.167293325066566,-0.942365169525146,-0.334588289260864,2.72852417992908e-007,-0.942364394664764,5.86003181979322e-007,1.46767646924673e-008,-1,-0.334588289260864,2.72852417992908e-007,-0.942364394664764,-0.28976121544838,0.167293459177017,-0.942364752292633,5.86003181979322e-007,1.46767646924673e-008,-1,-0.28976121544838,0.167293459177017,-0.942364752292633,-0.167293861508369,0.289759039878845,-0.942365348339081,5.86003181979322e-007,1.46767646924673e-008,-1,-0.167293861508369,0.289759039878845,-0.942365348339081,0,0.334586679935455,-0.942364990711212,5.86003181979322e-007,1.46767646924673e-008,-1,0,0.334586679935455,-0.942364990711212,0.167293444275856,0.28975909948349,-0.942365407943726,5.86003181979322e-007,1.46767646924673e-008,-1,0.167293444275856,0.28975909948349,-0.942365407943726,0.289759457111359,0.16729311645031,-0.942365348339081,5.86003181979322e-007,1.46767646924673e-008,-1,0.289759457111359,0.16729311645031,-0.942365348339081,0.334585398435593,7.90294407693182e-008,-0.94236546754837,5.86003181979322e-007,1.46767646924673e-008,-1,0.334585398435593,7.90294407693182e-008,-0.94236546754837,0.289759069681168,-0.167292684316635,-0.94236558675766,5.86003181979322e-007,1.46767646924673e-008,-1 + } + NormalsW: *552 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementBinormal: 0 { + Version: 102 + Name: "map1" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Binormals: *1656 { + a: 0.66886043548584,-0.668869853019714,-0.324405401945114,0.668864250183105,-0.668866753578186,-0.324403792619705,0.600835382938385,-0.600831508636475,-0.527255535125732,0.600832462310791,-0.600834846496582,-0.527255117893219,0.244817331433296,-0.913688480854034,-0.324403762817383,0.244816035032272,-0.91368705034256,-0.324408710002899,0.219914466142654,-0.820753991603851,-0.527257680892944,0.219915524125099,-0.820754945278168,-0.527255594730377,-0.244816869497299,-0.913686692714691,-0.324409276247025,-0.244816496968269,-0.913688719272614,-0.324404001235962,-0.219914883375168,-0.82075560092926,-0.527254939079285,-0.219915181398392,-0.820753633975983,-0.527257800102234,-0.668860793113709,-0.668870091438293,-0.324404388666153,-0.668864905834198,-0.668867409229279,-0.324401408433914,-0.600836217403412,-0.600832343101501,-0.527253687381744,-0.600832223892212,-0.600834488868713,-0.527255773544312,-0.913688361644745,-0.244820907711983,-0.324401438236237,-0.913687705993652,-0.244821652770042,-0.324402719736099,-0.82075560092926,-0.219921424984932,-0.52725213766098,-0.820755064487457,-0.219920456409454,-0.527253448963165,-0.913687944412231,0.244820788502693,-0.324402749538422,-0.913687765598297,0.244821667671204,-0.324402421712875,-0.820753693580627,0.219920888543129,-0.527255415916443,-0.820755779743195,0.219920635223389,-0.527252197265625,-0.668861210346222,0.668870627880096,-0.324402332305908,-0.668864369392395,0.66886693239212,-0.324403524398804,-0.600834488868713,0.600830674171448,-0.527257561683655,-0.600832343101501,0.600834608078003,-0.527255415916443,-0.244834691286087,0.913683652877808,-0.324404209852219,-0.244829744100571,0.913685321807861,-0.324403584003448,-0.219922557473183,0.820751905441284,-0.52725750207901,-0.219926878809929,0.820749878883362,-0.527258694171906,0.244834735989571,0.913683891296387,-0.324403882026672,0.244829803705215,0.91368556022644,-0.324402838945389,0.219922676682472,0.820752203464508,-0.527257025241852,0.219927117228508,0.820750713348389,-0.527257263660431,0.668860971927643,0.668870329856873,-0.324403285980225, +0.66886430978775,0.668866813182831,-0.324403673410416,0.600835740566254,0.600831866264343,-0.52725476026535,0.600831806659698,0.6008340716362,-0.527256727218628,0.913687527179718,0.244820684194565,-0.324404120445251,0.91368579864502,0.244821131229401,-0.324408501386642,0.820754110813141,0.219920992851257,-0.52725476026535,0.820754289627075,0.219920262694359,-0.527254641056061,0.913686037063599,-0.244820281863213,-0.324408501386642,0.913686633110046,-0.244821399450302,-0.32440596818924,0.820753633975983,-0.219920873641968,-0.527255654335022,0.82075423002243,-0.219920217990875,-0.527254819869995,0.60083532333374,-0.600831568241119,-0.527255594730377,0.600835144519806,-0.600831747055054,-0.527255535125732,0.492425590753555,-0.492423176765442,-0.717660427093506,0.492425173521042,-0.49242240190506,-0.717661321163177,0.219914823770523,-0.820755302906036,-0.527255594730377,0.219915807247162,-0.820753693580627,-0.52725750207901,0.180237010121346,-0.67266309261322,-0.717662274837494,0.180236339569092,-0.672664940357208,-0.717660546302795,-0.21991440653801,-0.820753753185272,-0.527257859706879,-0.219916164875031,-0.820755183696747,-0.527255117893219,-0.180237337946892,-0.672664225101471,-0.717661023139954,-0.180235892534256,-0.67266321182251,-0.717662453651428,-0.600835502147675,-0.600831687450409,-0.527255237102509,-0.600835978984833,-0.600832581520081,-0.5272536277771,-0.492425590753555,-0.492423087358475,-0.717660546302795,-0.492425501346588,-0.492422670125961,-0.717660903930664,-0.820754826068878,-0.219921201467514,-0.527253568172455,-0.820755779743195,-0.219921171665192,-0.527252197265625,-0.672664344310761,-0.180239871144295,-0.717660248279572,-0.672664284706116,-0.180240109562874,-0.717660307884216,-0.82075560092926,0.219921424984932,-0.52725213766098,-0.820753812789917,0.219920635223389,-0.527255415916443,-0.672662973403931,0.180239498615265,-0.717661678791046,-0.672664284706116,0.180240124464035,-0.717660307884216,-0.600835204124451,0.60083132982254,-0.527255952358246,-0.600832581520081,0.600832283496857,-0.527257859706879, +-0.492422193288803,0.492424756288528,-0.717661738395691,-0.492423564195633,0.492423236370087,-0.71766185760498,-0.219922438263893,0.820751428604126,-0.527258157730103,-0.219922691583633,0.820751845836639,-0.52725750207901,-0.180242076516151,0.672663271427155,-0.71766072511673,-0.180241733789444,0.672662436962128,-0.717661619186401,0.219922512769699,0.82075172662735,-0.527257859706879,0.219922795891762,0.820752143859863,-0.527257025241852,0.180241718888283,0.672661900520325,-0.71766209602356,0.180241942405701,0.67266321182251,-0.717660903930664,0.600835084915161,0.600831210613251,-0.527256190776825,0.600834131240845,0.600833714008331,-0.527254462242126,0.49242290854454,0.492425501346588,-0.717660665512085,0.492423415184021,0.49242314696312,-0.717661917209625,0.820754051208496,0.219920992851257,-0.527254700660706,0.820754170417786,0.219920724630356,-0.52725476026535,0.672664046287537,0.180239796638489,-0.717660665512085,0.672663688659668,0.18023993074894,-0.717660903930664,0.820754110813141,-0.219921007752419,-0.52725476026535,0.820753633975983,-0.219920575618744,-0.527255594730377,0.672663569450378,-0.180239662528038,-0.717661142349243,0.672663927078247,-0.180240020155907,-0.717660665512085,0.492424994707108,-0.492422580718994,-0.717661261558533,0.492424935102463,-0.492423683404922,-0.717660546302795,0.349815905094147,-0.349815726280212,-0.86905574798584,0.349815249443054,-0.349814295768738,-0.869056582450867,0.180237382650375,-0.67266458272934,-0.71766072511673,0.180236503481865,-0.672663152217865,-0.717662334442139,0.128038749098778,-0.477856665849686,-0.869056522846222,0.128039464354515,-0.477857917547226,-0.86905562877655,-0.180237010121346,-0.67266309261322,-0.717662274837494,-0.180236831307411,-0.672664523124695,-0.717661023139954,-0.128038719296455,-0.477856516838074,-0.869056522846222,-0.128039091825485,-0.477856576442719,-0.869056463241577,-0.492425292730331,-0.492422878742218,-0.717660903930664,-0.492425143718719,-0.492423743009567,-0.717660427093506,-0.34981581568718,-0.349815636873245,-0.86905574798584, +-0.349815249443054,-0.34981432557106,-0.869056522846222,-0.672664403915405,-0.180239871144295,-0.717660307884216,-0.672664344310761,-0.180239751935005,-0.717660248279572,-0.477856814861298,-0.128041177988052,-0.869055986404419,-0.477857172489166,-0.128041371703148,-0.869055867195129,-0.672664284706116,0.180239871144295,-0.717660307884216,-0.672663033008575,0.180239409208298,-0.717661678791046,-0.477856278419495,0.128041043877602,-0.869056344032288,-0.477856755256653,0.128041252493858,-0.869055986404419,-0.492422223091125,0.492424845695496,-0.717661559581757,-0.492422938346863,0.492424130439758,-0.717661619186401,-0.349818706512451,0.349818527698517,-0.869053423404694,-0.349814713001251,0.349815547466278,-0.869056344032288,-0.180241867899895,0.672662377357483,-0.717661678791046,-0.180241122841835,0.672663450241089,-0.717660903930664,-0.1280437707901,0.477864593267441,-0.869051337242126,-0.128043442964554,0.477860778570175,-0.869053542613983,0.180242046713829,0.672663152217865,-0.717660844326019,0.18024080991745,0.672662258148193,-0.71766197681427,0.128042310476303,0.477859109640121,-0.869054555892944,0.128044486045837,0.477864563465118,-0.869051277637482,0.492421805858612,0.49242439866066,-0.717662155628204,0.492423474788666,0.492424726486206,-0.717660844326019,0.349814802408218,0.349814623594284,-0.869056582450867,0.349816679954529,0.349817514419556,-0.869054675102234,0.672663807868958,0.180239737033844,-0.717660903930664,0.672664046287537,0.180239677429199,-0.717660665512085,0.477856814861298,0.128041192889214,-0.869056105613709,0.477855861186981,0.128040999174118,-0.869056522846222,0.672663927078247,-0.180239766836166,-0.717660665512085,0.672663569450378,-0.18023955821991,-0.717661142349243,0.477856010198593,-0.128040984272957,-0.869056463241577,0.477856755256653,-0.12804126739502,-0.869056105613709,0.34981495141983,-0.349814802408218,-0.869056463241577,0.349815845489502,-0.349815726280212,-0.86905574798584,0.181761637330055,-0.181761637330055,-0.966398239135742,0.181759133934975,-0.181759089231491,-0.966399192810059, +0.128039121627808,-0.47785809636116,-0.86905562877655,0.12803903222084,-0.477856636047363,-0.869056463241577,0.0665286108851433,-0.248291969299316,-0.966398000717163,0.0665282979607582,-0.248291403055191,-0.966398119926453,-0.128038719296455,-0.477856606245041,-0.869056522846222,-0.128038957715034,-0.477856367826462,-0.869056522846222,-0.0665284469723701,-0.248291358351707,-0.966398119926453,-0.0665284469723701,-0.248291969299316,-0.966398000717163,-0.349814772605896,-0.349814593791962,-0.869056582450867,-0.349815785884857,-0.34981569647789,-0.86905574798584,-0.181759610772133,-0.181759625673294,-0.966398954391479,-0.1817616969347,-0.181761652231216,-0.966398179531097,-0.477857232093811,-0.128041297197342,-0.869055867195129,-0.477856814861298,-0.128041207790375,-0.869055986404419,-0.248285636305809,-0.0665278881788254,-0.966399729251862,-0.248288184404373,-0.0665285438299179,-0.966399013996124,-0.477856814861298,0.128041192889214,-0.869056105613709,-0.477856278419495,0.128041058778763,-0.869056344032288,-0.248284935951233,0.0665276944637299,-0.966399908065796,-0.248285636305809,0.0665278658270836,-0.966399729251862,-0.349815130233765,0.34981495141983,-0.869056403636932,-0.349818646907806,0.349818587303162,-0.869053483009338,-0.181757643818855,0.181757643818855,-0.966399669647217,-0.181757107377052,0.181757062673569,-0.966399908065796,-0.128042846918106,0.477861106395721,-0.869053423404694,-0.128043934702873,0.477864623069763,-0.869051396846771,-0.0665281116962433,0.248285084962845,-0.966399788856506,-0.0665281563997269,0.248285487294197,-0.966399669647217,0.1280437707901,0.477864593267441,-0.869051337242126,0.128042429685593,0.477859050035477,-0.869054615497589,0.066527359187603,0.248282253742218,-0.966400563716888,0.0665280371904373,0.248285084962845,-0.966399788856506,0.349817305803299,0.349817126989365,-0.869054615497589,0.349814742803574,0.349814653396606,-0.869056582450867,0.181755378842354,0.181755378842354,-0.966400504112244,0.18175533413887,0.181755304336548,-0.966400623321533,0.477855861186981,0.128040924668312,-0.869056582450867, +0.477856814861298,0.128041222691536,-0.869056105613709,0.248284846544266,0.0665276795625687,-0.966399848461151,0.248282611370087,0.0665270537137985,-0.966400504112244,0.477856755256653,-0.128041177988052,-0.869056105613709,0.477856010198593,-0.128041014075279,-0.869056463241577,0.248287484049797,-0.0665283799171448,-0.966399192810059,0.248284846544266,-0.0665276572108269,-0.966399848461151,0.181759119033813,-0.181759119033813,-0.966399192810059,0.181761607527733,-0.181761652231216,-0.966398239135742,1.33392692447387e-008,-1.33392781265229e-008,-1,3.23476626817865e-007,-3.23476740504702e-007,-1,0.066528432071209,-0.248291313648224,-0.966398179531097,0.0665288865566254,-0.248291969299316,-0.966398000717163,4.87026738937857e-007,-1.81762140982755e-006,-1,4.88246065799558e-009,-1.8221799180651e-008,-1,-0.0665286034345627,-0.248291969299316,-0.966398000717163,-0.0665286779403687,-0.248291224241257,-0.966398119926453,-4.80924029488961e-007,-1.79484584350575e-006,-1,-4.87024692574778e-007,-1.81762163720123e-006,-1,-0.181761682033539,-0.181761667132378,-0.966398179531097,-0.181759595870972,-0.181759670376778,-0.966398954391479,-5.00221553068059e-009,-5.00221952748348e-009,-1,-1.31391823288141e-006,-1.31391868762876e-006,-1,-0.248288169503212,-0.0665285587310791,-0.966399013996124,-0.248285636305809,-0.0665278360247612,-0.966399729251862,-4.55543469612962e-009,-1.22062204788165e-009,-1,-6.83315715122035e-009,-1.83093595840234e-009,-1,-0.248285636305809,0.0665278807282448,-0.966399729251862,-0.248284891247749,0.0665278062224388,-0.966399908065796,-1.81306381819013e-006,4.85810289774236e-007,-1,-4.55543469612962e-009,1.22062626672914e-009,-1,-0.181757092475891,0.181757092475891,-0.966399908065796,-0.181758165359497,0.181757345795631,-0.966399669647217,-2.35442212215276e-006,5.52738868009328e-007,-1,-1.65698634191358e-006,7.56144629576738e-007,-1,-0.0665282160043716,0.248285457491875,-0.966399669647217,-0.0665277391672134,0.248285099864006,-0.966399848461151,1.28901808693627e-006,1.1160825152956e-007,-1,1.27409123251709e-007,1.98562929654145e-006,-1, +0.0665281116962433,0.248285084962845,-0.966399788856506,0.0665270239114761,0.248282447457314,-0.966400563716888,-1.15686668777926e-006,6.04797605774365e-007,-1,-6.29556325293379e-007,1.11608201791569e-007,-1,0.181755304336548,0.181755319237709,-0.966400623321533,0.181755691766739,0.181754887104034,-0.966400623321533,7.04481408320135e-007,-1.09720303953509e-006,-1,5.31092609890038e-007,-3.69749415085607e-007,-1,0.248282611370087,0.0665270686149597,-0.966400504112244,0.248284846544266,0.0665277987718582,-0.966399848461151,4.07711297611968e-007,1.09246222734782e-007,-1,6.14983974855932e-008,1.64784630385384e-008,-1,0.248284846544266,-0.0665276721119881,-0.966399848461151,0.248287513852119,-0.0665283277630806,-0.966399192810059,4.41877489265607e-007,-1.18400414805819e-007,-1,4.07711297611968e-007,-1.09245739565722e-007,-1,3.23476569974446e-007,-3.23476825769831e-007,-1,1.33392727974524e-008,-1.33392763501661e-008,-1,-0.1817616969347,0.1817616969347,-0.966398119926453,-0.181758791208267,0.181758865714073,-0.966399192810059,4.88247842156397e-009,-1.822178852251e-008,-1,4.87024692574778e-007,-1.81762140982755e-006,-1,-0.0665285885334015,0.248291909694672,-0.966398000717163,-0.0665286928415298,0.248291239142418,-0.966398179531097,-4.87026738937857e-007,-1.81762163720123e-006,-1,-4.80922324186395e-007,-1.79484686668729e-006,-1,0.0665280073881149,0.248289734125137,-0.966398596763611,0.0665288642048836,0.248291909694672,-0.966398000717163,-1.31391800550773e-006,-1.31391891500243e-006,-1,-5.0022159747698e-009,-5.00221775112664e-009,-1,0.181758582592011,0.181758597493172,-0.966399312019348,0.18176044523716,0.181760519742966,-0.966398596763611,-6.83315803939877e-009,-1.8309345151124e-009,-1,-4.55543469612962e-009,-1.22062315810467e-009,-1,0.24828565120697,0.0665278881788254,-0.966399729251862,0.248286873102188,0.0665281713008881,-0.966399312019348,-4.55543469612962e-009,1.22062837615289e-009,-1,-1.81306427293748e-006,4.85809607653209e-007,-1,0.248283177614212,-0.0665272325277328,-0.966400325298309,0.24828565120697,-0.0665280073881149,-0.966399729251862, +-1.98671705220477e-006,1.85033599109374e-007,-1,-1.78331197275838e-006,8.82470430951798e-007,-1,0.181756541132927,-0.181756556034088,-0.966400027275085,0.181755468249321,-0.181756436824799,-0.966400325298309,6.98517226283002e-007,2.31535977945896e-006,-1,6.29556325293379e-007,1.11608230213278e-007,-1,0.0665282011032104,-0.24828539788723,-0.966399729251862,0.0665285959839821,-0.248283550143242,-0.966400146484375,-1.28901808693627e-006,1.11608180475287e-007,-1,-5.85757106819074e-007,2.75066184940442e-007,-1,-0.0665274485945702,-0.248282596468925,-0.966400563716888,-0.0665290877223015,-0.248285382986069,-0.966399669647217,1.10220275928441e-006,-6.99481176980044e-007,-1,3.74750669607238e-007,-5.26091525898664e-007,-1,-0.181755527853966,-0.181755512952805,-0.966400504112244,-0.181754946708679,-0.181755885481834,-0.966400504112244,6.14983832747384e-008,1.64784861311773e-008,-1,4.07711297611968e-007,1.09246023782816e-007,-1,-0.248284459114075,-0.0665275678038597,-0.966400027275085,-0.24828265607357,-0.0665272027254105,-0.966400504112244,4.07711297611968e-007,-1.09245640089739e-007,-1,4.41877432422189e-007,-1.18400500070948e-007,-1,-0.248287126421928,0.0665282979607582,-0.966399192810059,-0.248284459114075,0.0665275081992149,-0.966400027275085,-0.18175882101059,0.18175882101059,-0.966399192810059,-0.181761726737022,0.181761682033539,-0.966398119926453,-0.349815994501114,0.34981581568718,-0.86905562877655,-0.349815547466278,0.349815487861633,-0.869055986404419,-0.066528432071209,0.248291358351707,-0.966398119926453,-0.0665284395217896,0.248291909694672,-0.966398000717163,-0.128039136528969,0.477858185768127,-0.869055509567261,-0.128039374947548,0.477857947349548,-0.86905562877655,0.0665285885334015,0.248291909694672,-0.966398000717163,0.0665278807282448,0.248289808630943,-0.966398596763611,0.128038704395294,0.477856487035751,-0.869056522846222,0.128039434552193,0.477858155965805,-0.869055449962616,0.181760489940643,0.181760489940643,-0.966398596763611,0.181758597493172,0.181758582592011,-0.966399312019348,0.349814623594284,0.34981444478035,-0.869056701660156, +0.349814683198929,0.349814623594284,-0.869056582450867,0.248286843299866,0.0665282160043716,-0.966399312019348,0.24828565120697,0.0665278732776642,-0.966399729251862,0.477857530117035,0.128041371703148,-0.86905562877655,0.477855563163757,0.128040879964828,-0.869056701660156,0.24828565120697,-0.0665278881788254,-0.966399729251862,0.248283192515373,-0.0665272176265717,-0.966400325298309,0.477857023477554,-0.128041252493858,-0.869055867195129,0.477857530117035,-0.12804140150547,-0.86905562877655,0.181755840778351,-0.181755855679512,-0.966400444507599,0.181756585836411,-0.181756556034088,-0.966400146484375,0.349818795919418,-0.349818617105484,-0.869053423404694,0.349815607070923,-0.349815487861633,-0.869055986404419,0.0665278285741806,-0.248283982276917,-0.96640008687973,0.0665281191468239,-0.24828539788723,-0.966399729251862,0.1280437707901,-0.477864563465118,-0.869051337242126,0.128042966127396,-0.477860987186432,-0.869053483009338,-0.0665281936526299,-0.24828539788723,-0.966399729251862,-0.0665273740887642,-0.248282626271248,-0.966400504112244,-0.128042340278625,-0.477859169244766,-0.869054555892944,-0.128043919801712,-0.477864593267441,-0.869051396846771,-0.181755527853966,-0.181755527853966,-0.966400504112244,-0.181755542755127,-0.181755483150482,-0.966400504112244,-0.34981495141983,-0.349814772605896,-0.869056522846222,-0.349817365407944,-0.349817246198654,-0.8690544962883,-0.248282715678215,-0.0665270984172821,-0.966400444507599,-0.248284459114075,-0.0665275529026985,-0.966400027275085,-0.477857530117035,-0.128041371703148,-0.86905562877655,-0.477856069803238,-0.128041014075279,-0.869056463241577,-0.248284459114075,0.0665275752544403,-0.966400027275085,-0.248287171125412,0.066528283059597,-0.966399252414703,-0.47785696387291,0.128041237592697,-0.869055986404419,-0.477857530117035,0.12804140150547,-0.86905562877655,-0.3498155772686,0.349815428256989,-0.869055986404419,-0.349816471338272,0.349815517663956,-0.86905562877655,-0.49242502450943,0.492422610521317,-0.717661201953888,-0.492424547672272,0.492423176765442,-0.717661142349243, +-0.128039106726646,0.477858066558838,-0.869055569171906,-0.12803952395916,0.477858155965805,-0.869055449962616,-0.180237010121346,0.67266309261322,-0.717662215232849,-0.180236726999283,0.672664105892181,-0.717661321163177,0.128039136528969,0.477858185768127,-0.869055509567261,0.128039047122002,0.477856338024139,-0.869056582450867,0.180237233638763,0.672663927078247,-0.717661380767822,0.180236488580704,0.672663152217865,-0.717662274837494,0.349814742803574,0.349814563989639,-0.869056582450867,0.349814891815186,0.349813938140869,-0.869056820869446,0.492425113916397,0.492422640323639,-0.717661142349243,0.492424428462982,0.49242314696312,-0.717661321163177,0.47785559296608,0.128040850162506,-0.869056701660156,0.477857530117035,0.128041446208954,-0.86905562877655,0.672664403915405,0.180239886045456,-0.717660188674927,0.672663569450378,0.180239513516426,-0.717661082744598,0.477857530117035,-0.128041371703148,-0.86905562877655,0.477856993675232,-0.128041312098503,-0.869055867195129,0.672663450241089,-0.180239647626877,-0.717661261558533,0.67266446352005,-0.180239781737328,-0.717660248279572,0.349815636873245,-0.349815428256989,-0.869055986404419,0.349818229675293,-0.349819034337997,-0.869053483009338,0.492421954870224,-0.492424547672272,-0.717661917209625,0.492423206567764,-0.492424368858337,-0.717661201953888,0.128042832016945,-0.477861046791077,-0.869053363800049,0.128044471144676,-0.477864533662796,-0.869051277637482,0.18024206161499,-0.67266321182251,-0.717660844326019,0.180240914225578,-0.672662675380707,-0.717661619186401,-0.1280437707901,-0.477864563465118,-0.869051337242126,-0.128042951226234,-0.47785884141922,-0.869054555892944,-0.180241614580154,-0.672661483287811,-0.717662572860718,-0.180241078138351,-0.672663331031799,-0.717660963535309,-0.349817395210266,-0.349817216396332,-0.8690544962883,-0.349814504384995,-0.349815368652344,-0.869056344032288,-0.492422550916672,-0.492425173521042,-0.717661142349243,-0.492422223091125,-0.492423444986343,-0.717662572860718,-0.47785609960556,-0.128040999174118,-0.869056463241577, +-0.477857530117035,-0.128041446208954,-0.86905562877655,-0.672664821147919,-0.180240005254745,-0.717659890651703,-0.672663450241089,-0.180239498615265,-0.717661261558533,-0.477857530117035,0.128041371703148,-0.86905562877655,-0.477856874465942,0.128041282296181,-0.869055926799774,-0.672663509845734,0.18023969233036,-0.717661142349243,-0.672664821147919,0.180239871144295,-0.717659890651703,-0.492424994707108,0.492422580718994,-0.717661201953888,-0.492425262928009,0.492422431707382,-0.717661142349243,-0.600834846496582,0.600830972194672,-0.527256846427917,-0.600834965705872,0.600831508636475,-0.527255892753601,-0.180237233638763,0.672663867473602,-0.717661380767822,-0.180235892534256,0.67266321182251,-0.717662334442139,-0.21991454064846,0.820754289627075,-0.527256965637207,-0.21991591155529,0.820754110813141,-0.527256846427917,0.180237025022507,0.67266309261322,-0.717662215232849,0.180236175656319,0.672664284706116,-0.717661201953888,0.219914942979813,0.820755839347839,-0.527254462242126,0.219915926456451,0.820754170417786,-0.527256727218628,0.492425054311752,0.492422640323639,-0.717661201953888,0.492425233125687,0.492422431707382,-0.717661201953888,0.600835561752319,0.600831627845764,-0.527255177497864,0.600835561752319,0.600832164287567,-0.527254581451416,0.672663569450378,0.18023969233036,-0.717661082744598,0.672664403915405,0.180240124464035,-0.717660188674927,0.820753991603851,0.219920977950096,-0.527254998683929,0.820753872394562,0.219920620322227,-0.527255296707153,0.672664403915405,-0.180239915847778,-0.717660188674927,0.672663271427155,-0.180239826440811,-0.717661261558533,0.820752561092377,-0.219920620322227,-0.527257144451141,0.820753931999207,-0.21992065012455,-0.527254998683929,0.492422640323639,-0.492425262928009,-0.717661082744598,0.492423623800278,-0.492423355579376,-0.717661678791046,0.600834250450134,-0.600830435752869,-0.527258038520813,0.600833058357239,-0.600832641124725,-0.527256906032562,0.18024180829525,-0.672662317752838,-0.717661798000336,0.180241927504539,-0.67266321182251,-0.717660844326019, +0.219922512769699,-0.820751667022705,-0.527257680892944,0.21992252767086,-0.820751249790192,-0.527258515357971,-0.180242046713829,-0.67266321182251,-0.717660844326019,-0.180241495370865,-0.672661542892456,-0.717662572860718,-0.21992239356041,-0.820751249790192,-0.527258574962616,-0.219922676682472,-0.82075172662735,-0.527257740497589,-0.492421448230743,-0.492424011230469,-0.717662692070007,-0.492423802614212,-0.492423534393311,-0.717661380767822,-0.600835263729095,-0.600831389427185,-0.527255892753601,-0.600832343101501,-0.600831985473633,-0.527258455753326,-0.672663331031799,-0.180239602923393,-0.717661321163177,-0.672664761543274,-0.180240243673325,-0.717659831047058,-0.820755124092102,-0.219921290874481,-0.527252852916718,-0.820753693580627,-0.219920605421066,-0.527255594730377,-0.672664821147919,0.180240005254745,-0.717659890651703,-0.672663450241089,0.180239886045456,-0.717661142349243,-0.820753335952759,0.219920814037323,-0.527255892753601,-0.820755183696747,0.21992102265358,-0.527253031730652,-0.600835204124451,0.600831389427185,-0.527255952358246,-0.600831508636475,0.600833833217621,-0.527257323265076,-0.668860733509064,0.668870091438293,-0.324404329061508,-0.668864488601685,0.66886705160141,-0.324402868747711,-0.219914585351944,0.820754528045654,-0.527256608009338,-0.219915330410004,0.820754170417786,-0.527256846427917,-0.244816988706589,0.913687169551849,-0.324408024549484,-0.244816482067108,0.913688659667969,-0.324403941631317,0.219914585351944,0.820754408836365,-0.527256906032562,0.219915717840195,0.82075560092926,-0.527254581451416,0.244817391037941,0.913688540458679,-0.32440397143364,0.24481612443924,0.913687348365784,-0.324408084154129,0.600835800170898,0.600831925868988,-0.527254521846771,0.600832760334015,0.600834965705872,-0.527254641056061,0.668860912322998,0.668870270252228,-0.324403613805771,0.66886430978775,0.668866872787476,-0.324403643608093,0.820753693580627,0.219920888543129,-0.527255296707153,0.820753991603851,0.219920173287392,-0.527255058288574,0.913686871528625,0.244820520281792,-0.324406206607819, +0.913687288761139,0.244821518659592,-0.324404031038284,0.820753991603851,-0.219920977950096,-0.527254998683929,0.820752859115601,-0.219919860363007,-0.527257025241852,0.913687109947205,-0.244820594787598,-0.324405163526535,0.913686573505402,-0.244821339845657,-0.324406236410141,0.600834667682648,-0.600830793380737,-0.527257204055786,0.600830972194672,-0.600833296775818,-0.527258574962616,0.668860793113709,-0.668870031833649,-0.324404388666153,0.668864071369171,-0.668866455554962,-0.324405014514923,0.21992239356041,-0.820751249790192,-0.527258515357971,0.219927161931992,-0.820750951766968,-0.527257204055786,0.244834780693054,-0.913684010505676,-0.324403494596481,0.244829654693604,-0.913685142993927,-0.324403941631317,-0.21992252767086,-0.820751786231995,-0.527257740497589,-0.219926819205284,-0.820749640464783,-0.527259111404419,-0.244834676384926,-0.913683652877808,-0.324404299259186,-0.244829684495926,-0.913685142993927,-0.324403911828995,-0.60083419084549,-0.600830435752869,-0.527258157730103,-0.600832462310791,-0.600834667682648,-0.527255356311798,-0.668861031532288,-0.668870329856873,-0.324403077363968,-0.66886430978775,-0.668866813182831,-0.32440373301506,-0.820753633975983,-0.219920888543129,-0.527255654335022,-0.820755302906036,-0.219920516014099,-0.527252912521362,-0.913687765598297,-0.24482074379921,-0.324403434991837,-0.913687586784363,-0.244821608066559,-0.324403434991837,-0.820755124092102,0.219921290874481,-0.527253031730652,-0.820753693580627,0.219920068979263,-0.527255833148956,-0.913687944412231,0.244820773601532,-0.324402868747711,-0.913687527179718,0.244821608066559,-0.324403315782547,0.668860793113709,-0.668870091438293,-0.324404180049896,0.66886043548584,-0.668869853019714,-0.324405401945114,0.707101881504059,-0.707111716270447,2.26429719418775e-008,0.244816929101944,-0.91368693113327,-0.324408680200577,0.244817331433296,-0.913688480854034,-0.324403762817383,0.258814364671707,-0.965927064418793,1.80998060983484e-008,-0.244817346334457,-0.91368842124939,-0.324404060840607,-0.244816869497299,-0.913686692714691,-0.324409276247025, +-0.258814364671707,-0.965927064418793,8.70701200028634e-009,-0.668861567974091,-0.66887092590332,-0.324401050806046,-0.668860793113709,-0.668870091438293,-0.324404388666153,-0.707101881504059,-0.707111716270447,-3.01890779041969e-009,-0.913687944412231,-0.244820773601532,-0.324402809143066,-0.913688361644745,-0.244820907711983,-0.324401438236237,-0.965926110744476,-0.258817911148071,-1.39361047146735e-008,-0.913688063621521,0.244820833206177,-0.324402391910553,-0.913687944412231,0.244820788502693,-0.324402749538422,-0.965926110744476,0.258817911148071,-2.11189288279456e-008,-0.668860852718353,0.668870151042938,-0.324403911828995,-0.668861210346222,0.668870627880096,-0.324402332305908,-0.707101881504059,0.707111716270447,-2.26429719418775e-008,-0.244834810495377,0.913684070110321,-0.324403136968613,-0.244834691286087,0.913683652877808,-0.324404209852219,-0.25883275270462,0.965922176837921,-1.81000725518743e-008,0.244834765791893,0.913683950901031,-0.324403256177902,0.244834735989571,0.913683891296387,-0.324403882026672,0.25883275270462,0.965922176837921,-8.7066087672838e-009,0.668860971927643,0.668870329856873,-0.324403256177902,0.668860971927643,0.668870329856873,-0.324403285980225,0.707101881504059,0.707111716270447,3.01890779041969e-009,0.913686037063599,0.244820266962051,-0.324408560991287,0.913687527179718,0.244820684194565,-0.324404120445251,0.965926110744476,0.258817911148071,1.39361047146735e-008,0.91368693113327,-0.244820520281792,-0.324405878782272,0.913686037063599,-0.244820281863213,-0.324408501386642,0.965926110744476,-0.258817911148071,2.11189288279456e-008,-0.668861210346222,0.668870508670807,-0.324402511119843,-0.668860733509064,0.668870091438293,-0.324404329061508,-0.707101881504059,0.707111716270447,-4.03985836783249e-007,-0.244817331433296,0.913688480854034,-0.324404060840607,-0.244816988706589,0.913687169551849,-0.324408024549484,-0.258814364671707,0.965927064418793,-1.37489365670262e-007,0.244816988706589,0.913687169551849,-0.324408024549484,0.244817391037941,0.913688540458679,-0.32440397143364, +0.258814364671707,0.965927064418793,1.65842720889486e-007,0.668860852718353,0.668870151042938,-0.324404031038284,0.668860912322998,0.668870270252228,-0.324403613805771,0.707101881504059,0.707111716270447,4.24742040650017e-007,0.913687527179718,0.244820699095726,-0.324403911828995,0.913686871528625,0.244820520281792,-0.324406206607819,0.965926110744476,0.258817911148071,5.69834412544878e-007,0.913686752319336,-0.244820475578308,-0.324406296014786,0.913687109947205,-0.244820594787598,-0.324405163526535,0.965926110744476,-0.258817911148071,5.62237175927294e-007,0.668860673904419,-0.668870031833649,-0.324404627084732,0.668860793113709,-0.668870031833649,-0.324404388666153,0.707101881504059,-0.707111716270447,4.03985836783249e-007,0.244834691286087,-0.913683712482452,-0.324404358863831,0.244834780693054,-0.913684010505676,-0.324403494596481,0.25883275270462,-0.965922176837921,1.3750020855241e-007,-0.244834780693054,-0.913684010505676,-0.324403494596481,-0.244834676384926,-0.913683652877808,-0.324404299259186,-0.25883275270462,-0.965922176837921,-1.65853421663087e-007,-0.668860852718353,-0.668870151042938,-0.324404150247574,-0.668861031532288,-0.668870329856873,-0.324403077363968,-0.707101881504059,-0.707111716270447,-4.24742040650017e-007,-0.913687765598297,-0.244820758700371,-0.324403375387192,-0.913687765598297,-0.24482074379921,-0.324403434991837,-0.965926110744476,-0.258817911148071,-5.69834412544878e-007,-0.913687765598297,0.24482074379921,-0.324403375387192,-0.913687944412231,0.244820773601532,-0.324402868747711,-0.965926110744476,0.258817911148071,-5.62237175927294e-007 + } + BinormalsW: *552 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + + } + LayerElementTangent: 0 { + Version: 102 + Name: "map1" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Tangents: *1656 { + a: -0.684590220451355,-0.724310636520386,0.0819165855646133,-0.72431617975235,-0.684584617614746,-0.0819143354892731,-0.752306759357452,-0.64800101518631,-0.118866622447968,-0.648000597953796,-0.752307236194611,0.118865691125393,-0.955027759075165,-0.284977555274963,0.0819144546985626,-0.969569563865662,-0.230705320835114,-0.0819143503904343,-0.975519180297852,-0.185024812817574,-0.1188620403409,-0.937339723110199,-0.327513545751572,0.118866056203842,-0.969569444656372,0.230706915259361,0.0819123312830925,-0.955027937889099,0.284976720809937,-0.081914559006691,-0.937339723110199,0.327513128519058,-0.118867121636868,-0.975519001483917,0.185026198625565,0.118861258029938,-0.724319517612457,0.684581339359283,0.0819130539894104,-0.68458765745163,0.72431343793869,-0.0819139331579208,-0.647998571395874,0.752309441566467,-0.11886277794838,-0.752309083938599,0.647998869419098,0.1188635379076,-0.284980654716492,0.955026805400848,0.0819138586521149,-0.230711549520493,0.969568133354187,-0.0819135159254074,-0.185031726956367,0.975517690181732,-0.118864223361015,-0.327517092227936,0.937338769435883,0.118863806128502,0.230710670351982,0.969568371772766,0.0819134041666985,0.284981846809387,0.955026388168335,-0.0819145441055298,0.327518701553345,0.93733811378479,-0.118864469230175,0.185031145811081,0.975517749786377,0.118863612413406,0.684590935707092,0.724310159683228,0.0819149985909462,0.724315881729126,0.684585154056549,-0.0819126963615417,0.752306938171387,0.648001074790955,-0.11886602640152,0.648001194000244,0.752306938171387,0.1188645362854,0.955023050308228,0.28499436378479,0.0819099470973015,0.969566106796265,0.230718433856964,-0.0819182246923447,0.975517451763153,0.185031458735466,-0.118866719305515,0.937336564064026,0.327524662017822,0.11886066198349,0.969564855098724,-0.230724170804024,0.0819170027971268,0.955024361610413,-0.284989655017853,-0.0819121152162552,0.937337815761566,-0.327520251274109,-0.118862621486187,0.975516319274902,-0.185036167502403,0.118867814540863,0.724318981170654,-0.684582233428955,0.0819103270769119, +0.684587061405182,-0.724313855171204,-0.0819153413176537,0.647998154163361,-0.752309739589691,-0.118863269686699,0.752309441566467,-0.647998571395874,0.118863932788372,0.284980833530426,-0.955026865005493,0.0819135382771492,0.230710536241531,-0.969568252563477,-0.0819147974252701,0.185030981898308,-0.975517690181732,-0.118864551186562,0.327517241239548,-0.937338709831238,0.118863664567471,-0.230709686875343,-0.969568490982056,0.0819146782159805,-0.284982144832611,-0.955026268959045,-0.081914409995079,-0.327518075704575,-0.937338471412659,-0.11886327713728,-0.185030430555344,-0.975517868995667,0.118863970041275,-0.647997975349426,-0.752309858798981,0.118863388895988,-0.752306938171387,-0.648000836372375,-0.118866458535194,-0.790212213993073,-0.59855705499649,-0.131506979465485,-0.598555743694305,-0.790213823318481,0.131503611803055,-0.937339901924133,-0.327512890100479,0.118866473436356,-0.975518941879272,-0.185025960206985,-0.11886278539896,-0.983623206615448,-0.123257175087929,-0.131503030657768,-0.91347324848175,-0.385062336921692,0.131506279110909,-0.975519180297852,0.185025542974472,0.118860833346844,-0.937339425086975,0.327514261007309,-0.11886639893055,-0.913472771644592,0.38506355881691,-0.13150580227375,-0.983623504638672,0.123256713151932,0.13150192797184,-0.752306461334229,0.648001492023468,0.118865840137005,-0.647998869419098,0.752309322357178,-0.118862956762314,-0.598556339740753,0.790213346481323,-0.131503492593765,-0.790212035179138,0.598557412624359,0.13150680065155,-0.327517747879028,0.937338590621948,0.118863381445408,-0.185031473636627,0.975517630577087,-0.118864051997662,-0.123259425163269,0.983622789382935,-0.131504893302917,-0.38506555557251,0.913472056388855,0.131504461169243,0.185031816363335,0.975517570972443,0.11886402964592,0.327518463134766,0.937338173389435,-0.118864625692368,0.385066151618958,0.913471698760986,-0.131504952907562,0.123259909451008,0.983622670173645,0.131504714488983,0.647998571395874,0.752309560775757,0.118862234055996,0.752308309078217,0.64799952507019,-0.118864685297012, +0.790213346481323,0.598556458950043,-0.131502851843834,0.598556995391846,0.790212750434875,0.131504207849503,0.937337577342987,0.327520757913589,0.11886315792799,0.975517392158508,0.185031577944756,-0.118866793811321,0.983622372150421,0.123260706663132,-0.131506696343422,0.913471221923828,0.385067760944366,0.131503462791443,0.975517332553864,-0.185032278299332,0.118865311145782,0.937337756156921,-0.327520370483398,-0.118862546980381,0.913471221923828,-0.385067880153656,-0.131503194570541,0.983622312545776,-0.123261094093323,0.131506115198135,0.752306699752808,-0.648001134395599,0.118866220116615,0.64799964427948,-0.752308249473572,-0.118864588439465,0.598558187484741,-0.79021155834198,-0.131505832076073,0.790212571620941,-0.59855717420578,0.131504490971565,0.327517926692963,-0.937338650226593,0.118863254785538,0.185030743479729,-0.975517749786377,-0.118864394724369,0.123259305953979,-0.98362272977829,-0.131504848599434,0.385065972805023,-0.913471817970276,0.131504714488983,-0.185031086206436,-0.975517690181732,0.118864387273788,-0.327517867088318,-0.937338650226593,-0.118863448500633,-0.385065376758575,-0.9134721159935,-0.131504312157631,-0.123259782791138,-0.983622670173645,0.131504699587822,-0.598555862903595,-0.790213644504547,0.131503790616989,-0.790212631225586,-0.598556637763977,-0.131506413221359,-0.828050851821899,-0.549311518669128,-0.112199410796165,-0.549311757087708,-0.828050971031189,0.112198039889336,-0.913472890853882,-0.385063052177429,0.131505444645882,-0.983623385429382,-0.123256832361221,-0.131502658128738,-0.991769194602966,-0.061691589653492,-0.112196549773216,-0.889744460582733,-0.442454487085342,0.112199917435646,-0.983623206615448,0.123257465660572,0.131502732634544,-0.913472890853882,0.385063201189041,-0.131506189703941,-0.889744579792023,0.442454516887665,-0.112199872732162,-0.991769134998322,0.0616924166679382,0.112196505069733,-0.790212154388428,0.59855729341507,0.131506606936455,-0.598556756973267,0.790212988853455,-0.131504058837891,-0.549312055110931,0.828050673007965,-0.112198814749718, +-0.828051090240479,0.549311220645905,0.112199813127518,-0.385065376758575,0.913472056388855,0.131504639983177,-0.123259350657463,0.983622789382935,-0.13150480389595,-0.0616930276155472,0.991768836975098,-0.112198553979397,-0.442456036806107,0.889743864536285,0.112198501825333,0.123259745538235,0.983622670173645,0.131504535675049,0.385066092014313,0.913471698760986,-0.131505042314529,0.442456483840942,0.889743626117706,-0.11219859868288,0.0616933330893517,0.991768836975098,0.11219847202301,0.598558068275452,0.790211796760559,0.131505712866783,0.790212869644165,0.598556995391846,-0.131503582000732,0.82804948091507,0.54931378364563,-0.112199135124683,0.549312293529511,0.828050374984741,0.112199112772942,0.913471281528473,0.385067909955978,0.131503388285637,0.983622550964355,0.123260036110878,-0.131505981087685,0.991768538951874,0.0616954304277897,-0.112200193107128,0.889743685722351,0.442456424236298,0.112198740243912,0.983622312545776,-0.123261176049709,0.131506204605103,0.913471400737762,-0.385067224502563,-0.131503909826279,0.889743566513062,-0.442456513643265,-0.112199001014233,0.991768479347229,-0.0616957880556583,0.112200796604156,0.790213584899902,-0.598556160926819,0.131503000855446,0.598557710647583,-0.790212035179138,-0.131505101919174,0.549312174320221,-0.828050673007965,-0.11219834536314,0.828050017356873,-0.549313008785248,0.11219821870327,0.385065853595734,-0.913471937179565,0.131504893302917,0.123259231448174,-0.98362272977829,-0.131504759192467,0.0616930089890957,-0.991768836975098,-0.112198553979397,0.442456781864166,-0.889743626117706,0.112198561429977,-0.123259626328945,-0.98362272977829,0.131504520773888,-0.385065317153931,-0.9134721159935,-0.131504386663437,-0.442456513643265,-0.889743626117706,-0.112198539078236,-0.0616933517158031,-0.991768836975098,0.112198449671268,-0.549311876296997,-0.828050673007965,0.112198516726494,-0.828050851821899,-0.549311518669128,-0.112199351191521,-0.855829656124115,-0.513228476047516,-0.0644369423389435,-0.513228595256805,-0.855829656124115,0.0644359290599823,-0.889744520187378,-0.442454308271408,0.112200245261192, +-0.991769134998322,-0.0616917312145233,-0.112196803092957,-0.997784614562988,-0.01655506901443,-0.0644359067082405,-0.872385025024414,-0.484553664922714,0.0644374340772629,-0.991769194602966,0.0616922341287136,0.112196169793606,-0.889744520187378,0.442454636096954,-0.112199619412422,-0.872385203838348,0.48455336689949,-0.0644371882081032,-0.997784614562988,0.0165552217513323,0.0644356980919838,-0.828051209449768,0.549310982227325,0.112199313938618,-0.549312055110931,0.828050673007965,-0.112198874354362,-0.513228595256805,0.855829775333405,-0.0644361823797226,-0.855829834938049,0.513228178024292,0.0644370913505554,-0.442456007003784,0.889743864536285,0.112198576331139,-0.0616930425167084,0.991768836975098,-0.112198583781719,-0.0165545679628849,0.997784674167633,-0.064435288310051,-0.484554558992386,0.872384607791901,0.0644357949495316,0.0616932921111584,0.991768836975098,0.112198397517204,0.442456483840942,0.889743626117706,-0.112198568880558,0.484556406736374,0.872383594512939,-0.0644354224205017,0.0165545176714659,0.997784674167633,0.0644352808594704,0.549312055110931,0.82805061340332,0.112198479473591,0.828049421310425,0.549313724040985,-0.112199068069458,0.855829358100891,0.513229429721832,-0.0644352063536644,0.513229608535767,0.855829119682312,0.0644348710775375,0.889743745326996,0.442456096410751,0.112199358642101,0.991768479347229,0.0616954974830151,-0.112200319766998,0.997784554958344,0.0165546741336584,-0.0644354894757271,0.872383832931519,0.484556019306183,0.0644351840019226,0.991768538951874,-0.0616954490542412,0.112200185656548,0.889743566513062,-0.44245657324791,-0.112198874354362,0.872383773326874,-0.484556496143341,-0.0644343495368958,0.997784554958344,-0.016554519534111,0.0644354522228241,0.828049838542938,-0.549313306808472,0.112198866903782,0.549312114715576,-0.828050553798676,-0.112198382616043,0.513229429721832,-0.855829417705536,-0.0644343420863152,0.85582959651947,-0.513229072093964,0.0644344463944435,0.442456692457199,-0.889743506908417,0.112198621034622,0.0616930276155472,-0.991768836975098,-0.112198583781719, +0.0165544059127569,-0.997784674167633,-0.0644351169466972,0.484556674957275,-0.872383534908295,0.0644348636269569,-0.0616933107376099,-0.991768836975098,0.112198375165462,-0.442456543445587,-0.889743626117706,-0.112198509275913,-0.484554797410965,-0.872384607791901,-0.0644356459379196,-0.0165545549243689,-0.997784674167633,0.0644350573420525,-0.513228595256805,-0.855829656124115,0.0644359663128853,-0.855829656124115,-0.513228476047516,-0.0644368976354599,-0.866026282310486,-0.499998420476913,-4.8825383736073e-009,-0.49999988079071,-0.866025507450104,1.18400834026033e-007,-0.872384965419769,-0.484553694725037,0.0644372850656509,-0.997784614562988,-0.0165551379323006,-0.064436174929142,-1,-2.04994890395938e-007,-4.87026341033925e-007,-0.866026341915131,-0.499998390674591,4.88252993591232e-009,-0.997784614562988,0.0165552590042353,0.0644358471035957,-0.872385263442993,0.48455348610878,-0.0644369348883629,-0.86602646112442,0.499998211860657,-4.80926757973066e-007,-1,-2.04994918817647e-007,4.8702509047871e-007,-0.855829834938049,0.513228178024292,0.064437061548233,-0.513228595256805,0.855829775333405,-0.0644362345337868,-0.50000011920929,0.866025328636169,-1.83094017724983e-009,-0.86602646112442,0.499998152256012,4.8093102122948e-007,-0.484554558992386,0.872384607791901,0.0644357800483704,-0.0165545530617237,0.997784674167633,-0.0644352361559868,-8.65532570060168e-008,1,-1.22062160379244e-009,-0.500000238418579,0.866025269031525,1.8309433968966e-009,0.0165545232594013,0.997784674167633,0.0644352957606316,0.484556496143341,0.872383713722229,-0.0644353181123734,0.499999523162842,0.866025686264038,-4.85806822325685e-007,-8.65532570060168e-008,1,1.22062671081835e-009,0.513229608535767,0.855829119682312,0.0644349083304405,0.855829119682312,0.513229489326477,-0.0644357651472092,0.866024732589722,0.500001192092896,-1.76261755768792e-006,0.499999403953552,0.866025745868683,-1.73651471868652e-007,0.872383832931519,0.484556019306183,0.0644351169466972,0.997784614562988,0.0165545791387558,-0.0644351243972778,1,2.733247761455e-008,1.28901808693627e-006, +0.866024732589722,0.500001192092896,1.10315647816606e-006,0.997784554958344,-0.0165545381605625,0.0644355267286301,0.872383713722229,-0.484556347131729,-0.064434714615345,0.866024672985077,-0.50000125169754,-1.30427463318483e-006,1,2.7332699659155e-008,-6.29556325293379e-007,0.855829536914825,-0.513229012489319,0.0644344091415405,0.513229310512543,-0.855829536914825,-0.0644337758421898,0.499999225139618,-0.866025865077972,1.30244632146059e-006,0.866024672985077,-0.50000125169754,6.44814463157672e-007,0.484556674957275,-0.872383534908295,0.0644348487257957,0.0165544357150793,-0.997784674167633,-0.0644352361559868,-2.27771685956668e-008,-1,-1.0924622984021e-007,0.49999925494194,-0.866025805473328,1.64783777734101e-008,-0.0165545605123043,-0.997784674167633,0.0644350722432137,-0.484554708003998,-0.872384548187256,-0.0644356906414032,-0.499999910593033,-0.866025447845459,-1.18400919291162e-007,-2.27771685956668e-008,-1,1.09245732460295e-007,-0.49999988079071,-0.866025507450104,1.18400933502016e-007,-0.866026282310486,-0.499998420476913,-4.88254237041019e-009,-0.855830073356628,-0.513228058815002,0.0644371286034584,-0.513228833675385,-0.855829536914825,-0.0644358471035957,-0.866026341915131,-0.499998390674591,4.88250950780866e-009,-1,-2.04994890395938e-007,-4.87024294670846e-007,-0.997784614562988,-0.0165552273392677,0.0644358471035957,-0.872385263442993,-0.484553217887878,-0.0644368603825569,-1,-2.04994918817647e-007,4.87027136841789e-007,-0.86602646112442,0.499998211860657,-4.80928747492726e-007,-0.872385144233704,0.48455348610878,0.0644367709755898,-0.997784614562988,0.0165551695972681,-0.0644361451268196,-0.86602646112442,0.499998152256012,4.80930680168967e-007,-0.50000011920929,0.866025328636169,-1.8309387339599e-009,-0.513228952884674,0.855829477310181,0.064435675740242,-0.855830073356628,0.513228058815002,-0.0644366219639778,-0.500000238418579,0.866025269031525,1.83094506223114e-009,-8.65532570060168e-008,1,-1.22062271401546e-009,-0.0165545083582401,0.997784674167633,0.0644353032112122,-0.484555244445801,0.872384250164032,-0.0644356608390808, +-8.65532570060168e-008,1,1.2206288202421e-009,0.499999523162842,0.866025686264038,-4.85807674976968e-007,0.484556347131729,0.872383654117584,0.0644349157810211,0.0165546089410782,0.997784554958344,-0.0644353926181793,0.499999403953552,0.866025745868683,-8.33113460885215e-007,0.866024732589722,0.500001192092896,-1.10315602341871e-006,0.855829536914825,0.513229191303253,0.0644348636269569,0.513229429721832,0.855829358100891,-0.0644352361559868,0.866024732589722,0.500001192092896,1.76261573869851e-006,1,2.73325504451805e-008,6.29556325293379e-007,0.997784554958344,0.0165545865893364,0.064435601234436,0.872383832931519,0.484556466341019,-0.0644338950514793,1,2.73327724897854e-008,-1.28901808693627e-006,0.866024672985077,-0.50000125169754,-6.44813553662971e-007,0.872383654117584,-0.484556406736374,0.0644344240427017,0.997784495353699,-0.0165549069643021,-0.0644364356994629,0.866024672985077,-0.50000125169754,1.3042763384874e-006,0.499999225139618,-0.866025865077972,6.42983877696679e-007,0.513228893280029,-0.85582959651947,0.0644345358014107,0.85582971572876,-0.513229012489319,-0.0644338354468346,0.49999925494194,-0.866025805473328,1.64783493517007e-008,-2.27771685956668e-008,-1,-1.09246030888244e-007,0.0165544524788857,-0.997784614562988,0.0644349828362465,0.484556198120117,-0.872383773326874,-0.0644346177577972,-2.27771685956668e-008,-1,1.09245632984312e-007,-0.499999910593033,-0.866025447845459,-1.18400819815179e-007,-0.484555095434189,-0.872384309768677,0.0644356459379196,-0.0165543742477894,-0.997784614562988,-0.0644349455833435,-0.513228833675385,-0.855829536914825,-0.0644357949495316,-0.855830073356628,-0.513228058815002,0.0644371584057808,-0.828051090240479,-0.54931104183197,0.112199746072292,-0.549312233924866,-0.828050494194031,-0.112198658287525,-0.872385323047638,-0.484553128480911,-0.0644371286034584,-0.997784614562988,-0.0165551900863647,0.0644356980919838,-0.991769134998322,-0.0616922527551651,0.112196654081345,-0.889744758605957,-0.442454040050507,-0.112199731171131,-0.997784614562988,0.0165551006793976,-0.0644358769059181, +-0.872385144233704,0.484553456306458,0.0644369199872017,-0.889744400978088,0.442454636096954,0.11219996213913,-0.991769075393677,0.0616924799978733,-0.112196855247021,-0.855830073356628,0.513228058815002,-0.064436674118042,-0.513228952884674,0.855829477310181,0.0644356459379196,-0.549311995506287,0.828050792217255,0.112198352813721,-0.828051209449768,0.54931104183197,-0.112199187278748,-0.484555244445801,0.872384250164032,-0.0644356086850166,-0.0165545027703047,0.997784674167633,0.064435288310051,-0.0616933256387711,0.991768836975098,0.11219859868288,-0.442456722259521,0.889743566513062,-0.112198486924171,0.0165545810014009,0.997784674167633,-0.064435288310051,0.484556347131729,0.872383654117584,0.0644349306821823,0.44245657324791,0.889743685722351,0.112198866903782,0.0616933405399323,0.991768836975098,-0.112198628485203,0.513229250907898,0.855829417705536,-0.0644345581531525,0.855829417705536,0.513229131698608,0.0644348859786987,0.828049659729004,0.549313306808472,0.112199455499649,0.5493124127388,0.828050374984741,-0.112198524177074,0.872383773326874,0.484556198120117,-0.0644347444176674,0.997784554958344,0.0165545679628849,0.0644355267286301,0.991768538951874,0.0616953670978546,0.112200222909451,0.889743983745575,0.442455679178238,-0.112198919057846,0.997784554958344,-0.0165546871721745,-0.0644355714321136,0.872383713722229,-0.484556376934052,0.0644344985485077,0.889743864536285,-0.442456215620041,0.112198814749718,0.991768479347229,-0.0616954676806927,-0.112200319766998,0.855829477310181,-0.513229072093964,-0.0644344910979271,0.513228893280029,-0.85582959651947,0.0644344985485077,0.549312233924866,-0.82805061340332,0.11219833791256,0.828050017356873,-0.549312949180603,-0.11219909787178,0.48455622792244,-0.872383892536163,-0.0644347444176674,0.0165544487535954,-0.997784614562988,0.0644349679350853,0.061693400144577,-0.991768836975098,0.112198553979397,0.442456722259521,-0.889743506908417,-0.112198673188686,-0.0165543891489506,-0.997784614562988,-0.0644350051879883,-0.484555125236511,-0.872384428977966,0.0644356682896614, +-0.442456364631653,-0.889743804931641,0.112198702991009,-0.0616932660341263,-0.991768836975098,-0.112198673188686,-0.549312174320221,-0.828050494194031,-0.11219859868288,-0.828050971031189,-0.549311280250549,0.112200245261192,-0.790212213993073,-0.59855717420578,0.131506621837616,-0.598556339740753,-0.790213346481323,-0.131504312157631,-0.889744758605957,-0.442453891038895,-0.112199984490871,-0.991769075393677,-0.06169243901968,0.112196989357471,-0.983623206615448,-0.123257361352444,0.131502851843834,-0.913472771644592,-0.385063230991364,-0.131506130099297,-0.991769134998322,0.0616923421621323,-0.11219660192728,-0.889744341373444,0.442454814910889,0.112199626863003,-0.913472712039948,0.385063499212265,0.131505653262138,-0.983623385429382,0.123256921768188,-0.131502568721771,-0.828051149845123,0.54931104183197,-0.112199239432812,-0.549311757087708,0.828050851821899,0.11219784617424,-0.59855580329895,0.790213704109192,0.131503865122795,-0.790212750434875,0.598556697368622,-0.131506189703941,-0.442456692457199,0.889743566513062,-0.112198516726494,-0.0616933666169643,0.991768836975098,0.112198673188686,-0.123259708285332,0.983622670173645,0.131504610180855,-0.385065197944641,0.913472175598145,-0.131504327058792,0.0616933256387711,0.991768836975098,-0.11219859868288,0.442456603050232,0.889743685722351,0.112198792397976,0.385065883398056,0.913471937179565,0.131504759192467,0.123259469866753,0.983622789382935,-0.131504714488983,0.5493124127388,0.828050374984741,-0.11219846457243,0.828049898147583,0.549313068389893,0.112198814749718,0.790213346481323,0.598556518554688,0.131502687931061,0.598557531833649,0.790212273597717,-0.131505191326141,0.889744102954865,0.442455679178238,-0.112199060618877,0.991768479347229,0.0616957023739815,0.11220084130764,0.983622312545776,0.123260982334614,0.131506383419037,0.913471221923828,0.385067403316498,-0.131504282355309,0.991768538951874,-0.0616954006254673,-0.112200200557709,0.889743685722351,-0.442456483840942,0.112198181450367,0.913470983505249,-0.385068297386169,0.131503522396088,0.983622491359711,-0.123260214924812,-0.131505757570267, +0.828050017356873,-0.549312949180603,-0.112199150025845,0.549312472343445,-0.828050255775452,0.11219896376133,0.598558127880096,-0.790211617946625,0.131505742669106,0.790213108062744,-0.598556816577911,-0.131503447890282,0.442456722259521,-0.889743506908417,-0.112198702991009,0.0616934411227703,-0.991768836975098,0.112198628485203,0.123259648680687,-0.983622670173645,0.13150480389595,0.385065913200378,-0.913471817970276,-0.131505012512207,-0.0616932511329651,-0.991768836975098,-0.112198643386364,-0.442456394433975,-0.889743804931641,0.112198628485203,-0.385065466165543,-0.913472175598145,0.131504356861115,-0.123259782791138,-0.983622670173645,-0.131504505872726,-0.59855592250824,-0.790213644504547,-0.131503745913506,-0.790212094783783,-0.59855729341507,0.131506815552711,-0.752306818962097,-0.648000955581665,0.118866324424744,-0.647998154163361,-0.752309679985046,-0.118863463401794,-0.913472652435303,-0.385063588619232,-0.131505742669106,-0.983623385429382,-0.123256593942642,0.131502032279968,-0.975519120693207,-0.185025528073311,0.118861116468906,-0.937339305877686,-0.327514588832855,-0.118866413831711,-0.983623206615448,0.123257271945477,-0.131502941250801,-0.913473010063171,0.385062783956528,0.131506487727165,-0.937339961528778,0.327512711286545,0.118866510689259,-0.975518941879272,0.185026422142982,-0.118862271308899,-0.790212273597717,0.59855705499649,-0.131506726145744,-0.598555684089661,0.790213823318481,0.1315036714077,-0.647997856140137,0.752309918403625,0.118863664567471,-0.752306699752808,0.648001134395599,-0.118866145610809,-0.385065346956253,0.913472235202789,-0.131504252552986,-0.123259872198105,0.983622670173645,0.131504774093628,-0.185030922293663,0.975517690181732,0.118864580988884,-0.327517569065094,0.937338709831238,-0.118863075971603,0.123259536921978,0.983622670173645,-0.131504788994789,0.385065972805023,0.913471817970276,0.131504565477371,0.327518612146378,0.93733823299408,0.118863731622696,0.185030743479729,0.975517749786377,-0.118864305317402,0.598558008670807,0.79021167755127,-0.131505906581879, +0.790212333202362,0.598557591438293,0.13150417804718,0.752306759357452,0.648001134395599,0.118865676224232,0.647999227046967,0.75230872631073,-0.118864759802818,0.913471162319183,0.385068118572235,-0.131503582000732,0.983622312545776,0.123260900378227,0.13150629401207,0.975517451763153,0.185031875967979,0.118866011500359,0.937337398529053,0.327521175146103,-0.118863515555859,0.983622312545776,-0.123260878026485,-0.131506472826004,0.913470983505249,-0.385068237781525,0.131503611803055,0.937337338924408,-0.327521175146103,0.118863791227341,0.975517392158508,-0.185031995177269,-0.118866078555584,0.790213525295258,-0.598556280136108,-0.131502702832222,0.598557114601135,-0.790212631225586,0.131504267454147,0.647998213768005,-0.752309739589691,0.118862830102444,0.752308249473572,-0.647999703884125,-0.118864208459854,0.385066002607346,-0.913471758365631,-0.13150492310524,0.12325981259346,-0.983622610569,0.131504982709885,0.185031309723854,-0.975517630577087,0.118864595890045,0.327518165111542,-0.937338352203369,-0.11886402964592,-0.123259864747524,-0.983622670173645,-0.131504595279694,-0.38506555557251,-0.913472056388855,0.131504163146019,-0.327518254518509,-0.937338411808014,0.118863478302956,-0.18503150343895,-0.975517690181732,-0.118863724172115,-0.647997975349426,-0.752309858798981,-0.118863292038441,-0.752309441566467,-0.647998332977295,0.118864022195339,-0.724319517612457,-0.684581279754639,0.0819130912423134,-0.684587478637695,-0.724313497543335,-0.0819141417741776,-0.937339603900909,-0.327513456344604,-0.118867143988609,-0.975518941879272,-0.185026198625565,0.118861541152,-0.969569325447083,-0.230706676840782,0.0819132700562477,-0.955027937889099,-0.284976691007614,-0.0819145143032074,-0.975519120693207,0.185025274753571,-0.11886153370142,-0.937339782714844,0.32751339673996,0.118866086006165,-0.955027759075165,0.284977376461029,0.0819138288497925,-0.969569563865662,0.230705857276917,-0.0819129794836044,-0.752306520938873,0.648001313209534,-0.118866316974163,-0.648000538349152,0.752307415008545,0.118865981698036,-0.684590578079224,0.724310398101807,0.081915870308876, +-0.724316298961639,0.684584438800812,-0.081914946436882,-0.327517837285995,0.937338709831238,-0.118862934410572,-0.185030251741409,0.975517868995667,0.11886415630579,-0.230710029602051,0.969568431377411,0.0819143205881119,-0.284981906414032,0.955026388168335,-0.0819142982363701,0.185030981898308,0.975517690181732,-0.118864461779594,0.327517956495285,0.937338411808014,0.118864148855209,0.284981161355972,0.955026566982269,0.0819143727421761,0.23071101307869,0.969568252563477,-0.081914097070694,0.647997736930847,0.752310216426849,-0.118863441050053,0.752309501171112,0.647998571395874,0.118863388895988,0.724319040775299,0.684582054615021,0.0819105878472328,0.684587001800537,0.724313855171204,-0.0819149985909462,0.937337398529053,0.327521055936813,-0.118863590061665,0.975516319274902,0.18503575026989,0.118868499994278,0.96956479549408,0.230723693966866,0.0819184482097626,0.955024242401123,0.284989774227142,-0.0819123089313507,0.975517451763153,-0.185031875967979,-0.118866004049778,0.937336325645447,-0.327525079250336,0.11886128783226,0.955022990703583,-0.284994453191757,0.0819102078676224,0.969566106796265,-0.230718910694122,-0.0819167494773865,0.752306818962097,-0.648001253604889,-0.118865542113781,0.648000836372375,-0.752307116985321,0.118865132331848,0.684590637683868,-0.724310338497162,0.0819156616926193,0.724315881729126,-0.684585213661194,-0.081912487745285,0.327518403530121,-0.937338292598724,-0.118863873183727,0.185030654072762,-0.975517809391022,0.118864178657532,0.230710625648499,-0.969568371772766,0.0819133743643761,0.284981846809387,-0.955026388168335,-0.0819142535328865,-0.185031741857529,-0.975517630577087,-0.118863880634308,-0.327517569065094,-0.937338590621948,0.11886390298605,-0.284980893135071,-0.955026686191559,0.0819142609834671,-0.230711415410042,-0.969568252563477,-0.0819138139486313,-0.724319398403168,-0.684581398963928,-0.0819127708673477,-0.684590220451355,-0.724310636520386,0.0819165855646133,-0.707111716270447,-0.707101881504059,-3.01922309375868e-009,-0.969569325447083,-0.230706125497818,-0.0819146409630775, +-0.955027759075165,-0.284977555274963,0.0819144546985626,-0.965927064418793,-0.258814364671707,-1.3936171328055e-008,-0.95502769947052,0.284977525472641,-0.0819142758846283,-0.969569444656372,0.230706915259361,0.0819123312830925,-0.965927064418793,0.258814364671707,-2.11188968535225e-008,-0.684590876102448,0.724310159683228,-0.0819154903292656,-0.724319517612457,0.684581339359283,0.0819130539894104,-0.707111716270447,0.707101881504059,-2.26430145744416e-008,-0.230710729956627,0.969568371772766,-0.0819132328033447,-0.284980654716492,0.955026805400848,0.0819138586521149,-0.258817911148071,0.965926110744476,-1.80998576126967e-008,0.284981042146683,0.955026566982269,-0.0819148346781731,0.230710670351982,0.969568371772766,0.0819134041666985,0.258817911148071,0.965926110744476,-8.70693384058541e-009,0.724319100379944,0.684581935405731,-0.0819111242890358,0.684590935707092,0.724310159683228,0.0819149985909462,0.707111716270447,0.707101881504059,3.01922309375868e-009,0.96956479549408,0.230723217129707,-0.0819199234247208,0.955023050308228,0.28499436378479,0.0819099470973015,0.965922176837921,0.25883275270462,1.39358276030066e-008,0.955022990703583,-0.284994423389435,-0.0819104090332985,0.969564855098724,-0.230724170804024,0.0819170027971268,0.965922176837921,-0.25883275270462,2.11190638310654e-008,0.684590280056,-0.724310576915741,-0.0819168984889984,0.724318981170654,-0.684582233428955,0.0819103270769119,0.707111716270447,-0.707101881504059,2.26430145744416e-008,0.230709731578827,-0.969568490982056,-0.0819145068526268,0.284980833530426,-0.955026865005493,0.0819135382771492,0.258817911148071,-0.965926110744476,1.80998576126967e-008,-0.284981310367584,-0.955026507377625,-0.0819147005677223,-0.230709686875343,-0.969568490982056,0.0819146782159805,-0.258817911148071,-0.965926110744476,8.70693384058541e-009,-0.684590697288513,-0.724310278892517,-0.0819157138466835,-0.724319517612457,-0.684581279754639,0.0819130912423134,-0.707111716270447,-0.707101881504059,-4.24747668148484e-007,-0.95502769947052,-0.284977495670319,-0.0819142237305641, +-0.969569325447083,-0.230706676840782,0.0819132700562477,-0.965927064418793,-0.258814364671707,-5.69834924135648e-007,-0.969569325447083,0.230706676840782,-0.0819132700562477,-0.955027759075165,0.284977376461029,0.0819138288497925,-0.965927064418793,0.258814364671707,-5.62237801204901e-007,-0.724319517612457,0.684581220149994,-0.0819133818149567,-0.684590578079224,0.724310398101807,0.081915870308876,-0.707111716270447,0.707101881504059,-4.03991748498811e-007,-0.284981101751328,0.955026566982269,-0.0819145888090134,-0.230710029602051,0.969568431377411,0.0819143205881119,-0.258817911148071,0.965926110744476,-1.37491454665906e-007,0.230710193514824,0.969568431377411,-0.0819138139486313,0.284981161355972,0.955026566982269,0.0819143727421761,0.258817911148071,0.965926110744476,1.65844795674275e-007,0.684590280056,0.724310576915741,-0.0819165632128716,0.724319040775299,0.684582054615021,0.0819105878472328,0.707111716270447,0.707101881504059,4.24747668148484e-007,0.955022931098938,0.284994572401047,-0.081910602748394,0.96956479549408,0.230723693966866,0.0819184482097626,0.965922176837921,0.25883275270462,5.69832309338381e-007,0.96956479549408,-0.230723693966866,-0.0819184482097626,0.955022990703583,-0.284994453191757,0.0819102078676224,0.965922176837921,-0.25883275270462,5.62234617973445e-007,0.724319100379944,-0.684581935405731,-0.0819109156727791,0.684590637683868,-0.724310338497162,0.0819156616926193,0.707111716270447,-0.707101881504059,4.03991748498811e-007,0.284981042146683,-0.955026626586914,-0.0819145441055298,0.230710625648499,-0.969568371772766,0.0819133743643761,0.258817911148071,-0.965926110744476,1.37491454665906e-007,-0.230710580945015,-0.969568371772766,-0.0819135159254074,-0.284980893135071,-0.955026686191559,0.0819142609834671,-0.258817911148071,-0.965926110744476,-1.65844795674275e-007 + } + TangentsW: *552 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementUV: 0 { + Version: 101 + Name: "map1" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *334 { + a: 0,0.0833333358168602,0.0833333358168602,0.0833333358168602,0.0833333358168602,0.16666667163372,0,0.16666667163372,0.16666667163372,0.0833333358168602,0.16666667163372,0.16666667163372,0.25,0.0833333358168602,0.25,0.16666667163372,0.333333343267441,0.0833333358168602,0.333333343267441,0.16666667163372,0.416666686534882,0.0833333358168602,0.416666686534882,0.16666667163372,0.5,0.0833333358168602,0.5,0.16666667163372,0.583333313465118,0.0833333358168602,0.583333313465118,0.16666667163372,0.666666626930237,0.0833333358168602,0.666666626930237,0.16666667163372,0.749999940395355,0.0833333358168602,0.749999940395355,0.16666667163372,0.833333253860474,0.0833333358168602,0.833333253860474,0.16666667163372,0.916666567325592,0.0833333358168602,0.916666567325592,0.16666667163372,0.99999988079071,0.0833333358168602,0.99999988079071,0.16666667163372,0.0833333358168602,0.25,0,0.25,0.16666667163372,0.25,0.25,0.25,0.333333343267441,0.25,0.416666686534882,0.25,0.5,0.25,0.583333313465118,0.25,0.666666626930237,0.25,0.749999940395355,0.25,0.833333253860474,0.25,0.916666567325592,0.25,0.99999988079071,0.25,0.0833333358168602,0.333333343267441,0,0.333333343267441,0.16666667163372,0.333333343267441,0.25,0.333333343267441,0.333333343267441,0.333333343267441,0.416666686534882,0.333333343267441,0.5,0.333333343267441,0.583333313465118,0.333333343267441,0.666666626930237,0.333333343267441,0.749999940395355,0.333333343267441,0.833333253860474,0.333333343267441,0.916666567325592,0.333333343267441,0.99999988079071,0.333333343267441,0.0833333358168602,0.416666686534882,0,0.416666686534882,0.16666667163372,0.416666686534882,0.25,0.416666686534882,0.333333343267441,0.416666686534882,0.416666686534882,0.416666686534882,0.5,0.416666686534882,0.583333313465118,0.416666686534882,0.666666626930237,0.416666686534882,0.749999940395355,0.416666686534882,0.833333253860474,0.416666686534882,0.916666567325592,0.416666686534882,0.99999988079071,0.416666686534882,0.0833333358168602,0.5,0,0.5,0.16666667163372,0.5,0.25,0.5,0.333333343267441, +0.5,0.416666686534882,0.5,0.5,0.5,0.583333313465118,0.5,0.666666626930237,0.5,0.749999940395355,0.5,0.833333253860474,0.5,0.916666567325592,0.5,0.99999988079071,0.5,0.0833333358168602,0.583333313465118,0,0.583333313465118,0.16666667163372,0.583333313465118,0.25,0.583333313465118,0.333333343267441,0.583333313465118,0.416666686534882,0.583333313465118,0.5,0.583333313465118,0.583333313465118,0.583333313465118,0.666666626930237,0.583333313465118,0.749999940395355,0.583333313465118,0.833333253860474,0.583333313465118,0.916666567325592,0.583333313465118,0.99999988079071,0.583333313465118,0.0833333358168602,0.666666626930237,0,0.666666626930237,0.16666667163372,0.666666626930237,0.25,0.666666626930237,0.333333343267441,0.666666626930237,0.416666686534882,0.666666626930237,0.5,0.666666626930237,0.583333313465118,0.666666626930237,0.666666626930237,0.666666626930237,0.749999940395355,0.666666626930237,0.833333253860474,0.666666626930237,0.916666567325592,0.666666626930237,0.99999988079071,0.666666626930237,0.0833333358168602,0.749999940395355,0,0.749999940395355,0.16666667163372,0.749999940395355,0.25,0.749999940395355,0.333333343267441,0.749999940395355,0.416666686534882,0.749999940395355,0.5,0.749999940395355,0.583333313465118,0.749999940395355,0.666666626930237,0.749999940395355,0.749999940395355,0.749999940395355,0.833333253860474,0.749999940395355,0.916666567325592,0.749999940395355,0.99999988079071,0.749999940395355,0.0833333358168602,0.833333253860474,0,0.833333253860474,0.16666667163372,0.833333253860474,0.25,0.833333253860474,0.333333343267441,0.833333253860474,0.416666686534882,0.833333253860474,0.5,0.833333253860474,0.583333313465118,0.833333253860474,0.666666626930237,0.833333253860474,0.749999940395355,0.833333253860474,0.833333253860474,0.833333253860474,0.916666567325592,0.833333253860474,0.99999988079071,0.833333253860474,0.0833333358168602,0.916666567325592,0,0.916666567325592,0.16666667163372,0.916666567325592,0.25,0.916666567325592,0.333333343267441,0.916666567325592,0.416666686534882,0.916666567325592,0.5, +0.916666567325592,0.583333313465118,0.916666567325592,0.666666626930237,0.916666567325592,0.749999940395355,0.916666567325592,0.833333253860474,0.916666567325592,0.916666567325592,0.916666567325592,0.99999988079071,0.916666567325592,0.0416666679084301,0,0.125,0,0.208333343267441,0,0.291666686534882,0,0.375,0,0.458333343267441,0,0.541666686534882,0,0.625,0,0.708333373069763,0,0.791666686534882,0,0.875,0,0.958333373069763,0,0.0416666679084301,1,0.125,1,0.208333343267441,1,0.291666686534882,1,0.375,1,0.458333343267441,1,0.541666686534882,1,0.625,1,0.708333373069763,1,0.791666686534882,1,0.875,1,0.958333373069763,1 + } + UVIndex: *552 { + a: 0,1,2,3,1,4,5,2,4,6,7,5,6,8,9,7,8,10,11,9,10,12,13,11,12,14,15,13,14,16,17,15,16,18,19,17,18,20,21,19,20,22,23,21,22,24,25,23,3,2,26,27,2,5,28,26,5,7,29,28,7,9,30,29,9,11,31,30,11,13,32,31,13,15,33,32,15,17,34,33,17,19,35,34,19,21,36,35,21,23,37,36,23,25,38,37,27,26,39,40,26,28,41,39,28,29,42,41,29,30,43,42,30,31,44,43,31,32,45,44,32,33,46,45,33,34,47,46,34,35,48,47,35,36,49,48,36,37,50,49,37,38,51,50,40,39,52,53,39,41,54,52,41,42,55,54,42,43,56,55,43,44,57,56,44,45,58,57,45,46,59,58,46,47,60,59,47,48,61,60,48,49,62,61,49,50,63,62,50,51,64,63,53,52,65,66,52,54,67,65,54,55,68,67,55,56,69,68,56,57,70,69,57,58,71,70,58,59,72,71,59,60,73,72,60,61,74,73,61,62,75,74,62,63,76,75,63,64,77,76,66,65,78,79,65,67,80,78,67,68,81,80,68,69,82,81,69,70,83,82,70,71,84,83,71,72,85,84,72,73,86,85,73,74,87,86,74,75,88,87,75,76,89,88,76,77,90,89,79,78,91,92,78,80,93,91,80,81,94,93,81,82,95,94,82,83,96,95,83,84,97,96,84,85,98,97,85,86,99,98,86,87,100,99,87,88,101,100,88,89,102,101,89,90,103,102,92,91,104,105,91,93,106,104,93,94,107,106,94,95,108,107,95,96,109,108,96,97,110,109,97,98,111,110,98,99,112,111,99,100,113,112,100,101,114,113,101,102,115,114,102,103,116,115,105,104,117,118,104,106,119,117,106,107,120,119,107,108,121,120,108,109,122,121,109,110,123,122,110,111,124,123,111,112,125,124,112,113,126,125,113,114,127,126,114,115,128,127,115,116,129,128,118,117,130,131,117,119,132,130,119,120,133,132,120,121,134,133,121,122,135,134,122,123,136,135,123,124,137,136,124,125,138,137,125,126,139,138,126,127,140,139,127,128,141,140,128,129,142,141,1,0,143,4,1,144,6,4,145,8,6,146,10,8,147,12,10,148,14,12,149,16,14,150,18,16,151,20,18,152,22,20,153,24,22,154,131,130,155,130,132,156,132,133,157,133,134,158,134,135,159,135,136,160,136,137,161,137,138,162,138,139,163,139,140,164,140,141,165,141,142,166 + } + } + LayerElementSmoothing: 0 { + Version: 102 + Name: "" + MappingInformationType: "ByEdge" + ReferenceInformationType: "Direct" + Smoothing: *276 { + a: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + } + } + LayerElementMaterial: 0 { + Version: 101 + Name: "" + MappingInformationType: "AllSame" + ReferenceInformationType: "IndexToDirect" + Materials: *1 { + a: 0 + } + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementBinormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementTangent" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementSmoothing" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 0 + } + } + } + Model: 358194480, "Model::Mallet1", "Null" { + Version: 232 + Properties70: { + P: "RotationPivot", "Vector3D", "Vector", "",0,94.0336531599909,-20.5832729165206 + P: "ScalingPivot", "Vector3D", "Vector", "",0,94.0336531599909,-20.5832729165206 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "currentUVSet", "KString", "", "U", "map1" + } + Shading: Y + Culling: "CullingOff" + } + Model: 1455902608, "Model::polySurface1", "Mesh" { + Version: 232 + Properties70: { + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "currentUVSet", "KString", "", "U", "map1" + } + Shading: T + Culling: "CullingOff" + } + Model: 1455904928, "Model::polySurface2", "Mesh" { + Version: 232 + Properties70: { + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "currentUVSet", "KString", "", "U", "map1" + } + Shading: T + Culling: "CullingOff" + } + Material: 1448217264, "Material::Steel", "" { + Version: 102 + ShadingModel: "unknown" + MultiLayer: 0 + Properties70: { + P: "Maya", "Compound", "", "" + P: "Maya|TypeId", "int", "Integer", "",1166017 + P: "Maya|TEX_global_diffuse_cube", "Vector3D", "Vector", "",0,0,0 + P: "Maya|TEX_global_specular_cube", "Vector3D", "Vector", "",0,0,0 + P: "Maya|TEX_brdf_lut", "Vector3D", "Vector", "",0,0,0 + P: "Maya|use_normal_map", "float", "", "",0 + P: "Maya|TEX_normal_map", "Vector3D", "Vector", "",0,0,0 + P: "Maya|use_color_map", "float", "", "",0 + P: "Maya|TEX_color_map", "Vector3D", "Vector", "",0,0,0 + P: "Maya|base_color", "Vector3D", "Vector", "",1,1,1 + P: "Maya|use_metallic_map", "float", "", "",0 + P: "Maya|TEX_metallic_map", "Vector3D", "Vector", "",0,0,0 + P: "Maya|metallic", "float", "", "",1 + P: "Maya|use_roughness_map", "float", "", "",0 + P: "Maya|TEX_roughness_map", "Vector3D", "Vector", "",0,0,0 + P: "Maya|roughness", "float", "", "",0.5 + P: "Maya|use_emissive_map", "float", "", "",0 + P: "Maya|TEX_emissive_map", "Vector3D", "Vector", "",0,0,0 + P: "Maya|emissive", "Vector3D", "Vector", "",0,0,0 + P: "Maya|emissive_intensity", "float", "", "",0 + P: "Maya|use_ao_map", "float", "", "",0 + P: "Maya|TEX_ao_map", "Vector3D", "Vector", "",0,0,0 + } + } + Video: 1457060240, "Video::file2", "Clip" { + Type: "Clip" + Properties70: { + P: "Path", "KString", "XRefUrl", "", "C:/Program Files/Autodesk/MayaLT2017/presets/ShaderFX/Images/PBS/midday/specular_cube.dds" + } + UseMipMap: 0 + Filename: "C:/Program Files/Autodesk/MayaLT2017/presets/ShaderFX/Images/PBS/midday/specular_cube.dds" + RelativeFilename: "..\..\..\Program Files\Autodesk\MayaLT2017\presets\ShaderFX\Images\PBS\midday\specular_cube.dds" + } + Video: 1457060640, "Video::file1", "Clip" { + Type: "Clip" + Properties70: { + P: "Path", "KString", "XRefUrl", "", "C:/Program Files/Autodesk/MayaLT2017/presets/ShaderFX/Images/PBS/midday/diffuse_cube.dds" + } + UseMipMap: 0 + Filename: "C:/Program Files/Autodesk/MayaLT2017/presets/ShaderFX/Images/PBS/midday/diffuse_cube.dds" + RelativeFilename: "..\..\..\Program Files\Autodesk\MayaLT2017\presets\ShaderFX\Images\PBS\midday\diffuse_cube.dds" + } + Video: 1457061040, "Video::file3", "Clip" { + Type: "Clip" + Properties70: { + P: "Path", "KString", "XRefUrl", "", "C:/Program Files/Autodesk/MayaLT2017/presets/ShaderFX/Images/PBS/ibl_brdf_lut.dds" + } + UseMipMap: 0 + Filename: "C:/Program Files/Autodesk/MayaLT2017/presets/ShaderFX/Images/PBS/ibl_brdf_lut.dds" + RelativeFilename: "..\..\..\Program Files\Autodesk\MayaLT2017\presets\ShaderFX\Images\PBS\ibl_brdf_lut.dds" + } + Texture: 1446195296, "Texture::file2", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::file2" + Properties70: { + P: "UseMaterial", "bool", "", "",1 + } + Media: "Video::file2" + FileName: "C:/Program Files/Autodesk/MayaLT2017/presets/ShaderFX/Images/PBS/midday/specular_cube.dds" + RelativeFilename: "..\..\..\Program Files\Autodesk\MayaLT2017\presets\ShaderFX\Images\PBS\midday\specular_cube.dds" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Texture: 1446197696, "Texture::file1", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::file1" + Properties70: { + P: "UseMaterial", "bool", "", "",1 + } + Media: "Video::file1" + FileName: "C:/Program Files/Autodesk/MayaLT2017/presets/ShaderFX/Images/PBS/midday/diffuse_cube.dds" + RelativeFilename: "..\..\..\Program Files\Autodesk\MayaLT2017\presets\ShaderFX\Images\PBS\midday\diffuse_cube.dds" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Texture: 1446196736, "Texture::file3", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::file3" + Properties70: { + P: "UseMaterial", "bool", "", "",1 + } + Media: "Video::file3" + FileName: "C:/Program Files/Autodesk/MayaLT2017/presets/ShaderFX/Images/PBS/ibl_brdf_lut.dds" + RelativeFilename: "..\..\..\Program Files\Autodesk\MayaLT2017\presets\ShaderFX\Images\PBS\ibl_brdf_lut.dds" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Implementation: 1452878032, "Implementation::Steel_Implementation", "" { + Version: 100 + Properties70: { + P: "ShaderLanguage", "KString", "", "", "SFX" + P: "ShaderLanguageVersion", "KString", "", "", "28" + P: "RenderAPI", "KString", "", "", "SFX_PBS_SHADER" + P: "RootBindingName", "KString", "", "", "root" + P: "ShaderGraph", "Blob", "", "",32213 { + BinaryData: "U0ZCX1dJTiA9IHsgcGFyZW50X21hdGVyaWFsID0gImNvcmUvc3RpbmdyYXlfcmVuZGVyZXIvc2hhZGVyX2ltcG9ydC9zdGFuZGFyZCIgLyoKVmVyc2lvbj0yOApHcm91cFZlcnNpb249LTEuMDAwMDAwCkFkdmFuY2VkPTAKSGVscElEPTAKUGFyZW50TWF0ZXJpYWw9cHJlc2V0cy9TdGFuZGFyZApOdW1iZXJPZk5vZGVzPTMyCiNOVD0yMDE4OSAwCglQQz0zCgluYW1lPTEgdj01MDAwIE1ldGFsbGljX01hcF9Td2l0Y2gKCXBvc3g9MSB2PTIwMDMgMTAyMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgMjQwLjAwMDAwMAoJZ3JvdXA9LTEKCUlTQz00CgkJU1ZUPTUwMjIgMjAwMyAxIDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDIgMSAwIAoJCVNEVj0xLjAwMDAwMAoJCVNWVD01MDIyIDIwMDMgMyAwIDEgCgkJU0NTPXIKCQlTVlQ9NTAyMiAyMDAzIDQgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAyMDAzIDUgCgkJQ0M9MQoJCQlDPTAgMCA1IDUgNSA2IDAKCQkJQ1BDPTAKI05UPTIwMTg5IDAKCVBDPTMKCW5hbWU9MSB2PTUwMDAgRW1pc3NpdmVfTWFwX1N3aXRjaAoJcG9zeD0xIHY9MjAwMyA3NDAuMDAwMDAwCglwb3N5PTEgdj0yMDAzIDc4MC4wMDAwMDAKCWdyb3VwPS0xCglJU0M9NAoJCVNWVD01MDIyIDIwMDMgMSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAyIDEgMCAKCQlTRFY9MS4wMDAwMDAKCQlTVlQ9NTAyMiAzMDAyIDMgMCAxIAoJCVNDUz1yZ2IKCQlTVlQ9NTAyMiAzMDAyIDQgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAyIDUgCgkJQ0M9MQoJCQlDPTEgMCA1IDEwIDAgMSAwCgkJCUNQQz0wCiNOVD0yMDE4OSAwCglQQz0zCgluYW1lPTEgdj01MDAwIENvbG9yX01hcF9Td2l0Y2gKCXBvc3g9MSB2PTIwMDMgMTAyMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgLTM0MC4wMDAwMDAKCWdyb3VwPS0xCglJU0M9NAoJCVNWVD01MDIyIDIwMDMgMSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAyIDEgMCAKCQlTRFY9MS4wMDAwMDAKCQlTVlQ9NTAyMiAzMDAyIDMgMCAxIAoJCVNDUz1yZ2IKCQlTVlQ9NTAyMiAzMDAyIDQgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAyIDUgCgkJQ0M9MQoJCQlDPTIgMCA1IDUgMSAyIDAKCQkJQ1BDPTAKI05UPTIwMTg5IDAKCVBDPTMKCW5hbWU9MSB2PTUwMDAgTm9ybWFsX01hcF9Td2l0Y2gKCXBvc3g9MSB2PTIwMDMgMTAyMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgLTYwLjAwMDAwMAoJZ3JvdXA9LTEKCUlTQz00CgkJU1ZUPTUwMjIgMjAwMyAxIDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDIgMSAwIAoJCVNEVj0xLjAwMDAwMAoJCVNWVD01MDIyIDMwMDIgMyAwIDAgCgkJU1ZUPTUwMjIgMzAwMiA0IDAgMCAKCU9TQz0xCgkJU1ZUPTUwMjIgMzAwMiA1IAoJCUNDPTEKCQkJQz0zIDAgNSA1IDQgNSAwCgkJCUNQQz0wCiNOVD0yMDE4OSAwCglQQz0zCgluYW1lPTEgdj01MDAwIFJvdWdobmVzc19NYXBfU3dpdGNoCglwb3N4PTEgdj0yMDAzIDEwMjAuMDAwMDAwCglwb3N5PTEgdj0yMDAzIDU0MC4wMDAwMDAKCWdyb3VwPS0xCglJU0M9NAoJCVNWVD01MDIyIDIwMDMgMSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAyIDEgMCAKCQlTRFY9MS4wMDAwMDAKCQlTVlQ9NTAyMiAyMDAzIDMgMCAxIAoJCVNDUz1yCgkJU1ZUPTUwMjIgMjAwMyA0IDAgMCAKCU9TQz0xCgkJU1ZUPTUwMjIgMjAwMyA1IAoJCUNDPTEKCQkJQz00IDAgNSA1IDYgNyAwCgkJCUNQQz0wCiNOVD0yMDE3NiAwCglQQz01Cglwb3N4PTEgdj0yMDAzIDEzNjAuMDAwMDAwCglwb3N5PTEgdj0yMDAzIDI2MC4wMDAwMDAKCXNoYWRlcnJlc291cmNlPTEgdj01MDAwIGNvcmUvc3RpbmdyYXlfcmVuZGVyZXIvc2hhZGVyX2ltcG9ydC9zdGFuZGFyZAoJcHJlc2V0X3BhdGg9MSB2PTUwMDAgcHJlc2V0cy9TdGFuZGFyZAoJbm9ybWFsc3BhY2U9MiBlPTAgdj01MDEyIDEKCWdyb3VwPS0xCglJU0M9MTMKCQlTVlQ9NTAyMiAzMDAyIDEgMCAwIAoJCVNWVD01MDIyIDMwMDIgMiAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAzIDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDQgMCAwIAoJCVNWVD01MDIyIDMwMDIgNSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyA2IDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDcgMCAwIAoJCVNWVD01MDIyIDMwMDIgOCAwIDAgCgkJU1ZUPTUwMjIgMjAwMyA5IDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDEwIDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDExIDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDE0IDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDE1IDAgMCAKCU9TQz0wCiNOVD0yMDE4OSAwCglQQz0zCgluYW1lPTEgdj01MDAwIEFvX01hcF9Td3RpY2gKCXBvc3g9MSB2PTIwMDMgMTAyMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgMTEwMC4wMDAwMDAKCWdyb3VwPS0xCglJU0M9NAoJCVNWVD01MDIyIDIwMDMgMSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAyIDEgMCAKCQlTRFY9MS4wMDAwMDAKCQlTVlQ9NTAyMiAyMDAzIDMgMCAxIAoJCVNDUz1yCgkJU1ZUPTUwMjIgMjAwMyA0IDEgMCAKCQlTRFY9MS4wMDAwMDAKCU9TQz0xCgkJU1ZUPTUwMjIgMjAwMyA1IAoJCUNDPTEKCQkJQz02IDAgNSA1IDggOSAwCgkJCUNQQz0wCiNOVD0yMDE3OCAwCglQQz0yCglwb3N4PTEgdj0yMDAzIC0yNjAuMDAwMDAwCglwb3N5PTEgdj0yMDAzIDQyMC4wMDAwMDAKCWdyb3VwPS0xCglJU0M9MAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAxIDEgCgkJQ0M9MQoJCQlDPTcgMCAxIDI4IDEgMiAwCgkJCUNQQz0wCiNOVD0yMDE3NyAwCglQQz01Cglu", + "YW1lPTEgdj01MDAwIHJvdWdobmVzc19tYXAKCXBvc3g9MSB2PTIwMDMgNzAwLjAwMDAwMAoJcG9zeT0xIHY9MjAwMyA1NDAuMDAwMDAwCgllbmNvZGluZz0yIGU9MCB2PTUwMTIgMAoJdWlvcmRlcj0yIGU9MCB2PTIwMDIgNAoJZ3JvdXA9LTEKCUlTQz0yCgkJU1ZUPTUwMjIgMzAwMSAxIDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDIgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAzIDMgCgkJQ0M9MQoJCQlDPTggMCAzIDQgMiAzIDAKCQkJQ1BDPTAKI05UPTIwMTc3IDAKCVBDPTQKCW5hbWU9MSB2PTUwMDAgZW1pc3NpdmVfbWFwCglwb3N4PTEgdj0yMDAzIDQyMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgNzgwLjAwMDAwMAoJdWlvcmRlcj0yIGU9MCB2PTIwMDIgNQoJZ3JvdXA9LTEKCUlTQz0yCgkJU1ZUPTUwMjIgMzAwMSAxIDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDIgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAzIDMgCgkJQ0M9MQoJCQlDPTkgMCAzIDEgMiAzIDAKCQkJQ1BDPTAKI05UPTIwMTg2IDAKCVBDPTIKCXBvc3g9MSB2PTIwMDMgMTAyMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgODQwLjAwMDAwMAoJZ3JvdXA9LTEKCUlTQz0yCgkJU1ZUPTUwMjIgMzAwMiAxIDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDIgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAyIDMgCgkJQ0M9MQoJCQlDPTEwIDAgMyA1IDcgOCAwCgkJCUNQQz0wCiNOVD0yMDE4NSAwCglQQz02CgluYW1lPTEgdj01MDAwIHVzZV9jb2xvcl9tYXAKCXBvc3g9MSB2PTIwMDMgNzAwLjAwMDAwMAoJcG9zeT0xIHY9MjAwMyAtNDAwLjAwMDAwMAoJdHlwZT0yIGU9MCB2PTUwMTIgMAoJdWl0eXBlPTIgZT0wIHY9NTAxMiAxCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAxMAoJZ3JvdXA9LTEKCUlTQz0wCglPU0M9MQoJCVNWVD01MDIyIDIwMDMgMSAKCQlDQz0xCgkJCUM9MTEgMCAxIDIgMCAxIDAKCQkJQ1BDPTAKI05UPTIwMTc3IDAKCVBDPTQKCW5hbWU9MSB2PTUwMDAgY29sb3JfbWFwCglwb3N4PTEgdj0yMDAzIDcwMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgLTM0MC4wMDAwMDAKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDEKCWdyb3VwPS0xCglJU0M9MgoJCVNWVD01MDIyIDMwMDEgMSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAyIDAgMCAKCU9TQz0xCgkJU1ZUPTUwMjIgMzAwMyAzIAoJCUNDPTEKCQkJQz0xMiAwIDMgMiAyIDMgMAoJCQlDUEM9MAojTlQ9MjAxODUgMAoJUEM9NwoJbmFtZT0xIHY9NTAwMCBiYXNlX2NvbG9yCglwb3N4PTEgdj0yMDAzIDcwMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgLTI0MC4wMDAwMDAKCXR5cGU9MiBlPTAgdj01MDEyIDIKCWRlZmF1bHR2ZWN0aHJlZT0yIGU9MCB2PTMwMDIgMS4wMDAwMDAsMS4wMDAwMDAsMS4wMDAwMDAKCWRlZmF1bHR2ZWN0b3I9MiBlPTAgdj0zMDAzIDAuNTAwMDAwLDAuNTAwMDAwLDAuNTAwMDAwLDAuMDAwMDAwCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAyMAoJZ3JvdXA9LTEKCUlTQz0wCglPU0M9MQoJCVNWVD01MDIyIDMwMDIgMSAKCQlDQz0xCgkJCUM9MTMgMCAxIDIgMyA0IDAKCQkJQ1BDPTAKI05UPTIwMTg1IDAKCVBDPTYKCW5hbWU9MSB2PTUwMDAgdXNlX25vcm1hbF9tYXAKCXBvc3g9MSB2PTIwMDMgNzAwLjAwMDAwMAoJcG9zeT0xIHY9MjAwMyAtMTIwLjAwMDAwMAoJdHlwZT0yIGU9MCB2PTUwMTIgMAoJdWl0eXBlPTIgZT0wIHY9NTAxMiAxCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAxMQoJZ3JvdXA9LTEKCUlTQz0wCglPU0M9MQoJCVNWVD01MDIyIDIwMDMgMSAKCQlDQz0xCgkJCUM9MTQgMCAxIDMgMCAxIDAKCQkJQ1BDPTAKI05UPTIwMTk0IDAKCVBDPTIKCXBvc3g9MSB2PTIwMDMgNjgwLjAwMDAwMAoJcG9zeT0xIHY9MjAwMyA2MC4wMDAwMDAKCWdyb3VwPS0xCglJU0M9MAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAyIDEgCgkJQ0M9MQoJCQlDPTE1IDAgMSAzIDMgNCAwCgkJCUNQQz0wCiNOVD0yMDE5NSAwCglQQz0yCglwb3N4PTEgdj0yMDAzIDc0MC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgLTYwLjAwMDAwMAoJZ3JvdXA9LTEKCUlTQz0xCgkJU1ZUPTUwMjIgMzAwMiAxIDAgMSAKCQlTQ1M9cmdiCglPU0M9MQoJCVNWVD01MDIyIDMwMDIgMiAKCQlDQz0xCgkJCUM9MTYgMCAyIDMgMiAzIDAKCQkJQ1BDPTAKI05UPTIwMTc3IDAKCVBDPTUKCW5hbWU9MSB2PTUwMDAgbm9ybWFsX21hcAoJcG9zeD0xIHY9MjAwMyA0NDAuMDAwMDAwCglwb3N5PTEgdj0yMDAzIC02MC4wMDAwMDAKCWVuY29kaW5nPTIgZT0wIHY9NTAxMiAyCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAyCglncm91cD0tMQoJSVNDPTIKCQlTVlQ9NTAyMiAzMDAxIDEgMCAwIAoJCVNWVD01MDIyIDIwMDMgMiAwIDAgCglPU0M9MQoJCVNWVD01MDIyIDMwMDMgMyAKCQlDQz0xCgkJCUM9MTcgMCAzIDE2IDAgMSAwCgkJCUNQQz0wCiNOVD0yMDE3NyAwCglQQz02CgluYW1lPTEgdj01MDAwIG1ldGFsbGljX21hcAoJcG9zeD0xIHY9MjAwMyA3MDAuMDAwMDAwCglwb3N5PTEgdj0yMDAzIDI0MC4wMDAwMDAKCWVuY29kaW5nPTIgZT0wIHY9NTAxMiAwCglmaWx0ZXI9MiBlPTAgdj01MDEyIDEKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDMKCWdyb3VwPS0xCglJU0M9MgoJCVNWVD01MDIyIDMwMDEgMSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAyIDAgMCAKCU9TQz0xCgkJU1ZUPTUwMjIgMzAwMyAzIAoJCUNDPTEKCQkJQz0xOCAwIDMgMCAyIDMgMAoJCQlDUEM9MAojTlQ9MjAxODUgMAoJ", + "UEM9NgoJbmFtZT0xIHY9NTAwMCB1c2VfbWV0YWxsaWNfbWFwCglwb3N4PTEgdj0yMDAzIDcwMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgMTgwLjAwMDAwMAoJdHlwZT0yIGU9MCB2PTUwMTIgMAoJdWl0eXBlPTIgZT0wIHY9NTAxMiAxCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAxMgoJZ3JvdXA9LTEKCUlTQz0wCglPU0M9MQoJCVNWVD01MDIyIDIwMDMgMSAKCQlDQz0xCgkJCUM9MTkgMCAxIDAgMCAxIDAKCQkJQ1BDPTAKI05UPTIwMTg1IDAKCVBDPTYKCW5hbWU9MSB2PTUwMDAgbWV0YWxsaWMKCXBvc3g9MSB2PTIwMDMgNzAwLjAwMDAwMAoJcG9zeT0xIHY9MjAwMyAzNDAuMDAwMDAwCgl0eXBlPTIgZT0wIHY9NTAxMiAwCglkZWZhdWx0c2NhbGFyPTIgZT0wIHY9MjAwMyAxLjAwMDAwMAoJdWlvcmRlcj0yIGU9MCB2PTIwMDIgMjEKCWdyb3VwPS0xCglJU0M9MAoJT1NDPTEKCQlTVlQ9NTAyMiAyMDAzIDEgCgkJQ0M9MQoJCQlDPTIwIDAgMSAwIDMgNCAwCgkJCUNQQz0wCiNOVD0yMDE4NSAwCglQQz02CgluYW1lPTEgdj01MDAwIHVzZV9yb3VnaG5lc3NfbWFwCglwb3N4PTEgdj0yMDAzIDcwMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgNDgwLjAwMDAwMAoJdHlwZT0yIGU9MCB2PTUwMTIgMAoJdWl0eXBlPTIgZT0wIHY9NTAxMiAxCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAxMwoJZ3JvdXA9LTEKCUlTQz0wCglPU0M9MQoJCVNWVD01MDIyIDIwMDMgMSAKCQlDQz0xCgkJCUM9MjEgMCAxIDQgMCAxIDAKCQkJQ1BDPTAKI05UPTIwMTg1IDAKCVBDPTYKCW5hbWU9MSB2PTUwMDAgcm91Z2huZXNzCglwb3N4PTEgdj0yMDAzIDcwMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgNjQwLjAwMDAwMAoJdHlwZT0yIGU9MCB2PTUwMTIgMAoJZGVmYXVsdHNjYWxhcj0yIGU9MCB2PTIwMDMgMC41MDAwMDAKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDIyCglncm91cD0tMQoJSVNDPTAKCU9TQz0xCgkJU1ZUPTUwMjIgMjAwMyAxIAoJCUNDPTEKCQkJQz0yMiAwIDEgNCAzIDQgMAoJCQlDUEM9MAojTlQ9MjAxODUgMAoJUEM9NQoJbmFtZT0xIHY9NTAwMCBlbWlzc2l2ZQoJcG9zeD0xIHY9MjAwMyA0MjAuMDAwMDAwCglwb3N5PTEgdj0yMDAzIDg4MC4wMDAwMDAKCXR5cGU9MiBlPTAgdj01MDEyIDIKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDIzCglncm91cD0tMQoJSVNDPTAKCU9TQz0xCgkJU1ZUPTUwMjIgMzAwMiAxIAoJCUNDPTEKCQkJQz0yMyAwIDEgMSAzIDQgMAoJCQlDUEM9MAojTlQ9MjAxODUgMAoJUEM9NgoJbmFtZT0xIHY9NTAwMCB1c2VfZW1pc3NpdmVfbWFwCglwb3N4PTEgdj0yMDAzIDQyMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgNzIwLjAwMDAwMAoJdHlwZT0yIGU9MCB2PTUwMTIgMAoJdWl0eXBlPTIgZT0wIHY9NTAxMiAxCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAxNAoJZ3JvdXA9LTEKCUlTQz0wCglPU0M9MQoJCVNWVD01MDIyIDIwMDMgMSAKCQlDQz0xCgkJCUM9MjQgMCAxIDEgMCAxIDAKCQkJQ1BDPTAKI05UPTIwMTg1IDAKCVBDPTYKCW5hbWU9MSB2PTUwMDAgdXNlX2FvX21hcAoJcG9zeD0xIHY9MjAwMyA3MDAuMDAwMDAwCglwb3N5PTEgdj0yMDAzIDExMDAuMDAwMDAwCgl0eXBlPTIgZT0wIHY9NTAxMiAwCgl1aXR5cGU9MiBlPTAgdj01MDEyIDEKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDE1Cglncm91cD0tMQoJSVNDPTAKCU9TQz0xCgkJU1ZUPTUwMjIgMjAwMyAxIAoJCUNDPTEKCQkJQz0yNSAwIDEgNiAwIDEgMAoJCQlDUEM9MAojTlQ9MjAxNzcgMAoJUEM9NgoJbmFtZT0xIHY9NTAwMCBhb19tYXAKCXBvc3g9MSB2PTIwMDMgNzAwLjAwMDAwMAoJcG9zeT0xIHY9MjAwMyAxMTYwLjAwMDAwMAoJZW5jb2Rpbmc9MiBlPTAgdj01MDEyIDAKCWZpbHRlcj0yIGU9MCB2PTUwMTIgMQoJdWlvcmRlcj0yIGU9MCB2PTIwMDIgNgoJZ3JvdXA9LTEKCUlTQz0yCgkJU1ZUPTUwMjIgMzAwMSAxIDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDIgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAzIDMgCgkJQ0M9MQoJCQlDPTI2IDAgMyA2IDIgMyAwCgkJCUNQQz0wCiNOVD0yMDE4NSAwCglQQz02CgluYW1lPTEgdj01MDAwIGVtaXNzaXZlX2ludGVuc2l0eQoJcG9zeD0xIHY9MjAwMyA3NDAuMDAwMDAwCglwb3N5PTEgdj0yMDAzIDkyMC4wMDAwMDAKCXR5cGU9MiBlPTAgdj01MDEyIDAKCW1heHJhbmdlPTIgZT0wIHY9MjAwMyAxMC4wMDAwMDAKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDUzCglncm91cD0tMQoJSVNDPTAKCU9TQz0xCgkJU1ZUPTUwMjIgMjAwMyAxIAoJCUNDPTEKCQkJQz0yNyAwIDEgMTAgMSAyIDAKCQkJQ1BDPTAKI05UPTIwMTg2IDAKCVBDPTIKCXBvc3g9MSB2PTIwMDMgLTYwLjAwMDAwMAoJcG9zeT0xIHY9MjAwMyA0MDAuMDAwMDAwCglncm91cD0tMQoJSVNDPTIKCQlTVlQ9NTAyMiAzMDAxIDEgMCAwIAoJCVNWVD01MDIyIDMwMDEgMiAwIDAgCglPU0M9MQoJCVNWVD01MDIyIDMwMDEgMyAKCQlDQz0xCgkJCUM9MjggMCAzIDI5IDEgMiAwCgkJCUNQQz0wCiNOVD0yMDE4NyAwCglQQz0yCglwb3N4PTEgdj0yMDAzIDEyMC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgNDAwLjAwMDAwMAoJZ3JvdXA9LTEKCUlTQz0yCgkJU1ZUPTUwMjIgMzAwMSAxIDAgMCAKCQlTVlQ9NTAyMiAzMDAxIDIgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAxIDMgCgkJQ0M9NgoJCQlDPTI5IDAgMyAxMiAwIDEgMAoJCQlDUEM9MAoJCQlDPTI5IDAgMyAxNyAwIDEgMAoJCQlDUEM9", + "MAoJCQlDPTI5IDAgMyAxOCAwIDEgMAoJCQlDUEM9MAoJCQlDPTI5IDAgMyA4IDAgMSAwCgkJCUNQQz0wCgkJCUM9MjkgMCAzIDkgMCAxIDAKCQkJQ1BDPTAKCQkJQz0yOSAwIDMgMjYgMCAxIDAKCQkJQ1BDPTAKI05UPTIwMTg1IDAKCVBDPTcKCW5hbWU9MSB2PTUwMDAgdXZfb2Zmc2V0Cglwb3N4PTEgdj0yMDAzIC02MC4wMDAwMDAKCXBvc3k9MSB2PTIwMDMgMzQwLjAwMDAwMAoJdHlwZT0yIGU9MCB2PTUwMTIgMQoJbWlucmFuZ2U9MiBlPTAgdj0yMDAzIC0xMDAwMDEuMDAwMDAwCgltYXhyYW5nZT0yIGU9MCB2PTIwMDMgMTAwMDAxLjAwMDAwMAoJdWlvcmRlcj0yIGU9MCB2PTIwMDIgNjAKCWdyb3VwPS0xCglJU0M9MAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAxIDEgCgkJQ0M9MQoJCQlDPTMwIDAgMSAyOSAwIDEgMAoJCQlDUEM9MAojTlQ9MjAxODUgMAoJUEM9OQoJbmFtZT0xIHY9NTAwMCB1dl9zY2FsZQoJcG9zeD0xIHY9MjAwMyAtMjQwLjAwMDAwMAoJcG9zeT0xIHY9MjAwMyAzNDAuMDAwMDAwCgl0eXBlPTIgZT0wIHY9NTAxMiAxCglkZWZhdWx0dmVjdHdvPTIgZT0wIHY9MzAwMSAxLjAwMDAwMCwxLjAwMDAwMAoJZGVmYXVsdHZlY3Rvcj0yIGU9MCB2PTMwMDMgMS4wMDAwMDAsMS4wMDAwMDAsMC4wMDAwMDAsMC4wMDAwMDAKCW1pbnJhbmdlPTIgZT0wIHY9MjAwMyAtMTAwMDAxLjAwMDAwMAoJbWF4cmFuZ2U9MiBlPTAgdj0yMDAzIDEwMDAwMS4wMDAwMDAKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDYxCglncm91cD0tMQoJSVNDPTAKCU9TQz0xCgkJU1ZUPTUwMjIgMzAwMSAxIAoJCUNDPTEKCQkJQz0zMSAwIDEgMjggMCAxIDAKCQkJQ1BDPTAKCiAqLyB9IApjb25uZWN0aW9ucyA9IFsKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiYWNhNjkwY2ItNjMwNS00YTJmLWJmM2QtNjkxODNhNDkzZGIzIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI2IiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMyIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIkNFRDdCQkYzLTBCNDgtNDMzNS1COTMzLTA5NUE0MUNBMDI5NCIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMyIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTIiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICI0Q0JCNDQ4MC03OUU4LTRDRTctQUMwRi04QjA5QkFGMTIzOTAiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjMiIAoJCX0gCgkJc2VsZWN0ID0gWyAKCQkJInJnYiIgCgkJCV0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjEzIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiMWVlOWFmMWYtNjVmMi00NzM5LWFkMjgtNWVhNmEwZTY4ZmMzIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjEzIiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIzMCIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjFlZTlhZjFmLTY1ZjItNDczOS1hZDI4LTVlYTZhMGU2OGZjMyIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxOCIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMzAiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICIxZWU5YWYxZi02NWYyLTQ3MzktYWQyOC01ZWE2YTBlNjhmYzMiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTkiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjMwIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiMWVlOWFmMWYtNjVmMi00NzM5LWFkMjgtNWVhNmEwZTY4ZmMzIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI5IiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIzMCIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjFlZTlhZjFmLTY1ZjItNDczOS1hZDI4LTVlYTZhMGU2OGZjMyIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxMCIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMzAiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNv", + "bm5lY3Rvcl9pZCA9ICIxZWU5YWYxZi02NWYyLTQ3MzktYWQyOC01ZWE2YTBlNjhmYzMiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjciIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjMwIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiZjcyNTk3YzQtNzQ4Ny00MTlhLWFmZmItZGY2OTBlNjU4MmUxIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjMwIiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIzMSIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjA4MDZkYjBkLTJjNGEtNDNjYS05OWNjLWY1YTJmMDM2YThlOCIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIzMCIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjkiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJjNTgyM2M3NS00YWU1LTRjNzEtYjA3MC0zMTVmYTRkMDNlOGUiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjkiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjMyIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiMjQyZDE2NDgtYTYyNi00NDViLTk1MzQtYmNjZWMwOTQxMTJmIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjI5IiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiOCIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIkYyRjc0RTU4LTQwMkQtNDcyQi04N0RELTMzMUUwMERCNDE2QyIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMyIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTQiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJiMWM4NjQwOC1hYWNiLTQ0NjYtYjc1NC1kZGNmMzdhM2EyYzgiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjYiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI0IiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiQ0VEN0JCRjMtMEI0OC00MzM1LUI5MzMtMDk1QTQxQ0EwMjk0IiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI0IiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxNSIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjRDQkI0NDgwLTc5RTgtNENFNy1BQzBGLThCMDlCQUYxMjM5MCIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNCIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTciIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJmNzI1OTdjNC03NDg3LTQxOWEtYWZmYi1kZjY5MGU2NTgyZTEiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTciIAoJCX0gCgkJc2VsZWN0ID0gWyAKCQkJInJnYiIgCgkJCV0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjE4IiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiRjJGNzRFNTgtNDAyRC00NzJCLTg3REQtMzMxRTAwREI0MTZDIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI0IiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxNiIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gImFkNWUwNTJmLWQzMTYtNGEwZi04Yjc5LTUzYzM4MjA0ZDYxYiIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNiIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjEiIAoJCX0gCgl9IAoJeyAKCQlkZXN0", + "aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJDRUQ3QkJGMy0wQjQ4LTQzMzUtQjkzMy0wOTVBNDFDQTAyOTQiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjEiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjIwIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiNENCQjQ0ODAtNzlFOC00Q0U3LUFDMEYtOEIwOUJBRjEyMzkwIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIxIiAKCQl9IAoJCXNlbGVjdCA9IFsgCgkJCSJyIiAKCQkJXSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTkiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJGMkY3NEU1OC00MDJELTQ3MkItODdERC0zMzFFMDBEQjQxNkMiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjEiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjIxIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiMzZiYTQ2ZDItZjZlYS00ZTYwLWE0MjgtZmRjMTdjNzViYzYyIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI2IiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNSIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIkNFRDdCQkYzLTBCNDgtNDMzNS1COTMzLTA5NUE0MUNBMDI5NCIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNSIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjIiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICI0Q0JCNDQ4MC03OUU4LTRDRTctQUMwRi04QjA5QkFGMTIzOTAiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjUiIAoJCX0gCgkJc2VsZWN0ID0gWyAKCQkJInIiIAoJCQldIAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiOSIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIkYyRjc0RTU4LTQwMkQtNDcyQi04N0RELTMzMUUwMERCNDE2QyIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNSIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjMiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICIxMTY0YTVlZi00NTYzLTQ3OTUtYjNiNS00MjgyNWQ2ZGYwMzciIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjYiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjExIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiYzU4MjNjNzUtNGFlNS00YzcxLWIwNzAtMzE1ZmE0ZDAzZThlIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjExIiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMiIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIkNFRDdCQkYzLTBCNDgtNDMzNS1COTMzLTA5NUE0MUNBMDI5NCIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMiIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjUiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICI0Q0JCNDQ4MC03OUU4LTRDRTctQUMwRi04QjA5QkFGMTIzOTAiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjIiIAoJCX0gCgkJc2VsZWN0ID0gWyAKCQkJInJnYiIgCgkJCV0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjEwIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiRjJGNzRFNTgtNDAyRC00NzJCLTg3REQtMzMxRTAwREI0MTZDIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIyIiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJ", + "CWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyNCIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjI0MmQxNjQ4LWE2MjYtNDQ1Yi05NTM0LWJjY2VjMDk0MTEyZiIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxMSIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjgiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICI1OWZkMWNmNC1mNzM2LTQ3MGQtODUxMC0xZGQ3YzAxNjYzOWUiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjYiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI3IiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiQ0VEN0JCRjMtMEI0OC00MzM1LUI5MzMtMDk1QTQxQ0EwMjk0IiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI3IiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyNiIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjRDQkI0NDgwLTc5RTgtNENFNy1BQzBGLThCMDlCQUYxMjM5MCIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNyIgCgkJfSAKCQlzZWxlY3QgPSBbIAoJCQkiciIgCgkJCV0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjI3IiAKCQl9IAoJfSAKXQpjb25zdGFudHMgPSBbCgl7IAoJCWNvbm5lY3Rvcl9pZCA9ICIzOUJDNzYxOS0yNzY4LTQ4MEItQUNGRC02M0ZBNjZFRjY5MDUiIAoJCWlkID0gIjFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMyIgCgkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIzIiAKCQl2YWx1ZSA9IFsgCgkJCTEuMDAwMDAwCgkJXSAKCX0gCgl7IAoJCWNvbm5lY3Rvcl9pZCA9ICIzOUJDNzYxOS0yNzY4LTQ4MEItQUNGRC02M0ZBNjZFRjY5MDUiIAoJCWlkID0gIjFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNCIgCgkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI0IiAKCQl2YWx1ZSA9IFsgCgkJCTEuMDAwMDAwCgkJXSAKCX0gCgl7IAoJCWNvbm5lY3Rvcl9pZCA9ICIzOUJDNzYxOS0yNzY4LTQ4MEItQUNGRC02M0ZBNjZFRjY5MDUiIAoJCWlkID0gIjFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMSIgCgkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIxIiAKCQl2YWx1ZSA9IFsgCgkJCTEuMDAwMDAwCgkJXSAKCX0gCgl7IAoJCWNvbm5lY3Rvcl9pZCA9ICIzOUJDNzYxOS0yNzY4LTQ4MEItQUNGRC02M0ZBNjZFRjY5MDUiIAoJCWlkID0gIjFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNSIgCgkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI1IiAKCQl2YWx1ZSA9IFsgCgkJCTEuMDAwMDAwCgkJXSAKCX0gCgl7IAoJCWNvbm5lY3Rvcl9pZCA9ICIzOUJDNzYxOS0yNzY4LTQ4MEItQUNGRC02M0ZBNjZFRjY5MDUiIAoJCWlkID0gIjFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMiIgCgkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIyIiAKCQl2YWx1ZSA9IFsgCgkJCTEuMDAwMDAwCgkJXSAKCX0gCgl7IAoJCWNvbm5lY3Rvcl9pZCA9ICIzOUJDNzYxOS0yNzY4LTQ4MEItQUNGRC02M0ZBNjZFRjY5MDUiIAoJCWlkID0gIjFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNyIgCgkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI3IiAKCQl2YWx1ZSA9IFsgCgkJCTEuMDAwMDAwCgkJXSAKCX0gCgl7IAoJCWNvbm5lY3Rvcl9pZCA9ICJGMkY3NEU1OC00MDJELTQ3MkItODdERC0zMzFFMDBEQjQxNkMiIAoJCWlkID0gIjNiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNyIgCgkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI3IiAKCQl2YWx1ZSA9IFsgCgkJCTEuMDAwMDAwCgkJXSAKCX0gCl0Kbm9kZXMgPSBbCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjYiIAoJCW9wdGlvbnMgPSBbIAoJCQkiMmIxMzY0NDctNjc2ZS00OTQzLTk5N2ItMDRhMjhhZTY4NDk3IgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQkxMzYwIAoJCQkyNjAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJTdGFuZGFyZCBCYXNlIiAKCQl0eXBlID0gImNvcmUvc3RpbmdyYXlfcmVuZGVyZXIv", + "b3V0cHV0X25vZGVzL3N0YW5kYXJkX2Jhc2UiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMyIgCgkJb3B0aW9ucyA9IFsgCgkJCSI5QTg0MjgyQi1GMUEyLTQ2RDQtOUZDNC01QTc2RkM5QjMwREQiCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTEwMjAgCgkJCS0zNDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJDb2xvciBNYXAgU3dpdGNoIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL2lmIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJCW1hdGVyaWFsX3ZhcmlhYmxlID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJVc2UgQ29sb3IgTWFwIiAKCQkJCW5hbWUgPSAidXNlX2NvbG9yX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gMSAKCQkJCQltaW4gPSAwLjAwMDAwMCAKCQkJCQlzdGVwID0gMSAKCQkJCQlvcmRlciA9IDEwIAoJCQkJCXVpX3R5cGUgPSAiY2hlY2tib3giIAoJCQkJfSAKCQkJCXR5cGUgPSAiZmxvYXQiIAoJCQkJdmFsdWUgPSAwLjAwMDAwMCAKCQkJfSAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxMiIgCgkJb3B0aW9ucyA9IFsgCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTcwMCAKCQkJLTQwMCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIlVzZSBDb2xvciBNYXAiIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvbWF0ZXJpYWxfdmFyaWFibGUiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxMyIgCgkJb3B0aW9ucyA9IFsgCgkJCSIxZTA2NzQ2NC0xMmQ4LTQ4MjYtOWI3Mi1jZmQ1NzY1MDAzZTMiCgkJCSJmYjNmNzA5Yi1hNTRhLTRlOTMtYWM5Zi1lOWZjNzZmYjhiY2QiCgkJCSI1ZGQ1OWIzZC0xNzYyLTRhMTQtOTkzMC03NTAwMjMwZWYzZGIiCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTcwMCAKCQkJLTM0MCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQkJdGV4dHVyZV9tYXAgPSB7IAoJCQkJZGlzcGxheV9uYW1lID0gIkNvbG9yIE1hcCIgCgkJCQlzbG90X25hbWUgPSAiY29sb3JfbWFwIiAKCQkJCXVpID0geyAKCQkJCQlvcmRlciA9IDEgCgkJCQl9IAoJCQl9IAoJCX0gCgkJdGl0bGUgPSAiQ29sb3IgTWFwIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL3NhbXBsZV90ZXh0dXJlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMzAiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQkxMjAgCgkJCTQwMCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIkFkZCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9hZGQiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQkJbWF0ZXJpYWxfdmFyaWFibGUgPSB7IAoJCQkJZGlzcGxheV9uYW1lID0gIlV2IE9mZnNldCIgCgkJCQluYW1lID0gInV2X29mZnNldCIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gWyAxMDAwMDEuMDAwMDAwIDEwMDAwMS4wMDAwMDAgXSAKCQkJCQltaW4gPSBbIC0xMDAwMDEuMDAwMDAwIC0xMDAwMDEuMDAwMDAwIF0gCgkJCQkJc3RlcCA9IFsgMC4wMSAwLjAxIF0gCgkJCQkJb3JkZXIgPSA2MCAKCQkJCX0gCgkJCQl0eXBlID0gImZsb2F0MiIgCgkJCQl2YWx1ZSA9IFswLjAwMDAwMCAwLjAwMDAwMF0gCgkJCX0gCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMzEiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQktNjAgCgkJCTM0MCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIlV2IE9mZnNldCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjI5IiAKCQlvcHRpb25zID0gWyAKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJLTYwIAoJCQk0MDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJNdWx0aXBseSIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tdWwiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQkJbWF0ZXJpYWxfdmFyaWFibGUgPSB7IAoJCQkJZGlzcGxheV9uYW1lID0gIlV2IFNjYWxlIiAKCQkJCW5hbWUgPSAidXZfc2NhbGUiIAoJCQkJdWkgPSB7IAoJCQkJCW1heCA9IFsgMTAwMDAxLjAwMDAwMCAxMDAwMDEuMDAwMDAwIF0gCgkJCQkJbWluID0gWyAtMTAwMDAxLjAwMDAwMCAtMTAwMDAxLjAwMDAwMCBdIAoJCQkJCXN0ZXAgPSBbIDAuMDEgMC4wMSBdIAoJCQkJCW9yZGVyID0gNjEgCgkJ", + "CQl9IAoJCQkJdHlwZSA9ICJmbG9hdDIiIAoJCQkJdmFsdWUgPSBbMS4wMDAwMDAgMS4wMDAwMDBdIAoJCQl9IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjMyIiAKCQlvcHRpb25zID0gWyAKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJLTI0MCAKCQkJMzQwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiVXYgU2NhbGUiIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvbWF0ZXJpYWxfdmFyaWFibGUiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiOCIgCgkJb3B0aW9ucyA9IFsgCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCS0yNjAgCgkJCTQyMCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIlRleGNvb3JkMCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy90ZXh0dXJlX2Nvb3JkaW5hdGUwIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJCW1hdGVyaWFsX3ZhcmlhYmxlID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJCYXNlIENvbG9yIiAKCQkJCW5hbWUgPSAiYmFzZV9jb2xvciIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gWyAxLjAwMDAwMCAxLjAwMDAwMCAxLjAwMDAwMCBdIAoJCQkJCW1pbiA9IFsgMC4wMDAwMDAgMC4wMDAwMDAgMC4wMDAwMDAgXSAKCQkJCQlzdGVwID0gWyAwLjAxIDAuMDEgMC4wMSBdIAoJCQkJCW9yZGVyID0gMjAgCgkJCQkJdWlfdHlwZSA9ICJjb2xvciIgCgkJCQl9IAoJCQkJdHlwZSA9ICJmbG9hdDMiIAoJCQkJdmFsdWUgPSBbMS4wMDAwMDAgMS4wMDAwMDAgMS4wMDAwMDBdIAoJCQl9IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjE0IiAKCQlvcHRpb25zID0gWyAKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNzAwIAoJCQktMjQwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiQmFzZSBDb2xvciIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI0IiAKCQlvcHRpb25zID0gWyAKCQkJIjlBODQyODJCLUYxQTItNDZENC05RkM0LTVBNzZGQzlCMzBERCIKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJMTAyMCAKCQkJLTYwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiTm9ybWFsIE1hcCBTd2l0Y2giIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvaWYiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQkJbWF0ZXJpYWxfdmFyaWFibGUgPSB7IAoJCQkJZGlzcGxheV9uYW1lID0gIlVzZSBOb3JtYWwgTWFwIiAKCQkJCW5hbWUgPSAidXNlX25vcm1hbF9tYXAiIAoJCQkJdWkgPSB7IAoJCQkJCW1heCA9IDEgCgkJCQkJbWluID0gMC4wMDAwMDAgCgkJCQkJc3RlcCA9IDEgCgkJCQkJb3JkZXIgPSAxMSAKCQkJCQl1aV90eXBlID0gImNoZWNrYm94IiAKCQkJCX0gCgkJCQl0eXBlID0gImZsb2F0IiAKCQkJCXZhbHVlID0gMC4wMDAwMDAgCgkJCX0gCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTUiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk3MDAgCgkJCS0xMjAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJVc2UgTm9ybWFsIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjE3IiAKCQlvcHRpb25zID0gWyAKCQkJIjBhMGZiNWFkLTE0NWQtNDIyOS1hYmQ0LTViMzY1NjI2MDdiMyIKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNzQwIAoJCQktNjAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJUYW5nZW50IFRvIFdvcmxkIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL3RhbmdlbnRfdG9fd29ybGQiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxOCIgCgkJb3B0aW9ucyA9IFsgCgkJCSIxZTA2NzQ2NC0xMmQ4LTQ4MjYtOWI3Mi1jZmQ1NzY1MDAzZTMiCgkJCSI5MGUyMDgyNi04Njg5LTQyZmEtOGUyNC1mNDg0ZWM2NGM1YzMiCgkJCSI1ZGQ1OWIzZC0xNzYyLTRhMTQtOTkzMC03NTAwMjMwZWYzZGIiCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTQ0MCAKCQkJLTYwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCQl0ZXh0dXJlX21hcCA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiTm9ybWFsIE1hcCIgCgkJCQlzbG90X25hbWUgPSAibm9ybWFsX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJb3JkZXIgPSAyIAoJCQkJfSAKCQkJ", + "fSAKCQl9IAoJCXRpdGxlID0gIk5vcm1hbCBNYXAiIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvc2FtcGxlX3RleHR1cmUiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxNiIgCgkJb3B0aW9ucyA9IFsgCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTY4MCAKCQkJNjAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJXb3JsZCBOb3JtYWwiIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvd29ybGRfc3BhY2Vfbm9ybWFsIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjEiIAoJCW9wdGlvbnMgPSBbIAoJCQkiOUE4NDI4MkItRjFBMi00NkQ0LTlGQzQtNUE3NkZDOUIzMEREIgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQkxMDIwIAoJCQkyNDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJNZXRhbGxpYyBNYXAgU3dpdGNoIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL2lmIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJCW1hdGVyaWFsX3ZhcmlhYmxlID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJVc2UgTWV0YWxsaWMgTWFwIiAKCQkJCW5hbWUgPSAidXNlX21ldGFsbGljX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gMSAKCQkJCQltaW4gPSAwLjAwMDAwMCAKCQkJCQlzdGVwID0gMSAKCQkJCQlvcmRlciA9IDEyIAoJCQkJCXVpX3R5cGUgPSAiY2hlY2tib3giIAoJCQkJfSAKCQkJCXR5cGUgPSAiZmxvYXQiIAoJCQkJdmFsdWUgPSAwLjAwMDAwMCAKCQkJfSAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyMCIgCgkJb3B0aW9ucyA9IFsgCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTcwMCAKCQkJMTgwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiVXNlIE1ldGFsbGljIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjE5IiAKCQlvcHRpb25zID0gWyAKCQkJImY2NjlhM2E2LTAzNzYtNDE4Ny04NDBlLTgwMDAwZTI5MzlkNSIKCQkJImU5NGU1M2U2LTQ5YjYtNDE5NC1hNzQ3LThmMDY0YTU5MzJlMCIKCQkJIjVkZDU5YjNkLTE3NjItNGExNC05OTMwLTc1MDAyMzBlZjNkYiIKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNzAwIAoJCQkyNDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJCXRleHR1cmVfbWFwID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJNZXRhbGxpYyBNYXAiIAoJCQkJc2xvdF9uYW1lID0gIm1ldGFsbGljX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJb3JkZXIgPSAzIAoJCQkJfSAKCQkJfSAKCQl9IAoJCXRpdGxlID0gIk1ldGFsbGljIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9zYW1wbGVfdGV4dHVyZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiTWV0YWxsaWMiIAoJCQkJbmFtZSA9ICJtZXRhbGxpYyIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gMS4wMDAwMDAgCgkJCQkJbWluID0gMC4wMDAwMDAgCgkJCQkJc3RlcCA9IDAuMDEgCgkJCQkJb3JkZXIgPSAyMSAKCQkJCX0gCgkJCQl0eXBlID0gImZsb2F0IiAKCQkJCXZhbHVlID0gMS4wMDAwMDAgCgkJCX0gCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjEiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk3MDAgCgkJCTM0MCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIk1ldGFsbGljIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL21hdGVyaWFsX3ZhcmlhYmxlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjUiIAoJCW9wdGlvbnMgPSBbIAoJCQkiOUE4NDI4MkItRjFBMi00NkQ0LTlGQzQtNUE3NkZDOUIzMEREIgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQkxMDIwIAoJCQk1NDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJSb3VnaG5lc3MgTWFwIFN3aXRjaCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9pZiIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiVXNlIFJvdWdobmVzcyBNYXAiIAoJCQkJbmFtZSA9ICJ1c2Vfcm91Z2huZXNzX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gMSAKCQkJCQltaW4gPSAwLjAwMDAwMCAKCQkJCQlzdGVwID0g", + "MSAKCQkJCQlvcmRlciA9IDEzIAoJCQkJCXVpX3R5cGUgPSAiY2hlY2tib3giIAoJCQkJfSAKCQkJCXR5cGUgPSAiZmxvYXQiIAoJCQkJdmFsdWUgPSAwLjAwMDAwMCAKCQkJfSAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyMiIgCgkJb3B0aW9ucyA9IFsgCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTcwMCAKCQkJNDgwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiVXNlIFJvdWdobmVzcyBNYXAiIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvbWF0ZXJpYWxfdmFyaWFibGUiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiOSIgCgkJb3B0aW9ucyA9IFsgCgkJCSIxZTA2NzQ2NC0xMmQ4LTQ4MjYtOWI3Mi1jZmQ1NzY1MDAzZTMiCgkJCSJlOTRlNTNlNi00OWI2LTQxOTQtYTc0Ny04ZjA2NGE1OTMyZTAiCgkJCSI1ZGQ1OWIzZC0xNzYyLTRhMTQtOTkzMC03NTAwMjMwZWYzZGIiCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTcwMCAKCQkJNTQwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCQl0ZXh0dXJlX21hcCA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiUm91Z2huZXNzIE1hcCIgCgkJCQlzbG90X25hbWUgPSAicm91Z2huZXNzX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJb3JkZXIgPSA0IAoJCQkJfSAKCQkJfSAKCQl9IAoJCXRpdGxlID0gIlJvdWdobmVzcyBNYXAiIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvc2FtcGxlX3RleHR1cmUiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQkJbWF0ZXJpYWxfdmFyaWFibGUgPSB7IAoJCQkJZGlzcGxheV9uYW1lID0gIlJvdWdobmVzcyIgCgkJCQluYW1lID0gInJvdWdobmVzcyIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gMS4wMDAwMDAgCgkJCQkJbWluID0gMC4wMDAwMDAgCgkJCQkJc3RlcCA9IDAuMDEgCgkJCQkJb3JkZXIgPSAyMiAKCQkJCX0gCgkJCQl0eXBlID0gImZsb2F0IiAKCQkJCXZhbHVlID0gMC41MDAwMDAgCgkJCX0gCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjMiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk3MDAgCgkJCTY0MCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIlJvdWdobmVzcyIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjExIiAKCQlvcHRpb25zID0gWyAKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJMTAyMCAKCQkJODQwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiTXVsdGlwbHkiIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvbXVsIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjIiIAoJCW9wdGlvbnMgPSBbIAoJCQkiOUE4NDI4MkItRjFBMi00NkQ0LTlGQzQtNUE3NkZDOUIzMEREIgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk3NDAgCgkJCTc4MCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIkVtaXNzaXZlIE1hcCBTd2l0Y2giIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvaWYiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQkJbWF0ZXJpYWxfdmFyaWFibGUgPSB7IAoJCQkJZGlzcGxheV9uYW1lID0gIlVzZSBFbWlzc2l2ZSBNYXAiIAoJCQkJbmFtZSA9ICJ1c2VfZW1pc3NpdmVfbWFwIiAKCQkJCXVpID0geyAKCQkJCQltYXggPSAxIAoJCQkJCW1pbiA9IDAuMDAwMDAwIAoJCQkJCXN0ZXAgPSAxIAoJCQkJCW9yZGVyID0gMTQgCgkJCQkJdWlfdHlwZSA9ICJjaGVja2JveCIgCgkJCQl9IAoJCQkJdHlwZSA9ICJmbG9hdCIgCgkJCQl2YWx1ZSA9IDAuMDAwMDAwIAoJCQl9IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjI1IiAKCQlvcHRpb25zID0gWyAKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNDIwIAoJCQk3MjAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJVc2UgRW1pc3NpdmUgTWFwIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL21hdGVyaWFsX3ZhcmlhYmxlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTAiIAoJCW9wdGlvbnMgPSBbIAoJCQkiMWUwNjc0NjQtMTJkOC00ODI2LTliNzItY2ZkNTc2NTAwM2UzIgoJCQkiZmIzZjcwOWItYTU0YS00ZTkzLWFjOWYtZTlmYzc2ZmI4YmNkIgoJCQkiNWRkNTliM2QtMTc2Mi00YTE0LTk5MzAtNzUwMDIzMGVmM2RiIgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk0MjAgCgkJCTc4MCAKCQldIAoJ", + "CXNhbXBsZXJzID0geyAKCQkJdGV4dHVyZV9tYXAgPSB7IAoJCQkJZGlzcGxheV9uYW1lID0gIkVtaXNzaXZlIE1hcCIgCgkJCQlzbG90X25hbWUgPSAiZW1pc3NpdmVfbWFwIiAKCQkJCXVpID0geyAKCQkJCQlvcmRlciA9IDUgCgkJCQl9IAoJCQl9IAoJCX0gCgkJdGl0bGUgPSAiRW1pc3NpdmUgTWFwIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL3NhbXBsZV90ZXh0dXJlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJCW1hdGVyaWFsX3ZhcmlhYmxlID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJFbWlzc2l2ZSIgCgkJCQluYW1lID0gImVtaXNzaXZlIiAKCQkJCXVpID0geyAKCQkJCQltYXggPSBbIDEuMDAwMDAwIDEuMDAwMDAwIDEuMDAwMDAwIF0gCgkJCQkJbWluID0gWyAwLjAwMDAwMCAwLjAwMDAwMCAwLjAwMDAwMCBdIAoJCQkJCXN0ZXAgPSBbIDAuMDEgMC4wMSAwLjAxIF0gCgkJCQkJb3JkZXIgPSAyMyAKCQkJCQl1aV90eXBlID0gImNvbG9yIiAKCQkJCX0gCgkJCQl0eXBlID0gImZsb2F0MyIgCgkJCQl2YWx1ZSA9IFswLjAwMDAwMCAwLjAwMDAwMCAwLjAwMDAwMF0gCgkJCX0gCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjQiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk0MjAgCgkJCTg4MCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIkVtaXNzaXZlIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL21hdGVyaWFsX3ZhcmlhYmxlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJCW1hdGVyaWFsX3ZhcmlhYmxlID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJFbWlzc2l2ZSBJbnRlbnNpdHkiIAoJCQkJbmFtZSA9ICJlbWlzc2l2ZV9pbnRlbnNpdHkiIAoJCQkJdWkgPSB7IAoJCQkJCW1heCA9IDEwLjAwMDAwMCAKCQkJCQltaW4gPSAwLjAwMDAwMCAKCQkJCQlzdGVwID0gMC4wMSAKCQkJCQlvcmRlciA9IDUzIAoJCQkJfSAKCQkJCXR5cGUgPSAiZmxvYXQiIAoJCQkJdmFsdWUgPSAwLjAwMDAwMCAKCQkJfSAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyOCIgCgkJb3B0aW9ucyA9IFsgCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTc0MCAKCQkJOTIwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiRW1pc3NpdmUgSW50ZW5zaXR5IiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL21hdGVyaWFsX3ZhcmlhYmxlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjciIAoJCW9wdGlvbnMgPSBbIAoJCQkiOUE4NDI4MkItRjFBMi00NkQ0LTlGQzQtNUE3NkZDOUIzMEREIgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQkxMDIwIAoJCQkxMTAwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiQW8gTWFwIFN3dGljaCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9pZiIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiVXNlIEFvIE1hcCIgCgkJCQluYW1lID0gInVzZV9hb19tYXAiIAoJCQkJdWkgPSB7IAoJCQkJCW1heCA9IDEgCgkJCQkJbWluID0gMC4wMDAwMDAgCgkJCQkJc3RlcCA9IDEgCgkJCQkJb3JkZXIgPSAxNSAKCQkJCQl1aV90eXBlID0gImNoZWNrYm94IiAKCQkJCX0gCgkJCQl0eXBlID0gImZsb2F0IiAKCQkJCXZhbHVlID0gMC4wMDAwMDAgCgkJCX0gCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjYiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk3MDAgCgkJCTExMDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJVc2UgQW8gTWFwIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL21hdGVyaWFsX3ZhcmlhYmxlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjciIAoJCW9wdGlvbnMgPSBbIAoJCQkiZjY2OWEzYTYtMDM3Ni00MTg3LTg0MGUtODAwMDBlMjkzOWQ1IgoJCQkiZTk0ZTUzZTYtNDliNi00MTk0LWE3NDctOGYwNjRhNTkzMmUwIgoJCQkiNWRkNTliM2QtMTc2Mi00YTE0LTk5MzAtNzUwMDIzMGVmM2RiIgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk3MDAgCgkJCTExNjAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJCXRleHR1cmVfbWFwID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJBbyBNYXAiIAoJCQkJc2xvdF9uYW1lID0gImFvX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJb3JkZXIgPSA2IAoJCQkJfSAKCQkJfSAKCQl9IAoJCXRpdGxlID0gIkFvIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9zYW1wbGVfdGV4dHVyZSIgCgl9IApdCnZlcnNpb24gPSAzCgA=" + } + } + } + BindingTable: 1454648192, "BindingTable::root 1", "" { + Version: 100 + Properties70: { + P: "TargetName", "KString", "", "", "root" + P: "TargetType", "KString", "", "", "shader" + } + Entry: "Maya|use_metallic_map", "FbxPropertyEntry", "use_metallic_map", "FbxSemanticEntry" + Entry: "Maya|base_color", "FbxPropertyEntry", "base_color", "FbxSemanticEntry" + Entry: "Maya|use_ao_map", "FbxPropertyEntry", "use_ao_map", "FbxSemanticEntry" + Entry: "Maya|TEX_emissive_map", "FbxPropertyEntry", "TEX_emissive_map", "FbxSemanticEntry" + Entry: "Maya|TEX_metallic_map", "FbxPropertyEntry", "TEX_metallic_map", "FbxSemanticEntry" + Entry: "Maya|TEX_ao_map", "FbxPropertyEntry", "TEX_ao_map", "FbxSemanticEntry" + Entry: "Maya|emissive_intensity", "FbxPropertyEntry", "emissive_intensity", "FbxSemanticEntry" + Entry: "Maya|metallic", "FbxPropertyEntry", "metallic", "FbxSemanticEntry" + Entry: "Maya|TEX_global_specular_cube", "FbxPropertyEntry", "TEX_global_specular_cube", "FbxSemanticEntry" + Entry: "Maya|use_roughness_map", "FbxPropertyEntry", "use_roughness_map", "FbxSemanticEntry" + Entry: "Maya|use_normal_map", "FbxPropertyEntry", "use_normal_map", "FbxSemanticEntry" + Entry: "Maya|use_color_map", "FbxPropertyEntry", "use_color_map", "FbxSemanticEntry" + Entry: "Maya|emissive", "FbxPropertyEntry", "emissive", "FbxSemanticEntry" + Entry: "Maya|use_emissive_map", "FbxPropertyEntry", "use_emissive_map", "FbxSemanticEntry" + Entry: "Maya|TEX_global_diffuse_cube", "FbxPropertyEntry", "TEX_global_diffuse_cube", "FbxSemanticEntry" + Entry: "Maya|TEX_roughness_map", "FbxPropertyEntry", "TEX_roughness_map", "FbxSemanticEntry" + Entry: "Maya|roughness", "FbxPropertyEntry", "roughness", "FbxSemanticEntry" + Entry: "Maya|TEX_brdf_lut", "FbxPropertyEntry", "TEX_brdf_lut", "FbxSemanticEntry" + Entry: "Maya|TEX_color_map", "FbxPropertyEntry", "TEX_color_map", "FbxSemanticEntry" + Entry: "Maya|TEX_normal_map", "FbxPropertyEntry", "TEX_normal_map", "FbxSemanticEntry" + } +} + +; Object connections +;------------------------------------------------------------------ + +Connections: { + + ;Model::Mallet1, Model::RootNode + C: "OO",358194480,0 + + ;AnimLayer::BaseLayer, AnimStack::Take 001 + C: "OO",1458067488,1452792496 + + ;NodeAttribute::, Model::Mallet1 + C: "OO",1448169328,358194480 + + ;Model::polySurface1, Model::Mallet1 + C: "OO",1455902608,358194480 + + ;Model::polySurface2, Model::Mallet1 + C: "OO",1455904928,358194480 + + ;Texture::file1, Material::Steel + C: "OP",1446197696,1448217264, "Maya|TEX_global_diffuse_cube" + + ;Texture::file2, Material::Steel + C: "OP",1446195296,1448217264, "Maya|TEX_global_specular_cube" + + ;Texture::file3, Material::Steel + C: "OP",1446196736,1448217264, "Maya|TEX_brdf_lut" + + ;Material::Steel, Implementation::Steel_Implementation + C: "OO",1448217264,1452878032 + + ;BindingTable::root 1, Implementation::Steel_Implementation + C: "OO",1454648192,1452878032 + + ;Video::file2, Texture::file2 + C: "OO",1457060240,1446195296 + + ;Video::file1, Texture::file1 + C: "OO",1457060640,1446197696 + + ;Video::file3, Texture::file3 + C: "OO",1457061040,1446196736 + + ;Geometry::, Model::polySurface1 + C: "OO",1449852656,1455902608 + + ;Material::Steel, Model::polySurface1 + C: "OO",1448217264,1455902608 + + ;Geometry::, Model::polySurface2 + C: "OO",1449862384,1455904928 + + ;Material::Steel, Model::polySurface2 + C: "OO",1448217264,1455904928 +} diff --git a/unpublishedScripts/marketplace/xylophone/xyloKey_2_a_e.fbx b/unpublishedScripts/marketplace/xylophone/xyloKey_2_a_e.fbx new file mode 100644 index 0000000000000000000000000000000000000000..405abb433b8bceef110847e18959fc858b216182 GIT binary patch literal 55664 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 VcV#ZKwdY>?@0~gw$@#Y0{|B~-vswTE literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave.fbx b/unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave.fbx new file mode 100644 index 0000000000..bb9ef84d42 --- /dev/null +++ b/unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave.fbx @@ -0,0 +1,1031 @@ +; FBX 7.5.0 project file +; Copyright (C) 1997-2015 Autodesk Inc. and/or its licensors. +; All rights reserved. +; ---------------------------------------------------- + +FBXHeaderExtension: { + FBXHeaderVersion: 1003 + FBXVersion: 7500 + CreationTimeStamp: { + Version: 1000 + Year: 2017 + Month: 3 + Day: 6 + Hour: 10 + Minute: 48 + Second: 41 + Millisecond: 261 + } + Creator: "FBX SDK/FBX Plugins version 2017.0.1" + SceneInfo: "SceneInfo::GlobalInfo", "UserData" { + Type: "UserData" + Version: 100 + MetaData: { + Version: 100 + Title: "" + Subject: "" + Author: "" + Keywords: "" + Revision: "" + Comment: "" + } + Properties70: { + P: "DocumentUrl", "KString", "Url", "", "F:\Dropbox\Dropbox\_High Fidelity\xylophone\xylophoneFrameWithWave.fbx" + P: "SrcDocumentUrl", "KString", "Url", "", "F:\Dropbox\Dropbox\_High Fidelity\xylophone\xylophoneFrameWithWave.fbx" + P: "Original", "Compound", "", "" + P: "Original|ApplicationVendor", "KString", "", "", "Autodesk" + P: "Original|ApplicationName", "KString", "", "", "Maya" + P: "Original|ApplicationVersion", "KString", "", "", "2017" + P: "Original|DateTime_GMT", "DateTime", "", "", "06/03/2017 18:48:41.259" + P: "Original|FileName", "KString", "", "", "F:\Dropbox\Dropbox\_High Fidelity\xylophone\xylophoneFrameWithWave.fbx" + P: "LastSaved", "Compound", "", "" + P: "LastSaved|ApplicationVendor", "KString", "", "", "Autodesk" + P: "LastSaved|ApplicationName", "KString", "", "", "Maya" + P: "LastSaved|ApplicationVersion", "KString", "", "", "2017" + P: "LastSaved|DateTime_GMT", "DateTime", "", "", "06/03/2017 18:48:41.259" + P: "Original|ApplicationActiveProject", "KString", "", "", "F:\Dropbox\Dropbox\_High Fidelity\xylophone" + P: "Original|ApplicationNativeFile", "KString", "", "", "F:\Dropbox\Dropbox\_High Fidelity\xylophone\xylophoneFrameWithWave.mb" + } + } +} +GlobalSettings: { + Version: 1000 + Properties70: { + P: "UpAxis", "int", "Integer", "",1 + P: "UpAxisSign", "int", "Integer", "",1 + P: "FrontAxis", "int", "Integer", "",2 + P: "FrontAxisSign", "int", "Integer", "",1 + P: "CoordAxis", "int", "Integer", "",0 + P: "CoordAxisSign", "int", "Integer", "",1 + P: "OriginalUpAxis", "int", "Integer", "",1 + P: "OriginalUpAxisSign", "int", "Integer", "",1 + P: "UnitScaleFactor", "double", "Number", "",1 + P: "OriginalUnitScaleFactor", "double", "Number", "",1 + P: "AmbientColor", "ColorRGB", "Color", "",0,0,0 + P: "DefaultCamera", "KString", "", "", "Producer Perspective" + P: "TimeMode", "enum", "", "",11 + P: "TimeProtocol", "enum", "", "",2 + P: "SnapOnFrameMode", "enum", "", "",0 + P: "TimeSpanStart", "KTime", "Time", "",1924423250 + P: "TimeSpanStop", "KTime", "Time", "",384884650000 + P: "CustomFrameRate", "double", "Number", "",-1 + P: "TimeMarker", "Compound", "", "" + P: "CurrentTimeMarker", "int", "Integer", "",-1 + } +} + +; Documents Description +;------------------------------------------------------------------ + +Documents: { + Count: 1 + Document: 1980820224, "", "Scene" { + Properties70: { + P: "SourceObject", "object", "", "" + P: "ActiveAnimStackName", "KString", "", "", "Take 001" + } + RootNode: 0 + } +} + +; Document References +;------------------------------------------------------------------ + +References: { +} + +; Object definitions +;------------------------------------------------------------------ + +Definitions: { + Version: 100 + Count: 30 + ObjectType: "GlobalSettings" { + Count: 1 + } + ObjectType: "AnimationStack" { + Count: 1 + PropertyTemplate: "FbxAnimStack" { + Properties70: { + P: "Description", "KString", "", "", "" + P: "LocalStart", "KTime", "Time", "",0 + P: "LocalStop", "KTime", "Time", "",0 + P: "ReferenceStart", "KTime", "Time", "",0 + P: "ReferenceStop", "KTime", "Time", "",0 + } + } + } + ObjectType: "AnimationLayer" { + Count: 1 + PropertyTemplate: "FbxAnimLayer" { + Properties70: { + P: "Weight", "Number", "", "A",100 + P: "Mute", "bool", "", "",0 + P: "Solo", "bool", "", "",0 + P: "Lock", "bool", "", "",0 + P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 + P: "BlendMode", "enum", "", "",0 + P: "RotationAccumulationMode", "enum", "", "",0 + P: "ScaleAccumulationMode", "enum", "", "",0 + P: "BlendModeBypass", "ULongLong", "", "",0 + } + } + } + ObjectType: "NodeAttribute" { + Count: 5 + PropertyTemplate: "FbxNull" { + Properties70: { + P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 + P: "Size", "double", "Number", "",100 + P: "Look", "enum", "", "",1 + } + } + } + ObjectType: "Model" { + Count: 6 + PropertyTemplate: "FbxNode" { + Properties70: { + P: "QuaternionInterpolate", "enum", "", "",0 + P: "RotationOffset", "Vector3D", "Vector", "",0,0,0 + P: "RotationPivot", "Vector3D", "Vector", "",0,0,0 + P: "ScalingOffset", "Vector3D", "Vector", "",0,0,0 + P: "ScalingPivot", "Vector3D", "Vector", "",0,0,0 + P: "TranslationActive", "bool", "", "",0 + P: "TranslationMin", "Vector3D", "Vector", "",0,0,0 + P: "TranslationMax", "Vector3D", "Vector", "",0,0,0 + P: "TranslationMinX", "bool", "", "",0 + P: "TranslationMinY", "bool", "", "",0 + P: "TranslationMinZ", "bool", "", "",0 + P: "TranslationMaxX", "bool", "", "",0 + P: "TranslationMaxY", "bool", "", "",0 + P: "TranslationMaxZ", "bool", "", "",0 + P: "RotationOrder", "enum", "", "",0 + P: "RotationSpaceForLimitOnly", "bool", "", "",0 + P: "RotationStiffnessX", "double", "Number", "",0 + P: "RotationStiffnessY", "double", "Number", "",0 + P: "RotationStiffnessZ", "double", "Number", "",0 + P: "AxisLen", "double", "Number", "",10 + P: "PreRotation", "Vector3D", "Vector", "",0,0,0 + P: "PostRotation", "Vector3D", "Vector", "",0,0,0 + P: "RotationActive", "bool", "", "",0 + P: "RotationMin", "Vector3D", "Vector", "",0,0,0 + P: "RotationMax", "Vector3D", "Vector", "",0,0,0 + P: "RotationMinX", "bool", "", "",0 + P: "RotationMinY", "bool", "", "",0 + P: "RotationMinZ", "bool", "", "",0 + P: "RotationMaxX", "bool", "", "",0 + P: "RotationMaxY", "bool", "", "",0 + P: "RotationMaxZ", "bool", "", "",0 + P: "InheritType", "enum", "", "",0 + P: "ScalingActive", "bool", "", "",0 + P: "ScalingMin", "Vector3D", "Vector", "",0,0,0 + P: "ScalingMax", "Vector3D", "Vector", "",1,1,1 + P: "ScalingMinX", "bool", "", "",0 + P: "ScalingMinY", "bool", "", "",0 + P: "ScalingMinZ", "bool", "", "",0 + P: "ScalingMaxX", "bool", "", "",0 + P: "ScalingMaxY", "bool", "", "",0 + P: "ScalingMaxZ", "bool", "", "",0 + P: "GeometricTranslation", "Vector3D", "Vector", "",0,0,0 + P: "GeometricRotation", "Vector3D", "Vector", "",0,0,0 + P: "GeometricScaling", "Vector3D", "Vector", "",1,1,1 + P: "MinDampRangeX", "double", "Number", "",0 + P: "MinDampRangeY", "double", "Number", "",0 + P: "MinDampRangeZ", "double", "Number", "",0 + P: "MaxDampRangeX", "double", "Number", "",0 + P: "MaxDampRangeY", "double", "Number", "",0 + P: "MaxDampRangeZ", "double", "Number", "",0 + P: "MinDampStrengthX", "double", "Number", "",0 + P: "MinDampStrengthY", "double", "Number", "",0 + P: "MinDampStrengthZ", "double", "Number", "",0 + P: "MaxDampStrengthX", "double", "Number", "",0 + P: "MaxDampStrengthY", "double", "Number", "",0 + P: "MaxDampStrengthZ", "double", "Number", "",0 + P: "PreferedAngleX", "double", "Number", "",0 + P: "PreferedAngleY", "double", "Number", "",0 + P: "PreferedAngleZ", "double", "Number", "",0 + P: "LookAtProperty", "object", "", "" + P: "UpVectorProperty", "object", "", "" + P: "Show", "bool", "", "",1 + P: "NegativePercentShapeSupport", "bool", "", "",1 + P: "DefaultAttributeIndex", "int", "Integer", "",-1 + P: "Freeze", "bool", "", "",0 + P: "LODBox", "bool", "", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,0,0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",0,0,0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",1,1,1 + P: "Visibility", "Visibility", "", "A",1 + P: "Visibility Inheritance", "Visibility Inheritance", "", "",1 + } + } + } + ObjectType: "Geometry" { + Count: 1 + PropertyTemplate: "FbxMesh" { + Properties70: { + P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 + P: "BBoxMin", "Vector3D", "Vector", "",0,0,0 + P: "BBoxMax", "Vector3D", "Vector", "",0,0,0 + P: "Primary Visibility", "bool", "", "",1 + P: "Casts Shadows", "bool", "", "",1 + P: "Receive Shadows", "bool", "", "",1 + } + } + } + ObjectType: "Material" { + Count: 1 + PropertyTemplate: "FbxSurfaceMaterial" { + Properties70: { + P: "ShadingModel", "KString", "", "", "Unknown" + P: "MultiLayer", "bool", "", "",0 + } + } + } + ObjectType: "Implementation" { + Count: 1 + PropertyTemplate: "FbxImplementation" { + Properties70: { + P: "ShaderLanguage", "KString", "", "", "MentalRaySL" + P: "ShaderLanguageVersion", "KString", "", "", "" + P: "RenderAPI", "KString", "", "", "MentalRay" + P: "RenderAPIVersion", "KString", "", "", "" + P: "RootBindingName", "KString", "", "", "" + P: "Constants", "Compound", "", "" + } + } + } + ObjectType: "BindingTable" { + Count: 1 + PropertyTemplate: "FbxBindingTable" { + Properties70: { + P: "TargetName", "KString", "", "", "" + P: "TargetType", "KString", "", "", "" + P: "CodeAbsoluteURL", "KString", "XRefUrl", "", "" + P: "CodeRelativeURL", "KString", "XRefUrl", "", "" + P: "CodeTAG", "KString", "", "", "shader" + P: "DescAbsoluteURL", "KString", "XRefUrl", "", "" + P: "DescRelativeURL", "KString", "XRefUrl", "", "" + P: "DescTAG", "KString", "", "", "shader" + } + } + } + ObjectType: "Texture" { + Count: 8 + PropertyTemplate: "FbxFileTexture" { + Properties70: { + P: "TextureTypeUse", "enum", "", "",0 + P: "Texture alpha", "Number", "", "A",1 + P: "CurrentMappingType", "enum", "", "",0 + P: "WrapModeU", "enum", "", "",0 + P: "WrapModeV", "enum", "", "",0 + P: "UVSwap", "bool", "", "",0 + P: "PremultiplyAlpha", "bool", "", "",1 + P: "Translation", "Vector", "", "A",0,0,0 + P: "Rotation", "Vector", "", "A",0,0,0 + P: "Scaling", "Vector", "", "A",1,1,1 + P: "TextureRotationPivot", "Vector3D", "Vector", "",0,0,0 + P: "TextureScalingPivot", "Vector3D", "Vector", "",0,0,0 + P: "CurrentTextureBlendMode", "enum", "", "",1 + P: "UVSet", "KString", "", "", "default" + P: "UseMaterial", "bool", "", "",0 + P: "UseMipMap", "bool", "", "",0 + } + } + } + ObjectType: "Video" { + Count: 4 + PropertyTemplate: "FbxVideo" { + Properties70: { + P: "ImageSequence", "bool", "", "",0 + P: "ImageSequenceOffset", "int", "Integer", "",0 + P: "FrameRate", "double", "Number", "",0 + P: "LastFrame", "int", "Integer", "",0 + P: "Width", "int", "Integer", "",0 + P: "Height", "int", "Integer", "",0 + P: "Path", "KString", "XRefUrl", "", "" + P: "StartFrame", "int", "Integer", "",0 + P: "StopFrame", "int", "Integer", "",0 + P: "PlaySpeed", "double", "Number", "",0 + P: "Offset", "KTime", "Time", "",0 + P: "InterlaceMode", "enum", "", "",0 + P: "FreeRunning", "bool", "", "",0 + P: "Loop", "bool", "", "",0 + P: "AccessMode", "enum", "", "",0 + } + } + } +} + +; Object properties +;------------------------------------------------------------------ + +Objects: { + NodeAttribute: 1611246784, "NodeAttribute::", "Null" { + Properties70: { + P: "Look", "enum", "", "",0 + } + TypeFlags: "Null" + } + NodeAttribute: 1611245728, "NodeAttribute::", "Null" { + Properties70: { + P: "Look", "enum", "", "",0 + } + TypeFlags: "Null" + } + NodeAttribute: 1611246608, "NodeAttribute::", "Null" { + Properties70: { + P: "Look", "enum", "", "",0 + } + TypeFlags: "Null" + } + NodeAttribute: 1611246256, "NodeAttribute::", "Null" { + Properties70: { + P: "Look", "enum", "", "",0 + } + TypeFlags: "Null" + } + NodeAttribute: 1611247136, "NodeAttribute::", "Null" { + Properties70: { + P: "Look", "enum", "", "",0 + } + TypeFlags: "Null" + } + Geometry: 1983184160, "Geometry::", "Mesh" { + Vertices: *3117 { + a: -101.134796142578,80.4016571044922,-41.9429893493652,-93.2760238647461,80.4016571044922,-34.0842208862305,-84.7931442260742,80.4016571044922,-26.308177947998,-75.6639556884766,80.4016571044922,-19.3006763458252,-65.958625793457,80.4016647338867,-13.1157073974609,-55.7510528564453,80.4016571044922,-7.80038452148438,-45.1189613342285,80.4016647338867,-3.39517498016357,-34.143310546875,80.4016571044922,0.0663824081420898,-22.9076843261719,80.4016647338867,2.5579195022583,-11.497615814209,80.4016647338867,4.06047391891479,-4.2708282114827e-015,80.4016571044922,4.56259965896606,11.4976043701172,80.4016647338867,4.06047391891479,22.9076728820801,80.4016647338867,2.55792045593262,34.1433029174805,80.4016571044922,0.0663833618164063,45.1189575195313,80.4016571044922,-3.39517116546631,55.7510375976563,80.4016571044922,-7.80037879943848,65.958625793457,80.4016647338867,-13.1157073974609,75.663948059082,80.4016571044922,-19.3006649017334,84.7931289672852,80.4016571044922,-26.3081703186035,93.2760238647461,80.4016571044922,-34.0842208862305,-94.3248672485352,80.4016571044922,-33.558349609375,-85.7758941650391,80.4016571044922,-25.7204284667969,-76.5680999755859,80.4016571044922,-18.6525764465332,-66.7711563110352,80.4016571044922,-12.4092292785645,-56.4582214355469,80.4016571044922,-7.03904724121094,-45.7067222595215,80.4016647338867,-2.5843620300293,-34.598316192627,80.4016571044922,0.919064521789551,-23.2183227539063,80.4016571044922,3.44261598587036,-11.6552543640137,80.4016647338867,4.96531867980957,-1.27318719478353e-006,80.4016647338867,5.47432899475098,11.6552352905273,80.4016647338867,4.96532011032104,23.218318939209,80.4016571044922,3.44261646270752,34.5983009338379,80.4016647338867,0.919069290161133,45.7067070007324,80.4016571044922,-2.58435535430908,56.4582099914551,80.4016571044922,-7.03904151916504,66.7711715698242,80.4016647338867,-12.4092407226563,76.5680694580078,80.4016571044922,-18.6525630950928,85.7758636474609,80.4016571044922,-25.7204093933105,94.2930908203125,80.4016571044922,-33.5279312133789, +-108.993537902832,66.775390625,-49.8017349243164,-110.662445068359,66.3969421386719,-51.4706420898438,-108.993537902832,69.2256240844727,-49.8017349243164,-107.324630737305,66.3969345092773,-48.1328277587891,-108.373474121094,66.3969268798828,-47.6069564819336,-110.042373657227,69.2256164550781,-49.2758636474609,-111.711296081543,66.3969421386719,-50.9447708129883,-110.042373657227,66.775390625,-49.2758636474609,-101.134796142578,63.8953247070313,-41.942985534668,-102.8037109375,64.2737884521484,-43.6119003295898,-101.134796142578,65.5349426269531,-41.942985534668,-99.4658813476563,64.2737884521484,-40.2740783691406,-100.514114379883,64.2709197998047,-39.7478942871094,-102.183639526367,65.5349426269531,-41.417121887207,-103.852119445801,64.2735900878906,-43.0856018066406,-102.183364868164,63.8944778442383,-41.4169235229492,-93.2502746582031,66.7794799804688,-34.0965347290039,-94.9441452026367,66.3973083496094,-35.7523422241211,-93.2760238647461,69.2256164550781,-34.0842208862305,-91.5082473754883,66.4115905761719,-32.4637451171875,-92.5253219604492,66.4146881103516,-31.9074630737305,-94.2947998046875,69.2256164550781,-33.5295562744141,-95.9614105224609,66.4003753662109,-35.1959609985352,-94.2673950195313,66.7811737060547,-33.5402221679688,-84.7451095581055,63.8937377929688,-26.3395690917969,-86.5636444091797,64.2603149414063,-27.93115234375,-84.7931442260742,65.5349426269531,-26.3081817626953,-82.8368988037109,64.280876159668,-24.8065795898438,-83.8190383911133,64.2743682861328,-24.2183609008789,-85.7758941650391,65.5349426269531,-25.7204284667969,-87.5458526611328,64.2569732666016,-27.3429107666016,-85.7275848388672,63.8910369873047,-25.7515563964844,-75.6172790527344,66.7636337280273,-19.3372459411621,-77.6282424926758,66.386589050293,-20.8084487915039,-75.6639556884766,69.2256240844727,-19.3006744384766,-73.5194854736328,66.3652114868164,-17.9340476989746,-74.4234085083008,66.3727569580078,-17.2858238220215,-76.5680847167969,69.2256164550781,-18.6525688171387,-78.5321960449219,66.393440246582,-20.160213470459,-76.5213241577148,66.7675933837891,-18.6890602111816, +-65.914306640625,63.9208984375,-13.1578102111816,-68.1123962402344,64.3090362548828,-14.4882507324219,-65.958625793457,65.5349426269531,-13.1157073974609,-63.6341857910156,64.330451965332,-11.9053153991699,-64.4464797973633,64.3219451904297,-11.1987190246582,-66.7711410522461,65.5349426269531,-12.4092292785645,-68.9247131347656,64.3013000488281,-13.7816429138184,-66.7267532348633,63.9164009094238,-12.4512405395508,-55.7104187011719,66.7360992431641,-7.84817886352539,-58.0856781005859,66.3365783691406,-9.01607894897461,-55.7510528564453,69.2256164550781,-7.80038452148438,-53.2602767944336,66.3160858154297,-6.76837921142578,-53.9671859741211,66.3255996704102,-6.00693130493164,-56.4582176208496,69.2256164550781,-7.03904342651367,-58.7926025390625,66.3452911376953,-8.25461196899414,-56.4174880981445,66.7411651611328,-7.08674621582031,-45.0835609436035,63.9475708007813,-3.44853591918945,-47.6201858520508,64.3582611083984,-4.43151092529297,-45.1189613342285,65.5349502563477,-3.39517593383789,-42.4819679260254,64.3767395019531,-2.56350326538086,-43.0694389343262,64.3662338256836,-1.75260162353516,-45.7067108154297,65.5349426269531,-2.58435821533203,-48.2076873779297,64.3485336303711,-3.62059020996094,-45.6712112426758,63.9419059753418,-2.63762283325195,-34.1147918701172,66.711784362793,0.00797653198242188,-36.7901611328125,66.2906723022461,-0.768394470214844,-34.143310546875,69.2256164550781,0.0663833618164063,-31.3872623443604,66.2753829956055,0.677543640136719,-31.8420143127441,66.2867889404297,1.5302848815918,-34.5983200073242,69.2256164550781,0.919063568115234,-37.2449264526367,66.3013763427734,0.0843658447265625,-34.569694519043,66.7180023193359,0.860752105712891,-22.8876056671143,63.9678497314453,2.49544525146484,-25.6718997955322,64.3980102539063,1.9449462890625,-22.9076843261719,65.5349426269531,2.55791854858398,-20.0667133331299,64.4089508056641,2.93203735351563,-20.3771553039551,64.3968734741211,3.8167610168457,-23.2183265686035,65.5349426269531,3.4426155090332,-25.9823532104492,64.3864288330078,2.82968521118164, +-23.198169708252,63.9611740112305,3.38022232055664,-11.487232208252,66.6971435546875,3.99534225463867,-14.3440227508545,66.2600021362305,3.68563842773438,-11.497615814209,69.2256240844727,4.06047439575195,-8.61154460906982,66.254280090332,4.18651580810547,-8.76906967163086,66.2667922973633,5.09136581420898,-11.655252456665,69.2256240844727,4.96531867980957,-14.5015478134155,66.272216796875,4.59049987792969,-11.6448211669922,66.7041244506836,4.90026092529297,-2.64522583393045e-007,63.9755401611328,4.49654388427734,-2.88798141479492,64.4170455932617,4.43647384643555,-4.3665691925438e-015,65.5349426269531,4.56259918212891,2.88798046112061,64.4170455932617,4.43647384643555,2.88798141479492,64.4045104980469,5.34820556640625,1.09400730252673e-006,65.5349426269531,5.47432708740234,-2.88797998428345,64.4045104980469,5.34820556640625,1.01989189715823e-006,63.9684524536133,5.40834426879883,11.4872207641602,66.6971435546875,3.99534225463867,8.61153507232666,66.254280090332,4.18651580810547,11.4976043701172,69.2256240844727,4.06047439575195,14.3440113067627,66.2600021362305,3.68564224243164,14.501537322998,66.272216796875,4.59049987792969,11.655237197876,69.2256240844727,4.9653205871582,8.76905536651611,66.2667770385742,5.09136581420898,11.6448078155518,66.7041244506836,4.90026473999023,22.8875980377197,63.9678497314453,2.49544906616211,20.0667057037354,64.4089508056641,2.93204116821289,22.9076728820801,65.5349426269531,2.55792236328125,25.6718902587891,64.3980102539063,1.9449462890625,25.982349395752,64.3864288330078,2.82968521118164,23.218318939209,65.5349426269531,3.4426155090332,20.3771438598633,64.3968658447266,3.8167610168457,23.1981620788574,63.9611778259277,3.38022613525391,34.1147804260254,66.711784362793,0.0079803466796875,31.3872566223145,66.275390625,0.677547454833984,34.1433029174805,69.2256164550781,0.0663833618164063,36.7901458740234,66.2906646728516,-0.768394470214844,37.2449111938477,66.301383972168,0.0843696594238281,34.5983047485352,69.2256164550781,0.9190673828125,31.8419990539551,66.2867965698242,1.53028869628906, +34.5696792602539,66.7180023193359,0.860755920410156,45.0835494995117,63.9475708007813,-3.44853210449219,42.4819526672363,64.3767471313477,-2.56350326538086,45.1189575195313,65.5349426269531,-3.39517211914063,47.6201782226563,64.3582611083984,-4.4315071105957,48.2076721191406,64.3485260009766,-3.62058639526367,45.7067070007324,65.5349502563477,-2.58435440063477,43.0694351196289,64.3662338256836,-1.75259780883789,45.671199798584,63.9419021606445,-2.63761901855469,55.7104034423828,66.7360992431641,-7.84817504882813,53.2602653503418,66.3160858154297,-6.76837539672852,55.7510375976563,69.2256240844727,-7.80037689208984,58.0856590270996,66.3365859985352,-9.01607131958008,58.7925987243652,66.3452987670898,-8.25461196899414,56.4582138061523,69.2256240844727,-7.03904342651367,53.9671859741211,66.3255920410156,-6.00693130493164,56.41748046875,66.7411727905273,-7.08673858642578,65.914306640625,63.9208984375,-13.1578102111816,63.6341857910156,64.3304443359375,-11.9053153991699,65.958625793457,65.5349426269531,-13.1157073974609,68.1123962402344,64.3090515136719,-14.4882507324219,68.9246978759766,64.3013000488281,-13.7816314697266,66.771125793457,65.5349426269531,-12.4092178344727,64.4464645385742,64.3219451904297,-11.1987075805664,66.7267379760742,63.9163970947266,-12.451229095459,75.6172637939453,66.7636337280273,-19.3372459411621,73.5194702148438,66.3652038574219,-17.9340438842773,75.663948059082,69.2256164550781,-19.300666809082,77.6282348632813,66.386589050293,-20.8084411621094,78.5321807861328,66.3934326171875,-20.1602020263672,76.5680694580078,69.2256240844727,-18.6525535583496,74.4233932495117,66.3727569580078,-17.2858123779297,76.5213088989258,66.7675933837891,-18.6890411376953,84.7450942993164,63.893741607666,-26.3395614624023,82.8368835449219,64.280876159668,-24.8065643310547,84.7931289672852,65.5349426269531,-26.3081741333008,86.5636291503906,64.2603149414063,-27.9311447143555,87.5460586547852,64.2542266845703,-27.3433609008789,85.7758636474609,65.5349426269531,-25.7203979492188,83.8194808959961,64.2741928100586,-24.2186889648438, +85.7277374267578,63.8902359008789,-25.7517395019531,93.2495880126953,66.7794799804688,-34.0958938598633,91.5069046020508,66.4110107421875,-32.462516784668,93.2760238647461,69.2256164550781,-34.0842208862305,94.9428863525391,66.3978881835938,-35.7510833740234,95.9909210205078,66.3982696533203,-35.2243957519531,94.3231811523438,69.2256240844727,-33.5567245483398,92.5550994873047,66.4166717529297,-31.9357757568359,94.2980804443359,66.7811431884766,-33.5695877075195,101.134765625,63.8953247070313,-41.9429702758789,99.4658660888672,64.2737884521484,-40.2740707397461,101.134765625,65.5349426269531,-41.9429702758789,102.803680419922,64.2737884521484,-43.6118774414063,103.852531433105,64.2737884521484,-43.0860137939453,102.183624267578,65.5349426269531,-41.4170989990234,100.514709472656,64.2737884521484,-39.7481918334961,102.183624267578,63.8953285217285,-41.4170989990234,108.993530273438,66.775390625,-49.8017349243164,107.324630737305,66.3969421386719,-48.1328201293945,108.993530273438,69.2256240844727,-49.8017349243164,110.662445068359,66.3969421386719,-51.4706420898438,111.711288452148,66.3969421386719,-50.9447708129883,110.042366027832,69.2256164550781,-49.2758636474609,108.373466491699,66.3969421386719,-47.6069564819336,110.042366027832,66.775390625,-49.2758636474609,100.759162902832,80.4016571044922,-41.5673751831055,101.526153564453,80.4016571044922,-40.7597465515137,101.134765625,79.9412155151367,-41.9429702758789,102.183624267578,79.5957336425781,-41.4170989990234,108.993530273438,70.3071975708008,-49.8017349243164,113.127655029297,65.2392120361328,-53.9358596801758,113.719665527344,65.4537506103516,-52.9531478881836,110.042366027832,69.9617309570313,-49.2758636474609,110.812942504883,69.0171051025391,-50.0464248657227,110.102928161621,68.9471893310547,-50.9111328125,-101.177276611328,80.4016571044922,-41.985466003418,-101.277847290039,80.4016571044922,-41.8712692260742,-101.914657592773,80.4016571044922,-41.1481285095215,-108.993537902832,69.9640274047852,-49.8017349243164,-110.042373657227,69.5481109619141,-49.2758636474609, +-112.208450317383,65.6708984375,-53.0166473388672,-112.776893615723,65.8964996337891,-52.0103759765625,-102.183639526367,80.0424575805664,-41.417121887207,-110.345245361328,69.1436614990234,-49.578727722168,-109.687026977539,69.0379638671875,-50.4952163696289,-83.0836486816406,4.99999904632568,-27.2701225280762,-73.4974212646484,4.99999475479126,-20.0309410095215,-63.2841377258301,4.99999570846558,-13.7071371078491,-52.5309410095215,5.00000095367432,-8.35268497467041,-41.3295707702637,5.00000381469727,-4.01324415206909,-29.7755908966064,5.00000238418579,-0.725861072540283,-17.9675750732422,4.99999952316284,1.48143672943115,-6.00626611709595,4.99999618530273,2.58982419967651,6.00628566741943,4.99999618530273,2.58980798721313,17.9675941467285,4.99999952316284,1.48143815994263,29.7756099700928,5.00000238418579,-0.725861549377441,41.32958984375,5.00000381469727,-4.01325416564941,52.5309600830078,5.00000095367432,-8.35269165039063,63.2841529846191,4.99999570846558,-13.7071447372437,73.4974365234375,4.99999570846558,-20.0309410095215,83.0836563110352,5,-27.2701263427734,-83.0836486816406,1.9073486328125e-006,-27.2701148986816,-73.4974212646484,1.66893005371094e-006,-20.030933380127,-63.2841300964355,1.19209289550781e-006,-13.7071447372437,-52.530933380127,1.19209289550781e-006,-8.35269260406494,-41.3295707702637,1.19209289550781e-006,-4.01324415206909,-29.7755908966064,2.38418579101563e-007,-0.725861072540283,-17.9675750732422,2.38418579101563e-007,1.48143672943115,-6.00626611709595,-3.814697265625e-006,2.58982419967651,6.00628566741943,-3.814697265625e-006,2.58980798721313,17.9675941467285,2.38418579101563e-007,1.48143815994263,29.7756099700928,2.38418579101563e-007,-0.725861549377441,41.32958984375,1.19209289550781e-006,-4.01325416564941,52.5309600830078,2.14576721191406e-006,-8.35269165039063,63.2841529846191,2.14576721191406e-006,-13.7071447372437,73.4974365234375,1.66893005371094e-006,-20.0309410095215,83.0836563110352,1.9073486328125e-006,-27.2701263427734,-94.4441452026367,78.323600769043,-32.8871726989746,-94.6315307617188,78.5938415527344,-32.6924247741699, +-85.4963531494141,78.5938110351563,-24.3646087646484,-85.3235931396484,78.3236770629883,-24.5726528167725,-75.6317443847656,78.5938110351563,-16.9152030944824,-75.4789199829102,78.3236770629883,-17.1382999420166,-65.1218719482422,78.5938110351563,-10.407769203186,-64.9902801513672,78.3236770629883,-10.6440143585205,-54.0564117431641,78.5938110351563,-4.89782238006592,-53.9471817016602,78.3236770629883,-5.14520645141602,-42.5297584533691,78.5938110351563,-0.432375907897949,-42.4438209533691,78.3236770629883,-0.688781976699829,-30.6402568817139,78.5938110351563,2.95048189163208,-30.5783443450928,78.3236770629883,2.68723702430725,-18.4893436431885,78.5938110351563,5.22187328338623,-18.4519824981689,78.3236770629883,4.95404529571533,-6.18068504333496,78.5938110351563,6.36244869232178,-6.16819620132446,78.3236770629883,6.09231615066528,6.18070507049561,78.5938110351563,6.36244773864746,6.16821622848511,78.3236770629883,6.09231519699097,18.4893627166748,78.5938110351563,5.2218713760376,18.4520015716553,78.3236770629883,4.9540433883667,30.6402759552002,78.5938110351563,2.95047760009766,30.5783634185791,78.3236770629883,2.68723273277283,42.5297775268555,78.5938110351563,-0.432382106781006,42.4438400268555,78.3236770629883,-0.688788175582886,54.0564308166504,78.5938110351563,-4.89783048629761,53.9472007751465,78.3236770629883,-5.14521408081055,65.1218872070313,78.5938110351563,-10.4077768325806,64.9902954101563,78.3236770629883,-10.644021987915,75.6317596435547,78.5938110351563,-16.9152126312256,75.4789352416992,78.3236770629883,-17.1383094787598,85.4963607788086,78.5938110351563,-24.364616394043,85.323600769043,78.3236770629883,-24.572660446167,94.6315383911133,78.5938415527344,-32.6924362182617,94.4441528320313,78.323600769043,-32.8871841430664,-94.6315307617188,83.0534973144531,-32.6924247741699,-94.4441528320313,83.3234939575195,-32.8872032165527,-85.4963531494141,83.0535430908203,-24.3646087646484,-85.3235931396484,83.3236770629883,-24.5726528167725,-75.6317443847656,83.0535430908203,-16.9152030944824,-75.4789199829102,83.3236770629883,-17.1382999420166, +-65.1218719482422,83.0535430908203,-10.407769203186,-64.9902801513672,83.3236770629883,-10.6440143585205,-54.0564117431641,83.0535430908203,-4.89782238006592,-53.9471817016602,83.3236770629883,-5.14520645141602,-42.5297584533691,83.0535430908203,-0.432375907897949,-42.4438209533691,83.3236770629883,-0.688781976699829,-30.6402568817139,83.0535430908203,2.95048189163208,-30.5783443450928,83.3236770629883,2.68723702430725,-18.4893436431885,83.0535430908203,5.22187328338623,-18.4519824981689,83.3236770629883,4.95404529571533,-6.18068504333496,83.0535430908203,6.36244869232178,-6.16819620132446,83.3236770629883,6.09231615066528,6.18070507049561,83.0535430908203,6.36244773864746,6.16821622848511,83.3236770629883,6.09231519699097,18.4893627166748,83.0535430908203,5.2218713760376,18.4520015716553,83.3236770629883,4.9540433883667,30.6402759552002,83.0535430908203,2.95047760009766,30.5783634185791,83.3236770629883,2.68723273277283,42.5297775268555,83.0535430908203,-0.432382106781006,42.4438400268555,83.3236770629883,-0.688788175582886,54.0564308166504,83.0535430908203,-4.89783048629761,53.9472007751465,83.3236770629883,-5.14521408081055,65.1218872070313,83.0535430908203,-10.4077768325806,64.9902954101563,83.3236770629883,-10.644021987915,75.6317596435547,83.0535430908203,-16.9152126312256,75.4789352416992,83.3236770629883,-17.1383094787598,85.4963607788086,83.0535430908203,-24.364616394043,85.323600769043,83.3236770629883,-24.572660446167,94.4441604614258,83.3234939575195,-32.8872146606445,94.6315383911133,83.0534973144531,-32.6924362182617,-92.1468734741211,83.3236618041992,-35.1668243408203,-83.2564086914063,83.3236770629883,-27.0620708465576,-83.0836486816406,83.0535430908203,-27.2701148986816,-73.6502456665039,83.3236770629883,-19.8078365325928,-73.4974212646484,83.0535430908203,-20.030933380127,-63.4157257080078,83.3236770629883,-13.4708909988403,-63.2841377258301,83.0535430908203,-13.7071380615234,-52.6401710510254,83.3236770629883,-8.10530376434326,-52.5309410095215,83.0535430908203,-8.35268592834473,-41.4155082702637,83.3236770629883,-3.75684428215027, +-41.3295707702637,83.0535430908203,-4.01324701309204,-29.8375034332275,83.3236770629883,-0.462619930505753,-29.7755908966064,83.0535430908203,-0.725862979888916,-18.0049362182617,83.3236770629883,1.74927043914795,-17.9675750732422,83.0535430908203,1.48144245147705,-6.01875495910645,83.3236770629883,2.85995674133301,-6.00626611709595,83.0535430908203,2.58982419967651,6.01877450942993,83.3236770629883,2.85995578765869,6.00628566741943,83.0535430908203,2.5898232460022,18.004955291748,83.3236770629883,1.74926805496216,17.9675941467285,83.0535430908203,1.48144006729126,29.8375225067139,83.3236770629883,-0.462624222040176,29.7756099700928,83.0535430908203,-0.72586727142334,41.41552734375,83.3236770629883,-3.75685048103333,41.32958984375,83.0535430908203,-4.0132532119751,52.6401901245117,83.3236770629883,-8.10531139373779,52.5309600830078,83.0535430908203,-8.35269355773926,63.4157409667969,83.3236770629883,-13.4708986282349,63.2841529846191,83.0535430908203,-13.707145690918,73.650260925293,83.3236770629883,-19.8078441619873,73.4974365234375,83.0535430908203,-20.0309410095215,83.2564163208008,83.3236770629883,-27.0620822906494,83.0836563110352,83.0535430908203,-27.2701263427734,92.1468887329102,83.3236618041992,-35.1668395996094,-91.9624938964844,78.5937728881836,-35.3643684387207,-92.1468353271484,78.3236770629883,-35.1668281555176,-83.0836486816406,78.5938110351563,-27.2701148986816,-83.2564086914063,78.3236770629883,-27.0620708465576,-73.4974212646484,78.5938110351563,-20.030933380127,-73.6502456665039,78.3236770629883,-19.8078365325928,-63.2841377258301,78.5938110351563,-13.7071380615234,-63.4157257080078,78.3236770629883,-13.4708909988403,-52.5309410095215,78.5938110351563,-8.35268592834473,-52.6401710510254,78.3236770629883,-8.10530376434326,-41.3295707702637,78.5938110351563,-4.01324701309204,-41.4155082702637,78.3236770629883,-3.75684428215027,-29.7755908966064,78.5938110351563,-0.725862979888916,-29.8375034332275,78.3236770629883,-0.462619930505753,-17.9675750732422,78.5938110351563,1.48144245147705,-18.0049362182617,78.3236770629883,1.74927043914795, +-6.00626611709595,78.5938110351563,2.58982419967651,-6.01875495910645,78.3236770629883,2.85995674133301,6.00628566741943,78.5938110351563,2.5898232460022,6.01877450942993,78.3236770629883,2.85995578765869,17.9675941467285,78.5938110351563,1.48144006729126,18.004955291748,78.3236770629883,1.74926805496216,29.7756099700928,78.5938110351563,-0.72586727142334,29.8375225067139,78.3236770629883,-0.462624222040176,41.32958984375,78.5938110351563,-4.0132532119751,41.41552734375,78.3236770629883,-3.75685048103333,52.5309600830078,78.5938110351563,-8.35269355773926,52.6401901245117,78.3236770629883,-8.10531139373779,63.2841529846191,78.5938110351563,-13.707145690918,63.4157409667969,78.3236770629883,-13.4708986282349,73.4974365234375,78.5938110351563,-20.0309410095215,73.650260925293,78.3236770629883,-19.8078441619873,83.0836563110352,78.5938110351563,-27.2701263427734,83.2564163208008,78.3236770629883,-27.0620822906494,92.1468505859375,78.3236770629883,-35.1668395996094,91.9625091552734,78.5937728881836,-35.3643760681152,-94.4441528320313,0.000185161959961988,-32.8872032165527,-94.6315307617188,0.270181238651276,-32.6924247741699,-85.4963531494141,0.270133376121521,-24.3646087646484,-85.3235931396484,7.15255737304688e-007,-24.5726528167725,-75.6317443847656,0.270134806632996,-16.9152030944824,-75.4789199829102,2.14576721191406e-006,-17.1382999420166,-65.1218719482422,0.270135283470154,-10.4077682495117,-64.9902801513672,2.62260437011719e-006,-10.6440143585205,-54.0564117431641,0.270132899284363,-4.89782238006592,-53.9471817016602,1.19209289550781e-006,-5.14520835876465,-42.5297584533691,0.270130038261414,-0.432374000549316,-42.4438209533691,-2.62260437011719e-006,-0.688780546188354,-30.6402568817139,0.270129084587097,2.95048570632935,-30.5783443450928,1.66893005371094e-006,2.6872398853302,-18.4893436431885,0.270128130912781,5.22187423706055,-18.4519824981689,1.19209289550781e-006,4.95405578613281,-6.18068504333496,0.270128607749939,6.36244106292725,-6.16819620132446,-4.05311584472656e-006,6.09231042861938,6.18070507049561,0.270128607749939,6.3624382019043, +6.16821622848511,-4.05311584472656e-006,6.09230947494507,18.4893627166748,0.270128130912781,5.22186088562012,18.4520015716553,1.19209289550781e-006,4.95404243469238,30.6402759552002,0.270129084587097,2.95048713684082,30.5783634185791,1.66893005371094e-006,2.68724322319031,42.5297775268555,0.270130038261414,-0.43237829208374,42.4438400268555,-2.62260437011719e-006,-0.688786745071411,54.0564308166504,0.270132899284363,-4.89783096313477,53.9472007751465,1.19209289550781e-006,-5.14521408081055,65.1218872070313,0.270135283470154,-10.4077749252319,64.9902954101563,2.62260437011719e-006,-10.6440238952637,75.6317596435547,0.270134806632996,-16.9152126312256,75.4789352416992,2.14576721191406e-006,-17.1383094787598,85.4963607788086,0.270133376121521,-24.364616394043,85.323600769043,7.15255737304688e-007,-24.572660446167,94.6315383911133,0.270181208848953,-32.6924362182617,94.4441604614258,0.000185148528544232,-32.8872146606445,-94.6315307617188,4.72983837127686,-32.6924247741699,-94.4441452026367,5.00008010864258,-32.8871726989746,-85.4963531494141,4.72986698150635,-24.3646087646484,-85.3235931396484,5,-24.5726528167725,-75.6317443847656,4.72986555099487,-16.9152030944824,-75.4789199829102,5.00000095367432,-17.1382999420166,-65.1218719482422,4.72986459732056,-10.4077682495117,-64.9902801513672,5,-10.6440143585205,-54.0564117431641,4.72986698150635,-4.89782238006592,-53.9471817016602,5.00000047683716,-5.14520835876465,-42.5297584533691,4.72987079620361,-0.432374000549316,-42.4438209533691,4.99999952316284,-0.688780546188354,-30.6402568817139,4.72986268997192,2.95048570632935,-30.5783443450928,4.99999904632568,2.6872398853302,-18.4893436431885,4.72986173629761,5.22187423706055,-18.4519824981689,5.00000047683716,4.95405578613281,-6.18068504333496,4.7298641204834,6.36244106292725,-6.16819620132446,4.99999618530273,6.09231042861938,6.18070507049561,4.7298641204834,6.3624382019043,6.16821622848511,4.99999618530273,6.09230947494507,18.4893627166748,4.72986173629761,5.22186088562012,18.4520015716553,5.00000047683716,4.95404243469238, +30.6402759552002,4.72986268997192,2.95048713684082,30.5783634185791,4.99999904632568,2.68724322319031,42.5297775268555,4.72987079620361,-0.43237829208374,42.4438400268555,4.99999952316284,-0.688786745071411,54.0564308166504,4.72986698150635,-4.89783096313477,53.9472007751465,5.00000047683716,-5.14521408081055,65.1218872070313,4.72986459732056,-10.4077749252319,64.9902954101563,5,-10.6440238952637,75.6317596435547,4.72986555099487,-16.9152126312256,75.4789352416992,5.00000095367432,-17.1383094787598,85.4963607788086,4.72986698150635,-24.364616394043,85.323600769043,5,-24.572660446167,94.4441528320313,5.00008010864258,-32.8871841430664,94.6315383911133,4.72983837127686,-32.6924362182617,98.6819000244141,82.8489685058594,-36.8038597106934,98.5104904174805,83.118278503418,-37.0146865844727,98.6067047119141,78.5076522827148,-36.7290077209473,98.3990783691406,78.2377243041992,-36.903450012207,96.1720581054688,78.2377243041992,-39.1304817199707,95.9976196289063,78.5076522827148,-39.3381080627441,96.283203125,83.118278503418,-39.2419815063477,102.768844604492,81.8451538085938,-40.9448509216309,102.632362365723,82.1059417724609,-41.1906814575195,102.242713928223,77.6812515258789,-40.4191970825195,101.997947692871,77.4196395874023,-40.5565223693848,99.8251419067383,77.4196395874023,-42.7293434143066,99.6878128051758,77.6812515258789,-42.9741134643555,100.213500976563,81.8453369140625,-43.5002861022949,100.459167480469,82.1059417724609,-43.3638954162598,106.692047119141,79.4483261108398,-44.9149208068848,106.600936889648,79.6815795898438,-45.2061080932617,105.456016540527,75.7077484130859,-43.6793022155762,105.163986206055,75.474967956543,-43.7693672180176,103.037986755371,75.474967956543,-45.8953704833984,102.947929382324,75.7077484130859,-46.1874046325684,104.183609008789,79.448486328125,-47.423511505127,104.474594116211,79.6815795898438,-47.332462310791,110.188659667969,75.3871994018555,-48.4510765075684,110.137733459473,75.5740966796875,-48.7823677062988,108.269172668457,72.3770904541016,-46.5318298339844,107.93701171875,72.1915893554688,-46.5817413330078, +105.850364685059,72.1915893554688,-48.668399810791,105.800453186035,72.3770904541016,-49.000560760498,107.719757080078,75.3872909545898,-50.9201240539551,108.050880432129,75.5740966796875,-50.8692283630371,113.060264587402,69.7372741699219,-51.3546676635742,113.035797119141,69.8725051879883,-51.7123184204102,110.683090209961,67.5686340332031,-48.9775848388672,110.325202941895,67.4341430664063,-49.0017509460449,108.270378112793,67.4341430664063,-51.0565872192383,108.246208190918,67.5686264038086,-51.4144744873047,110.623336791992,69.7373123168945,-53.7917098999023,110.980880737305,69.8725051879883,-53.7672424316406,115.232009887695,62.752025604248,-53.5506629943848,115.22200012207,62.8410568237305,-53.9227294921875,112.614677429199,61.3385581970215,-50.9333610534668,112.242645263672,61.24951171875,-50.9433670043945,110.211990356445,61.24951171875,-52.9740257263184,110.201988220215,61.3385581970215,-53.346061706543,112.819313049316,62.7520446777344,-55.9634284973145,113.19132232666,62.8410606384277,-55.9534187316895,116.6875,54.7475624084473,-55.0225448608398,116.684608459473,54.7977142333984,-55.4017028808594,113.960990905762,53.9592514038086,-52.2960395812988,113.581871032715,53.9088668823242,-52.2989540100098,111.567581176758,53.908863067627,-54.3132553100586,111.564666748047,53.9592475891113,-54.6923713684082,114.291175842285,54.7475662231445,-57.4188995361328,114.670310974121,54.7977142333984,-57.4160079956055,117.418212890625,46.0975914001465,-55.7616539001465,117.418212890625,46.1137619018555,-56.1436882019043,114.650894165039,45.8449211120605,-52.9943313598633,114.26887512207,45.8286399841309,-52.9943313598633,112.262962341309,45.8286361694336,-55.0002593994141,112.262962341309,45.8449172973633,-55.3822860717773,115.030281066895,46.097599029541,-58.1496086120605,115.412300109863,46.11376953125,-58.1496086120605,117.41822052002,37.2260780334473,-55.7616577148438,117.41822052002,37.2099075317383,-56.143684387207,114.650894165039,37.4787521362305,-52.9943237304688,114.26887512207,37.4950332641602,-52.9943237304688, +112.262954711914,37.4950294494629,-55.0002632141113,112.262954711914,37.4787483215332,-55.3822822570801,115.0302734375,37.2260818481445,-58.1496047973633,115.412307739258,37.2099113464355,-58.1496047973633,116.6875,28.5761108398438,-55.0225563049316,116.684616088867,28.5259609222412,-55.401683807373,113.960968017578,29.364429473877,-52.2960205078125,113.581878662109,29.4148101806641,-52.2989387512207,111.567565917969,29.4148063659668,-54.3132629394531,111.564651489258,29.3644275665283,-54.6923522949219,114.291168212891,28.5761203765869,-57.418888092041,114.670318603516,28.5259666442871,-57.4159965515137,115.232032775879,20.5716323852539,-53.5506858825684,115.222023010254,20.4826164245605,-53.9226951599121,112.614639282227,21.9851341247559,-50.9333267211914,112.242668151855,22.0741653442383,-50.9433326721191,110.211952209473,22.074161529541,-52.9740524291992,110.201950073242,21.9851303100586,-53.3460273742676,112.819290161133,20.5716514587402,-55.9634056091309,113.191352844238,20.4826202392578,-55.9533958435059,113.060317993164,13.5863590240479,-51.3547096252441,113.035850524902,13.4511699676514,-51.7122611999512,110.683029174805,15.7550888061523,-48.9775276184082,110.325256347656,15.8895311355591,-49.0016899108887,108.270317077637,15.8895273208618,-51.0566444396973,108.246154785156,15.7550849914551,-51.4144134521484,110.62328338623,13.5864009857178,-53.7916641235352,110.980934143066,13.451171875,-53.7671928405762,110.18872833252,7.93638515472412,-48.4511451721191,110.137832641602,7.7495813369751,-48.7822723388672,108.269088745117,10.9466991424561,-46.5317420959473,107.937126159668,11.1320915222168,-46.5816230773926,105.850242614746,11.1320905685425,-48.6685104370117,105.800361633301,10.9466953277588,-49.0004730224609,107.719696044922,7.93647766113281,-50.9200592041016,108.050987243652,7.74958181381226,-50.8691368103027,106.692108154297,3.87519121170044,-44.9149932861328,106.601058959961,3.64210057258606,-45.205982208252,105.455932617188,7.61613893508911,-43.6792144775391,105.164154052734,7.8487114906311,-43.7691993713379, +103.037811279297,7.84870958328247,-45.8955345153809,102.947830200195,7.61613750457764,-46.187313079834,104.183547973633,3.87534999847412,-47.4234466552734,104.474731445313,3.64209961891174,-47.3323364257813,102.768890380859,1.47834777832031,-40.944896697998,102.632499694824,1.21774280071259,-41.1905555725098,102.24267578125,5.64266109466553,-40.4191474914551,101.998123168945,5.90404605865479,-40.5563545227051,99.8249664306641,5.90404319763184,-42.7295112609863,99.6877593994141,5.64265871047974,-42.974063873291,100.213470458984,1.47852873802185,-43.5002555847168,100.45930480957,1.21773934364319,-43.36376953125,98.6819076538086,0.47459077835083,-36.8038711547852,98.5105743408203,0.205408349633217,-37.0145950317383,98.6067047119141,4.81617784500122,-36.7290000915527,98.3991851806641,5.08596038818359,-36.9033470153809,96.1719512939453,5.08596038818359,-39.1305847167969,95.9976043701172,4.81617975234985,-39.3381004333496,96.0724716186523,0.474717617034912,-39.4133033752441,96.2832946777344,0.205409303307533,-39.2418937683105,91.7614135742188,5,-35.1809463500977,92.1520843505859,5,-35.1718978881836,91.9610443115234,4.72987031936646,-35.3629341125488,91.9610443115234,0.270131468772888,-35.3629341125488,92.1520919799805,7.15255737304688e-007,-35.1718826293945,91.7614135742188,-2.86102294921875e-006,-35.1809463500977,-98.5104751586914,83.1182708740234,-37.0146789550781,-98.681884765625,82.8489608764648,-36.8038520812988,-96.2831802368164,83.1182708740234,-39.2419776916504,-95.9975967407227,78.5076446533203,-39.3381004333496,-96.1720352172852,78.2377166748047,-39.1304740905762,-98.3990631103516,78.2377166748047,-36.9034423828125,-98.606689453125,78.5076446533203,-36.7290000915527,-102.632354736328,82.1059341430664,-41.1906814575195,-102.768836975098,81.8451461791992,-40.9448509216309,-100.459136962891,82.1059341430664,-43.363899230957,-100.213478088379,81.845329284668,-43.5002861022949,-99.6877822875977,77.6812438964844,-42.9741096496582,-99.8251113891602,77.4196319580078,-42.7293395996094,-101.997924804688,77.4196319580078,-40.5565223693848, +-102.242691040039,77.6812438964844,-40.4191970825195,-106.600921630859,79.6815719604492,-45.206111907959,-106.692031860352,79.4483184814453,-44.914924621582,-104.474555969238,79.6815719604492,-47.3324661254883,-104.183570861816,79.4484786987305,-47.4235153198242,-102.947891235352,75.7077407836914,-46.1874084472656,-103.037948608398,75.4749603271484,-45.8953742980957,-105.163955688477,75.4749603271484,-43.7693672180176,-105.455986022949,75.7077407836914,-43.6793060302734,-110.137710571289,75.5740966796875,-48.7823715209961,-110.188629150391,75.3871994018555,-48.4510803222656,-108.050842285156,75.574089050293,-50.8692359924316,-107.719718933105,75.3872833251953,-50.9201316833496,-105.800415039063,72.377082824707,-49.0005645751953,-105.850326538086,72.1915817260742,-48.6684036254883,-107.936973571777,72.1915740966797,-46.5817413330078,-108.269134521484,72.3770751953125,-46.5318298339844,-113.035766601563,69.8725051879883,-51.7123222351074,-113.060241699219,69.7372741699219,-51.3546714782715,-110.980834960938,69.8724975585938,-53.7672538757324,-110.623291015625,69.7373046875,-53.7917213439941,-108.246162414551,67.5686187744141,-51.414478302002,-108.270332336426,67.4341354370117,-51.0565910339355,-110.325157165527,67.4341354370117,-49.0017547607422,-110.683044433594,67.5686187744141,-48.9775886535645,-115.221977233887,62.8410606384277,-53.9227333068848,-115.231986999512,62.7520294189453,-53.550666809082,-113.191268920898,62.8410568237305,-55.9534339904785,-112.819259643555,62.7520408630371,-55.9634399414063,-110.201934814453,61.3385467529297,-53.346061706543,-110.211936950684,61.2495002746582,-52.9740257263184,-112.242607116699,61.2495002746582,-50.9433708190918,-112.614639282227,61.3385467529297,-50.9333648681641,-116.684585571289,54.7977142333984,-55.4017066955566,-116.687469482422,54.7475624084473,-55.0225486755371,-114.670257568359,54.7977104187012,-57.4160194396973,-114.291122436523,54.74755859375,-57.4189109802246,-111.564613342285,53.9592437744141,-54.6923713684082,-111.567527770996,53.9088592529297,-54.3132553100586, +-113.581825256348,53.9088592529297,-52.298957824707,-113.960945129395,53.9592437744141,-52.2960433959961,-117.418190002441,46.11376953125,-56.1436996459961,-117.418190002441,46.097599029541,-55.7616653442383,-115.412254333496,46.11376953125,-58.1496238708496,-115.030235290527,46.097599029541,-58.1496238708496,-112.262908935547,45.8449172973633,-55.3822898864746,-112.262908935547,45.8286361694336,-55.0002632141113,-114.268836975098,45.8286323547363,-52.9943389892578,-114.650856018066,45.844913482666,-52.9943389892578,-117.418197631836,37.2099113464355,-56.1436958312988,-117.418197631836,37.2260818481445,-55.7616691589355,-115.412261962891,37.2099113464355,-58.1496200561523,-115.030227661133,37.2260818481445,-58.1496200561523,-112.262908935547,37.4787483215332,-55.3822860717773,-112.262908935547,37.4950294494629,-55.0002670288086,-114.268829345703,37.4950294494629,-52.9943351745605,-114.650848388672,37.4787483215332,-52.9943351745605,-116.684593200684,28.5259666442871,-55.4016952514648,-116.687484741211,28.5761165618896,-55.0225677490234,-114.670272827148,28.5259685516357,-57.4160079956055,-114.291122436523,28.5761222839355,-57.4188995361328,-111.564598083496,29.3644275665283,-54.6923561096191,-111.567512512207,29.4148082733154,-54.3132705688477,-113.581840515137,29.4148063659668,-52.298942565918,-113.960929870605,29.3644275665283,-52.296028137207,-115.222007751465,20.4826183319092,-53.9227066040039,-115.23201751709,20.5716361999512,-53.5506973266602,-113.191307067871,20.4826221466064,-55.9534072875977,-112.819244384766,20.5716533660889,-55.9634170532227,-110.201904296875,21.9851322174072,-53.3460273742676,-110.211906433105,22.0741634368896,-52.9740524291992,-112.242630004883,22.0741634368896,-50.9433403015137,-112.614601135254,21.9851322174072,-50.9333343505859,-113.035835266113,13.4511709213257,-51.712272644043,-113.06029510498,13.5863609313965,-51.3547210693359,-110.980895996094,13.4511737823486,-53.767204284668,-110.623237609863,13.5864028930664,-53.791675567627,-108.246101379395,15.7550888061523,-51.4144172668457, +-108.270263671875,15.8895320892334,-51.0566482543945,-110.325218200684,15.8895330429077,-49.0016937255859,-110.682991027832,15.755090713501,-48.9775314331055,-110.137817382813,7.74958038330078,-48.7822761535645,-110.188705444336,7.93638467788696,-48.4511489868164,-108.050941467285,7.74958419799805,-50.8691444396973,-107.719650268555,7.9364800453186,-50.9200630187988,-105.800315856934,10.9467000961304,-49.0004730224609,-105.850196838379,11.1320953369141,-48.6685104370117,-107.937088012695,11.1320953369141,-46.5816230773926,-108.269050598145,10.946702003479,-46.5317420959473,-106.601051330566,3.64210081100464,-45.205982208252,-106.692100524902,3.87519216537476,-44.9149932861328,-104.47469329834,3.64210295677185,-47.3323364257813,-104.18350982666,3.87535333633423,-47.4234466552734,-102.947799682617,7.61614608764648,-46.187313079834,-103.037780761719,7.84871816635132,-45.8955345153809,-105.164123535156,7.84871673583984,-43.7691955566406,-105.455902099609,7.61614465713501,-43.6792106628418,-102.632484436035,1.21774196624756,-41.1905479431152,-102.76887512207,1.47834753990173,-40.9448890686035,-100.459274291992,1.21774077415466,-43.3637657165527,-100.213439941406,1.47853016853333,-43.5002479553223,-99.6877365112305,5.64266443252563,-42.9740600585938,-99.8249435424805,5.90404891967773,-42.7295074462891,-101.998092651367,5.90404891967773,-40.5563507080078,-102.242645263672,5.64266443252563,-40.4191436767578,-98.5105667114258,0.205408409237862,-37.0145874023438,-98.6819000244141,0.474591016769409,-36.8038635253906,-96.2832794189453,0.20541013777256,-39.241886138916,-96.0724487304688,0.474718600511551,-39.4132957458496,-95.9975891113281,4.81618356704712,-39.3380928039551,-96.1719360351563,5.08596420288086,-39.1305770874023,-98.399169921875,5.08596229553223,-36.9033393859863,-98.606689453125,4.81617975234985,-36.7289924621582,-91.7613983154297,-2.86102294921875e-006,-35.1809349060059,-92.1520767211914,7.15255737304688e-007,-35.1718711853027,-91.9610290527344,0.270131468772888,-35.362922668457,-91.9610290527344,4.72987031936646,-35.362922668457, +-92.1520690917969,5,-35.1718864440918,-91.7613983154297,5,-35.1809349060059,-89.6443176269531,4.72986793518066,-37.9042282104492,-89.4686431884766,4.99999952316284,-37.6959571838379,-89.4686431884766,-7.15255737304688e-007,-37.6959571838379,-89.6443176269531,0.270131468772888,-37.9042282104492,-75.9273986816406,5.00000190734863,-35.8880500793457,-75.754638671875,4.72986793518066,-36.0960960388184,-67.014030456543,4.72986268997192,-29.4954986572266,-67.1668548583984,4.99999523162842,-29.2724018096924,-75.7546157836914,0.270132839679718,-36.0960731506348,-75.927375793457,2.38418579101563e-007,-35.8880271911621,-67.166877746582,1.19209289550781e-006,-29.2724132537842,-67.0140533447266,0.27013236284256,-29.4955101013184,-57.7017059326172,4.72986316680908,-23.729549407959,-57.8332939147949,4.99999570846558,-23.4933013916016,-57.8332748413086,1.19209289550781e-006,-23.4932918548584,-57.7016868591309,0.270131945610046,-23.7295417785645,-47.8970718383789,4.72986841201782,-18.8474235534668,-48.0063018798828,5.00000095367432,-18.6000442504883,-48.0062866210938,1.19209289550781e-006,-18.6000385284424,-47.8970565795898,0.270132899284363,-18.8474178314209,-37.6837921142578,4.72986841201782,-14.8907814025879,-37.7697296142578,5,-14.634373664856,-37.7697296142578,2.38418579101563e-007,-14.634373664856,-37.6837921142578,0.270135760307312,-14.8907814025879,-27.1490173339844,4.7298698425293,-11.8933773040771,-27.2109298706055,4.99999952316284,-11.6301412582397,-27.2109184265137,2.14576721191406e-006,-11.6301393508911,-27.1490058898926,0.270133852958679,-11.8933753967285,-16.3826236724854,4.72986602783203,-9.8807954788208,-16.4199848175049,4.99999809265137,-9.61295604705811,-16.4199848175049,-1.66893005371094e-006,-9.61295604705811,-16.3826236724854,0.270132422447205,-9.8807954788208,-5.47642993927002,4.72986316680908,-8.87018013000488,-5.48891830444336,4.99999713897705,-8.60004711151123,-5.48892736434937,-3.57627868652344e-006,-8.60004711151123,-5.47643804550171,0.270129084587097,-8.87018013000488,5.47645711898804,4.72986316680908,-8.87017440795898, +5.48894596099854,4.99999713897705,-8.60004138946533,5.48894596099854,-3.57627868652344e-006,-8.60004138946533,5.47645711898804,0.270129084587097,-8.87017440795898,16.3826293945313,4.72986602783203,-9.88079261779785,16.4199905395508,4.99999809265137,-9.61296463012695,16.4200019836426,-1.66893005371094e-006,-9.61296463012695,16.382640838623,0.27013236284256,-9.88079261779785,27.1490230560303,4.7298698425293,-11.8933763504028,27.2109355926514,4.99999952316284,-11.6301441192627,27.2109260559082,2.14576721191406e-006,-11.6301422119141,27.1490135192871,0.270133852958679,-11.8933744430542,37.6837997436523,4.72986841201782,-14.8907861709595,37.7697372436523,5,-14.6343746185303,37.7697372436523,2.38418579101563e-007,-14.6343765258789,37.6837997436523,0.270135790109634,-14.8907880783081,47.8970909118652,4.72986841201782,-18.8474388122559,48.0063209533691,5.00000095367432,-18.6000480651855,48.0063171386719,1.19209289550781e-006,-18.6000442504883,47.897087097168,0.270132839679718,-18.8474349975586,57.7017211914063,4.72986316680908,-23.7295589447021,57.833309173584,4.99999570846558,-23.4933109283447,57.833324432373,1.19209289550781e-006,-23.4933204650879,57.7017364501953,0.270131945610046,-23.7295684814453,67.0140533447266,4.72986221313477,-29.4955139160156,67.166877746582,4.99999523162842,-29.2724170684814,67.1669082641602,1.19209289550781e-006,-29.2724323272705,67.0140838623047,0.27013224363327,-29.4955291748047,75.7546615600586,4.72986793518066,-36.0961227416992,75.9274215698242,5.00000190734863,-35.8880767822266,75.9274139404297,2.38418579101563e-007,-35.888069152832,75.7546539306641,0.27013286948204,-36.0961151123047,89.4686660766602,4.99999952316284,-37.695972442627,89.6443405151367,4.72986793518066,-37.904239654541,78.3127593994141,4.72986698150635,-38.4281349182129,78.4684677124023,4.99999952316284,-38.2045440673828,89.6443405151367,0.270131468772888,-37.904239654541,89.4686660766602,-7.15255737304688e-007,-37.695972442627,78.4684677124023,2.86102294921875e-006,-38.2045402526855,78.3127593994141,0.270130187273026,-38.4281311035156, +-78.4684448242188,4.99999952316284,-38.2045211791992,-78.3127365112305,4.72986698150635,-38.4281120300293,-78.3127365112305,0.270130276679993,-38.4281120300293,-78.4684448242188,2.86102294921875e-006,-38.2045211791992,-86.1482315063477,4.72986745834351,-40.144115447998,-86.0634536743164,4.99999904632568,-39.877613067627,-86.0634536743164,-2.38418579101563e-006,-39.877613067627,-86.1482315063477,0.270132660865784,-40.144115447998,-82.0005798339844,4.72986507415771,-40.3358726501465,-82.0604095458984,5.00000190734863,-40.062686920166,-82.0604095458984,-9.5367431640625e-007,-40.062686920166,-82.0005798339844,0.270135521888733,-40.3358726501465,82.000602722168,4.72986507415771,-40.3358917236328,82.060432434082,5.00000190734863,-40.0627059936523,82.060432434082,-9.5367431640625e-007,-40.0627021789551,82.000602722168,0.270135402679443,-40.3358879089355,86.1482543945313,4.72986745834351,-40.1441307067871,86.0634765625,4.99999904632568,-39.877628326416,86.0634765625,-2.38418579101563e-006,-39.877628326416,86.1482543945313,0.270132660865784,-40.1441307067871,-86.1897201538086,78.6237640380859,-38.8950538635254,-89.0711135864258,78.5386657714844,-43.663818359375,-80.6813583374023,78.6515045166016,-39.9868278503418,-81.7489166259766,78.5672149658203,-45.3726387023926,-74.9691314697266,78.6769180297852,-39.4104385375977,-74.385368347168,78.5933837890625,-44.8047027587891,-68.8010025024414,78.699951171875,-37.5123443603516,-67.152946472168,78.6172103881836,-42.6215476989746,-62.1925888061523,78.7206115722656,-34.5955505371094,-59.9889450073242,78.6386489868164,-39.4320182800293,-55.2234268188477,78.738899230957,-31.0213279724121,-52.7927894592285,78.6576843261719,-35.6922760009766,-47.9520111083984,78.7548217773438,-27.1502933502197,-45.506778717041,78.6742858886719,-31.763708114624,-40.4174461364746,78.7683563232422,-23.3064727783203,-38.1116790771484,78.6884078979492,-27.9482345581055,-32.651180267334,78.7794952392578,-19.7678527832031,-30.612434387207,78.7000579833984,-24.4975814819336,-24.6848545074463,78.7882232666016,-16.7653865814209, +-23.0276660919189,78.7091827392578,-21.6142272949219,-16.5554313659668,78.7945098876953,-14.4832572937012,-15.3818626403809,78.7157592773438,-19.4512329101563,-8.30865478515625,78.79833984375,-13.0575408935547,-7.69921398162842,78.7197647094727,-18.1134643554688,5.62667846679688e-005,78.7996673583984,-12.5727710723877,4.33921813964844e-005,78.7211608886719,-17.6610107421875,8.30876636505127,78.7983474731445,-13.0575523376465,7.69930076599121,78.7197647094727,-18.1134719848633,16.5555381774902,78.7945175170898,-14.4832792282104,15.3819484710693,78.7157669067383,-19.4512500762939,24.6849594116211,78.7882308959961,-16.7654190063477,23.0277481079102,78.7091827392578,-21.6142501831055,32.6512794494629,78.7795028686523,-19.7678909301758,30.6125106811523,78.700065612793,-24.4976100921631,40.417537689209,78.7683639526367,-23.3065166473389,38.1117553710938,78.6884231567383,-27.9482669830322,47.9520950317383,78.7548294067383,-27.1503391265869,45.5068435668945,78.6742935180664,-31.763744354248,55.223503112793,78.7389144897461,-31.0213756561279,52.7928504943848,78.6576995849609,-35.6923065185547,62.1926612854004,78.7206192016602,-34.5955924987793,59.9890060424805,78.6386642456055,-39.4320526123047,68.8010711669922,78.699951171875,-37.5123825073242,67.1529922485352,78.6172103881836,-42.6215782165527,74.9691848754883,78.6769256591797,-39.4104614257813,74.3853988647461,78.593391418457,-44.8047256469727,80.681396484375,78.6515045166016,-39.9868431091309,81.7489395141602,78.5672149658203,-45.3726654052734,86.1897506713867,78.6237640380859,-38.8950653076172,89.0711364746094,78.5386657714844,-43.6638374328613,83.5052795410156,78.6376342773438,-39.746654510498,85.5079727172852,78.5531158447266,-44.9173469543457,77.8048782348633,78.6648788452148,-39.8889770507813,78.0442886352539,78.5806732177734,-45.3531455993652,-83.505241394043,78.6376342773438,-39.746639251709,-85.5079574584961,78.553108215332,-44.9173164367676,-77.8048324584961,78.6648788452148,-39.8889579772949,-78.0442581176758,78.5806655883789,-45.3531188964844,-96.0659408569336,82.4715042114258,-39.4067611694336, +-96.3051452636719,82.7926864624023,-39.6429595947266,-96.2552871704102,83.0826416015625,-39.2646560668945,-95.7960052490234,82.8628234863281,-39.140983581543,-88.9592971801758,82.8310241699219,-43.4113693237305,-89.1214141845703,82.4394149780273,-43.744758605957,-92.2420654296875,83.0394058227539,-35.6400260925293,-91.6675415039063,83.0535430908203,-35.0953712463379,-91.9579315185547,82.665641784668,-35.3601036071777,-86.3481750488281,83.0048675537109,-39.2447814941406,-86.1863708496094,82.6312942504883,-38.8900871276855,-85.4578399658203,82.8163223266602,-44.6448745727539,-85.5412368774414,82.4246063232422,-45.0062370300293,-83.5786056518555,82.9887390136719,-40.1234016418457,-83.502799987793,82.6152954101563,-39.7413291931152,-81.7458190917969,82.8018112182617,-45.0963973999023,-81.7661437988281,82.4101028442383,-45.4651260375977,-78.0765914916992,82.7877502441406,-45.0784111022949,-78.0473098754883,82.3960876464844,-45.4468116760254,-80.6798706054688,82.5996398925781,-39.9813613891602,-80.6896591186523,82.9729766845703,-40.3687896728516,-77.7652053833008,82.9577102661133,-40.2693023681641,-77.80419921875,82.5841979980469,-39.883472442627,-74.456169128418,82.7745666503906,-44.5367088317871,-74.3743515014648,82.3829040527344,-44.8971061706543,-67.2528305053711,82.7497253417969,-42.3628196716309,-67.1238403320313,82.358154296875,-42.7089195251465,-74.9693222045898,82.5704193115234,-39.4050712585449,-74.8798370361328,82.9438171386719,-39.7822494506836,-68.6668548583984,82.9173355102539,-37.8703346252441,-68.8022842407227,82.5437088012695,-37.5073318481445,-60.1106643676758,82.7274780273438,-39.1824684143066,-59.9504623413086,82.3359451293945,-39.5146255493164,-62.0279884338379,82.8932571411133,-34.9401016235352,-62.1944351196289,82.5196075439453,-34.5908584594727,-52.9206848144531,82.7077331542969,-35.4450035095215,-52.7505645751953,82.3162384033203,-35.7719993591309,-55.0469627380371,82.8717727661133,-31.3598461151123,-55.2255172729492,82.4981231689453,-31.0168380737305,-45.6363525390625,82.6905288696289,-31.5163612365723, +-45.4650001525879,82.2990341186523,-31.8427257537842,-47.7754211425781,82.8529739379883,-27.488805770874,-47.9548416137695,82.4793243408203,-27.1462554931641,-38.2333526611328,82.6758728027344,-27.6959896087646,-38.0718269348145,82.2843780517578,-28.0274105072021,-40.2513771057129,82.8369293212891,-23.6503963470459,-40.4200592041016,82.4632720947266,-23.3023509979248,-30.7198219299316,82.6637954711914,-24.2381172180176,-30.5772476196289,82.2723007202148,-24.5782451629639,-32.5044784545898,82.8236923217773,-20.1206169128418,-32.6529808044434,82.4500503540039,-19.7633628845215,-23.114860534668,82.6543273925781,-21.346607208252,-22.9990940093994,82.2628326416016,-21.6969261169434,-24.5656700134277,82.8132934570313,-17.128547668457,-24.6863269805908,82.4396591186523,-16.7607917785645,-15.4435567855835,82.6475067138672,-19.1760902404785,-15.361644744873,82.2560119628906,-19.5359573364258,-16.4710693359375,82.8058013916016,-14.8562116622925,-16.5564785003662,82.4321670532227,-14.4785537719727,-7.73123073577881,82.6433563232422,-17.8329544067383,-7.68871688842773,82.2518615722656,-18.1996917724609,-8.26487064361572,82.8012390136719,-13.4375257492065,-8.30920600891113,82.4276123046875,-13.0527582168579,4.88245677843224e-005,82.6419219970703,-17.3785610198975,4.81299539387692e-005,82.2504272460938,-17.7477912902832,4.31912412750535e-005,82.7996597290039,-12.9553318023682,4.46349949925207e-005,82.426025390625,-12.5679578781128,7.7313289642334,82.6433563232422,-17.8329582214355,7.68881320953369,82.2518539428711,-18.1996994018555,8.26495552062988,82.8012390136719,-13.4375419616699,8.30929470062256,82.427604675293,-13.0527677536011,15.4436550140381,82.6475143432617,-19.176097869873,15.3617401123047,82.2560043334961,-19.5359725952148,16.4711513519287,82.8058090209961,-14.8562421798706,16.5565662384033,82.4321594238281,-14.4785709381104,23.1149597167969,82.6543273925781,-21.346622467041,22.9991893768311,82.262825012207,-21.696949005127,24.5657482147217,82.8133010864258,-17.128589630127,24.6864128112793,82.4396514892578,-16.760814666748, +30.7199192047119,82.6638031005859,-24.2381324768066,30.5773391723633,82.2722930908203,-24.5782699584961,32.5045547485352,82.8236999511719,-20.120662689209,32.6530685424805,82.4500350952148,-19.7633895874023,38.2334442138672,82.6758804321289,-27.6960124969482,38.0719146728516,82.2843704223633,-28.0274410247803,40.2514533996582,82.8369445800781,-23.6504306793213,40.4201393127441,82.4632873535156,-23.3023853302002,45.6364364624023,82.6905364990234,-31.5163955688477,45.4650840759277,82.2990417480469,-31.8427600860596,47.7754936218262,82.8529815673828,-27.488842010498,47.9549140930176,82.4793319702148,-27.1462917327881,52.9207649230957,82.7077484130859,-35.4450225830078,52.7506370544434,82.3162384033203,-35.7720260620117,55.0470275878906,82.8717803955078,-31.3598747253418,55.2255821228027,82.4981384277344,-31.0168762207031,60.110725402832,82.7274932861328,-39.1825332641602,59.9505386352539,82.3359985351563,-39.5146598815918,62.0280609130859,82.8932647705078,-34.9401092529297,62.1944923400879,82.5196533203125,-34.5908966064453,67.2528533935547,82.7497406005859,-42.3629302978516,67.1238861083984,82.3582611083984,-42.7089462280273,68.6669311523438,82.9173431396484,-37.8702926635742,68.8023300170898,82.5437927246094,-37.5073699951172,74.4561920166016,82.7745742797852,-44.5368804931641,74.3744049072266,82.3830795288086,-44.8971290588379,74.8798751831055,82.9438247680664,-39.7822723388672,74.969367980957,82.5704345703125,-39.4050941467285,78.0766220092773,82.7877502441406,-45.0785942077637,78.0473556518555,82.3962631225586,-45.4468307495117,77.765251159668,82.9577178955078,-40.2691917419434,77.8042297363281,82.5843276977539,-39.8834915161133,81.7458648681641,82.8018112182617,-45.096565246582,81.7661819458008,82.410270690918,-45.4651412963867,85.4579544067383,82.8163146972656,-44.6451568603516,85.5412826538086,82.4248886108398,-45.0062561035156,80.6799011230469,82.5995178222656,-39.9813804626465,80.6896896362305,82.9729766845703,-40.3689308166504,83.5785827636719,82.9887466430664,-40.1231880187988,83.5028228759766,82.6155319213867,-39.7413482666016, +95.796028137207,82.8628311157227,-39.1409873962402,96.2553100585938,83.082649230957,-39.2646598815918,96.3051681518555,82.7926940917969,-39.6429634094238,96.0659637451172,82.4715118408203,-39.4067687988281,88.9594345092773,82.8310241699219,-43.4115982055664,89.1195526123047,82.4396514892578,-43.745964050293,91.9579467773438,82.665641784668,-35.3601150512695,91.6675567626953,83.0535430908203,-35.0953826904297,92.2420806884766,83.0394058227539,-35.6400375366211,86.1880798339844,82.6315460205078,-38.8890686035156,86.3480987548828,83.0048751831055,-39.2445755004883 + } + PolygonVertexIndex: *4196 { + a: 0,233,-235,43,42,48,-54,1,0,234,235,-21,51,50,56,-62,2,1,20,-22,59,58,64,-70,3,2,21,-23,67,66,72,-78,4,3,22,-24,75,74,80,-86,5,4,23,-25,83,82,88,-94,6,5,24,-26,91,90,96,-102,7,6,25,-27,99,98,104,-110,8,7,26,-28,107,106,112,-118,9,8,27,-29,115,114,120,-126,10,9,28,-30,123,122,128,-134,11,10,29,-31,131,130,136,-142,12,11,30,-32,139,138,144,-150,13,12,31,-33,147,146,152,-158,14,13,32,-34,155,154,160,-166,15,14,33,-35,163,162,168,-174,16,15,34,-36,171,170,176,-182,17,16,35,-37,179,178,184,-190,18,17,36,-38,187,186,192,-198,19,18,37,-39,195,194,200,-206,203,202,208,-214,211,210,216,-222,219,218,228,-230,49,48,42,-42,53,52,44,-44,57,56,50,-50,61,60,52,-52,65,64,58,-58,69,68,60,-60,73,72,66,-66,77,76,68,-68,81,80,74,-74,85,84,76,-76,89,88,82,-82,93,92,84,-84,97,96,90,-90,101,100,92,-92,105,104,98,-98,109,108,100,-100,113,112,106,-106,117,116,108,-108,121,120,114,-114,125,124,116,-116,129,128,122,-122,133,132,124,-124,137,136,130,-130,141,140,132,-132,145,144,138,-138,149,148,140,-140,153,152,146,-146,157,156,148,-148,161,160,154,-154,165,164,156,-156,169,168,162,-162,173,172,164,-164,177,176,170,-170,181,180,172,-172,185,184,178,-178,189,188,180,-180,193,192,186,-186,197,196,188,-188,201,200,194,-194,205,204,196,-196,209,208,202,-202,204,212,226,224,-39,217,216,210,-210,212,220,230,-227,40,39,46,-46,39,42,43,-47,48,47,54,-54,47,50,51,-55,56,55,62,-62,55,58,59,-63,64,63,70,-70,63,66,67,-71,72,71,78,-78,71,74,75,-79,80,79,86,-86,79,82,83,-87,88,87,94,-94,87,90,91,-95,96,95,102,-102,95,98,99,-103,104,103,110,-110,103,106,107,-111,112,111,118,-118,111,114,115,-119,120,119,126,-126,119,122,123,-127,128,127,134,-134,127,130,131,-135,136,135,142,-142,135,138,139,-143,144,143,150,-150,143,146,147,-151,152,151,158,-158,151,154,155,-159,160,159,166,-166,159,162,163,-167,168,167,174,-174,167,170,171,-175,176,175,182,-182,175,178,179,-183,184,183,190,-190,183,186,187,-191,192,191,198,-198,191,194,195,-199,200,199,206,-206,199,202,203,-207,208,207,214,-214,207,210,211,-215,216,215,222,-222,215,218,219,-223,41,42,-40, +41,39,-41,44,45,-47,44,46,-44,49,50,-48,49,47,-49,52,53,-55,52,54,-52,57,58,-56,57,55,-57,60,61,-63,60,62,-60,65,66,-64,65,63,-65,68,69,-71,68,70,-68,73,74,-72,73,71,-73,76,77,-79,76,78,-76,81,82,-80,81,79,-81,84,85,-87,84,86,-84,89,90,-88,89,87,-89,92,93,-95,92,94,-92,97,98,-96,97,95,-97,100,101,-103,100,102,-100,105,106,-104,105,103,-105,108,109,-111,108,110,-108,113,114,-112,113,111,-113,116,117,-119,116,118,-116,121,122,-120,121,119,-121,124,125,-127,124,126,-124,129,130,-128,129,127,-129,132,133,-135,132,134,-132,137,138,-136,137,135,-137,140,141,-143,140,142,-140,145,146,-144,145,143,-145,148,149,-151,148,150,-148,153,154,-152,153,151,-153,156,157,-159,156,158,-156,161,162,-160,161,159,-161,164,165,-167,164,166,-164,169,170,-168,169,167,-169,172,173,-175,172,174,-172,177,178,-176,177,175,-177,180,181,-183,180,182,-180,185,186,-184,185,183,-185,188,189,-191,188,190,-188,193,194,-192,193,191,-193,196,197,-199,196,198,-196,201,202,-200,201,199,-201,204,205,-207,204,206,-204,209,210,-208,209,207,-209,212,213,-215,212,214,-212,217,218,-216,217,215,-217,220,221,-223,220,222,-220,196,204,38,-38,213,212,204,-204,221,220,212,-212,188,196,37,-37,180,188,36,-36,172,180,35,-35,164,172,34,-34,156,164,33,-33,148,156,32,-32,140,148,31,-31,132,140,30,-30,124,132,29,-29,116,124,28,-28,108,116,27,-27,100,108,26,-26,92,100,25,-25,84,92,24,-24,76,84,23,-23,68,76,22,-22,60,68,21,-21,52,60,20,235,-241,44,52,240,-238,41,242,-237,49,41,236,233,-1,57,49,0,-2,65,57,1,-3,73,65,2,-4,81,73,3,-5,89,81,4,-6,97,89,5,-7,105,97,6,-8,113,105,7,-9,121,113,8,-10,129,121,9,-11,137,129,10,-12,145,137,11,-13,153,145,12,-14,161,153,13,-15,169,161,14,-16,177,169,15,-17,185,177,16,-18,193,185,17,-19,201,193,18,-20,209,201,19,223,-226,217,209,225,-228,224,223,19,-39,232,228,218,-218,231,230,-221,229,231,220,-220,227,232,-218,239,238,40,-46,238,242,41,-41,241,239,45,-45,237,241,-45,275,276,628,-628,276,275,278,-278,277,278,280,-280,279,280,282,-282,281,282,284,-284,283,284,286,-286,285,286,288,-288,287,288,290,-290,289,290,292,-292,291,292,294,-294,293, +294,296,-296,295,296,298,-298,297,298,300,-300,299,300,302,-302,301,302,304,-304,303,304,306,-306,305,306,308,-308,307,308,310,-310,309,310,492,-492,311,312,622,-624,312,311,313,-315,314,313,315,-317,316,315,317,-319,318,317,319,-321,320,319,321,-323,322,321,323,-325,324,323,325,-327,326,325,327,-329,328,327,329,-331,330,329,331,-333,332,331,333,-335,334,333,335,-337,336,335,337,-339,338,337,339,-341,340,339,341,-343,342,341,343,-345,344,343,346,-346,345,346,489,-491,347,915,912,911,-625,349,348,350,-352,351,350,352,-354,353,352,354,-356,355,354,356,-358,357,356,358,-360,359,358,360,-362,361,360,362,-364,363,362,364,-366,365,364,366,-368,367,366,368,-370,369,368,370,-372,371,370,372,-374,373,372,374,-376,375,374,376,-378,377,376,378,-380,379,378,380,-1036,381,382,626,-626,382,381,383,-385,384,383,385,-387,386,385,387,-389,388,387,389,-391,390,389,391,-393,392,391,393,-395,394,393,395,-397,396,395,397,-399,398,397,399,-401,400,399,401,-403,402,401,403,-405,404,403,405,-407,406,405,407,-409,408,407,409,-411,410,409,411,-413,412,411,413,-415,414,413,416,-416,415,416,494,-494,417,418,742,-742,418,417,420,-420,419,420,422,-422,421,422,424,-424,423,424,426,-426,425,426,428,-428,427,428,430,-430,429,430,432,-432,431,432,434,-434,433,434,436,-436,435,436,438,-438,437,438,440,-440,439,440,442,-442,441,442,444,-444,443,444,446,-446,445,446,448,-448,447,448,450,-450,449,450,452,-452,451,452,609,-609,453,454,747,-749,454,453,455,-457,456,455,457,-459,458,457,459,-461,460,459,461,-463,462,461,463,-465,464,463,465,-467,466,465,467,-469,468,467,469,-471,470,469,471,-473,472,471,473,-475,474,473,475,-477,476,475,477,-479,478,477,479,-481,480,479,481,-483,482,481,483,-485,484,483,485,-487,486,485,488,-488,487,488,610,-612,490,489,496,-498,491,492,499,-499,493,494,501,-501,497,496,504,-506,498,499,507,-507,500,501,509,-509,502,503,511,-511,505,504,512,-514,506,507,515,-515,508,509,517,-517,510,511,519,-519,513,512,520,-522,514,515,523,-523,516,517,525,-525,518,519,527,-527,521,520,528,-530,522,523,531,-531,524,525,533,-533,526,527, +535,-535,529,528,536,-538,530,531,539,-539,532,533,541,-541,534,535,543,-543,537,536,544,-546,538,539,547,-547,540,541,549,-549,542,543,551,-551,545,544,552,-554,546,547,555,-555,548,549,557,-557,550,551,559,-559,553,552,560,-562,554,555,563,-563,556,557,565,-565,558,559,567,-567,561,560,568,-570,562,563,571,-571,564,565,573,-573,566,567,575,-575,569,568,576,-578,570,571,579,-579,572,573,581,-581,574,575,583,-583,577,576,584,-586,578,579,587,-587,580,581,589,-589,582,583,591,-591,585,584,592,-594,586,587,595,-595,588,589,597,-597,590,591,599,-599,593,592,600,-602,594,595,603,-603,596,597,605,-605,598,599,607,-607,601,600,608,-610,602,603,611,-611,604,605,613,-613,606,607,615,-615,612,613,618,-618,614,615,620,-620,616,618,824,-824,619,621,828,-828,623,622,629,-631,624,911,910,632,-632,625,626,634,-634,627,628,636,-636,630,629,637,-639,631,632,640,-640,633,634,642,-642,635,636,644,-644,638,637,645,-647,639,640,648,-648,641,642,650,-650,643,644,652,-652,646,645,653,-655,647,648,656,-656,649,650,658,-658,651,652,660,-660,654,653,661,-663,655,656,664,-664,657,658,666,-666,659,660,668,-668,662,661,669,-671,663,664,672,-672,665,666,674,-674,667,668,676,-676,670,669,677,-679,671,672,680,-680,673,674,682,-682,675,676,684,-684,678,677,685,-687,679,680,688,-688,681,682,690,-690,683,684,692,-692,686,685,693,-695,687,688,696,-696,689,690,698,-698,691,692,700,-700,694,693,701,-703,695,696,704,-704,697,698,706,-706,699,700,708,-708,702,701,709,-711,703,704,712,-712,705,706,714,-714,707,708,716,-716,710,709,717,-719,711,712,720,-720,713,714,722,-722,715,716,724,-724,718,717,725,-727,719,720,728,-728,721,722,730,-730,723,724,732,-732,726,725,733,-735,727,728,736,-736,729,730,738,-738,731,732,740,-740,734,733,741,-743,735,736,744,-744,737,738,746,-746,739,740,748,-748,743,744,751,-751,745,746,753,-753,749,751,758,-758,752,754,756,-756,755,756,836,-836,757,758,838,-838,759,760,832,-832,760,759,762,-762,761,762,768,-768,763,764,834,-834,764,763,766,-766,765,766,770,-770,767,768,772,-772,769,770,774,-774,771,772,776,-776,773,774,778,-778, +775,776,780,-780,777,778,782,-782,779,780,784,-784,781,782,786,-786,783,784,788,-788,785,786,790,-790,787,788,792,-792,789,790,794,-794,791,792,796,-796,793,794,798,-798,795,796,800,-800,797,798,802,-802,799,800,804,-804,801,802,806,-806,803,804,808,-808,805,806,810,-810,807,808,812,-812,809,810,814,-814,811,812,816,-816,813,814,818,-818,815,816,820,-820,817,818,822,-822,819,820,826,-826,821,822,830,-830,823,824,847,-849,825,826,844,-844,827,828,849,-851,829,830,846,-846,831,832,839,-841,833,834,841,-843,835,836,840,-840,837,838,842,-842,843,844,848,-848,845,846,850,-850,276,277,313,-312,277,279,315,-314,279,281,317,-316,281,283,319,-318,283,285,321,-320,285,287,323,-322,287,289,325,-324,289,291,327,-326,291,293,329,-328,293,295,331,-330,295,297,333,-332,297,299,335,-334,299,301,337,-336,301,303,339,-338,303,305,341,-340,305,307,343,-342,307,309,346,-344,312,314,348,-348,314,316,350,-349,316,318,352,-351,318,320,354,-353,320,322,356,-355,322,324,358,-357,324,326,360,-359,326,328,362,-361,328,330,364,-363,330,332,366,-365,332,334,368,-367,334,336,370,-369,336,338,372,-371,338,340,374,-373,340,342,376,-375,342,344,378,-377,344,345,380,-379,349,351,385,-384,351,353,387,-386,353,355,389,-388,355,357,391,-390,357,359,393,-392,359,361,395,-394,361,363,397,-396,363,365,399,-398,365,367,401,-400,367,369,403,-402,369,371,405,-404,371,373,407,-406,373,375,409,-408,375,377,411,-410,377,379,413,-412,379,1035,1034,416,-414,382,384,278,-276,384,386,280,-279,386,388,282,-281,388,390,284,-283,390,392,286,-285,392,394,288,-287,394,396,290,-289,396,398,292,-291,398,400,294,-293,400,402,296,-295,402,404,298,-297,404,406,300,-299,406,408,302,-301,408,410,304,-303,410,412,306,-305,412,414,308,-307,414,415,310,-309,418,419,455,-454,419,421,457,-456,421,423,459,-458,423,425,461,-460,425,427,463,-462,427,429,465,-464,429,431,467,-466,431,433,469,-468,433,435,471,-470,435,437,473,-472,437,439,475,-474,439,441,477,-476,441,443,479,-478,443,445,481,-480,445,447,483,-482,447,449,485,-484,449,451,488,-486,454,456,243,754,-754,456,458,244,-244, +458,460,245,-245,460,462,246,-246,462,464,247,-247,464,466,248,-248,466,468,249,-249,468,470,250,-250,470,472,251,-251,472,474,252,-252,474,476,253,-253,476,478,254,-254,478,480,255,-255,480,482,256,-256,482,484,257,-257,484,486,258,-258,486,487,617,616,-259,833,832,760,-764,760,761,766,-764,761,767,770,-767,767,771,774,-771,771,775,778,-775,775,779,782,-779,779,783,786,-783,783,787,790,-787,787,791,794,-791,791,795,798,-795,795,799,802,-799,799,803,806,-803,803,807,810,-807,807,811,814,-811,811,815,818,-815,815,819,822,-819,819,825,830,-823,259,260,422,-421,260,261,424,-423,261,262,426,-425,262,263,428,-427,263,264,430,-429,264,265,432,-431,265,266,434,-433,266,267,436,-435,267,268,438,-437,268,269,440,-439,269,270,442,-441,270,271,444,-443,271,272,446,-445,272,273,448,-447,273,274,450,-449,274,621,620,452,-451,608,610,488,-452,611,612,617,-488,613,614,619,-619,615,609,452,-621,346,309,491,-490,310,415,493,-493,380,345,490,-496,489,491,498,-497,492,493,500,-500,494,1031,1030,502,-502,495,490,497,-504,496,498,506,-505,499,500,508,-508,501,502,510,-510,503,497,505,-512,504,506,514,-513,507,508,516,-516,509,510,518,-518,511,505,513,-520,512,514,522,-521,515,516,524,-524,517,518,526,-526,519,513,521,-528,520,522,530,-529,523,524,532,-532,525,526,534,-534,527,521,529,-536,528,530,538,-537,531,532,540,-540,533,534,542,-542,535,529,537,-544,536,538,546,-545,539,540,548,-548,541,542,550,-550,543,537,545,-552,544,546,554,-553,547,548,556,-556,549,550,558,-558,551,545,553,-560,552,554,562,-561,555,556,564,-564,557,558,566,-566,559,553,561,-568,560,562,570,-569,563,564,572,-572,565,566,574,-574,567,561,569,-576,568,570,578,-577,571,572,580,-580,573,574,582,-582,575,569,577,-584,576,578,586,-585,579,580,588,-588,581,582,590,-590,583,577,585,-592,584,586,594,-593,587,588,596,-596,589,590,598,-598,591,585,593,-600,592,594,602,-601,595,596,604,-604,597,598,606,-606,599,593,601,-608,600,602,610,-609,603,604,612,-612,605,606,614,-614,607,601,609,-616,741,743,750,-418,744,745,752,-752,746,747,454,-754,748,742,418,-454,312,347,624, +-623,382,275,627,-627,276,311,623,-629,622,624,631,-630,626,627,635,-635,628,623,630,-637,629,631,639,-638,632,633,641,-641,634,635,643,-643,636,630,638,-645,637,639,647,-646,640,641,649,-649,642,643,651,-651,644,638,646,-653,645,647,655,-654,648,649,657,-657,650,651,659,-659,652,646,654,-661,653,655,663,-662,656,657,665,-665,658,659,667,-667,660,654,662,-669,661,663,671,-670,664,665,673,-673,666,667,675,-675,668,662,670,-677,669,671,679,-678,672,673,681,-681,674,675,683,-683,676,670,678,-685,677,679,687,-686,680,681,689,-689,682,683,691,-691,684,678,686,-693,685,687,695,-694,688,689,697,-697,690,691,699,-699,692,686,694,-701,693,695,703,-702,696,697,705,-705,698,699,707,-707,700,694,702,-709,701,703,711,-710,704,705,713,-713,706,707,715,-715,708,702,710,-717,709,711,719,-718,712,713,721,-721,714,715,723,-723,716,710,718,-725,717,719,727,-726,720,721,729,-729,722,723,731,-731,724,718,726,-733,725,727,735,-734,728,729,737,-737,730,731,739,-739,732,726,734,-741,733,735,743,-742,736,737,745,-745,738,739,747,-747,740,734,742,-749,758,751,752,-756,243,244,762,-760,260,259,764,-766,244,245,768,-763,261,260,765,-770,245,246,772,-769,262,261,769,-774,246,247,776,-773,263,262,773,-778,247,248,780,-777,264,263,777,-782,248,249,784,-781,265,264,781,-786,249,250,788,-785,266,265,785,-790,250,251,792,-789,267,266,789,-794,251,252,796,-793,268,267,793,-798,252,253,800,-797,269,268,797,-802,253,254,804,-801,270,269,801,-806,254,255,808,-805,271,270,805,-810,255,256,812,-809,272,271,809,-814,256,257,816,-813,273,272,813,-818,257,258,820,-817,274,273,817,-822,824,618,619,-828,755,835,838,-759,835,839,842,-839,839,832,833,-843,825,843,846,-831,843,847,850,-847,847,824,827,-851,840,836,756,754,243,759,-832,837,841,834,764,259,749,-758,848,844,826,820,258,616,-824,828,621,274,821,829,845,-850,750,749,259,420,-418,616,617,-619,619,620,-622,749,750,-752,752,753,-755,899,900,494,-417,381,625,852,-852,905,906,854,-854,907,908,856,-856,855,856,858,-858,857,858,860,-860,859,860,862,-862,861,862,864,-864,863,864,866,-866,865,866,868,-868,867, +868,870,-870,869,870,872,-872,871,872,874,-874,873,874,876,-876,875,876,878,-878,877,878,880,-880,879,880,882,-882,881,882,884,-884,883,884,886,-886,885,886,888,-888,887,888,890,-890,889,890,892,-892,891,892,894,-894,893,894,896,-896,903,904,898,-898,901,902,900,-900,897,898,902,-902,895,896,904,-904,851,852,906,-906,853,854,908,-908,910,909,625,633,-633,916,347,348,-350,917,916,349,383,-382,1030,1029,495,503,-503,1036,380,495,1029,-1029,909,912,913,-915,914,913,920,-922,915,917,919,-919,918,919,923,-923,921,920,924,-926,922,923,928,-930,925,924,926,-928,927,926,932,-934,929,928,931,-931,930,931,936,-938,933,932,934,-936,935,934,940,-942,937,936,939,-939,938,939,943,-943,941,940,944,-946,942,943,947,-947,945,944,948,-950,946,947,951,-951,949,948,952,-954,950,951,955,-955,953,952,956,-958,954,955,959,-959,957,956,960,-962,958,959,963,-963,961,960,964,-966,962,963,967,-967,965,964,968,-970,966,967,971,-971,969,968,972,-974,970,971,975,-975,973,972,976,-978,974,975,979,-979,977,976,980,-982,978,979,983,-983,981,980,984,-986,982,983,987,-987,985,984,988,-990,986,987,991,-991,989,988,992,-994,990,991,995,-995,993,992,996,-998,994,995,999,-999,997,996,1000,-1002,998,999,1003,-1003,1001,1000,1004,-1006,1002,1003,1007,-1007,1005,1004,1008,-1010,1006,1007,1011,-1011,1009,1008,1012,-1014,1010,1011,1015,-1015,1013,1012,1016,-1018,1014,1015,1019,-1019,1017,1016,1020,-1022,1018,1019,1024,-1026,1021,1020,1022,-1024,1023,1022,1032,-1034,1025,1024,1027,-1027,1026,1027,1037,-1039,1028,1031,1033,-1033,1034,1036,1038,-1038,1032,1038,1036,-1029,1037,899,416,-1035,900,1033,1031,-495,913,912,915,-919,919,917,381,-852,625,909,914,-853,920,922,929,-925,923,905,853,-929,906,921,925,-855,926,930,937,-933,931,907,855,-937,908,927,933,-857,932,937,938,-935,936,855,857,-940,856,933,935,-859,934,938,942,-941,939,857,859,-944,858,935,941,-861,940,942,946,-945,943,859,861,-948,860,941,945,-863,944,946,950,-949,947,861,863,-952,862,945,949,-865,948,950,954,-953,951,863,865,-956,864,949,953,-867,952,954,958,-957,955,865,867,-960,866,953,957,-869,956, +958,962,-961,959,867,869,-964,868,957,961,-871,960,962,966,-965,963,869,871,-968,870,961,965,-873,964,966,970,-969,967,871,873,-972,872,965,969,-875,968,970,974,-973,971,873,875,-976,874,969,973,-877,972,974,978,-977,975,875,877,-980,876,973,977,-879,976,978,982,-981,979,877,879,-984,878,977,981,-881,980,982,986,-985,983,879,881,-988,880,981,985,-883,984,986,990,-989,987,881,883,-992,882,985,989,-885,988,990,994,-993,991,883,885,-996,884,989,993,-887,992,994,998,-997,995,885,887,-1000,886,993,997,-889,996,998,1002,-1001,999,887,889,-1004,888,997,1001,-891,1000,1002,1006,-1005,1003,889,891,-1008,890,1001,1005,-893,1004,1006,1010,-1009,1007,891,893,-1012,892,1005,1009,-895,1008,1010,1014,-1013,1011,893,895,-1016,894,1009,1013,-897,1016,1018,1025,-1021,1019,903,897,-1025,904,1017,1021,-899,1022,1026,1038,-1033,1027,901,899,-1038,902,1023,1033,-901,1020,1025,1026,-1023,1024,897,901,-1028,898,1021,1023,-903,1012,1014,1018,-1017,1015,895,903,-1020,896,1013,1017,-905,913,918,922,-921,919,851,905,-924,852,914,921,-907,924,929,930,-927,928,853,907,-932,854,925,927,-909,909,910,911,-913,915,347,916,-918,1028,1029,1030,-1032,1034,1035,380,-1037 + } + Edges: *2108 { + a: 0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,26,27,28,29,30,31,32,34,35,36,37,38,39,40,42,43,44,45,46,47,48,50,51,52,53,54,55,56,58,59,60,61,62,63,64,66,67,68,69,70,71,72,74,75,76,77,78,79,80,82,83,84,85,86,87,88,90,91,92,93,94,95,96,98,99,100,101,102,103,104,106,107,108,109,110,111,112,114,115,116,117,118,119,120,122,123,124,125,126,127,128,130,131,132,133,134,135,136,138,139,140,141,142,143,144,146,147,148,149,150,151,152,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,180,182,183,184,185,186,188,190,191,192,193,194,196,198,199,200,201,202,204,206,207,208,209,210,212,214,215,216,217,218,220,222,223,224,225,226,228,230,231,232,233,234,236,238,239,240,241,242,244,246,247,248,249,250,252,254,255,256,257,258,260,262,263,264,265,266,268,270,271,272,273,274,276,278,279,280,281,282,284,286,287,288,289,290,292,294,295,296,297,298,300,302,303,304,305,306,308,310,311,312,313,314,316,318,319,320,321,322,324,326,327,328,329,330,332,334,335,336,337,338,339,340,341,343,344,345,346,347,349,350,351,352,353,355,357,358,359,361,363,365,366,367,369,371,373,374,375,377,379,381,382,383,385,387,389,390,391,393,395,397,398,399,401,403,405,406,407,409,411,413,414,415,417,419,421,422,423,425,427,429,430,431,433,435,437,438,439,441,443,445,446,447,449,451,453,454,455,457,459,461,462,463,465,467,469,470,471,473,475,477,478,479,481,483,485,486,487,489,491,493,494,495,497,499,501,502,503,505,507,509,510,511,513,515,517,518,519,521,523,525,526,527,529,531,535,538,539,541,547,553,559,565,571,577,583,589,595,601,607,613,619,625,631,637,643,649,655,661,667,673,679,685,691,697,703,709,715,721,727,733,739,745,751,757,763,769,775,781,784,787,791,793,796,797,799,803,805,808,812,824,828,832,836,840,844,848,852,856,860,864,868,872,876,880,884,888,892,893,896,897,898,899,900,903,905,909,913,917,921,925,929,933,937,941,945,949,953,957,961,965,969,973,977,981,984,985,986,989,990,991,995,998,999,1001,1002,1006,1009,1010,1012,1013,1017,1020,1021,1024,1025,1026,1027,1029,1030, +1031,1033,1034,1035,1037,1038,1039,1041,1042,1043,1045,1046,1047,1049,1050,1051,1053,1054,1055,1057,1058,1059,1061,1062,1063,1065,1066,1067,1069,1070,1071,1073,1074,1075,1077,1078,1079,1081,1082,1083,1085,1086,1087,1089,1090,1091,1093,1094,1095,1097,1098,1099,1100,1101,1102,1103,1105,1106,1107,1109,1110,1111,1113,1114,1115,1117,1118,1119,1121,1122,1123,1125,1126,1127,1129,1130,1131,1133,1134,1135,1137,1138,1139,1141,1142,1143,1145,1146,1147,1149,1150,1151,1153,1154,1155,1157,1158,1159,1161,1162,1163,1165,1166,1167,1169,1170,1171,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1186,1187,1188,1190,1191,1192,1194,1195,1196,1198,1199,1200,1202,1203,1204,1206,1207,1208,1210,1211,1212,1214,1215,1216,1218,1219,1220,1222,1223,1224,1226,1227,1228,1230,1231,1232,1234,1235,1236,1238,1239,1240,1242,1243,1244,1245,1246,1247,1248,1250,1251,1252,1254,1255,1256,1258,1259,1260,1262,1263,1264,1266,1267,1268,1270,1271,1272,1274,1275,1276,1278,1279,1280,1282,1283,1284,1286,1287,1288,1290,1291,1292,1294,1295,1296,1298,1299,1300,1302,1303,1304,1306,1307,1308,1310,1311,1312,1314,1315,1316,1318,1319,1320,1321,1322,1323,1324,1326,1327,1328,1330,1331,1332,1334,1335,1336,1338,1339,1340,1342,1343,1344,1346,1347,1348,1350,1351,1352,1354,1355,1356,1358,1359,1360,1362,1363,1364,1366,1367,1368,1370,1371,1372,1374,1375,1376,1378,1379,1380,1382,1383,1384,1386,1387,1388,1390,1391,1392,1394,1395,1396,1397,1398,1399,1400,1402,1403,1404,1406,1407,1408,1410,1411,1412,1414,1415,1416,1418,1419,1420,1422,1423,1424,1426,1427,1428,1430,1431,1432,1434,1435,1436,1438,1439,1440,1442,1443,1444,1446,1447,1448,1450,1451,1452,1454,1455,1456,1458,1459,1460,1462,1463,1464,1466,1467,1468,1470,1471,1472,1474,1475,1476,1478,1479,1480,1482,1483,1484,1486,1487,1488,1490,1491,1492,1494,1495,1496,1497,1498,1499,1500,1502,1503,1504,1506,1507,1508,1510,1511,1512,1514,1515,1516,1518,1519,1520,1522,1523,1524,1526,1527,1528,1530,1531,1532,1534,1535,1536,1538,1539,1540,1542,1543,1544,1546,1547,1548,1550,1551,1552,1554,1555,1556,1558,1559,1560,1562,1563,1564,1566,1567, +1568,1570,1571,1572,1574,1575,1576,1578,1579,1580,1582,1583,1584,1586,1587,1588,1590,1591,1592,1594,1595,1596,1598,1599,1600,1602,1603,1604,1606,1607,1608,1610,1611,1612,1614,1615,1616,1618,1619,1620,1622,1623,1624,1626,1627,1628,1630,1631,1632,1634,1635,1636,1638,1639,1640,1642,1643,1644,1646,1647,1648,1650,1651,1652,1654,1655,1656,1658,1659,1660,1662,1663,1664,1666,1667,1668,1670,1671,1672,1674,1675,1676,1678,1679,1680,1682,1683,1684,1686,1687,1688,1690,1691,1692,1694,1696,1698,1700,1702,1703,1704,1706,1707,1708,1710,1711,1712,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1726,1727,1728,1730,1731,1732,1733,1735,1736,1737,1739,1740,1741,1743,1744,1745,1747,1748,1749,1751,1752,1753,1755,1756,1757,1759,1760,1761,1763,1764,1765,1767,1768,1769,1771,1772,1773,1775,1776,1777,1779,1780,1781,1783,1784,1785,1787,1788,1789,1791,1792,1793,1795,1796,1797,1799,1800,1801,1803,1804,1805,1807,1808,1809,1811,1812,1813,1815,1816,1817,1819,1820,1821,1823,1824,1825,1827,1828,1829,1831,1832,1833,1835,1836,1837,1839,1840,1841,1843,1844,1845,1847,1848,1849,1851,1852,1853,1855,1856,1857,1859,1860,1861,1863,1864,1865,1867,1868,1869,1871,1872,1873,1875,1876,1877,1879,1880,1881,1883,1884,1885,1887,1888,1889,1891,1892,1893,1895,1896,1897,1899,1900,1901,1903,1904,1905,1907,1908,1909,1911,1912,1913,1915,1916,1917,1919,1920,1921,1923,1924,1925,1927,1928,1929,1931,1932,1933,1935,1936,1937,1939,1940,1941,1943,1944,1945,1947,1948,1949,1951,1953,1955,1956,1957,1959,1960,1961,1963,1965,1967,1968,1969,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1983,1984,1985,1987,1988,1989,1990,1991,1992,1993,1995,1996,1997,1999,2000,2001,2002,2003,2004,2005,2007,2008,2009,2011,2012,2013,2015,2016,2017,2019,2020,2021,2023,2024,2025,2027,2028,2029,2031,2032,2033,2035,2036,2037,2039,2040,2041,2043,2044,2045,2047,2048,2049,2051,2052,2053,2055,2056,2057,2059,2060,2061,2063,2064,2065,2067,2068,2069,2071,2072,2073,2075,2076,2077,2079,2080,2081,2083,2084,2085,2087,2088,2089,2091,2092,2093,2095,2096,2097,2099,2100,2101,2103,2104,2105,2107,2108,2109,2111, +2112,2113,2115,2116,2117,2119,2120,2121,2123,2124,2125,2127,2128,2129,2131,2132,2133,2135,2136,2137,2139,2140,2141,2143,2144,2145,2147,2148,2149,2151,2153,2155,2157,2159,2161,2163,2165,2167,2169,2171,2175,2179,2183,2187,2191,2195,2199,2203,2207,2211,2215,2219,2223,2227,2231,2235,2236,2237,2239,2243,2247,2251,2255,2259,2263,2267,2271,2275,2279,2283,2287,2291,2295,2299,2303,2305,2307,2311,2315,2319,2323,2327,2331,2335,2339,2343,2347,2351,2355,2359,2363,2364,2368,2370,2372,2376,2380,2384,2388,2392,2396,2400,2404,2408,2412,2416,2420,2424,2428,2432,2436,2438,2440,2444,2448,2452,2456,2460,2464,2468,2472,2476,2480,2484,2488,2492,2496,2500,2504,2505,2506,2507,2509,2510,2513,2514,2517,2518,2521,2522,2525,2526,2529,2530,2533,2534,2537,2538,2541,2542,2545,2546,2549,2550,2553,2554,2557,2558,2561,2562,2565,2566,2569,2570,2571,2573,2575,2578,2582,2586,2590,2594,2598,2602,2606,2610,2614,2618,2622,2626,2630,2634,2638,2641,2642,2644,2645,2646,2649,2650,2653,2654,2657,2658,2661,2662,2665,2666,2669,2670,2673,2674,2677,2678,2681,2682,2685,2686,2689,2690,2693,2694,2697,2698,2701,2702,2703,2706,2710,2714,2716,2718,2724,2728,2732,2733,2736,2740,2742,2743,2744,2745,2749,2750,2753,2757,2761,2765,2769,2773,2777,2781,2785,2789,2793,2797,2801,2805,2809,2813,2817,2821,2825,2829,2833,2837,2841,2845,2849,2853,2857,2861,2865,2869,2873,2877,2881,2885,2889,2893,2897,2901,2905,2909,2913,2917,2921,2925,2929,2933,2937,2941,2945,2949,2953,2957,2975,2977,2979,2981,2983,2987,2993,2997,3001,3005,3009,3013,3017,3019,3021,3025,3029,3033,3037,3041,3045,3049,3053,3057,3061,3065,3069,3073,3077,3081,3085,3089,3093,3097,3101,3105,3109,3113,3117,3121,3125,3129,3133,3137,3141,3145,3149,3153,3157,3161,3165,3169,3173,3177,3181,3185,3189,3193,3197,3201,3205,3209,3213,3217,3221,3242,3244,3246,3248,3250,3252,3258,3260,3266,3268,3274,3276,3282,3284,3290,3292,3298,3300,3306,3308,3314,3316,3322,3324,3330,3332,3338,3340,3346,3348,3354,3356,3362,3366,3368,3372,3380,3384,3402,3419,3436,3437,3439,3441,3442,3443,3444,3445,3446,3447,3448,3449,3450,3451,3453,3454,3455,3457,3458, +3459,3461,3462,3463,3465,3466,3467,3469,3470,3471,3473,3474,3475,3477,3478,3479,3481,3482,3483,3485,3486,3487,3489,3490,3491,3493,3494,3495,3497,3498,3499,3501,3502,3503,3505,3506,3507,3509,3510,3511,3513,3514,3515,3517,3518,3519,3521,3522,3523,3525,3526,3527,3529,3530,3531,3532,3533,3534,3535,3536,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3556,3557,3561,3564,3565,3569,3570,3571,3575,3578,3579,3580,3581,3582,3583,3585,3586,3587,3588,3589,3590,3591,3593,3594,3595,3597,3598,3599,3601,3602,3603,3605,3606,3607,3609,3610,3611,3613,3614,3615,3617,3618,3619,3621,3622,3623,3625,3626,3627,3629,3630,3631,3633,3634,3635,3637,3638,3639,3641,3642,3643,3645,3646,3647,3649,3650,3651,3653,3654,3655,3657,3658,3659,3661,3662,3663,3665,3666,3667,3669,3670,3671,3673,3674,3675,3677,3678,3679,3681,3682,3683,3685,3686,3687,3689,3690,3691,3693,3694,3695,3697,3698,3699,3701,3702,3703,3705,3706,3707,3709,3710,3711,3713,3714,3715,3717,3718,3719,3721,3722,3723,3725,3726,3727,3729,3730,3731,3733,3734,3735,3737,3738,3739,3741,3742,3743,3745,3746,3747,3749,3750,3751,3753,3754,3755,3757,3758,3759,3761,3762,3763,3765,3766,3767,3769,3770,3771,3773,3774,3775,3777,3778,3779,3781,3782,3783,3785,3786,3787,3789,3790,3791,3793,3794,3795,3797,3798,3799,3801,3802,3803,3805,3806,3807,3809,3810,3811,3812,3813,3815,3816,3817,3819,3820,3824,3828,3835,3839,3842,3844,3846,3848,3850,3852,3854,3856,3858,3860,3862,3864,3866,3870,3874,3878,3882,3886,3890,3894,3898,3902,3906,3910,3914,3918,3922,3926,3930,3934,3938,3942,3946,3950,3954,3958,3962,3966,3970,3974,3978,3982,3986,3990,3994,3998,4002,4006,4010,4014,4018,4022,4026,4030,4034,4038,4042,4046,4050,4054,4058,4062,4066,4070,4074,4078,4082,4086,4090,4094,4098,4102,4106,4108,4110,4112,4114,4116,4118,4120,4124,4128 + } + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 102 + Name: "" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + Normals: *12588 { + a: 0,0.999999940395355,-6.77275579619163e-007,0,0.999999940395355,-0.000209073783480562,0,0.999999940395355,-6.3660735349913e-007,-0.123129539191723,-0.961523473262787,-0.245584085583687,-0.134296879172325,-0.954053103923798,-0.267855852842331,-0.123066082596779,-0.961489975452423,-0.245747268199921,-0.134247705340385,-0.954042494297028,-0.267918437719345,0,0.999999940395355,-9.82406277216796e-007,0,0.999999940395355,-6.77275579619163e-007,0,0.999999940395355,-6.3660735349913e-007,0,0.999999940395355,-6.2574753201261e-007,0,0.999999940395355,-8.56359406498086e-007,0.126252546906471,-0.962023437023163,0.242014437913895,0.137900203466415,-0.954665720462799,0.263812065124512,0.127787038683891,-0.961508214473724,0.243253946304321,0.13794581592083,-0.954899609088898,0.262940555810928,0,0.999999940395355,-4.86190174342482e-007,0,0.999999940395355,-9.82406277216796e-007,0,0.999999940395355,-8.56359406498086e-007,0,0.999999940395355,-7.41921894586994e-007,-0.131450578570366,-0.964159369468689,-0.230472207069397,-0.143587067723274,-0.957179129123688,-0.251377761363983,-0.132310286164284,-0.963931381702423,-0.230933710932732,-0.143432065844536,-0.957425177097321,-0.250527828931808,-1.31546744341904e-006,0.999999940395355,0,0,0.999999940395355,-4.86190174342482e-007,0,0.999999940395355,-7.41921894586994e-007,-8.416567425229e-007,0.999999940395355,0,0.144131630659103,-0.964372336864471,0.221838071942329,0.159639403223991,-0.956378757953644,0.244652584195137,0.146075487136841,-0.964074671268463,0.221860155463219,0.158780738711357,-0.957254767417908,0.24176824092865,-1.79408743861131e-006,0.999999940395355,-2.15610089071561e-006,-1.31546744341904e-006,0.999999940395355,0,-8.416567425229e-007,0.999999940395355,0,-1.93867072084686e-006,0.999999940395355,-1.39202154514351e-006,-0.161632269620895,-0.965039670467377,-0.206333175301552,-0.179750815033913,-0.956787526607513,-0.228576377034187,-0.163880810141563,-0.964603304862976,-0.206599667668343,-0.178331092000008,-0.957811057567596,-0.225379332900047,-9.358831789541e-007,0.999999940395355,-1.48457388604584e-006, +-1.79408743861131e-006,0.999999940395355,-2.15610089071561e-006,-1.93867072084686e-006,0.999999940395355,-1.39202154514351e-006,-1.13165833681705e-006,0.999999940395355,-2.20421816266025e-006,0.179300099611282,-0.965845704078674,0.187065213918686,0.199658587574959,-0.957649528980255,0.207469955086708,0.182106211781502,-0.965232372283936,0.187519207596779,0.19759675860405,-0.958829045295715,0.203966960310936,1.11337811858903e-007,0.999999940395355,-8.04795774911327e-007,-9.358831789541e-007,0.999999940395355,-1.48457388604584e-006,-1.13165833681705e-006,0.999999940395355,-2.20421816266025e-006,-8.50785681905109e-008,0.999999940395355,-5.59089983198646e-007,-0.196767270565033,-0.966735422611237,-0.163417130708694,-0.21850773692131,-0.958955049514771,-0.180719375610352,-0.200300946831703,-0.965905606746674,-0.164029240608215,-0.215638428926468,-0.960297226905823,-0.177000731229782,-4.25353761102087e-007,0.999999940395355,-1.30288344735163e-006,1.11337811858903e-007,0.999999940395355,-8.04795774911327e-007,-8.50785681905109e-008,0.999999940395355,-5.59089983198646e-007,-1.67745270118758e-007,0.999999940395355,-1.32454908907675e-006,0.213384836912155,-0.967595934867859,0.134999573230743,0.235109359025955,-0.960619151592255,0.148102536797524,0.217780500650406,-0.966528594493866,0.13562436401844,0.231288492679596,-0.962117195129395,0.144346848130226,-1.01354021353472e-006,0.999999940395355,1.30366913708713e-006,-4.25353761102087e-007,0.999999940395355,-1.30288344735163e-006,-1.67745270118758e-007,0.999999940395355,-1.32454908907675e-006,-1.04789671695471e-006,0.999999940395355,8.20861146166862e-007,-0.228280201554298,-0.968264937400818,-0.101739913225174,-0.248106509447098,-0.962458670139313,-0.110074102878571,-0.233579248189926,-0.96696013212204,-0.102121151983738,-0.243271812796593,-0.964087247848511,-0.106556825339794,-1.42609650310987e-007,0.999999940395355,-6.50051606498891e-006,-1.01354021353472e-006,0.999999940395355,1.30366913708713e-006,-1.04789671695471e-006,0.999999940395355,8.20861146166862e-007,-2.17229114696238e-007,0.999999940395355,-5.4751963034505e-006, +0.24044206738472,-0.968555212020874,0.0639396756887436,0.256243735551834,-0.96423214673996,0.0677907466888428,0.246497705578804,-0.967045485973358,0.0637328922748566,0.250498324632645,-0.965942919254303,0.064843624830246,-4.00312134786127e-013,0.999999940395355,-9.63827642408432e-006,-1.42609650310987e-007,0.999999940395355,-6.50051606498891e-006,-2.17229114696238e-007,0.999999940395355,-5.4751963034505e-006,5.07831786605156e-013,0.999999940395355,-9.63828551903134e-006,-0.248784631490707,-0.968298077583313,-0.0224702134728432,-0.258676767349243,-0.965686082839966,-0.0231663081794977,-0.255236208438873,-0.966642022132874,-0.0213930755853653,-0.252337247133255,-0.967409312725067,-0.0210961177945137,1.42613316711504e-007,0.999999940395355,1.50629534800828e-006,-4.00312134786127e-013,0.999999940395355,-9.63827642408432e-006,5.07831786605156e-013,0.999999940395355,-9.63828551903134e-006,2.17225490928286e-007,0.999999940395355,2.11144924833206e-006,0.252336710691452,-0.967409372329712,-0.0210991706699133,0.255235403776169,-0.966642022132874,-0.0213962495326996,0.258676260709763,-0.965686142444611,-0.0231727231293917,0.248784989118576,-0.968297839164734,-0.0224768742918968,4.7249727685994e-007,0.999999940395355,4.66450956082554e-006,1.42613316711504e-007,0.999999940395355,1.50629534800828e-006,2.17225490928286e-007,0.999999940395355,2.11144924833206e-006,3.82746179639071e-007,1,4.04727961722529e-006,-0.25049901008606,-0.965942919254303,0.0648410692811012,-0.246498167514801,-0.967045485973358,0.0637305080890656,-0.256243944168091,-0.96423214673996,0.0677868127822876,-0.240441992878914,-0.968555450439453,0.0639362260699272,-3.99124985506205e-007,0.999999940395355,3.48969564356594e-007,4.7249727685994e-007,0.999999940395355,4.66450956082554e-006,3.82746179639071e-007,1,4.04727961722529e-006,-5.32811668563227e-007,0.999999940395355,-8.12569300734367e-009,0.243272989988327,-0.964087247848511,-0.10655415058136,0.233579874038696,-0.966960370540619,-0.102117598056793,0.248106852173805,-0.962458610534668,-0.110074289143085,0.228280708193779,-0.968264758586884,-0.101740501821041, +-5.33322690898785e-007,0.999999940395355,-1.17187971682142e-006,-3.99124985506205e-007,0.999999940395355,3.48969564356594e-007,-5.32811668563227e-007,0.999999940395355,-8.12569300734367e-009,-3.70503499880215e-007,0.999999940395355,-1.22735616514547e-006,-0.231285884976387,-0.962116777896881,0.144354060292244,-0.217778474092484,-0.966528177261353,0.135631263256073,-0.235108658671379,-0.960618317127228,0.148108899593353,-0.213384747505188,-0.967595398426056,0.135003730654716,-1.98095904124784e-007,0.999999940395355,-2.58728448443435e-007,-5.33322690898785e-007,0.999999940395355,-1.17187971682142e-006,-3.70503499880215e-007,0.999999940395355,-1.22735616514547e-006,-2.94123537969426e-007,0.999999940395355,2.72011988045051e-007,0.215635389089584,-0.960296452045441,-0.177007928490639,0.200298473238945,-0.96590518951416,-0.164035454392433,0.218506082892418,-0.958953678607941,-0.180729284882545,0.196765840053558,-0.966734170913696,-0.163426294922829,-1.12631255433371e-007,0.999999940395355,2.67054986125004e-007,-1.98095904124784e-007,0.999999940395355,-2.58728448443435e-007,-2.94123537969426e-007,0.999999940395355,2.72011988045051e-007,8.06809552500454e-008,0.999999940395355,-2.80561948784452e-007,-0.197595536708832,-0.958828568458557,0.203969702124596,-0.182103976607323,-0.965232610702515,0.18752047419548,-0.199657276272774,-0.957649528980255,0.207471013069153,-0.179300174117088,-0.96584564447403,0.187065660953522,2.58566473121391e-007,0.999999940395355,-5.13899067300372e-007,-1.12631255433371e-007,0.999999940395355,2.67054986125004e-007,8.06809552500454e-008,0.999999940395355,-2.80561948784452e-007,1.65437768373522e-007,0.999999940395355,-1.05491501756205e-007,0.17833037674427,-0.957812011241913,-0.225376337766647,0.163881003856659,-0.964603304862976,-0.206599488854408,0.179750978946686,-0.956788539886475,-0.228572145104408,0.161633178591728,-0.96504020690918,-0.206329733133316,0,0.999999940395355,6.13136705851502e-007,2.58566473121391e-007,0.999999940395355,-5.13899067300372e-007,1.65437768373522e-007,0.999999940395355,-1.05491501756205e-007, +0,0.999999940395355,6.09512312621519e-007,-0.158782511949539,-0.957255601882935,0.241763815283775,-0.146078124642372,-0.964075446128845,0.221854940056801,-0.159708470106125,-0.956372737884521,0.244630992412567,-0.144236877560616,-0.964375615119934,0.221754670143127,0,0.999999940395355,3.72259762571048e-007,0,0.999999940395355,6.13136705851502e-007,0,0.999999940395355,6.09512312621519e-007,0,0.999999940395355,2.54727126502985e-007,0.1395673006773,-0.957110404968262,-0.25389090180397,0.12891598045826,-0.963671624660492,-0.233917906880379,0.139830023050308,-0.956485092639923,-0.256093263626099,0.12652151286602,-0.964267253875732,-0.23276774585247,-0.134428739547729,-0.953873574733734,0.268428951501846,-0.123137466609478,-0.961373209953308,0.246167808771133,-0.134304076433182,-0.954049170017242,0.267866432666779,-0.123139314353466,-0.961518287658691,0.245599716901779,0.134296208620071,-0.954053580760956,-0.26785472035408,0.123128622770309,-0.961524426937103,-0.245581015944481,0.134295776486397,-0.954053938388824,-0.267853885889053,0.123128101229668,-0.961524724960327,-0.245580032467842,-0.124698102474213,-0.960518896579742,0.248704195022583,-0.110610224306583,-0.969070672988892,0.220606818795204,-0.148031041026115,-0.943885564804077,0.295240193605423,-0.148031055927277,-0.943885564804077,0.295240193605423,0.707106590270996,1.42274672043641e-007,-0.707106828689575,0.707108020782471,-3.30988609675842e-006,-0.707105457782745,0.707107961177826,-3.26363442582078e-006,-0.70710551738739,0.707107186317444,3.69263972288536e-007,-0.707106292247772,-0.707106471061707,-4.32224123869673e-006,0.70710700750351,-0.707085013389587,-2.146810402337e-005,0.707128524780273,-0.70710700750351,-2.43422903167811e-007,0.707106411457062,-0.70710700750351,-3.26353415402991e-006,0.707106471061707,0.691347479820251,7.67118253861554e-005,-0.72252231836319,0.706707179546356,0.000473011721624061,-0.707505941390991,0.70710551738739,3.30968100570317e-006,-0.707107961177826,0.707106590270996,1.42274672043641e-007,-0.707106828689575,-0.706649303436279,-0.000482297880807891,0.707563698291779, +-0.69128429889679,-7.61363044148311e-005,0.722582817077637,-0.707085013389587,-2.146810402337e-005,0.707128524780273,-0.707045435905457,-1.59685823746258e-005,0.707167983055115,0.642951726913452,0.000354087329469621,-0.765906572341919,0.675355553627014,0.000949846638832241,-0.737491607666016,0.676116526126862,0.00045005464926362,-0.736794531345367,0.691347479820251,7.67118253861554e-005,-0.72252231836319,-0.67535662651062,-0.000938067911192775,0.737490653991699,-0.642901122570038,-0.000334645999828354,0.765949010848999,-0.69128429889679,-7.61363044148311e-005,0.722582817077637,-0.676113843917847,-0.000438447197666392,0.736797034740448,0.573717832565308,0.000174486121977679,-0.819052934646606,0.60798841714859,0.000997279770672321,-0.7939453125,0.609272241592407,0.000933395291212946,-0.792960464954376,0.642951726913452,0.000354087329469621,-0.765906572341919,-0.607998132705688,-0.000988467014394701,0.793937683105469,-0.573705315589905,-0.000173929744050838,0.819061636924744,-0.642901122570038,-0.000334645999828354,0.765949010848999,-0.609268307685852,-0.000925298081710935,0.792963564395905,0.500149011611938,0.000418230716604739,-0.865939140319824,0.537014782428741,0.00100837636273354,-0.84357225894928,0.538352131843567,0.00097976578399539,-0.842719316482544,0.573717832565308,0.000174486121977679,-0.819052934646606,-0.537014722824097,-0.00100110180210322,0.843572318553925,-0.50012868642807,-0.000412454508477822,0.8659508228302,-0.573705315589905,-0.000173929744050838,0.819061636924744,-0.538337409496307,-0.000971822126302868,0.842728734016418,0.422732502222061,0.000203691961360164,-0.906254410743713,0.46078297495842,0.0011021348182112,-0.88751208782196,0.462260723114014,0.000992326647974551,-0.886743426322937,0.500149011611938,0.000418230716604739,-0.865939140319824,-0.460802644491196,-0.00108629977330565,0.887502014636993,-0.422717064619064,-0.000202155963052064,0.906261622905731,-0.50012868642807,-0.000412454508477822,0.8659508228302,-0.462261557579041,-0.000978866359218955,0.886743128299713,0.342132270336151,0.000486210134113207,-0.939651727676392, +0.38234880566597,0.00106282799970359,-0.924017369747162,0.38385745882988,0.00108430103864521,-0.92339164018631,0.422732502222061,0.000203691961360164,-0.906254410743713,-0.382351249456406,-0.00105047121178359,0.924016416072845,-0.342111021280289,-0.000477634341223165,0.939659357070923,-0.422717064619064,-0.000202155963052064,0.906261622905731,-0.383839637041092,-0.0010699441190809,0.923399090766907,0.258893400430679,0.000231088371947408,-0.965905725955963,0.299574762582779,0.0011948118917644,-0.954071998596191,0.301201343536377,0.00104877783451229,-0.953559935092926,0.342132270336151,0.000486210134113207,-0.939651727676392,-0.299597084522247,-0.00117788754869252,0.954064965248108,-0.25888004899025,-0.000228960256208666,0.965909421443939,-0.342111021280289,-0.000477634341223165,0.939659357070923,-0.301198542118073,-0.00103593873791397,0.953560769557953,0.173708394169807,0.000541333865839988,-0.984796941280365,0.216061800718308,0.0011032031616196,-0.976379036903381,0.217701762914658,0.0011836924823001,-0.97601455450058,0.258893400430679,0.000231088371947408,-0.965905725955963,-0.216063663363457,-0.00108678417745978,0.976378619670868,-0.173694118857384,-0.000530617660842836,0.98479950428009,-0.25888004899025,-0.000228960256208666,0.965909421443939,-0.217677369713783,-0.00116334727499634,0.976020038127899,0.0871815755963326,0.000248495460255072,-0.996192395687103,0.12927708029747,0.00125267426483333,-0.99160772562027,0.130986571311951,0.00109595316462219,-0.991383492946625,0.173708394169807,0.000541333865839988,-0.984796941280365,-0.129304751753807,-0.00123025104403496,0.991604089736938,-0.0871760025620461,-0.000246039213379845,0.996192753314972,-0.173694118857384,-0.000530617660842836,0.98479950428009,-0.130984872579575,-0.00107876374386251,0.991383731365204,1.17230980478666e-008,0.000562945730052888,-0.999999821186066,0.043199647217989,0.00111541769001633,-0.999065756797791,0.0449124947190285,0.00124767702072859,-0.998990118503571,0.0871815755963326,0.000248495460255072,-0.996192395687103,-0.0432011559605598,-0.00109732220880687,0.999065697193146, +-8.76285852768888e-008,-0.000551345816347748,0.999999821186066,-0.0871760025620461,-0.000246039213379845,0.996192753314972,-0.0448841415345669,-0.0012244435492903,0.998991429805756,-0.0871815085411072,0.000248433614615351,-0.996192395687103,-0.0449125915765762,0.00124768249224871,-0.998990178108215,-0.0431997291743755,0.00111542060039938,-0.999065756797791,1.17230980478666e-008,0.000562945730052888,-0.999999821186066,0.0448841154575348,-0.00122483051382005,0.998991429805756,0.0871760323643684,-0.000246037408942357,0.996192753314972,-8.76285852768888e-008,-0.000551345816347748,0.999999821186066,0.0432012267410755,-0.00109775760211051,0.999065637588501,-0.173708364367485,0.00054123398149386,-0.984796941280365,-0.130986660718918,0.00109501811675727,-0.991383373737335,-0.129277110099792,0.00125175097491592,-0.991607666015625,-0.0871815085411072,0.000248433614615351,-0.996192395687103,0.130984857678413,-0.00107917352579534,0.991383671760559,0.173693999648094,-0.000530644960235804,0.98479950428009,0.0871760323643684,-0.000246037408942357,0.996192753314972,0.129304796457291,-0.00123067211825401,0.991604089736938,-0.25889328122139,0.00023112483904697,-0.965905785560608,-0.217702135443687,0.00118364382069558,-0.976014494895935,-0.216062128543854,0.00110320013482124,-0.976378917694092,-0.173708364367485,0.00054123398149386,-0.984796941280365,0.21767657995224,-0.00116316566709429,0.976020216941834,0.258879840373993,-0.000228985954890959,0.965909421443939,0.173693999648094,-0.000530644960235804,0.98479950428009,0.216062963008881,-0.00108651397749782,0.976378798484802,-0.34213200211525,0.000486268632812425,-0.939651727676392,-0.301199406385422,0.00105119287036359,-0.953560531139374,-0.299572914838791,0.00119721691589803,-0.954072594642639,-0.25889328122139,0.00023112483904697,-0.965905785560608,0.301198601722717,-0.00103476224467158,0.953560709953308,0.342110991477966,-0.000477676192531362,0.939659357070923,0.258879840373993,-0.000228985954890959,0.965909421443939,0.299597084522247,-0.00117666774895042,0.954065144062042,-0.422732412815094,0.000203606527065858,-0.906254470348358, +-0.383859694004059,0.00108595681376755,-0.923390746116638,-0.382351160049438,0.00106450635939837,-0.924016416072845,-0.34213200211525,0.000486268632812425,-0.939651727676392,0.38383936882019,-0.00107024807948619,0.923399329185486,0.422717124223709,-0.000202067123609595,0.906261503696442,0.342110991477966,-0.000477676192531362,0.939659357070923,0.382351160049438,-0.00105092476587743,0.92401647567749,-0.500148892402649,0.000418226496549323,-0.865939199924469,-0.462262123823166,0.000992285786196589,-0.8867427110672,-0.460784375667572,0.00110203528311104,-0.887511372566223,-0.422732412815094,0.000203606527065858,-0.906254470348358,0.462260663509369,-0.000980581389740109,0.886743545532227,0.500128626823425,-0.000411972694564611,0.86595094203949,0.422717124223709,-0.000202067123609595,0.906261503696442,0.460801750421524,-0.00108774390537292,0.887502372264862,-0.573718070983887,0.00017472033505328,-0.819052696228027,-0.538351953029633,0.000978345633484423,-0.842719316482544,-0.537014484405518,0.00100671465042979,-0.843572378158569,-0.500148892402649,0.000418226496549323,-0.865939199924469,0.5383380651474,-0.000972610607277602,0.842728316783905,0.573705196380615,-0.000173079664818943,0.819061696529388,0.500128626823425,-0.000411972694564611,0.86595094203949,0.537015438079834,-0.00100191065575928,0.843571782112122,-0.642951726913452,0.000354452669853345,-0.765906572341919,-0.609271824359894,0.000933478528168052,-0.792960822582245,-0.607987761497498,0.000997181632556021,-0.793945670127869,-0.573718070983887,0.00017472033505328,-0.819052696228027,0.609269022941589,-0.000926709559280425,0.792962968349457,0.642927646636963,-0.00036650785477832,0.765926659107208,0.573705196380615,-0.000173079664818943,0.819061696529388,0.607998311519623,-0.000988370040431619,0.793937742710114,-0.691341698169708,7.67282908782363e-005,-0.722527801990509,-0.67611563205719,0.000452834210591391,-0.73679530620575,-0.675354897975922,0.000953109876718372,-0.737492144107819,-0.642951726913452,0.000354452669853345,-0.765906572341919,0.67617392539978,-0.000458253372926265,0.736741781234741, +0.691334187984467,-7.63541393098421e-005,0.722535014152527,0.642927646636963,-0.00036650785477832,0.765926659107208,0.675419449806213,-0.000955127004999667,0.737433075904846,-0.70710676908493,-1.48291519508348e-007,-0.707106649875641,-0.707105934619904,3.30935336023686e-006,-0.707107484340668,-0.706706941127777,0.000473292486276478,-0.707506060600281,-0.691341698169708,7.67282908782363e-005,-0.722527801990509,0.691334187984467,-7.63541393098421e-005,0.722535014152527,0.707091152667999,2.06680033443263e-005,0.707122266292572,0.707083821296692,2.91770284093218e-005,0.707129657268524,0.707078635692596,3.53965515387245e-005,0.707134783267975,0.691218376159668,-1.27734935517765e-007,0.722645878791809,-0.707106411457062,-1.8572363558178e-007,-0.707107067108154,-0.707106947898865,-3.26363942804164e-006,-0.707106530666351,-0.707106649875641,-3.3098917811003e-006,-0.70710676908493,-0.70710676908493,-1.48291519508348e-007,-0.707106649875641,0.707091152667999,2.06680033443263e-005,0.707122266292572,0.707107722759247,-6.0464969919849e-008,0.707105755805969,0.707107841968536,0,0.70710563659668,0.707083821296692,2.91770284093218e-005,0.707129657268524,0.100992575287819,-0.974283337593079,0.201425895094872,-0.015247224830091,-0.999421000480652,-0.0304169561713934,0.0152474660426378,-0.999421358108521,0.0304058436304331,0.115416444838047,-0.966276109218597,0.230193823575974,-0.015247224830091,-0.999421000480652,-0.0304169561713934,-0.134296879172325,-0.954053103923798,-0.267855852842331,-0.123129539191723,-0.961523473262787,-0.245584085583687,0.0152474660426378,-0.999421358108521,0.0304058436304331,-0.123066082596779,-0.961489975452423,-0.245747268199921,0.0159337222576141,-0.999445557594299,0.0292362757027149,-0.0147036742419004,-0.999401688575745,-0.0313049554824829,-0.134247705340385,-0.954042494297028,-0.267918437719345,0.0159337222576141,-0.999445557594299,0.0292362757027149,0.137900203466415,-0.954665720462799,0.263812065124512,0.126252546906471,-0.962023437023163,0.242014437913895,-0.0147036742419004,-0.999401688575745,-0.0313049554824829, +0.127787038683891,-0.961508214473724,0.243253946304321,-0.0151436198502779,-0.999611616134644,-0.0233937837183475,0.0154015300795436,-0.999354779720306,0.0324454456567764,0.13794581592083,-0.954899609088898,0.262940555810928,-0.0151436198502779,-0.999611616134644,-0.0233937837183475,-0.143587067723274,-0.957179129123688,-0.251377761363983,-0.131450578570366,-0.964159369468689,-0.230472207069397,0.0154015300795436,-0.999354779720306,0.0324454456567764,-0.132310286164284,-0.963931381702423,-0.230933710932732,0.0218442529439926,-0.999319314956665,0.0297255013138056,-0.0135709010064602,-0.999491274356842,-0.0288636293262243,-0.143432065844536,-0.957425177097321,-0.250527828931808,0.0218442529439926,-0.999319314956665,0.0297255013138056,0.159639403223991,-0.956378757953644,0.244652584195137,0.144131630659103,-0.964372336864471,0.221838071942329,-0.0135709010064602,-0.999491274356842,-0.0288636293262243,0.146075487136841,-0.964074671268463,0.221860155463219,-0.0255906563252211,-0.999307096004486,-0.027024744078517,0.0148703893646598,-0.999460279941559,0.029289348050952,0.158780738711357,-0.957254767417908,0.24176824092865,-0.0255906563252211,-0.999307096004486,-0.027024744078517,-0.179750815033913,-0.956787526607513,-0.228576377034187,-0.161632269620895,-0.965039670467377,-0.206333175301552,0.0148703893646598,-0.999460279941559,0.029289348050952,-0.163880810141563,-0.964603304862976,-0.206599667668343,0.0278484746813774,-0.999346613883972,0.0230371970683336,-0.0166208110749722,-0.999470233917236,-0.0279791969805956,-0.178331092000008,-0.957811057567596,-0.225379332900047,0.0278484746813774,-0.999346613883972,0.0230371970683336,0.199658587574959,-0.957649528980255,0.207469955086708,0.179300099611282,-0.965845704078674,0.187065213918686,-0.0166208110749722,-0.999470233917236,-0.0279791969805956,0.182106211781502,-0.965232372283936,0.187519207596779,-0.0287802908569574,-0.999434888362885,-0.0173639208078384,0.0175538267940283,-0.999519288539886,0.0255525894463062,0.19759675860405,-0.958829045295715,0.203966960310936,-0.0287802908569574,-0.999434888362885,-0.0173639208078384, +-0.21850773692131,-0.958955049514771,-0.180719375610352,-0.196767270565033,-0.966735422611237,-0.163417130708694,0.0175538267940283,-0.999519288539886,0.0255525894463062,-0.200300946831703,-0.965905606746674,-0.164029240608215,0.0277864709496498,-0.999560177326202,0.0103667629882693,-0.0172408670186996,-0.999605417251587,-0.0221754740923643,-0.215638428926468,-0.960297226905823,-0.177000731229782,0.0277864709496498,-0.999560177326202,0.0103667629882693,0.235109359025955,-0.960619151592255,0.148102536797524,0.213384836912155,-0.967595934867859,0.134999573230743,-0.0172408670186996,-0.999605417251587,-0.0221754740923643,0.217780500650406,-0.966528594493866,0.13562436401844,-0.024346636608243,-0.999699473381042,-0.00283437198959291,0.0153207927942276,-0.999715745449066,0.0182649083435535,0.231288492679596,-0.962117195129395,0.144346848130226,-0.024346636608243,-0.999699473381042,-0.00283437198959291,-0.248106509447098,-0.962458670139313,-0.110074102878571,-0.228280201554298,-0.968264937400818,-0.101739913225174,0.0153207927942276,-0.999715745449066,0.0182649083435535,-0.233579248189926,-0.96696013212204,-0.102121151983738,0.0182486567646265,-0.999825060367584,-0.00406878488138318,-0.0116085018962622,-0.999827086925507,-0.0145186418667436,-0.243271812796593,-0.964087247848511,-0.106556825339794,0.0182486567646265,-0.999825060367584,-0.00406878488138318,0.256243735551834,-0.96423214673996,0.0677907466888428,0.24044206738472,-0.968555212020874,0.0639396756887436,-0.0116085018962622,-0.999827086925507,-0.0145186418667436,0.246497705578804,-0.967045485973358,0.0637328922748566,-0.0098147327080369,-0.999911367893219,0.00898595247417688,0.0062889507971704,-0.999910771846771,0.0117807649075985,0.250498324632645,-0.965942919254303,0.064843624830246,-0.0098147327080369,-0.999911367893219,0.00898595247417688,-0.258676767349243,-0.965686082839966,-0.0231663081794977,-0.248784631490707,-0.968298077583313,-0.0224702134728432,0.0062889507971704,-0.999910771846771,0.0117807649075985,-0.255236208438873,-0.966642022132874,-0.0213930755853653, +-1.4923796243238e-007,-0.999942064285278,-0.0107591906562448,1.16896650581566e-007,-0.999942123889923,-0.0107591897249222,-0.252337247133255,-0.967409312725067,-0.0210961177945137,-1.4923796243238e-007,-0.999942064285278,-0.0107591906562448,0.255235403776169,-0.966642022132874,-0.0213962495326996,0.252336710691452,-0.967409372329712,-0.0210991706699133,1.16896650581566e-007,-0.999942123889923,-0.0107591897249222,0.258676260709763,-0.965686142444611,-0.0231727231293917,0.00981586892157793,-0.999911367893219,0.00898293498903513,-0.00628749560564756,-0.999910831451416,0.0117783099412918,0.248784989118576,-0.968297839164734,-0.0224768742918968,0.00981586892157793,-0.999911367893219,0.00898293498903513,-0.246498167514801,-0.967045485973358,0.0637305080890656,-0.25049901008606,-0.965942919254303,0.0648410692811012,-0.00628749560564756,-0.999910831451416,0.0117783099412918,-0.256243944168091,-0.96423214673996,0.0677868127822876,-0.0182476863265038,-0.999825179576874,-0.00406463537365198,0.0116092134267092,-0.999827265739441,-0.0145133594051003,-0.240441992878914,-0.968555450439453,0.0639362260699272,-0.0182476863265038,-0.999825179576874,-0.00406463537365198,0.233579874038696,-0.966960370540619,-0.102117598056793,0.243272989988327,-0.964087247848511,-0.10655415058136,0.0116092134267092,-0.999827265739441,-0.0145133594051003,0.248106852173805,-0.962458610534668,-0.110074289143085,0.0243457239121199,-0.999699592590332,-0.00283335032872856,-0.0153204007074237,-0.999715745449066,0.0182660911232233,0.228280708193779,-0.968264758586884,-0.101740501821041,0.0243457239121199,-0.999699592590332,-0.00283335032872856,-0.217778474092484,-0.966528177261353,0.135631263256073,-0.231285884976387,-0.962116777896881,0.144354060292244,-0.0153204007074237,-0.999715745449066,0.0182660911232233,-0.235108658671379,-0.960618317127228,0.148108899593353,-0.027790043503046,-0.999559938907623,0.0103657385334373,0.017237538471818,-0.999605417251587,-0.0221757385879755,-0.213384747505188,-0.967595398426056,0.135003730654716,-0.027790043503046,-0.999559938907623,0.0103657385334373, +0.200298473238945,-0.96590518951416,-0.164035454392433,0.215635389089584,-0.960296452045441,-0.177007928490639,0.017237538471818,-0.999605417251587,-0.0221757385879755,0.218506082892418,-0.958953678607941,-0.180729284882545,0.0287829414010048,-0.99943470954895,-0.017369793727994,-0.017551438882947,-0.999519348144531,0.0255485940724611,0.196765840053558,-0.966734170913696,-0.163426294922829,0.0287829414010048,-0.99943470954895,-0.017369793727994,-0.182103976607323,-0.965232610702515,0.18752047419548,-0.197595536708832,-0.958828568458557,0.203969702124596,-0.017551438882947,-0.999519348144531,0.0255485940724611,-0.199657276272774,-0.957649528980255,0.207471013069153,-0.0278479680418968,-0.999346792697906,0.023030161857605,0.016618937253952,-0.999470174312592,-0.0279835537075996,-0.179300174117088,-0.96584564447403,0.187065660953522,-0.0278479680418968,-0.999346792697906,0.023030161857605,0.163881003856659,-0.964603304862976,-0.206599488854408,0.17833037674427,-0.957812011241913,-0.225376337766647,0.016618937253952,-0.999470174312592,-0.0279835537075996,0.179750978946686,-0.956788539886475,-0.228572145104408,0.0255907401442528,-0.999306976795197,-0.027028676122427,-0.014870441518724,-0.999460577964783,0.0292805526405573,0.161633178591728,-0.96504020690918,-0.206329733133316,0.0255907401442528,-0.999306976795197,-0.027028676122427,-0.146078124642372,-0.964075446128845,0.221854940056801,-0.158782511949539,-0.957255601882935,0.241763815283775,-0.014870441518724,-0.999460577964783,0.0292805526405573,-0.159708470106125,-0.956372737884521,0.244630992412567,-0.0225762035697699,-0.999316275119781,0.0292785465717316,0.0126480925828218,-0.999484896659851,-0.029494222253561,-0.144236877560616,-0.964375615119934,0.221754670143127,-0.0225762035697699,-0.999316275119781,0.0292785465717316,0.12891598045826,-0.963671624660492,-0.233917906880379,0.1395673006773,-0.957110404968262,-0.25389090180397,0.0126480925828218,-0.999484896659851,-0.029494222253561,0.139830023050308,-0.956485092639923,-0.256093263626099,0.0160598773509264,-0.99950647354126,-0.026997372508049, +-0.016517473384738,-0.99918657541275,0.0367877781391144,0.12652151286602,-0.964267253875732,-0.23276774585247,0.0160598773509264,-0.99950647354126,-0.026997372508049,-0.123137466609478,-0.961373209953308,0.246167808771133,-0.134428739547729,-0.953873574733734,0.268428951501846,-0.016517473384738,-0.99918657541275,0.0367877781391144,-0.134304076433182,-0.954049170017242,0.267866432666779,-0.0152475573122501,-0.999421119689941,0.0304133631289005,0.015248853713274,-0.999421119689941,-0.0304128378629684,-0.123139314353466,-0.961518287658691,0.245599716901779,-0.0152475573122501,-0.999421119689941,0.0304133631289005,0.123128622770309,-0.961524426937103,-0.245581015944481,0.134296208620071,-0.954053580760956,-0.26785472035408,0.015248853713274,-0.999421119689941,-0.0304128378629684,0.134295776486397,-0.954053938388824,-0.267853885889053,0.0152467731386423,-0.999421119689941,-0.0304117072373629,-0.0152477622032166,-0.999421238899231,0.0304093286395073,0.123128101229668,-0.961524724960327,-0.245580032467842,0.0152467731386423,-0.999421119689941,-0.0304117072373629,-0.110610224306583,-0.969070672988892,0.220606818795204,-0.124698102474213,-0.960518896579742,0.248704195022583,-0.0152477622032166,-0.999421238899231,0.0304093286395073,0.707107186317444,3.69263972288536e-007,-0.707106292247772,0.707107961177826,-3.26363442582078e-006,-0.70710551738739,0.707106709480286,0,-0.707106709480286,0.707107186317444,3.69263972288536e-007,-0.707106292247772,0.707106709480286,0,-0.707106709480286,0.707104980945587,1.05163881016779e-005,-0.707108438014984,-0.70710700750351,-2.43422903167811e-007,0.707106411457062,-0.707105100154877,-3.95148617826635e-006,0.707108438014984,-0.70710676908493,0,0.707106709480286,-0.70710700750351,-2.43422903167811e-007,0.707106411457062,-0.70710676908493,0,0.707106709480286,-0.70710700750351,-3.26353415402991e-006,0.707106471061707,0.707106590270996,1.42274672043641e-007,-0.707106828689575,0.70710551738739,3.30968100570317e-006,-0.707107961177826,0.707107782363892,0,-0.707105755805969,0.707106590270996,1.42274672043641e-007,-0.707106828689575, +0.707107782363892,0,-0.707105755805969,0.707108020782471,-3.30988609675842e-006,-0.707105457782745,-0.707085013389587,-2.146810402337e-005,0.707128524780273,-0.707106471061707,-4.32224123869673e-006,0.70710700750351,-0.70707494020462,-3.6989131331211e-005,0.707138419151306,-0.707085013389587,-2.146810402337e-005,0.707128524780273,-0.70707494020462,-3.6989131331211e-005,0.707138419151306,-0.707045435905457,-1.59685823746258e-005,0.707167983055115,0.691347479820251,7.67118253861554e-005,-0.72252231836319,0.676116526126862,0.00045005464926362,-0.736794531345367,0.691384553909302,0.0109176589176059,-0.722404301166534,0.691347479820251,7.67118253861554e-005,-0.72252231836319,0.691384553909302,0.0109176589176059,-0.722404301166534,0.706707179546356,0.000473011721624061,-0.707505941390991,-0.69128429889679,-7.61363044148311e-005,0.722582817077637,-0.706649303436279,-0.000482297880807891,0.707563698291779,-0.69135057926178,-0.010904373601079,0.722437083721161,-0.69128429889679,-7.61363044148311e-005,0.722582817077637,-0.69135057926178,-0.010904373601079,0.722437083721161,-0.676113843917847,-0.000438447197666392,0.736797034740448,0.642951726913452,0.000354087329469621,-0.765906572341919,0.609272241592407,0.000933395291212946,-0.792960464954376,0.641915321350098,0.0334380529820919,-0.766046047210693,0.642951726913452,0.000354087329469621,-0.765906572341919,0.641915321350098,0.0334380529820919,-0.766046047210693,0.675355553627014,0.000949846638832241,-0.737491607666016,-0.642901122570038,-0.000334645999828354,0.765949010848999,-0.67535662651062,-0.000938067911192775,0.737490653991699,-0.641911923885345,-0.0333690978586674,0.766051948070526,-0.642901122570038,-0.000334645999828354,0.765949010848999,-0.641911923885345,-0.0333690978586674,0.766051948070526,-0.609268307685852,-0.000925298081710935,0.792963564395905,0.573717832565308,0.000174486121977679,-0.819052934646606,0.538352131843567,0.00097976578399539,-0.842719316482544,0.573073506355286,0.0230355337262154,-0.819180011749268,0.573717832565308,0.000174486121977679,-0.819052934646606, +0.573073506355286,0.0230355337262154,-0.819180011749268,0.60798841714859,0.000997279770672321,-0.7939453125,-0.573705315589905,-0.000173929744050838,0.819061636924744,-0.607998132705688,-0.000988467014394701,0.793937683105469,-0.573069989681244,-0.0230608135461807,0.819181978702545,-0.573705315589905,-0.000173929744050838,0.819061636924744,-0.573069989681244,-0.0230608135461807,0.819181978702545,-0.538337409496307,-0.000971822126302868,0.842728734016418,0.500149011611938,0.000418230716604739,-0.865939140319824,0.462260723114014,0.000992326647974551,-0.886743426322937,0.499047607183456,0.0362859182059765,-0.865814507007599,0.500149011611938,0.000418230716604739,-0.865939140319824,0.499047607183456,0.0362859182059765,-0.865814507007599,0.537014782428741,0.00100837636273354,-0.84357225894928,-0.50012868642807,-0.000412454508477822,0.8659508228302,-0.537014722824097,-0.00100110180210322,0.843572318553925,-0.499045848846436,-0.0361604206264019,0.865820825099945,-0.50012868642807,-0.000412454508477822,0.8659508228302,-0.499045848846436,-0.0361604206264019,0.865820825099945,-0.462261557579041,-0.000978866359218955,0.886743128299713,0.422732502222061,0.000203691961360164,-0.906254410743713,0.38385745882988,0.00108430103864521,-0.92339164018631,0.422118037939072,0.0242889747023582,-0.906215369701386,0.422732502222061,0.000203691961360164,-0.906254410743713,0.422118037939072,0.0242889747023582,-0.906215369701386,0.46078297495842,0.0011021348182112,-0.88751208782196,-0.422717064619064,-0.000202155963052064,0.906261622905731,-0.460802644491196,-0.00108629977330565,0.887502014636993,-0.422112256288528,-0.0243196655064821,0.906217217445374,-0.422717064619064,-0.000202155963052064,0.906261622905731,-0.422112256288528,-0.0243196655064821,0.906217217445374,-0.383839637041092,-0.0010699441190809,0.923399090766907,0.342132270336151,0.000486210134113207,-0.939651727676392,0.301201343536377,0.00104877783451229,-0.953559935092926,0.3411625623703,0.0391793847084045,-0.939187467098236,0.342132270336151,0.000486210134113207,-0.939651727676392, +0.3411625623703,0.0391793847084045,-0.939187467098236,0.38234880566597,0.00106282799970359,-0.924017369747162,-0.342111021280289,-0.000477634341223165,0.939659357070923,-0.382351249456406,-0.00105047121178359,0.924016416072845,-0.341161400079727,-0.0390057191252708,0.939195096492767,-0.342111021280289,-0.000477634341223165,0.939659357070923,-0.341161400079727,-0.0390057191252708,0.939195096492767,-0.301198542118073,-0.00103593873791397,0.953560769557953,0.258893400430679,0.000231088371947408,-0.965905725955963,0.217701762914658,0.0011836924823001,-0.97601455450058,0.258441656827927,0.0253688059747219,-0.965693652629852,0.258893400430679,0.000231088371947408,-0.965905725955963,0.258441656827927,0.0253688059747219,-0.965693652629852,0.299574762582779,0.0011948118917644,-0.954071998596191,-0.25888004899025,-0.000228960256208666,0.965909421443939,-0.299597084522247,-0.00117788754869252,0.954064965248108,-0.258434951305389,-0.0254060681909323,0.96569436788559,-0.25888004899025,-0.000228960256208666,0.965909421443939,-0.258434951305389,-0.0254060681909323,0.96569436788559,-0.217677369713783,-0.00116334727499634,0.976020038127899,0.173708394169807,0.000541333865839988,-0.984796941280365,0.130986571311951,0.00109595316462219,-0.991383492946625,0.173126965761185,0.0414470694959164,-0.984026908874512,0.173708394169807,0.000541333865839988,-0.984796941280365,0.173126965761185,0.0414470694959164,-0.984026908874512,0.216061800718308,0.0011032031616196,-0.976379036903381,-0.173694118857384,-0.000530617660842836,0.98479950428009,-0.216063663363457,-0.00108678417745978,0.976378619670868,-0.173126697540283,-0.0412300266325474,0.984036147594452,-0.173694118857384,-0.000530617660842836,0.98479950428009,-0.173126697540283,-0.0412300266325474,0.984036147594452,-0.130984872579575,-0.00107876374386251,0.991383731365204,0.0871815755963326,0.000248495460255072,-0.996192395687103,0.0449124947190285,0.00124767702072859,-0.998990118503571,0.0870150774717331,0.0260103810578585,-0.995867311954498,0.0871815755963326,0.000248495460255072,-0.996192395687103, +0.0870150774717331,0.0260103810578585,-0.995867311954498,0.12927708029747,0.00125267426483333,-0.99160772562027,-0.0871760025620461,-0.000246039213379845,0.996192753314972,-0.129304751753807,-0.00123025104403496,0.991604089736938,-0.0870119780302048,-0.026054572314024,0.995866417884827,-0.0871760025620461,-0.000246039213379845,0.996192753314972,-0.0870119780302048,-0.026054572314024,0.995866417884827,-0.0448841415345669,-0.0012244435492903,0.998991429805756,1.17230980478666e-008,0.000562945730052888,-0.999999821186066,-0.0431997291743755,0.00111542060039938,-0.999065756797791,1.19880610327527e-007,0.0423209592700005,-0.999104082584381,1.17230980478666e-008,0.000562945730052888,-0.999999821186066,1.19880610327527e-007,0.0423209592700005,-0.999104082584381,0.043199647217989,0.00111541769001633,-0.999065756797791,-8.76285852768888e-008,-0.000551345816347748,0.999999821186066,-0.0432011559605598,-0.00109732220880687,0.999065697193146,-1.35385903377028e-007,-0.0420839376747608,0.999114036560059,-8.76285852768888e-008,-0.000551345816347748,0.999999821186066,-1.35385903377028e-007,-0.0420839376747608,0.999114036560059,0.0432012267410755,-0.00109775760211051,0.999065637588501,-0.0871815085411072,0.000248433614615351,-0.996192395687103,-0.129277110099792,0.00125175097491592,-0.991607666015625,-0.0870143547654152,0.0260103438049555,-0.995867371559143,-0.0871815085411072,0.000248433614615351,-0.996192395687103,-0.0870143547654152,0.0260103438049555,-0.995867371559143,-0.0449125915765762,0.00124768249224871,-0.998990178108215,0.0871760323643684,-0.000246037408942357,0.996192753314972,0.0448841154575348,-0.00122483051382005,0.998991429805756,0.0870118960738182,-0.026053773239255,0.995866477489471,0.0871760323643684,-0.000246037408942357,0.996192753314972,0.0870118960738182,-0.026053773239255,0.995866477489471,0.129304796457291,-0.00123067211825401,0.991604089736938,-0.173708364367485,0.00054123398149386,-0.984796941280365,-0.216062128543854,0.00110320013482124,-0.976378917694092,-0.173127472400665,0.0414470806717873,-0.984026968479156, +-0.173708364367485,0.00054123398149386,-0.984796941280365,-0.173127472400665,0.0414470806717873,-0.984026968479156,-0.130986660718918,0.00109501811675727,-0.991383373737335,0.173693999648094,-0.000530644960235804,0.98479950428009,0.130984857678413,-0.00107917352579534,0.991383671760559,0.173127800226212,-0.0412281304597855,0.984035968780518,0.173693999648094,-0.000530644960235804,0.98479950428009,0.173127800226212,-0.0412281304597855,0.984035968780518,0.216062963008881,-0.00108651397749782,0.976378798484802,-0.25889328122139,0.00023112483904697,-0.965905785560608,-0.299572914838791,0.00119721691589803,-0.954072594642639,-0.258442789316177,0.025368008762598,-0.965693414211273,-0.25889328122139,0.00023112483904697,-0.965905785560608,-0.258442789316177,0.025368008762598,-0.965693414211273,-0.217702135443687,0.00118364382069558,-0.976014494895935,0.258879840373993,-0.000228985954890959,0.965909421443939,0.21767657995224,-0.00116316566709429,0.976020216941834,0.258433550596237,-0.0254059247672558,0.965694844722748,0.258879840373993,-0.000228985954890959,0.965909421443939,0.258433550596237,-0.0254059247672558,0.965694844722748,0.299597084522247,-0.00117666774895042,0.954065144062042,-0.34213200211525,0.000486268632812425,-0.939651727676392,-0.382351160049438,0.00106450635939837,-0.924016416072845,-0.341161757707596,0.0391788966953754,-0.939187705516815,-0.34213200211525,0.000486268632812425,-0.939651727676392,-0.341161757707596,0.0391788966953754,-0.939187705516815,-0.301199406385422,0.00105119287036359,-0.953560531139374,0.342110991477966,-0.000477676192531362,0.939659357070923,0.301198601722717,-0.00103476224467158,0.953560709953308,0.341163694858551,-0.0390072986483574,0.939194083213806,0.342110991477966,-0.000477676192531362,0.939659357070923,0.341163694858551,-0.0390072986483574,0.939194083213806,0.382351160049438,-0.00105092476587743,0.92401647567749,-0.422732412815094,0.000203606527065858,-0.906254470348358,-0.460784375667572,0.00110203528311104,-0.887511372566223,-0.422117799520493,0.0242881625890732,-0.906215488910675, +-0.422732412815094,0.000203606527065858,-0.906254470348358,-0.422117799520493,0.0242881625890732,-0.906215488910675,-0.383859694004059,0.00108595681376755,-0.923390746116638,0.422717124223709,-0.000202067123609595,0.906261503696442,0.38383936882019,-0.00107024807948619,0.923399329185486,0.422110944986343,-0.0243170969188213,0.906217813491821,0.422717124223709,-0.000202067123609595,0.906261503696442,0.422110944986343,-0.0243170969188213,0.906217813491821,0.460801750421524,-0.00108774390537292,0.887502372264862,-0.500148892402649,0.000418226496549323,-0.865939199924469,-0.537014484405518,0.00100671465042979,-0.843572378158569,-0.499046862125397,0.0362844876945019,-0.865814983844757,-0.500148892402649,0.000418226496549323,-0.865939199924469,-0.499046862125397,0.0362844876945019,-0.865814983844757,-0.462262123823166,0.000992285786196589,-0.8867427110672,0.500128626823425,-0.000411972694564611,0.86595094203949,0.462260663509369,-0.000980581389740109,0.886743545532227,0.49904653429985,-0.0361623391509056,0.865820229053497,0.500128626823425,-0.000411972694564611,0.86595094203949,0.49904653429985,-0.0361623391509056,0.865820229053497,0.537015438079834,-0.00100191065575928,0.843571782112122,-0.573718070983887,0.00017472033505328,-0.819052696228027,-0.607987761497498,0.000997181632556021,-0.793945670127869,-0.573073625564575,0.0230366475880146,-0.819179952144623,-0.573718070983887,0.00017472033505328,-0.819052696228027,-0.573073625564575,0.0230366475880146,-0.819179952144623,-0.538351953029633,0.000978345633484423,-0.842719316482544,0.573705196380615,-0.000173079664818943,0.819061696529388,0.5383380651474,-0.000972610607277602,0.842728316783905,0.573067963123322,-0.0230598505586386,0.81918329000473,0.573705196380615,-0.000173079664818943,0.819061696529388,0.573067963123322,-0.0230598505586386,0.81918329000473,0.607998311519623,-0.000988370040431619,0.793937742710114,-0.642951726913452,0.000354452669853345,-0.765906572341919,-0.675354897975922,0.000953109876718372,-0.737492144107819,-0.641916811466217,0.0334394052624702,-0.766044855117798, +-0.642951726913452,0.000354452669853345,-0.765906572341919,-0.641916811466217,0.0334394052624702,-0.766044855117798,-0.609271824359894,0.000933478528168052,-0.792960822582245,0.642927646636963,-0.00036650785477832,0.765926659107208,0.609269022941589,-0.000926709559280425,0.792962968349457,0.641945540904999,-0.0333849042654037,0.76602303981781,0.642927646636963,-0.00036650785477832,0.765926659107208,0.641945540904999,-0.0333849042654037,0.76602303981781,0.675419449806213,-0.000955127004999667,0.737433075904846,-0.691341698169708,7.67282908782363e-005,-0.722527801990509,-0.706706941127777,0.000473292486276478,-0.707506060600281,-0.691372275352478,0.0109164593741298,-0.7224161028862,-0.691341698169708,7.67282908782363e-005,-0.722527801990509,-0.691372275352478,0.0109164593741298,-0.7224161028862,-0.67611563205719,0.000452834210591391,-0.73679530620575,0.691334187984467,-7.63541393098421e-005,0.722535014152527,0.67617392539978,-0.000458253372926265,0.736741781234741,0.691391050815582,-0.010900154709816,0.722398400306702,0.691334187984467,-7.63541393098421e-005,0.722535014152527,0.691391050815582,-0.010900154709816,0.722398400306702,0.706710398197174,-0.00045808037975803,0.707502782344818,-0.70710676908493,-1.48291519508348e-007,-0.707106649875641,-0.707106649875641,-3.3098917811003e-006,-0.70710676908493,-0.707106232643127,0,-0.707107186317444,-0.70710676908493,-1.48291519508348e-007,-0.707106649875641,-0.707106232643127,0,-0.707107186317444,-0.707105934619904,3.30935336023686e-006,-0.707107484340668,0.707091152667999,2.06680033443263e-005,0.707122266292572,0.707107901573181,9.92796321952483e-006,0.70710551738739,0.707106232643127,0,0.707107186317444,0.707091152667999,2.06680033443263e-005,0.707122266292572,0.707106232643127,0,0.707107186317444,0.707108199596405,0,0.707105278968811,-0.707106411457062,-1.8572363558178e-007,-0.707107067108154,-0.707106590270996,0,-0.707106947898865,-0.707108736038208,0,-0.707104742527008,-0.707106411457062,-1.8572363558178e-007,-0.707107067108154,-0.707108736038208,0,-0.707104742527008, +-0.707106947898865,-3.26363942804164e-006,-0.707106530666351,0.707107722759247,-6.0464969919849e-008,0.707105755805969,0.707108199596405,0,0.707105278968811,0.707105457782745,0,0.707108020782471,0.707107722759247,-6.0464969919849e-008,0.707105755805969,0.707105457782745,0,0.707108020782471,0.707104623317719,-2.92431354864675e-006,0.707108795642853,0.642927646636963,-0.00036650785477832,0.765926659107208,0.691334187984467,-7.63541393098421e-005,0.722535014152527,0.691218376159668,-1.27734935517765e-007,0.722645878791809,0.642897427082062,-1.68050628417404e-005,0.765952169895172,0.707107901573181,9.92796321952483e-006,0.70710551738739,0.707091152667999,2.06680033443263e-005,0.707122266292572,0.691334187984467,-7.63541393098421e-005,0.722535014152527,0.706710398197174,-0.00045808037975803,0.707502782344818,0.707108199596405,0,0.707105278968811,0.707107722759247,-6.0464969919849e-008,0.707105755805969,0.707091152667999,2.06680033443263e-005,0.707122266292572,0.707108199596405,0,0.707105278968811,0.573705196380615,-0.000173079664818943,0.819061696529388,0.642927646636963,-0.00036650785477832,0.765926659107208,0.642897427082062,-1.68050628417404e-005,0.765952169895172,0.573690056800842,5.04443903537322e-007,0.819072365760803,0.500128626823425,-0.000411972694564611,0.86595094203949,0.573705196380615,-0.000173079664818943,0.819061696529388,0.573690056800842,5.04443903537322e-007,0.819072365760803,0.500099658966064,2.47287630372739e-007,0.865967810153961,0.422717124223709,-0.000202067123609595,0.906261503696442,0.500128626823425,-0.000411972694564611,0.86595094203949,0.500099658966064,2.47287630372739e-007,0.865967810153961,0.422701776027679,-4.03023427963944e-008,0.906268775463104,0.342110991477966,-0.000477676192531362,0.939659357070923,0.422717124223709,-0.000202067123609595,0.906261503696442,0.422701776027679,-4.03023427963944e-008,0.906268775463104,0.34208670258522,2.35801049797146e-008,0.939668416976929,0.258879840373993,-0.000228985954890959,0.965909421443939,0.342110991477966,-0.000477676192531362,0.939659357070923, +0.34208670258522,2.35801049797146e-008,0.939668416976929,0.258868128061295,-3.64436161248705e-008,0.965912699699402,0.173693999648094,-0.000530644960235804,0.98479950428009,0.258879840373993,-0.000228985954890959,0.965909421443939,0.258868128061295,-3.64436161248705e-008,0.965912699699402,0.173680230975151,-5.85019712673329e-008,0.984802067279816,0.0871760323643684,-0.000246037408942357,0.996192753314972,0.173693999648094,-0.000530644960235804,0.98479950428009,0.173680230975151,-5.85019712673329e-008,0.984802067279816,0.0871715843677521,-3.00963201027571e-008,0.996193289756775,-8.76285852768888e-008,-0.000551345816347748,0.999999821186066,0.0871760323643684,-0.000246037408942357,0.996192753314972,0.0871715843677521,-3.00963201027571e-008,0.996193289756775,-1.0000957217926e-007,-6.4408808952976e-008,0.999999940395355,-0.0871760025620461,-0.000246039213379845,0.996192753314972,-8.76285852768888e-008,-0.000551345816347748,0.999999821186066,-1.0000957217926e-007,-6.4408808952976e-008,0.999999940395355,-0.0871715396642685,-3.88369088000218e-008,0.99619323015213,-0.173694118857384,-0.000530617660842836,0.98479950428009,-0.0871760025620461,-0.000246039213379845,0.996192753314972,-0.0871715396642685,-3.88369088000218e-008,0.99619323015213,-0.173680335283279,-6.93965063192081e-009,0.984802067279816,-0.25888004899025,-0.000228960256208666,0.965909421443939,-0.173694118857384,-0.000530617660842836,0.98479950428009,-0.173680335283279,-6.93965063192081e-009,0.984802067279816,-0.258868306875229,1.33019160131198e-008,0.965912580490112,-0.342111021280289,-0.000477634341223165,0.939659357070923,-0.25888004899025,-0.000228960256208666,0.965909421443939,-0.258868306875229,1.33019160131198e-008,0.965912580490112,-0.342086791992188,7.76351427589361e-008,0.939668297767639,-0.422717064619064,-0.000202155963052064,0.906261622905731,-0.342111021280289,-0.000477634341223165,0.939659357070923,-0.342086791992188,7.76351427589361e-008,0.939668297767639,-0.42270165681839,-1.45473251222938e-007,0.906268835067749,-0.50012868642807,-0.000412454508477822,0.8659508228302, +-0.422717064619064,-0.000202155963052064,0.906261622905731,-0.42270165681839,-1.45473251222938e-007,0.906268835067749,-0.500099658966064,-3.89354511298734e-007,0.865967929363251,-0.573705315589905,-0.000173929744050838,0.819061636924744,-0.50012868642807,-0.000412454508477822,0.8659508228302,-0.500099658966064,-3.89354511298734e-007,0.865967929363251,-0.573690235614777,-3.89684430501802e-007,0.819072246551514,-0.642901122570038,-0.000334645999828354,0.765949010848999,-0.573705315589905,-0.000173929744050838,0.819061636924744,-0.573690235614777,-3.89684430501802e-007,0.819072246551514,-0.64288991689682,1.71349729498615e-005,0.765958607196808,-0.69128429889679,-7.61363044148311e-005,0.722582817077637,-0.642901122570038,-0.000334645999828354,0.765949010848999,-0.64288991689682,1.71349729498615e-005,0.765958607196808,-0.691309571266174,3.18763341056183e-007,0.722558677196503,-0.707085013389587,-2.146810402337e-005,0.707128524780273,-0.69128429889679,-7.61363044148311e-005,0.722582817077637,-0.691309571266174,3.18763341056183e-007,0.722558677196503,-0.707074046134949,-3.52495226252358e-005,0.707139372825623,-0.707079529762268,-2.94031415251084e-005,0.707133829593658,-0.70710700750351,-2.43422903167811e-007,0.707106411457062,-0.707085013389587,-2.146810402337e-005,0.707128524780273,-0.707079529762268,-2.94031415251084e-005,0.707133829593658,-0.707107067108154,0,0.707106411457062,0.707107186317444,3.69263972288536e-007,-0.707106292247772,0.707104623317719,1.26040858958731e-005,-0.707108855247498,0.707107186317444,4.21694664964889e-007,-0.707106232643127,0.707106590270996,1.42274672043641e-007,-0.707106828689575,0.707107186317444,3.69263972288536e-007,-0.707106292247772,0.707107186317444,4.21694664964889e-007,-0.707106232643127,0.707107245922089,4.2230837493662e-007,-0.707106232643127,0.707106590270996,1.58592484922337e-007,-0.70710688829422,0.691347479820251,7.67118253861554e-005,-0.72252231836319,0.707106590270996,1.42274672043641e-007,-0.707106828689575,0.707106590270996,1.58592484922337e-007,-0.70710688829422,0.691306948661804,-6.20872029344355e-008,-0.722561120986938, +0.642951726913452,0.000354087329469621,-0.765906572341919,0.691347479820251,7.67118253861554e-005,-0.72252231836319,0.691306948661804,-6.20872029344355e-008,-0.722561120986938,0.64292186498642,-1.90611118000561e-007,-0.765931725502014,0.573717832565308,0.000174486121977679,-0.819052934646606,0.642951726913452,0.000354087329469621,-0.765906572341919,0.64292186498642,-1.90611118000561e-007,-0.765931725502014,0.573704659938812,-1.29539387216937e-007,-0.819062173366547,0.500149011611938,0.000418230716604739,-0.865939140319824,0.573717832565308,0.000174486121977679,-0.819052934646606,0.573704659938812,-1.29539387216937e-007,-0.819062173366547,0.500116527080536,0,-0.865958094596863,0.422732502222061,0.000203691961360164,-0.906254410743713,0.500149011611938,0.000418230716604739,-0.865939140319824,0.500116527080536,0,-0.865958094596863,0.422719746828079,6.01355694129779e-008,-0.906260371208191,0.342132270336151,0.000486210134113207,-0.939651727676392,0.422732502222061,0.000203691961360164,-0.906254410743713,0.422719746828079,6.01355694129779e-008,-0.906260371208191,0.342104315757751,6.69619311111092e-008,-0.939661860466003,0.258893400430679,0.000231088371947408,-0.965905725955963,0.342132270336151,0.000486210134113207,-0.939651727676392,0.342104315757751,6.69619311111092e-008,-0.939661860466003,0.258883982896805,1.03053761080218e-008,-0.965908408164978,0.173708394169807,0.000541333865839988,-0.984796941280365,0.258893400430679,0.000231088371947408,-0.965905725955963,0.258883982896805,1.03053761080218e-008,-0.965908408164978,0.173692211508751,9.04889319031099e-009,-0.984799861907959,0.0871815755963326,0.000248495460255072,-0.996192395687103,0.173708394169807,0.000541333865839988,-0.984796941280365,0.173692211508751,9.04889319031099e-009,-0.984799861907959,0.0871780663728714,5.56990009670244e-009,-0.996192693710327,1.17230980478666e-008,0.000562945730052888,-0.999999821186066,0.0871815755963326,0.000248495460255072,-0.996192395687103,0.0871780663728714,5.56990009670244e-009,-0.996192693710327,4.0552299296337e-009,3.81500603677254e-012,-0.999999940395355, +-0.0871815085411072,0.000248433614615351,-0.996192395687103,1.17230980478666e-008,0.000562945730052888,-0.999999821186066,4.0552299296337e-009,3.81500603677254e-012,-0.999999940395355,-0.0871779918670654,-4.3997662402262e-008,-0.996192693710327,-0.173708364367485,0.00054123398149386,-0.984796941280365,-0.0871815085411072,0.000248433614615351,-0.996192395687103,-0.0871779918670654,-4.3997662402262e-008,-0.996192693710327,-0.173692137002945,-6.94812172241654e-008,-0.984799861907959,-0.25889328122139,0.00023112483904697,-0.965905785560608,-0.173708364367485,0.00054123398149386,-0.984796941280365,-0.173692137002945,-6.94812172241654e-008,-0.984799861907959,-0.25888380408287,1.63037086053919e-008,-0.965908408164978,-0.34213200211525,0.000486268632812425,-0.939651727676392,-0.25889328122139,0.00023112483904697,-0.965905785560608,-0.25888380408287,1.63037086053919e-008,-0.965908408164978,-0.342104107141495,-7.59015961193654e-009,-0.939662039279938,-0.422732412815094,0.000203606527065858,-0.906254470348358,-0.34213200211525,0.000486268632812425,-0.939651727676392,-0.342104107141495,-7.59015961193654e-009,-0.939662039279938,-0.422719538211823,-4.93736322937366e-008,-0.906260371208191,-0.500148892402649,0.000418226496549323,-0.865939199924469,-0.422732412815094,0.000203606527065858,-0.906254470348358,-0.422719538211823,-4.93736322937366e-008,-0.906260371208191,-0.500116288661957,7.42986401292001e-008,-0.865958154201508,-0.573718070983887,0.00017472033505328,-0.819052696228027,-0.500148892402649,0.000418226496549323,-0.865939199924469,-0.500116288661957,7.42986401292001e-008,-0.865958154201508,-0.573704898357391,1.35362668629568e-007,-0.819061934947968,-0.642951726913452,0.000354452669853345,-0.765906572341919,-0.573718070983887,0.00017472033505328,-0.819052696228027,-0.573704898357391,1.35362668629568e-007,-0.819061934947968,-0.642921924591064,6.10663164479774e-008,-0.76593154668808,-0.691341698169708,7.67282908782363e-005,-0.722527801990509,-0.642951726913452,0.000354452669853345,-0.765906572341919,-0.642921924591064,6.10663164479774e-008,-0.76593154668808, +-0.691300690174103,-1.29587292008182e-007,-0.722567141056061,-0.70710676908493,-1.48291519508348e-007,-0.707106649875641,-0.691341698169708,7.67282908782363e-005,-0.722527801990509,-0.691300690174103,-1.29587292008182e-007,-0.722567141056061,-0.707107186317444,-2.63816531287375e-007,-0.707106292247772,-0.70710700750351,-2.1568841646058e-007,-0.707106411457062,-0.707106411457062,-1.8572363558178e-007,-0.707107067108154,-0.70710676908493,-1.48291519508348e-007,-0.707106649875641,-0.70710700750351,-2.1568841646058e-007,-0.707106411457062,-0.707106232643127,0,-0.707107245922089,0,0.999999940395355,0,0,0.999999940395355,0,0,0.999999940395355,3.72259762571048e-007,0,0.999999940395355,2.54727126502985e-007,-0.707106828689575,0,-0.707106590270996,-0.70710676908493,0,-0.70710676908493,-0.707106590270996,0,-0.707106947898865,-0.707106411457062,-1.8572363558178e-007,-0.707107067108154,0.707104921340942,-3.39268603966048e-006,0.707108557224274,0.707107841968536,0,0.70710563659668,0.707107722759247,-6.0464969919849e-008,0.707105755805969,0.707104980945587,-3.45451667271846e-006,0.707108497619629,0.707104921340942,-3.39268603966048e-006,0.707108557224274,0.707107722759247,-6.0464969919849e-008,0.707105755805969,0.707104623317719,-2.92431354864675e-006,0.707108795642853,-0.707106232643127,0,-0.707107245922089,-0.707106828689575,0,-0.707106590270996,-0.707106411457062,-1.8572363558178e-007,-0.707107067108154,0.148031264543533,-0.94388473033905,0.29524302482605,0.148031279444695,-0.94388473033905,0.29524302482605,0.100992575287819,-0.974283337593079,0.201425895094872,0.115416444838047,-0.966276109218597,0.230193823575974,0.707104623317719,1.28874571601045e-005,-0.707108914852142,0.707104623317719,1.26040858958731e-005,-0.707108855247498,0.707107186317444,3.69263972288536e-007,-0.707106292247772,0.707104980945587,1.05163881016779e-005,-0.707108438014984,-0.707105278968811,-5.42237103218213e-006,0.70710813999176,-0.707105398178101,-5.46179126104107e-006,0.707108080387115,-0.707105100154877,-3.95148617826635e-006,0.707108438014984,-0.70710700750351,-2.43422903167811e-007,0.707106411457062, +-0.707107067108154,0,0.707106411457062,-0.707105278968811,-5.42237103218213e-006,0.70710813999176,-0.70710700750351,-2.43422903167811e-007,0.707106411457062,-0.482682675123215,-0.707144021987915,0.516686320304871,-0.482623934745789,-0.707143485546112,0.516741812229156,-0.462678164243698,-0.704149782657623,0.538610994815826,-0.46243742108345,-0.704122722148895,0.538853108882904,-0.482623934745789,-0.707143485546112,0.516741812229156,-0.482682675123215,-0.707144021987915,0.516686320304871,-0.45150950551033,-0.707460343837738,0.543726861476898,-0.451509594917297,-0.707460343837738,0.543726742267609,-0.451509594917297,-0.707460343837738,0.543726742267609,-0.45150950551033,-0.707460343837738,0.543726861476898,-0.399398028850555,-0.707483649253845,0.583050608634949,-0.399397999048233,-0.70748370885849,0.583050489425659,-0.399397999048233,-0.70748370885849,0.583050489425659,-0.399398028850555,-0.707483649253845,0.583050608634949,-0.343898296356201,-0.707483470439911,0.617414653301239,-0.343898624181747,-0.707483470439911,0.617414534091949,-0.343898624181747,-0.707483470439911,0.617414534091949,-0.343898296356201,-0.707483470439911,0.617414653301239,-0.285463899374008,-0.707486212253571,0.646508693695068,-0.285463809967041,-0.707486212253571,0.646508693695068,-0.285463809967041,-0.707486212253571,0.646508693695068,-0.285463899374008,-0.707486212253571,0.646508693695068,-0.224593043327332,-0.70749032497406,0.670085966587067,-0.224592909216881,-0.707490384578705,0.670085906982422,-0.224592909216881,-0.707490384578705,0.670085906982422,-0.224593043327332,-0.70749032497406,0.670085966587067,-0.161805525422096,-0.707488656044006,0.68795245885849,-0.161805331707001,-0.707488715648651,0.687952518463135,-0.161805331707001,-0.707488715648651,0.687952518463135,-0.161805525422096,-0.707488656044006,0.68795245885849,-0.0976394414901733,-0.70748645067215,0.699949502944946,-0.0976395085453987,-0.707486510276794,0.699949502944946,-0.0976395085453987,-0.707486510276794,0.699949502944946,-0.0976394414901733,-0.70748645067215,0.699949502944946, +-0.0326396077871323,-0.707483053207397,0.705976128578186,-0.0326395854353905,-0.707483053207397,0.705976188182831,-0.0326395854353905,-0.707483053207397,0.705976188182831,-0.0326396077871323,-0.707483053207397,0.705976128578186,0.032639604061842,-0.707479774951935,0.705979406833649,0.0326395742595196,-0.707479774951935,0.705979406833649,0.0326395742595196,-0.707479774951935,0.705979406833649,0.032639604061842,-0.707479774951935,0.705979406833649,0.0976391211152077,-0.707483351230621,0.699952721595764,0.0976391807198524,-0.707483351230621,0.699952602386475,0.0976391807198524,-0.707483351230621,0.699952602386475,0.0976391211152077,-0.707483351230621,0.699952721595764,0.16180545091629,-0.707489252090454,0.687951862812042,0.161805257201195,-0.707489311695099,0.687951922416687,0.161805257201195,-0.707489311695099,0.687951922416687,0.16180545091629,-0.707489252090454,0.687951862812042,0.224591940641403,-0.707493960857391,0.670082449913025,0.224591851234436,-0.707493960857391,0.670082569122314,0.224591851234436,-0.707493960857391,0.670082569122314,0.224591940641403,-0.707493960857391,0.670082449913025,0.285461872816086,-0.707491099834442,0.646504282951355,0.285461813211441,-0.707490980625153,0.646504282951355,0.285461813211441,-0.707490980625153,0.646504282951355,0.285461872816086,-0.707491099834442,0.646504282951355,0.343897521495819,-0.70748507976532,0.617413282394409,0.343897819519043,-0.707485139369965,0.617413103580475,0.343897819519043,-0.707485139369965,0.617413103580475,0.343897521495819,-0.70748507976532,0.617413282394409,0.399399816989899,-0.707480490207672,0.583053231239319,0.399399727582932,-0.707480490207672,0.583053171634674,0.399399727582932,-0.707480490207672,0.583053171634674,0.399399816989899,-0.707480490207672,0.583053231239319,0.451515674591064,-0.707450687885284,0.543734431266785,0.451515734195709,-0.70745062828064,0.54373425245285,0.451515734195709,-0.70745062828064,0.54373425245285,0.451515674591064,-0.707450687885284,0.543734431266785,0.482688874006271,-0.707135140895844,0.516692578792572,0.482630282640457,-0.707134485244751,0.516748130321503, +0.482630282640457,-0.707134485244751,0.516748130321503,0.482688874006271,-0.707135140895844,0.516692578792572,0.462436616420746,-0.704123079776764,0.538853347301483,0.462677359580994,-0.704150140285492,0.53861129283905,-0.491028189659119,0.707340955734253,0.508487939834595,-0.490713685750961,0.707341492176056,0.508790612220764,-0.555838882923126,0.702130615711212,0.445034384727478,-0.555629551410675,0.702163457870483,0.445243865251541,-0.490713685750961,0.707341492176056,0.508790612220764,-0.491028189659119,0.707340955734253,0.508487939834595,-0.45145457983017,0.707544207572937,0.543663322925568,-0.451454341411591,0.707544267177582,0.543663561344147,-0.451454341411591,0.707544267177582,0.543663561344147,-0.45145457983017,0.707544207572937,0.543663322925568,-0.399400293827057,0.707484781742096,0.583047747612,-0.399400293827057,0.707484781742096,0.583047688007355,-0.399400293827057,0.707484781742096,0.583047688007355,-0.399400293827057,0.707484781742096,0.583047747612,-0.343899607658386,0.707481861114502,0.617415845394135,-0.34389927983284,0.707481861114502,0.617416083812714,-0.34389927983284,0.707481861114502,0.617416083812714,-0.343899607658386,0.707481861114502,0.617415845394135,-0.285463780164719,0.707486271858215,0.646508753299713,-0.285463839769363,0.707486212253571,0.646508693695068,-0.285463839769363,0.707486212253571,0.646508693695068,-0.285463780164719,0.707486271858215,0.646508753299713,-0.224591076374054,0.707484245300293,0.670093059539795,-0.224591165781021,0.707484185695648,0.67009311914444,-0.224591165781021,0.707484185695648,0.67009311914444,-0.224591076374054,0.707484245300293,0.670093059539795,-0.161803752183914,0.707482635974884,0.687959134578705,-0.161803960800171,0.707482576370239,0.687959134578705,-0.161803960800171,0.707482576370239,0.687959134578705,-0.161803752183914,0.707482635974884,0.687959134578705,-0.0976390838623047,0.707483410835266,0.699952602386475,-0.0976390168070793,0.707483410835266,0.699952602386475,-0.0976390168070793,0.707483410835266,0.699952602386475,-0.0976390838623047,0.707483410835266,0.699952602386475, +-0.0326393321156502,0.707476556301117,0.705982565879822,-0.0326393581926823,0.707476556301117,0.705982565879822,-0.0326393581926823,0.707476556301117,0.705982565879822,-0.0326393321156502,0.707476556301117,0.705982565879822,0.0326395034790039,0.70747983455658,0.705979347229004,0.0326395332813263,0.70747983455658,0.705979287624359,0.0326395332813263,0.70747983455658,0.705979287624359,0.0326395034790039,0.70747983455658,0.705979347229004,0.0976397171616554,0.707486629486084,0.699949264526367,0.0976396501064301,0.707486569881439,0.699949324131012,0.0976396501064301,0.707486569881439,0.699949324131012,0.0976397171616554,0.707486629486084,0.699949264526367,0.161803841590881,0.707482576370239,0.687959134578705,0.161804065108299,0.707482576370239,0.68795907497406,0.161804065108299,0.707482576370239,0.68795907497406,0.161803841590881,0.707482576370239,0.687959134578705,0.224590092897415,0.707487523555756,0.670090019702911,0.224590212106705,0.707487463951111,0.670089960098267,0.224590212106705,0.707487463951111,0.670089960098267,0.224590092897415,0.707487523555756,0.670090019702911,0.28546130657196,0.70748645067215,0.64650958776474,0.285461366176605,0.70748645067215,0.646509408950806,0.285461366176605,0.70748645067215,0.646509408950806,0.28546130657196,0.70748645067215,0.64650958776474,0.343898177146912,0.707479059696198,0.617419958114624,0.343897759914398,0.707479000091553,0.617420077323914,0.343897759914398,0.707479000091553,0.617420077323914,0.343898177146912,0.707479059696198,0.617419958114624,0.399403661489487,0.707484185695648,0.583046019077301,0.399403691291809,0.707484185695648,0.583045959472656,0.399403691291809,0.707484185695648,0.583045959472656,0.399403661489487,0.707484185695648,0.583046019077301,0.451460331678391,0.707540273666382,0.543663859367371,0.451460063457489,0.707540214061737,0.543664038181305,0.451460063457489,0.707540214061737,0.543664038181305,0.451460331678391,0.707540273666382,0.543663859367371,0.491029798984528,0.70733505487442,0.508494436740875,0.490715384483337,0.707335591316223,0.5087970495224, +0.490715384483337,0.707335591316223,0.5087970495224,0.491029798984528,0.70733505487442,0.508494436740875,0.555630207061768,0.702166140079498,0.445238828659058,0.555839478969574,0.702133297920227,0.445029199123383,0.492509990930557,0.684213042259216,-0.537853479385376,0.492175161838531,0.686408638954163,-0.535356521606445,0.48941445350647,0.689920663833618,-0.533369302749634,0.45203822851181,0.691637694835663,-0.563292682170868,0.444328039884567,0.702110469341278,-0.556428968906403,0.451279312372208,0.707483410835266,-0.543888032436371,0.45127934217453,0.707483410835266,-0.543887794017792,0.399398952722549,0.707484126091003,-0.583049297332764,0.399398982524872,0.707484185695648,-0.583049297332764,0.399398982524872,0.707484185695648,-0.583049297332764,0.399398952722549,0.707484126091003,-0.583049297332764,0.343897670507431,0.707486629486084,-0.617411553859711,0.343897700309753,0.707486629486084,-0.617411434650421,0.343897700309753,0.707486629486084,-0.617411434650421,0.343897670507431,0.707486629486084,-0.617411553859711,0.285462141036987,0.707481145858765,-0.646515071392059,0.285462111234665,0.707481145858765,-0.646515071392059,0.285462111234665,0.707481145858765,-0.646515071392059,0.285462141036987,0.707481145858765,-0.646515071392059,0.224592670798302,0.707483351230621,-0.670093595981598,0.224592655897141,0.707483291625977,-0.670093595981598,0.224592655897141,0.707483291625977,-0.670093595981598,0.224592670798302,0.707483351230621,-0.670093595981598,0.16180631518364,0.707487761974335,-0.687953293323517,0.161806464195251,0.70748770236969,-0.687953233718872,0.161806464195251,0.70748770236969,-0.687953233718872,0.16180631518364,0.707487761974335,-0.687953293323517,0.0976399630308151,0.70748895406723,-0.699946880340576,0.0976398959755898,0.70748895406723,-0.699946939945221,0.0976398959755898,0.70748895406723,-0.699946939945221,0.0976399630308151,0.70748895406723,-0.699946880340576,0.0326396860182285,0.707491099834442,-0.705968081951141,0.0326397009193897,0.707491040229797,-0.705968081951141,0.0326397009193897,0.707491040229797,-0.705968081951141, +0.0326396860182285,0.707491099834442,-0.705968081951141,-0.0326396822929382,0.70748770236969,-0.705971479415894,-0.0326397009193897,0.70748770236969,-0.705971479415894,-0.0326397009193897,0.70748770236969,-0.705971479415894,-0.0326396822929382,0.70748770236969,-0.705971479415894,-0.0976395159959793,0.707485616207123,-0.699950337409973,-0.0976394489407539,0.707485556602478,-0.699950397014618,-0.0976394489407539,0.707485556602478,-0.699950397014618,-0.0976395159959793,0.707485616207123,-0.699950337409973,-0.161806434392929,0.70748770236969,-0.687953293323517,-0.161806598305702,0.70748770236969,-0.687953174114227,-0.161806598305702,0.70748770236969,-0.687953174114227,-0.161806434392929,0.70748770236969,-0.687953293323517,-0.224592253565788,0.707485020160675,-0.670091986656189,-0.224592268466949,0.707485020160675,-0.670091986656189,-0.224592268466949,0.707485020160675,-0.670091986656189,-0.224592253565788,0.707485020160675,-0.670091986656189,-0.285460650920868,0.707484424114227,-0.646512091159821,-0.285460650920868,0.707484364509583,-0.646512150764465,-0.285460650920868,0.707484364509583,-0.646512150764465,-0.285460650920868,0.707484424114227,-0.646512091159821,-0.343896865844727,0.707488298416138,-0.617410004138947,-0.343896925449371,0.707488238811493,-0.617409944534302,-0.343896925449371,0.707488238811493,-0.617409944534302,-0.343896865844727,0.707488298416138,-0.617410004138947,-0.399399161338806,0.707484066486359,-0.583049297332764,-0.399399131536484,0.707484126091003,-0.583049237728119,-0.399399131536484,0.707484126091003,-0.583049237728119,-0.399399161338806,0.707484066486359,-0.583049297332764,-0.451279908418655,0.707477390766144,-0.543895244598389,-0.451279759407043,0.707477390766144,-0.543895304203033,-0.451279759407043,0.707477390766144,-0.543895304203033,-0.451279908418655,0.707477390766144,-0.543895244598389,-0.492512315511703,0.684202611446381,-0.537864506244659,-0.672601997852325,0.0576485246419907,-0.737755477428436,0.485205411911011,-0.707231462001801,-0.514197587966919,0.485205441713333,-0.707231462001801,-0.514197647571564, +0.538861453533173,-0.704083323478699,-0.462487757205963,0.538620114326477,-0.704109966754913,-0.462728232145309,0.485205441713333,-0.707231462001801,-0.514197647571564,0.485205411911011,-0.707231462001801,-0.514197587966919,0.451475888490677,-0.707506239414215,-0.543695092201233,0.451475918292999,-0.707506239414215,-0.543694913387299,0.451475918292999,-0.707506239414215,-0.543694913387299,0.451475888490677,-0.707506239414215,-0.543695092201233,0.399399042129517,-0.707484126091003,-0.583049237728119,0.399399042129517,-0.707484126091003,-0.583049297332764,0.399399042129517,-0.707484126091003,-0.583049297332764,0.399399042129517,-0.707484126091003,-0.583049237728119,0.343897670507431,-0.707486569881439,-0.617411494255066,0.343897610902786,-0.707486569881439,-0.617411613464355,0.343897610902786,-0.707486569881439,-0.617411613464355,0.343897670507431,-0.707486569881439,-0.617411494255066,0.285463213920593,-0.707484126091003,-0.646511256694794,0.285463213920593,-0.707484126091003,-0.646511256694794,0.285463213920593,-0.707484126091003,-0.646511256694794,0.285463213920593,-0.707484126091003,-0.646511256694794,0.224592715501785,-0.707483291625977,-0.670093536376953,0.224592760205269,-0.707483351230621,-0.670093536376953,0.224592760205269,-0.707483351230621,-0.670093536376953,0.224592715501785,-0.707483291625977,-0.670093536376953,0.161806359887123,-0.70748770236969,-0.687953233718872,0.161806181073189,-0.707487761974335,-0.687953233718872,0.161806181073189,-0.707487761974335,-0.687953233718872,0.161806359887123,-0.70748770236969,-0.687953233718872,0.0976390540599823,-0.707482278347015,-0.69995379447937,0.0976391285657883,-0.707482278347015,-0.69995379447937,0.0976391285657883,-0.707482278347015,-0.69995379447937,0.0976390540599823,-0.707482278347015,-0.69995379447937,0.0326391458511353,-0.707477629184723,-0.705981552600861,0.0326391309499741,-0.707477688789368,-0.705981552600861,0.0326391309499741,-0.707477688789368,-0.705981552600861,0.0326391458511353,-0.707477629184723,-0.705981552600861,-0.0326393321156502,-0.707481026649475,-0.705978155136108, +-0.0326393060386181,-0.707481026649475,-0.705978155136108,-0.0326393060386181,-0.707481026649475,-0.705978155136108,-0.0326393321156502,-0.707481026649475,-0.705978155136108,-0.0976395606994629,-0.707485616207123,-0.699950397014618,-0.0976396203041077,-0.707485616207123,-0.699950337409973,-0.0976396203041077,-0.707485616207123,-0.699950337409973,-0.0976395606994629,-0.707485616207123,-0.699950397014618,-0.161806508898735,-0.70748770236969,-0.687953233718872,-0.161806344985962,-0.70748770236969,-0.687953293323517,-0.161806344985962,-0.70748770236969,-0.687953293323517,-0.161806508898735,-0.70748770236969,-0.687953233718872,-0.224592357873917,-0.70748496055603,-0.670091867446899,-0.224592357873917,-0.707485020160675,-0.670091986656189,-0.224592357873917,-0.707485020160675,-0.670091986656189,-0.224592357873917,-0.70748496055603,-0.670091867446899,-0.285461902618408,-0.707487404346466,-0.64650821685791,-0.285461962223053,-0.707487463951111,-0.64650821685791,-0.285461962223053,-0.707487463951111,-0.64650821685791,-0.285461902618408,-0.707487404346466,-0.64650821685791,-0.343896865844727,-0.707488238811493,-0.617410063743591,-0.343896836042404,-0.707488238811493,-0.617410123348236,-0.343896836042404,-0.707488238811493,-0.617410123348236,-0.343896865844727,-0.707488238811493,-0.617410063743591,-0.399399310350418,-0.707484126091003,-0.583049178123474,-0.399399250745773,-0.707484126091003,-0.583049178123474,-0.399399250745773,-0.707484126091003,-0.583049178123474,-0.399399310350418,-0.707484126091003,-0.583049178123474,-0.451476335525513,-0.707500338554382,-0.543702244758606,-0.451476484537125,-0.707500338554382,-0.543702304363251,-0.451476484537125,-0.707500338554382,-0.543702304363251,-0.451476335525513,-0.707500338554382,-0.543702244758606,-0.48520627617836,-0.707219898700714,-0.514212667942047,-0.485206335783005,-0.707219898700714,-0.514212608337402,-0.485206335783005,-0.707219898700714,-0.514212608337402,-0.48520627617836,-0.707219898700714,-0.514212667942047,-0.538620173931122,-0.704100966453552,-0.462741851806641,-0.538861453533173,-0.704074323177338,-0.462501347064972, +-0.490708649158478,-0.707344949245453,0.508790791034698,-0.491022944450378,-0.707344353199005,0.508488237857819,-0.555616497993469,-0.702168345451355,0.445252478122711,-0.555825233459473,-0.702135622501373,0.445043534040451,-0.491022944450378,-0.707344353199005,0.508488237857819,-0.490708649158478,-0.707344949245453,0.508790791034698,-0.451454043388367,-0.707546710968018,0.543660521507263,-0.451454281806946,-0.707546710968018,0.543660342693329,-0.451454281806946,-0.707546710968018,0.543660342693329,-0.451454043388367,-0.707546710968018,0.543660521507263,-0.399396270513535,-0.707487523555756,0.583046972751617,-0.399396300315857,-0.7074875831604,0.583047091960907,-0.399396300315857,-0.7074875831604,0.583047091960907,-0.399396270513535,-0.707487523555756,0.583046972751617,-0.343895494937897,-0.707488059997559,0.617411077022552,-0.343895763158798,-0.707488000392914,0.617410957813263,-0.343895763158798,-0.707488000392914,0.617410957813263,-0.343895494937897,-0.707488059997559,0.617411077022552,-0.285460829734802,-0.707489311695099,0.646506726741791,-0.28546068072319,-0.707489311695099,0.646506726741791,-0.28546068072319,-0.707489311695099,0.646506726741791,-0.285460829734802,-0.707489311695099,0.646506726741791,-0.224590182304382,-0.707492232322693,0.670084953308105,-0.224590063095093,-0.707492232322693,0.670085072517395,-0.224590063095093,-0.707492232322693,0.670085072517395,-0.224590182304382,-0.707492232322693,0.670084953308105,-0.161804422736168,-0.707492291927338,0.687948942184448,-0.161804184317589,-0.707492291927338,0.687949001789093,-0.161804184317589,-0.707492291927338,0.687949001789093,-0.161804422736168,-0.707492291927338,0.687948942184448,-0.0976386591792107,-0.707485198974609,0.699950873851776,-0.0976388975977898,-0.707485258579254,0.699950814247131,-0.0976388975977898,-0.707485258579254,0.699950814247131,-0.0976386591792107,-0.707485198974609,0.699950873851776,-0.0326391533017159,-0.707480251789093,0.70597892999649,-0.0326391533017159,-0.707480192184448,0.705978989601135,-0.0326391533017159,-0.707480192184448,0.705978989601135, +-0.0326391533017159,-0.707480251789093,0.70597892999649,0.0326396264135838,-0.707479596138,0.705979585647583,0.0326396226882935,-0.707479596138,0.705979466438293,0.0326396226882935,-0.707479596138,0.705979466438293,0.0326396264135838,-0.707479596138,0.705979585647583,0.0976387113332748,-0.707483947277069,0.699952065944672,0.0976389721035957,-0.707484006881714,0.699952125549316,0.0976389721035957,-0.707484006881714,0.699952125549316,0.0976387113332748,-0.707483947277069,0.699952065944672,0.161804437637329,-0.707491278648376,0.687950015068054,0.161804258823395,-0.707491278648376,0.687950074672699,0.161804258823395,-0.707491278648376,0.687950074672699,0.161804437637329,-0.707491278648376,0.687950015068054,0.224590614438057,-0.707491755485535,0.670085251331329,0.224590420722961,-0.707491815090179,0.670085370540619,0.224590420722961,-0.707491815090179,0.670085370540619,0.224590614438057,-0.707491755485535,0.670085251331329,0.285460859537125,-0.707489371299744,0.646506607532501,0.285460859537125,-0.707489371299744,0.646506607532501,0.285460859537125,-0.707489371299744,0.646506607532501,0.285460859537125,-0.707489371299744,0.646506607532501,0.343896389007568,-0.707486391067505,0.617412328720093,0.343896567821503,-0.70748645067215,0.617412209510803,0.343896567821503,-0.70748645067215,0.617412209510803,0.343896389007568,-0.707486391067505,0.617412328720093,0.399399101734161,-0.707482814788818,0.583050787448883,0.399399101734161,-0.707482755184174,0.583050906658173,0.399399101734161,-0.707482755184174,0.583050906658173,0.399399101734161,-0.707482814788818,0.583050787448883,0.451458275318146,-0.707540273666382,0.543665289878845,0.451458424329758,-0.707540273666382,0.543665111064911,0.451458424329758,-0.707540273666382,0.543665111064911,0.451458275318146,-0.707540273666382,0.543665289878845,0.490713208913803,-0.707338452339172,0.508795440196991,0.491027504205704,-0.707337915897369,0.508492887020111,0.491027504205704,-0.707337915897369,0.508492887020111,0.490713208913803,-0.707338452339172,0.508795440196991,0.555825591087341,-0.702135443687439,0.445043385028839, +0.555616974830627,-0.702167987823486,0.445252269506454,-0.482619643211365,0.70714259147644,0.516747176647186,-0.482678234577179,0.707143068313599,0.5166916847229,-0.462437093257904,0.704125642776489,0.538849651813507,-0.462677299976349,0.704152524471283,0.538608074188232,-0.482678234577179,0.707143068313599,0.5166916847229,-0.482619643211365,0.70714259147644,0.516747176647186,-0.451510667800903,0.707462072372437,0.543723702430725,-0.451510548591614,0.707462072372437,0.54372376203537,-0.451510548591614,0.707462072372437,0.54372376203537,-0.451510667800903,0.707462072372437,0.543723702430725,-0.399397850036621,0.707484841346741,0.583049237728119,-0.399397909641266,0.707484841346741,0.583049178123474,-0.399397909641266,0.707484841346741,0.583049178123474,-0.399397850036621,0.707484841346741,0.583049237728119,-0.343897521495819,0.707485139369965,0.617413222789764,-0.343897223472595,0.707485198974609,0.617413282394409,-0.343897223472595,0.707485198974609,0.617413282394409,-0.343897521495819,0.707485139369965,0.617413222789764,-0.285461217164993,0.707488715648651,0.646507084369659,-0.285461366176605,0.707488775253296,0.646507024765015,-0.285461366176605,0.707488775253296,0.646507024765015,-0.285461217164993,0.707488715648651,0.646507084369659,-0.224590063095093,0.707491397857666,0.670085906982422,-0.224590227007866,0.707491397857666,0.670085906982422,-0.224590227007866,0.707491397857666,0.670085906982422,-0.224590063095093,0.707491397857666,0.670085906982422,-0.161805585026741,0.70748382806778,0.687957465648651,-0.161805808544159,0.70748382806778,0.687957346439362,-0.161805808544159,0.70748382806778,0.687957346439362,-0.161805585026741,0.70748382806778,0.687957465648651,-0.0976404920220375,0.707474589347839,0.699961364269257,-0.097640261054039,0.707474529743195,0.699961364269257,-0.097640261054039,0.707474529743195,0.699961364269257,-0.0976404920220375,0.707474589347839,0.699961364269257,-0.0326396152377129,0.707477152347565,0.705982029438019,-0.0326396189630032,0.707477152347565,0.705982029438019,-0.0326396189630032,0.707477152347565,0.705982029438019, +-0.0326396152377129,0.707477152347565,0.705982029438019,0.0326400808990002,0.707476913928986,0.705982148647308,0.0326400920748711,0.707476913928986,0.705982208251953,0.0326400920748711,0.707476913928986,0.705982208251953,0.0326400808990002,0.707476913928986,0.705982148647308,0.0976406112313271,0.707473814487457,0.699962198734283,0.0976403802633286,0.707473814487457,0.699962198734283,0.0976403802633286,0.707473814487457,0.699962198734283,0.0976406112313271,0.707473814487457,0.699962198734283,0.161805495619774,0.707483291625977,0.687958002090454,0.161805674433708,0.707483232021332,0.687958002090454,0.161805674433708,0.707483232021332,0.687958002090454,0.161805495619774,0.707483291625977,0.687958002090454,0.224590346217155,0.707491338253021,0.670085966587067,0.22459052503109,0.707491278648376,0.670085787773132,0.22459052503109,0.707491278648376,0.670085787773132,0.224590346217155,0.707491338253021,0.670085966587067,0.285461336374283,0.707488715648651,0.646507084369659,0.285461395978928,0.707488656044006,0.646507084369659,0.285461395978928,0.707488656044006,0.646507084369659,0.285461336374283,0.707488715648651,0.646507084369659,0.343898355960846,0.7074835896492,0.617414712905884,0.343898147344589,0.707483530044556,0.617414712905884,0.343898147344589,0.707483530044556,0.617414712905884,0.343898355960846,0.7074835896492,0.617414712905884,0.399400651454926,0.707479953765869,0.583053171634674,0.39940071105957,0.707479953765869,0.583053231239319,0.39940071105957,0.707479953765869,0.583053231239319,0.399400651454926,0.707479953765869,0.583053171634674,0.451516956090927,0.707452297210693,0.543731212615967,0.451516836881638,0.707452356815338,0.543731272220612,0.451516836881638,0.707452356815338,0.543731272220612,0.451516956090927,0.707452297210693,0.543731212615967,0.482624351978302,0.707135796546936,0.516751945018768,0.482682943344116,0.707136392593384,0.516696393489838,0.482682943344116,0.707136392593384,0.516696393489838,0.482624351978302,0.707135796546936,0.516751945018768,0.462674260139465,0.704156100749969,0.538606107234955, +0.462434142827988,0.704129159450531,0.538847506046295,0.555839478969574,0.702133297920227,0.445029199123383,0.555630207061768,0.702166140079498,0.445238828659058,0.646781265735626,0.674310505390167,0.356341451406479,0.647080957889557,0.674181699752808,0.356041133403778,0.462677359580994,-0.704150140285492,0.53861129283905,0.462436616420746,-0.704123079776764,0.538853347301483,0.367919534444809,-0.678227782249451,0.63611501455307,0.368299216032028,-0.678379058837891,0.635733783245087,-0.538861453533173,-0.704074323177338,-0.462501347064972,-0.538620173931122,-0.704100966453552,-0.462741851806641,-0.635725319385529,-0.678380966186523,-0.368310183286667,-0.636106729507446,-0.678229570388794,-0.367930442094803,0.647080957889557,0.674181699752808,0.356041133403778,0.646781265735626,0.674310505390167,0.356341451406479,0.763977825641632,0.598722517490387,0.240560382604599,0.764238059520721,0.598495185375214,0.240298956632614,0.368299216032028,-0.678379058837891,0.635733783245087,0.367919534444809,-0.678227782249451,0.63611501455307,0.243654876947403,-0.600365698337555,0.761704206466675,0.243992671370506,-0.600655198097229,0.761367619037628,-0.636106729507446,-0.678229570388794,-0.367930442094803,-0.635725319385529,-0.678380966186523,-0.368310183286667,-0.76137363910675,-0.600646376609802,-0.243995875120163,-0.761708855628967,-0.600357830524445,-0.243659362196922,-0.355662167072296,0.674020230770111,-0.647457301616669,-0.355361133813858,0.673891007900238,-0.647757112979889,-0.240291401743889,0.59849601984024,-0.764239728450775,-0.240552306175232,0.5987229347229,-0.763979852199554,0.764238059520721,0.598495185375214,0.240298956632614,0.763977825641632,0.598722517490387,0.240560382604599,0.867361903190613,0.478563070297241,0.136603727936745,0.867511212825775,0.478335291147232,0.136453449726105,0.243992671370506,-0.600655198097229,0.761367619037628,0.243654876947403,-0.600365698337555,0.761704206466675,0.136167392134666,-0.477284878492355,0.868134498596191,0.13635079562664,-0.477561771869659,0.867953419685364,-0.761708855628967,-0.600357830524445,-0.243659362196922, +-0.76137363910675,-0.600646376609802,-0.243995875120163,-0.867954254150391,-0.47756227850914,-0.136343687772751,-0.868135333061218,-0.477285325527191,-0.136160209774971,-0.240552306175232,0.5987229347229,-0.763979852199554,-0.240291401743889,0.59849601984024,-0.764239728450775,-0.136455118656158,0.478327333927155,-0.867515325546265,-0.136605381965637,0.478555142879486,-0.867365896701813,0.867511212825775,0.478335291147232,0.136453449726105,0.867361903190613,0.478563070297241,0.136603727936745,0.935613811016083,0.346612423658371,0.066982589662075,0.935676693916321,0.346454679965973,0.0669191628694534,0.13635079562664,-0.477561771869659,0.867953419685364,0.136167392134666,-0.477284878492355,0.868134498596191,0.0670884549617767,-0.346478641033173,0.93565571308136,0.0671620815992355,-0.346660047769547,0.935583293437958,-0.868135333061218,-0.477285325527191,-0.136160209774971,-0.867954254150391,-0.47756227850914,-0.136343687772751,-0.935582756996155,-0.346665799617767,-0.0671387538313866,-0.935654819011688,-0.346485435962677,-0.0670655369758606,-0.136605381965637,0.478555142879486,-0.867365896701813,-0.136455118656158,0.478327333927155,-0.867515325546265,-0.0669071078300476,0.346446961164474,-0.935680329799652,-0.0669702365994453,0.346603840589523,-0.935617804527283,0.935676693916321,0.346454679965973,0.0669191628694534,0.935613811016083,0.346612423658371,0.066982589662075,0.97310471534729,0.228593811392784,0.0284943804144859,0.973126292228699,0.228505045175552,0.0284727178514004,0.0671620815992355,-0.346660047769547,0.935583293437958,0.0670884549617767,-0.346478641033173,0.93565571308136,0.0289592538028955,-0.230122402310371,0.97273063659668,0.0289838071912527,-0.230221375823021,0.972706496715546,-0.935654819011688,-0.346485435962677,-0.0670655369758606,-0.935582756996155,-0.346665799617767,-0.0671387538313866,-0.972706973552704,-0.230220392346382,-0.0289766993373632,-0.972730994224548,-0.23012176156044,-0.0289522744715214,-0.0669702365994453,0.346603840589523,-0.935617804527283,-0.0669071078300476,0.346446961164474,-0.935680329799652, +-0.0284632407128811,0.228499710559845,-0.973127782344818,-0.0284849293529987,0.228588730096817,-0.973106205463409,0.973126292228699,0.228505045175552,0.0284727178514004,0.97310471534729,0.228593811392784,0.0284943804144859,0.991605937480927,0.128948703408241,0.00947749987244606,0.99161159992218,0.128905266523361,0.00947175268083811,0.0289838071912527,-0.230221375823021,0.972706496715546,0.0289592538028955,-0.230122402310371,0.97273063659668,0.00974462553858757,-0.130555152893066,0.991393089294434,0.00975100509822369,-0.130602493882179,0.991386711597443,-0.972730994224548,-0.23012176156044,-0.0289522744715214,-0.972706973552704,-0.230220392346382,-0.0289766993373632,-0.991386771202087,-0.130602493882179,-0.00975536648184061,-0.991393089294434,-0.13055507838726,-0.00974896550178528,-0.0284849293529987,0.228588730096817,-0.973106205463409,-0.0284632407128811,0.228499710559845,-0.973127782344818,-0.00947134848684072,0.128903016448021,-0.991611957550049,-0.00947711803019047,0.128946557641029,-0.99160623550415,0.99161159992218,0.128905266523361,0.00947175268083811,0.991605937480927,0.128948703408241,0.00947749987244606,0.999132513999939,0.0416060276329517,0.00174752261955291,0.999133050441742,0.0415931269526482,0.00174698082264513,0.00975100509822369,-0.130602493882179,0.991386711597443,0.00974462553858757,-0.130555152893066,0.991393089294434,0.00182107579894364,-0.0422462821006775,0.999105513095856,0.00182168453466147,-0.0422604791820049,0.999104917049408,-0.991393089294434,-0.13055507838726,-0.00974896550178528,-0.991386771202087,-0.130602493882179,-0.00975536648184061,-0.999105036258698,-0.0422580614686012,-0.00181378703564405,-0.999105632305145,-0.0422439277172089,-0.00181318039540201,-0.00947711803019047,0.128946557641029,-0.99160623550415,-0.00947134848684072,0.128903016448021,-0.991611957550049,-0.00174250791314989,0.0415908098220825,-0.999133050441742,-0.00174304447136819,0.0416036210954189,-0.999132633209229,0.999133050441742,0.0415931269526482,0.00174698082264513,0.999132513999939,0.0416060276329517,0.00174752261955291, +0.999132633209229,-0.0416023582220078,0.00175211823079735,0.999133110046387,-0.0415894985198975,0.00175157631747425,0.00182168453466147,-0.0422604791820049,0.999104917049408,0.00182107579894364,-0.0422462821006775,0.999105513095856,0.00181142590008676,0.0422468520700932,0.999105513095856,0.00181203021202236,0.0422610193490982,0.999104917049408,-0.999105632305145,-0.0422439277172089,-0.00181318039540201,-0.999105036258698,-0.0422580614686012,-0.00181378703564405,-0.999104857444763,0.0422600768506527,-0.001813834765926,-0.9991055727005,0.0422459281980991,-0.00181322731077671,-0.00174304447136819,0.0416036210954189,-0.999132633209229,-0.00174250791314989,0.0415908098220825,-0.999133050441742,-0.00174247135873884,-0.0415926389396191,-0.999133050441742,-0.00174301140941679,-0.0416055358946323,-0.999132513999939,0.999133110046387,-0.0415894985198975,0.00175157631747425,0.999132633209229,-0.0416023582220078,0.00175211823079735,0.991606831550598,-0.128941357135773,0.00948478560894728,0.991612434387207,-0.128898039460182,0.00947905890643597,0.00181203021202236,0.0422610193490982,0.999104917049408,0.00181142590008676,0.0422468520700932,0.999105513095856,0.00973523780703545,0.130556628108025,0.991393029689789,0.00974164064973593,0.130604073405266,0.991386711597443,-0.9991055727005,0.0422459281980991,-0.00181322731077671,-0.999104857444763,0.0422600768506527,-0.001813834765926,-0.991386771202087,0.13060274720192,-0.00975304469466209,-0.991393029689789,0.130555689334869,-0.00974669400602579,-0.00174301140941679,-0.0416055358946323,-0.999132513999939,-0.00174247135873884,-0.0415926389396191,-0.999133050441742,-0.00946606509387493,-0.128904193639755,-0.991611838340759,-0.00947175361216068,-0.128947168588638,-0.991606175899506,0.991612434387207,-0.128898039460182,0.00947905890643597,0.991606831550598,-0.128941357135773,0.00948478560894728,0.973105669021606,-0.228590488433838,0.0284895580261946,0.97312718629837,-0.228501483798027,0.028467858210206,0.00974164064973593,0.130604073405266,0.991386711597443,0.00973523780703545,0.130556628108025,0.991393029689789, +0.0289422981441021,0.230125471949577,0.972730457782745,0.0289668049663305,0.230224370956421,0.972706377506256,-0.991393029689789,0.130555689334869,-0.00974669400602579,-0.991386771202087,0.13060274720192,-0.00975304469466209,-0.972706139087677,0.230224296450615,-0.028973700478673,-0.972730100154877,0.23012563586235,-0.0289492662996054,-0.00947175361216068,-0.128947168588638,-0.991606175899506,-0.00946606509387493,-0.128904193639755,-0.991611838340759,-0.0284691285341978,-0.228503823280334,-0.973126530647278,-0.028490761294961,-0.228592485189438,-0.973105192184448,0.97312718629837,-0.228501483798027,0.028467858210206,0.973105669021606,-0.228590488433838,0.0284895580261946,0.935613334178925,-0.346615195274353,0.0669738128781319,0.935676336288452,-0.346457093954086,0.0669102221727371,0.0289668049663305,0.230224370956421,0.972706377506256,0.0289422981441021,0.230125471949577,0.972730457782745,0.0670647472143173,0.346484035253525,0.935655415058136,0.0671381130814552,0.346664696931839,0.935583114624023,-0.972730100154877,0.23012563586235,-0.0289492662996054,-0.972706139087677,0.230224296450615,-0.028973700478673,-0.935579419136047,0.346673756837845,-0.0671428218483925,-0.935651838779449,0.346492767333984,-0.0670693293213844,-0.028490761294961,-0.228592485189438,-0.973105192184448,-0.0284691285341978,-0.228503823280334,-0.973126530647278,-0.066919669508934,-0.346451938152313,-0.935677707195282,-0.0669831559062004,-0.346609771251678,-0.935614764690399,0.935676336288452,-0.346457093954086,0.0669102221727371,0.935613334178925,-0.346615195274353,0.0669738128781319,0.867364585399628,-0.478558778762817,0.136602118611336,0.867514252662659,-0.478330314159393,0.136451378464699,0.0671381130814552,0.346664696931839,0.935583114624023,0.0670647472143173,0.346484035253525,0.935655415058136,0.136157229542732,0.477284908294678,0.868136048316956,0.13634081184864,0.477562010288239,0.867954730987549,-0.935651838779449,0.346492767333984,-0.0670693293213844,-0.935579419136047,0.346673756837845,-0.0671428218483925,-0.867949724197388,0.477568715810776,-0.136349186301231, +-0.868131399154663,0.477291315793991,-0.136165350675583,-0.0669831559062004,-0.346609771251678,-0.935614764690399,-0.066919669508934,-0.346451938152313,-0.935677707195282,-0.136460855603218,-0.478334665298462,-0.867510378360748,-0.136611521244049,-0.478563070297241,-0.867360591888428,0.867514252662659,-0.478330314159393,0.136451378464699,0.867364585399628,-0.478558778762817,0.136602118611336,0.763979136943817,-0.598723530769348,0.240553230047226,0.764239847660065,-0.598495960235596,0.240291595458984,0.13634081184864,0.477562010288239,0.867954730987549,0.136157229542732,0.477284908294678,0.868136048316956,0.243649542331696,0.600366830825806,0.761704981327057,0.243986308574677,0.600655555725098,0.761369526386261,-0.868131399154663,0.477291315793991,-0.136165350675583,-0.867949724197388,0.477568715810776,-0.136349186301231,-0.761376917362213,0.60064297914505,-0.243994191288948,-0.761711835861206,0.600354671478271,-0.24365796148777,-0.136611521244049,-0.478563070297241,-0.867360591888428,-0.136460855603218,-0.478334665298462,-0.867510378360748,-0.240297332406044,-0.598501443862915,-0.764233648777008,-0.240558624267578,-0.598728597164154,-0.763973593711853,0.764239847660065,-0.598495960235596,0.240291595458984,0.763979136943817,-0.598723530769348,0.240553230047226,0.646768093109131,-0.674321353435516,0.356344789266586,0.647067368030548,-0.674192726612091,0.356044828891754,0.243986308574677,0.600655555725098,0.761369526386261,0.243649542331696,0.600366830825806,0.761704981327057,0.367922902107239,0.678237318992615,0.636102855205536,0.368302822113037,0.678388774394989,0.635721266269684,-0.761711835861206,0.600354671478271,-0.24365796148777,-0.761376917362213,0.60064297914505,-0.243994191288948,-0.635726988315582,0.678381860256195,-0.368305683135986,-0.636108636856079,0.678230285644531,-0.367925703525543,-0.240558624267578,-0.598728597164154,-0.763973593711853,-0.240297332406044,-0.598501443862915,-0.764233648777008,-0.356044232845306,-0.674181401729584,-0.647079527378082,-0.35634458065033,-0.674310207366943,-0.646779835224152, +0.647067368030548,-0.674192726612091,0.356044828891754,0.646768093109131,-0.674321353435516,0.356344789266586,0.555616974830627,-0.702167987823486,0.445252269506454,0.555825591087341,-0.702135443687439,0.445043385028839,0.368302822113037,0.678388774394989,0.635721266269684,0.367922902107239,0.678237318992615,0.636102855205536,0.462434142827988,0.704129159450531,0.538847506046295,0.462674260139465,0.704156100749969,0.538606107234955,-0.636108636856079,0.678230285644531,-0.367925703525543,-0.635726988315582,0.678381860256195,-0.368305683135986,-0.538595020771027,0.704161822795868,-0.462678611278534,-0.538836717605591,0.70413476228714,-0.46243816614151,-0.35634458065033,-0.674310207366943,-0.646779835224152,-0.356044232845306,-0.674181401729584,-0.647079527378082,-0.445027619600296,-0.702146172523499,-0.555824637413025,-0.445236682891846,-0.702179074287415,-0.555615544319153,-0.538836717605591,0.70413476228714,-0.46243816614151,-0.538595020771027,0.704161822795868,-0.462678611278534,-0.503736972808838,0.707155406475067,-0.496165454387665,-0.503736913204193,0.707155406475067,-0.496165335178375,-0.445236682891846,-0.702179074287415,-0.555615544319153,-0.445027619600296,-0.702146172523499,-0.555824637413025,-0.478407740592957,-0.706670224666595,-0.521289885044098,-0.478407740592957,-0.706670224666595,-0.521289825439453,0.522558391094208,0.707105398178101,-0.476376414299011,0.522558450698853,0.707105398178101,-0.476376444101334,0.447547346353531,0.710118055343628,-0.543538093566895,0.447546601295471,0.710118114948273,-0.543538749217987,0.522561967372894,-0.707101583480835,-0.476378172636032,0.522562026977539,-0.70710164308548,-0.476378202438354,0.447548866271973,-0.710114479064941,-0.543541491031647,0.447549641132355,-0.710114479064941,-0.543540835380554,-0.555629551410675,0.702163457870483,0.445243865251541,-0.555838882923126,0.702130615711212,0.445034384727478,-0.647075414657593,0.674181759357452,0.356050878763199,-0.646775722503662,0.674310624599457,0.356351345777512,0.444328039884567,0.702110469341278,-0.556428968906403, +0.45203822851181,0.691637694835663,-0.563292682170868,0.69258052110672,0.066249705851078,-0.718291759490967,0.355665177106857,0.674006164073944,-0.647470235824585,0.355364739894867,0.67387717962265,-0.647769451141357,0.538620114326477,-0.704109966754913,-0.462728232145309,0.538861453533173,-0.704083323478699,-0.462487757205963,0.63610714673996,-0.678232371807098,-0.367924362421036,0.635725915431976,-0.678383886814117,-0.368304044008255,-0.46243742108345,-0.704122722148895,0.538853108882904,-0.462678164243698,-0.704149782657623,0.538610994815826,-0.368305861949921,-0.678377330303192,0.635731756687164,-0.367926150560379,-0.678225874900818,0.636113047599792,-0.646775722503662,0.674310624599457,0.356351345777512,-0.647075414657593,0.674181759357452,0.356050878763199,-0.764231443405151,0.598499000072479,0.240310654044151,-0.763971149921417,0.598726272583008,0.240572094917297,0.355364739894867,0.67387717962265,-0.647769451141357,0.355665177106857,0.674006164073944,-0.647470235824585,0.240559369325638,0.598713159561157,-0.763985395431519,0.240298464894295,0.598486304283142,-0.764245212078094,0.635725915431976,-0.678383886814117,-0.368304044008255,0.63610714673996,-0.678232371807098,-0.367924362421036,0.761705935001373,-0.600358486175537,-0.243667483329773,0.761370658874512,-0.600646913051605,-0.244003847241402,-0.367926150560379,-0.678225874900818,0.636113047599792,-0.368305861949921,-0.678377330303192,0.635731756687164,-0.244000241160393,-0.600651204586029,0.761368453502655,-0.243662789463997,-0.600361883640289,0.761704742908478,-0.763971149921417,0.598726272583008,0.240572094917297,-0.764231443405151,0.598499000072479,0.240310654044151,-0.86750602722168,0.478340059518814,0.136469528079033,-0.86735612154007,0.478568613529205,0.136620387434959,0.240298464894295,0.598486304283142,-0.764245212078094,0.240559369325638,0.598713159561157,-0.763985395431519,0.136608868837357,0.478544026613235,-0.867371737957001,0.136458605527878,0.478316247463226,-0.867520928382874,0.761370658874512,-0.600646913051605,-0.244003847241402,0.761705935001373,-0.600358486175537,-0.243667483329773, +0.868133187294006,-0.477285891771317,-0.136171191930771,0.867952108383179,-0.477562755346298,-0.13635465502739,-0.243662789463997,-0.600361883640289,0.761704742908478,-0.244000241160393,-0.600651204586029,0.761368453502655,-0.136351078748703,-0.477563053369522,0.867952525615692,-0.136167570948601,-0.477286070585251,0.868133783340454,-0.86735612154007,0.478568613529205,0.136620387434959,-0.86750602722168,0.478340059518814,0.136469528079033,-0.935675203800201,0.346459180116653,0.0669168159365654,-0.935612380504608,0.346616327762604,0.0669800341129303,0.136458605527878,0.478316247463226,-0.867520928382874,0.136608868837357,0.478544026613235,-0.867371737957001,0.0669864416122437,0.346597611904144,-0.935618937015533,0.0669233873486519,0.346440851688385,-0.935681402683258,0.867952108383179,-0.477562755346298,-0.13635465502739,0.868133187294006,-0.477285891771317,-0.136171191930771,0.935653567314148,-0.346488237380981,-0.0670686364173889,0.935581505298615,-0.346668601036072,-0.0671418681740761,-0.136167570948601,-0.477286070585251,0.868133783340454,-0.136351078748703,-0.477563053369522,0.867952525615692,-0.0671404525637627,-0.346663057804108,0.935583651065826,-0.0670673549175262,-0.346483081579208,0.93565559387207,-0.935612380504608,0.346616327762604,0.0669800341129303,-0.935675203800201,0.346459180116653,0.0669168159365654,-0.973125636577606,0.228507548570633,0.0284736659377813,-0.973104178905487,0.228596329689026,0.0284953135997057,0.0669233873486519,0.346440851688385,-0.935681402683258,0.0669864416122437,0.346597611904144,-0.935618937015533,0.028490100055933,0.228589817881584,-0.973105788230896,0.0284683406352997,0.228500694036484,-0.973127365112305,0.935581505298615,-0.346668601036072,-0.0671418681740761,0.935653567314148,-0.346488237380981,-0.0670686364173889,0.972730338573456,-0.23012438416481,-0.0289536379277706,0.972706198692322,-0.230223000049591,-0.0289780665189028,-0.0670673549175262,-0.346483081579208,0.93565559387207,-0.0671404525637627,-0.346663057804108,0.935583651065826,-0.0289726667106152,-0.230224281549454,0.972706139087677, +-0.0289481543004513,-0.230125308036804,0.972730219364166,-0.973104178905487,0.228596329689026,0.0284953135997057,-0.973125636577606,0.228507548570633,0.0284736659377813,-0.99161159992218,0.128904536366463,0.00948285311460495,-0.991605877876282,0.128948196768761,0.00948862545192242,0.0284683406352997,0.228500694036484,-0.973127365112305,0.028490100055933,0.228589817881584,-0.973105788230896,0.0094723841175437,0.128947541117668,-0.991606116294861,0.00946670211851597,0.128904551267624,-0.991611778736115,0.972706198692322,-0.230223000049591,-0.0289780665189028,0.972730338573456,-0.23012438416481,-0.0289536379277706,0.991392731666565,-0.130557581782341,-0.00975023023784161,0.991386413574219,-0.130604982376099,-0.00975663028657436,-0.0289481543004513,-0.230125308036804,0.972730219364166,-0.0289726667106152,-0.230224281549454,0.972706139087677,-0.00975606311112642,-0.130604803562164,0.991386473178864,-0.00974967703223228,-0.13055744767189,0.991392731666565,-0.991605877876282,0.128948196768761,0.00948862545192242,-0.99161159992218,0.128904536366463,0.00948285311460495,-0.999133050441742,0.0415906645357609,0.00175207736901939,-0.999132513999939,0.0416035801172256,0.00175262149423361,0.00946670211851597,0.128904551267624,-0.991611778736115,0.0094723841175437,0.128947541117668,-0.991606116294861,0.00174758024513721,0.0416046716272831,-0.999132573604584,0.00174704112578183,0.0415918380022049,-0.999133050441742,0.991386413574219,-0.130604982376099,-0.00975663028657436,0.991392731666565,-0.130557581782341,-0.00975023023784161,0.9991055727005,-0.042247973382473,-0.00181319809053093,0.999104857444763,-0.0422620922327042,-0.0018138037994504,-0.00974967703223228,-0.13055744767189,0.991392731666565,-0.00975606311112642,-0.130604803562164,0.991386473178864,-0.00182168511673808,-0.0422607213258743,0.999104917049408,-0.00182107638102025,-0.0422465316951275,0.999105513095856,-0.999132513999939,0.0416035801172256,0.00175262149423361,-0.999133050441742,0.0415906645357609,0.00175207736901939,-0.999133110046387,-0.0415915735065937,0.00174674729350954, +-0.999132633209229,-0.0416044369339943,0.00174728757701814,0.00174704112578183,0.0415918380022049,-0.999133050441742,0.00174758024513721,0.0416046716272831,-0.999132573604584,0.00174754939507693,-0.041606642305851,-0.999132573604584,0.00174700771458447,-0.041593749076128,-0.999133110046387,0.999104857444763,-0.0422620922327042,-0.0018138037994504,0.9991055727005,-0.042247973382473,-0.00181319809053093,0.999105513095856,0.04224743694067,-0.00181354314554483,0.999104797840118,0.0422615967690945,-0.00181415083352476,-0.00182107638102025,-0.0422465316951275,0.999105513095856,-0.00182168511673808,-0.0422607213258743,0.999104917049408,-0.00181687599979341,0.0422608032822609,0.999104917049408,-0.0018162700580433,0.0422466322779655,0.999105513095856,-0.999132633209229,-0.0416044369339943,0.00174728757701814,-0.999133110046387,-0.0415915735065937,0.00174674729350954,-0.991612255573273,-0.128900602459908,0.00946998037397861,-0.991606593132019,-0.128943726420403,0.00947568379342556,0.00174700771458447,-0.041593749076128,-0.999133110046387,0.00174754939507693,-0.041606642305851,-0.999132573604584,0.00947645865380764,-0.128948405385017,-0.991605997085571,0.00947077479213476,-0.128905445337296,-0.99161159992218,0.999104797840118,0.0422615967690945,-0.00181415083352476,0.999105513095856,0.04224743694067,-0.00181354314554483,0.991392612457275,0.130558103322983,-0.00974699854850769,0.991386353969574,0.130605518817902,-0.00975339580327272,-0.0018162700580433,0.0422466322779655,0.999105513095856,-0.00181687599979341,0.0422608032822609,0.999104917049408,-0.00975176692008972,0.130606427788734,0.991386294364929,-0.00974540784955025,0.130559310317039,0.991392493247986,-0.991606593132019,-0.128943726420403,0.00947568379342556,-0.991612255573273,-0.128900602459908,0.00946998037397861,-0.973128855228424,-0.228494644165039,0.0284685865044594,-0.97310733795166,-0.22858327627182,0.0284902174025774,0.00947077479213476,-0.128905445337296,-0.99161159992218,0.00947645865380764,-0.128948405385017,-0.991605997085571,0.0284905824810266,-0.228596061468124,-0.973104357719421, +0.0284689608961344,-0.228507444262505,-0.973125755786896,0.991386353969574,0.130605518817902,-0.00975339580327272,0.991392612457275,0.130558103322983,-0.00974699854850769,0.972729504108429,0.230128437280655,-0.0289506744593382,0.97270542383194,0.230227008461952,-0.0289750974625349,-0.00974540784955025,0.130559310317039,0.991392493247986,-0.00975176692008972,0.130606427788734,0.991386294364929,-0.0289723165333271,0.230229601264,0.972705006599426,-0.0289478208869696,0.230130702257156,0.97272914648056,-0.97310733795166,-0.22858327627182,0.0284902174025774,-0.973128855228424,-0.228494644165039,0.0284685865044594,-0.93568366765976,-0.34643480181694,0.0669245794415474,-0.935620427131653,-0.346593260765076,0.0669883489608765,0.0284689608961344,-0.228507444262505,-0.973125755786896,0.0284905824810266,-0.228596061468124,-0.973104357719421,0.0669934973120689,-0.346606343984604,-0.935615181922913,0.0669297575950623,-0.346448004245758,-0.935678422451019,0.97270542383194,0.230227008461952,-0.0289750974625349,0.972729504108429,0.230128437280655,-0.0289506744593382,0.935653984546661,0.346486955881119,-0.0670693665742874,0.935581564903259,0.346668004989624,-0.0671428963541985,-0.0289478208869696,0.230130702257156,0.97272914648056,-0.0289723165333271,0.230229601264,0.972705006599426,-0.0671410262584686,0.346673011779785,0.935580015182495,-0.0670676380395889,0.346492320299149,0.935652136802673,-0.935620427131653,-0.346593260765076,0.0669883489608765,-0.93568366765976,-0.34643480181694,0.0669245794415474,-0.867519974708557,-0.478316396474838,0.13646388053894,-0.867369651794434,-0.478545725345612,0.136615142226219,0.0669297575950623,-0.346448004245758,-0.935678422451019,0.0669934973120689,-0.346606343984604,-0.935615181922913,0.136623501777649,-0.478551357984543,-0.867365181446075,0.136472627520561,-0.478322595357895,-0.867515206336975,0.935581564903259,0.346668004989624,-0.0671428963541985,0.935653984546661,0.346486955881119,-0.0670693665742874,0.868136048316956,0.477283269166946,-0.136163055896759,0.86795449256897,0.477560698986053,-0.136346906423569, +-0.0670676380395889,0.346492320299149,0.935652136802673,-0.0671410262584686,0.346673011779785,0.935580015182495,-0.136352300643921,0.477556347846985,0.867956161499023,-0.136168569326401,0.47727906703949,0.868137538433075,-0.867369651794434,-0.478545725345612,0.136615142226219,-0.867519974708557,-0.478316396474838,0.13646388053894,-0.764244854450226,-0.598487496376038,0.240296483039856,-0.763984382152557,-0.59871506690979,0.240558132529259,0.136472627520561,-0.478322595357895,-0.867515206336975,0.136623501777649,-0.478551357984543,-0.867365181446075,0.240562543272972,-0.598724246025085,-0.76397567987442,0.240301370620728,-0.598497092723846,-0.76423579454422,0.86795449256897,0.477560698986053,-0.136346906423569,0.868136048316956,0.477283269166946,-0.136163055896759,0.76170152425766,0.600369870662689,-0.243652790784836,0.761366546154022,0.600658118724823,-0.243988931179047,-0.136168569326401,0.47727906703949,0.868137538433075,-0.136352300643921,0.477556347846985,0.867956161499023,-0.243996471166611,0.600645065307617,0.761374473571777,-0.243659719824791,0.600356221199036,0.761709988117218,-0.763984382152557,-0.59871506690979,0.240558132529259,-0.764244854450226,-0.598487496376038,0.240296483039856,-0.647077620029449,-0.674180448055267,0.35604926943779,-0.646778345108032,-0.674309253692627,0.356349289417267,0.240301370620728,-0.598497092723846,-0.76423579454422,0.240562543272972,-0.598724246025085,-0.76397567987442,0.35634782910347,-0.674309492111206,-0.646778762340546,0.356047034263611,-0.674180567264557,-0.6470787525177,0.761366546154022,0.600658118724823,-0.243988931179047,0.76170152425766,0.600369870662689,-0.243652790784836,0.636101305484772,0.678239345550537,-0.367921531200409,0.635719835758209,0.678390920162201,-0.368301540613174,-0.243659719824791,0.600356221199036,0.761709988117218,-0.243996471166611,0.600645065307617,0.761374473571777,-0.368303626775742,0.678389489650726,0.635720014572144,-0.367923676967621,0.678237915039063,0.63610166311264,-0.646778345108032,-0.674309253692627,0.356349289417267,-0.647077620029449,-0.674180448055267,0.35604926943779, +-0.555825233459473,-0.702135622501373,0.445043534040451,-0.555616497993469,-0.702168345451355,0.445252478122711,0.356047034263611,-0.674180567264557,-0.6470787525177,0.35634782910347,-0.674309492111206,-0.646778762340546,0.445235192775726,-0.702182352542877,-0.555612683296204,0.445025563240051,-0.702149271965027,-0.555822312831879,0.635719835758209,0.678390920162201,-0.368301540613174,0.636101305484772,0.678239345550537,-0.367921531200409,0.538836717605591,0.704135239124298,-0.462437599897385,0.538595020771027,0.704162299633026,-0.462677985429764,-0.367923676967621,0.678237915039063,0.63610166311264,-0.368303626775742,0.678389489650726,0.635720014572144,-0.462677299976349,0.704152524471283,0.538608074188232,-0.462437093257904,0.704125642776489,0.538849651813507,0.445025563240051,-0.702149271965027,-0.555822312831879,0.445235192775726,-0.702182352542877,-0.555612683296204,0.478403866291046,-0.706676781177521,-0.521284520626068,0.478403836488724,-0.706676721572876,-0.521284461021423,0.538595020771027,0.704162299633026,-0.462677985429764,0.538836717605591,0.704135239124298,-0.462437599897385,0.503732919692993,0.707162320613861,-0.49615952372551,0.503733038902283,0.707162439823151,-0.496159583330154,-0.522553622722626,-0.707112491130829,-0.476371288299561,-0.522553563117981,-0.707112550735474,-0.476371347904205,-0.447550565004349,-0.710111677646637,-0.543543696403503,-0.447550237178802,-0.710111618041992,-0.543544054031372,-0.522550702095032,0.707116007804871,-0.476369321346283,-0.522550702095032,0.707116007804871,-0.476369321346283,-0.44754832983017,0.710115075111389,-0.543541133403778,-0.447548627853394,0.710115015506744,-0.543540894985199,-0.447548627853394,0.710115015506744,-0.543540894985199,-0.44754832983017,0.710115075111389,-0.543541133403778,-0.211014673113823,0.719250619411469,-0.661929786205292,-0.211013212800026,0.719250679016113,-0.66193026304245,-0.447550237178802,-0.710111618041992,-0.543544054031372,-0.447550565004349,-0.710111677646637,-0.543543696403503,-0.211013659834862,-0.719247996807098,-0.661933183670044, +-0.211015194654465,-0.719247937202454,-0.661932647228241,0.438323557376862,0.707379341125488,-0.554514825344086,0.438323527574539,0.707379400730133,-0.55451488494873,0.395809412002563,0.710112869739532,-0.582300961017609,0.395809054374695,0.710112869739532,-0.582301199436188,0.438323527574539,0.707379400730133,-0.55451488494873,0.438323557376862,0.707379341125488,-0.554514825344086,0.399399369955063,0.707482516765594,-0.583051025867462,0.399399429559708,0.707482516765594,-0.583050966262817,0.399399429559708,0.707482516765594,-0.583050966262817,0.399399369955063,0.707482516765594,-0.583051025867462,0.343896359205246,0.707487344741821,-0.617411434650421,0.343896448612213,0.707487404346466,-0.617411375045776,0.438322812318802,-0.707381546497345,-0.554512619972229,0.438322842121124,-0.70738160610199,-0.554512619972229,0.39580711722374,-0.710118472576141,-0.582295656204224,0.395807474851608,-0.710118532180786,-0.582295417785645,0.438322842121124,-0.70738160610199,-0.554512619972229,0.438322812318802,-0.707381546497345,-0.554512619972229,0.399397939443588,-0.707484602928162,-0.583049356937408,0.399397969245911,-0.707484662532806,-0.583049476146698,0.399397969245911,-0.707484662532806,-0.583049476146698,0.399397939443588,-0.707484602928162,-0.583049356937408,0.343895643949509,-0.707487940788269,-0.617411077022552,0.343895435333252,-0.707487940788269,-0.617411077022552,0.343896448612213,0.707487404346466,-0.617411375045776,0.343896359205246,0.707487344741821,-0.617411434650421,0.28546068072319,0.707489788532257,-0.646506130695343,0.285460561513901,0.707489907741547,-0.646506249904633,0.343895435333252,-0.707487940788269,-0.617411077022552,0.343895643949509,-0.707487940788269,-0.617411077022552,0.28546130657196,-0.707486808300018,-0.646509110927582,0.28546154499054,-0.707486808300018,-0.646509110927582,0.285460561513901,0.707489907741547,-0.646506249904633,0.28546068072319,0.707489788532257,-0.646506130695343,0.22459089756012,0.707488596439362,-0.670088648796082,0.22459103167057,0.707488536834717,-0.670088529586792,0.28546154499054,-0.707486808300018,-0.646509110927582, +0.28546130657196,-0.707486808300018,-0.646509110927582,0.224592015147209,-0.707485496997833,-0.670091450214386,0.224591866135597,-0.707485496997833,-0.670091569423676,0.22459103167057,0.707488536834717,-0.670088529586792,0.22459089756012,0.707488596439362,-0.670088648796082,0.161804348230362,0.707490146160126,-0.687951326370239,0.161804333329201,0.707490146160126,-0.687951266765594,0.224591866135597,-0.707485496997833,-0.670091569423676,0.224592015147209,-0.707485496997833,-0.670091450214386,0.161805137991905,-0.707487761974335,-0.687953531742096,0.161805123090744,-0.707487761974335,-0.687953412532806,0.161804333329201,0.707490146160126,-0.687951266765594,0.161804348230362,0.707490146160126,-0.687951326370239,0.0976380035281181,0.707491397857666,-0.699944674968719,0.0976380929350853,0.707491397857666,-0.699944674968719,0.161805123090744,-0.707487761974335,-0.687953412532806,0.161805137991905,-0.707487761974335,-0.687953531742096,0.0976382121443748,-0.707490503787994,-0.699945628643036,0.0976381003856659,-0.70749044418335,-0.699945688247681,0.0976380929350853,0.707491397857666,-0.699944674968719,0.0976380035281181,0.707491397857666,-0.699944674968719,0.0326393507421017,0.707486748695374,-0.705972373485565,0.0326394252479076,0.707486748695374,-0.70597231388092,0.0976381003856659,-0.70749044418335,-0.699945688247681,0.0976382121443748,-0.707490503787994,-0.699945628643036,0.0326393134891987,-0.707487761974335,-0.705971419811249,0.0326393321156502,-0.707487761974335,-0.705971419811249,0.0326394252479076,0.707486748695374,-0.70597231388092,0.0326393507421017,0.707486748695374,-0.705972373485565,-0.0326394625008106,0.707483291625977,-0.705975830554962,-0.032639492303133,0.707483291625977,-0.705975890159607,0.0326393321156502,-0.707487761974335,-0.705971419811249,0.0326393134891987,-0.707487761974335,-0.705971419811249,-0.0326394028961658,-0.707483947277069,-0.705975294113159,-0.0326393693685532,-0.707483947277069,-0.70597517490387,-0.032639492303133,0.707483291625977,-0.705975890159607,-0.0326394625008106,0.707483291625977,-0.705975830554962, +-0.0976396277546883,0.707482814788818,-0.699953138828278,-0.0976395830512047,0.707482874393463,-0.699953138828278,-0.0326393693685532,-0.707483947277069,-0.70597517490387,-0.0326394028961658,-0.707483947277069,-0.705975294113159,-0.0976396203041077,-0.707481503486633,-0.699954450130463,-0.097639687359333,-0.707481503486633,-0.699954450130463,-0.0976395830512047,0.707482874393463,-0.699953138828278,-0.0976396277546883,0.707482814788818,-0.699953138828278,-0.161805883049965,0.707484543323517,-0.687956690788269,-0.161805778741837,0.707484424114227,-0.687956750392914,-0.097639687359333,-0.707481503486633,-0.699954450130463,-0.0976396203041077,-0.707481503486633,-0.699954450130463,-0.161806523799896,-0.707482218742371,-0.687958836555481,-0.161806628108025,-0.707482278347015,-0.687958776950836,-0.161805778741837,0.707484424114227,-0.687956750392914,-0.161805883049965,0.707484543323517,-0.687956690788269,-0.224589586257935,0.707493126392365,-0.670084238052368,-0.224589869379997,0.707493126392365,-0.670084059238434,-0.161806628108025,-0.707482278347015,-0.687958776950836,-0.161806523799896,-0.707482218742371,-0.687958836555481,-0.224590614438057,-0.707490086555481,-0.670086979866028,-0.224590361118317,-0.707490146160126,-0.670087158679962,-0.224589869379997,0.707493126392365,-0.670084059238434,-0.224589586257935,0.707493126392365,-0.670084238052368,-0.285457491874695,0.707496881484985,-0.646499872207642,-0.285457849502563,0.707496881484985,-0.646499693393707,-0.224590361118317,-0.707490146160126,-0.670087158679962,-0.224590614438057,-0.707490086555481,-0.670086979866028,-0.285457581281662,-0.707497000694275,-0.646499633789063,-0.285457193851471,-0.70749694108963,-0.646499812602997,-0.285457849502563,0.707496881484985,-0.646499693393707,-0.285457491874695,0.707496881484985,-0.646499872207642,-0.343894749879837,0.70749044418335,-0.617408692836761,-0.343894809484482,0.707490503787994,-0.617408573627472,-0.285457193851471,-0.70749694108963,-0.646499812602997,-0.285457581281662,-0.707497000694275,-0.646499633789063,-0.343893140554428,-0.707493484020233,-0.617406189441681, +-0.343892991542816,-0.707493484020233,-0.617406249046326,-0.343894809484482,0.707490503787994,-0.617408573627472,-0.343894749879837,0.70749044418335,-0.617408692836761,-0.399397909641266,0.707485496997833,-0.583048403263092,-0.399397939443588,0.707485437393188,-0.583048343658447,-0.343892991542816,-0.707493484020233,-0.617406249046326,-0.343893140554428,-0.707493484020233,-0.617406189441681,-0.399396240711212,-0.707488417625427,-0.583046078681946,-0.399396181106567,-0.707488417625427,-0.583046019077301,-0.399397939443588,0.707485437393188,-0.583048343658447,-0.399397909641266,0.707485496997833,-0.583048403263092,-0.438322305679321,0.707381963729858,-0.554512500762939,-0.438322246074677,0.707381963729858,-0.554512560367584,-0.399396181106567,-0.707488417625427,-0.583046019077301,-0.399396240711212,-0.707488417625427,-0.583046078681946,-0.438320457935333,-0.707385897636414,-0.554508924484253,-0.438320577144623,-0.707385957241058,-0.554508924484253,-0.438322246074677,0.707381963729858,-0.554512560367584,-0.438322305679321,0.707381963729858,-0.554512500762939,-0.39580699801445,0.710115671157837,-0.58229923248291,-0.395807415246964,0.710115611553192,-0.582298934459686,-0.438320577144623,-0.707385957241058,-0.554508924484253,-0.438320457935333,-0.707385897636414,-0.554508924484253,-0.395805865526199,-0.710119903087616,-0.582294940948486,-0.395805478096008,-0.710119843482971,-0.582295179367065,0.447546601295471,0.710118114948273,-0.543538749217987,0.447547346353531,0.710118055343628,-0.543538093566895,0.211011067032814,0.719258248806,-0.661922812461853,0.211012691259384,0.719258248806,-0.66192227602005,-0.395807415246964,0.710115611553192,-0.582298934459686,-0.39580699801445,0.710115671157837,-0.58229923248291,-0.149038761854172,0.71925288438797,-0.678573906421661,-0.149039462208748,0.719252943992615,-0.678573787212372,0.447549641132355,-0.710114479064941,-0.543540835380554,0.447548866271973,-0.710114479064941,-0.543541491031647,0.211012944579124,-0.719255924224854,-0.661924719810486,0.211011379957199,-0.719255983829498,-0.661925196647644, +-0.395805478096008,-0.710119843482971,-0.582295179367065,-0.395805865526199,-0.710119903087616,-0.582294940948486,-0.149037942290306,-0.719254493713379,-0.678572416305542,-0.149037331342697,-0.719254493713379,-0.678572475910187,0.395809054374695,0.710112869739532,-0.582301199436188,0.395809412002563,0.710112869739532,-0.582300961017609,0.149040043354034,0.719250082969666,-0.678576648235321,0.149039521813393,0.719250023365021,-0.678576767444611,0.395807474851608,-0.710118532180786,-0.582295417785645,0.39580711722374,-0.710118472576141,-0.582295656204224,0.149037957191467,-0.719251215457916,-0.678575813770294,0.149038508534431,-0.719251215457916,-0.678575694561005,-0.211013212800026,0.719250679016113,-0.66193026304245,-0.211014673113823,0.719250619411469,-0.661929786205292,0.149039521813393,0.719250023365021,-0.678576767444611,0.149040043354034,0.719250082969666,-0.678576648235321,-0.211015194654465,-0.719247937202454,-0.661932647228241,-0.211013659834862,-0.719247996807098,-0.661933183670044,0.149038508534431,-0.719251215457916,-0.678575694561005,0.149037957191467,-0.719251215457916,-0.678575813770294,-0.149039462208748,0.719252943992615,-0.678573787212372,-0.149038761854172,0.71925288438797,-0.678573906421661,0.211012691259384,0.719258248806,-0.66192227602005,0.211011067032814,0.719258248806,-0.661922812461853,-0.149037331342697,-0.719254493713379,-0.678572475910187,-0.149037942290306,-0.719254493713379,-0.678572416305542,0.211011379957199,-0.719255983829498,-0.661925196647644,0.211012944579124,-0.719255924224854,-0.661924719810486,-0.686134934425354,-3.75032250303775e-005,0.72747415304184,-0.638846457004547,0,0.769334137439728,-0.638846397399902,0,0.769334197044373,-0.685862421989441,-3.66751555702649e-005,0.727731227874756,-0.638846457004547,0,0.769334137439728,-0.565136194229126,0,0.82499760389328,-0.565136194229126,0,0.82499760389328,-0.638846397399902,0,0.769334197044373,-0.565136194229126,0,0.82499760389328,-0.486604362726212,0,0.873622357845306,-0.486604362726212,0,0.873622357845306,-0.565136194229126,0,0.82499760389328, +-0.486604362726212,0,0.873622357845306,-0.40392079949379,0,0.914793908596039,-0.40392079949379,0,0.914793908596039,-0.486604362726212,0,0.873622357845306,-0.40392079949379,0,0.914793908596039,-0.317791253328323,0,0.948160529136658,-0.317791253328323,0,0.948160529136658,-0.40392079949379,0,0.914793908596039,-0.317791253328323,0,0.948160529136658,-0.228950336575508,0,0.973438024520874,-0.228950336575508,0,0.973438024520874,-0.317791253328323,0,0.948160529136658,-0.228950336575508,0,0.973438024520874,-0.138156443834305,0,0.990410387516022,-0.138156443834305,0,0.990410387516022,-0.228950336575508,0,0.973438024520874,-0.138156443834305,0,0.990410387516022,-0.0461838357150555,0,0.998932898044586,-0.0461838357150555,0,0.998932898044586,-0.138156443834305,0,0.990410387516022,-0.0461838357150555,0,0.998932898044586,0.0461839586496353,0,0.998932898044586,0.0461839586496353,0,0.998932898044586,-0.0461838357150555,0,0.998932898044586,0.0461839586496353,0,0.998932898044586,0.138156563043594,0,0.990410268306732,0.138156563043594,0,0.990410268306732,0.0461839586496353,0,0.998932898044586,0.138156563043594,0,0.990410268306732,0.22895048558712,0,0.973438024520874,0.22895048558712,0,0.973438024520874,0.138156563043594,0,0.990410268306732,0.22895048558712,0,0.973438024520874,0.317791432142258,0,0.948160469532013,0.317791432142258,0,0.948160469532013,0.22895048558712,0,0.973438024520874,0.317791432142258,0,0.948160469532013,0.403921067714691,0,0.914793789386749,0.403921067714691,0,0.914793789386749,0.317791432142258,0,0.948160469532013,0.403921067714691,0,0.914793789386749,0.486604690551758,0,0.873622238636017,0.486604690551758,0,0.873622238636017,0.403921067714691,0,0.914793789386749,0.486604690551758,0,0.873622238636017,0.565136194229126,0,0.82499760389328,0.565136194229126,0,0.82499760389328,0.486604690551758,0,0.873622238636017,0.565136194229126,0,0.82499760389328,0.638846457004547,0,0.769334137439728,0.638846457004547,0,0.769334197044373,0.565136194229126,0,0.82499760389328,0.638846457004547,0,0.769334137439728,0.686135053634644,-3.75032068404835e-005,0.72747415304184, +0.685862421989441,-3.66751737601589e-005,0.727731108665466,0.638846457004547,0,0.769334197044373,-0.00817491393536329,0.999933063983917,-0.00817150250077248,-1.17474110084004e-005,0.999999940395355,6.00420025875792e-006,-1.17474382932414e-005,0.999999940395355,6.00421481067315e-006,-0.0078024473041296,0.999939143657684,-0.00779755134135485,-1.17474110084004e-005,0.999999940395355,6.00420025875792e-006,0,0.999999940395355,3.87351377639789e-007,0,0.999999940395355,3.8735129237466e-007,-1.17474382932414e-005,0.999999940395355,6.00421481067315e-006,0,0.999999940395355,3.87351377639789e-007,0,0.999999940395355,1.93675276705108e-007,0,0.999999940395355,1.93676768844853e-007,0,0.999999940395355,3.8735129237466e-007,0,0.999999940395355,1.93675276705108e-007,0,0.999999940395355,-9.68376738796906e-008,0,0.999999940395355,-9.68377236176821e-008,0,0.999999940395355,1.93676768844853e-007,0,0.999999940395355,-9.68376738796906e-008,0,0.999999940395355,-5.8102693856199e-007,0,0.999999940395355,-5.81027677526436e-007,0,0.999999940395355,-9.68377236176821e-008,0,0.999999940395355,-5.8102693856199e-007,0,0.999999940395355,-1.21047446555167e-006,0,0.999999940395355,-1.21047412449116e-006,0,0.999999940395355,-5.81027677526436e-007,0,0.999999940395355,-1.21047446555167e-006,0,0.999999940395355,-1.54940653374069e-006,0,0.999999940395355,-1.54940573793283e-006,0,0.999999940395355,-1.21047412449116e-006,0,0.999999940395355,-1.54940653374069e-006,0,0.999999940395355,-2.39673545365804e-006,0,0.999999940395355,-2.39673499891069e-006,0,0.999999940395355,-1.54940573793283e-006,0,0.999999940395355,-2.39673545365804e-006,0,0.999999940395355,-1.28310091440653e-006,0,0.999999940395355,-1.28310068703286e-006,0,0.999999940395355,-2.39673499891069e-006,0,0.999999940395355,-1.28310091440653e-006,0,0.999999940395355,-4.35770289186621e-007,0,0.999999940395355,-4.35770488138587e-007,0,0.999999940395355,-1.28310068703286e-006,0,0.999999940395355,-4.35770289186621e-007,0,0.999999940395355,-7.74703380557185e-007,0,0.999999940395355,-7.74703380557185e-007,0,0.999999940395355,-4.35770488138587e-007, +0,0.999999940395355,-7.74703380557185e-007,0,0.999999940395355,-1.11363704036194e-006,0,0.999999940395355,-1.11363681298826e-006,0,0.999999940395355,-7.74703380557185e-007,0,0.999999940395355,-1.11363704036194e-006,0,0.999999940395355,-9.68379595178703e-007,0,0.999999940395355,-9.68379708865541e-007,0,0.999999940395355,-1.11363681298826e-006,0,0.999999940395355,-9.68379595178703e-007,0,0.999999940395355,9.68371693943482e-008,0,0.999999940395355,9.68384057387084e-008,0,0.999999940395355,-9.68379708865541e-007,0,0.999999940395355,9.68371693943482e-008,0,0.999999940395355,5.81026824875153e-007,0,0.999999940395355,5.81026768031734e-007,0,0.999999940395355,9.68384057387084e-008,0,0.999999940395355,5.81026824875153e-007,1.17473982754746e-005,0.999999940395355,6.58524595564813e-006,1.17474373837467e-005,0.999999940395355,6.58526732877363e-006,0,0.999999940395355,5.81026768031734e-007,1.17473982754746e-005,0.999999940395355,6.58524595564813e-006,0.00817459914833307,0.999933183193207,-0.00817013718187809,0.00780216697603464,0.999939203262329,-0.0077962507493794,1.17474373837467e-005,0.999999940395355,6.58526732877363e-006,0.638820946216583,4.4055873331672e-006,-0.769355297088623,0.565136194229126,0,-0.824997544288635,0.565136194229126,0,-0.824997544288635,0.638820946216583,4.40559188064071e-006,-0.769355297088623,0.565136194229126,0,-0.824997544288635,0.486604332923889,0,-0.873622417449951,0.486604332923889,0,-0.873622417449951,0.565136194229126,0,-0.824997544288635,0.486604332923889,0,-0.873622417449951,0.403921157121658,0,-0.914793729782104,0.403921157121658,0,-0.914793729782104,0.486604332923889,0,-0.873622417449951,0.403921157121658,0,-0.914793729782104,0.317791432142258,0,-0.948160588741302,0.317791432142258,0,-0.948160588741302,0.403921157121658,0,-0.914793729782104,0.317791432142258,0,-0.948160588741302,0.228950455784798,0,-0.973438024520874,0.228950455784798,0,-0.973438024520874,0.317791432142258,0,-0.948160588741302,0.228950455784798,0,-0.973438024520874,0.138156667351723,0,-0.990410327911377,0.138156667351723,0,-0.990410327911377, +0.228950455784798,0,-0.973438024520874,0.138156667351723,0,-0.990410327911377,0.0461835525929928,0,-0.998932838439941,0.0461835525929928,0,-0.998932838439941,0.138156667351723,0,-0.990410327911377,0.0461835525929928,0,-0.998932838439941,-0.0461836941540241,0,-0.998932838439941,-0.0461836941540241,0,-0.998932838439941,0.0461835525929928,0,-0.998932838439941,-0.0461836941540241,0,-0.998932838439941,-0.138156801462173,0,-0.990410327911377,-0.138156801462173,0,-0.990410327911377,-0.0461836941540241,0,-0.998932838439941,-0.138156801462173,0,-0.990410327911377,-0.228950589895248,0,-0.973437905311584,-0.228950589895248,0,-0.973437905311584,-0.138156801462173,0,-0.990410327911377,-0.228950589895248,0,-0.973437905311584,-0.317791551351547,0,-0.948160529136658,-0.317791551351547,0,-0.948160529136658,-0.228950589895248,0,-0.973437905311584,-0.317791551351547,0,-0.948160529136658,-0.403921246528625,0,-0.914793729782104,-0.403921246528625,0,-0.914793729782104,-0.317791551351547,0,-0.948160529136658,-0.403921246528625,0,-0.914793729782104,-0.486604243516922,0,-0.873622477054596,-0.486604243516922,0,-0.873622477054596,-0.403921246528625,0,-0.914793729782104,-0.486604243516922,0,-0.873622477054596,-0.565136551856995,0,-0.824997305870056,-0.565136551856995,0,-0.824997305870056,-0.486604243516922,0,-0.873622477054596,-0.565136551856995,0,-0.824997305870056,-0.638821303844452,4.56553925687331e-006,-0.769355058670044,-0.638821303844452,4.56554380434682e-006,-0.769355058670044,-0.565136551856995,0,-0.824997305870056,-0.638821303844452,4.56553925687331e-006,-0.769355058670044,-0.672601997852325,0.0576485246419907,-0.737755477428436,-0.673727691173553,0.00137342023663223,-0.738978266716003,-0.673698425292969,9.12832365429495e-006,-0.739006280899048,-0.638821303844452,4.56554380434682e-006,-0.769355058670044,0.00329330540262163,-0.999989211559296,0.0032876399345696,5.12980477651581e-006,-0.999999940395355,-4.06736262448248e-006,5.12979158884264e-006,-0.999999940395355,-4.06735216529341e-006,0.00345196854323149,-0.999988079071045,0.00344691821373999, +5.12980477651581e-006,-0.999999940395355,-4.06736262448248e-006,0,-0.999999940395355,1.93675546711347e-007,0,-0.999999940395355,1.93675560922202e-007,5.12979158884264e-006,-0.999999940395355,-4.06735216529341e-006,0,-0.999999940395355,1.93675546711347e-007,0,-0.999999940395355,1.93675845139296e-007,0,-0.999999940395355,1.93675560922202e-007,0,-0.999999940395355,1.93675560922202e-007,0,-0.999999940395355,1.93675845139296e-007,0,-0.999999940395355,6.77864932185912e-007,0,-0.999999940395355,6.77864989029331e-007,0,-0.999999940395355,1.93675560922202e-007,0,-0.999999940395355,6.77864932185912e-007,0,-0.999999940395355,1.06521679299476e-006,0,-0.999999940395355,1.06521713405527e-006,0,-0.999999940395355,6.77864989029331e-007,0,-0.999999940395355,1.06521679299476e-006,0,-0.999999940395355,-2.90514122980312e-007,0,-0.999999940395355,-2.90513554546123e-007,0,-0.999999940395355,1.06521713405527e-006,0,-0.999999940395355,-2.90514122980312e-007,0,-0.999999940395355,-1.01679790986964e-006,0,-0.999999940395355,-1.01679756880912e-006,0,-0.999999940395355,-2.90513554546123e-007,0,-0.999999940395355,-1.01679790986964e-006,0,-0.999999940395355,-5.20503192547039e-007,0,-0.999999940395355,-5.20503078860202e-007,0,-0.999999940395355,-1.01679756880912e-006,0,-0.999999940395355,-5.20503192547039e-007,0,-0.999999940395355,-1.06521576981322e-006,0,-0.999999940395355,-1.06521565612638e-006,0,-0.999999940395355,-5.20503078860202e-007,0,-0.999999940395355,-1.06521576981322e-006,0,-0.999999940395355,-1.31941590097995e-006,0,-0.999999940395355,-1.3194163557273e-006,0,-0.999999940395355,-1.06521565612638e-006,0,-0.999999940395355,-1.31941590097995e-006,0,-0.999999940395355,-5.32608680714475e-007,0,-0.999999940395355,-5.32608510184218e-007,0,-0.999999940395355,-1.3194163557273e-006,0,-0.999999940395355,-5.32608680714475e-007,0,-0.999999940395355,2.90513838763218e-007,0,-0.999999940395355,2.90514122980312e-007,0,-0.999999940395355,-5.32608510184218e-007,0,-0.999999940395355,2.90513838763218e-007,0,-0.999999940395355,4.84189683902514e-007,0,-0.999999940395355,4.84189683902514e-007, +0,-0.999999940395355,2.90514122980312e-007,0,-0.999999940395355,4.84189683902514e-007,0,-0.999999940395355,9.68377236176821e-008,0,-0.999999940395355,9.68379083587934e-008,0,-0.999999940395355,4.84189683902514e-007,0,-0.999999940395355,9.68377236176821e-008,0,-0.999999940395355,-1.93675461446219e-007,0,-0.999999940395355,-1.93675475657074e-007,0,-0.999999940395355,9.68379083587934e-008,0,-0.999999940395355,-1.93675461446219e-007,-5.12980295752641e-006,-0.999999940395355,-3.29262479681347e-006,-5.12978431288502e-006,-0.999999940395355,-3.2926143376244e-006,0,-0.999999940395355,-1.93675475657074e-007,-5.12980295752641e-006,-0.999999940395355,-3.29262479681347e-006,-0.00329300877638161,-0.999989151954651,0.00328897964209318,-0.00345165352337062,-0.99998813867569,0.00344822439365089,-5.12978431288502e-006,-0.999999940395355,-3.2926143376244e-006,-0.685862958431244,3.66751737601589e-005,0.727730631828308,-0.638846635818481,0,0.769334077835083,-0.638846635818481,0,0.769334018230438,-0.686135590076447,3.75032832380384e-005,0.727473616600037,-0.638846635818481,0,0.769334077835083,-0.565136253833771,0,0.82499748468399,-0.565136253833771,0,0.82499748468399,-0.638846635818481,0,0.769334018230438,-0.565136253833771,0,0.82499748468399,-0.486604422330856,0,0.873622238636017,-0.486604422330856,0,0.873622238636017,-0.565136253833771,0,0.82499748468399,-0.486604422330856,0,0.873622238636017,-0.403920948505402,0,0.914793848991394,-0.403920948505402,0,0.914793848991394,-0.486604422330856,0,0.873622238636017,-0.403920948505402,0,0.914793848991394,-0.317791551351547,0,0.948160529136658,-0.317791491746902,0,0.948160469532013,-0.403920948505402,0,0.914793848991394,-0.317791551351547,0,0.948160529136658,-0.228950321674347,0,0.973437964916229,-0.228950336575508,0,0.973438024520874,-0.317791491746902,0,0.948160469532013,-0.228950321674347,0,0.973437964916229,-0.138155966997147,0,0.990410447120667,-0.138155981898308,0,0.990410447120667,-0.228950336575508,0,0.973438024520874,-0.138155966997147,0,0.990410447120667,-0.0461833812296391,0,0.998932957649231, +-0.0461833775043488,0,0.998932838439941,-0.138155981898308,0,0.990410447120667,-0.0461833812296391,0,0.998932957649231,0.0461840592324734,0,0.998932898044586,0.0461840555071831,0,0.998932898044586,-0.0461833775043488,0,0.998932838439941,0.0461840592324734,0,0.998932898044586,0.138155773282051,0,0.990410387516022,0.138155788183212,0,0.990410387516022,0.0461840555071831,0,0.998932898044586,0.138155773282051,0,0.990410387516022,0.228949964046478,0,0.973438143730164,0.228949993848801,0,0.973438143730164,0.138155788183212,0,0.990410387516022,0.228949964046478,0,0.973438143730164,0.317791879177094,0,0.948160350322723,0.317791908979416,0,0.948160350322723,0.228949993848801,0,0.973438143730164,0.317791879177094,0,0.948160350322723,0.403921097517014,0,0.91479367017746,0.403921097517014,0,0.91479367017746,0.317791908979416,0,0.948160350322723,0.403921097517014,0,0.91479367017746,0.486604541540146,0,0.873622298240662,0.486604541540146,0,0.873622298240662,0.403921097517014,0,0.91479367017746,0.486604541540146,0,0.873622298240662,0.56513637304306,0,0.824997365474701,0.56513637304306,0,0.824997365474701,0.486604541540146,0,0.873622298240662,0.56513637304306,0,0.824997365474701,0.638846695423126,0,0.769334018230438,0.638846695423126,0,0.769334018230438,0.56513637304306,0,0.824997365474701,0.638846695423126,0,0.769334018230438,0.685862720012665,3.63009276043158e-005,0.727730810642242,0.686135351657867,3.71205824194476e-005,0.727473795413971,0.638846695423126,0,0.769334018230438,0.00326843559741974,0.999989330768585,0.00325691723264754,5.40158453077311e-006,0.999999940395355,-3.59079194822698e-006,1.54286988163221e-006,0.999999940395355,-7.93113315467053e-007,3.58468287231517e-006,0.999999940395355,-2.32788261200767e-006,0.00234573241323233,0.999994397163391,0.00233277003280818,5.40158453077311e-006,0.999999940395355,-3.59079194822698e-006,7.56545375679707e-007,0.999999940395355,-9.50518710851611e-007,2.80659662621474e-007,0.999999940395355,-1.0463888600043e-007,1.54286988163221e-006,0.999999940395355,-7.93113315467053e-007,7.56545375679707e-007,0.999999940395355,-9.50518710851611e-007, +4.1036827269636e-007,0.999999940395355,-8.8342392245977e-007,-6.80723175605635e-008,0.999999940395355,-3.06603737953992e-007,2.80659662621474e-007,0.999999940395355,-1.0463888600043e-007,4.1036827269636e-007,0.999999940395355,-8.8342392245977e-007,-1.43287707032869e-007,0.999999940395355,2.79563323601906e-008,-1.9421602814873e-007,0.999999940395355,-1.35349409902119e-007,-6.80723175605635e-008,0.999999940395355,-3.06603737953992e-007,-1.43287707032869e-007,0.999999940395355,2.79563323601906e-008,-2.70829730197875e-007,0.999999940395355,7.99556460151507e-007,-1.6573590500002e-008,0.999999940395355,5.43974998379326e-008,-1.9421602814873e-007,0.999999940395355,-1.35349409902119e-007,-2.70829730197875e-007,0.999999940395355,7.99556460151507e-007,-1.13751511321425e-007,0.999999940395355,6.15042381468811e-007,1.11040328931722e-007,0.999999940395355,4.20550350099802e-008,-1.6573590500002e-008,0.999999940395355,5.43974998379326e-008,-1.13751511321425e-007,0.999999940395355,6.15042381468811e-007,1.59885175321506e-007,0.999999940395355,1.23008362606924e-007,1.91991318843066e-007,0.999999940395355,-2.97128277537695e-008,1.11040328931722e-007,0.999999940395355,4.20550350099802e-008,1.59885175321506e-007,0.999999940395355,1.23008362606924e-007,1.62280244353497e-007,0.999999940395355,1.5376063089434e-008,1.11701218941107e-007,0.999999940395355,1.2913625724309e-008,1.91991318843066e-007,0.999999940395355,-2.97128277537695e-008,1.62280244353497e-007,0.999999940395355,1.5376063089434e-008,-1.62280230142642e-007,0.999999940395355,1.67738729572875e-008,-1.11701154992261e-007,0.999999940395355,3.31620704230318e-008,1.11701218941107e-007,0.999999940395355,1.2913625724309e-008,-1.62280230142642e-007,0.999999940395355,1.67738729572875e-008,-1.59885317430053e-007,0.999999940395355,1.35588919647489e-007,-1.91991460951613e-007,0.999999940395355,-5.18416731765114e-009,-1.11701154992261e-007,0.999999940395355,3.31620704230318e-008,-1.59885317430053e-007,0.999999940395355,1.35588919647489e-007,1.13751866592793e-007,0.999999940395355,6.37407538306434e-007, +-1.11040229455739e-007,0.999999940395355,4.101623218844e-008,-1.91991460951613e-007,0.999999940395355,-5.18416731765114e-009,1.13751866592793e-007,0.999999940395355,6.37407538306434e-007,2.70829758619584e-007,0.999999940395355,8.1632953197186e-007,1.65736508961345e-008,0.999999940395355,5.05326731570221e-008,-1.11040229455739e-007,0.999999940395355,4.101623218844e-008,2.70829758619584e-007,0.999999940395355,8.1632953197186e-007,1.43287593346031e-007,0.999999940395355,5.59119284204712e-009,1.94215914461893e-007,0.999999940395355,-1.52138156295223e-007,1.65736508961345e-008,0.999999940395355,5.05326731570221e-008,1.43287593346031e-007,0.999999940395355,5.59119284204712e-009,-3.91183732517675e-007,0.999999940395355,-8.33103001696145e-007,5.17173148750771e-008,0.999999940395355,-3.26426089714005e-007,1.94215914461893e-007,0.999999940395355,-1.52138156295223e-007,-3.91183732517675e-007,0.999999940395355,-8.33103001696145e-007,-6.55317251130327e-007,0.999999940395355,-7.71598536175588e-007,-2.94672474865365e-007,0.999999940395355,-1.01979537703301e-007,5.17173148750771e-008,0.999999940395355,-3.26426089714005e-007,-6.55317251130327e-007,0.999999940395355,-7.71598536175588e-007,-5.26017993252026e-006,1,-3.44537124874478e-006,-1.5232648138408e-006,0.999999940395355,-7.99458121036878e-007,-2.94672474865365e-007,0.999999940395355,-1.01979537703301e-007,-5.26017993252026e-006,1,-3.44537124874478e-006,-0.0032683121971786,0.99998939037323,0.00325681455433369,-0.00234561460092664,0.999994516372681,0.00233272672630847,-3.53971358890703e-006,0.999999940395355,-2.33828313866979e-006,-1.5232648138408e-006,0.999999940395355,-7.99458121036878e-007,0.561634242534637,4.53231876917926e-007,-0.827385544776917,0.561634302139282,4.53231962183054e-007,-0.827385485172272,0.620182693004608,-1.5011266896181e-007,-0.784457325935364,0.620182394981384,-1.50117600128397e-007,-0.784457504749298,0.620182693004608,-1.5011266896181e-007,-0.784457325935364,0.565136075019836,-5.27141708062118e-007,-0.82499760389328,0.565136432647705,-5.27141708062118e-007,-0.824997425079346, +0.620182394981384,-1.50117600128397e-007,-0.784457504749298,0.565136075019836,-5.27141708062118e-007,-0.82499760389328,0.486604422330856,-9.23016756360084e-008,-0.873622238636017,0.486604273319244,-9.22991887364333e-008,-0.873622477054596,0.565136432647705,-5.27141708062118e-007,-0.824997425079346,0.486604422330856,-9.23016756360084e-008,-0.873622238636017,0.403920829296112,1.85712977440744e-007,-0.914793789386749,0.403920650482178,1.85712238476299e-007,-0.914793848991394,0.486604273319244,-9.22991887364333e-008,-0.873622477054596,0.403920829296112,1.85712977440744e-007,-0.914793789386749,0.317791253328323,1.62391884828139e-007,-0.948160529136658,0.317791312932968,1.62391899038994e-007,-0.948160588741302,0.403920650482178,1.85712238476299e-007,-0.914793848991394,0.317791253328323,1.62391884828139e-007,-0.948160529136658,0.228950500488281,1.33899874299459e-007,-0.973438024520874,0.228950336575508,1.33899277443561e-007,-0.973438084125519,0.317791312932968,1.62391899038994e-007,-0.948160588741302,0.228950500488281,1.33899874299459e-007,-0.973438024520874,0.138156399130821,-6.15460180597438e-008,-0.990410387516022,0.138156369328499,-6.15460180597438e-008,-0.990410387516022,0.228950336575508,1.33899277443561e-007,-0.973438084125519,0.138156399130821,-6.15460180597438e-008,-0.990410387516022,0.0461841076612473,-3.90892864743364e-008,-0.998932898044586,0.0461842007935047,-3.90893717394647e-008,-0.998932957649231,0.138156369328499,-6.15460180597438e-008,-0.990410387516022,0.0461841076612473,-3.90892864743364e-008,-0.998932898044586,-0.0461837500333786,-5.86339119479362e-008,-0.998932898044586,-0.0461837388575077,-5.86338977370815e-008,-0.998932898044586,0.0461842007935047,-3.90893717394647e-008,-0.998932957649231,-0.0461837500333786,-5.86339119479362e-008,-0.998932898044586,-0.138156622648239,-1.7590099332665e-007,-0.990410327911377,-0.138156771659851,-1.75901178067761e-007,-0.990410327911377,-0.0461837388575077,-5.86338977370815e-008,-0.998932898044586,-0.138156622648239,-1.7590099332665e-007,-0.990410327911377,-0.228950828313828,1.00635787703141e-007,-0.97343784570694, +-0.228950753808022,1.00634800048738e-007,-0.973437964916229,-0.138156771659851,-1.75901178067761e-007,-0.990410327911377,-0.228950828313828,1.00635787703141e-007,-0.97343784570694,-0.317791700363159,1.06815143396943e-007,-0.948160409927368,-0.317791700363159,1.06815051026388e-007,-0.948160409927368,-0.228950753808022,1.00634800048738e-007,-0.973437964916229,-0.317791700363159,1.06815143396943e-007,-0.948160409927368,-0.403920888900757,-1.15109919818224e-007,-0.914793848991394,-0.403920859098434,-1.15110040610489e-007,-0.914793908596039,-0.317791700363159,1.06815051026388e-007,-0.948160409927368,-0.403920888900757,-1.15109919818224e-007,-0.914793848991394,-0.486604422330856,-1.39638265395092e-008,-0.873622238636017,-0.486604601144791,-1.39638602902892e-008,-0.873622238636017,-0.403920859098434,-1.15110040610489e-007,-0.914793908596039,-0.486604422330856,-1.39638265395092e-008,-0.873622238636017,-0.565136611461639,-4.81208417113521e-007,-0.824997305870056,-0.565136909484863,-4.81212680369936e-007,-0.824997007846832,-0.486604601144791,-1.39638602902892e-008,-0.873622238636017,-0.565136611461639,-4.81208417113521e-007,-0.824997305870056,-0.620182454586029,-9.82677420324762e-007,-0.784457564353943,-0.620182394981384,-9.82677079264249e-007,-0.784457564353943,-0.565136909484863,-4.81212680369936e-007,-0.824997007846832,-0.620182454586029,-9.82677420324762e-007,-0.784457564353943,-0.561632931232452,-1.15324326088739e-006,-0.827386438846588,-0.561632990837097,-1.15324314720056e-006,-0.827386379241943,-0.620182394981384,-9.82677079264249e-007,-0.784457564353943,-3.06279957840161e-006,-0.999999940395355,2.11532210414589e-006,-2.84219439095068e-008,-0.999999940395355,6.12528694432513e-008,-2.13682582739239e-008,-0.999999940395355,8.97612224548539e-008,-1.15069615276298e-005,-1,7.50591334508499e-006,-2.84219439095068e-008,-0.999999940395355,6.12528694432513e-008,-4.79960462484996e-008,-0.999999940395355,5.3143271117051e-008,-1.43477876690667e-007,-0.999999940395355,1.94058713987033e-007,-2.13682582739239e-008,-0.999999940395355,8.97612224548539e-008, +-4.79960462484996e-008,-0.999999940395355,5.3143271117051e-008,-3.20978159606966e-008,-0.999999940395355,-4.38813394509907e-008,-4.64919125420238e-008,-0.999999940395355,-2.0388625898704e-007,-1.43477876690667e-007,-0.999999940395355,1.94058713987033e-007,-3.20978159606966e-008,-0.999999940395355,-4.38813394509907e-008,3.4919590774507e-008,-0.999999940395355,-1.12914229077887e-007,1.37813529477171e-007,-0.999999940395355,-4.27119687174127e-007,-4.64919125420238e-008,-0.999999940395355,-2.0388625898704e-007,3.4919590774507e-008,-0.999999940395355,-1.12914229077887e-007,-2.26367546929396e-008,-0.999999940395355,-1.6894109222676e-008,7.16016330670755e-008,-0.999999940395355,2.05571506484148e-008,1.37813529477171e-007,-0.999999940395355,-4.27119687174127e-007,-2.26367546929396e-008,-0.999999940395355,-1.6894109222676e-008,-2.19702116055487e-007,-0.999999940395355,5.90294462199381e-008,-2.35729999076284e-007,-0.999999940395355,1.98698742792658e-007,7.16016330670755e-008,-0.999999940395355,2.05571506484148e-008,-2.19702116055487e-007,-0.999999940395355,5.90294462199381e-008,-1.48727693272122e-007,-0.999999940395355,1.05255022475603e-008,-1.94834996136706e-007,-0.999999940395355,-8.1750850533524e-010,-2.35729999076284e-007,-0.999999940395355,1.98698742792658e-007,-1.48727693272122e-007,-0.999999940395355,1.05255022475603e-008,1.48727622217848e-007,-0.999999940395355,1.05254978066682e-008,1.94834868239013e-007,-0.999999940395355,-8.17575118716718e-010,-1.94834996136706e-007,-0.999999940395355,-8.1750850533524e-010,1.48727622217848e-007,-0.999999940395355,1.05254978066682e-008,2.19702172898906e-007,-0.999999940395355,5.90294106928013e-008,2.35730027497993e-007,-0.999999940395355,1.98698927533769e-007,1.94834868239013e-007,-0.999999940395355,-8.17575118716718e-010,2.19702172898906e-007,-0.999999940395355,5.90294106928013e-008,2.26366374533882e-008,-0.999999940395355,-1.6894153631597e-008,-7.16019599167339e-008,-0.999999940395355,2.055717018834e-008,2.35730027497993e-007,-0.999999940395355,1.98698927533769e-007,2.26366374533882e-008,-0.999999940395355,-1.6894153631597e-008, +-1.65621631964541e-008,-0.999999940395355,-1.22109724998154e-007,-1.44142717317663e-007,-0.999999940395355,-4.97668054322276e-007,-7.16019599167339e-008,-0.999999940395355,2.055717018834e-008,-1.65621631964541e-008,-0.999999940395355,-1.22109724998154e-007,4.87227431733572e-008,-0.999999940395355,-5.65562672250053e-008,-2.05210035630898e-008,-0.999999940395355,-3.96305409822162e-007,-1.44142717317663e-007,-0.999999940395355,-4.97668054322276e-007,4.87227431733572e-008,-0.999999940395355,-5.65562672250053e-008,2.78624341376599e-008,-0.999999940395355,5.87718460565156e-008,3.03092804188054e-008,-0.999999940395355,2.46235583034604e-008,-2.05210035630898e-008,-0.999999940395355,-3.96305409822162e-007,2.78624341376599e-008,-0.999999940395355,5.87718460565156e-008,1.00207397935037e-008,-0.999999940395355,7.03606062302242e-008,-3.111677671086e-008,-0.999999940395355,4.21952712770235e-008,3.03092804188054e-008,-0.999999940395355,2.46235583034604e-008,1.00207397935037e-008,-0.999999940395355,7.03606062302242e-008,3.06257220472617e-006,-0.999999940395355,2.11517772186198e-006,1.15061066026101e-005,-0.999999940395355,7.50537128624273e-006,-3.111677671086e-008,-0.999999940395355,4.21952712770235e-008,3.06257220472617e-006,-0.999999940395355,2.11517772186198e-006,8.23828759166645e-006,-0.999999940395355,5.53500649402849e-006,0.00557108130306005,-0.999969065189362,-0.00554143497720361,0.00774445664137602,-0.99994021654129,-0.00771815702319145,1.15061066026101e-005,-0.999999940395355,7.50537128624273e-006,0.712200820446014,0.00040806716424413,0.701975584030151,0.712177574634552,0.000436556903878227,0.701999247074127,0.686135351657867,3.71205824194476e-005,0.727473795413971,0.685862720012665,3.63009276043158e-005,0.727730810642242,-0.0582698099315166,0.996598720550537,0.058269489556551,-0.0582698471844196,0.996598839759827,0.0582695230841637,-0.00234561460092664,0.999994516372681,0.00233272672630847,-0.0032683121971786,0.99998939037323,0.00325681455433369,-0.701999306678772,0.000437213864643127,-0.712177395820618,-0.701975703239441,0.000408661464462057,-0.71220064163208, +-0.701735496520996,0.000117599207442254,-0.712437510490417,-0.701735436916351,0.000117599214718211,-0.712437570095062,0.0725920870900154,-0.994716465473175,-0.0725914984941483,0.0725923255085945,-0.99471640586853,-0.0725917369127274,0.00774445664137602,-0.99994021654129,-0.00771815702319145,0.00557108130306005,-0.999969065189362,-0.00554143497720361,0.685862421989441,-3.66751737601589e-005,0.727731108665466,0.686135053634644,-3.75032068404835e-005,0.72747415304184,0.712177455425262,-0.000437178503489122,0.701999306678772,0.712200701236725,-0.00040874071419239,0.701975643634796,-0.00345165352337062,-0.99998813867569,0.00344822439365089,-0.00329300877638161,-0.999989151954651,0.00328897964209318,-0.058239508420229,-0.996601521968842,0.0582520887255669,-0.0582395605742931,-0.996601581573486,0.0582521483302116,0.00780216697603464,0.999939203262329,-0.0077962507493794,0.00817459914833307,0.999933183193207,-0.00817013718187809,0.0725527405738831,0.994719803333282,-0.0725831240415573,0.0725531578063965,0.994719803333282,-0.0725835338234901,0.712200701236725,-0.00040874071419239,0.701975643634796,0.712177455425262,-0.000437178503489122,0.701999306678772,0.711510956287384,-0.00133867654949427,0.702673673629761,0.711565673351288,-0.00126002624165267,0.702618300914764,-0.0582395605742931,-0.996601581573486,0.0582521483302116,-0.058239508420229,-0.996601521968842,0.0582520887255669,-0.193470925092697,-0.961841106414795,0.193469643592834,-0.193470671772957,-0.96184116601944,0.193469360470772,-0.70225715637207,-0.000751536921598017,-0.711922943592072,-0.70209139585495,0.00159979064483196,-0.712084889411926,-0.692579448223114,0.0662549734115601,-0.718292355537415,-0.702618002891541,-0.00126177864149213,-0.711565971374512,-0.702673554420471,-0.00134028901811689,-0.711511015892029,0.0725531578063965,0.994719803333282,-0.0725835338234901,0.0725527405738831,0.994719803333282,-0.0725831240415573,0.201028928160667,0.958736121654511,-0.201027676463127,0.201029524207115,0.958735883235931,-0.201028272509575,0.711565673351288,-0.00126002624165267,0.702618300914764, +0.711510956287384,-0.00133867654949427,0.702673673629761,0.710478007793427,-0.00232538697309792,0.703715443611145,0.710564017295837,-0.0022670435719192,0.703628778457642,-0.193470671772957,-0.96184116601944,0.193469360470772,-0.193470925092697,-0.961841106414795,0.193469643592834,-0.370507508516312,-0.851733207702637,0.370505958795547,-0.370507478713989,-0.851733326911926,0.370505958795547,-0.702673554420471,-0.00134028901811689,-0.711511015892029,-0.702618002891541,-0.00126177864149213,-0.711565971374512,-0.703629672527313,-0.00226755067706108,-0.710563182830811,-0.703716397285461,-0.00232598348520696,-0.710477113723755,0.201029524207115,0.958735883235931,-0.201028272509575,0.201028928160667,0.958736121654511,-0.201027676463127,0.367933213710785,0.853962659835815,-0.36793041229248,0.36793327331543,0.853962600231171,-0.367930471897125,0.710564017295837,-0.0022670435719192,0.703628778457642,0.710478007793427,-0.00232538697309792,0.703715443611145,0.709249019622803,-0.00269896280951798,0.704952836036682,0.709314942359924,-0.00269954348914325,0.704886436462402,-0.370507478713989,-0.851733326911926,0.370505958795547,-0.370507508516312,-0.851733207702637,0.370505958795547,-0.521234273910522,-0.675745487213135,0.521231889724731,-0.521234154701233,-0.675745666027069,0.521231770515442,-0.703716397285461,-0.00232598348520696,-0.710477113723755,-0.703629672527313,-0.00226755067706108,-0.710563182830811,-0.704887449741364,-0.00270128063857555,-0.709313869476318,-0.704953789710999,-0.00270076049491763,-0.709248006343842,0.36793327331543,0.853962600231171,-0.367930471897125,0.367933213710785,0.853962659835815,-0.36793041229248,0.516361355781555,0.683187067508698,-0.51635867357254,0.516361117362976,0.683187365531921,-0.516358435153961,0.709314942359924,-0.00269954348914325,0.704886436462402,0.709249019622803,-0.00269896280951798,0.704952836036682,0.708240866661072,-0.00238283886574209,0.705966770648956,0.708269476890564,-0.00240230862982571,0.705938041210175,-0.521234154701233,-0.675745666027069,0.521231770515442,-0.521234273910522,-0.675745487213135,0.521231889724731, +-0.616617500782013,-0.489459097385406,0.616613745689392,-0.616617500782013,-0.489459246397018,0.616613686084747,-0.704953789710999,-0.00270076049491763,-0.709248006343842,-0.704887449741364,-0.00270128063857555,-0.709313869476318,-0.705939650535584,-0.00240451097488403,-0.708267748355865,-0.705968499183655,-0.00238503352738917,-0.708239138126373,0.516361117362976,0.683187365531921,-0.516358435153961,0.516361355781555,0.683187067508698,-0.51635867357254,0.614584505558014,0.49454402923584,-0.614582717418671,0.614584386348724,0.494544327259064,-0.614582538604736,0.708269476890564,-0.00240230862982571,0.705938041210175,0.708240866661072,-0.00238283886574209,0.705966770648956,0.707610070705414,-0.00173840392380953,0.706600844860077,0.70761901140213,-0.00175220682285726,0.706591904163361,-0.616617500782013,-0.489459246397018,0.616613686084747,-0.616617500782013,-0.489459097385406,0.616613745689392,-0.668814480304718,-0.324619084596634,0.668812036514282,-0.668814420700073,-0.324619174003601,0.668812096118927,-0.705968499183655,-0.00238503352738917,-0.708239138126373,-0.705939650535584,-0.00240451097488403,-0.708267748355865,-0.70659351348877,-0.00175322976429015,-0.707617342472076,-0.706602454185486,-0.00173938507214189,-0.70760852098465,0.614584386348724,0.494544327259064,-0.614582538604736,0.614584505558014,0.49454402923584,-0.614582717418671,0.6684929728508,0.32594296336174,-0.668489456176758,0.66849285364151,0.325943231582642,-0.668489456176758,0.70761901140213,-0.00175220682285726,0.706591904163361,0.707610070705414,-0.00173840392380953,0.706600844860077,0.707278251647949,-0.00103540846612304,0.706934452056885,0.707280397415161,-0.00104211654979736,0.706932365894318,-0.668814420700073,-0.324619174003601,0.668812096118927,-0.668814480304718,-0.324619084596634,0.668812036514282,-0.69503253698349,-0.18402037024498,0.695029675960541,-0.695032477378845,-0.184020519256592,0.695029616355896,-0.706602454185486,-0.00173938507214189,-0.70760852098465,-0.70659351348877,-0.00175322976429015,-0.707617342472076,-0.706933319568634,-0.0010425818618387,-0.707279324531555, +-0.706935465335846,-0.00103588192723691,-0.707277238368988,0.66849285364151,0.325943231582642,-0.668489456176758,0.6684929728508,0.32594296336174,-0.668489456176758,0.695061802864075,0.183797791600227,-0.695059180259705,0.695061862468719,0.183797836303711,-0.695059239864349,0.707280397415161,-0.00104211654979736,0.706932365894318,0.707278251647949,-0.00103540846612304,0.706934452056885,0.707139551639557,-0.0003436490369495,0.707073867321014,0.707139730453491,-0.000345641688909382,0.707073748111725,-0.695032477378845,-0.184020519256592,0.695029616355896,-0.69503253698349,-0.18402037024498,0.695029675960541,-0.705855429172516,-0.0595241077244282,0.705850422382355,-0.705855429172516,-0.0595242232084274,0.705850422382355,-0.706935465335846,-0.00103588192723691,-0.707277238368988,-0.706933319568634,-0.0010425818618387,-0.707279324531555,-0.707074880599976,-0.00034577728365548,-0.707138538360596,-0.707074999809265,-0.000343778694514185,-0.707138299942017,0.695061862468719,0.183797836303711,-0.695059239864349,0.695061802864075,0.183797791600227,-0.695059180259705,0.705863416194916,0.059296615421772,-0.705861628055573,0.705863416194916,0.0592968612909317,-0.705861568450928,0.707139730453491,-0.000345641688909382,0.707073748111725,0.707139551639557,-0.0003436490369495,0.707073867321014,0.707139730453491,0.000343374616932124,0.707073628902435,0.70713996887207,0.000345362292136997,0.707073509693146,-0.705855429172516,-0.0595242232084274,0.705850422382355,-0.705855429172516,-0.0595241077244282,0.705850422382355,-0.70585560798645,0.0595244877040386,0.705850303173065,-0.705855667591095,0.0595244131982327,0.70585024356842,-0.707074999809265,-0.000343778694514185,-0.707138299942017,-0.707074880599976,-0.00034577728365548,-0.707138538360596,-0.70707505941391,0.000346029293723404,-0.707138359546661,-0.707075238227844,0.000344042462529615,-0.707138180732727,0.705863416194916,0.0592968612909317,-0.705861568450928,0.705863416194916,0.059296615421772,-0.705861628055573,0.705864369869232,-0.0592965148389339,-0.705860733985901,0.705864310264587,-0.0592963472008705,-0.705860733985901, +0.70713996887207,0.000345362292136997,0.707073509693146,0.707139730453491,0.000343374616932124,0.707073628902435,0.707278728485107,0.00103503430727869,0.706933856010437,0.707280933856964,0.00104175764136016,0.706931829452515,-0.705855667591095,0.0595244131982327,0.70585024356842,-0.70585560798645,0.0595244877040386,0.705850303173065,-0.695033431053162,0.184020966291428,0.69502854347229,-0.695033490657806,0.184020906686783,0.69502854347229,-0.707075238227844,0.000344042462529615,-0.707138180732727,-0.70707505941391,0.000346029293723404,-0.707138359546661,-0.706933975219727,0.00104211340658367,-0.707278728485107,-0.706936061382294,0.0010353981051594,-0.70727664232254,0.705864310264587,-0.0592963472008705,-0.705860733985901,0.705864369869232,-0.0592965148389339,-0.705860733985901,0.695063352584839,-0.183798536658287,-0.695057451725006,0.695063412189484,-0.183798223733902,-0.695057511329651,0.707280933856964,0.00104175764136016,0.706931829452515,0.707278728485107,0.00103503430727869,0.706933856010437,0.707609713077545,0.00173987320158631,0.706601202487946,0.707618594169617,0.00175371766090393,0.706592321395874,-0.695033490657806,0.184020906686783,0.69502854347229,-0.695033431053162,0.184020966291428,0.69502854347229,-0.6688152551651,0.324619799852371,0.668810963630676,-0.668815195560455,0.324619650840759,0.668811023235321,-0.706936061382294,0.0010353981051594,-0.70727664232254,-0.706933975219727,0.00104211340658367,-0.707278728485107,-0.706593632698059,0.00175347202457488,-0.707617342472076,-0.706602573394775,0.00173964002169669,-0.70760840177536,0.695063412189484,-0.183798223733902,-0.695057511329651,0.695063352584839,-0.183798536658287,-0.695057451725006,0.668494343757629,-0.325943827629089,-0.668487668037415,0.668494522571564,-0.325943320989609,-0.668487846851349,0.707618594169617,0.00175371766090393,0.706592321395874,0.707609713077545,0.00173987320158631,0.706601202487946,0.7082399725914,0.00238309823907912,0.705967664718628,0.708268523216248,0.00240239221602678,0.705938935279846,-0.668815195560455,0.324619650840759,0.668811023235321, +-0.6688152551651,0.324619799852371,0.668810963630676,-0.616616368293762,0.489462167024612,0.616612493991852,-0.616616308689117,0.489462226629257,0.616612434387207,-0.706602573394775,0.00173964002169669,-0.70760840177536,-0.706593632698059,0.00175347202457488,-0.707617342472076,-0.705939590930939,0.00240392005071044,-0.708267867565155,-0.705968379974365,0.00238448660820723,-0.708239197731018,0.668494522571564,-0.325943320989609,-0.668487846851349,0.668494343757629,-0.325943827629089,-0.668487668037415,0.614585697650909,-0.494544953107834,-0.614580810070038,0.614585936069489,-0.494544327259064,-0.614581108093262,0.708268523216248,0.00240239221602678,0.705938935279846,0.7082399725914,0.00238309823907912,0.705967664718628,0.709249079227448,0.00269569433294237,0.704952657222748,0.709315061569214,0.00269618816673756,0.704886317253113,-0.616616308689117,0.489462226629257,0.616612434387207,-0.616616368293762,0.489462167024612,0.616612493991852,-0.521231055259705,0.675749778747559,0.521229565143585,-0.521231055259705,0.675749778747559,0.521229565143585,-0.705968379974365,0.00238448660820723,-0.708239197731018,-0.705939590930939,0.00240392005071044,-0.708267867565155,-0.704887390136719,0.00270002521574497,-0.709313988685608,-0.704953789710999,0.00269951135851443,-0.709248065948486,0.614585936069489,-0.494544327259064,-0.614581108093262,0.614585697650909,-0.494544953107834,-0.614580810070038,0.516362071037292,-0.683187127113342,-0.516357839107513,0.516362607479095,-0.683186292648315,-0.516358375549316,0.709315061569214,0.00269618816673756,0.704886317253113,0.709249079227448,0.00269569433294237,0.704952657222748,0.710478782653809,0.00232182210311294,0.703714728355408,0.710564792156219,0.00226357439532876,0.703628122806549,-0.521231055259705,0.675749778747559,0.521229565143585,-0.521231055259705,0.675749778747559,0.521229565143585,-0.370504170656204,0.851735234260559,0.370504558086395,-0.37050449848175,0.85173511505127,0.370504826307297,-0.704953789710999,0.00269951135851443,-0.709248065948486,-0.704887390136719,0.00270002521574497,-0.709313988685608, +-0.703628540039063,0.00226764404214919,-0.710564315319061,-0.703715205192566,0.00232588406652212,-0.710478246212006,0.516362607479095,-0.683186292648315,-0.516358375549316,0.516362071037292,-0.683187127113342,-0.516357839107513,0.367933988571167,-0.853962421417236,-0.367929995059967,0.367934763431549,-0.853961884975433,-0.367930769920349,0.710564792156219,0.00226357439532876,0.703628122806549,0.710478782653809,0.00232182210311294,0.703714728355408,0.711511492729187,0.00133715849369764,0.702673017978668,0.71156632900238,0.00125871121417731,0.702617764472961,-0.37050449848175,0.85173511505127,0.370504826307297,-0.370504170656204,0.851735234260559,0.370504558086395,-0.193471863865852,0.961840689182281,0.193471387028694,-0.193471983075142,0.961840629577637,0.193471491336823,-0.703715205192566,0.00232588406652212,-0.710478246212006,-0.703628540039063,0.00226764404214919,-0.710564315319061,-0.702617406845093,0.00126127956900746,-0.711566627025604,-0.702672719955444,0.00133992440532893,-0.711511850357056,0.367934763431549,-0.853961884975433,-0.367930769920349,0.367933988571167,-0.853962421417236,-0.367929995059967,0.201029449701309,-0.958736300468445,-0.201026827096939,0.201029539108276,-0.958736181259155,-0.201026931405067,0.71156632900238,0.00125871121417731,0.702617764472961,0.711511492729187,0.00133715849369764,0.702673017978668,0.712177574634552,0.000436556903878227,0.701999247074127,0.712200820446014,0.00040806716424413,0.701975584030151,-0.193471983075142,0.961840629577637,0.193471491336823,-0.193471863865852,0.961840689182281,0.193471387028694,-0.0582698471844196,0.996598839759827,0.0582695230841637,-0.0582698099315166,0.996598720550537,0.058269489556551,-0.702672719955444,0.00133992440532893,-0.711511850357056,-0.702617406845093,0.00126127956900746,-0.711566627025604,-0.701975703239441,0.000408661464462057,-0.71220064163208,-0.701999306678772,0.000437213864643127,-0.712177395820618,0.201029539108276,-0.958736181259155,-0.201026931405067,0.201029449701309,-0.958736300468445,-0.201026827096939,0.0725923255085945,-0.99471640586853,-0.0725917369127274, +0.0725920870900154,-0.994716465473175,-0.0725914984941483,-0.0725920051336288,-0.99471640586853,-0.0725921094417572,-0.0725917294621468,-0.994716346263886,-0.0725918263196945,-0.00557107385247946,-0.999969065189362,-0.00554148014634848,-0.0077444645576179,-0.999940276145935,-0.00771824037656188,0.701976239681244,0.000410496402764693,-0.712200164794922,0.701999723911285,0.000439110532170162,-0.712176978588104,0.70173579454422,0.000118811592983548,-0.712437212467194,0.70173579454422,0.000118811578431632,-0.712437152862549,0.0582700967788696,0.996598780155182,0.0582702159881592,0.0582699738442898,0.996598780155182,0.0582700930535793,0.00326843559741974,0.999989330768585,0.00325691723264754,0.00234573241323233,0.999994397163391,0.00233277003280818,-0.712178409099579,0.000437804847024381,0.701998293399811,-0.712201654911041,0.000409312313422561,0.70197468996048,-0.685862958431244,3.66751737601589e-005,0.727730631828308,-0.686135590076447,3.75032832380384e-005,0.727473616600037,-0.00817491393536329,0.999933063983917,-0.00817150250077248,-0.0078024473041296,0.999939143657684,-0.00779755134135485,-0.0725536197423935,0.994719684123993,-0.0725851133465767,-0.0725531578063965,0.994719743728638,-0.0725846588611603,0.00329330540262163,-0.999989211559296,0.0032876399345696,0.00345196854323149,-0.999988079071045,0.00344691821373999,0.0582403726875782,-0.996601581573486,0.0582522228360176,0.0582403019070625,-0.996601462364197,0.0582521520555019,-0.686134934425354,-3.75032250303775e-005,0.72747415304184,-0.685862421989441,-3.66751555702649e-005,0.727731227874756,-0.712201535701752,-0.000409920554375276,0.701974868774414,-0.712178289890289,-0.000438474264228716,0.701998472213745,-0.0725531578063965,0.994719743728638,-0.0725846588611603,-0.0725536197423935,0.994719684123993,-0.0725851133465767,-0.201028853654861,0.958736181259155,-0.201027929782867,-0.201028570532799,0.958736300468445,-0.201027631759644,0.0582403019070625,-0.996601462364197,0.0582521520555019,0.0582403726875782,-0.996601581573486,0.0582522228360176,0.193470701575279,-0.961840987205505,0.193470627069473, +0.193470850586891,-0.961840987205505,0.193470790982246,-0.712178289890289,-0.000438474264228716,0.701998472213745,-0.712201535701752,-0.000409920554375276,0.701974868774414,-0.711566805839539,-0.00126264442224056,0.702617287635803,-0.7115119099617,-0.00134130055084825,0.702672600746155,-0.201028570532799,0.958736300468445,-0.201027631759644,-0.201028853654861,0.958736181259155,-0.201027929782867,-0.367931336164474,0.853962600231171,-0.367932111024857,-0.367931693792343,0.853962481021881,-0.367932498455048,0.70261937379837,-0.00126389553770423,-0.711564660072327,0.702674746513367,-0.00134213594719768,-0.711509943008423,0.703717112541199,-0.00232598488219082,-0.710476338863373,0.703630328178406,-0.0022675518412143,-0.710562527179718,0.193470850586891,-0.961840987205505,0.193470790982246,0.193470701575279,-0.961840987205505,0.193470627069473,0.370508253574371,-0.851732432842255,0.37050673365593,0.370508372783661,-0.851732432842255,0.370506823062897,-0.7115119099617,-0.00134130055084825,0.702672600746155,-0.711566805839539,-0.00126264442224056,0.702617287635803,-0.71056455373764,-0.00226968876086175,0.703628301620483,-0.710478544235229,-0.00232802587561309,0.703714966773987,-0.367931693792343,0.853962481021881,-0.367932498455048,-0.367931336164474,0.853962600231171,-0.367932111024857,-0.516359269618988,0.683186709880829,-0.516361236572266,-0.516359567642212,0.68318647146225,-0.5163614153862,0.703630328178406,-0.0022675518412143,-0.710562527179718,0.703717112541199,-0.00232598488219082,-0.710476338863373,0.704955339431763,-0.00269814836792648,-0.709246456623077,0.704889118671417,-0.00269892672076821,-0.709312379360199,0.370508372783661,-0.851732432842255,0.370506823062897,0.370508253574371,-0.851732432842255,0.37050673365593,0.521235704421997,-0.675744712352753,0.521231472492218,0.521235823631287,-0.675744593143463,0.521231532096863,-0.710478544235229,-0.00232802587561309,0.703714966773987,-0.71056455373764,-0.00226968876086175,0.703628301620483,-0.7093146443367,-0.00270144059322774,0.704886734485626,-0.709248661994934,-0.00270078261382878,0.704953134059906, +-0.516359567642212,0.68318647146225,-0.5163614153862,-0.516359269618988,0.683186709880829,-0.516361236572266,-0.61458283662796,0.494543761014938,-0.614584624767303,-0.61458295583725,0.494543641805649,-0.614584684371948,0.704889118671417,-0.00269892672076821,-0.709312379360199,0.704955339431763,-0.00269814836792648,-0.709246456623077,0.705968856811523,-0.00238343887031078,-0.708238840103149,0.705940186977386,-0.00240271771326661,-0.708267331123352,0.521235823631287,-0.675744593143463,0.521231532096863,0.521235704421997,-0.675744712352753,0.521231472492218,0.616616427898407,-0.489459127187729,0.616614758968353,0.616616547107697,-0.489458918571472,0.616614878177643,-0.709248661994934,-0.00270078261382878,0.704953134059906,-0.7093146443367,-0.00270144059322774,0.704886734485626,-0.708267986774445,-0.00240451144054532,0.705939412117004,-0.708239495754242,-0.00238511036150157,0.705968141555786,-0.61458295583725,0.494543641805649,-0.614584684371948,-0.61458283662796,0.494543761014938,-0.614584624767303,-0.668489813804626,0.325942695140839,-0.66849273443222,-0.668489873409271,0.325942546129227,-0.66849273443222,0.705940186977386,-0.00240271771326661,-0.708267331123352,0.705968856811523,-0.00238343887031078,-0.708238840103149,0.706603288650513,-0.00174040079582483,-0.707607686519623,0.706594228744507,-0.00175424828194082,-0.707616627216339,0.616616547107697,-0.489458918571472,0.616614878177643,0.616616427898407,-0.489459127187729,0.616614758968353,0.668812215328217,-0.324618369340897,0.668814659118652,0.668812215328217,-0.324618458747864,0.668814599514008,-0.708239495754242,-0.00238511036150157,0.705968141555786,-0.708267986774445,-0.00240451144054532,0.705939412117004,-0.707616925239563,-0.00175426388159394,0.706594049930573,-0.707607984542847,-0.00174041697755456,0.706602931022644,-0.668489873409271,0.325942546129227,-0.66849273443222,-0.668489813804626,0.325942695140839,-0.66849273443222,-0.695057928562164,0.183798059821129,-0.695062935352325,-0.695057988166809,0.183798030018806,-0.695062935352325,0.706594228744507,-0.00175424828194082,-0.707616627216339, +0.706603288650513,-0.00174040079582483,-0.707607686519623,0.706936895847321,-0.00103634945116937,-0.707275807857513,0.706934750080109,-0.00104305800050497,-0.707277894020081,0.668812215328217,-0.324618458747864,0.668814599514008,0.668812215328217,-0.324618369340897,0.668814659118652,0.695030570030212,-0.18401962518692,0.695031821727753,0.695030570030212,-0.184019595384598,0.695031762123108,-0.707607984542847,-0.00174041697755456,0.706602931022644,-0.707616925239563,-0.00175426388159394,0.706594049930573,-0.707278251647949,-0.00104224123060703,0.706934452056885,-0.707276046276093,-0.00103551684878767,0.706936597824097,-0.695057988166809,0.183798030018806,-0.695062935352325,-0.695057928562164,0.183798059821129,-0.695062935352325,-0.705859661102295,0.0592971928417683,-0.705865263938904,-0.705859661102295,0.0592971406877041,-0.705865263938904,0.706934750080109,-0.00104305800050497,-0.707277894020081,0.706936895847321,-0.00103634945116937,-0.707275807857513,0.707076191902161,-0.000343966588843614,-0.707137227058411,0.707075953483582,-0.000345963781001046,-0.707137405872345,0.695030570030212,-0.184019595384598,0.695031762123108,0.695030570030212,-0.18401962518692,0.695031821727753,0.705853283405304,-0.0595242455601692,0.705852627754211,0.705853283405304,-0.059524342417717,0.705852627754211,-0.707276046276093,-0.00103551684878767,0.706936597824097,-0.707278251647949,-0.00104224123060703,0.706934452056885,-0.707137286663055,-0.000345595588441938,0.707076072692871,-0.707137048244476,-0.000343605235684663,0.70707631111145,-0.705859661102295,0.0592971406877041,-0.705865263938904,-0.705859661102295,0.0592971928417683,-0.705865263938904,-0.705860376358032,-0.0592969059944153,-0.705864667892456,-0.705860376358032,-0.0592969618737698,-0.705864667892456,0.707075953483582,-0.000345963781001046,-0.707137405872345,0.707076191902161,-0.000343966588843614,-0.707137227058411,0.707076191902161,0.000344308617059141,-0.707137227058411,0.707076013088226,0.000346299057127908,-0.707137405872345,0.705853283405304,-0.059524342417717,0.705852627754211, +0.705853283405304,-0.0595242455601692,0.705852627754211,0.705853521823883,0.0595246963202953,0.705852270126343,0.705853521823883,0.0595246888697147,0.705852270126343,-0.707137048244476,-0.000343605235684663,0.70707631111145,-0.707137286663055,-0.000345595588441938,0.707076072692871,-0.707137882709503,0.000345406122505665,0.707075536251068,-0.707137703895569,0.000343415595125407,0.707075655460358,-0.705860376358032,-0.0592969618737698,-0.705864667892456,-0.705860376358032,-0.0592969059944153,-0.705864667892456,-0.695059299468994,-0.183798015117645,-0.69506162405014,-0.695059299468994,-0.183798164129257,-0.69506162405014,0.707076013088226,0.000346299057127908,-0.707137405872345,0.707076191902161,0.000344308617059141,-0.707137227058411,0.706936597824097,0.00103563966695219,-0.707276105880737,0.70693451166153,0.00104234111495316,-0.707278251647949,0.705853521823883,0.0595246888697147,0.705852270126343,0.705853521823883,0.0595246963202953,0.705852270126343,0.695031404495239,0.184020981192589,0.695030510425568,0.695031404495239,0.184020921587944,0.695030570030212,-0.707137703895569,0.000343415595125407,0.707075655460358,-0.707137882709503,0.000345406122505665,0.707075536251068,-0.707278966903687,0.00104234402533621,0.706933796405792,-0.707276880741119,0.00103562406729907,0.706935822963715,-0.695059299468994,-0.183798164129257,-0.69506162405014,-0.695059299468994,-0.183798015117645,-0.69506162405014,-0.668490707874298,-0.32594221830368,-0.668492019176483,-0.668490648269653,-0.325942575931549,-0.668492019176483,0.70693451166153,0.00104234111495316,-0.707278251647949,0.706936597824097,0.00103563966695219,-0.707276105880737,0.706603467464447,0.00174012721981853,-0.707607448101044,0.706594526767731,0.00175399880390614,-0.707616329193115,0.695031404495239,0.184020921587944,0.695030570030212,0.695031404495239,0.184020981192589,0.695030510425568,0.668812394142151,0.324619054794312,0.668814122676849,0.668812334537506,0.324619114398956,0.668814063072205,-0.707276880741119,0.00103562406729907,0.706935822963715,-0.707278966903687,0.00104234402533621,0.706933796405792, +-0.70761638879776,0.0017542204586789,0.706594467163086,-0.707607567310333,0.00174037693068385,0.706603407859802,-0.668490648269653,-0.325942575931549,-0.668492019176483,-0.668490707874298,-0.32594221830368,-0.668492019176483,-0.614582359790802,-0.494543999433517,-0.614584863185883,-0.614582300186157,-0.494544446468353,-0.614584743976593,0.706594526767731,0.00175399880390614,-0.707616329193115,0.706603467464447,0.00174012721981853,-0.707607448101044,0.705969274044037,0.00238535227254033,-0.708238303661346,0.705940544605255,0.00240473099984229,-0.708266913890839,0.668812334537506,0.324619114398956,0.668814063072205,0.668812394142151,0.324619054794312,0.668814122676849,0.616613686084747,0.489462107419968,0.616615235805511,0.616613686084747,0.489462107419968,0.616615176200867,-0.707607567310333,0.00174037693068385,0.706603407859802,-0.70761638879776,0.0017542204586789,0.706594467163086,-0.708267450332642,0.00240382272750139,0.705940067768097,-0.708238840103149,0.00238446751609445,0.705968856811523,-0.614582300186157,-0.494544446468353,-0.614584743976593,-0.614582359790802,-0.494543999433517,-0.614584863185883,-0.51635867357254,-0.683186769485474,-0.516361773014069,-0.516358375549316,-0.683187246322632,-0.516361474990845,0.705940544605255,0.00240473099984229,-0.708266913890839,0.705969274044037,0.00238535227254033,-0.708238303661346,0.704954504966736,0.00269951019436121,-0.709247291088104,0.704888164997101,0.00270002475008368,-0.709313213825226,0.616613686084747,0.489462107419968,0.616615176200867,0.616613686084747,0.489462107419968,0.616615235805511,0.52122974395752,0.675749957561493,0.521230757236481,0.521229803562164,0.675749838352203,0.521230816841125,-0.708238840103149,0.00238446751609445,0.705968856811523,-0.708267450332642,0.00240382272750139,0.705940067768097,-0.70931476354599,0.00269999378360808,0.704886615276337,-0.709248781204224,0.00269934698008001,0.704953014850616,-0.516358375549316,-0.683187246322632,-0.516361474990845,-0.51635867357254,-0.683186769485474,-0.516361773014069,-0.367931813001633,-0.853962063789368,-0.367933183908463, +-0.367931485176086,-0.853962242603302,-0.367932856082916,0.704888164997101,0.00270002475008368,-0.709313213825226,0.704954504966736,0.00269951019436121,-0.709247291088104,0.703716576099396,0.00232465262524784,-0.710476875305176,0.703629970550537,0.00226622214540839,-0.710562884807587,0.521229803562164,0.675749838352203,0.521230816841125,0.52122974395752,0.675749957561493,0.521230757236481,0.370505303144455,0.851734161376953,0.370505899190903,0.370505303144455,0.851734161376953,0.37050586938858,-0.709248781204224,0.00269934698008001,0.704953014850616,-0.70931476354599,0.00269999378360808,0.704886615276337,-0.710563957691193,0.00226672505959868,0.703628838062286,-0.710478067398071,0.00232524517923594,0.7037153840065,-0.367931485176086,-0.853962242603302,-0.367932856082916,-0.367931813001633,-0.853962063789368,-0.367933183908463,-0.201028272509575,-0.958736300468445,-0.201028108596802,-0.201028317213058,-0.958736300468445,-0.201028138399124,0.703629970550537,0.00226622214540839,-0.710562884807587,0.703716576099396,0.00232465262524784,-0.710476875305176,0.702673971652985,0.00133976130746305,-0.71151065826416,0.702618539333344,0.00126147933769971,-0.711565494537354,0.370505303144455,0.851734161376953,0.37050586938858,0.370505303144455,0.851734161376953,0.370505899190903,0.193472996354103,0.961840152740479,0.193472623825073,0.193473190069199,0.961840033531189,0.193472847342491,-0.710478067398071,0.00232524517923594,0.7037153840065,-0.710563957691193,0.00226672505959868,0.703628838062286,-0.71156632900238,0.00126001914031804,0.702617704868317,-0.711511433124542,0.00133846921380609,0.702673256397247,-0.201028317213058,-0.958736300468445,-0.201028138399124,-0.201028272509575,-0.958736300468445,-0.201028108596802,-0.0725917294621468,-0.994716346263886,-0.0725918263196945,-0.0725920051336288,-0.99471640586853,-0.0725921094417572,0.702618539333344,0.00126147933769971,-0.711565494537354,0.702673971652985,0.00133976130746305,-0.71151065826416,0.701999723911285,0.000439110532170162,-0.712176978588104,0.701976239681244,0.000410496402764693,-0.712200164794922, +0.193473190069199,0.961840033531189,0.193472847342491,0.193472996354103,0.961840152740479,0.193472623825073,0.0582699738442898,0.996598780155182,0.0582700930535793,0.0582700967788696,0.996598780155182,0.0582702159881592,-0.711511433124542,0.00133846921380609,0.702673256397247,-0.71156632900238,0.00126001914031804,0.702617704868317,-0.712201654911041,0.000409312313422561,0.70197468996048,-0.712178409099579,0.000437804847024381,0.701998293399811,-0.635246872901917,0,-0.772309124469757,-0.739008128643036,0,-0.673696339130402,-0.739008128643036,0,-0.673696398735046,-0.635246813297272,0,-0.772309124469757,1.54286988163221e-006,0.999999940395355,-7.93113315467053e-007,2.80659662621474e-007,0.999999940395355,-1.0463888600043e-007,1.13341123153532e-007,0.999999940395355,1.92766293594104e-007,1.0110088055626e-007,0.999999940395355,2.52210782036855e-007,-2.84219439095068e-008,-0.999999940395355,6.12528694432513e-008,-3.06279957840161e-006,-0.999999940395355,2.11532210414589e-006,9.22658784929808e-008,-0.999999940395355,1.01188582846135e-007,-3.09019689836987e-008,-0.999999940395355,5.12295663668283e-008,2.80659662621474e-007,0.999999940395355,-1.0463888600043e-007,-6.80723175605635e-008,0.999999940395355,-3.06603737953992e-007,-2.3628878409454e-007,0.999999940395355,-1.0379736181676e-007,1.13341123153532e-007,0.999999940395355,1.92766293594104e-007,-4.79960462484996e-008,-0.999999940395355,5.3143271117051e-008,-2.84219439095068e-008,-0.999999940395355,6.12528694432513e-008,-3.09019689836987e-008,-0.999999940395355,5.12295663668283e-008,-1.44252831901781e-008,-0.999999940395355,3.59837981633859e-009,-6.80723175605635e-008,0.999999940395355,-3.06603737953992e-007,-1.9421602814873e-007,0.999999940395355,-1.35349409902119e-007,-2.12122287734928e-007,0.999999940395355,-1.92766464124361e-007,-2.3628878409454e-007,0.999999940395355,-1.0379736181676e-007,-3.20978159606966e-008,-0.999999940395355,-4.38813394509907e-008,-4.79960462484996e-008,-0.999999940395355,5.3143271117051e-008,-1.44252831901781e-008,-0.999999940395355,3.59837981633859e-009, +-2.70369984178842e-008,-0.999999940395355,1.23754624326011e-008,-1.9421602814873e-007,0.999999940395355,-1.35349409902119e-007,-1.6573590500002e-008,0.999999940395355,5.43974998379326e-008,7.28207965039473e-008,0.999999940395355,-2.07594496259844e-007,-2.12122287734928e-007,0.999999940395355,-1.92766464124361e-007,3.4919590774507e-008,-0.999999940395355,-1.12914229077887e-007,-3.20978159606966e-008,-0.999999940395355,-4.38813394509907e-008,-2.70369984178842e-008,-0.999999940395355,1.23754624326011e-008,-1.2572110019704e-009,-0.999999940395355,-2.44187359221826e-009,-1.6573590500002e-008,0.999999940395355,5.43974998379326e-008,1.11040328931722e-007,0.999999940395355,4.20550350099802e-008,1.90075454042926e-007,0.999999940395355,-1.59403057864438e-007,7.28207965039473e-008,0.999999940395355,-2.07594496259844e-007,-2.26367546929396e-008,-0.999999940395355,-1.6894109222676e-008,3.4919590774507e-008,-0.999999940395355,-1.12914229077887e-007,-1.2572110019704e-009,-0.999999940395355,-2.44187359221826e-009,-5.57704069592546e-008,-0.999999940395355,-3.00616775916751e-008,1.11040328931722e-007,0.999999940395355,4.20550350099802e-008,1.91991318843066e-007,0.999999940395355,-2.97128277537695e-008,2.03279682864377e-007,0.999999940395355,-8.34085724932265e-008,1.90075454042926e-007,0.999999940395355,-1.59403057864438e-007,-2.19702116055487e-007,-0.999999940395355,5.90294462199381e-008,-2.26367546929396e-008,-0.999999940395355,-1.6894109222676e-008,-5.57704069592546e-008,-0.999999940395355,-3.00616775916751e-008,-2.14066815829028e-007,-0.999999940395355,9.92259074905633e-009,1.91991318843066e-007,0.999999940395355,-2.97128277537695e-008,1.11701218941107e-007,0.999999940395355,1.2913625724309e-008,9.39178832481957e-008,0.999999940395355,1.20479333176604e-008,2.03279682864377e-007,0.999999940395355,-8.34085724932265e-008,-1.48727693272122e-007,-0.999999940395355,1.05255022475603e-008,-2.19702116055487e-007,-0.999999940395355,5.90294462199381e-008,-2.14066815829028e-007,-0.999999940395355,9.92259074905633e-009,-1.32516703388319e-007,-0.999999940395355,1.4513643620262e-008, +1.11701218941107e-007,0.999999940395355,1.2913625724309e-008,-1.11701154992261e-007,0.999999940395355,3.31620704230318e-008,-9.39179187753325e-008,0.999999940395355,3.89240248921396e-008,9.39178832481957e-008,0.999999940395355,1.20479333176604e-008,1.48727622217848e-007,-0.999999940395355,1.05254978066682e-008,-1.48727693272122e-007,-0.999999940395355,1.05255022475603e-008,-1.32516703388319e-007,-0.999999940395355,1.4513643620262e-008,1.325166465449e-007,-0.999999940395355,1.4513637403013e-008,-1.11701154992261e-007,0.999999940395355,3.31620704230318e-008,-1.91991460951613e-007,0.999999940395355,-5.18416731765114e-009,-2.03279711286086e-007,0.999999940395355,-5.46789848954177e-008,-9.39179187753325e-008,0.999999940395355,3.89240248921396e-008,2.19702172898906e-007,-0.999999940395355,5.90294106928013e-008,1.48727622217848e-007,-0.999999940395355,1.05254978066682e-008,1.325166465449e-007,-0.999999940395355,1.4513637403013e-008,2.14066830039883e-007,-0.999999940395355,9.92252680021011e-009,-1.91991460951613e-007,0.999999940395355,-5.18416731765114e-009,-1.11040229455739e-007,0.999999940395355,4.101623218844e-008,-1.90075539308054e-007,0.999999940395355,-1.68670595712683e-007,-2.03279711286086e-007,0.999999940395355,-5.46789848954177e-008,2.26366374533882e-008,-0.999999940395355,-1.6894153631597e-008,2.19702172898906e-007,-0.999999940395355,5.90294106928013e-008,2.14066830039883e-007,-0.999999940395355,9.92252680021011e-009,5.57705099879513e-008,-0.999999940395355,-3.00617060133845e-008,-1.11040229455739e-007,0.999999940395355,4.101623218844e-008,1.65736508961345e-008,0.999999940395355,5.05326731570221e-008,-7.28209812450586e-008,0.999999940395355,-2.18715669575431e-007,-1.90075539308054e-007,0.999999940395355,-1.68670595712683e-007,-1.65621631964541e-008,-0.999999940395355,-1.22109724998154e-007,2.26366374533882e-008,-0.999999940395355,-1.6894153631597e-008,5.57705099879513e-008,-0.999999940395355,-3.00617060133845e-008,2.82940550988542e-008,-0.999999940395355,9.93358995060589e-009,1.65736508961345e-008,0.999999940395355,5.05326731570221e-008, +1.94215914461893e-007,0.999999940395355,-1.52138156295223e-007,2.12122188258945e-007,0.999999940395355,-2.07594553103263e-007,-7.28209812450586e-008,0.999999940395355,-2.18715669575431e-007,4.87227431733572e-008,-0.999999940395355,-5.65562672250053e-008,-1.65621631964541e-008,-0.999999940395355,-1.22109724998154e-007,2.82940550988542e-008,-0.999999940395355,9.93358995060589e-009,7.30682643279579e-008,-0.999999940395355,6.28967811167058e-008,1.94215914461893e-007,0.999999940395355,-1.52138156295223e-007,5.17173148750771e-008,0.999999940395355,-3.26426089714005e-007,2.07438020538575e-007,0.999999940395355,-1.48281870337996e-007,2.12122188258945e-007,0.999999940395355,-2.07594553103263e-007,2.78624341376599e-008,-0.999999940395355,5.87718460565156e-008,4.87227431733572e-008,-0.999999940395355,-5.65562672250053e-008,7.30682643279579e-008,-0.999999940395355,6.28967811167058e-008,2.70020947823468e-008,-0.999999940395355,7.07780500874833e-008,5.17173148750771e-008,0.999999940395355,-3.26426089714005e-007,-2.94672474865365e-007,0.999999940395355,-1.01979537703301e-007,-1.67872457268459e-007,0.999999940395355,1.33453696093966e-007,2.07438020538575e-007,0.999999940395355,-1.48281870337996e-007,1.00207397935037e-008,-0.999999940395355,7.03606062302242e-008,2.78624341376599e-008,-0.999999940395355,5.87718460565156e-008,2.70020947823468e-008,-0.999999940395355,7.07780500874833e-008,2.44844358121554e-008,-0.999999940395355,8.02633977059486e-008,-2.94672474865365e-007,0.999999940395355,-1.01979537703301e-007,-1.5232648138408e-006,0.999999940395355,-7.99458121036878e-007,-1.27007069750107e-007,0.999999940395355,1.89157702834564e-007,-1.67872457268459e-007,0.999999940395355,1.33453696093966e-007,3.06257220472617e-006,-0.999999940395355,2.11517772186198e-006,1.00207397935037e-008,-0.999999940395355,7.03606062302242e-008,2.44844358121554e-008,-0.999999940395355,8.02633977059486e-008,-9.22661413937931e-008,-0.999999940395355,1.01188476264724e-007,0.635247647762299,0,-0.772308468818665,0.739009261131287,0,-0.673695206642151,0.739009261131287,0,-0.673695206642151, +0.635247588157654,0,-0.772308468818665,-0.635246813297272,0,-0.772309124469757,-0.303152590990067,0,-0.95294201374054,-0.303152590990067,0,-0.952941954135895,-0.635246872901917,0,-0.772309124469757,-0.303152590990067,0,-0.95294201374054,-0.0461830161511898,0,-0.998933017253876,-0.0461830161511898,0,-0.998932957649231,-0.303152590990067,0,-0.952941954135895,0.45947140455246,0,-0.888192415237427,0.561634302139282,4.53231962183054e-007,-0.827385485172272,0.561634242534637,4.53231876917926e-007,-0.827385544776917,0.459471434354782,0,-0.888192474842072,-0.561632931232452,-1.15324326088739e-006,-0.827386438846588,-0.45947140455246,-1.17162176138663e-006,-0.888192474842072,-0.459471434354782,-1.17162198876031e-006,-0.888192534446716,-0.561632990837097,-1.15324314720056e-006,-0.827386379241943,0.0461838319897652,-4.11893012142173e-007,-0.998932838439941,0.0461838357150555,-4.11893040563882e-007,-0.998932898044586,0.0461838394403458,-4.11893068985592e-007,-0.998932898044586,0.0461838357150555,-4.11893068985592e-007,-0.998932898044586,0.539463400840759,0,-0.842009007930756,0.635247647762299,0,-0.772308468818665,0.635247588157654,0,-0.772308468818665,0.539463341236115,0,-0.842009007930756,-1.14132411965784e-007,0.999999940395355,6.72959998837541e-008,-1.14132419071211e-007,0.999999940395355,6.72959998837541e-008,-1.14132426176639e-007,0.999999940395355,6.72960069891815e-008,3.58468287231517e-006,0.999999940395355,-2.32788261200767e-006,1.54286988163221e-006,0.999999940395355,-7.93113315467053e-007,1.0110088055626e-007,0.999999940395355,2.52210782036855e-007,-1.14132426176639e-007,0.999999940395355,6.72959998837541e-008,2.34338898508213e-007,-0.999999940395355,1.07912207170102e-007,2.34338898508213e-007,-0.999999940395355,1.07912200064675e-007,2.34338884297358e-007,-0.999999940395355,1.07912207170102e-007,9.22658784929808e-008,-0.999999940395355,1.01188582846135e-007,-3.06279957840161e-006,-0.999999940395355,2.11532210414589e-006,-8.23889513412723e-006,-0.999999940395355,5.53539075553999e-006,2.34338870086503e-007,-0.999999940395355,1.07912200064675e-007, +1.17106608854556e-007,0.999999940395355,0,1.17106594643701e-007,0.999999940395355,0,1.17106587538274e-007,0.999999940395355,0,-1.27007069750107e-007,0.999999940395355,1.89157702834564e-007,-1.5232648138408e-006,0.999999940395355,-7.99458121036878e-007,-3.53971358890703e-006,0.999999940395355,-2.33828313866979e-006,1.17106587538274e-007,0.999999940395355,0,-2.34339410098983e-007,-0.999999940395355,1.07912242697239e-007,8.23828759166645e-006,-0.999999940395355,5.53500649402849e-006,3.06257220472617e-006,-0.999999940395355,2.11517772186198e-006,-9.22661413937931e-008,-0.999999940395355,1.01188476264724e-007,-2.34339395888128e-007,-0.999999940395355,1.07912235591812e-007,-2.34339410098983e-007,-0.999999940395355,1.07912249802666e-007,-2.34339410098983e-007,-0.999999940395355,1.07912228486384e-007,-0.00557107385247946,-0.999969065189362,-0.00554148014634848,-8.23889513412723e-006,-0.999999940395355,5.53539075553999e-006,-3.06279957840161e-006,-0.999999940395355,2.11532210414589e-006,-1.15069615276298e-005,-1,7.50591334508499e-006,-0.0077444645576179,-0.999940276145935,-0.00771824037656188,0.0190604254603386,0.568274319171906,-0.822618365287781,0.0190604254603386,0.568274259567261,-0.822618424892426,0.0190604273229837,0.568274319171906,-0.822618424892426,0.0190742742270231,-0.568303346633911,-0.822597861289978,0.0190742779523134,-0.568303465843201,-0.822597980499268,0.0190742779523134,-0.568303406238556,-0.822597920894623,-0.0190894585102797,-0.568283140659332,-0.822611570358276,-0.0190894603729248,-0.568283140659332,-0.822611570358276,-0.0190894585102797,-0.568283081054688,-0.822611510753632,-0.0190455634146929,0.56827437877655,-0.82261860370636,-0.0190455634146929,0.56827437877655,-0.82261860370636,-0.0190455634146929,0.568274438381195,-0.82261860370636,-0.0105106672272086,-0.999880790710449,0.011308298446238,-0.0106544271111488,-0.99988067150116,0.0111874593421817,-0.0113585498183966,-0.99987930059433,0.0105955852195621,-0.0113585498183966,-0.99987930059433,0.0105955852195621,0.0113593144342303,-0.99987930059433,0.0105963386595249, +0.0113593144342303,-0.99987930059433,0.0105963386595249,0.0106547428295016,-0.999880611896515,0.0111887147650123,0.0105108851566911,-0.999880731105804,0.0113096628338099,0.00714113004505634,-0.999881982803345,0.013599039055407,0.00744556356221437,-0.9998819231987,0.0134416632354259,0.00487630348652601,-0.999880611896515,0.0146546727046371,0.00468466011807323,-0.999880492687225,0.0147288199514151,0.00247988430783153,-0.999879896640778,0.0152971195057034,0.00268623768351972,-0.999879837036133,0.0152615616098046,-0.000318829115713015,-0.99987918138504,0.0155367832630873,-0.000491580227389932,-0.999879121780396,0.015541622415185,-0.000491580227389932,-0.999879121780396,0.015541622415185,-0.000318829115713015,-0.99987918138504,0.0155367832630873,-0.00245660613290966,-0.999879121780396,0.0153509695082903,-0.00252516660839319,-0.999879121780396,0.0153390010818839,-0.00252516660839319,-0.999879121780396,0.0153390010818839,-0.00245660613290966,-0.999879121780396,0.0153509695082903,-0.00432269088923931,-0.999879062175751,0.0149366147816181,-0.00433902209624648,-0.999879062175751,0.0149315912276506,-0.00433902209624648,-0.999879062175751,0.0149315912276506,-0.00432269088923931,-0.999879062175751,0.0149366147816181,-0.00525987707078457,-0.99987930059433,0.0146226054057479,-0.00526147894561291,-0.99987930059433,0.0146219655871391,-0.00526147894561291,-0.99987930059433,0.0146219655871391,-0.00525987707078457,-0.99987930059433,0.0146226054057479,-0.0055574937723577,-0.999879479408264,0.0144935231655836,-0.00555739784613252,-0.999879479408264,0.0144936218857765,-0.00555739784613252,-0.999879479408264,0.0144936218857765,-0.0055574937723577,-0.999879479408264,0.0144935231655836,-0.00538267521187663,-0.999879837036133,0.0145378783345222,-0.00538495136424899,-0.999879777431488,0.0145371435210109,-0.00538495136424899,-0.999879777431488,0.0145371435210109,-0.00538267521187663,-0.999879837036133,0.0145378783345222,-0.00482724932953715,-0.999880135059357,0.0147103499621153,-0.00483253411948681,-0.999880015850067,0.0147087406367064,-0.00483253411948681,-0.999880015850067,0.0147087406367064, +-0.00482724932953715,-0.999880135059357,0.0147103499621153,-0.00394987734034657,-0.999880373477936,0.0149511136114597,-0.00395712302997708,-0.999880373477936,0.0149492807686329,-0.00395712302997708,-0.999880373477936,0.0149492807686329,-0.00394987734034657,-0.999880373477936,0.0149511136114597,-0.00280143902637064,-0.99988055229187,0.0151950409635901,-0.00280852057039738,-0.99988067150116,0.0151937715709209,-0.00280852057039738,-0.99988067150116,0.0151937715709209,-0.00280143902637064,-0.99988055229187,0.0151950409635901,-0.00145049777347595,-0.999880731105804,0.0153744779527187,-0.00145489897113293,-0.99988067150116,0.0153740774840117,-0.00145489897113293,-0.99988067150116,0.0153740774840117,-0.00145049777347595,-0.999880731105804,0.0153744779527187,2.68064781039357e-007,-0.999880731105804,0.0154413534328341,2.69874817604432e-007,-0.999880790710449,0.0154413543641567,2.69874817604432e-007,-0.999880790710449,0.0154413543641567,2.68064781039357e-007,-0.999880731105804,0.0154413534328341,0.00145107042044401,-0.999880731105804,0.0153759755194187,0.00145547511056066,-0.99988067150116,0.0153755629435182,0.00145547511056066,-0.99988067150116,0.0153755629435182,0.00145107042044401,-0.999880731105804,0.0153759755194187,0.00280162901617587,-0.99988055229187,0.0151950446888804,0.00280870846472681,-0.999880611896515,0.0151937762275338,0.00280870846472681,-0.999880611896515,0.0151937762275338,0.00280162901617587,-0.99988055229187,0.0151950446888804,0.00395011901855469,-0.999880373477936,0.0149511182680726,0.00395737402141094,-0.999880373477936,0.0149492854252458,0.00395737402141094,-0.999880373477936,0.0149492854252458,0.00395011901855469,-0.999880373477936,0.0149511182680726,0.00482765957713127,-0.999880075454712,0.0147096505388618,0.0048329415731132,-0.999880015850067,0.0147080291062593,0.0048329415731132,-0.999880015850067,0.0147080291062593,0.00482765957713127,-0.999880075454712,0.0147096505388618,0.00538237346336246,-0.999879837036133,0.0145364869385958,0.0053846463561058,-0.999879896640778,0.0145357567816973,0.0053846463561058,-0.999879896640778,0.0145357567816973, +0.00538237346336246,-0.999879837036133,0.0145364869385958,0.00555754266679287,-0.999879479408264,0.0144921410828829,0.00555745186284184,-0.999879479408264,0.0144922416657209,0.00555745186284184,-0.999879479408264,0.0144922416657209,0.00555754266679287,-0.999879479408264,0.0144921410828829,0.00525992177426815,-0.999879240989685,0.0146219152957201,0.00526152784004807,-0.999879240989685,0.0146212745457888,0.00526152784004807,-0.999879240989685,0.0146212745457888,0.00525992177426815,-0.999879240989685,0.0146219152957201,0.00432145828381181,-0.999879062175751,0.0149366278201342,0.00433779880404472,-0.999879062175751,0.0149316051974893,0.00433779880404472,-0.999879062175751,0.0149316051974893,0.00432145828381181,-0.999879062175751,0.0149366278201342,0.00245627365075052,-0.999879002571106,0.0153517946600914,0.00252474751323462,-0.999879121780396,0.015339782461524,0.00252474751323462,-0.999879121780396,0.015339782461524,0.00245627365075052,-0.999879002571106,0.0153517946600914,0.000319064332870767,-0.99987918138504,0.0155375516042113,0.000491964456159621,-0.999879121780396,0.0155425565317273,-0.00248113460838795,-0.999879896640778,0.0152970626950264,-0.00268747773952782,-0.999879896640778,0.0152616528794169,-0.00487618381157517,-0.99988067150116,0.0146555285900831,-0.00468478258699179,-0.999880492687225,0.0147296776995063,-0.00714085716754198,-0.9998819231987,0.0135983293876052,-0.00744548859074712,-0.9998819231987,0.0134406192228198,-0.0106544271111488,-0.99988067150116,0.0111874593421817,-0.0105106672272086,-0.999880790710449,0.011308298446238,-0.00468478258699179,-0.999880492687225,0.0147296776995063,-0.00487618381157517,-0.99988067150116,0.0146555285900831,-0.00744548859074712,-0.9998819231987,0.0134406192228198,-0.00714085716754198,-0.9998819231987,0.0135983293876052,0.000491964456159621,-0.999879121780396,0.0155425565317273,0.000319064332870767,-0.99987918138504,0.0155375516042113,-0.00268747773952782,-0.999879896640778,0.0152616528794169,-0.00248113460838795,-0.999879896640778,0.0152970626950264,0.0105108851566911,-0.999880731105804,0.0113096628338099, +0.0106547428295016,-0.999880611896515,0.0111887147650123,0.00744556356221437,-0.9998819231987,0.0134416632354259,0.00714113004505634,-0.999881982803345,0.013599039055407,0.00468466011807323,-0.999880492687225,0.0147288199514151,0.00487630348652601,-0.999880611896515,0.0146546727046371,0.00268623768351972,-0.999879837036133,0.0152615616098046,0.00247988430783153,-0.999879896640778,0.0152971195057034,0.69258052110672,0.066249705851078,-0.718291759490967,0.702093660831451,0.00159587385132909,-0.712082743644714,0.702259421348572,-0.00075539801036939,-0.711920738220215,0.702674746513367,-0.00134213594719768,-0.711509943008423,0.70261937379837,-0.00126389553770423,-0.711564660072327,0.672602593898773,0.0576497130095959,-0.737754821777344,0.492509990930557,0.684213042259216,-0.537853479385376,0.45127934217453,0.707483410835266,-0.543887794017792,0.451279312372208,0.707483410835266,-0.543888032436371,0.673727691173553,0.00137309439014643,-0.738978266716003,0.672602593898773,0.0576497130095959,-0.737754821777344,0.638820946216583,4.4055873331672e-006,-0.769355297088623,0.638820946216583,4.40559188064071e-006,-0.769355297088623,0.673698425292969,8.80851894180523e-006,-0.739006280899048,-0.692579448223114,0.0662549734115601,-0.718292355537415,-0.452041566371918,0.691643595695496,-0.56328272819519,-0.444331377744675,0.702116191387177,-0.556419253349304,-0.355361133813858,0.673891007900238,-0.647757112979889,-0.355662167072296,0.674020230770111,-0.647457301616669,-0.492179602384567,0.686401307582855,-0.53536182641983,-0.492512315511703,0.684202611446381,-0.537864506244659,-0.444331377744675,0.702116191387177,-0.556419253349304,-0.452041566371918,0.691643595695496,-0.56328272819519,-0.489418894052505,0.689913988113403,-0.533373892307281,-0.383498281240463,0.68536388874054,-0.619035661220551,-0.383498340845108,0.685363948345184,-0.619035661220551,-0.338924586772919,0.687195122241974,-0.64256751537323,-0.338918298482895,0.687195181846619,-0.642570674419403,-0.338918298482895,0.687195181846619,-0.642570674419403,-0.338924586772919,0.687195122241974,-0.64256751537323, +-0.162948578596115,0.687391817569733,-0.707771182060242,-0.162462383508682,0.687392234802246,-0.707882642745972,0.365432262420654,0.719523131847382,0.590546727180481,0.365432322025299,0.719523191452026,0.590546786785126,0.32150587439537,0.721647083759308,0.613073706626892,0.321797013282776,0.721638798713684,0.612930595874786,0.321797013282776,0.721638798713684,0.612930595874786,0.32150587439537,0.721647083759308,0.613073706626892,0.138442024588585,0.721792697906494,0.678121566772461,0.138806313276291,0.721792578697205,0.67804741859436,-0.162462383508682,0.687392234802246,-0.707882642745972,-0.162948578596115,0.687391817569733,-0.707771182060242,-0.0402094908058643,0.68602728843689,-0.726463735103607,-0.0399280115962029,0.686027407646179,-0.726479232311249,0.138806313276291,0.721792578697205,0.67804741859436,0.138442024588585,0.721792697906494,0.678121566772461,0.0211235377937555,0.720210075378418,0.693434298038483,0.0213157050311565,0.720210492610931,0.693427920341492,-0.0399280115962029,0.686027407646179,-0.726479232311249,-0.0402094908058643,0.68602728843689,-0.726463735103607,0.0580754019320011,0.686258852481842,-0.725035071372986,0.0583713613450527,0.686259031295776,-0.725011229515076,0.0583713613450527,0.686259031295776,-0.725011229515076,0.0580754019320011,0.686258852481842,-0.725035071372986,0.179052919149399,0.686231672763824,-0.705000698566437,0.179291248321533,0.68622875213623,-0.704942882061005,0.0213157050311565,0.720210492610931,0.693427920341492,0.0211235377937555,0.720210075378418,0.693434298038483,-0.0661668032407761,0.720267534255981,0.690533518791199,-0.0659657269716263,0.720267534255981,0.690552711486816,-0.0659657269716263,0.720267534255981,0.690552711486816,-0.0661668032407761,0.720267534255981,0.690533518791199,-0.174090653657913,0.720040559768677,0.671739518642426,-0.173943772912025,0.720042645931244,0.671775221824646,0.179291248321533,0.68622875213623,-0.704942882061005,0.179052919149399,0.686231672763824,-0.705000698566437,0.256237685680389,0.686144411563873,-0.680843591690063,0.256386369466782,0.686144351959229,-0.680787742137909, +0.256386369466782,0.686144351959229,-0.680787742137909,0.256237685680389,0.686144411563873,-0.680843591690063,0.318016082048416,0.685619592666626,-0.654821634292603,0.318068236112595,0.685619652271271,-0.654796302318573,-0.173943772912025,0.720042645931244,0.671775221824646,-0.174090653657913,0.720040559768677,0.671739518642426,-0.242325529456139,0.719878375530243,0.650425493717194,-0.242199197411537,0.719878792762756,0.650471985340118,-0.242199197411537,0.719878792762756,0.650471985340118,-0.242325529456139,0.719878375530243,0.650425493717194,-0.297666609287262,0.719325721263886,0.627666294574738,-0.297616750001907,0.719325840473175,0.627689838409424,0.318068236112595,0.685619652271271,-0.654796302318573,0.318016082048416,0.685619592666626,-0.654821634292603,0.342151582241058,0.685478627681732,-0.642690539360046,0.342131197452545,0.685478687286377,-0.64270144701004,-0.297616750001907,0.719325840473175,0.627689838409424,-0.297666609287262,0.719325721263886,0.627666294574738,-0.320342540740967,0.719149827957153,0.616606831550598,-0.320324659347534,0.719149887561798,0.616616070270538,0.342131197452545,0.685478687286377,-0.64270144701004,0.342151582241058,0.685478627681732,-0.642690539360046,0.340912818908691,0.685494065284729,-0.643332064151764,0.340912759304047,0.685494065284729,-0.643332123756409,-0.320324659347534,0.719149887561798,0.616616070270538,-0.320342540740967,0.719149827957153,0.616606831550598,-0.31976056098938,0.719134509563446,0.616926729679108,-0.31976056098938,0.719134569168091,0.616926729679108,0.340912759304047,0.685494065284729,-0.643332123756409,0.340912818908691,0.685494065284729,-0.643332064151764,0.320244610309601,0.685579359531403,-0.653776943683624,0.320227265357971,0.685579299926758,-0.653785407543182,-0.31976056098938,0.719134569168091,0.616926729679108,-0.31976056098938,0.719134509563446,0.616926729679108,-0.300814151763916,0.719200074672699,0.626308083534241,-0.300814241170883,0.719200134277344,0.626308143138886,0.320227265357971,0.685579299926758,-0.653785407543182,0.320244610309601,0.685579359531403,-0.653776943683624, +0.282692462205887,0.685693264007568,-0.670752942562103,0.282672554254532,0.685693323612213,-0.670761406421661,-0.300814241170883,0.719200134277344,0.626308143138886,-0.300814151763916,0.719200074672699,0.626308083534241,-0.265767216682434,0.719316244125366,0.641834676265717,-0.265794187784195,0.719316244125366,0.641823530197144,0.282672554254532,0.685693323612213,-0.670761406421661,0.282692462205887,0.685693264007568,-0.670752942562103,0.22958716750145,0.685834527015686,-0.690594434738159,0.229568511247635,0.685834527015686,-0.690600514411926,-0.265794187784195,0.719316244125366,0.641823530197144,-0.265767216682434,0.719316244125366,0.641834676265717,-0.215921372175217,0.719452500343323,0.66012567281723,-0.215948820114136,0.719452500343323,0.660116732120514,0.229568511247635,0.685834527015686,-0.690600514411926,0.22958716750145,0.685834527015686,-0.690594434738159,0.162498667836189,0.685973882675171,-0.709248781204224,0.162483796477318,0.685973882675171,-0.709252178668976,-0.215948820114136,0.719452500343323,0.660116732120514,-0.215921372175217,0.719452500343323,0.66012567281723,-0.152828946709633,0.719589054584503,0.677373468875885,-0.152851581573486,0.719589114189148,0.67736828327179,0.162483796477318,0.685973882675171,-0.709252178668976,0.162498667836189,0.685973882675171,-0.709248781204224,0.084364153444767,0.686083495616913,-0.722614645957947,0.0843560323119164,0.686083495616913,-0.722615599632263,-0.152851581573486,0.719589114189148,0.67736828327179,-0.152828946709633,0.719589054584503,0.677373468875885,-0.0793238133192062,0.719706952571869,0.689731538295746,-0.0793369337916374,0.719706892967224,0.689730048179626,0.0843560323119164,0.686083495616913,-0.722615599632263,0.084364153444767,0.686083495616913,-0.722614645957947,-2.88596851305556e-007,0.686125338077545,-0.72748327255249,-2.38546874697931e-007,0.6861252784729,-0.72748327255249,-0.0793369337916374,0.719706892967224,0.689730048179626,-0.0793238133192062,0.719706952571869,0.689731538295746,9.44135081226705e-007,0.719751358032227,0.694231867790222,8.24454048142798e-007,0.719751358032227,0.694231748580933, +-2.38546874697931e-007,0.6861252784729,-0.72748327255249,-2.88596851305556e-007,0.686125338077545,-0.72748327255249,-0.084365613758564,0.686079919338226,-0.722617864608765,-0.0843574106693268,0.686079919338226,-0.722618877887726,8.24454048142798e-007,0.719751358032227,0.694231748580933,9.44135081226705e-007,0.719751358032227,0.694231867790222,0.0793255418539047,0.719706416130066,0.689731895923615,0.0793384239077568,0.719706356525421,0.689730405807495,-0.0843574106693268,0.686079919338226,-0.722618877887726,-0.084365613758564,0.686079919338226,-0.722617864608765,-0.162500694394112,0.685973465442657,-0.709248781204224,-0.162485763430595,0.685973465442657,-0.709252178668976,0.0793384239077568,0.719706356525421,0.689730405807495,0.0793255418539047,0.719706416130066,0.689731895923615,0.152832329273224,0.719600915908813,0.677360057830811,0.152854770421982,0.719600856304169,0.677354991436005,-0.162485763430595,0.685973465442657,-0.709252178668976,-0.162500694394112,0.685973465442657,-0.709248781204224,-0.229590386152267,0.685838460922241,-0.690589427947998,-0.22957170009613,0.685838520526886,-0.69059556722641,0.152854770421982,0.719600856304169,0.677354991436005,0.152832329273224,0.719600915908813,0.677360057830811,0.215923085808754,0.719459056854248,0.660117924213409,0.215950459241867,0.719459056854248,0.660108983516693,-0.22957170009613,0.685838520526886,-0.69059556722641,-0.229590386152267,0.685838460922241,-0.690589427947998,-0.282696217298508,0.685694098472595,-0.670750617980957,-0.282676160335541,0.685694098472595,-0.670759081840515,0.215950459241867,0.719459056854248,0.660108983516693,0.215923085808754,0.719459056854248,0.660117924213409,0.265764862298965,0.719314634799957,0.641837537288666,0.265791684389114,0.719314575195313,0.641826510429382,-0.282676160335541,0.685694098472595,-0.670759081840515,-0.282696217298508,0.685694098472595,-0.670750617980957,-0.320244997739792,0.685571670532227,-0.653784811496735,-0.32022762298584,0.685571551322937,-0.653793275356293,0.265791684389114,0.719314575195313,0.641826510429382, +0.265764862298965,0.719314634799957,0.641837537288666,0.300814002752304,0.719201803207397,0.626306176185608,0.300814002752304,0.719201982021332,0.626306176185608,-0.32022762298584,0.685571551322937,-0.653793275356293,-0.320244997739792,0.685571670532227,-0.653784811496735,-0.340912669897079,0.685487031936646,-0.64333963394165,-0.340912669897079,0.68548709154129,-0.643339693546295,0.300814002752304,0.719201982021332,0.626306176185608,0.300814002752304,0.719201803207397,0.626306176185608,0.319761753082275,0.719135463237762,0.616925060749054,0.319761782884598,0.719135463237762,0.616925120353699,-0.340912669897079,0.68548709154129,-0.643339693546295,-0.340912669897079,0.685487031936646,-0.64333963394165,-0.342153310775757,0.685474991798401,-0.642693638801575,-0.342132925987244,0.685474991798401,-0.642704427242279,0.319761782884598,0.719135463237762,0.616925120353699,0.319761753082275,0.719135463237762,0.616925060749054,0.320341855287552,0.719149351119995,0.616607844829559,0.320323973894119,0.719149351119995,0.61661696434021,-0.342132925987244,0.685474991798401,-0.642704427242279,-0.342153310775757,0.685474991798401,-0.642693638801575,-0.318023294210434,0.68562126159668,-0.654816448688507,-0.318075388669968,0.685621201992035,-0.654791176319122,0.320323973894119,0.719149351119995,0.61661696434021,0.320341855287552,0.719149351119995,0.616607844829559,0.297664821147919,0.719327211380005,0.627665519714355,0.297614902257919,0.719327330589294,0.627689003944397,-0.318075388669968,0.685621201992035,-0.654791176319122,-0.318023294210434,0.68562126159668,-0.654816448688507,-0.256243616342545,0.686142086982727,-0.680843710899353,-0.256393074989319,0.686141967773438,-0.680787444114685,0.297614902257919,0.719327330589294,0.627689003944397,0.297664821147919,0.719327211380005,0.627665519714355,0.242323637008667,0.719872057437897,0.65043318271637,0.242197304964066,0.719872415065765,0.650479733943939,-0.256393074989319,0.686141967773438,-0.680787444114685,-0.256243616342545,0.686142086982727,-0.680843710899353,-0.179055020213127,0.686225235462189,-0.70500648021698, +-0.179293647408485,0.686222314834595,-0.704948663711548,0.242197304964066,0.719872415065765,0.650479733943939,0.242323637008667,0.719872057437897,0.65043318271637,0.174084365367889,0.720028698444366,0.671753764152527,0.173938184976578,0.720030784606934,0.671789407730103,-0.179293647408485,0.686222314834595,-0.704948663711548,-0.179055020213127,0.686225235462189,-0.70500648021698,-0.0580752529203892,0.686269223690033,-0.725025296211243,-0.0583709292113781,0.686269402503967,-0.725001454353333,0.173938184976578,0.720030784606934,0.671789407730103,0.174084365367889,0.720028698444366,0.671753764152527,0.0661780834197998,0.72026002407074,0.690540373325348,0.065977044403553,0.72026002407074,0.690559446811676,-0.0583709292113781,0.686269402503967,-0.725001454353333,-0.0580752529203892,0.686269223690033,-0.725025296211243,0.0401956140995026,0.68602591753006,-0.726465821266174,0.0399142876267433,0.686026096343994,-0.726481199264526,0.065977044403553,0.72026002407074,0.690559446811676,0.0661780834197998,0.72026002407074,0.690540373325348,-0.0211333427578211,0.720214307308197,0.69342964887619,-0.0213255565613508,0.720214784145355,0.693423211574554,0.0399142876267433,0.686026096343994,-0.726481199264526,0.0401956140995026,0.68602591753006,-0.726465821266174,0.16287662088871,0.687505722045898,-0.707677125930786,0.162391528487206,0.687505304813385,-0.70778900384903,0.162391528487206,0.687505304813385,-0.70778900384903,0.16287662088871,0.687505722045898,-0.707677125930786,0.339071542024612,0.687274038791656,-0.642405331134796,0.338742852210999,0.687281608581543,-0.642570734024048,-0.0213255565613508,0.720214784145355,0.693423211574554,-0.0211333427578211,0.720214307308197,0.69342964887619,-0.138489559292793,0.721896827220917,0.67800110578537,-0.138850584626198,0.721897065639496,0.677926957607269,-0.138850584626198,0.721897065639496,0.677926957607269,-0.138489559292793,0.721896827220917,0.67800110578537,-0.321610242128372,0.721701502799988,0.612954914569855,-0.32161009311676,0.721701502799988,0.612955033779144,0.383515685796738,0.685370922088623,-0.61901718378067, +0.383515685796738,0.685370981693268,-0.61901718378067,0.338742852210999,0.687281608581543,-0.642570734024048,0.339071542024612,0.687274038791656,-0.642405331134796,-0.365410685539246,0.719522297382355,0.590561151504517,-0.365410715341568,0.719522297382355,0.590561151504517,-0.32161009311676,0.721701502799988,0.612955033779144,-0.321610242128372,0.721701502799988,0.612954914569855,0.0131631745025516,0.999333202838898,-0.0340579077601433,0.0126317422837019,0.99933385848999,-0.0342398285865784,0.015389365144074,0.999327003955841,-0.0332957096397877,0.0153893642127514,0.999327003955841,-0.033295713365078,-0.460911393165588,-0.0015001556603238,0.887444853782654,-0.460845828056335,-0.00150016788393259,0.88747900724411,-0.52176171541214,-0.00148511060979217,0.853089928627014,-0.521761655807495,-0.00148511037696153,0.853089928627014,0.47009265422821,-0.0242825504392385,-0.882282912731171,0.470315217971802,-0.0242821630090475,-0.882164418697357,0.529598116874695,-0.024118160828948,-0.847905576229095,0.529598116874695,-0.0241181626915932,-0.84790563583374,-0.0131643153727055,0.999333143234253,-0.0340595357120037,-0.0153902359306812,0.999326884746552,-0.0332980714738369,-0.0153902349993587,0.999326825141907,-0.0332980677485466,-0.0126328654587269,0.999333798885345,-0.0342413075268269,0.460884869098663,-0.00148310395888984,0.887458622455597,0.521760523319244,-0.00148593739140779,0.853090643882751,0.5217604637146,-0.00148593727499247,0.853090584278107,0.460872918367386,-0.00148310279473662,0.887464880943298,-0.529596745967865,-0.0241164900362492,-0.847906589508057,-0.529596745967865,-0.0241164918988943,-0.847906589508057,-0.470346659421921,-0.0242615062743425,-0.882148087024689,-0.470063239336014,-0.024261923506856,-0.882299244403839,-0.00376740307547152,0.999321699142456,-0.0366325415670872,-0.00286277197301388,0.999319493770599,-0.0367751084268093,0.00312694348394871,0.999315798282623,-0.0368516109883785,0.00262344162911177,0.999313712120056,-0.0369480066001415,0.195184916257858,-0.0014299291651696,0.980765402317047,0.195183932781219,-0.00142992869950831,0.980765461921692, +0.0253604594618082,-0.00139178044628352,0.999677360057831,0.0253602173179388,-0.00139178044628352,0.999677360057831,-0.22788493335247,-0.0242961775511503,-0.973384857177734,-0.228314444422722,-0.0242962781339884,-0.973284184932709,-0.0589788295328617,-0.0242542717605829,-0.99796450138092,-0.0587277039885521,-0.0242546051740646,-0.997979283332825,0.00719420751556754,0.999327301979065,-0.0359572172164917,0.00764755439013243,0.999328017234802,-0.0358454324305058,0.0128326592966914,0.999336004257202,-0.0340977013111115,0.0125016625970602,0.999335765838623,-0.034229651093483,-0.0999671965837479,-0.00137442408595234,0.99498975276947,-0.0999697670340538,-0.00137442362029105,0.994989395141602,-0.254808723926544,-0.00134705530945212,0.96699047088623,-0.254807084798813,-0.0013470557751134,0.966990947723389,0.0764444246888161,-0.0243818759918213,-0.99677562713623,0.0761941745877266,-0.0243817735463381,-0.996794819831848,0.242582231760025,-0.0244307331740856,-0.969823062419891,0.242784962058067,-0.0244306679815054,-0.969772458076477,0.0125016625970602,0.999335765838623,-0.034229651093483,0.0128326592966914,0.999336004257202,-0.0340977013111115,0.0158067941665649,0.999346613883972,-0.0325015783309937,0.0156991463154554,0.999346196651459,-0.0325697809457779,-0.254807084798813,-0.0013470557751134,0.966990947723389,-0.254808723926544,-0.00134705530945212,0.96699047088623,-0.352188467979431,-0.00133378047030419,0.935928165912628,-0.352180182933807,-0.00133378128521144,0.935931205749512,0.242784962058067,-0.0244306679815054,-0.969772458076477,0.242582231760025,-0.0244307331740856,-0.969823062419891,0.349012762308121,-0.0245249420404434,-0.936796903610229,0.349080473184586,-0.0245250444859266,-0.936771750450134,0.0156991463154554,0.999346196651459,-0.0325697809457779,0.0158067941665649,0.999346613883972,-0.0325015783309937,0.0180271118879318,0.999356627464294,-0.0310048777610064,0.0180081818252802,0.99935644865036,-0.0310193449258804,-0.352180182933807,-0.00133378128521144,0.935931205749512,-0.352188467979431,-0.00133378047030419,0.935928165912628, +-0.43111976981163,-0.00132315163500607,0.902293682098389,-0.431115567684174,-0.001323152333498,0.902295768260956,0.349080473184586,-0.0245250444859266,-0.936771750450134,0.349012762308121,-0.0245249420404434,-0.936796903610229,0.43428310751915,-0.0246105510741472,-0.900440216064453,0.434295833110809,-0.024610560387373,-0.900433957576752,0.0180081818252802,0.99935644865036,-0.0310193449258804,0.0180271118879318,0.999356627464294,-0.0310048777610064,0.0187046583741903,0.999361515045166,-0.0304397344589233,0.0187044516205788,0.999361515045166,-0.0304401498287916,-0.431115567684174,-0.001323152333498,0.902295768260956,-0.43111976981163,-0.00132315163500607,0.902293682098389,-0.463271737098694,-0.00131704576779157,0.886215269565582,-0.463270574808121,-0.00131704588420689,0.88621574640274,0.434295833110809,-0.024610560387373,-0.900433957576752,0.43428310751915,-0.0246105510741472,-0.900440216064453,0.467806398868561,-0.0246429499238729,-0.883487403392792,0.467806607484818,-0.0246429461985826,-0.883487045764923,0.0187044516205788,0.999361515045166,-0.0304401498287916,0.0187046583741903,0.999361515045166,-0.0304397344589233,0.0183111783117056,0.999363839626312,-0.030603151768446,0.0183082558214664,0.999363839626312,-0.0306047648191452,-0.463270574808121,-0.00131704588420689,0.88621574640274,-0.463271737098694,-0.00131704576779157,0.886215269565582,-0.462133705615997,-0.00131395109929144,0.886809110641479,-0.46213698387146,-0.00131395133212209,0.886807382106781,0.467806607484818,-0.0246429461985826,-0.883487045764923,0.467806398868561,-0.0246429499238729,-0.883487403392792,0.466500252485275,-0.0246493443846703,-0.884177505970001,0.466500133275986,-0.0246493425220251,-0.884177505970001,0.0183082558214664,0.999363839626312,-0.0306047648191452,0.0183111783117056,0.999363839626312,-0.030603151768446,0.0170473419129848,0.999364912509918,-0.0312883779406548,0.0170355159789324,0.999364972114563,-0.0312947332859039,-0.46213698387146,-0.00131395133212209,0.886807382106781,-0.462133705615997,-0.00131395109929144,0.886809110641479,-0.434638142585754,-0.00131313630845398,0.90060418844223, +-0.434645384550095,-0.00131313619203866,0.900600671768188,0.466500133275986,-0.0246493425220251,-0.884177505970001,0.466500252485275,-0.0246493443846703,-0.884177505970001,0.43844810128212,-0.0246416572481394,-0.898418545722961,0.438455283641815,-0.0246416609734297,-0.898415088653564,0.0170355159789324,0.999364972114563,-0.0312947332859039,0.0170473419129848,0.999364912509918,-0.0312883779406548,0.0149852689355612,0.999365508556366,-0.0323123820126057,0.0149642154574394,0.999365389347076,-0.0323222279548645,-0.434645384550095,-0.00131313619203866,0.900600671768188,-0.434638142585754,-0.00131313630845398,0.90060418844223,-0.384021282196045,-0.00131650688126683,0.923323214054108,-0.384024977684021,-0.00131650664843619,0.923321723937988,0.438455283641815,-0.0246416609734297,-0.898415088653564,0.43844810128212,-0.0246416572481394,-0.898418545722961,0.387191861867905,-0.0246272254735231,-0.921670138835907,0.387204706668854,-0.0246272329241037,-0.921664774417877,0.0149642154574394,0.999365389347076,-0.0323222279548645,0.0149852689355612,0.999365508556366,-0.0323123820126057,0.0121525842696428,0.999365389347076,-0.0334807820618153,0.0121258422732353,0.999365389347076,-0.0334906280040741,-0.384024977684021,-0.00131650664843619,0.923321723937988,-0.384021282196045,-0.00131650688126683,0.923323214054108,-0.312054842710495,-0.0013214967912063,0.950063109397888,-0.312058836221695,-0.00132149655837566,0.950061798095703,0.387204706668854,-0.0246272329241037,-0.921664774417877,0.387191861867905,-0.0246272254735231,-0.921670138835907,0.314557641744614,-0.0246115271002054,-0.948919117450714,0.31457382440567,-0.0246115326881409,-0.948913872241974,0.0121258422732353,0.999365389347076,-0.0334906280040741,0.0121525842696428,0.999365389347076,-0.0334807820618153,0.00860310904681683,0.999365329742432,-0.034568402916193,0.00857762061059475,0.999365210533142,-0.0345748588442802,-0.312058836221695,-0.00132149655837566,0.950061798095703,-0.312054842710495,-0.0013214967912063,0.950063109397888,-0.220922365784645,-0.00132442137692124,0.975290477275848, +-0.220925733447075,-0.00132442126050591,0.975289702415466,0.31457382440567,-0.0246115326881409,-0.948913872241974,0.314557641744614,-0.0246115271002054,-0.948919117450714,0.222691595554352,-0.0245956927537918,-0.974578499794006,0.222706869244576,-0.0245956983417273,-0.974575102329254,0.00857762061059475,0.999365210533142,-0.0345748588442802,0.00860310904681683,0.999365329742432,-0.034568402916193,0.00447287643328309,0.999365091323853,-0.0353453904390335,0.00445707002654672,0.999365091323853,-0.0353474207222462,-0.220925733447075,-0.00132442126050591,0.975289702415466,-0.220922365784645,-0.00132442137692124,0.975290477275848,-0.114692710340023,-0.00132638728246093,0.993400156497955,-0.114694803953171,-0.00132638728246093,0.993399858474731,0.222706869244576,-0.0245956983417273,-0.974575102329254,0.222691595554352,-0.0245956927537918,-0.974578499794006,0.115630611777306,-0.0245844181627035,-0.992987930774689,0.115640066564083,-0.0245844163000584,-0.992986857891083,0.00445707002654672,0.999365091323853,-0.0353474207222462,0.00447287643328309,0.999365091323853,-0.0353453904390335,-1.9959877306519e-008,0.999365091323853,-0.0356280356645584,-2.55647432112482e-008,0.999365150928497,-0.0356280393898487,-0.114694803953171,-0.00132638728246093,0.993399858474731,-0.114692710340023,-0.00132638728246093,0.993400156497955,7.60219336370938e-007,-0.00132701348047704,0.999999046325684,5.23635890203877e-007,-0.00132701324764639,0.999998986721039,0.115640066564083,-0.0245844163000584,-0.992986857891083,0.115630611777306,-0.0245844181627035,-0.992987930774689,-5.94260257003043e-007,-0.0245804917067289,-0.999697864055634,-5.11501411892823e-007,-0.0245804879814386,-0.999697804450989,-2.55647432112482e-008,0.999365150928497,-0.0356280393898487,-1.9959877306519e-008,0.999365091323853,-0.0356280356645584,-0.00447338819503784,0.999364972114563,-0.0353463552892208,-0.00445759017020464,0.999365091323853,-0.0353483855724335,5.23635890203877e-007,-0.00132701324764639,0.999998986721039,7.60219336370938e-007,-0.00132701348047704,0.999999046325684, +0.114693880081177,-0.00132633664179593,0.993399918079376,0.11469554156065,-0.00132633652538061,0.993399739265442,-5.11501411892823e-007,-0.0245804879814386,-0.999697804450989,-5.94260257003043e-007,-0.0245804917067289,-0.999697864055634,-0.115631923079491,-0.0245840959250927,-0.992987811565399,-0.115641176700592,-0.0245840977877378,-0.992986738681793,-0.00445759017020464,0.999365091323853,-0.0353483855724335,-0.00447338819503784,0.999364972114563,-0.0353463552892208,-0.00860353372991085,0.999365210533142,-0.0345694310963154,-0.00857806019484997,0.999365150928497,-0.0345758944749832,0.11469554156065,-0.00132633652538061,0.993399739265442,0.114693880081177,-0.00132633664179593,0.993399918079376,0.220923021435738,-0.00132473604753613,0.975290358066559,0.22092604637146,-0.00132473604753613,0.975289702415466,-0.115641176700592,-0.0245840977877378,-0.992986738681793,-0.115631923079491,-0.0245840959250927,-0.992987811565399,-0.222693011164665,-0.0245950035750866,-0.974578261375427,-0.222708120942116,-0.024595009163022,-0.97457492351532,-0.00857806019484997,0.999365150928497,-0.0345758944749832,-0.00860353372991085,0.999365210533142,-0.0345694310963154,-0.0121529549360275,0.999365389347076,-0.0334810242056847,-0.01212621293962,0.999365448951721,-0.0334908738732338,0.22092604637146,-0.00132473604753613,0.975289702415466,0.220923021435738,-0.00132473604753613,0.975290358066559,0.312055915594101,-0.00132230448070914,0.95006275177002,0.312059581279755,-0.00132230448070914,0.950061559677124,-0.222708120942116,-0.024595009163022,-0.97457492351532,-0.222693011164665,-0.0245950035750866,-0.974578261375427,-0.314557820558548,-0.0246100202202797,-0.948919177055359,-0.314573764801025,-0.0246100220829248,-0.948913931846619,-0.01212621293962,0.999365448951721,-0.0334908738732338,-0.0121529549360275,0.999365389347076,-0.0334810242056847,-0.0149861099198461,0.999365389347076,-0.0323134325444698,-0.0149650610983372,0.999365448951721,-0.0323232747614384,0.312059581279755,-0.00132230448070914,0.950061559677124,0.312055915594101,-0.00132230448070914,0.95006275177002, +0.384022444486618,-0.00131748872809112,0.923322737216949,0.384026020765305,-0.00131748849526048,0.92332124710083,-0.314573764801025,-0.0246100220829248,-0.948913931846619,-0.314557820558548,-0.0246100202202797,-0.948919177055359,-0.38719242811203,-0.0246253795921803,-0.921670079231262,-0.387205064296722,-0.0246253814548254,-0.921664655208588,-0.0149650610983372,0.999365448951721,-0.0323232747614384,-0.0149861099198461,0.999365389347076,-0.0323134325444698,-0.0170477982610464,0.999364972114563,-0.0312885195016861,-0.0170359797775745,0.999364972114563,-0.0312948934733868,0.384026020765305,-0.00131748849526048,0.92332124710083,0.384022444486618,-0.00131748872809112,0.923322737216949,0.434638351202011,-0.00131459441035986,0.900604069232941,0.434645563364029,-0.0013145946431905,0.900600552558899,-0.387205064296722,-0.0246253814548254,-0.921664655208588,-0.38719242811203,-0.0246253795921803,-0.921670079231262,-0.43844872713089,-0.024639330804348,-0.898418307304382,-0.438455790281296,-0.0246393345296383,-0.898414790630341,-0.0170359797775745,0.999364972114563,-0.0312948934733868,-0.0170477982610464,0.999364972114563,-0.0312885195016861,-0.0183112397789955,0.999363780021667,-0.030601654201746,-0.0183083191514015,0.999363839626312,-0.0306032691150904,0.434645563364029,-0.0013145946431905,0.900600552558899,0.434638351202011,-0.00131459441035986,0.900604069232941,0.462134152650833,-0.00131517648696899,0.88680899143219,0.462137460708618,-0.00131517683621496,0.886807322502136,-0.438455790281296,-0.0246393345296383,-0.898414790630341,-0.43844872713089,-0.024639330804348,-0.898418307304382,-0.466499716043472,-0.0246468484401703,-0.88417786359787,-0.466499507427216,-0.0246468484401703,-0.884177923202515,-0.0183083191514015,0.999363839626312,-0.0306032691150904,-0.0183112397789955,0.999363780021667,-0.030601654201746,-0.0187042988836765,0.999361574649811,-0.0304380990564823,-0.0187040884047747,0.999361574649811,-0.0304385125637054,0.462137460708618,-0.00131517683621496,0.886807322502136,0.462134152650833,-0.00131517648696899,0.88680899143219, +0.463272273540497,-0.00131704297382385,0.886214971542358,0.463271230459213,-0.00131704343948513,0.886215627193451,-0.466499507427216,-0.0246468484401703,-0.884177923202515,-0.466499716043472,-0.0246468484401703,-0.88417786359787,-0.467806994915009,-0.0246409345418215,-0.883487045764923,-0.467807292938232,-0.0246409326791763,-0.883486747741699,-0.0187040884047747,0.999361574649811,-0.0304385125637054,-0.0187042988836765,0.999361574649811,-0.0304380990564823,-0.0180262289941311,0.999356687068939,-0.0310027878731489,-0.0180072914808989,0.999356508255005,-0.0310172438621521,0.463271230459213,-0.00131704343948513,0.886215627193451,0.463272273540497,-0.00131704297382385,0.886214971542358,0.431119650602341,-0.00132260541431606,0.902293741703033,0.431115508079529,-0.00132260611280799,0.902295827865601,-0.467807292938232,-0.0246409326791763,-0.883486747741699,-0.467806994915009,-0.0246409345418215,-0.883487045764923,-0.434283167123795,-0.024608762934804,-0.900440096855164,-0.434296250343323,-0.0246087852865458,-0.900433838367462,-0.0180072914808989,0.999356508255005,-0.0310172438621521,-0.0180262289941311,0.999356687068939,-0.0310027878731489,-0.0158059261739254,0.999346673488617,-0.0325006693601608,-0.0156982764601707,0.999346137046814,-0.032568983733654,0.431115508079529,-0.00132260611280799,0.902295827865601,0.431119650602341,-0.00132260541431606,0.902293741703033,0.352187633514404,-0.00133318325970322,0.935928404331207,0.352179825305939,-0.00133318407461047,0.935931324958801,-0.434296250343323,-0.0246087852865458,-0.900433838367462,-0.434283167123795,-0.024608762934804,-0.900440096855164,-0.349011093378067,-0.0245229639112949,-0.936797618865967,-0.349079012870789,-0.024523064494133,-0.936772286891937,-0.0156982764601707,0.999346137046814,-0.032568983733654,-0.0158059261739254,0.999346673488617,-0.0325006693601608,-0.0128314904868603,0.999336063861847,-0.0340994633734226,-0.0125004034489393,0.999335706233978,-0.0342316552996635,0.352179825305939,-0.00133318407461047,0.935931324958801,0.352187633514404,-0.00133318325970322,0.935928404331207, +0.254807651042938,-0.00134640850592405,0.966990649700165,0.254805713891983,-0.0013464093208313,0.966991364955902,-0.349079012870789,-0.024523064494133,-0.936772286891937,-0.349011093378067,-0.0245229639112949,-0.936797618865967,-0.242581218481064,-0.0244281105697155,-0.96982342004776,-0.242784574627876,-0.0244280435144901,-0.969772636890411,-0.00719341542571783,0.99932724237442,-0.0359595641493797,-0.00764655787497759,0.999328017234802,-0.0358480922877789,-0.00312637072056532,0.999315857887268,-0.0368501283228397,-0.00262271333485842,0.999313831329346,-0.0369459018111229,0.0999695733189583,-0.00137380301021039,0.994989573955536,0.0999707505106926,-0.00137380277737975,0.994989395141602,-0.0253609754145145,-0.00139124237466604,0.999677240848541,-0.0253613106906414,-0.00139124237466604,0.999677300453186,-0.0764440819621086,-0.0243785437196493,-0.996775686740875,-0.0761935859918594,-0.0243784338235855,-0.996794879436493,0.0589798465371132,-0.024250665679574,-0.997964441776276,0.058727853000164,-0.0242510046809912,-0.997979402542114,0.00376733532175422,0.999321758747101,-0.0366305820643902,0.00286316918209195,0.999319493770599,-0.036772582679987,0.0126317422837019,0.99933385848999,-0.0342398285865784,0.0131631745025516,0.999333202838898,-0.0340579077601433,-0.195252671837807,-0.00146022799890488,0.980751812458038,-0.195247769355774,-0.00146022567059845,0.980752825737,-0.460845828056335,-0.00150016788393259,0.88747900724411,-0.460911393165588,-0.0015001556603238,0.887444853782654,0.227837592363358,-0.0243255347013474,-0.973395168781281,0.228268876671791,-0.0243257712572813,-0.973294138908386,0.470315217971802,-0.0242821630090475,-0.882164418697357,0.47009265422821,-0.0242825504392385,-0.882282912731171,-0.00262271333485842,0.999313831329346,-0.0369459018111229,-0.00312637072056532,0.999315857887268,-0.0368501283228397,0.00286316918209195,0.999319493770599,-0.036772582679987,0.00376733532175422,0.999321758747101,-0.0366305820643902,-0.0253613106906414,-0.00139124237466604,0.999677300453186,-0.0253609754145145,-0.00139124237466604,0.999677240848541, +-0.195247769355774,-0.00146022567059845,0.980752825737,-0.195252671837807,-0.00146022799890488,0.980751812458038,0.058727853000164,-0.0242510046809912,-0.997979402542114,0.0589798465371132,-0.024250665679574,-0.997964441776276,0.228268876671791,-0.0243257712572813,-0.973294138908386,0.227837592363358,-0.0243255347013474,-0.973395168781281,-0.0125004034489393,0.999335706233978,-0.0342316552996635,-0.0128314904868603,0.999336063861847,-0.0340994633734226,-0.00764655787497759,0.999328017234802,-0.0358480922877789,-0.00719341542571783,0.99932724237442,-0.0359595641493797,0.254805713891983,-0.0013464093208313,0.966991364955902,0.254807651042938,-0.00134640850592405,0.966990649700165,0.0999707505106926,-0.00137380277737975,0.994989395141602,0.0999695733189583,-0.00137380301021039,0.994989573955536,-0.242784574627876,-0.0244280435144901,-0.969772636890411,-0.242581218481064,-0.0244281105697155,-0.96982342004776,-0.0761935859918594,-0.0243784338235855,-0.996794879436493,-0.0764440819621086,-0.0243785437196493,-0.996775686740875,-0.0131643153727055,0.999333143234253,-0.0340595357120037,-0.0126328654587269,0.999333798885345,-0.0342413075268269,-0.00286277197301388,0.999319493770599,-0.0367751084268093,-0.00376740307547152,0.999321699142456,-0.0366325415670872,0.460884869098663,-0.00148310395888984,0.887458622455597,0.460872918367386,-0.00148310279473662,0.887464880943298,0.195183932781219,-0.00142992869950831,0.980765461921692,0.195184916257858,-0.0014299291651696,0.980765402317047,-0.470063239336014,-0.024261923506856,-0.882299244403839,-0.470346659421921,-0.0242615062743425,-0.882148087024689,-0.228314444422722,-0.0242962781339884,-0.973284184932709,-0.22788493335247,-0.0242961775511503,-0.973384857177734,0.00262344162911177,0.999313712120056,-0.0369480066001415,0.00312694348394871,0.999315798282623,-0.0368516109883785,0.00764755439013243,0.999328017234802,-0.0358454324305058,0.00719420751556754,0.999327301979065,-0.0359572172164917,0.0253602173179388,-0.00139178044628352,0.999677360057831,0.0253604594618082,-0.00139178044628352,0.999677360057831, +-0.0999697670340538,-0.00137442362029105,0.994989395141602,-0.0999671965837479,-0.00137442408595234,0.99498975276947,-0.0587277039885521,-0.0242546051740646,-0.997979283332825,-0.0589788295328617,-0.0242542717605829,-0.99796450138092,0.0761941745877266,-0.0243817735463381,-0.996794819831848,0.0764444246888161,-0.0243818759918213,-0.99677562713623,0.702093660831451,0.00159587385132909,-0.712082743644714,0.69258052110672,0.066249705851078,-0.718291759490967,0.45203822851181,0.691637694835663,-0.563292682170868,0.48941445350647,0.689920663833618,-0.533369302749634,0.492175161838531,0.686408638954163,-0.535356521606445,0.492509990930557,0.684213042259216,-0.537853479385376,0.672602593898773,0.0576497130095959,-0.737754821777344,0.673727691173553,0.00137309439014643,-0.738978266716003,-0.489418894052505,0.689913988113403,-0.533373892307281,-0.452041566371918,0.691643595695496,-0.56328272819519,-0.692579448223114,0.0662549734115601,-0.718292355537415,-0.70209139585495,0.00159979064483196,-0.712084889411926,-0.673727691173553,0.00137342023663223,-0.738978266716003,-0.672601997852325,0.0576485246419907,-0.737755477428436,-0.492512315511703,0.684202611446381,-0.537864506244659,-0.492179602384567,0.686401307582855,-0.53536182641983 + } + NormalsW: *4196 { + a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + } + } + LayerElementUV: 0 { + Version: 101 + Name: "map1" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "IndexToDirect" + UV: *3396 { + a: 0.674125075340271,0.73811537027359,0.67329478263855,0.7376469373703,0.680572211742401,0.723486304283142,0.681468546390533,0.723825216293335,0.665161728858948,0.748410165309906,0.664431989192963,0.747825562953949,0.668484508991241,0.730102598667145,0.674614429473877,0.718050956726074,0.686076104640961,0.705978870391846,0.687008619308472,0.706202030181885,0.679355502128601,0.73811537027359,0.68661892414093,0.723825216293335,0.655097723007202,0.754486441612244,0.654481589794159,0.753832817077637,0.661335051059723,0.738450407981873,0.67951625585556,0.70243626832962,0.689765155315399,0.685916900634766,0.690715432167053,0.686042666435242,0.692098259925842,0.706202030181885,0.644631266593933,0.757023751735687,0.644102811813354,0.756348788738251,0.653164148330688,0.743396639823914,0.682931542396545,0.683941125869751,0.691617608070374,0.664237141609192,0.692575097084045,0.664277672767639,0.695764005184174,0.686042666435242,0.634286344051361,0.757538020610809,0.633798241615295,0.756861388683319,0.643915235996246,0.745467901229858,0.684681713581085,0.663603901863098,0.691617608070374,0.642002046108246,0.692575097084045,0.641961574554443,0.69760262966156,0.664277672767639,0.633798241615295,0.745683908462524,0.684681713581085,0.642635345458984,0.689765155315399,0.620322227478027,0.690715372562408,0.620196580886841,0.69760262966156,0.641961574554443,0.612925827503204,0.74568384885788,0.612925827503204,0.756861448287964,0.682931542396545,0.622298061847687,0.686076164245605,0.600260257720947,0.687008500099182,0.600037157535553,0.695764005184174,0.620196580886841,0.594255030155182,0.74568384885788,0.594255030155182,0.756861448287964,0.679516196250916,0.603802978992462,0.680572271347046,0.582752764225006,0.681468427181244,0.582413971424103,0.692098200321198,0.600037157535553,0.577945172786713,0.74568384885788,0.577945172786713,0.756861448287964,0.674614250659943,0.588188350200653,0.673294961452484,0.568592011928558,0.674124896526337,0.568123817443848,0.686618804931641,0.582413971424103,0.668484330177307,0.576136887073517, +0.664432168006897,0.55841326713562,0.665161490440369,0.557829022407532,0.679355263710022,0.568123817443848,0.661334812641144,0.567789375782013,0.654481709003448,0.552405953407288,0.655097424983978,0.551752746105194,0.653163969516754,0.562843143939972,0.644102931022644,0.549890160560608,0.644631028175354,0.549215495586395,0.643915235996246,0.560771703720093,0.633798241615295,0.549377858638763,0.634286344051361,0.548701167106628,0.633798241615295,0.560555279254913,0.612925827503204,0.549377739429474,0.612925827503204,0.560555398464203,0.594255030155182,0.549377739429474,0.594255030155182,0.560555398464203,0.577945172786713,0.549377739429474,0.577945172786713,0.560555398464203,0.474232137203217,0.738327622413635,0.473399639129639,0.738792598247528,0.467349499464035,0.726740956306458,0.46824648976326,0.726403892040253,0.481182307004929,0.74655693769455,0.480450361967087,0.747140407562256,0.468588531017303,0.746337175369263,0.461391359567642,0.73217636346817,0.462508320808411,0.711126267910004,0.463440716266632,0.71090304851532,0.479462027549744,0.738327622413635,0.473396629095078,0.726403892040253,0.489117443561554,0.751430928707123,0.488503992557526,0.752086639404297,0.477352231740952,0.756515979766846,0.455948263406754,0.714668929576874,0.459133982658386,0.692631125450134,0.460084170103073,0.692504823207855,0.468530267477036,0.71090304851532,0.498137444257736,0.753481388092041,0.497617065906525,0.754157900810242,0.487185209989548,0.762523293495178,0.45230033993721,0.694606959819794,0.45740482211113,0.672293901443481,0.458362311124802,0.672253012657166,0.465132713317871,0.692504823207855,0.508071660995483,0.753696739673615,0.507576584815979,0.754373788833618,0.497444957494736,0.764092683792114,0.496852964162827,0.764897644519806,0.450468957424164,0.67292720079422,0.457404851913452,0.651325345039368,0.458362311124802,0.651366114616394,0.463389873504639,0.672253012657166,0.498111099004745,0.765073478221893,0.497801154851913,0.765624403953552,0.450468957424164,0.650692105293274,0.459134042263031,0.630988001823425,0.460084170103073, +0.631114304065704,0.463389873504639,0.651366114616394,0.452300399541855,0.629012286663055,0.462508380413055,0.612492978572845,0.46344068646431,0.61271607875824,0.465132743120193,0.631114304065704,0.455948323011398,0.60895037651062,0.467349678277969,0.596878290176392,0.468246340751648,0.597215294837952,0.468530386686325,0.612716138362885,0.461391478776932,0.591442823410034,0.473399847745895,0.5848268866539,0.474231868982315,0.585291504859924,0.473396807909012,0.597215294837952,0.468588680028915,0.577282249927521,0.480450600385666,0.576479315757751,0.481181889772415,0.577062249183655,0.479462325572968,0.585291504859924,0.477352410554886,0.567103624343872,0.488504081964493,0.571533143520355,0.489116996526718,0.572188258171082,0.487185269594193,0.561096370220184,0.497617065906525,0.569461703300476,0.498137205839157,0.570137858390808,0.497428596019745,0.55858051776886,0.507580161094666,0.569245338439941,0.508058965206146,0.569922387599945,0.507580161094666,0.558067739009857,0.72804582118988,0.737646579742432,0.72721540927887,0.738115012645721,0.719871997833252,0.723824918270111,0.720768451690674,0.723485946655273,0.736908614635468,0.74782520532608,0.736178755760193,0.748409807682037,0.721985101699829,0.738115012645721,0.7147216796875,0.723824858665466,0.714331984519959,0.706201672554016,0.715264439582825,0.705978512763977,0.732856094837189,0.730102181434631,0.726726174354553,0.718050539493561,0.746858954429626,0.753832459449768,0.746242880821228,0.75448602437973,0.740005552768707,0.738449990749359,0.709242284297943,0.706201612949371,0.710625112056732,0.686042308807373,0.711575448513031,0.685916543006897,0.72182434797287,0.702435851097107,0.757237732410431,0.756348371505737,0.756709337234497,0.757023334503174,0.748176455497742,0.743396282196045,0.705576598644257,0.686042308807373,0.70876544713974,0.664277315139771,0.709722936153412,0.664236783981323,0.718408942222595,0.683940827846527,0.76754242181778,0.756860971450806,0.767054200172424,0.757537722587585,0.757425367832184,0.74546754360199,0.703737854957581,0.664277315139771, +0.70876544713974,0.641961216926575,0.709722936153412,0.642001688480377,0.7166588306427,0.663603484630585,0.76754242181778,0.745683550834656,0.703737854957581,0.641961216926575,0.710625231266022,0.620196223258972,0.711575388908386,0.620321929454803,0.7166588306427,0.642634987831116,0.788414776325226,0.745683491230011,0.788414776325226,0.756861090660095,0.705576598644257,0.620196223258972,0.714331984519959,0.600036859512329,0.71526437997818,0.600259959697723,0.71840900182724,0.622297704219818,0.807085573673248,0.745683491230011,0.807085573673248,0.756861090660095,0.709242403507233,0.600036859512329,0.719872176647186,0.582413613796234,0.72076827287674,0.582752466201782,0.721824407577515,0.603802680969238,0.823395371437073,0.745683491230011,0.823395371437073,0.756861090660095,0.714721739292145,0.582413613796234,0.727215707302094,0.568123459815979,0.728045582771301,0.56859165430069,0.726726353168488,0.588187992572784,0.721985280513763,0.568123459815979,0.736179113388062,0.557828664779663,0.736908495426178,0.558412909507751,0.732856333255768,0.576136529445648,0.746243178844452,0.551752388477325,0.746858894824982,0.552405595779419,0.740005731582642,0.567789018154144,0.756709575653076,0.549215197563171,0.757237732410431,0.549889862537384,0.748176574707031,0.562842786312103,0.767054200172424,0.54870080947876,0.76754242181778,0.549377501010895,0.757425367832184,0.560771346092224,0.76754242181778,0.560554981231689,0.788414776325226,0.549377381801605,0.788414776325226,0.560555040836334,0.807085573673248,0.549377381801605,0.807085573673248,0.560555040836334,0.823395371437073,0.549377381801605,0.823395371437073,0.560555040836334,0.548879086971283,0.738792538642883,0.548046588897705,0.738327622413635,0.554032206535339,0.726403832435608,0.554929196834564,0.726740896701813,0.541828393936157,0.747140347957611,0.541096448898315,0.74655693769455,0.542816758155823,0.738327622413635,0.548882126808167,0.726403832435608,0.55883800983429,0.71090304851532,0.559770405292511,0.711126148700714,0.553690195083618,0.746337175369263,0.560887396335602, +0.73217636346817,0.533774733543396,0.752086639404297,0.533161282539368,0.751430928707123,0.544926464557648,0.756515920162201,0.553748488426209,0.71090304851532,0.562194526195526,0.692504823207855,0.563144743442535,0.692631125450134,0.56633049249649,0.714668929576874,0.524661660194397,0.754157900810242,0.524141252040863,0.753481388092041,0.535093545913696,0.762523233890533,0.557145953178406,0.692504823207855,0.563916444778442,0.672253012657166,0.564873874187469,0.672293901443481,0.569978415966034,0.694606900215149,0.514702141284943,0.754373788833618,0.514207005500793,0.753696739673615,0.525425732135773,0.764897644519806,0.524833798408508,0.764092683792114,0.558888852596283,0.672253012657166,0.563916444778442,0.651366114616394,0.564873874187469,0.651325345039368,0.571809828281403,0.67292720079422,0.524477541446686,0.765624344348907,0.524167656898499,0.765073418617249,0.558888852596283,0.651366114616394,0.562194585800171,0.631114304065704,0.563144683837891,0.630988001823425,0.571809768676758,0.650692105293274,0.557145953178406,0.631114304065704,0.558838069438934,0.61271607875824,0.559770345687866,0.612492978572845,0.569978356361389,0.629012286663055,0.553748369216919,0.61271607875824,0.554032385349274,0.597215294837952,0.554929077625275,0.596878290176392,0.566330432891846,0.60895037651062,0.548881947994232,0.597215294837952,0.548046886920929,0.585291564464569,0.548878848552704,0.5848268866539,0.560887277126312,0.591442883014679,0.542816400527954,0.585291564464569,0.541096806526184,0.577062249183655,0.541828155517578,0.576479375362396,0.553690016269684,0.577282249927521,0.533161699771881,0.572188258171082,0.533774614334106,0.571533143520355,0.544926285743713,0.567103683948517,0.524141550064087,0.570137858390808,0.524661660194397,0.569461703300476,0.535093426704407,0.561096370220184,0.514219641685486,0.569922387599945,0.514698445796967,0.569245338439941,0.524850130081177,0.55858051776886,0.514698445796967,0.558067739009857,0.962978482246399,0.509928226470947,0.963084995746613,0.510034739971161,0.962798714637756,0.510286748409271, +0.943281710147858,0.490231513977051,0.960986316204071,0.511882901191711,0.941963672637939,0.492860287427902,0.923792243003845,0.468970507383347,0.922319173812866,0.471433579921722,0.906229078769684,0.446089595556259,0.904604732990265,0.448355674743652,0.890727400779724,0.421764671802521,0.888956725597382,0.423801183700562,0.877405345439911,0.396180987358093,0.875497162342072,0.397953420877457,0.866364359855652,0.369533360004425,0.86433219909668,0.371006458997726,0.857688546180725,0.342024594545364,0.855551421642303,0.34316498041153,0.851443886756897,0.313864231109619,0.849226534366608,0.314642757177353,0.847678005695343,0.285266637802124,0.845410168170929,0.28566175699234,0.846419453620911,0.256449669599533,0.844134330749512,0.256449669599533,0.847678005695343,0.227632761001587,0.845410108566284,0.227237597107887,0.851443886756897,0.199035197496414,0.849226534366608,0.198256582021713,0.857688546180725,0.170874819159508,0.855551421642303,0.169734433293343,0.866364359855652,0.143366053700447,0.86433219909668,0.141892954707146,0.877405345439911,0.116718411445618,0.875497162342072,0.11494592577219,0.890727400779724,0.0911346822977066,0.888956725597382,0.0890980884432793,0.906229019165039,0.0668097659945488,0.904604613780975,0.0645437389612198,0.923792243003845,0.043928898870945,0.922319114208221,0.0414658486843109,0.943281710147858,0.022667845711112,0.941887497901917,0.0201187059283257,0.960012912750244,0.00199021096341312,0.962037086486816,0.00391250289976597,0.0178544688969851,0.558632075786591,0.0165364313870668,0.556003332138062,0.0278674438595772,0.54467236995697,0.0291865319013596,0.547300040721893,0.0123535860329866,0.560186207294464,0.0136715872213244,0.562814950942993,0.0320503227412701,0.540489494800568,0.033368818461895,0.543117582798004,0.00817073974758387,0.564369022846222,0.00948874186724424,0.566997885704041,0.0362331718206406,0.53630656003952,0.0375519767403603,0.53893381357193,0.00681797228753567,0.569668591022491,0.0042959158308804,0.568243861198425,0.0475661791861057,0.524973571300507,0.0489606969058514, +0.527523219585419,0.051716223359108,0.52072811126709,0.0531105287373066,0.523277401924133,0.0558085590600967,0.516362011432648,0.0572027936577797,0.518911182880402,0.0671687945723534,0.503969192504883,0.0686431229114532,0.506430923938751,0.071157842874527,0.499411314725876,0.0726316124200821,0.501873731613159,0.0750000402331352,0.494628638029099,0.0764743387699127,0.497090250253677,0.0850207358598709,0.481573969125748,0.0866454243659973,0.483839601278305,0.0887080803513527,0.476533800363541,0.0903326645493507,0.478799641132355,0.0922249630093575,0.471276015043259,0.0938496515154839,0.473541557788849,0.100861310958862,0.45772397518158,0.102632328867912,0.459759920835495,0.10419587045908,0.452214777469635,0.105966784060001,0.454251110553741,0.107335060834885,0.446500033140183,0.109106041491032,0.448535919189453,0.11457647383213,0.432593584060669,0.116484977304935,0.43436536192894,0.117503620684147,0.42664036154747,0.119412057101727,0.428412526845932,0.120209999382496,0.420499473810196,0.122118435800076,0.422271221876144,0.126066967844963,0.40636345744133,0.128099411725998,0.407835930585861,0.128530651330948,0.400005787611008,0.130563095211983,0.40147864818573,0.130748853087425,0.393485277891159,0.132781237363815,0.394957691431046,0.135248005390167,0.379219681024551,0.137385353446007,0.380359470844269,0.137193873524666,0.372514307498932,0.139331221580505,0.373654425144196,0.138872027397156,0.365678161382675,0.141009300947189,0.36681792140007,0.142048582434654,0.351353466510773,0.144266054034233,0.352131605148315,0.143428325653076,0.344375103712082,0.145645871758461,0.345153480768204,0.144522562623024,0.337304949760437,0.14674000442028,0.338083058595657,0.14641135931015,0.322961926460266,0.148679241538048,0.323356747627258,0.14718759059906,0.315801799297333,0.149455606937408,0.316196799278259,0.147666737437248,0.308594346046448,0.149934589862823,0.30898916721344,0.148293197154999,0.294249147176743,0.150578305125237,0.294249147176743,0.14844374358654,0.287010878324509,0.150729060173035,0.287010878324509,0.148293197154999, +0.279772609472275,0.150578305125237,0.279772579669952,0.147666737437248,0.26542741060257,0.149934589862823,0.265032589435577,0.14718759059906,0.258219927549362,0.149455651640892,0.257824957370758,0.14641135931015,0.251059830188751,0.148679241538048,0.250665009021759,0.144522607326508,0.23671680688858,0.14674000442028,0.235938712954521,0.143428325653076,0.229646652936935,0.145645871758461,0.228868290781975,0.142048582434654,0.222668260335922,0.144266054034233,0.221890166401863,0.138872057199478,0.208343610167503,0.141009300947189,0.20720386505127,0.137193873524666,0.201507464051247,0.139331221580505,0.200367331504822,0.135248005390167,0.194802105426788,0.137385353446007,0.193662285804749,0.130748853087425,0.180536478757858,0.132781267166138,0.179064035415649,0.12853068113327,0.17401596903801,0.130563095211983,0.172543108463287,0.126066997647285,0.167658299207687,0.128099456429482,0.166185840964317,0.120209999382496,0.153522297739983,0.122118435800076,0.151750504970551,0.11750365793705,0.147381410002708,0.119412057101727,0.145609244704247,0.114576511085033,0.141428217291832,0.116484977304935,0.139656394720078,0.107335060834885,0.127521678805351,0.109106041491032,0.125485837459564,0.10419587045908,0.121806941926479,0.105966821312904,0.119770705699921,0.100861310958862,0.116297744214535,0.102632366120815,0.114261820912361,0.0922250002622604,0.102745749056339,0.0938496887683868,0.10048021376133,0.0887080803513527,0.0974879860877991,0.0903327018022537,0.0952221006155014,0.0850207731127739,0.0924478024244308,0.0866454616189003,0.0901822000741959,0.0750000774860382,0.0793931037187576,0.0764734968543053,0.0769304037094116,0.07115788012743,0.0746104940772057,0.0726311579346657,0.0721476525068283,0.0671688318252563,0.0700526162981987,0.0686419978737831,0.0675903037190437,0.0558116100728512,0.0576630719006062,0.0571318231523037,0.0550359077751637,0.0517178028821945,0.0532952733337879,0.0530369281768799,0.0506674088537693,0.0475693382322788,0.0490513145923615,0.0488894097507,0.0464245714247227,0.0362331718206406,0.0377151444554329, +0.0375512056052685,0.0350863710045815,0.0320503599941731,0.0335322991013527,0.0333683602511883,0.0309035237878561,0.0278674773871899,0.0293494537472725,0.0291854795068502,0.0267206784337759,0.0165364667773247,0.0180184077471495,0.0178544688969851,0.0153896315023303,0.0123535860329866,0.0138355614617467,0.0136715872213244,0.0112067852169275,0.00817073974758387,0.00965264532715082,0.00948874186724424,0.00702393939718604,0.00199203519150615,0.00347397569566965,0.00445504812523723,0.00199021096341312,0.503993153572083,0.514742851257324,0.483154028654099,0.49188357591629,0.489393383264542,0.486702501773834,0.509706676006317,0.508985042572021,0.503504991531372,0.51521247625351,0.482632637023926,0.492316573858261,0.464520990848541,0.467209458351135,0.471211791038513,0.462626129388809,0.509527623653412,0.507783651351929,0.489914834499359,0.486269474029541,0.519920408725739,0.519352078437805,0.514338076114655,0.524934470653534,0.463961839675903,0.467592418193817,0.448244124650955,0.440921276807785,0.455329239368439,0.436974883079529,0.471770912408829,0.46224308013916,0.510892689228058,0.509223639965057,0.519667327404022,0.518131077289581,0.519977271556854,0.519282221794128,0.530251383781433,0.529818475246429,0.524804532527924,0.535265326499939,0.447652012109756,0.441251128911972,0.434462159872055,0.413243502378464,0.441881209611893,0.409967660903931,0.455921351909637,0.436645120382309,0.530370354652405,0.500995874404907,0.519927501678467,0.494451522827148,0.520925462245941,0.519407093524933,0.53059321641922,0.529202699661255,0.540197968482971,0.53988242149353,0.534868538379669,0.545211851596832,0.433842122554779,0.413517206907272,0.423292845487595,0.384412050247192,0.430982440710068,0.381834775209427,0.442501246929169,0.409693866968155,0.520333468914032,0.518807590007782,0.531205892562866,0.501402199268341,0.510191142559052,0.508511543273926,0.519038438796997,0.494045972824097,0.522129595279694,0.487510025501251,0.533461928367615,0.492220014333725,0.540426135063171,0.539153158664703,0.549062311649323,0.548845946788788,0.543831944465637, +0.554076254367828,0.422650218009949,0.384627461433411,0.41483137011528,0.354673117399216,0.422725975513458,0.352816373109818,0.431625068187714,0.381619393825531,0.534367680549622,0.492429047822952,0.521171987056732,0.48732003569603,0.522744596004486,0.480269372463226,0.53459358215332,0.482916444540024,0.549189865589142,0.548016011714935,0.414171636104584,0.354828268289566,0.409149974584579,0.324280261993408,0.417182236909866,0.323159873485565,0.423385798931122,0.352661162614822,0.535517811775208,0.482967376708984,0.52177357673645,0.480244815349579,0.522495210170746,0.472939640283585,0.53454852104187,0.473720073699951,0.408478707075119,0.324373930692673,0.406297087669373,0.29349285364151,0.414398461580276,0.293118327856064,0.417853504419327,0.323066204786301,0.53547191619873,0.473646700382233,0.521528244018555,0.473037391901016,0.521274507045746,0.465707957744598,0.533190846443176,0.464646071195602,0.405620068311691,0.293524205684662,0.406297087669373,0.262573540210724,0.414398461580276,0.262948155403137,0.415075540542603,0.293087035417557,0.534094095230103,0.464441001415253,0.520329177379608,0.465932190418243,0.516482651233673,0.450136035680771,0.527742326259613,0.446592032909393,0.405620068311691,0.262542247772217,0.409149974584579,0.231786206364632,0.417182236909866,0.232906669378281,0.415075540542603,0.262979447841644,0.528609752655029,0.446268707513809,0.515572845935822,0.450475484132767,0.509138464927673,0.43349677324295,0.519771337509155,0.428691297769547,0.408478707075119,0.231692537665367,0.41483137011528,0.201393350958824,0.422725975513458,0.203250169754028,0.417853504419327,0.233000263571739,0.520603835582733,0.428289741277695,0.508263111114502,0.433913975954056,0.500165104866028,0.415999889373779,0.510403871536255,0.410670697689056,0.414171636104584,0.201238140463829,0.423292845487595,0.171654403209686,0.430982500314713,0.174231678247452,0.423385798931122,0.203405380249023,0.511223495006561,0.410244315862656,0.499305367469788,0.416447401046753,0.490462899208069,0.397774934768677,0.500557363033295,0.392413675785065, +0.422650218009949,0.171439006924629,0.4344622194767,0.142822980880737,0.441881209611893,0.146098807454109,0.431625127792358,0.17444708943367,0.501375377178192,0.391984194517136,0.489604383707047,0.398224622011185,0.480842530727386,0.378917068243027,0.490982174873352,0.373859196901321,0.433842182159424,0.142549201846123,0.448244124650955,0.115145191550255,0.455329239368439,0.119091585278511,0.442501246929169,0.146372586488724,0.491812855005264,0.373454362154007,0.479970246553421,0.379339873790741,0.471995711326599,0.359500646591187,0.482315570116043,0.355027735233307,0.447652012109756,0.114815421402454,0.464521050453186,0.08885707706213,0.471211791038513,0.0934403464198112,0.455921351909637,0.119421355426311,0.483168065547943,0.354670375585556,0.471100300550461,0.359872847795486,0.464496552944183,0.339603304862976,0.475068509578705,0.335967093706131,0.463961839675903,0.0884740501642227,0.483154088258743,0.0641829520463943,0.489393383264542,0.0693640261888504,0.471771001815796,0.0938233733177185,0.475946456193924,0.335676908493042,0.463574826717377,0.339905709028244,0.458801329135895,0.319315433502197,0.469628393650055,0.316740125417709,0.482632637023926,0.0637499690055847,0.503993153572083,0.0413236953318119,0.509706735610962,0.0470814518630505,0.489914834499359,0.06979700922966,0.470530331134796,0.316534817218781,0.457854747772217,0.319529503583908,0.455245614051819,0.29874786734581,0.46626204252243,0.297410398721695,0.503505051136017,0.0408540181815624,0.514338076114655,0.031132047995925,0.519920408725739,0.036714393645525,0.509527623653412,0.0482828058302403,0.467181175947189,0.297303825616837,0.454281210899353,0.298859030008316,0.454037040472031,0.278033137321472,0.465123206377029,0.278033137321472,0.524804532527924,0.0208011940121651,0.530251383781433,0.02624805085361,0.510892689228058,0.0468428209424019,0.519977331161499,0.0367843471467495,0.519667327404022,0.0379354618489742,0.46604859828949,0.278033137321472,0.453066170215607,0.278033137321472,0.455245614051819,0.257318437099457,0.46626204252243,0.258655846118927, +0.534868538379669,0.0108546307310462,0.540197968482971,0.0161839611828327,0.520925462245941,0.0366593822836876,0.53059321641922,0.0268637426197529,0.530370950698853,0.0550702884793282,0.519926905632019,0.0616152174770832,0.467181265354156,0.258762508630753,0.454281270503998,0.257207304239273,0.45880138874054,0.236750900745392,0.4696284532547,0.239326134324074,0.543831944465637,0.00199021096341312,0.549062311649323,0.00722053973004222,0.540426135063171,0.0169132500886917,0.533462703227997,0.063846230506897,0.522129058837891,0.0685565769672394,0.510191142559052,0.0475549884140491,0.519035935401917,0.0620162785053253,0.520333468914032,0.037258867174387,0.53120893239975,0.054668951779604,0.470530420541763,0.239531442523003,0.457854807376862,0.236536830663681,0.464496701955795,0.216463029384613,0.475068509578705,0.220099225640297,0.549189865589142,0.0080505134537816,0.534593999385834,0.0731499493122101,0.522744953632355,0.0757971107959747,0.521171987056732,0.0687464401125908,0.534367740154266,0.0636373534798622,0.475946545600891,0.220389351248741,0.463574886322021,0.216160625219345,0.471995860338211,0.196565613150597,0.482315629720688,0.201038599014282,0.534549057483673,0.0823463872075081,0.522494971752167,0.0831267535686493,0.521773636341095,0.0758216679096222,0.535517811775208,0.0730990841984749,0.483168125152588,0.201395943760872,0.471100360155106,0.196193471550941,0.480842679738998,0.177149251103401,0.490982264280319,0.182207047939301,0.53319126367569,0.0914204567670822,0.521274566650391,0.0903585255146027,0.521528303623199,0.0830290839076042,0.53547191619873,0.0824197083711624,0.491812944412231,0.182611897587776,0.479970306158066,0.176726520061493,0.490463048219681,0.158291399478912,0.500557422637939,0.163652658462524,0.527742624282837,0.109474442899227,0.516482472419739,0.105930298566818,0.520329236984253,0.0901342034339905,0.534094154834747,0.0916254073381424,0.501375436782837,0.164082139730453,0.489604443311691,0.15784178674221,0.500165164470673,0.140066504478455,0.5104039311409,0.145395621657372,0.519771456718445, +0.127375110983849,0.509138464927673,0.122569628059864,0.515572905540466,0.105590984225273,0.528609812259674,0.109797686338425,0.511223554611206,0.145822018384933,0.499305486679077,0.139618992805481,0.508263230323792,0.122152432799339,0.520603895187378,0.127776592969894,0.589529037475586,0.50430166721344,0.609842300415039,0.482019186019897,0.616081595420837,0.487200260162354,0.595242559909821,0.510059535503387,0.589033901691437,0.503839671611786,0.609320819377899,0.481586217880249,0.62802392244339,0.457942873239517,0.634714722633362,0.462526142597198,0.595730721950531,0.510529220104218,0.616603076457977,0.487633287906647,0.585176408290863,0.519971907138824,0.579594731330872,0.514390170574188,0.627464771270752,0.457559823989868,0.643906533718109,0.432291626930237,0.650991559028625,0.436237990856171,0.635273873806,0.462909162044525,0.585613667964935,0.520492255687714,0.57602059841156,0.528991878032684,0.570574760437012,0.523546099662781,0.643314301967621,0.431961834430695,0.657354474067688,0.405284374952316,0.664773523807526,0.408560186624527,0.651583731174469,0.436567783355713,0.576364755630493,0.529605388641357,0.56796807050705,0.536927044391632,0.562639534473419,0.531598567962646,0.656734466552734,0.405010610818863,0.668253242969513,0.377151489257813,0.675942838191986,0.3797287940979,0.665393471717834,0.40883395075798,0.568193793296814,0.537658989429474,0.560919284820557,0.543877184391022,0.55568939447403,0.538647353649139,0.6676105260849,0.376936107873917,0.676509618759155,0.348133027553558,0.684404313564301,0.349989831447601,0.676585495471954,0.379944205284119,0.56104439496994,0.5447096824646,0.675849914550781,0.347977876663208,0.682053446769714,0.318476557731628,0.690085709095001,0.319597005844116,0.685064077377319,0.350145012140274,0.681382179260254,0.318382918834686,0.684837222099304,0.288435071706772,0.692938625812531,0.288809597492218,0.690756976604462,0.319690644741058,0.684160113334656,0.288403779268265,0.684837222099304,0.258264869451523,0.692938625812531,0.257890284061432,0.693615674972534,0.288840889930725, +0.684160113334656,0.25829616189003,0.682053446769714,0.228223368525505,0.690085709095001,0.227102920413017,0.693615674972534,0.257858991622925,0.681382119655609,0.228317007422447,0.676509618759155,0.198566883802414,0.684404313564301,0.196710050106049,0.690756976604462,0.227009251713753,0.675849854946136,0.198722049593925,0.668253242969513,0.169548392295837,0.675942838191986,0.166971117258072,0.685064077377319,0.196554884314537,0.6676105260849,0.169763803482056,0.657354474067688,0.141415521502495,0.664773523807526,0.138139724731445,0.676585495471954,0.166755706071854,0.656734466552734,0.141689300537109,0.64390641450882,0.114408291876316,0.650991559028625,0.11046189814806,0.665393471717834,0.137865945696831,0.643314301967621,0.11473809927702,0.628023862838745,0.0887570530176163,0.634714722633362,0.084173783659935,0.651583671569824,0.110132128000259,0.627464771270752,0.0891400799155235,0.609842300415039,0.0646807327866554,0.616081595420837,0.0594996586441994,0.63527375459671,0.0837907567620277,0.609320819377899,0.0651137158274651,0.589528977870941,0.0423982292413712,0.595242559909821,0.0366404019296169,0.616603076457977,0.0590666756033897,0.589033901691437,0.0428602583706379,0.579594731330872,0.0323096849024296,0.585176408290863,0.0267280451953411,0.595730721950531,0.0361707583069801,0.570574700832367,0.0231538042426109,0.57602059841156,0.0177079997956753,0.585613608360291,0.0262075662612915,0.562639594078064,0.0151012558490038,0.56796807050705,0.00977283716201782,0.576364755630493,0.0170944835990667,0.55568939447403,0.00805254839360714,0.560919284820557,0.00282264035195112,0.568193793296814,0.00904088281095028,0.56104439496994,0.00199021096341312,0.798284947872162,0.510059356689453,0.7774458527565,0.487200111150742,0.784206688404083,0.48158597946167,0.804033815860748,0.503335475921631,0.804011166095734,0.504314601421356,0.797796785831451,0.510528981685638,0.776924431324005,0.487633109092712,0.758812785148621,0.462525993585587,0.766062796115875,0.457559615373611,0.816269218921661,0.479021430015564,0.815805375576019,0.489054411649704, +0.810337424278259,0.497588992118835,0.8058061003685,0.463650017976761,0.811612010002136,0.470018714666367,0.804489970207214,0.503835797309875,0.81393301486969,0.514389753341675,0.80835086107254,0.519972026348114,0.807913839817047,0.520492136478424,0.758253633975983,0.462908953428268,0.742535948753357,0.436237812042236,0.750213146209717,0.43196165561676,0.789225041866302,0.441693097352982,0.816473364830017,0.489266961812973,0.816953897476196,0.478871464729309,0.810859441757202,0.498029291629791,0.80632758140564,0.463216960430145,0.812172412872314,0.4696284532547,0.822953224182129,0.523545503616333,0.817506492137909,0.528992116451263,0.8171626329422,0.529605031013489,0.741943836212158,0.436567664146423,0.728753983974457,0.408560007810593,0.736793041229248,0.405010402202606,0.774740636348724,0.418299943208694,0.789784252643585,0.441310048103333,0.830888330936432,0.531597971916199,0.825558960437775,0.536927282810211,0.825333476066589,0.537658631801605,0.728133916854858,0.408833742141724,0.717584669589996,0.379728585481644,0.725916862487793,0.37693589925766,0.762476444244385,0.393670111894608,0.775332748889923,0.41797012090683,0.837838351726532,0.538646817207336,0.832607924938202,0.543877303600311,0.832482933998108,0.544709324836731,0.716942012310028,0.379943996667862,0.709123194217682,0.349989652633667,0.717677652835846,0.347977697849274,0.752537071704865,0.368013739585876,0.763096451759338,0.393396317958832,0.708463430404663,0.350144803524017,0.703441798686981,0.31959679722786,0.712145388126373,0.318382740020752,0.745007455348969,0.341549813747406,0.753179788589478,0.367798328399658,0.702770531177521,0.319690465927124,0.700588881969452,0.288809388875961,0.709367394447327,0.288403570652008,0.739951729774475,0.314503967761993,0.745667219161987,0.341394603252411,0.699911892414093,0.288840740919113,0.700588881969452,0.257890075445175,0.709367394447327,0.258295983076096,0.737413048744202,0.287106931209564,0.74062305688858,0.314410299062729,0.699911892414093,0.257858783006668,0.703441798686981,0.227102741599083,0.712145328521729, +0.22831679880619,0.737413048744202,0.259592622518539,0.738090038299561,0.287075638771057,0.702770590782166,0.227009072899818,0.709123194217682,0.196709871292114,0.717677652835846,0.198721915483475,0.739951729774475,0.232195615768433,0.738090038299561,0.259623914957047,0.708463370800018,0.19655467569828,0.717584669589996,0.166970938444138,0.725916981697083,0.169763624668121,0.745007455348969,0.205149799585342,0.740622997283936,0.232289284467697,0.716942012310028,0.166755542159081,0.728754043579102,0.138139516115189,0.736793041229248,0.141689121723175,0.752537071704865,0.178685858845711,0.745667219161987,0.205305010080338,0.728134036064148,0.137865737080574,0.742535948753357,0.110461719334126,0.750213146209717,0.114737883210182,0.76247650384903,0.153029426932335,0.753179788589478,0.178901195526123,0.741943836212158,0.110131949186325,0.758812844753265,0.0841736048460007,0.766062796115875,0.0891399085521698,0.774740636348724,0.128399580717087,0.763096511363983,0.153303205966949,0.758253633975983,0.0837905779480934,0.777445912361145,0.0594994835555553,0.784206688404083,0.0651135370135307,0.789225101470947,0.105006515979767,0.775332748889923,0.128729417920113,0.776924431324005,0.0590665005147457,0.798284947872162,0.0366402268409729,0.804011225700378,0.0423849336802959,0.804033935070038,0.0433640740811825,0.805806159973145,0.0830495730042458,0.789784252643585,0.105389475822449,0.797796845436096,0.0361705496907234,0.80835086107254,0.0267275534570217,0.81393301486969,0.0323097556829453,0.804490029811859,0.042863804847002,0.815805375576019,0.057645108550787,0.816269278526306,0.0676781162619591,0.811612069606781,0.0766808316111565,0.810337424278259,0.0491105318069458,0.806327641010284,0.0834825560450554,0.807913839817047,0.0262074247002602,0.817506492137909,0.0177073683589697,0.822953224182129,0.0231540855020285,0.810859441757202,0.0486701801419258,0.816953957080841,0.0678280591964722,0.816473364830017,0.0574325807392597,0.812172472476959,0.0770710855722427,0.8171626329422,0.0170944128185511,0.825558960437775,0.00977220572531223, +0.830888330936432,0.0151016069576144,0.825333476066589,0.00904095359146595,0.832607924938202,0.0028222193941474,0.837838351726532,0.00805261824280024,0.832482933998108,0.00199021096341312,0.314825654029846,0.486269801855087,0.332969516515732,0.462243437767029,0.340219438076019,0.467209756374359,0.321586400270462,0.491883873939514,0.293226212263107,0.468333721160889,0.309807181358337,0.446376919746399,0.348819106817245,0.43664538860321,0.356496393680573,0.440921604633331,0.322107821702957,0.492316901683807,0.34077861905098,0.467592775821686,0.295021116733551,0.508998394012451,0.294998407363892,0.508019268512726,0.300747275352478,0.514743149280548,0.283226907253265,0.493738234043121,0.282763063907623,0.483705222606659,0.287420302629471,0.474702537059784,0.288694888353348,0.502272844314575,0.292704790830612,0.467900723218918,0.309248030185699,0.44599387049675,0.32429164648056,0.422983705997467,0.362239211797714,0.409694194793701,0.370278269052505,0.413243800401688,0.357088506221771,0.441251397132874,0.301235496997833,0.515212774276733,0.29454231262207,0.50851958990097,0.29040265083313,0.524935007095337,0.284820288419724,0.519352614879608,0.282558977603912,0.493950694799423,0.282078355550766,0.483555287122726,0.286859899759293,0.474312275648117,0.288172900676727,0.502713084220886,0.323699533939362,0.42265385389328,0.336555868387222,0.398353844881058,0.373115360736847,0.381619721651077,0.381447613239288,0.384412407875061,0.370898306369781,0.413517564535141,0.284390658140183,0.518824219703674,0.279936283826828,0.535265922546387,0.274489432573318,0.529819130897522,0.335935801267624,0.398080110549927,0.346495151519775,0.372697532176971,0.381354689598084,0.352661490440369,0.389909088611603,0.354673445224762,0.382090240716934,0.384627819061279,0.274147391319275,0.529202997684479,0.269872188568115,0.54521256685257,0.264542818069458,0.539883136749268,0.34585252404213,0.372482150793076,0.354024797677994,0.346233516931534,0.386886924505234,0.323066532611847,0.395590484142303,0.324280619621277,0.390568882226944,0.354828596115112, +0.264314472675323,0.539153337478638,0.260908782482147,0.554076910018921,0.25567838549614,0.548846423625946,0.353365063667297,0.346078336238861,0.35908055305481,0.319187730550766,0.38966491818428,0.293087363243103,0.39844337105751,0.293493211269379,0.396261751651764,0.324374228715897,0.255550742149353,0.54801607131958,0.358409255743027,0.319094061851501,0.361619263887405,0.291790753602982,0.38966491818428,0.262979775667191,0.39844337105751,0.262573897838593,0.399120390415192,0.293524503707886,0.360942214727402,0.291759431362152,0.361619293689728,0.264276385307312,0.386886924505234,0.233000621199608,0.395590484142303,0.231786534190178,0.399120390415192,0.262542605400085,0.360942244529724,0.264307677745819,0.359080523252487,0.236879408359528,0.381354689598084,0.203405663371086,0.389909088611603,0.201393663883209,0.396261721849442,0.231692865490913,0.358409255743027,0.23697304725647,0.354024797677994,0.20983362197876,0.373115360736847,0.174447402358055,0.381447613239288,0.171654731035233,0.390568882226944,0.201238498091698,0.353365063667297,0.209988832473755,0.346495151519775,0.183369636535645,0.362239211797714,0.14637291431427,0.370278269052505,0.142823323607445,0.382090240716934,0.171439319849014,0.345852494239807,0.183585003018379,0.336555808782578,0.15771321952343,0.348819106817245,0.1194217056036,0.356496334075928,0.11514550447464,0.370898276567459,0.14254954457283,0.335935771465302,0.157986998558044,0.324291586875916,0.133083358407021,0.332969516515732,0.0938236936926842,0.340219438076019,0.088857389986515,0.357088446617126,0.114815734326839,0.323699474334717,0.133413165807724,0.309807151556015,0.109690196812153,0.314825624227524,0.0697973221540451,0.321586400270462,0.0641832649707794,0.340778589248657,0.0884743630886078,0.309247970581055,0.11007322371006,0.293226093053818,0.0877333581447601,0.294998377561569,0.0480478927493095,0.295021116733551,0.04706871509552,0.300747245550156,0.0413240119814873,0.322107821702957,0.0637502819299698,0.292704641819,0.0881663411855698,0.288694858551025,0.0537943169474602,0.287420213222504, +0.0813646167516708,0.282763034105301,0.0723619014024735,0.283226877450943,0.0623288936913013,0.294542223215103,0.0475475527346134,0.284820288419724,0.036714531481266,0.290402621030808,0.0311321187764406,0.301235467195511,0.0408543683588505,0.286859810352325,0.0817548707127571,0.288172870874405,0.0533539988100529,0.282078325748444,0.0725118443369865,0.28255894780159,0.0621163994073868,0.284390658140183,0.0372428707778454,0.274489432573318,0.0262479800730944,0.279936254024506,0.0208012647926807,0.27414733171463,0.0268641635775566,0.264542818069458,0.016183890402317,0.269872188568115,0.0108546307310462,0.264314472675323,0.016913739964366,0.25567838549614,0.0072206100448966,0.260908782482147,0.00199021096341312,0.255550742149353,0.00805093441158533,0.932035326957703,0.540456295013428,0.920083105564117,0.533234596252441,0.930924892425537,0.51587438583374,0.940884411334991,0.52598774433136,0.929900884628296,0.547184467315674,0.916941404342651,0.542165040969849,0.929298877716064,0.554262101650238,0.915800213813782,0.551586508750916,0.92954421043396,0.561471700668335,0.915849089622498,0.560871660709381,0.930743515491486,0.568578898906708,0.917223632335663,0.570042073726654,0.935500800609589,0.584038257598877,0.922695398330688,0.588168978691101,0.94281131029129,0.600601255893707,0.93068939447403,0.606124460697174,0.951769471168518,0.618068337440491,0.940062522888184,0.624160468578339,0.961471617221832,0.636292994022369,0.949908852577209,0.642421722412109,0.971105635166168,0.655177235603333,0.959471702575684,0.66095632314682,0.979974567890167,0.674642145633698,0.968120276927948,0.679751992225647,0.98749977350235,0.694608509540558,0.975346982479095,0.698761940002441,0.993219673633575,0.714983582496643,0.980768203735352,0.717925012111664,0.996793031692505,0.735652804374695,0.984121084213257,0.737180411815643,0.998008012771606,0.756477296352386,0.985255181789398,0.756477355957031,0.996793031692505,0.777301788330078,0.984121143817902,0.775774300098419,0.99321973323822,0.797971069812775,0.980768203735352,0.795029699802399,0.987499892711639, +0.818346261978149,0.97534704208374,0.814192712306976,0.979974627494812,0.83831262588501,0.968120336532593,0.83320277929306,0.971105694770813,0.857777535915375,0.959471821784973,0.851998448371887,0.961471736431122,0.876661777496338,0.949908971786499,0.870533108711243,0.951769590377808,0.894886374473572,0.940062582492828,0.888794362545013,0.942811369895935,0.912353515625,0.930689513683319,0.906830430030823,0.935500860214233,0.92891651391983,0.922695457935333,0.924785852432251,0.93074357509613,0.944375932216644,0.917223691940308,0.942912817001343,0.929544270038605,0.951483190059662,0.915849149227142,0.952083289623261,0.929298996925354,0.958692789077759,0.915800273418427,0.961368441581726,0.929900884628296,0.965770363807678,0.916941404342651,0.970789849758148,0.932035326957703,0.972498595714569,0.920083165168762,0.9797203540802,0.940884411334991,0.986967146396637,0.930924892425537,0.997080504894257,0.23483806848526,0.425258278846741,0.242078885436058,0.431109726428986,0.247106999158859,0.445016294717789,0.244088098406792,0.450842022895813,0.24107763171196,0.425156563520432,0.24813349545002,0.450731009244919,0.20682692527771,0.450842022895813,0.206827059388161,0.425258278846741,0.242130234837532,0.419015616178513,0.247160598635674,0.456240177154541,0.23483806848526,0.475167006254196,0.206827059388161,0.475167006254196,0.244088098406792,0.398610711097717,0.20682692527771,0.398610711097717,0.247037246823311,0.404879629611969,0.242007166147232,0.469792157411575,0.244088098406792,0.498047888278961,0.206827059388161,0.498047888278961,0.23483806848526,0.371101945638657,0.206827059388161,0.371101945638657,0.248066559433937,0.398522049188614,0.241008594632149,0.47504997253418,0.241953566670418,0.480090171098709,0.247231185436249,0.493144780397415,0.23483806848526,0.519308805465698,0.206827059388161,0.519308805465698,0.242193952202797,0.37773585319519,0.246990948915482,0.392001509666443,0.244088098406792,0.342941522598267,0.20682692527771,0.342941522598267,0.248201563954353,0.497927486896515,0.247282683849335,0.502485334873199, +0.241890981793404,0.514878213405609,0.244088098406792,0.53900557756424,0.206827059388161,0.53900557756424,0.241138532757759,0.371030390262604,0.246937617659569,0.349869668483734,0.242232263088226,0.364194273948669,0.23483806848526,0.314343929290771,0.20682692527771,0.314343929290771,0.240968883037567,0.519244372844696,0.24192675948143,0.523489713668823,0.247249007225037,0.534822821617126,0.23483806848526,0.558702409267426,0.232987269759178,0.558702409267426,0.206827059388161,0.539112091064453,0.248015761375427,0.342891275882721,0.242270857095718,0.321478098630905,0.246910259127617,0.335821092128754,0.244088098406792,0.285527020692825,0.206827059388161,0.285527020692825,0.248197495937347,0.53900557756424,0.247249007225037,0.543188512325287,0.241927608847618,0.554519474506378,0.235308304429054,0.560440540313721,0.241175308823586,0.314317971467972,0.246889904141426,0.292765319347382,0.242285162210464,0.307110548019409,0.23483806848526,0.256710112094879,0.20682692527771,0.256710112094879,0.240979120135307,0.558702409267426,0.243747383356094,0.566760063171387,0.241927608847618,0.562885165214539,0.247996538877487,0.285527020692825,0.242285162210464,0.263943493366241,0.246889904141426,0.278288751840591,0.244088098406792,0.228112548589706,0.20682692527771,0.228112548589706,0.241175308823586,0.256736069917679,0.246910259127617,0.235232964158058,0.242270857095718,0.249575957655907,0.23483806848526,0.199952244758606,0.206827059388161,0.199952244758606,0.248015761375427,0.228162780404091,0.242232263088226,0.206859782338142,0.246937617659569,0.221184387803078,0.244088098406792,0.172443330287933,0.206827059388161,0.172443330287933,0.241138532757759,0.200023666024208,0.246990948915482,0.17905268073082,0.242193952202797,0.193318352103233,0.23483806848526,0.145795777440071,0.206827059388161,0.145795777440071,0.248066559433937,0.172532171010971,0.242130234837532,0.152038425207138,0.247037246823311,0.166174441576004,0.244088098406792,0.120212033390999,0.20682692527771,0.120212033390999,0.24107763171196,0.145897582173347,0.247106999158859, +0.12603785097599,0.242078885436058,0.139944344758987,0.23483806848526,0.095887117087841,0.206827059388161,0.095887117087841,0.24813349545002,0.120323106646538,0.242007166147232,0.101261913776398,0.247160598635674,0.11481387168169,0.244088098406792,0.0730062574148178,0.206827059388161,0.0730062574148178,0.241008594632149,0.0960041508078575,0.247231185436249,0.0779092684388161,0.241953566670418,0.0909639671444893,0.23483806848526,0.0517452023923397,0.206827059388161,0.0517452023923397,0.248201563954353,0.0731266587972641,0.241892382502556,0.0561792366206646,0.247282683849335,0.0685687810182571,0.244088098406792,0.0320484638214111,0.206827059388161,0.0329898595809937,0.207980990409851,0.0320484638214111,0.240968883037567,0.0518114380538464,0.247249007225037,0.0362313091754913,0.241925224661827,0.0475674793124199,0.23483806848526,0.0123517271131277,0.23212718963623,0.0123517271131277,0.248197495937347,0.0320484638214111,0.241927608847618,0.0165345724672079,0.247249007225037,0.0278656184673309,0.235535770654678,0.00957118533551693,0.240979120135307,0.0123517271131277,0.244829326868057,0.00199021096341312,0.241927608847618,0.00816888082772493,0.164256349205971,0.434365302324295,0.171475455164909,0.428514569997787,0.162225335836411,0.454362273216248,0.159185156226158,0.448535889387131,0.165248543024063,0.42841249704361,0.199486449360847,0.428514569997787,0.199486449360847,0.454362332820892,0.158168718218803,0.454251050949097,0.164206996560097,0.422271221876144,0.162225335836411,0.401567548513412,0.199486449360847,0.401567608118057,0.171475455164909,0.478916823863983,0.199486449360847,0.478916823863983,0.159133404493332,0.45975986123085,0.159251779317856,0.407835900783539,0.171475455164909,0.37372612953186,0.199486449360847,0.37372612953186,0.164325222373009,0.473541557788849,0.162225335836411,0.501994729042053,0.199486449360847,0.501994729042053,0.158232644200325,0.401478588581085,0.164146304130554,0.380359441041946,0.159296154975891,0.394957661628723,0.162225335836411,0.345203965902328,0.199486449360847,0.345203936100006, +0.165314823389053,0.47879958152771,0.16437703371048,0.483839571475983,0.159065917134285,0.497090250253677,0.171475455164909,0.523346066474915,0.199486449360847,0.523421406745911,0.165190488100052,0.373654395341873,0.159346774220467,0.352131575345993,0.164109751582146,0.366817891597748,0.171475455164909,0.316222906112671,0.199486449360847,0.316222906112671,0.15810514986515,0.501873672008514,0.159022301435471,0.506430864334106,0.164430290460587,0.518911123275757,0.162225335836411,0.543118178844452,0.199486449360847,0.542444050312042,0.19858618080616,0.543118178844452,0.158280909061432,0.345153450965881,0.164073184132576,0.323356717824936,0.159372955560684,0.338083028793335,0.162225335836411,0.287010818719864,0.199486449360847,0.287010818719864,0.165348842740059,0.523277401924133,0.164394408464432,0.527523159980774,0.159057289361954,0.538933753967285,0.171475455164909,0.562814891338348,0.172283753752708,0.562814891338348,0.165155723690987,0.316196769475937,0.159392103552818,0.29424911737442,0.164059609174728,0.308989137411118,0.171475455164909,0.257798790931702,0.199486449360847,0.257798790931702,0.158113777637482,0.543117523193359,0.159063950181007,0.547299981117249,0.164385765790939,0.558632075786591,0.17127001285553,0.563574016094208,0.158299162983894,0.287010818719864,0.164059579372406,0.265032559633255,0.159392103552818,0.27977254986763,0.162225335836411,0.228817731142044,0.199486449360847,0.228817731142044,0.165334329009056,0.562814891338348,0.163131520152092,0.569668531417847,0.164385810494423,0.566997826099396,0.165155723690987,0.257824927568436,0.159372955560684,0.235938683152199,0.164073184132576,0.250664979219437,0.171475455164909,0.200295552611351,0.199486449360847,0.200295597314835,0.158280953764915,0.228868260979652,0.164109751582146,0.207203835248947,0.159346774220467,0.221890136599541,0.162225335836411,0.172454074025154,0.199486449360847,0.172454074025154,0.165190488100052,0.200367301702499,0.159296154975891,0.179064005613327,0.164146304130554,0.193662256002426,0.171475455164909,0.145507112145424,0.199486449360847, +0.145507112145424,0.158232644200325,0.172543078660965,0.164206996560097,0.151750475168228,0.159251779317856,0.166185796260834,0.162225335836411,0.119659386575222,0.199486449360847,0.119659282267094,0.165248587727547,0.145609200000763,0.159185156226158,0.125485792756081,0.164256393909454,0.139656364917755,0.171475455164909,0.0951048955321312,0.199486449360847,0.0951048955321312,0.158168718218803,0.119770668447018,0.164325222373009,0.100480183959007,0.159133404493332,0.114261783659458,0.162225335836411,0.0720270052552223,0.199486449360847,0.0720270052552223,0.165314823389053,0.0952220633625984,0.159065499901772,0.0769303664565086,0.164377003908157,0.0901821628212929,0.171475455164909,0.0506044700741768,0.199486449360847,0.0506798624992371,0.158103123307228,0.0721476152539253,0.164435237646103,0.055035874247551,0.15901543200016,0.0675902739167213,0.162225335836411,0.0309034883975983,0.197466522455215,0.0309034883975983,0.199486449360847,0.0325513333082199,0.165348783135414,0.0506673753261566,0.159064441919327,0.0350863710045815,0.164389133453369,0.04642453789711,0.171475455164909,0.0112067498266697,0.173320427536964,0.0112067498266697,0.158115893602371,0.0309034883975983,0.164385810494423,0.0153895961120725,0.159064441919327,0.0267206430435181,0.170952841639519,0.00927544198930264,0.165334329009056,0.0112067498266697,0.162021860480309,0.00199017580598593,0.164385810494423,0.00702390447258949,0.37750768661499,0.712034046649933,0.376675188541412,0.71156907081604,0.382660835981369,0.699645340442657,0.383557796478271,0.699982404708862,0.387466579675674,0.684144496917725,0.388399004936218,0.684367656707764,0.390823155641556,0.66574627161026,0.391773343086243,0.665872573852539,0.392545014619827,0.64549446105957,0.393502473831177,0.645535290241241,0.392545014619827,0.624607563018799,0.393502473831177,0.624566793441772,0.390823185443878,0.604355752468109,0.391773283481598,0.604229509830475,0.387466669082642,0.585957586765289,0.388398945331573,0.58573442697525,0.382660955190659,0.570456743240356,0.383557677268982,0.570119798183441, +0.376675456762314,0.558532953262329,0.377507477998734,0.558068335056305,0.425053507089615,0.558536052703857,0.425883442163467,0.558067739009857,0.433227032423019,0.572358012199402,0.432330876588821,0.57269674539566,0.438767164945602,0.589981138706207,0.437834739685059,0.590204298496246,0.442474007606506,0.61014062166214,0.441523790359497,0.610266208648682,0.444333672523499,0.631905615329742,0.443376183509827,0.6319460272789,0.444333732128143,0.654221653938293,0.443376183509827,0.654181122779846,0.442474007606506,0.675986647605896,0.441523730754852,0.67586088180542,0.438767224550247,0.696145951747894,0.437834680080414,0.6959228515625,0.433227121829987,0.713769257068634,0.432330787181854,0.713430345058441,0.425883710384369,0.728059351444244,0.425053387880325,0.727590918540955,0.418087989091873,0.55806839466095,0.418917894363403,0.558536648750305,0.411640554666519,0.572697401046753,0.410744458436966,0.57235860824585,0.406136691570282,0.590204894542694,0.405204355716705,0.5899817943573,0.402447730302811,0.610266864299774,0.401497453451157,0.610141277313232,0.400595247745514,0.631946682929993,0.399637788534164,0.63190621137619,0.400595247745514,0.654181718826294,0.399637758731842,0.654222309589386,0.402447730302811,0.675861537456512,0.401497423648834,0.675987243652344,0.406136751174927,0.695923447608948,0.405204206705093,0.696146607398987,0.411640703678131,0.713431000709534,0.410744279623032,0.713769912719727,0.41891810297966,0.727591574192047,0.418087780475616,0.728060007095337,0.370539873838425,0.71156907081604,0.369707375764847,0.712033987045288,0.363657265901566,0.699982345104218,0.364554286003113,0.699645280838013,0.358816057443619,0.684367597103119,0.359748482704163,0.684144496917725,0.355441749095917,0.665872573852539,0.356391936540604,0.66574627161026,0.35371258854866,0.645535230636597,0.35467004776001,0.64549446105957,0.353712618350983,0.624566793441772,0.354670077562332,0.624607563018799,0.355441778898239,0.60422945022583,0.356391906738281,0.604355752468109,0.358816117048264,0.58573442697525,0.359748423099518, +0.585957586765289,0.363657414913177,0.570119798183441,0.364554107189178,0.570456743240356,0.369707584381104,0.558068335056305,0.370539605617523,0.558533012866974,0.846843659877777,0.842310011386871,0.846843659877777,0.814576148986816,0.858021259307861,0.814576148986816,0.858021259307861,0.842310011386871,0.846843659877777,0.785686433315277,0.858021259307861,0.785686433315277,0.846843659877777,0.75588721036911,0.858021259307861,0.75588721036911,0.846843659877777,0.725432813167572,0.858021259307861,0.725432813167572,0.846843659877777,0.694583117961884,0.858021259307861,0.694583117961884,0.846843659877777,0.663601219654083,0.858021259307861,0.663601219654083,0.846843659877777,0.632751524448395,0.858021259307861,0.632751524448395,0.846843659877777,0.602297127246857,0.858021259307861,0.602297127246857,0.846843659877777,0.572497963905334,0.858021259307861,0.572497963905334,0.846843659877777,0.54360818862915,0.858021259307861,0.54360818862915,0.846843659877777,0.515874326229095,0.858021259307861,0.515874326229095,0.898487150669098,0.905676603317261,0.898487150669098,0.878725528717041,0.909664869308472,0.878725528717041,0.909664869308472,0.905676603317261,0.898487150669098,0.85065096616745,0.909664869308472,0.85065096616745,0.898487150669098,0.931274652481079,0.909664869308472,0.931274652481079,0.898487150669098,0.821692705154419,0.909664869308472,0.821692705154419,0.898487150669098,0.95530104637146,0.909664869308472,0.95530104637146,0.898487150669098,0.792097687721252,0.909664869308472,0.792097687721252,0.899459481239319,0.977543115615845,0.898487150669098,0.976815223693848,0.909664869308472,0.977554500102997,0.898487150669098,0.762118577957153,0.909664869308472,0.762118577957153,0.898522675037384,0.978255152702332,0.897810220718384,0.978016555309296,0.898487150669098,0.732010960578918,0.909664869308472,0.732010960578918,0.898487150669098,0.702031850814819,0.909664869308472,0.702031850814819,0.898487150669098,0.672436952590942,0.909664869308472,0.672436952590942,0.898487150669098,0.643478631973267,0.909664869308472,0.643478631973267, +0.898487150669098,0.61540412902832,0.909664869308472,0.61540412902832,0.898487150669098,0.588452935218811,0.909664869308472,0.588452935218811,0.898487150669098,0.562854945659637,0.909664869308472,0.562854945659637,0.898487150669098,0.538828551769257,0.909664869308472,0.538828551769257,0.898487150669098,0.517314374446869,0.899459481239319,0.516586542129517,0.909664869308472,0.51657509803772,0.897810220718384,0.516112983226776,0.898522675037384,0.51587438583374,0.829530775547028,0.87513655424118,0.829530775547028,0.847402632236481,0.840708434581757,0.847402632236481,0.840708434581757,0.87513655424118,0.829530775547028,0.818512856960297,0.840708434581757,0.818512856960297,0.829530775547028,0.788713693618774,0.840708374977112,0.788713693618774,0.829530775547028,0.758259356021881,0.840708374977112,0.758259356021881,0.829530775547028,0.727409601211548,0.840708434581757,0.727409601211548,0.829530775547028,0.696427643299103,0.840708434581757,0.696427643299103,0.829530775547028,0.66557788848877,0.840708374977112,0.66557788848877,0.829530775547028,0.635123550891876,0.840708374977112,0.635123550891876,0.829530775547028,0.605324447154999,0.840708434581757,0.605324447154999,0.829530775547028,0.57643461227417,0.840708434581757,0.57643461227417,0.829530775547028,0.54870080947876,0.840708434581757,0.54870080947876,0.864156603813171,0.890980660915375,0.864156603813171,0.866406917572021,0.875334203243256,0.866406917572021,0.875334203243256,0.890980660915375,0.864156603813171,0.840808987617493,0.875334203243256,0.840808987617493,0.864156603813171,0.914320588111877,0.875334203243256,0.914320707321167,0.864156603813171,0.814405202865601,0.875334203243256,0.814405202865601,0.864156603813171,0.936227560043335,0.875334203243256,0.936227560043335,0.864156603813171,0.787420809268951,0.875334203243256,0.787420809268951,0.875334203243256,0.942639052867889,0.864156603813171,0.942639052867889,0.864156603813171,0.760086178779602,0.875334203243256,0.760086178779602,0.864156603813171,0.951882064342499,0.875334203243256,0.951882064342499,0.864156603813171, +0.732634544372559,0.875334203243256,0.732634544372559,0.864156603813171,0.962277472019196,0.875334203243256,0.962277472019196,0.864156603813171,0.705299913883209,0.875334203243256,0.70529979467392,0.864156603813171,0.971039891242981,0.875334203243256,0.971039891242981,0.864156603813171,0.678315579891205,0.875334203243256,0.678315579891205,0.875334203243256,0.976846396923065,0.864156603813171,0.976846396923065,0.864156603813171,0.651911795139313,0.875334203243256,0.651911795139313,0.864156603813171,0.626313745975494,0.875334203243256,0.626313745975494,0.864156603813171,0.601739943027496,0.875334203243256,0.601739943027496,0.864156603813171,0.578400075435638,0.875334203243256,0.578400075435638,0.864156603813171,0.55649322271347,0.875334203243256,0.55649322271347,0.864156603813171,0.550081610679626,0.875334203243256,0.550081610679626,0.864156603813171,0.540838718414307,0.875334203243256,0.540838718414307,0.864156603813171,0.53044319152832,0.875334203243256,0.53044319152832,0.864156603813171,0.521680772304535,0.875334203243256,0.521680772304535,0.864156603813171,0.51587438583374,0.875334203243256,0.51587438583374,0.891548752784729,0.955650806427002,0.881579279899597,0.955656945705414,0.881614089012146,0.948579370975494,0.891509532928467,0.948575556278229,0.891588807106018,0.962376713752747,0.881544649600983,0.962385177612305,0.881647646427155,0.941369831562042,0.891470789909363,0.941368162631989,0.891674995422363,0.976842403411865,0.881469428539276,0.976853728294373,0.881677806377411,0.934262454509735,0.891436278820038,0.934263050556183,0.881735503673553,0.918803036212921,0.891369342803955,0.918806254863739,0.881787240505219,0.90224015712738,0.891308903694153,0.902244806289673,0.881833136081696,0.884773015975952,0.891255080699921,0.884778261184692,0.88187301158905,0.866548299789429,0.891207933425903,0.866555452346802,0.881906986236572,0.84766411781311,0.89116770029068,0.84767073392868,0.881934881210327,0.828199148178101,0.891134560108185,0.828203618526459,0.881956815719604,0.808232724666595,0.891108512878418,0.808236539363861, +0.88197249174118,0.787857711315155,0.891089797019959,0.78786027431488,0.881982207298279,0.767188429832459,0.891078293323517,0.767189860343933,0.881985425949097,0.746363937854767,0.891074359416962,0.746363937854767,0.881982207298279,0.725539445877075,0.891078293323517,0.725538074970245,0.88197249174118,0.704870164394379,0.891089797019959,0.704867660999298,0.881956815719604,0.684495031833649,0.891108453273773,0.684491395950317,0.881934881210327,0.664528727531433,0.891134560108185,0.664524257183075,0.881906986236572,0.645063817501068,0.891167759895325,0.645057260990143,0.881873071193695,0.62617963552475,0.891207933425903,0.626172542572021,0.881833136081696,0.607954919338226,0.891255080699921,0.607949733734131,0.881787359714508,0.590487897396088,0.891308963298798,0.590483248233795,0.881735503673553,0.573924839496613,0.891369462013245,0.573921740055084,0.881677806377411,0.558465480804443,0.891436278820038,0.558465003967285,0.881647646427155,0.551358282566071,0.891471087932587,0.551359891891479,0.881614089012146,0.544148683547974,0.891509234905243,0.544152438640594,0.881579279899597,0.537071049213409,0.891549348831177,0.537077248096466,0.881544649600983,0.530342876911163,0.891589522361755,0.530347049236298,0.881469428539276,0.515874326229095,0.891674995422363,0.515885770320892,0.980637073516846,0.457077026367188,0.970933794975281,0.457160383462906,0.970970094203949,0.44769874215126,0.980601727962494,0.447655498981476,0.980673253536224,0.466007560491562,0.970896601676941,0.466133564710617,0.971005201339722,0.438378095626831,0.980567872524261,0.438370376825333,0.980751037597656,0.483367592096329,0.970816195011139,0.483538955450058,0.971038162708282,0.429172396659851,0.980536043643951,0.429199904203415,0.971100330352783,0.41100013256073,0.980476379394531,0.411072969436646,0.971155941486359,0.393021076917648,0.980422675609589,0.393117487430573,0.971205294132233,0.374975651502609,0.980374932289124,0.375081479549408,0.971248388290405,0.356715530157089,0.980333268642426,0.356820225715637,0.971285164356232,0.338185697793961,0.980297923088074, +0.338285624980927,0.971315443515778,0.319401741027832,0.980268716812134,0.319489866495132,0.971339166164398,0.300408244132996,0.98024582862854,0.300479829311371,0.971356332302094,0.281266152858734,0.980229437351227,0.281316816806793,0.971366703510284,0.262035250663757,0.980219304561615,0.262061476707459,0.971370339393616,0.242764472961426,0.980215787887573,0.242764472961426,0.971366703510284,0.223493844270706,0.980219304561615,0.223467454314232,0.971356332302094,0.204262793064117,0.980229258537292,0.204212129116058,0.971339166164398,0.185120701789856,0.98024582862854,0.185049131512642,0.971315443515778,0.166127219796181,0.980268716812134,0.16603909432888,0.971285164356232,0.147343248128891,0.980297923088074,0.147243469953537,0.971248388290405,0.128813475370407,0.980333268642426,0.12870879471302,0.971205294132233,0.110553354024887,0.980374932289124,0.11044754832983,0.971155762672424,0.0925079360604286,0.980422675609589,0.092411532998085,0.971100091934204,0.0745290294289589,0.980476379394531,0.0744561329483986,0.971037745475769,0.0563567541539669,0.980536043643951,0.0563291795551777,0.971004784107208,0.0471510551869869,0.980567872524261,0.047158770263195,0.970969676971436,0.0378304272890091,0.980601727962494,0.0378736481070518,0.970933079719543,0.0283686965703964,0.980637073516846,0.028452193364501,0.970896005630493,0.019400293007493,0.980673253536224,0.0195216778665781,0.970816195011139,0.00199021096341312,0.980751037597656,0.00216155219823122 + } + UVIndex: *4196 { + a: 284,285,286,328,329,330,331,287,284,286,288,289,339,338,342,343,290,287,289,291,347,346,348,349,292,290,291,293,353,352,354,355,294,292,293,295,359,358,360,361,296,294,295,297,365,364,366,367,298,296,297,299,371,370,372,373,300,298,299,301,377,376,378,379,302,300,301,303,383,382,384,385,304,302,303,305,389,388,390,391,306,304,305,307,395,394,396,397,308,306,307,309,401,400,402,403,310,308,309,311,407,406,408,409,312,310,311,313,413,412,414,415,314,312,313,315,419,418,420,421,316,314,315,317,425,424,426,427,318,316,317,319,431,430,432,433,320,318,319,321,437,436,438,439,322,320,321,323,443,442,444,445,324,322,323,325,449,448,450,451,455,454,456,457,461,460,462,463,467,466,468,469,1143,1162,1163,1153,1288,1269,1280,1289,1134,1151,1152,1143,1278,1259,1269,1279,1126,1141,1142,1134,1267,1249,1259,1268,1120,1132,1133,1126,1257,1242,1249,1258,1113,1119,1125,1120,1244,1233,1242,1248,1110,1111,1112,1113,1231,1232,1233,1234,1122,1124,1118,1110,1245,1240,1232,1239,1128,1136,1137,1122,1252,1246,1240,1253,1138,1146,1147,1128,1262,1254,1246,1263,1148,1157,1158,1138,1273,1264,1254,1274,1159,1166,1167,1148,1283,1275,1264,1284,1168,1174,1175,1159,1292,1285,1275,1293,1176,1179,1180,1168,1300,1294,1285,1301,1181,1184,1185,1176,1305,1302,1294,1306,1186,1189,1190,1181,1310,1307,1302,1311,1191,1194,1195,1186,1315,1312,1307,1316,1196,1199,1200,1191,1320,1317,1312,1321,1201,1204,1205,1196,1325,1322,1317,1326,1206,1209,1210,1201,1330,1327,1322,1331,1211,1214,1215,1206,1335,1332,1327,1336,1216,1220,1221,1211,1332,1337,1338,1339,1333,1222,1225,1226,1216,1337,1343,1344,1338,336,332,333,337,332,329,328,333,330,334,335,331,334,338,339,335,342,344,345,343,344,346,347,345,348,350,351,349,350,352,353,351,354,356,357,355,356,358,359,357,360,362,363,361,362,364,365,363,366,368,369,367,368,370,371,369,372,374,375,373,374,376,377,375,378,380,381,379,380,382,383,381,384,386,387,385,386,388,389,387,390,392,393,391,392,394,395,393,396,398,399,397,398,400,401,399,402,404,405,403,404,406,407,405,408,410,411,409,410,412,413,411,414, +416,417,415,416,418,419,417,420,422,423,421,422,424,425,423,426,428,429,427,428,430,431,429,432,434,435,433,434,436,437,435,438,440,441,439,440,442,443,441,444,446,447,445,446,448,449,447,450,452,453,451,452,454,455,453,456,458,459,457,458,460,461,459,462,464,465,463,464,466,467,465,1153,1163,1170,1153,1170,1172,1280,1298,1296,1280,1296,1289,1143,1152,1161,1143,1161,1162,1269,1288,1287,1269,1287,1279,1134,1142,1150,1134,1150,1151,1259,1278,1277,1259,1277,1268,1126,1133,1140,1126,1140,1141,1249,1267,1266,1249,1266,1258,1120,1125,1131,1120,1131,1132,1242,1257,1256,1242,1256,1248,1113,1112,1115,1113,1115,1119,1233,1244,1238,1233,1238,1234,1110,1118,1114,1110,1114,1111,1232,1231,1235,1232,1235,1239,1122,1137,1130,1122,1130,1124,1240,1245,1251,1240,1251,1253,1128,1147,1145,1128,1145,1136,1246,1252,1261,1246,1261,1263,1138,1158,1156,1138,1156,1146,1254,1262,1272,1254,1272,1274,1148,1167,1165,1148,1165,1157,1264,1273,1282,1264,1282,1284,1159,1175,1173,1159,1173,1166,1275,1283,1291,1275,1291,1293,1168,1180,1178,1168,1178,1174,1285,1292,1299,1285,1299,1301,1176,1185,1183,1176,1183,1179,1294,1300,1304,1294,1304,1306,1181,1190,1188,1181,1188,1184,1302,1305,1309,1302,1309,1311,1186,1195,1193,1186,1193,1189,1307,1310,1314,1307,1314,1316,1191,1200,1198,1191,1198,1194,1312,1315,1319,1312,1319,1321,1196,1205,1203,1196,1203,1199,1317,1320,1324,1317,1324,1326,1201,1210,1208,1201,1208,1204,1322,1325,1329,1322,1329,1331,1206,1215,1213,1206,1213,1209,1327,1330,1334,1327,1334,1336,1211,1221,1219,1211,1219,1214,1332,1335,1340,1332,1340,1342,1216,1226,1224,1216,1224,1220,1337,1341,1345,1337,1345,1347,1222,1230,1228,1222,1228,1225,1343,1346,1349,1343,1349,1351,1327,1332,1333,1328,1341,1337,1332,1342,1346,1343,1337,1347,1322,1327,1328,1323,1317,1322,1323,1318,1312,1317,1318,1313,1307,1312,1313,1308,1302,1307,1308,1303,1294,1302,1303,1295,1285,1294,1295,1286,1275,1285,1286,1276,1264,1275,1276,1265,1254,1264,1265,1255,1246,1254,1255,1247,1240,1246,1247,1241,1232,1240,1241,1236,1233,1232,1236,1237,1242,1233,1237,1243,1249,1242,1243,1250,1259, +1249,1250,1260,1269,1259,1260,1270,1271,1280,1269,1271,1281,1153,1164,1154,1143,1153,1154,1155,1144,1134,1143,1144,1135,1126,1134,1135,1127,1120,1126,1127,1121,1113,1120,1121,1116,1110,1113,1116,1117,1122,1110,1117,1123,1128,1122,1123,1129,1138,1128,1129,1139,1148,1138,1139,1149,1159,1148,1149,1160,1168,1159,1160,1169,1176,1168,1169,1177,1181,1176,1177,1182,1186,1181,1182,1187,1191,1186,1187,1192,1196,1191,1192,1197,1201,1196,1197,1202,1206,1201,1202,1207,1211,1206,1207,1212,1216,1211,1212,1217,1218,1222,1216,1218,1223,326,327,324,325,1227,1229,1230,1222,1348,1344,1343,1350,1348,1343,1351,1223,1227,1222,340,341,336,337,1171,1164,1153,1172,1290,1297,1298,1280,1281,1290,1280,695,700,708,702,700,695,694,701,701,694,699,707,707,699,706,714,714,706,713,721,721,713,720,728,728,720,727,733,733,727,732,737,737,732,736,741,741,736,740,745,745,740,744,749,749,744,748,753,753,748,752,757,757,752,756,761,761,756,760,765,765,760,764,769,769,764,768,773,773,768,772,777,777,772,776,780,168,169,162,161,470,474,475,471,471,475,482,476,476,482,491,483,483,491,501,492,492,501,514,502,502,514,523,515,515,523,531,524,524,531,539,532,532,539,547,540,540,547,555,548,548,555,563,556,556,563,571,564,564,571,579,572,572,579,587,580,580,587,595,588,588,595,603,596,596,603,611,604,26,27,20,19,473,486,487,488,480,479,472,477,485,485,477,484,494,494,484,493,504,504,493,503,517,517,503,516,526,526,516,525,534,534,525,533,542,542,533,541,550,550,541,549,558,558,549,557,566,566,557,565,574,574,565,573,582,582,573,581,590,590,581,589,598,598,589,597,606,606,597,605,614,244,245,238,237,692,696,697,693,693,697,704,698,698,704,711,705,705,711,718,712,712,718,725,719,719,725,730,726,726,730,734,731,731,734,738,735,735,738,742,739,739,742,746,743,743,746,750,747,747,750,754,751,751,754,758,755,755,758,762,759,759,762,766,763,763,766,770,767,767,770,774,771,102,103,96,95,208,209,206,205,941,930,921,926,926,921,920,927,927,920,925,940,940,925,939,953,953,939,952,961,961,952,960,969,969,960,968,977,977,968,976,983,983,976,982,988,988,982,987,993,993,987,992, +998,998,992,997,1003,1003,997,1002,1008,1008,1002,1007,1013,1013,1007,1012,1018,1018,1012,1017,1024,1024,1017,1023,1033,67,68,65,64,793,788,804,805,788,793,794,789,789,794,806,795,795,806,818,807,807,818,826,819,819,826,834,827,827,834,839,835,835,839,844,840,840,844,849,845,845,849,854,850,850,854,859,855,855,859,864,860,860,864,869,865,865,869,874,870,870,874,879,875,875,879,884,880,880,884,889,885,885,889,895,890,890,895,904,896,19,20,13,12,780,776,779,783,95,96,89,88,12,13,5,4,783,779,782,786,88,89,81,80,631,620,629,640,4,5,1,0,786,782,785,787,80,81,77,76,640,629,639,651,0,1,2,3,1352,1353,1354,1355,76,77,78,79,1372,1373,1374,1375,3,2,8,9,1355,1354,1356,1357,79,78,84,85,1375,1374,1376,1377,9,8,16,17,1357,1356,1358,1359,85,84,92,93,1377,1376,1378,1379,17,16,23,24,1359,1358,1360,1361,93,92,99,100,1379,1378,1380,1381,24,23,30,31,1361,1360,1362,1363,100,99,107,108,1381,1380,1382,1383,31,30,35,36,1363,1362,1364,1365,108,107,113,114,1383,1382,1384,1385,36,35,41,42,1365,1364,1366,1367,114,113,117,118,1385,1384,1386,1387,42,41,47,48,1367,1366,1368,1369,118,117,121,122,1387,1386,1388,1389,48,47,53,54,1369,1368,1370,1371,122,121,125,126,1389,1388,1390,1391,54,53,57,58,917,915,912,914,126,125,129,130,1047,1045,1042,1044,58,57,61,62,914,912,905,911,130,129,133,134,1044,1042,1039,1041,62,61,64,65,911,905,896,904,134,133,136,137,1041,1039,1031,1038,137,136,139,140,1038,1031,1022,1030,892,898,907,902,1030,1021,1026,1035,161,162,155,154,480,488,497,498,489,237,238,231,230,702,708,715,709,154,155,147,146,489,498,511,499,230,231,223,222,709,715,722,716,146,147,143,142,499,511,522,512,222,223,219,218,716,722,729,723,142,143,144,145,1392,1393,1394,1395,218,219,220,221,1412,1413,1414,1415,145,144,150,151,1395,1394,1396,1397,221,220,226,227,1415,1414,1416,1417,151,150,158,159,1397,1396,1398,1399,227,226,234,235,1417,1416,1418,1419,159,158,165,166,1399,1398,1400,1401,235,234,241,242,1419,1418,1420,1421,166,165,172,173,1401,1400,1402,1403,242,241,249,250,1421,1420,1422,1423,173,172,177,178,1403,1402,1404,1405,250,249,255,256,1423,1422, +1424,1425,178,177,183,184,1405,1404,1406,1407,256,255,259,260,1425,1424,1426,1427,184,183,189,190,1407,1406,1408,1409,260,259,263,264,1427,1426,1428,1429,190,189,195,196,1409,1408,1410,1411,264,263,267,268,1429,1428,1430,1431,196,195,199,200,972,978,970,964,268,267,271,272,832,833,825,824,200,199,202,203,964,970,962,956,272,271,274,275,824,825,817,816,203,202,205,206,956,962,954,944,275,274,277,278,816,817,805,804,944,954,942,928,278,277,280,281,929,942,948,934,802,791,799,812,812,799,798,810,934,948,945,931,800,813,814,801,813,800,809,822,822,809,821,830,935,922,933,947,922,935,936,923,923,936,949,937,830,821,829,838,937,949,957,950,838,829,837,843,950,957,965,958,843,837,842,848,958,965,973,966,848,842,847,853,966,973,979,974,853,847,852,858,974,979,984,980,858,852,857,863,980,984,989,985,863,857,862,868,985,989,994,990,868,862,867,873,990,994,999,995,873,867,872,878,995,999,1004,1000,878,872,877,883,1000,1004,1009,1005,883,877,882,888,1005,1009,1014,1010,888,882,887,894,1010,1014,1019,1015,894,887,893,903,1015,1019,1025,1020,903,893,901,910,1020,1025,1034,1027,902,907,909,899,910,901,900,908,1035,1026,1029,1037,1027,1034,1036,1028,801,814,811,797,947,933,932,946,810,798,797,811,931,945,946,932,908,900,899,909,1028,1036,1037,1029,175,180,181,168,180,186,187,181,186,192,193,187,1432,1433,1434,1435,1433,1436,1437,1434,1436,1438,1439,1437,1438,1440,1441,1439,1440,1442,1443,1441,1442,1444,1445,1443,1444,1446,1447,1445,1446,1448,1449,1447,1448,1450,1451,1449,1450,1452,1453,1451,1452,1454,1455,1453,50,44,45,51,44,38,39,45,38,33,27,39,470,471,472,473,471,476,477,472,476,483,484,477,483,492,493,484,492,502,503,493,502,515,516,503,515,524,525,516,524,532,533,525,532,540,541,533,540,548,549,541,548,556,557,549,556,564,565,557,564,572,573,565,572,580,581,573,580,588,589,581,588,596,597,589,596,604,605,597,1466,1462,1463,1467,1462,1456,1459,1463,1456,1457,1458,1459,1457,1460,1461,1458,1460,1464,1465,1461,1464,1468,1469,1465,1468,1473,1474,1469,1473,1477,1478,1474,1477,1479,1480,1478,1479,1481,1482,1480,1481,1483,1484,1482,1483, +1485,1486,1484,1485,1487,1488,1486,1487,1489,1490,1488,1489,1491,1492,1490,1491,1493,1494,1495,1492,692,693,694,695,693,698,699,694,698,705,706,699,705,712,713,706,712,719,720,713,719,726,727,720,726,731,732,727,731,735,736,732,735,739,740,736,739,743,744,740,743,747,748,744,747,751,752,748,751,755,756,752,755,759,760,756,759,763,764,760,763,767,768,764,767,771,772,768,209,212,213,211,212,214,215,213,214,216,217,215,1498,1499,1500,1501,1499,1502,1503,1500,1502,1504,1505,1503,1504,1506,1507,1505,1506,1508,1509,1507,1508,1510,1511,1509,1510,1512,1513,1511,1512,1514,1515,1513,1514,1516,1517,1515,1516,1518,1519,1517,1518,1520,1521,1519,74,72,73,75,72,70,71,73,70,67,69,71,788,789,790,791,792,789,795,796,790,795,807,808,796,807,819,820,808,819,827,828,820,827,835,836,828,835,840,841,836,840,845,846,841,845,850,851,846,850,855,856,851,855,860,861,856,860,865,866,861,865,870,871,866,870,875,876,871,875,880,881,876,880,885,886,881,885,890,891,892,886,1536,1537,1532,1533,1532,1528,1529,1533,1528,1522,1525,1529,1522,1523,1524,1525,1523,1526,1527,1524,1526,1530,1531,1527,1530,1534,1535,1531,1534,1538,1539,1535,1538,1542,1543,1539,1542,1546,1547,1543,1546,1550,1551,1547,1550,1554,1555,1551,1554,1556,1557,1555,1556,1558,1559,1557,1558,1560,1561,1559,1560,1562,1563,1561,1562,1564,1565,1563,918,919,920,921,919,924,925,920,924,938,939,925,938,951,952,939,951,959,960,952,959,967,968,960,967,975,976,968,975,981,982,976,981,986,987,982,986,991,992,987,991,996,997,992,996,1001,1002,997,1001,1006,1007,1002,1006,1011,1012,1007,1011,1016,1017,1012,1016,1021,1022,1023,1017,64,66,69,67,896,897,891,890,136,138,141,139,1031,1032,1023,1022,27,33,28,20,772,771,775,776,605,604,612,613,20,28,21,13,776,775,778,779,96,104,105,97,89,613,612,619,620,13,21,14,5,779,778,781,782,89,97,90,81,620,619,628,629,5,14,6,1,782,781,784,785,81,90,82,77,629,628,638,639,1,6,7,2,86,76,79,87,77,82,83,78,10,0,3,11,2,7,15,8,87,79,85,94,78,83,91,84,11,3,9,18,8,15,22,16,94,85,93,101,84,91,98,92,18,9,17,25,16,22,29,23,101,93,100,109,92,98,106,99,25,17,24,32,23,29,34,30,109, +100,108,115,99,106,112,107,32,24,31,37,30,34,40,35,115,108,114,119,107,112,116,113,37,31,36,43,35,40,46,41,119,114,118,123,113,116,120,117,43,36,42,49,41,46,52,47,123,118,122,127,117,120,124,121,49,42,48,55,47,52,56,53,127,122,126,131,121,124,128,125,55,48,54,59,53,56,60,57,915,916,913,912,125,128,132,129,1045,1046,1043,1042,57,60,63,61,912,913,906,905,129,132,135,133,1042,1043,1040,1039,61,63,66,64,905,906,897,896,133,135,138,136,1039,1040,1032,1031,943,944,928,930,282,278,281,283,803,804,788,792,210,206,209,211,470,473,480,481,692,695,702,703,175,168,161,170,481,480,489,490,703,702,709,710,170,161,154,163,490,489,499,500,239,230,222,232,710,709,716,717,163,154,146,156,500,499,512,513,232,222,218,228,717,716,723,724,156,146,142,152,143,148,149,144,228,218,221,229,219,224,225,220,152,142,145,153,144,149,157,150,229,221,227,236,220,225,233,226,153,145,151,160,150,157,164,158,236,227,235,243,226,233,240,234,160,151,159,167,158,164,171,165,243,235,242,251,234,240,248,241,167,159,166,174,165,171,176,172,251,242,250,257,241,248,254,249,174,166,173,179,172,176,182,177,257,250,256,261,249,254,258,255,179,173,178,185,177,182,188,183,261,256,260,265,255,258,262,259,185,178,184,191,183,188,194,189,265,260,264,269,259,262,266,263,191,184,190,197,189,194,198,195,269,264,268,273,263,266,270,267,197,190,196,201,971,972,964,963,273,268,272,276,831,832,824,823,201,196,200,204,963,964,956,955,276,272,275,279,823,824,816,815,204,200,203,207,955,956,944,943,279,275,278,282,815,816,804,803,207,203,206,210,1549,1552,1553,1548,790,796,809,800,919,918,922,923,796,808,821,809,924,919,923,937,808,820,829,821,938,924,937,950,820,828,837,829,951,938,950,958,828,836,842,837,959,951,958,966,836,841,847,842,967,959,966,974,841,846,852,847,975,967,974,980,846,851,857,852,981,975,980,985,851,856,862,857,986,981,985,990,856,861,867,862,991,986,990,995,861,866,872,867,996,991,995,1000,866,871,877,872,1001,996,1000,1005,871,876,882,877,1006,1001,1005,1010,876,881,887,882,1011,1006,1010,1015,881,886,893,887,1016,1011,1015,1020,1570,1572,1573,1571,1548, +1544,1545,1549,1544,1540,1541,1545,1540,1537,1536,1541,1564,1566,1567,1565,1566,1568,1569,1567,1568,1570,1571,1569,797,798,799,791,790,800,801,931,932,933,922,918,929,934,899,900,901,893,886,892,902,1026,1021,1016,1020,1027,1028,1029,928,929,918,921,930,892,891,898,1030,1022,1021,929,928,942,802,792,791,1048,1049,1050,1051,1108,1109,1107,1106,1104,1105,1103,1102,1100,1101,1099,1098,1098,1099,1097,1096,1096,1097,1095,1094,1094,1095,1093,1092,1092,1093,1091,1090,1090,1091,1089,1088,1088,1089,1087,1086,1086,1087,1085,1084,1084,1085,1083,1082,1082,1083,1081,1080,1080,1081,1079,1078,1078,1079,1077,1076,1076,1077,1075,1074,1074,1075,1073,1072,1072,1073,1071,1070,1070,1071,1069,1068,1068,1069,1067,1066,1066,1067,1065,1064,1064,1065,1063,1062,1062,1063,1061,1060,1060,1061,1059,1058,1056,1057,1055,1054,1052,1053,1049,1048,1054,1055,1053,1052,1058,1059,1057,1056,1106,1107,1105,1104,1102,1103,1101,1100,246,247,237,230,239,478,473,472,479,1470,1471,1466,1467,1472,630,622,613,620,631,621,605,613,622,623,505,487,495,506,506,495,510,518,486,507,508,496,496,508,519,509,518,510,521,527,509,519,528,520,527,521,530,535,535,530,538,543,520,528,536,529,529,536,544,537,543,538,546,551,551,546,554,559,537,544,552,545,545,552,560,553,559,554,562,567,553,560,568,561,567,562,570,575,561,568,576,569,575,570,578,583,569,576,584,577,583,578,586,591,577,584,592,585,591,586,594,599,585,592,600,593,599,594,602,607,593,600,608,601,607,602,610,615,601,608,616,609,615,610,618,624,609,616,625,617,624,618,627,634,617,625,635,626,634,627,637,647,626,635,648,636,647,637,650,656,636,648,657,649,656,650,659,664,649,657,665,658,664,659,667,672,658,665,673,666,672,667,675,680,666,673,681,674,680,675,683,688,674,681,689,682,688,683,684,691,682,689,690,685,691,684,676,687,685,690,686,677,687,676,668,679,677,686,678,669,679,668,660,671,669,678,670,661,671,660,652,663,661,670,662,653,663,652,641,655,655,641,632,646,653,662,654,642,642,654,644,633,623,645,646,632,643,621,633,644,632,633,621,623,1633,1632,1634,1635,1695,1694,1696,1697,495,487,486,496,1578,1582,1583, +1579,1644,1645,1641,1640,510,509,520,521,1574,1575,1576,1577,1636,1637,1638,1639,530,529,537,538,1581,1580,1584,1585,1643,1642,1646,1647,538,537,545,546,1585,1584,1586,1587,1647,1646,1648,1649,546,545,553,554,1587,1586,1588,1589,1649,1648,1650,1651,554,553,561,562,1589,1588,1590,1591,1651,1650,1652,1653,562,561,569,570,1591,1590,1592,1593,1653,1652,1654,1655,570,569,577,578,1593,1592,1594,1595,1655,1654,1656,1657,578,577,585,586,1595,1594,1596,1597,1657,1656,1658,1659,586,585,593,594,1597,1596,1598,1599,1659,1658,1660,1661,594,593,601,602,1599,1598,1600,1601,1661,1660,1662,1663,602,601,609,610,1601,1600,1602,1603,1663,1662,1664,1665,610,609,617,618,1603,1602,1604,1605,1665,1664,1666,1667,618,617,626,627,1605,1604,1606,1607,1667,1666,1668,1669,627,626,636,637,1607,1606,1608,1609,1669,1668,1670,1671,637,636,649,650,1609,1608,1610,1611,1671,1670,1672,1673,650,649,658,659,1611,1610,1612,1613,1673,1672,1674,1675,659,658,666,667,1613,1612,1614,1615,1675,1674,1676,1677,667,666,674,675,1615,1614,1616,1617,1677,1676,1678,1679,675,674,682,683,1617,1616,1618,1619,1679,1678,1680,1681,683,682,685,684,1619,1618,1620,1621,1681,1680,1682,1683,684,685,677,676,1621,1620,1622,1623,1683,1682,1684,1685,676,677,669,668,1623,1622,1624,1625,1685,1684,1686,1687,660,661,653,652,1627,1626,1628,1629,1689,1688,1690,1691,641,642,633,632,1631,1630,1632,1633,1693,1692,1694,1695,652,653,642,641,1629,1628,1630,1631,1691,1690,1692,1693,668,669,661,660,1625,1624,1626,1627,1687,1686,1688,1689,495,496,509,510,1578,1579,1575,1574,1640,1641,1637,1636,521,520,529,530,1577,1576,1580,1581,1639,1638,1642,1643,247,246,252,253,1475,1476,1471,1470,110,111,105,104,1494,1493,1496,1497 + } + } + LayerElementMaterial: 0 { + Version: 101 + Name: "" + MappingInformationType: "AllSame" + ReferenceInformationType: "IndexToDirect" + Materials: *1 { + a: 0 + } + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 0 + } + } + } + Model: 363536144, "Model::HiFi_Xylophone1", "Null" { + Version: 232 + Properties70: { + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 363538464, "Model::Frame", "Null" { + Version: 232 + Properties70: { + P: "RotationPivot", "Vector3D", "Vector", "",3.814697265625e-006,41.661837392844,-14.5002459569288 + P: "ScalingPivot", "Vector3D", "Vector", "",3.814697265625e-006,41.661837392844,-14.5002459569288 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "currentUVSet", "KString", "", "U", "map1" + } + Shading: Y + Culling: "CullingOff" + } + Model: 363550064, "Model::Wave", "Null" { + Version: 232 + Properties70: { + P: "RotationPivot", "Vector3D", "Vector", "",-4.39795767187518e-015,84.4647528022276,4.56259961274829 + P: "ScalingPivot", "Vector3D", "Vector", "",-4.39795767187518e-015,84.4647528022276,4.56259961274829 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "currentUVSet", "KString", "", "U", "map1" + } + Shading: Y + Culling: "CullingOff" + } + Model: 363517584, "Model::transform2", "Null" { + Version: 232 + Properties70: { + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Visibility", "Visibility", "", "A",0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 363503664, "Model::transform1", "Null" { + Version: 232 + Properties70: { + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "Visibility", "Visibility", "", "A",0 + } + Shading: Y + Culling: "CullingOff" + } + Model: 363501344, "Model::Wave", "Mesh" { + Version: 232 + Properties70: { + P: "RotationPivot", "Vector3D", "Vector", "",1.1444091796875e-005,41.6618365049362,-25.8935875892639 + P: "ScalingPivot", "Vector3D", "Vector", "",1.1444091796875e-005,41.6618365049362,-25.8935875892639 + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + P: "currentUVSet", "KString", "", "U", "map1" + } + Shading: T + Culling: "CullingOff" + } + Material: 1611742192, "Material::Steel", "" { + Version: 102 + ShadingModel: "unknown" + MultiLayer: 0 + Properties70: { + P: "Maya", "Compound", "", "" + P: "Maya|TypeId", "int", "Integer", "",1166017 + P: "Maya|TEX_global_diffuse_cube", "Vector3D", "Vector", "",0,0,0 + P: "Maya|TEX_global_specular_cube", "Vector3D", "Vector", "",0,0,0 + P: "Maya|TEX_brdf_lut", "Vector3D", "Vector", "",0,0,0 + P: "Maya|use_normal_map", "float", "", "",1 + P: "Maya|uv_offset", "Vector2D", "Vector2", "",0,0 + P: "Maya|uv_scale", "Vector2D", "Vector2", "",1,1 + P: "Maya|TEX_normal_map", "Vector3D", "Vector", "",0,0,0 + P: "Maya|use_color_map", "float", "", "",1 + P: "Maya|TEX_color_map", "Vector3D", "Vector", "",0,0,0 + P: "Maya|base_color", "Vector3D", "Vector", "",1,1,1 + P: "Maya|use_metallic_map", "float", "", "",1 + P: "Maya|TEX_metallic_map", "Vector3D", "Vector", "",0,0,0 + P: "Maya|metallic", "float", "", "",1 + P: "Maya|use_roughness_map", "float", "", "",1 + P: "Maya|TEX_roughness_map", "Vector3D", "Vector", "",0,0,0 + P: "Maya|roughness", "float", "", "",0.5 + P: "Maya|use_emissive_map", "float", "", "",0 + P: "Maya|TEX_emissive_map", "Vector3D", "Vector", "",0,0,0 + P: "Maya|emissive", "Vector3D", "Vector", "",0,0,0 + P: "Maya|emissive_intensity", "float", "", "",0 + P: "Maya|use_ao_map", "float", "", "",1 + P: "Maya|TEX_ao_map", "Vector3D", "Vector", "",0,0,0 + } + } + Video: 1971809008, "Video::file6", "Clip" { + Type: "Clip" + Properties70: { + P: "Path", "KString", "XRefUrl", "", "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_Metallic.png" + } + UseMipMap: 0 + Filename: "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_Metallic.png" + RelativeFilename: "xylophoneFrameWithWave_Steel_Metallic.png" + } + Video: 1971833408, "Video::file7", "Clip" { + Type: "Clip" + Properties70: { + P: "Path", "KString", "XRefUrl", "", "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_Roughness.png" + } + UseMipMap: 0 + Filename: "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_Roughness.png" + RelativeFilename: "xylophoneFrameWithWave_Steel_Roughness.png" + } + Video: 1971825008, "Video::file4", "Clip" { + Type: "Clip" + Properties70: { + P: "Path", "KString", "XRefUrl", "", "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_BaseColor.png" + } + UseMipMap: 0 + Filename: "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_BaseColor.png" + RelativeFilename: "xylophoneFrameWithWave_Steel_BaseColor.png" + } + Video: 1971829008, "Video::file5", "Clip" { + Type: "Clip" + Properties70: { + P: "Path", "KString", "XRefUrl", "", "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_Normal.png" + } + UseMipMap: 0 + Filename: "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_Normal.png" + RelativeFilename: "xylophoneFrameWithWave_Steel_Normal.png" + } + Texture: 1982231296, "Texture::file6", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::file6" + Properties70: { + P: "UseMaterial", "bool", "", "",1 + } + Media: "Video::file6" + FileName: "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_Metallic.png" + RelativeFilename: "xylophoneFrameWithWave_Steel_Metallic.png" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Texture: 1982230816, "Texture::file8", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::file8" + Properties70: { + P: "UseMaterial", "bool", "", "",1 + } + Media: "" + FileName: "" + RelativeFilename: "" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Texture: 1982230336, "Texture::file2", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::file2" + Properties70: { + P: "UseMaterial", "bool", "", "",1 + } + Media: "" + FileName: "" + RelativeFilename: "" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Texture: 1971096816, "Texture::file1", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::file1" + Properties70: { + P: "UseMaterial", "bool", "", "",1 + } + Media: "" + FileName: "" + RelativeFilename: "" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Texture: 1531689904, "Texture::file7", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::file7" + Properties70: { + P: "UseMaterial", "bool", "", "",1 + } + Media: "Video::file7" + FileName: "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_Roughness.png" + RelativeFilename: "xylophoneFrameWithWave_Steel_Roughness.png" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Texture: 1612282368, "Texture::file3", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::file3" + Properties70: { + P: "UseMaterial", "bool", "", "",1 + } + Media: "" + FileName: "" + RelativeFilename: "" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Texture: 1612282848, "Texture::file4", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::file4" + Properties70: { + P: "UseMaterial", "bool", "", "",1 + } + Media: "Video::file4" + FileName: "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_BaseColor.png" + RelativeFilename: "xylophoneFrameWithWave_Steel_BaseColor.png" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Texture: 1612283328, "Texture::file5", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::file5" + Properties70: { + P: "UseMaterial", "bool", "", "",1 + } + Media: "Video::file5" + FileName: "F:/Dropbox/Dropbox/_High Fidelity/xylophone/xylophoneFrameWithWave_Steel_Normal.png" + RelativeFilename: "xylophoneFrameWithWave_Steel_Normal.png" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Implementation: 1981166160, "Implementation::Steel_Implementation", "" { + Version: 100 + Properties70: { + P: "ShaderLanguage", "KString", "", "", "SFX" + P: "ShaderLanguageVersion", "KString", "", "", "28" + P: "RenderAPI", "KString", "", "", "SFX_PBS_SHADER" + P: "RootBindingName", "KString", "", "", "root" + P: "ShaderGraph", "Blob", "", "",32006 { + BinaryData: "U0ZCX1dJTiA9IHsgIC8qClZlcnNpb249MjgKR3JvdXBWZXJzaW9uPS0xLjAKQWR2YW5jZWQ9MApIZWxwSUQ9MApQYXJlbnRNYXRlcmlhbD1wcmVzZXRzL1N0YW5kYXJkCk51bWJlck9mTm9kZXM9MzIKI05UPTIwMTg5IDAKCVBDPTMKCW5hbWU9MSB2PTUwMDAgTWV0YWxsaWNfTWFwX1N3aXRjaAoJcG9zeD0xIHY9MjAwMyAxMDIwLjAKCXBvc3k9MSB2PTIwMDMgMjQwLjAKCWdyb3VwPS0xCglJU0M9NAoJCVNWVD01MDIyIDIwMDMgMSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAyIDEgMCAKCQlTRFY9MS4wCgkJU1ZUPTUwMjIgMjAwMyAzIDAgMSAKCQlTQ1M9cgoJCVNWVD01MDIyIDIwMDMgNCAwIDAgCglPU0M9MQoJCVNWVD01MDIyIDIwMDMgNSAKCQlDQz0xCgkJCUM9MCAwIDUgNSA1IDYgMAoJCQlDUEM9MAojTlQ9MjAxODkgMAoJUEM9MwoJbmFtZT0xIHY9NTAwMCBFbWlzc2l2ZV9NYXBfU3dpdGNoCglwb3N4PTEgdj0yMDAzIDc0MC4wCglwb3N5PTEgdj0yMDAzIDc4MC4wCglncm91cD0tMQoJSVNDPTQKCQlTVlQ9NTAyMiAyMDAzIDEgMCAwIAoJCVNWVD01MDIyIDIwMDMgMiAxIDAgCgkJU0RWPTEuMAoJCVNWVD01MDIyIDMwMDIgMyAwIDEgCgkJU0NTPXJnYgoJCVNWVD01MDIyIDMwMDIgNCAwIDAgCglPU0M9MQoJCVNWVD01MDIyIDMwMDIgNSAKCQlDQz0xCgkJCUM9MSAwIDUgMTAgMCAxIDAKCQkJQ1BDPTAKI05UPTIwMTg5IDAKCVBDPTMKCW5hbWU9MSB2PTUwMDAgQ29sb3JfTWFwX1N3aXRjaAoJcG9zeD0xIHY9MjAwMyAxMDIwLjAKCXBvc3k9MSB2PTIwMDMgLTM0MC4wCglncm91cD0tMQoJSVNDPTQKCQlTVlQ9NTAyMiAyMDAzIDEgMCAwIAoJCVNWVD01MDIyIDIwMDMgMiAxIDAgCgkJU0RWPTEuMAoJCVNWVD01MDIyIDMwMDIgMyAwIDEgCgkJU0NTPXJnYgoJCVNWVD01MDIyIDMwMDIgNCAwIDAgCglPU0M9MQoJCVNWVD01MDIyIDMwMDIgNSAKCQlDQz0xCgkJCUM9MiAwIDUgNSAxIDIgMAoJCQlDUEM9MAojTlQ9MjAxODkgMAoJUEM9MwoJbmFtZT0xIHY9NTAwMCBOb3JtYWxfTWFwX1N3aXRjaAoJcG9zeD0xIHY9MjAwMyAxMDIwLjAKCXBvc3k9MSB2PTIwMDMgLTYwLjAKCWdyb3VwPS0xCglJU0M9NAoJCVNWVD01MDIyIDIwMDMgMSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAyIDEgMCAKCQlTRFY9MS4wCgkJU1ZUPTUwMjIgMzAwMiAzIDAgMCAKCQlTVlQ9NTAyMiAzMDAyIDQgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAyIDUgCgkJQ0M9MQoJCQlDPTMgMCA1IDUgNCA1IDAKCQkJQ1BDPTAKI05UPTIwMTg5IDAKCVBDPTMKCW5hbWU9MSB2PTUwMDAgUm91Z2huZXNzX01hcF9Td2l0Y2gKCXBvc3g9MSB2PTIwMDMgMTAyMC4wCglwb3N5PTEgdj0yMDAzIDU0MC4wCglncm91cD0tMQoJSVNDPTQKCQlTVlQ9NTAyMiAyMDAzIDEgMCAwIAoJCVNWVD01MDIyIDIwMDMgMiAxIDAgCgkJU0RWPTEuMAoJCVNWVD01MDIyIDIwMDMgMyAwIDEgCgkJU0NTPXIKCQlTVlQ9NTAyMiAyMDAzIDQgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAyMDAzIDUgCgkJQ0M9MQoJCQlDPTQgMCA1IDUgNiA3IDAKCQkJQ1BDPTAKI05UPTIwMTc2IDAKCVBDPTQKCXBvc3g9MSB2PTIwMDMgMTM2MC4wCglwb3N5PTEgdj0yMDAzIDI2MC4wCglwcmVzZXRfcGF0aD0xIHY9NTAwMCBwcmVzZXRzL1N0YW5kYXJkCglub3JtYWxzcGFjZT0yIGU9MCB2PTUwMTIgMQoJZ3JvdXA9LTEKCUlTQz0xMwoJCVNWVD01MDIyIDMwMDIgMSAwIDAgCgkJU1ZUPTUwMjIgMzAwMiAyIDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDMgMCAwIAoJCVNWVD01MDIyIDIwMDMgNCAwIDAgCgkJU1ZUPTUwMjIgMzAwMiA1IDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDYgMCAwIAoJCVNWVD01MDIyIDIwMDMgNyAwIDAgCgkJU1ZUPTUwMjIgMzAwMiA4IDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDkgMCAwIAoJCVNWVD01MDIyIDIwMDMgMTAgMCAwIAoJCVNWVD01MDIyIDIwMDMgMTEgMCAwIAoJCVNWVD01MDIyIDIwMDMgMTQgMCAwIAoJCVNWVD01MDIyIDIwMDMgMTUgMCAwIAoJT1NDPTAKI05UPTIwMTg5IDAKCVBDPTMKCW5hbWU9MSB2PTUwMDAgQW9fTWFwX1N3dGljaAoJcG9zeD0xIHY9MjAwMyAxMDIwLjAKCXBvc3k9MSB2PTIwMDMgMTEwMC4wCglncm91cD0tMQoJSVNDPTQKCQlTVlQ9NTAyMiAyMDAzIDEgMCAwIAoJCVNWVD01MDIyIDIwMDMgMiAxIDAgCgkJU0RWPTEuMAoJCVNWVD01MDIyIDIwMDMgMyAwIDEgCgkJU0NTPXIKCQlTVlQ9NTAyMiAyMDAzIDQgMSAwIAoJCVNEVj0xLjAKCU9TQz0xCgkJU1ZUPTUwMjIgMjAwMyA1IAoJCUNDPTEKCQkJQz02IDAgNSA1IDggOSAwCgkJCUNQQz0wCiNOVD0yMDE3OCAwCglQQz0yCglwb3N4PTEgdj0yMDAzIC0yNjAuMAoJcG9zeT0xIHY9MjAwMyA0MjAuMAoJZ3JvdXA9LTEKCUlTQz0wCglPU0M9MQoJCVNWVD01MDIyIDMwMDEgMSAKCQlDQz0xCgkJCUM9NyAwIDEgMjggMSAyIDAKCQkJQ1BDPTAKI05UPTIwMTc3IDAKCVBDPTYKCW5hbWU9MSB2PTUwMDAgcm91Z2huZXNzX21hcAoJcG9zeD0xIHY9MjAwMyA3MDAuMAoJcG9zeT0xIHY9MjAwMyA1NDAuMAoJdGV4dHVyZXBhdGg9MiBlPTEgdj01MDAwIEY6L0Ryb3Bib3gvRHJvcGJveC9fSGlnaCBGaWRlbGl0eS94eWxvcGhvbmUveHlsb3Bob25lRnJhbWVXaXRoV2F2ZV9TdGVlbF9Sb3VnaG5lc3MucG5nCgllbmNvZGluZz0yIGU9MCB2PTUwMTIgMAoJdWlvcmRlcj0yIGU9MCB2PTIwMDIgNAoJZ3JvdXA9LTEKCUlTQz0yCgkJU1ZUPTUw", + "MjIgMzAwMSAxIDAgMCAKCQlTVlQ9NTAyMiAyMDAzIDIgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAzIDMgCgkJQ0M9MQoJCQlDPTggMCAzIDQgMiAzIDAKCQkJQ1BDPTAKI05UPTIwMTc3IDAKCVBDPTQKCW5hbWU9MSB2PTUwMDAgZW1pc3NpdmVfbWFwCglwb3N4PTEgdj0yMDAzIDQyMC4wCglwb3N5PTEgdj0yMDAzIDc4MC4wCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiA1Cglncm91cD0tMQoJSVNDPTIKCQlTVlQ9NTAyMiAzMDAxIDEgMCAwIAoJCVNWVD01MDIyIDIwMDMgMiAwIDAgCglPU0M9MQoJCVNWVD01MDIyIDMwMDMgMyAKCQlDQz0xCgkJCUM9OSAwIDMgMSAyIDMgMAoJCQlDUEM9MAojTlQ9MjAxODYgMAoJUEM9MgoJcG9zeD0xIHY9MjAwMyAxMDIwLjAKCXBvc3k9MSB2PTIwMDMgODQwLjAKCWdyb3VwPS0xCglJU0M9MgoJCVNWVD01MDIyIDMwMDIgMSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAyIDAgMCAKCU9TQz0xCgkJU1ZUPTUwMjIgMzAwMiAzIAoJCUNDPTEKCQkJQz0xMCAwIDMgNSA3IDggMAoJCQlDUEM9MAojTlQ9MjAxODUgMAoJUEM9NwoJbmFtZT0xIHY9NTAwMCB1c2VfY29sb3JfbWFwCglwb3N4PTEgdj0yMDAzIDcwMC4wCglwb3N5PTEgdj0yMDAzIC00MDAuMAoJdHlwZT0yIGU9MCB2PTUwMTIgMAoJZGVmYXVsdHNjYWxhcj0yIGU9MCB2PTIwMDMgMS4wCgl1aXR5cGU9MiBlPTAgdj01MDEyIDEKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDEwCglncm91cD0tMQoJSVNDPTAKCU9TQz0xCgkJU1ZUPTUwMjIgMjAwMyAxIAoJCUNDPTEKCQkJQz0xMSAwIDEgMiAwIDEgMAoJCQlDUEM9MAojTlQ9MjAxNzcgMAoJUEM9NQoJbmFtZT0xIHY9NTAwMCBjb2xvcl9tYXAKCXBvc3g9MSB2PTIwMDMgNzAwLjAKCXBvc3k9MSB2PTIwMDMgLTM0MC4wCgl0ZXh0dXJlcGF0aD0yIGU9MSB2PTUwMDAgRjovRHJvcGJveC9Ecm9wYm94L19IaWdoIEZpZGVsaXR5L3h5bG9waG9uZS94eWxvcGhvbmVGcmFtZVdpdGhXYXZlX1N0ZWVsX0Jhc2VDb2xvci5wbmcKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDEKCWdyb3VwPS0xCglJU0M9MgoJCVNWVD01MDIyIDMwMDEgMSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAyIDAgMCAKCU9TQz0xCgkJU1ZUPTUwMjIgMzAwMyAzIAoJCUNDPTEKCQkJQz0xMiAwIDMgMiAyIDMgMAoJCQlDUEM9MAojTlQ9MjAxODUgMAoJUEM9NwoJbmFtZT0xIHY9NTAwMCBiYXNlX2NvbG9yCglwb3N4PTEgdj0yMDAzIDcwMC4wCglwb3N5PTEgdj0yMDAzIC0yNDAuMAoJdHlwZT0yIGU9MCB2PTUwMTIgMgoJZGVmYXVsdHZlY3RocmVlPTIgZT0wIHY9MzAwMiAxLjAsMS4wLDEuMAoJZGVmYXVsdHZlY3Rvcj0yIGU9MCB2PTMwMDMgMC41LDAuNSwwLjUsMC4wCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAyMAoJZ3JvdXA9LTEKCUlTQz0wCglPU0M9MQoJCVNWVD01MDIyIDMwMDIgMSAKCQlDQz0xCgkJCUM9MTMgMCAxIDIgMyA0IDAKCQkJQ1BDPTAKI05UPTIwMTg1IDAKCVBDPTcKCW5hbWU9MSB2PTUwMDAgdXNlX25vcm1hbF9tYXAKCXBvc3g9MSB2PTIwMDMgNzAwLjAKCXBvc3k9MSB2PTIwMDMgLTEyMC4wCgl0eXBlPTIgZT0wIHY9NTAxMiAwCglkZWZhdWx0c2NhbGFyPTIgZT0wIHY9MjAwMyAxLjAKCXVpdHlwZT0yIGU9MCB2PTUwMTIgMQoJdWlvcmRlcj0yIGU9MCB2PTIwMDIgMTEKCWdyb3VwPS0xCglJU0M9MAoJT1NDPTEKCQlTVlQ9NTAyMiAyMDAzIDEgCgkJQ0M9MQoJCQlDPTE0IDAgMSAzIDAgMSAwCgkJCUNQQz0wCiNOVD0yMDE5NCAwCglQQz0yCglwb3N4PTEgdj0yMDAzIDY4MC4wCglwb3N5PTEgdj0yMDAzIDYwLjAKCWdyb3VwPS0xCglJU0M9MAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAyIDEgCgkJQ0M9MQoJCQlDPTE1IDAgMSAzIDMgNCAwCgkJCUNQQz0wCiNOVD0yMDE5NSAwCglQQz0yCglwb3N4PTEgdj0yMDAzIDc0MC4wCglwb3N5PTEgdj0yMDAzIC02MC4wCglncm91cD0tMQoJSVNDPTEKCQlTVlQ9NTAyMiAzMDAyIDEgMCAxIAoJCVNDUz1yZ2IKCU9TQz0xCgkJU1ZUPTUwMjIgMzAwMiAyIAoJCUNDPTEKCQkJQz0xNiAwIDIgMyAyIDMgMAoJCQlDUEM9MAojTlQ9MjAxNzcgMAoJUEM9NgoJbmFtZT0xIHY9NTAwMCBub3JtYWxfbWFwCglwb3N4PTEgdj0yMDAzIDQ0MC4wCglwb3N5PTEgdj0yMDAzIC02MC4wCgl0ZXh0dXJlcGF0aD0yIGU9MSB2PTUwMDAgRjovRHJvcGJveC9Ecm9wYm94L19IaWdoIEZpZGVsaXR5L3h5bG9waG9uZS94eWxvcGhvbmVGcmFtZVdpdGhXYXZlX1N0ZWVsX05vcm1hbC5wbmcKCWVuY29kaW5nPTIgZT0wIHY9NTAxMiAyCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAyCglncm91cD0tMQoJSVNDPTIKCQlTVlQ9NTAyMiAzMDAxIDEgMCAwIAoJCVNWVD01MDIyIDIwMDMgMiAwIDAgCglPU0M9MQoJCVNWVD01MDIyIDMwMDMgMyAKCQlDQz0xCgkJCUM9MTcgMCAzIDE2IDAgMSAwCgkJCUNQQz0wCiNOVD0yMDE3NyAwCglQQz03CgluYW1lPTEgdj01MDAwIG1ldGFsbGljX21hcAoJcG9zeD0xIHY9MjAwMyA3MDAuMAoJcG9zeT0xIHY9MjAwMyAyNDAuMAoJdGV4dHVyZXBhdGg9MiBlPTEgdj01MDAwIEY6L0Ryb3Bib3gvRHJvcGJveC9fSGlnaCBGaWRlbGl0eS94eWxvcGhvbmUveHlsb3Bob25lRnJhbWVXaXRoV2F2ZV9TdGVlbF9NZXRhbGxpYy5wbmcKCWVuY29kaW5nPTIgZT0wIHY9NTAxMiAwCglmaWx0ZXI9MiBlPTAgdj01MDEyIDEKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDMKCWdyb3VwPS0xCglJU0M9MgoJCVNWVD01MDIy", + "IDMwMDEgMSAwIDAgCgkJU1ZUPTUwMjIgMjAwMyAyIDAgMCAKCU9TQz0xCgkJU1ZUPTUwMjIgMzAwMyAzIAoJCUNDPTEKCQkJQz0xOCAwIDMgMCAyIDMgMAoJCQlDUEM9MAojTlQ9MjAxODUgMAoJUEM9NwoJbmFtZT0xIHY9NTAwMCB1c2VfbWV0YWxsaWNfbWFwCglwb3N4PTEgdj0yMDAzIDcwMC4wCglwb3N5PTEgdj0yMDAzIDE4MC4wCgl0eXBlPTIgZT0wIHY9NTAxMiAwCglkZWZhdWx0c2NhbGFyPTIgZT0wIHY9MjAwMyAxLjAKCXVpdHlwZT0yIGU9MCB2PTUwMTIgMQoJdWlvcmRlcj0yIGU9MCB2PTIwMDIgMTIKCWdyb3VwPS0xCglJU0M9MAoJT1NDPTEKCQlTVlQ9NTAyMiAyMDAzIDEgCgkJQ0M9MQoJCQlDPTE5IDAgMSAwIDAgMSAwCgkJCUNQQz0wCiNOVD0yMDE4NSAwCglQQz02CgluYW1lPTEgdj01MDAwIG1ldGFsbGljCglwb3N4PTEgdj0yMDAzIDcwMC4wCglwb3N5PTEgdj0yMDAzIDM0MC4wCgl0eXBlPTIgZT0wIHY9NTAxMiAwCglkZWZhdWx0c2NhbGFyPTIgZT0wIHY9MjAwMyAxLjAKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDIxCglncm91cD0tMQoJSVNDPTAKCU9TQz0xCgkJU1ZUPTUwMjIgMjAwMyAxIAoJCUNDPTEKCQkJQz0yMCAwIDEgMCAzIDQgMAoJCQlDUEM9MAojTlQ9MjAxODUgMAoJUEM9NwoJbmFtZT0xIHY9NTAwMCB1c2Vfcm91Z2huZXNzX21hcAoJcG9zeD0xIHY9MjAwMyA3MDAuMAoJcG9zeT0xIHY9MjAwMyA0ODAuMAoJdHlwZT0yIGU9MCB2PTUwMTIgMAoJZGVmYXVsdHNjYWxhcj0yIGU9MCB2PTIwMDMgMS4wCgl1aXR5cGU9MiBlPTAgdj01MDEyIDEKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDEzCglncm91cD0tMQoJSVNDPTAKCU9TQz0xCgkJU1ZUPTUwMjIgMjAwMyAxIAoJCUNDPTEKCQkJQz0yMSAwIDEgNCAwIDEgMAoJCQlDUEM9MAojTlQ9MjAxODUgMAoJUEM9NgoJbmFtZT0xIHY9NTAwMCByb3VnaG5lc3MKCXBvc3g9MSB2PTIwMDMgNzAwLjAKCXBvc3k9MSB2PTIwMDMgNjQwLjAKCXR5cGU9MiBlPTAgdj01MDEyIDAKCWRlZmF1bHRzY2FsYXI9MiBlPTAgdj0yMDAzIDAuNQoJdWlvcmRlcj0yIGU9MCB2PTIwMDIgMjIKCWdyb3VwPS0xCglJU0M9MAoJT1NDPTEKCQlTVlQ9NTAyMiAyMDAzIDEgCgkJQ0M9MQoJCQlDPTIyIDAgMSA0IDMgNCAwCgkJCUNQQz0wCiNOVD0yMDE4NSAwCglQQz01CgluYW1lPTEgdj01MDAwIGVtaXNzaXZlCglwb3N4PTEgdj0yMDAzIDQyMC4wCglwb3N5PTEgdj0yMDAzIDg4MC4wCgl0eXBlPTIgZT0wIHY9NTAxMiAyCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAyMwoJZ3JvdXA9LTEKCUlTQz0wCglPU0M9MQoJCVNWVD01MDIyIDMwMDIgMSAKCQlDQz0xCgkJCUM9MjMgMCAxIDEgMyA0IDAKCQkJQ1BDPTAKI05UPTIwMTg1IDAKCVBDPTYKCW5hbWU9MSB2PTUwMDAgdXNlX2VtaXNzaXZlX21hcAoJcG9zeD0xIHY9MjAwMyA0MjAuMAoJcG9zeT0xIHY9MjAwMyA3MjAuMAoJdHlwZT0yIGU9MCB2PTUwMTIgMAoJdWl0eXBlPTIgZT0wIHY9NTAxMiAxCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAxNAoJZ3JvdXA9LTEKCUlTQz0wCglPU0M9MQoJCVNWVD01MDIyIDIwMDMgMSAKCQlDQz0xCgkJCUM9MjQgMCAxIDEgMCAxIDAKCQkJQ1BDPTAKI05UPTIwMTg1IDAKCVBDPTcKCW5hbWU9MSB2PTUwMDAgdXNlX2FvX21hcAoJcG9zeD0xIHY9MjAwMyA3MDAuMAoJcG9zeT0xIHY9MjAwMyAxMTAwLjAKCXR5cGU9MiBlPTAgdj01MDEyIDAKCWRlZmF1bHRzY2FsYXI9MiBlPTAgdj0yMDAzIDEuMAoJdWl0eXBlPTIgZT0wIHY9NTAxMiAxCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiAxNQoJZ3JvdXA9LTEKCUlTQz0wCglPU0M9MQoJCVNWVD01MDIyIDIwMDMgMSAKCQlDQz0xCgkJCUM9MjUgMCAxIDYgMCAxIDAKCQkJQ1BDPTAKI05UPTIwMTc3IDAKCVBDPTcKCW5hbWU9MSB2PTUwMDAgYW9fbWFwCglwb3N4PTEgdj0yMDAzIDcwMC4wCglwb3N5PTEgdj0yMDAzIDExNjAuMAoJdGV4dHVyZXBhdGg9MiBlPTEgdj01MDAwIEY6L0Ryb3Bib3gvRHJvcGJveC9fSGlnaCBGaWRlbGl0eS94eWxvcGhvbmUvCgllbmNvZGluZz0yIGU9MCB2PTUwMTIgMAoJZmlsdGVyPTIgZT0wIHY9NTAxMiAxCgl1aW9yZGVyPTIgZT0wIHY9MjAwMiA2Cglncm91cD0tMQoJSVNDPTIKCQlTVlQ9NTAyMiAzMDAxIDEgMCAwIAoJCVNWVD01MDIyIDIwMDMgMiAwIDAgCglPU0M9MQoJCVNWVD01MDIyIDMwMDMgMyAKCQlDQz0xCgkJCUM9MjYgMCAzIDYgMiAzIDAKCQkJQ1BDPTAKI05UPTIwMTg1IDAKCVBDPTYKCW5hbWU9MSB2PTUwMDAgZW1pc3NpdmVfaW50ZW5zaXR5Cglwb3N4PTEgdj0yMDAzIDc0MC4wCglwb3N5PTEgdj0yMDAzIDkyMC4wCgl0eXBlPTIgZT0wIHY9NTAxMiAwCgltYXhyYW5nZT0yIGU9MCB2PTIwMDMgMTAuMAoJdWlvcmRlcj0yIGU9MCB2PTIwMDIgNTMKCWdyb3VwPS0xCglJU0M9MAoJT1NDPTEKCQlTVlQ9NTAyMiAyMDAzIDEgCgkJQ0M9MQoJCQlDPTI3IDAgMSAxMCAxIDIgMAoJCQlDUEM9MAojTlQ9MjAxODYgMAoJUEM9MgoJcG9zeD0xIHY9MjAwMyAtNjAuMAoJcG9zeT0xIHY9MjAwMyA0MDAuMAoJZ3JvdXA9LTEKCUlTQz0yCgkJU1ZUPTUwMjIgMzAwMSAxIDAgMCAKCQlTVlQ9NTAyMiAzMDAxIDIgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAxIDMgCgkJQ0M9MQoJCQlDPTI4IDAgMyAyOSAxIDIgMAoJCQlDUEM9MAojTlQ9MjAxODcgMAoJUEM9MgoJcG9zeD0xIHY9MjAwMyAxMjAuMAoJcG9zeT0xIHY9MjAwMyA0MDAuMAoJ", + "Z3JvdXA9LTEKCUlTQz0yCgkJU1ZUPTUwMjIgMzAwMSAxIDAgMCAKCQlTVlQ9NTAyMiAzMDAxIDIgMCAwIAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAxIDMgCgkJQ0M9NgoJCQlDPTI5IDAgMyAxMiAwIDEgMAoJCQlDUEM9MAoJCQlDPTI5IDAgMyAxNyAwIDEgMAoJCQlDUEM9MAoJCQlDPTI5IDAgMyAxOCAwIDEgMAoJCQlDUEM9MAoJCQlDPTI5IDAgMyA4IDAgMSAwCgkJCUNQQz0wCgkJCUM9MjkgMCAzIDkgMCAxIDAKCQkJQ1BDPTAKCQkJQz0yOSAwIDMgMjYgMCAxIDAKCQkJQ1BDPTAKI05UPTIwMTg1IDAKCVBDPTcKCW5hbWU9MSB2PTUwMDAgdXZfb2Zmc2V0Cglwb3N4PTEgdj0yMDAzIC02MC4wCglwb3N5PTEgdj0yMDAzIDM0MC4wCgl0eXBlPTIgZT0wIHY9NTAxMiAxCgltaW5yYW5nZT0yIGU9MCB2PTIwMDMgLTFlKzAwOC4wCgltYXhyYW5nZT0yIGU9MCB2PTIwMDMgMWUrMDA4LjAKCXVpb3JkZXI9MiBlPTAgdj0yMDAyIDYwCglncm91cD0tMQoJSVNDPTAKCU9TQz0xCgkJU1ZUPTUwMjIgMzAwMSAxIAoJCUNDPTEKCQkJQz0zMCAwIDEgMjkgMCAxIDAKCQkJQ1BDPTAKI05UPTIwMTg1IDAKCVBDPTkKCW5hbWU9MSB2PTUwMDAgdXZfc2NhbGUKCXBvc3g9MSB2PTIwMDMgLTI0MC4wCglwb3N5PTEgdj0yMDAzIDM0MC4wCgl0eXBlPTIgZT0wIHY9NTAxMiAxCglkZWZhdWx0dmVjdHdvPTIgZT0wIHY9MzAwMSAxLjAsMS4wCglkZWZhdWx0dmVjdG9yPTIgZT0wIHY9MzAwMyAxLjAsMS4wLDAuMCwwLjAKCW1pbnJhbmdlPTIgZT0wIHY9MjAwMyAtMWUrMDA4LjAKCW1heHJhbmdlPTIgZT0wIHY9MjAwMyAxZSswMDguMAoJdWlvcmRlcj0yIGU9MCB2PTIwMDIgNjEKCWdyb3VwPS0xCglJU0M9MAoJT1NDPTEKCQlTVlQ9NTAyMiAzMDAxIDEgCgkJQ0M9MQoJCQlDPTMxIDAgMSAyOCAwIDEgMAoJCQlDUEM9MAoKICovIH0gCmNvbm5lY3Rpb25zID0gWwoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJhY2E2OTBjYi02MzA1LTRhMmYtYmYzZC02OTE4M2E0OTNkYjMiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjYiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIzIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiQ0VEN0JCRjMtMEI0OC00MzM1LUI5MzMtMDk1QTQxQ0EwMjk0IiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIzIiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxMiIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjRDQkI0NDgwLTc5RTgtNENFNy1BQzBGLThCMDlCQUYxMjM5MCIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMyIgCgkJfSAKCQlzZWxlY3QgPSBbIAoJCQkicmdiIiAKCQkJXSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTMiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICIxZWU5YWYxZi02NWYyLTQ3MzktYWQyOC01ZWE2YTBlNjhmYzMiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTMiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjMwIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiMWVlOWFmMWYtNjVmMi00NzM5LWFkMjgtNWVhNmEwZTY4ZmMzIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjE4IiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIzMCIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjFlZTlhZjFmLTY1ZjItNDczOS1hZDI4LTVlYTZhMGU2OGZjMyIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxOSIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMzAiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICIxZWU5YWYxZi02NWYyLTQ3MzktYWQyOC01ZWE2YTBlNjhmYzMiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjkiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjMwIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiMWVlOWFmMWYtNjVmMi00NzM5LWFkMjgtNWVhNmEwZTY4ZmMzIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjEwIiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNl", + "X2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIzMCIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjFlZTlhZjFmLTY1ZjItNDczOS1hZDI4LTVlYTZhMGU2OGZjMyIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyNyIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMzAiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJmNzI1OTdjNC03NDg3LTQxOWEtYWZmYi1kZjY5MGU2NTgyZTEiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMzAiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjMxIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiMDgwNmRiMGQtMmM0YS00M2NhLTk5Y2MtZjVhMmYwMzZhOGU4IiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjMwIiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyOSIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gImM1ODIzYzc1LTRhZTUtNGM3MS1iMDcwLTMxNWZhNGQwM2U4ZSIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyOSIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMzIiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICIyNDJkMTY0OC1hNjI2LTQ0NWItOTUzNC1iY2NlYzA5NDExMmYiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjkiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI4IiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiRjJGNzRFNTgtNDAyRC00NzJCLTg3REQtMzMxRTAwREI0MTZDIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIzIiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxNCIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gImIxYzg2NDA4LWFhY2ItNDQ2Ni1iNzU0LWRkY2YzN2EzYTJjOCIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNiIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjQiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJDRUQ3QkJGMy0wQjQ4LTQzMzUtQjkzMy0wOTVBNDFDQTAyOTQiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjQiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjE1IiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiNENCQjQ0ODAtNzlFOC00Q0U3LUFDMEYtOEIwOUJBRjEyMzkwIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI0IiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxNyIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gImY3MjU5N2M0LTc0ODctNDE5YS1hZmZiLWRmNjkwZTY1ODJlMSIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxNyIgCgkJfSAKCQlzZWxlY3QgPSBbIAoJCQkicmdiIiAKCQkJXSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTgiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJGMkY3NEU1OC00MDJELTQ3MkItODdERC0zMzFFMDBEQjQxNkMiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjQiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjE2IiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiYWQ1ZTA1MmYtZDMxNi00YTBmLThiNzktNTNjMzgyMDRkNjFiIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI2IiAKCQl9IAoJCXNvdXJj", + "ZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMSIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIkNFRDdCQkYzLTBCNDgtNDMzNS1COTMzLTA5NUE0MUNBMDI5NCIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMSIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjAiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICI0Q0JCNDQ4MC03OUU4LTRDRTctQUMwRi04QjA5QkFGMTIzOTAiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjEiIAoJCX0gCgkJc2VsZWN0ID0gWyAKCQkJInIiIAoJCQldIAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxOSIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIkYyRjc0RTU4LTQwMkQtNDcyQi04N0RELTMzMUUwMERCNDE2QyIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMSIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjEiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICIzNmJhNDZkMi1mNmVhLTRlNjAtYTQyOC1mZGMxN2M3NWJjNjIiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjYiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI1IiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiQ0VEN0JCRjMtMEI0OC00MzM1LUI5MzMtMDk1QTQxQ0EwMjk0IiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI1IiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyMiIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjRDQkI0NDgwLTc5RTgtNENFNy1BQzBGLThCMDlCQUYxMjM5MCIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNSIgCgkJfSAKCQlzZWxlY3QgPSBbIAoJCQkiciIgCgkJCV0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI5IiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiRjJGNzRFNTgtNDAyRC00NzJCLTg3REQtMzMxRTAwREI0MTZDIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI1IiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyMyIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjExNjRhNWVmLTQ1NjMtNDc5NS1iM2I1LTQyODI1ZDZkZjAzNyIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNiIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTEiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJjNTgyM2M3NS00YWU1LTRjNzEtYjA3MC0zMTVmYTRkMDNlOGUiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTEiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIyIiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiQ0VEN0JCRjMtMEI0OC00MzM1LUI5MzMtMDk1QTQxQ0EwMjk0IiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIyIiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyNSIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjRDQkI0NDgwLTc5RTgtNENFNy1BQzBGLThCMDlCQUYxMjM5MCIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMiIgCgkJfSAKCQlzZWxlY3QgPSBbIAoJCQkicmdiIiAKCQkJXSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTAiIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJGMkY3NEU1OC00MDJELTQ3MkItODdERC0zMzFFMDBEQjQx", + "NkMiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjIiIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjI0IiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiMjQyZDE2NDgtYTYyNi00NDViLTk1MzQtYmNjZWMwOTQxMTJmIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjExIiAKCQl9IAoJCXNvdXJjZSA9IHsgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyOCIgCgkJfSAKCX0gCgl7IAoJCWRlc3RpbmF0aW9uID0geyAKCQkJY29ubmVjdG9yX2lkID0gIjU5ZmQxY2Y0LWY3MzYtNDcwZC04NTEwLTFkZDdjMDE2NjM5ZSIgCgkJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNiIgCgkJfSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjciIAoJCX0gCgl9IAoJeyAKCQlkZXN0aW5hdGlvbiA9IHsgCgkJCWNvbm5lY3Rvcl9pZCA9ICJDRUQ3QkJGMy0wQjQ4LTQzMzUtQjkzMy0wOTVBNDFDQTAyOTQiIAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjciIAoJCX0gCgkJc291cmNlID0geyAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjI2IiAKCQl9IAoJfSAKCXsgCgkJZGVzdGluYXRpb24gPSB7IAoJCQljb25uZWN0b3JfaWQgPSAiNENCQjQ0ODAtNzlFOC00Q0U3LUFDMEYtOEIwOUJBRjEyMzkwIiAKCQkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI3IiAKCQl9IAoJCXNlbGVjdCA9IFsgCgkJCSJyIiAKCQkJXSAKCQlzb3VyY2UgPSB7IAoJCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjciIAoJCX0gCgl9IApdCmNvbnN0YW50cyA9IFsKCXsgCgkJY29ubmVjdG9yX2lkID0gIjM5QkM3NjE5LTI3NjgtNDgwQi1BQ0ZELTYzRkE2NkVGNjkwNSIgCgkJaWQgPSAiMWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIzIiAKCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjMiIAoJCXZhbHVlID0gWyAKCQkJMS4wCgkJXSAKCX0gCgl7IAoJCWNvbm5lY3Rvcl9pZCA9ICIzOUJDNzYxOS0yNzY4LTQ4MEItQUNGRC02M0ZBNjZFRjY5MDUiIAoJCWlkID0gIjFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNCIgCgkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI0IiAKCQl2YWx1ZSA9IFsgCgkJCTEuMAoJCV0gCgl9IAoJeyAKCQljb25uZWN0b3JfaWQgPSAiMzlCQzc2MTktMjc2OC00ODBCLUFDRkQtNjNGQTY2RUY2OTA1IiAKCQlpZCA9ICIxYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjEiIAoJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMSIgCgkJdmFsdWUgPSBbIAoJCQkxLjAKCQldIAoJfSAKCXsgCgkJY29ubmVjdG9yX2lkID0gIjM5QkM3NjE5LTI3NjgtNDgwQi1BQ0ZELTYzRkE2NkVGNjkwNSIgCgkJaWQgPSAiMWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI1IiAKCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjUiIAoJCXZhbHVlID0gWyAKCQkJMS4wCgkJXSAKCX0gCgl7IAoJCWNvbm5lY3Rvcl9pZCA9ICIzOUJDNzYxOS0yNzY4LTQ4MEItQUNGRC02M0ZBNjZFRjY5MDUiIAoJCWlkID0gIjFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMiIgCgkJaW5zdGFuY2VfaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIyIiAKCQl2YWx1ZSA9IFsgCgkJCTEuMAoJCV0gCgl9IAoJeyAKCQljb25uZWN0b3JfaWQgPSAiMzlCQzc2MTktMjc2OC00ODBCLUFDRkQtNjNGQTY2RUY2OTA1IiAKCQlpZCA9ICIxYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjciIAoJCWluc3RhbmNlX2lkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiNyIgCgkJdmFsdWUgPSBbIAoJCQkxLjAKCQldIAoJfSAKCXsgCgkJY29ubmVjdG9yX2lkID0gIkYyRjc0RTU4LTQwMkQtNDcyQi04N0RELTMzMUUwMERCNDE2QyIgCgkJaWQgPSAiM2JiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI3IiAKCQlpbnN0YW5jZV9pZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjciIAoJCXZhbHVlID0gWyAKCQkJMS4wCgkJXSAKCX0gCl0Kbm9kZXMgPSBbCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjYiIAoJCW9wdGlvbnMgPSBbIAoJCQkiMmIxMzY0NDctNjc2ZS00OTQzLTk5N2ItMDRhMjhhZTY4NDk3IgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQkxMzYwIAoJCQkyNjAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJT", + "dGFuZGFyZCBCYXNlIiAKCQl0eXBlID0gImNvcmUvc3RpbmdyYXlfcmVuZGVyZXIvb3V0cHV0X25vZGVzL3N0YW5kYXJkX2Jhc2UiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMyIgCgkJb3B0aW9ucyA9IFsgCgkJCSI5QTg0MjgyQi1GMUEyLTQ2RDQtOUZDNC01QTc2RkM5QjMwREQiCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTEwMjAgCgkJCS0zNDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJDb2xvciBNYXAgU3dpdGNoIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL2lmIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJCW1hdGVyaWFsX3ZhcmlhYmxlID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJVc2UgQ29sb3IgTWFwIiAKCQkJCW5hbWUgPSAidXNlX2NvbG9yX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gMSAKCQkJCQltaW4gPSAwLjAgCgkJCQkJc3RlcCA9IDEgCgkJCQkJb3JkZXIgPSAxMCAKCQkJCQl1aV90eXBlID0gImNoZWNrYm94IiAKCQkJCX0gCgkJCQl0eXBlID0gImZsb2F0IiAKCQkJCXZhbHVlID0gMS4wIAoJCQl9IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjEyIiAKCQlvcHRpb25zID0gWyAKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNzAwIAoJCQktNDAwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiVXNlIENvbG9yIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjEzIiAKCQlvcHRpb25zID0gWyAKCQkJIjFlMDY3NDY0LTEyZDgtNDgyNi05YjcyLWNmZDU3NjUwMDNlMyIKCQkJImZiM2Y3MDliLWE1NGEtNGU5My1hYzlmLWU5ZmM3NmZiOGJjZCIKCQkJIjVkZDU5YjNkLTE3NjItNGExNC05OTMwLTc1MDAyMzBlZjNkYiIKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNzAwIAoJCQktMzQwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCQl0ZXh0dXJlX21hcCA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiQ29sb3IgTWFwIiAKCQkJCXNsb3RfbmFtZSA9ICJjb2xvcl9tYXAiIAoJCQkJdWkgPSB7IAoJCQkJCW9yZGVyID0gMSAKCQkJCX0gCgkJCX0gCgkJfSAKCQl0aXRsZSA9ICJDb2xvciBNYXAiIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvc2FtcGxlX3RleHR1cmUiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIzMCIgCgkJb3B0aW9ucyA9IFsgCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTEyMCAKCQkJNDAwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiQWRkIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL2FkZCIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiVXYgT2Zmc2V0IiAKCQkJCW5hbWUgPSAidXZfb2Zmc2V0IiAKCQkJCXVpID0geyAKCQkJCQltYXggPSBbIDFlKzAwOC4wIDFlKzAwOC4wIF0gCgkJCQkJbWluID0gWyAtMWUrMDA4LjAgLTFlKzAwOC4wIF0gCgkJCQkJc3RlcCA9IFsgMC4wMSAwLjAxIF0gCgkJCQkJb3JkZXIgPSA2MCAKCQkJCX0gCgkJCQl0eXBlID0gImZsb2F0MiIgCgkJCQl2YWx1ZSA9IFswLjAgMC4wXSAKCQkJfSAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIzMSIgCgkJb3B0aW9ucyA9IFsgCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCS02MCAKCQkJMzQwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiVXYgT2Zmc2V0IiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL21hdGVyaWFsX3ZhcmlhYmxlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjkiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQktNjAgCgkJCTQwMCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIk11bHRpcGx5IiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL211bCIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiVXYgU2NhbGUiIAoJCQkJbmFtZSA9ICJ1dl9zY2FsZSIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gWyAxZSswMDguMCAxZSswMDguMCBdIAoJCQkJCW1pbiA9IFsgLTFlKzAwOC4wIC0xZSswMDguMCBdIAoJCQkJCXN0ZXAgPSBbIDAuMDEgMC4wMSBdIAoJCQkJCW9yZGVyID0gNjEgCgkJCQl9IAoJCQkJdHlw", + "ZSA9ICJmbG9hdDIiIAoJCQkJdmFsdWUgPSBbMS4wIDEuMF0gCgkJCX0gCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMzIiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQktMjQwIAoJCQkzNDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJVdiBTY2FsZSIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI4IiAKCQlvcHRpb25zID0gWyAKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJLTI2MCAKCQkJNDIwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiVGV4Y29vcmQwIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL3RleHR1cmVfY29vcmRpbmF0ZTAiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQkJbWF0ZXJpYWxfdmFyaWFibGUgPSB7IAoJCQkJZGlzcGxheV9uYW1lID0gIkJhc2UgQ29sb3IiIAoJCQkJbmFtZSA9ICJiYXNlX2NvbG9yIiAKCQkJCXVpID0geyAKCQkJCQltYXggPSBbIDEuMCAxLjAgMS4wIF0gCgkJCQkJbWluID0gWyAwLjAgMC4wIDAuMCBdIAoJCQkJCXN0ZXAgPSBbIDAuMDEgMC4wMSAwLjAxIF0gCgkJCQkJb3JkZXIgPSAyMCAKCQkJCQl1aV90eXBlID0gImNvbG9yIiAKCQkJCX0gCgkJCQl0eXBlID0gImZsb2F0MyIgCgkJCQl2YWx1ZSA9IFsxLjAgMS4wIDEuMF0gCgkJCX0gCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTQiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk3MDAgCgkJCS0yNDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJCYXNlIENvbG9yIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL21hdGVyaWFsX3ZhcmlhYmxlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjQiIAoJCW9wdGlvbnMgPSBbIAoJCQkiOUE4NDI4MkItRjFBMi00NkQ0LTlGQzQtNUE3NkZDOUIzMEREIgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQkxMDIwIAoJCQktNjAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJOb3JtYWwgTWFwIFN3aXRjaCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9pZiIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiVXNlIE5vcm1hbCBNYXAiIAoJCQkJbmFtZSA9ICJ1c2Vfbm9ybWFsX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gMSAKCQkJCQltaW4gPSAwLjAgCgkJCQkJc3RlcCA9IDEgCgkJCQkJb3JkZXIgPSAxMSAKCQkJCQl1aV90eXBlID0gImNoZWNrYm94IiAKCQkJCX0gCgkJCQl0eXBlID0gImZsb2F0IiAKCQkJCXZhbHVlID0gMS4wIAoJCQl9IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjE1IiAKCQlvcHRpb25zID0gWyAKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNzAwIAoJCQktMTIwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiVXNlIE5vcm1hbCBNYXAiIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvbWF0ZXJpYWxfdmFyaWFibGUiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIxNyIgCgkJb3B0aW9ucyA9IFsgCgkJCSIwYTBmYjVhZC0xNDVkLTQyMjktYWJkNC01YjM2NTYyNjA3YjMiCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTc0MCAKCQkJLTYwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiVGFuZ2VudCBUbyBXb3JsZCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy90YW5nZW50X3RvX3dvcmxkIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTgiIAoJCW9wdGlvbnMgPSBbIAoJCQkiMWUwNjc0NjQtMTJkOC00ODI2LTliNzItY2ZkNTc2NTAwM2UzIgoJCQkiOTBlMjA4MjYtODY4OS00MmZhLThlMjQtZjQ4NGVjNjRjNWMzIgoJCQkiNWRkNTliM2QtMTc2Mi00YTE0LTk5MzAtNzUwMDIzMGVmM2RiIgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk0NDAgCgkJCS02MCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQkJdGV4dHVyZV9tYXAgPSB7IAoJCQkJZGlzcGxheV9uYW1lID0gIk5vcm1hbCBNYXAiIAoJCQkJc2xvdF9uYW1lID0gIm5vcm1hbF9tYXAiIAoJCQkJdWkgPSB7IAoJCQkJCW9yZGVyID0gMiAKCQkJCX0gCgkJCX0gCgkJfSAKCQl0aXRsZSA9ICJOb3JtYWwgTWFwIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL3NhbXBsZV90ZXh0dXJlIiAK", + "CX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTYiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk2ODAgCgkJCTYwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiV29ybGQgTm9ybWFsIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL3dvcmxkX3NwYWNlX25vcm1hbCIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmIxIiAKCQlvcHRpb25zID0gWyAKCQkJIjlBODQyODJCLUYxQTItNDZENC05RkM0LTVBNzZGQzlCMzBERCIKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJMTAyMCAKCQkJMjQwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiTWV0YWxsaWMgTWFwIFN3aXRjaCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9pZiIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiVXNlIE1ldGFsbGljIE1hcCIgCgkJCQluYW1lID0gInVzZV9tZXRhbGxpY19tYXAiIAoJCQkJdWkgPSB7IAoJCQkJCW1heCA9IDEgCgkJCQkJbWluID0gMC4wIAoJCQkJCXN0ZXAgPSAxIAoJCQkJCW9yZGVyID0gMTIgCgkJCQkJdWlfdHlwZSA9ICJjaGVja2JveCIgCgkJCQl9IAoJCQkJdHlwZSA9ICJmbG9hdCIgCgkJCQl2YWx1ZSA9IDEuMCAKCQkJfSAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyMCIgCgkJb3B0aW9ucyA9IFsgCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTcwMCAKCQkJMTgwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiVXNlIE1ldGFsbGljIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjE5IiAKCQlvcHRpb25zID0gWyAKCQkJImY2NjlhM2E2LTAzNzYtNDE4Ny04NDBlLTgwMDAwZTI5MzlkNSIKCQkJImU5NGU1M2U2LTQ5YjYtNDE5NC1hNzQ3LThmMDY0YTU5MzJlMCIKCQkJIjVkZDU5YjNkLTE3NjItNGExNC05OTMwLTc1MDAyMzBlZjNkYiIKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNzAwIAoJCQkyNDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJCXRleHR1cmVfbWFwID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJNZXRhbGxpYyBNYXAiIAoJCQkJc2xvdF9uYW1lID0gIm1ldGFsbGljX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJb3JkZXIgPSAzIAoJCQkJfSAKCQkJfSAKCQl9IAoJCXRpdGxlID0gIk1ldGFsbGljIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9zYW1wbGVfdGV4dHVyZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiTWV0YWxsaWMiIAoJCQkJbmFtZSA9ICJtZXRhbGxpYyIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gMS4wIAoJCQkJCW1pbiA9IDAuMCAKCQkJCQlzdGVwID0gMC4wMSAKCQkJCQlvcmRlciA9IDIxIAoJCQkJfSAKCQkJCXR5cGUgPSAiZmxvYXQiIAoJCQkJdmFsdWUgPSAxLjAgCgkJCX0gCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjEiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk3MDAgCgkJCTM0MCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIk1ldGFsbGljIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL21hdGVyaWFsX3ZhcmlhYmxlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiYjUiIAoJCW9wdGlvbnMgPSBbIAoJCQkiOUE4NDI4MkItRjFBMi00NkQ0LTlGQzQtNUE3NkZDOUIzMEREIgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQkxMDIwIAoJCQk1NDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJSb3VnaG5lc3MgTWFwIFN3aXRjaCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9pZiIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiVXNlIFJvdWdobmVzcyBNYXAiIAoJCQkJbmFtZSA9ICJ1c2Vfcm91Z2huZXNzX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gMSAKCQkJCQltaW4gPSAwLjAgCgkJCQkJc3RlcCA9IDEgCgkJCQkJb3JkZXIgPSAxMyAKCQkJCQl1aV90eXBlID0gImNoZWNrYm94IiAKCQkJCX0gCgkJCQl0eXBlID0gImZsb2F0IiAKCQkJCXZhbHVlID0gMS4wIAoJCQl9IAoJCX0gCgkJaWQg", + "PSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjIyIiAKCQlvcHRpb25zID0gWyAKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNzAwIAoJCQk0ODAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJVc2UgUm91Z2huZXNzIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI5IiAKCQlvcHRpb25zID0gWyAKCQkJIjFlMDY3NDY0LTEyZDgtNDgyNi05YjcyLWNmZDU3NjUwMDNlMyIKCQkJImU5NGU1M2U2LTQ5YjYtNDE5NC1hNzQ3LThmMDY0YTU5MzJlMCIKCQkJIjVkZDU5YjNkLTE3NjItNGExNC05OTMwLTc1MDAyMzBlZjNkYiIKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNzAwIAoJCQk1NDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJCXRleHR1cmVfbWFwID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJSb3VnaG5lc3MgTWFwIiAKCQkJCXNsb3RfbmFtZSA9ICJyb3VnaG5lc3NfbWFwIiAKCQkJCXVpID0geyAKCQkJCQlvcmRlciA9IDQgCgkJCQl9IAoJCQl9IAoJCX0gCgkJdGl0bGUgPSAiUm91Z2huZXNzIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9zYW1wbGVfdGV4dHVyZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiUm91Z2huZXNzIiAKCQkJCW5hbWUgPSAicm91Z2huZXNzIiAKCQkJCXVpID0geyAKCQkJCQltYXggPSAxLjAgCgkJCQkJbWluID0gMC4wIAoJCQkJCXN0ZXAgPSAwLjAxIAoJCQkJCW9yZGVyID0gMjIgCgkJCQl9IAoJCQkJdHlwZSA9ICJmbG9hdCIgCgkJCQl2YWx1ZSA9IDAuNSAKCQkJfSAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyMyIgCgkJb3B0aW9ucyA9IFsgCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTcwMCAKCQkJNjQwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiUm91Z2huZXNzIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL21hdGVyaWFsX3ZhcmlhYmxlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMTEiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQkxMDIwIAoJCQk4NDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJNdWx0aXBseSIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tdWwiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWJiMiIgCgkJb3B0aW9ucyA9IFsgCgkJCSI5QTg0MjgyQi1GMUEyLTQ2RDQtOUZDNC01QTc2RkM5QjMwREQiCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTc0MCAKCQkJNzgwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiRW1pc3NpdmUgTWFwIFN3aXRjaCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9pZiIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiVXNlIEVtaXNzaXZlIE1hcCIgCgkJCQluYW1lID0gInVzZV9lbWlzc2l2ZV9tYXAiIAoJCQkJdWkgPSB7IAoJCQkJCW1heCA9IDEgCgkJCQkJbWluID0gMC4wIAoJCQkJCXN0ZXAgPSAxIAoJCQkJCW9yZGVyID0gMTQgCgkJCQkJdWlfdHlwZSA9ICJjaGVja2JveCIgCgkJCQl9IAoJCQkJdHlwZSA9ICJmbG9hdCIgCgkJCQl2YWx1ZSA9IDAuMCAKCQkJfSAKCQl9IAoJCWlkID0gImFiYmFhYmJhLWFiYmEtYWJiYS1hYmJhLWFiYmFhYmJhYWIyNSIgCgkJb3B0aW9ucyA9IFsgCgkJXSAKCQlwb3NpdGlvbiA9IFsgCgkJCTQyMCAKCQkJNzIwIAoJCV0gCgkJc2FtcGxlcnMgPSB7IAoJCX0gCgkJdGl0bGUgPSAiVXNlIEVtaXNzaXZlIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjEwIiAKCQlvcHRpb25zID0gWyAKCQkJIjFlMDY3NDY0LTEyZDgtNDgyNi05YjcyLWNmZDU3NjUwMDNlMyIKCQkJImZiM2Y3MDliLWE1NGEtNGU5My1hYzlmLWU5ZmM3NmZiOGJjZCIKCQkJIjVkZDU5YjNkLTE3NjItNGExNC05OTMwLTc1MDAyMzBlZjNkYiIKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNDIwIAoJCQk3ODAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJCXRleHR1cmVfbWFwID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJFbWlzc2l2ZSBNYXAiIAoJCQkJc2xvdF9uYW1lID0gImVtaXNzaXZlX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJb3JkZXIgPSA1IAoJCQkJfSAK", + "CQkJfSAKCQl9IAoJCXRpdGxlID0gIkVtaXNzaXZlIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9zYW1wbGVfdGV4dHVyZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiRW1pc3NpdmUiIAoJCQkJbmFtZSA9ICJlbWlzc2l2ZSIgCgkJCQl1aSA9IHsgCgkJCQkJbWF4ID0gWyAxLjAgMS4wIDEuMCBdIAoJCQkJCW1pbiA9IFsgMC4wIDAuMCAwLjAgXSAKCQkJCQlzdGVwID0gWyAwLjAxIDAuMDEgMC4wMSBdIAoJCQkJCW9yZGVyID0gMjMgCgkJCQkJdWlfdHlwZSA9ICJjb2xvciIgCgkJCQl9IAoJCQkJdHlwZSA9ICJmbG9hdDMiIAoJCQkJdmFsdWUgPSBbMC4wIDAuMCAwLjBdIAoJCQl9IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYjI0IiAKCQlvcHRpb25zID0gWyAKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJNDIwIAoJCQk4ODAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJFbWlzc2l2ZSIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCQltYXRlcmlhbF92YXJpYWJsZSA9IHsgCgkJCQlkaXNwbGF5X25hbWUgPSAiRW1pc3NpdmUgSW50ZW5zaXR5IiAKCQkJCW5hbWUgPSAiZW1pc3NpdmVfaW50ZW5zaXR5IiAKCQkJCXVpID0geyAKCQkJCQltYXggPSAxMC4wIAoJCQkJCW1pbiA9IDAuMCAKCQkJCQlzdGVwID0gMC4wMSAKCQkJCQlvcmRlciA9IDUzIAoJCQkJfSAKCQkJCXR5cGUgPSAiZmxvYXQiIAoJCQkJdmFsdWUgPSAwLjAgCgkJCX0gCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjgiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk3NDAgCgkJCTkyMCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIkVtaXNzaXZlIEludGVuc2l0eSIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9tYXRlcmlhbF92YXJpYWJsZSIgCgl9IAoJeyAKCQljb250ZW50X3NpemUgPSBbIAoJCQkxNjAgCgkJCTAgCgkJXSAKCQlleHBvcnQgPSB7IAoJCX0gCgkJaWQgPSAiYWJiYWFiYmEtYWJiYS1hYmJhLWFiYmEtYWJiYWFiYmFhYmI3IiAKCQlvcHRpb25zID0gWyAKCQkJIjlBODQyODJCLUYxQTItNDZENC05RkM0LTVBNzZGQzlCMzBERCIKCQldIAoJCXBvc2l0aW9uID0gWyAKCQkJMTAyMCAKCQkJMTEwMCAKCQldIAoJCXNhbXBsZXJzID0geyAKCQl9IAoJCXRpdGxlID0gIkFvIE1hcCBTd3RpY2giIAoJCXR5cGUgPSAiY29yZS9zaGFkZXJfbm9kZXMvaWYiIAoJfSAKCXsgCgkJY29udGVudF9zaXplID0gWyAKCQkJMTYwIAoJCQkwIAoJCV0gCgkJZXhwb3J0ID0geyAKCQkJbWF0ZXJpYWxfdmFyaWFibGUgPSB7IAoJCQkJZGlzcGxheV9uYW1lID0gIlVzZSBBbyBNYXAiIAoJCQkJbmFtZSA9ICJ1c2VfYW9fbWFwIiAKCQkJCXVpID0geyAKCQkJCQltYXggPSAxIAoJCQkJCW1pbiA9IDAuMCAKCQkJCQlzdGVwID0gMSAKCQkJCQlvcmRlciA9IDE1IAoJCQkJCXVpX3R5cGUgPSAiY2hlY2tib3giIAoJCQkJfSAKCQkJCXR5cGUgPSAiZmxvYXQiIAoJCQkJdmFsdWUgPSAxLjAgCgkJCX0gCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjYiIAoJCW9wdGlvbnMgPSBbIAoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk3MDAgCgkJCTExMDAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJfSAKCQl0aXRsZSA9ICJVc2UgQW8gTWFwIiAKCQl0eXBlID0gImNvcmUvc2hhZGVyX25vZGVzL21hdGVyaWFsX3ZhcmlhYmxlIiAKCX0gCgl7IAoJCWNvbnRlbnRfc2l6ZSA9IFsgCgkJCTE2MCAKCQkJMCAKCQldIAoJCWV4cG9ydCA9IHsgCgkJfSAKCQlpZCA9ICJhYmJhYWJiYS1hYmJhLWFiYmEtYWJiYS1hYmJhYWJiYWFiMjciIAoJCW9wdGlvbnMgPSBbIAoJCQkiZjY2OWEzYTYtMDM3Ni00MTg3LTg0MGUtODAwMDBlMjkzOWQ1IgoJCQkiZTk0ZTUzZTYtNDliNi00MTk0LWE3NDctOGYwNjRhNTkzMmUwIgoJCQkiNWRkNTliM2QtMTc2Mi00YTE0LTk5MzAtNzUwMDIzMGVmM2RiIgoJCV0gCgkJcG9zaXRpb24gPSBbIAoJCQk3MDAgCgkJCTExNjAgCgkJXSAKCQlzYW1wbGVycyA9IHsgCgkJCXRleHR1cmVfbWFwID0geyAKCQkJCWRpc3BsYXlfbmFtZSA9ICJBbyBNYXAiIAoJCQkJc2xvdF9uYW1lID0gImFvX21hcCIgCgkJCQl1aSA9IHsgCgkJCQkJb3JkZXIgPSA2IAoJCQkJfSAKCQkJfSAKCQl9IAoJCXRpdGxlID0gIkFvIE1hcCIgCgkJdHlwZSA9ICJjb3JlL3NoYWRlcl9ub2Rlcy9zYW1wbGVfdGV4dHVyZSIgCgl9IApdCnZlcnNpb24gPSAzCgA=" + } + } + } + BindingTable: 994552656, "BindingTable::root 2", "" { + Version: 100 + Properties70: { + P: "TargetName", "KString", "", "", "root" + P: "TargetType", "KString", "", "", "shader" + } + Entry: "Maya|use_metallic_map", "FbxPropertyEntry", "use_metallic_map", "FbxSemanticEntry" + Entry: "Maya|base_color", "FbxPropertyEntry", "base_color", "FbxSemanticEntry" + Entry: "Maya|use_ao_map", "FbxPropertyEntry", "use_ao_map", "FbxSemanticEntry" + Entry: "Maya|TEX_emissive_map", "FbxPropertyEntry", "TEX_emissive_map", "FbxSemanticEntry" + Entry: "Maya|TEX_metallic_map", "FbxPropertyEntry", "TEX_metallic_map", "FbxSemanticEntry" + Entry: "Maya|TEX_ao_map", "FbxPropertyEntry", "TEX_ao_map", "FbxSemanticEntry" + Entry: "Maya|uv_offset", "FbxPropertyEntry", "uv_offset", "FbxSemanticEntry" + Entry: "Maya|emissive_intensity", "FbxPropertyEntry", "emissive_intensity", "FbxSemanticEntry" + Entry: "Maya|metallic", "FbxPropertyEntry", "metallic", "FbxSemanticEntry" + Entry: "Maya|TEX_global_specular_cube", "FbxPropertyEntry", "TEX_global_specular_cube", "FbxSemanticEntry" + Entry: "Maya|use_roughness_map", "FbxPropertyEntry", "use_roughness_map", "FbxSemanticEntry" + Entry: "Maya|use_normal_map", "FbxPropertyEntry", "use_normal_map", "FbxSemanticEntry" + Entry: "Maya|use_color_map", "FbxPropertyEntry", "use_color_map", "FbxSemanticEntry" + Entry: "Maya|emissive", "FbxPropertyEntry", "emissive", "FbxSemanticEntry" + Entry: "Maya|use_emissive_map", "FbxPropertyEntry", "use_emissive_map", "FbxSemanticEntry" + Entry: "Maya|uv_scale", "FbxPropertyEntry", "uv_scale", "FbxSemanticEntry" + Entry: "Maya|TEX_global_diffuse_cube", "FbxPropertyEntry", "TEX_global_diffuse_cube", "FbxSemanticEntry" + Entry: "Maya|TEX_roughness_map", "FbxPropertyEntry", "TEX_roughness_map", "FbxSemanticEntry" + Entry: "Maya|roughness", "FbxPropertyEntry", "roughness", "FbxSemanticEntry" + Entry: "Maya|TEX_brdf_lut", "FbxPropertyEntry", "TEX_brdf_lut", "FbxSemanticEntry" + Entry: "Maya|TEX_color_map", "FbxPropertyEntry", "TEX_color_map", "FbxSemanticEntry" + Entry: "Maya|TEX_normal_map", "FbxPropertyEntry", "TEX_normal_map", "FbxSemanticEntry" + } + AnimationStack: 1971005888, "AnimStack::Take 001", "" { + Properties70: { + P: "LocalStart", "KTime", "Time", "",1924423250 + P: "LocalStop", "KTime", "Time", "",230930790000 + P: "ReferenceStart", "KTime", "Time", "",1924423250 + P: "ReferenceStop", "KTime", "Time", "",230930790000 + } + } + AnimationLayer: 362989216, "AnimLayer::BaseLayer", "" { + } +} + +; Object connections +;------------------------------------------------------------------ + +Connections: { + + ;Model::HiFi_Xylophone1, Model::RootNode + C: "OO",363536144,0 + + ;Model::Wave, Model::RootNode + C: "OO",363501344,0 + + ;AnimLayer::BaseLayer, AnimStack::Take 001 + C: "OO",362989216,1971005888 + + ;NodeAttribute::, Model::HiFi_Xylophone1 + C: "OO",1611246784,363536144 + + ;Model::Frame, Model::HiFi_Xylophone1 + C: "OO",363538464,363536144 + + ;NodeAttribute::, Model::Frame + C: "OO",1611245728,363538464 + + ;Model::Wave, Model::Frame + C: "OO",363550064,363538464 + + ;Model::transform1, Model::Frame + C: "OO",363503664,363538464 + + ;NodeAttribute::, Model::Wave + C: "OO",1611246608,363550064 + + ;Model::transform2, Model::Wave + C: "OO",363517584,363550064 + + ;NodeAttribute::, Model::transform2 + C: "OO",1611246256,363517584 + + ;NodeAttribute::, Model::transform1 + C: "OO",1611247136,363503664 + + ;Texture::file1, Material::Steel + C: "OP",1971096816,1611742192, "Maya|TEX_global_diffuse_cube" + + ;Texture::file2, Material::Steel + C: "OP",1982230336,1611742192, "Maya|TEX_global_specular_cube" + + ;Texture::file3, Material::Steel + C: "OP",1612282368,1611742192, "Maya|TEX_brdf_lut" + + ;Texture::file5, Material::Steel + C: "OP",1612283328,1611742192, "Maya|TEX_normal_map" + + ;Texture::file4, Material::Steel + C: "OP",1612282848,1611742192, "Maya|TEX_color_map" + + ;Texture::file6, Material::Steel + C: "OP",1982231296,1611742192, "Maya|TEX_metallic_map" + + ;Texture::file7, Material::Steel + C: "OP",1531689904,1611742192, "Maya|TEX_roughness_map" + + ;Texture::file8, Material::Steel + C: "OP",1982230816,1611742192, "Maya|TEX_ao_map" + + ;Material::Steel, Implementation::Steel_Implementation + C: "OO",1611742192,1981166160 + + ;BindingTable::root 2, Implementation::Steel_Implementation + C: "OO",994552656,1981166160 + + ;Video::file6, Texture::file6 + C: "OO",1971809008,1982231296 + + ;Video::file7, Texture::file7 + C: "OO",1971833408,1531689904 + + ;Video::file4, Texture::file4 + C: "OO",1971825008,1612282848 + + ;Video::file5, Texture::file5 + C: "OO",1971829008,1612283328 + + ;Geometry::, Model::Wave + C: "OO",1983184160,363501344 + + ;Material::Steel, Model::Wave + C: "OO",1611742192,363501344 +} +;Takes section +;---------------------------------------------------- + +Takes: { + Current: "Take 001" + Take: "Take 001" { + FileName: "Take_001.tak" + LocalTime: 1924423250,230930790000 + ReferenceTime: 1924423250,230930790000 + } +} diff --git a/unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_BaseColor.png b/unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_BaseColor.png new file mode 100644 index 0000000000000000000000000000000000000000..b40708b99df24a04132adc796ab78feab788fb7a GIT binary patch literal 1902 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&t&wwUqN(AjMhW5n0T@z%2~Ij105pNH8$4 zD|os%hE&XXd)1MbK|$bvfyamST~Bfpn~z7a{?5HWlhxt;Pg#Zo@@xzOsSFH(qts{+ ojHZIoj4)ajj24F@qekEtV&DqkW#c>!tUwt&UHx3vIVCg!0Bqmr4gdfE literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_Metallic.png b/unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_Metallic.png new file mode 100644 index 0000000000000000000000000000000000000000..7c14baf4fca39bdb83a3c197b898a1b6003b3eef GIT binary patch literal 1322 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&w3=!$sk4H6X=V;1OBOz`!jG!i)^F=14Fw zu-x%g`lUapUXO@geCycM4H6_ literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_Normal.png b/unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_Normal.png new file mode 100644 index 0000000000000000000000000000000000000000..e4359d0d767b15b550ba78e65734f04d16aaa6b1 GIT binary patch literal 76957 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

xnE<0bUot)B?7!x8B4{c4ZlAX!P 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 WaO@xIK0z@P9>AO=GF%bd&$r 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 literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_Roughness.png b/unpublishedScripts/marketplace/xylophone/xylophoneFrameWithWave_Steel_Roughness.png new file mode 100644 index 0000000000000000000000000000000000000000..b8fd8f8aac699dd409c62e39b030a08c66287d27 GIT binary patch literal 59566 zcmXtF!3lyQPsXK|pem?iCaeiKV+!1qlhIq(P}A1f`LbTtwwq zKR=J(Y(CfUc&Rd2r!D_ntr3mn@Mu={AF`C*9*?51YIyBP?CB z>^dXPc|rgWzl=F6NV@IS|IT{T2&Yz??frM=x_`o9S!kw(T{NbA z(381ox8n8HPQoBUbTE1S9lSBMrVc zWBn-5uJg#$K=5tdl7n&{sPd+chnqNg!BXIGVk3g+LC5Tn7fLn(d0Y=6ULH?~{9tME zutg={XaXHk1L^2kMct*3RWNO!GQ}!lHZO6U6QTZI06#a94i91Yl5!zf8i-fU?^KU) zgP?@RO1=etVnGm*nM~SW!AQ^b0GopRxC1anIsA6P=C{L*U-4Cv2#>EFW?DaqV9MKGFbBQ0t)&D3@N(@Uy_lX zV!AeOUNaW0)KD*4P;P1a!fclo4R==sQ|%fYPaf3`)ekC=6j+cVIc=9A_+-klkMGo6SaS8BRdi>1L)nYHz(#&^`t-N=5ov>uX+T!LxLiK z`qUkE1Y$m)X@Tw2r0b5gqmSsbt{o_?7ydNkwvwL>3D#7bWF>Yl7;-|bImD_^BvkMw zJnt48a-d82#e?hAmq+~q`p+*Nnr%@AlT9Cv`$e@UR&vMddBB94cn184G=OXiUY7-= zE144Ec*gEiPh%-vT||QhJToSUPF4BM?DRI2J7zT6kr&rorOFE#qV8}c5cBdP#yV;O z+P25fBdfWf(Quxjx=c(m?N9%bm}gBR6gILYs-s8_sP7v_4dGV)D{msFsH^^xtAz~c&ttq7>(A*DIGx0HqIzsFO8F5uwk zFAFd)xUkqu?oSNii_QI`3I85Wg;vo*1$q7b<>JzuI9T36<|0%8nq(DplZdoh_~hz( z9jk2&)Wd(U#gCYwME?$a(1YC91ho8TBc(0^8F%c--&2ErZic54Z6ibE(vB;em8YnE zo?`ae2*hl_zP1qCNx&5Bo#n*^TJw|Ii6E(hQa9~YHn6cw;<4Lm!dTv0Gpy8Y01)Ww zL1N{#%!$rZ0ul+oI;6;=n&vOjr$T-gJ>qwQ{!A1vWgaFoq##AN+a)dM0nRRXseur+ zkZ-FCiK~L-hr@9;E1(ghHy@`s&@oe?GM5jqEY}Swwo}viNyy~YzI6v8tgZd&Crb%{ z#dgi+XSo1#aKYO3S;X~w?y&l)O}}DsLejFDWo2hIWF`T4~N` zcup5+c|tJA&49 z=m*l(G*qlR|5=<$j8Q!uRsL>ft$;;5063CE=hAlA&n3$otXMwHeqf6-$HzDb0DV3G zjkXOZdgviA+x7cca_4LlPbS~>n^FcnBvmHV0OXON6C>5>xG41?02?vJjh++%!M+&a z$xYmXU)RG%NRFUqIdU{zqm#ML)-U#+&_9iFu+u}b*+W7DI=7enPyng@NhyzxcIJoW zZ6kIGgl#K$M_nd;DRYkZl1+HHbbg?(J)}!laPkpxu-Y-RL1^!ypwxYm9uq3x;^%VQ zp4u1KHREmhJqJOA;9}-ONAQjxrlKaW2$WASw=qZBznAZ(ERM=Xm&-r2xu}I2#DY`Q;*1 zHXfN&rWJa{1e1hwMnFJ9t(UYw%g@4oJfK_72E4~_q>@%{ia|P{Mn{VlwPIQ&q*5u* zY7~x<0Ab^WvhHLMMw2k0TW`PR+ie#jx!Fw*2+a80O-mW*rQ-WdEzOKL74y(I@jT== zY4mn0vfX>{x5U)Pas+z+Wd|mj5!K6sHGM&xCodU-Z`4nMjevn{XDqZ(oq|9=K2TSG zFNU+q8oh5I9>0@L6*3v!f?Dw6{**}^6g}^Xqk(h?TcU8bobcxX$hjrK*OwR`x$`cX zk}paxDFBq-z&r&**_eo{s%$`nkuWkNmPFlGcMWw;dz|-{YC)F$t*!B&CE)uzjoD#<%nbRMfS8vt@oVv#w|YtZdDQ}gL4Jp zPawAq?~#kH+T9-?v_^g_HNT{%f8;q~a4c8NVQW>`G1Czx)Q1}&hc|YAfCXhR~&f(dzn)Se`))xtlNmE2Gh0bwsQNE+zS#QoV-wsU|(&bU?)6-G}0-}W4K~M z2Vq*=D-pgUYfT53#oCWFE)Rp%h}Xm_{NdCDh;c^M|9|_`b60;zGhrvp&Fj zg~yz9WVtG3-$&-kmP`>|sYw3u!|!|#j)&qI6q4A_d4TpdyxR766hOaKqg4U8CO)5L zoSY7G`~E5v7D4D3Q7@*|3RC%lbL2wlb?QMvQz$V*oF&E0=X^BU%-q=>bm#=(s1G5$? zrLOG{87VNP?~&~;sxD5Mz_t?7H6uoP!Snq=`FCNKNhhQDP(2+0S;fupvNU#(w z$aWfFZ#)}8RSD!;f0>6qA}6a{5=@i>?clV^Wexs@NvF6yc&UKW7Dq1yYH*?r8OQ~v zm_NqR!{uly`S9-LXUs2Ghuve?B($v-Q2rGCTGqFXgBYf@1?^TrP1Jr4vOR-)XENly z*F{J2^}+(iY0}>+&Bu>U%OL_R!6yK)ji_3~aybs2^YJaQEC^q6{e-?!(s6{di_QvA=>Z5$b;jODV zFm{~U{T5Ttp$^Mxmnl9XSHf|-S;z`!&(GWeL|i|(Ma0~an?FMJ#^bbSfb;XnQ7shy zFy!`*iQa@;fRpVGU>#HToOO$fFLF>^R!+XB$$t3ULm$};POc8DtJ)=J}LCH%##

e`X>OXfHAj+xwS1( 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 P@sW_+vc-_Wp>M|5&^30~TX%Xiu(uSTN5YKAi< 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 UX*n!db^rhX07*qoM6N<$g7egqIsgCw literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylotex_bar1.png b/unpublishedScripts/marketplace/xylophone/xylotex_bar1.png new file mode 100644 index 0000000000000000000000000000000000000000..2651d86f95f3a8c2ad9c4c85b15508bae87ba8d1 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz15X#nkcif|=L{Jc6nGA7XsTZv r%xLs&3EM2=uTgLE&M^YjAc0kO=cJi5(%3F60||P%`njxgN@xNA_f{Gm literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylotex_bar2.png b/unpublishedScripts/marketplace/xylophone/xylotex_bar2.png new file mode 100644 index 0000000000000000000000000000000000000000..606c193c9892a5c2920f9d3fe17272d4d8c82dc2 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz15X#nkcif|=L{Jc6nGA7X!_58 q(D~TBD-OlaOm)l5p97U3gHZXRB}^9^Kc9C3iF&&FxvX{m&ow&fvCM0OY2om&k^>bP0l+XkK3LP34 literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylotex_bar5.png b/unpublishedScripts/marketplace/xylophone/xylotex_bar5.png new file mode 100644 index 0000000000000000000000000000000000000000..e860df384edb5c0c7839db6c8ce15e6442b6fef5 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzBTpB{kcif|=NuUs6a*R!w$z(s s&u~t@lP;35x;n1;?MX|ZA|&8&l|5x9(+54KTc<#xp00i_>zopr042E_BLDyZ literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylotex_bar6.png b/unpublishedScripts/marketplace/xylophone/xylotex_bar6.png new file mode 100644 index 0000000000000000000000000000000000000000..5eee08be3d85cd4bb7a359e1dace6273005f0b6b GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzLr)jSkcif|=NuUs6a*R!wrrW$ syU_5RG1rExJJ%ol_CyA#1_>;9#jI7yG}m9f^D;=()78&qol`;+09H#JP5=M^ literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylotex_bar7.png b/unpublishedScripts/marketplace/xylophone/xylotex_bar7.png new file mode 100644 index 0000000000000000000000000000000000000000..fe196d1db38a9244b51288daa13b3654e1593073 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzBTpB{kcif|=NuUs6a*R!w$w`` t-*ig8lP;3*x+K2&?MX|ZA|&8&mHm<;)AiQ}m?nWlJzf1=);T3K0RTH(8^Hho literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylotex_bar8.png b/unpublishedScripts/marketplace/xylophone/xylotex_bar8.png new file mode 100644 index 0000000000000000000000000000000000000000..0548162878ce4baa96f150a163691326e68f778e GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzBTpB{kcif|=L{Jc6nGA7X!_4S ta|MHBbrAE}U30G|R2T696(NCuuZ-{cnRZU!;I9i3^>p=fS?83{1OPB-8vOtO literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylotex_bar_black.png b/unpublishedScripts/marketplace/xylophone/xylotex_bar_black.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9ccdb5c071335697d8e25fb417eefb31fa986e GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzJx>?Mkcif|=L{Jc40sw0qW;e_ om#l4KG`jkF!`?Z}Kov+Jq*hUg(f(@ZgL;slr>mdKI;Vst0Fk8_#Q*>R literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/xylotex_bar_gray.png b/unpublishedScripts/marketplace/xylophone/xylotex_bar_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..bc886c1d4653711010d51ccd77601746612b513a GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzLr)jSkcif|=L{Jc40sN2SYvT` s{xPn_{XPe(a_jkKpSA?5K>`kwbeb}mf^~MKg@HspUHx3vIVCg!048-Bi~s-t literal 0 HcmV?d00001 From 7ec97d8331864e36e25931dbc3add5ff1a2b7359 Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Tue, 28 Mar 2017 18:17:19 -0700 Subject: [PATCH 0011/1049] Added copyright header --- .../marketplace/xylophone/pUtils.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/unpublishedScripts/marketplace/xylophone/pUtils.js b/unpublishedScripts/marketplace/xylophone/pUtils.js index e133bbb03d..1c57fa1258 100644 --- a/unpublishedScripts/marketplace/xylophone/pUtils.js +++ b/unpublishedScripts/marketplace/xylophone/pUtils.js @@ -1,3 +1,13 @@ +// +// pUtils.js +// +// Created by Patrick Gosch on 03/28/2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + getEntityTextures = function(id) { var results = null; var properties = Entities.getEntityProperties(id, "textures"); @@ -10,15 +20,15 @@ getEntityTextures = function(id) { } } return results ? results : {}; -} +}; setEntityTextures = function(id, textureList) { var json = JSON.stringify(textureList); Entities.editEntity(id, {textures: json}); -} +}; editEntityTextures = function(id, textureName, textureURL) { var textureList = getEntityTextures(id); textureList[textureName] = textureURL; setEntityTextures(id, textureList); -} +}; From bc33e45d0ed67beaf0141bbe16df5a963f62ebb3 Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Tue, 28 Mar 2017 18:19:35 -0700 Subject: [PATCH 0012/1049] Update xylophoneKey.js --- .../marketplace/xylophone/xylophoneKey.js | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/unpublishedScripts/marketplace/xylophone/xylophoneKey.js b/unpublishedScripts/marketplace/xylophone/xylophoneKey.js index fdeddd9c2d..34c60635c6 100644 --- a/unpublishedScripts/marketplace/xylophone/xylophoneKey.js +++ b/unpublishedScripts/marketplace/xylophone/xylophoneKey.js @@ -1,8 +1,18 @@ +// +// xylophoneKey.js +// +// Created by Patrick Gosch on 03/28/2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + (function() { Script.include(Script.resolvePath("pUtils.js")); - const TIMEOUT = 150; - const TEXGRAY = Script.resolvePath("xylotex_bar_gray.png"); - const TEXBLACK = Script.resolvePath("xylotex_bar_black.png"); + var TIMEOUT = 150; + var TEXGRAY = Script.resolvePath("xylotex_bar_gray.png"); + var TEXBLACK = Script.resolvePath("xylotex_bar_black.png"); var _this; function XylophoneKey() { @@ -43,7 +53,7 @@ var newPos = Vec3.sum(_this.homePos, {x:0,y:-0.025,z:0}); Entities.editEntity(_this.entityID, {position: newPos}); _this.timeout(); - }; + } }, timeout: function() { @@ -53,7 +63,7 @@ _this.isWaiting = false; }, TIMEOUT); }, - } + }; return new XylophoneKey(); From 8ff4eb0a965208da7d3727770d6d49dc6f1f0c3a Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Tue, 28 Mar 2017 18:22:22 -0700 Subject: [PATCH 0013/1049] Added copyright header, expanded tabs to spaces --- .../marketplace/xylophone/xylophoneRezzer.js | 133 ++++++++++-------- 1 file changed, 71 insertions(+), 62 deletions(-) diff --git a/unpublishedScripts/marketplace/xylophone/xylophoneRezzer.js b/unpublishedScripts/marketplace/xylophone/xylophoneRezzer.js index 427d918f21..be237da0cd 100644 --- a/unpublishedScripts/marketplace/xylophone/xylophoneRezzer.js +++ b/unpublishedScripts/marketplace/xylophone/xylophoneRezzer.js @@ -1,3 +1,13 @@ +// +// xylophoneRezzer.js +// +// Created by Patrick Gosch on 03/28/2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + var soundFiles = ["C2.wav", "D2.wav", "E2.wav", "F2.wav", "G2.wav", "A2.wav", "B2.wav", "C3.wav"]; var keyModelURL = Script.resolvePath("xyloKey_2_a_e.fbx"); var keyScriptURL = Script.resolvePath("xylophoneKey.js"); @@ -8,83 +18,82 @@ var fwd = {x:0, y:0, z:-1}; var xyloFramePos = Vec3.sum(center, Vec3.multiply(fwd, 0.8)); var xyloFrameID = Entities.addEntity( { - name: "Xylophone", - type: "Model", - modelURL: Script.resolvePath("xylophoneFrameWithWave.fbx"), - position: xyloFramePos, - rotation: Quat.fromVec3Radians({x:0, y:Math.PI, z:0}), - shapeType: "static-mesh", + name: "Xylophone", + type: "Model", + modelURL: Script.resolvePath("xylophoneFrameWithWave.fbx"), + position: xyloFramePos, + rotation: Quat.fromVec3Radians({x:0, y:Math.PI, z:0}), + shapeType: "static-mesh" }); center.y += (0.45); //key Y offset from frame -var keyPos; -var keyRot; -for (i=1, len=soundFiles.length; i<=len; i++) { +var keyPos, keyRot, ud, td, keyID; +for (var i = 1; i <= soundFiles.length; i++) { - keyRot = Quat.fromVec3Radians({x:0, y:(0.9 - (i*0.2)), z:0}); - keyPos = Vec3.sum(center, Vec3.multiplyQbyV(keyRot, fwd)); + keyRot = Quat.fromVec3Radians({x:0, y:(0.9 - (i*0.2)), z:0}); + keyPos = Vec3.sum(center, Vec3.multiplyQbyV(keyRot, fwd)); - var ud = { - soundFile: soundFiles[i-1] - }; + ud = { + soundFile: soundFiles[i-1] + }; - var td = { - "file4": Script.resolvePath("xylotex_bar" + i + ".png"), - "file5": TEXBLACK - }; + td = { + "file4": Script.resolvePath("xylotex_bar" + i + ".png"), + "file5": TEXBLACK + }; - var keyID = Entities.addEntity( { - name: ("XyloKey" + i), - type: "Model", - modelURL: keyModelURL, - position: keyPos, - rotation: keyRot, - shapeType: "static-mesh", - script: keyScriptURL, - textures: JSON.stringify(td), - userData: JSON.stringify(ud), - parentID: xyloFrameID, - } ); -}; + keyID = Entities.addEntity( { + name: ("XyloKey" + i), + type: "Model", + modelURL: keyModelURL, + position: keyPos, + rotation: keyRot, + shapeType: "static-mesh", + script: keyScriptURL, + textures: JSON.stringify(td), + userData: JSON.stringify(ud), + parentID: xyloFrameID, + } ); +} //if rezzed on/above something, wait until after model has loaded so you can read its dimensions then move object on to that surface. var pickRay = {origin: center, direction: {x:0, y:-1, z:0}}; var intersection = Entities.findRayIntersection(pickRay, true); if (intersection.intersects && (intersection.distance < 10)) { - var surfaceY = intersection.intersection.y; - Script.setTimeout( function() { - //should add loop to check for fbx loaded instead of delay - var xyloDimensions = Entities.getEntityProperties(xyloFrameID, ["dimensions"]).dimensions; - xyloFramePos.y = surfaceY + (xyloDimensions.y/2); - Entities.editEntity(xyloFrameID, {position: xyloFramePos}); - rezMallets(); - }, 2000); //timeout (ms) + var surfaceY = intersection.intersection.y; + Script.setTimeout( function() { + //should add loop to check for fbx loaded instead of delay + var xyloDimensions = Entities.getEntityProperties(xyloFrameID, ["dimensions"]).dimensions; + xyloFramePos.y = surfaceY + (xyloDimensions.y/2); + Entities.editEntity(xyloFrameID, {position: xyloFramePos}); + rezMallets(); + }, 2000); //timeout (ms) } else { - print("No surface detected."); - rezMallets(); + print("No surface detected."); + rezMallets(); } function rezMallets() { - var malletProps = { - name: "Xylophone Mallet", - type: "Model", - modelURL: malletModelURL, - collidesWith: "static,dynamic,kinematic,", - collisionMask: 7, - collisionsWillMove: 1, - dynamic: 1, - damping: 1, - angularDamping: 1, - shapeType: "simple-compound", - userData: "{\"grabbableKey\":{\"grabbable\":true}}" - }; + var malletProps = { + name: "Xylophone Mallet", + type: "Model", + modelURL: malletModelURL, + collidesWith: "static,dynamic,kinematic,", + collisionMask: 7, + collisionsWillMove: 1, + dynamic: 1, + damping: 1, + angularDamping: 1, + shapeType: "simple-compound", + userData: "{\"grabbableKey\":{\"grabbable\":true}}" + }; - malletProps.position = Vec3.sum(xyloFramePos, {x: 0.1, y: 0.55, z: 0}); - malletProps.rotation = Quat.fromVec3Radians({x:0, y:Math.PI - 0.1, z:0}), - Entities.addEntity(malletProps); + malletProps.position = Vec3.sum(xyloFramePos, {x: 0.1, y: 0.55, z: 0}); + malletProps.rotation = Quat.fromVec3Radians({x:0, y:Math.PI - 0.1, z:0}); + Entities.addEntity(malletProps); - malletProps.position = Vec3.sum(xyloFramePos, {x: -0.1, y: 0.55, z: 0}); - malletProps.rotation = Quat.fromVec3Radians({x:0, y:Math.PI + 0.1, z:0}), - Entities.addEntity(malletProps); - Script.stop(); -}; + malletProps.position = Vec3.sum(xyloFramePos, {x: -0.1, y: 0.55, z: 0}); + malletProps.rotation = Quat.fromVec3Radians({x:0, y:Math.PI + 0.1, z:0}); + Entities.addEntity(malletProps); + Script.stop(); +} From 607bd88a507c6a40b82f0908e66b7966ce85889e Mon Sep 17 00:00:00 2001 From: Patterntrick Date: Sun, 30 Apr 2017 06:06:18 -0700 Subject: [PATCH 0014/1049] New audio samples and mallet models. --- .../marketplace/xylophone/A2.wav | Bin 187288 -> 0 bytes .../marketplace/xylophone/A4.wav | Bin 0 -> 79274 bytes .../marketplace/xylophone/B2.wav | Bin 180044 -> 0 bytes .../marketplace/xylophone/B4.wav | Bin 0 -> 69862 bytes .../marketplace/xylophone/C2.wav | Bin 189454 -> 0 bytes .../marketplace/xylophone/C3.wav | Bin 177814 -> 0 bytes .../marketplace/xylophone/C4.wav | Bin 0 -> 111906 bytes .../marketplace/xylophone/C5.wav | Bin 0 -> 71594 bytes .../marketplace/xylophone/D2.wav | Bin 190076 -> 0 bytes .../marketplace/xylophone/D4.wav | Bin 0 -> 118296 bytes .../marketplace/xylophone/E2.wav | Bin 189518 -> 0 bytes .../marketplace/xylophone/E4.wav | Bin 0 -> 115706 bytes .../marketplace/xylophone/F2.wav | Bin 188960 -> 0 bytes .../marketplace/xylophone/F4.wav | Bin 0 -> 108890 bytes .../marketplace/xylophone/G2.wav | Bin 188960 -> 0 bytes .../marketplace/xylophone/G4.wav | Bin 0 -> 73320 bytes .../marketplace/xylophone/Mallet2-2pc.fbx | 844 ------------- .../xylophone/Mallet3-2bpc_phys.obj | 1060 +++++++++++++++++ .../marketplace/xylophone/Mallet3-2pc.fbx | Bin 0 -> 96912 bytes 19 files changed, 1060 insertions(+), 844 deletions(-) delete mode 100644 unpublishedScripts/marketplace/xylophone/A2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/A4.wav delete mode 100644 unpublishedScripts/marketplace/xylophone/B2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/B4.wav delete mode 100644 unpublishedScripts/marketplace/xylophone/C2.wav delete mode 100644 unpublishedScripts/marketplace/xylophone/C3.wav create mode 100644 unpublishedScripts/marketplace/xylophone/C4.wav create mode 100644 unpublishedScripts/marketplace/xylophone/C5.wav delete mode 100644 unpublishedScripts/marketplace/xylophone/D2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/D4.wav delete mode 100644 unpublishedScripts/marketplace/xylophone/E2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/E4.wav delete mode 100644 unpublishedScripts/marketplace/xylophone/F2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/F4.wav delete mode 100644 unpublishedScripts/marketplace/xylophone/G2.wav create mode 100644 unpublishedScripts/marketplace/xylophone/G4.wav delete mode 100644 unpublishedScripts/marketplace/xylophone/Mallet2-2pc.fbx create mode 100644 unpublishedScripts/marketplace/xylophone/Mallet3-2bpc_phys.obj create mode 100644 unpublishedScripts/marketplace/xylophone/Mallet3-2pc.fbx diff --git a/unpublishedScripts/marketplace/xylophone/A2.wav b/unpublishedScripts/marketplace/xylophone/A2.wav deleted file mode 100644 index a5e42b3cd6988e1f365d02a2668becb25e423fc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187288 zcmeFZWq1_(*DYAy)tV6E#2~o4`@!Aa-Q6{~LvVLFxVuAecPBuIYkQa1UGVj+W&h0 zf8MvIlmB`B`Ty#F|3ne0{^v#h=QE1V5R%T~#o)6#e)Z`22}SQoEY`-Wvy4{?S!<;> zDciV1&3{TQjacRPjIpbG+rg<(n?n`H^1H!9?n*EL# z>QLSE^7JOFExdlw&*j6by{yr#j(>w5b=y{qEqLDV7!l{|A&jDuEMeAdn~Kw|ROx?dtbRr~nzOUUmBIZK3jS`l$}#;`BN-(|m>|9R=}Ud~4P zB({%Xz45K}TmEI?zoX*|nPT4*>Ji(Z2vzK5;erLmnQjT;xyN#zxY{dwxjp{H0&m+| zaUrBr+oO(Ai)l~PL&|G)8`aIY-EV)u2LD(~qPcVaBhgH0N0r1{=W4bte?7W@e=xUz zSgm{$M+@V;b6jJb8{PN3%{&M5?xZ~+rEPKlo7*d=Ro+-fkmE$o{Qi0K~HJDd$I5$=d)i<~TSuwcvZ1^$h= zHhN99v|3sjBri}`QWN-o)-!&&)*`&1Z}WY1Ja*W9--)7pkY$jyiZ$JG$JQ>;5K+ER zdg13qUKWimcByc|Xgzqor4y0prgJ7_*3IeVIx6fDqrCO(uQTQ*4^DdW`(et=lv%%9 zCS6Wi{agG!K6!G=uT&wuc+MO5a{Y^GeEwO%#{5rB646IE;GAJUYX8T+JEuqH(e!fZ z9n)e{H>QkCu_u2_K9-u0c{Q)6>#D1neST)Al)b-$(@y8b%S#Qf{k_3)1?EOqE|gH{ zN5LgAy`nP1XNTMg>JU^TkjuB&Jb~G-9uZ4Q549!iR&x{EeoIq+4Lwf3FDrtd5GK}@ z8)<>GZtR~gEqGg)9#$%BM(B*NLlI+QN*4MOZ4UGETgu#&n|a>aXXG}?&6l?*?@Hbb zdn-qrJtF6Rn)Iv2_uMc1H|@uX;FN z@mAR75V9_(&rUCtm6%)DvCzION6grfHYBZRhAZoBuFHPR@!38&?{)5%Jl(O|T}+sz zK4&&sONO+Id0X^d@i|443Ra9f8+J1!H@HKv6gW6wxy@v%#Mzj!bbGoAJ&EqiTwr-a znqi7zH#1P*B;NH5^2`*Ce|#^UC?Eq+2yk%vkPZe%Wjxm%c5& zEYA+t62~a}A-mnN)m6ds+WSfvB*$wNsgm3TQ=p$Quyk16sKX3SwnQN{JTO1${Sdl4st&pDd8BjbL?zRXcsEwip1Vj6-WCqx0se}P1elJAn&P{#kSs}?yjzr zuCMN4-WR^>LJ=`kTrJG@ao%|MC6}N3w}%z;6rH%hq#J&iirbUtD4nGG^tw=n*r14iZlHz3x(vxVlp^kE`Y6XZ1UkT2RZ$eED0GbbWDB6!sCyrD0=(Xq~hU(@fev$c?1rH9p zSYUr--RQwF4`Qq_fl*R;v5?C7Z~E1=J~dY~+fA!YZ;U7SqK2kyaXOjUtc_Q0NO#0| zQ5LUBTjhnyCY9HN$ai$8VU($)^{y??cHg?pyp}J=o+O)Sk#cXLtarV;m#eb#jXg52 zcuw)Gp&5nKN2i6Py-015IxS^GGM8LAxnIhzv=5n2bIZD}`>H67h-LH@_7<1G`Ev{_ z)1~QER2IpQH}%@uQ{}eYQXVDyb}^MoJ(O}RB{20%sw-`9Mz1V3cdBEf$6uPH{X<2wzqx~k z-G)#@Gp;k+of$!IqJEPd$gji%f+6PXy0%+epqeAHxsm0QW^x_%+X0Fes^1P1j9!2<9DNHn` zf3i;v>3n(PW&V<3D%Xr1#QdU<((CDobOrhm)s%Wj_9sKhB;q77nWzO_zz`*g^+acK z4b_Wz&V4iXwo>^<1U3rk5w<-%tbhArLxRgiKM1N6~q zDfxjg)jQGs)A`Wh=U8I*=2gzCoJ-`K&Ki>0C}UWlt)`>KbY3+C8#-{e*@0{|wlrIojbSsG8O$fT0NtN@LXISxlfB4| zq=Ss3`qSr_Wn3b^#k|}$Jzu%NIl=WqdxhN%n;Nzuw0_9ZASHjNfGhs7esR`Y=ATBl zAs^S0`IibO*Xp9$SeYrE6a?>dPh0m^*LYW&OLlMdZW69Y3Ce8kfxd~537&jHG$y9# zJv5inR$eaN_F27)+!b6Q&MJ<%_T;=ac?Waf=X}n-mvueUlW{O3H{(lYpX`3Qx9t60 z<-G+&e?`{rk}a9JTxg-iH!Ffd- zhg?&*?rTTl?JYYjCoIb?bu6#U?ai-Dy-cd{tZ}Tdkns{< zknd-h!>wa4F+8)Ko=4xK2Q&THf4LI;Gvf?%l=YyE^)H_;k*dON4MUb{Pc(|m)) zGtybPm-4T&S*fY)k$*@wsjfI%c;PGUi}%_+O*|XjNv_JSjZV(F)Dh`;WZ!6yw?DCW zcGP#qyPA6X`W_&<2>mJ9o>|LH=Q&d?b0N!POLgm1>r(4DF!w~uR10s}WG-wzWvXa8 zV)Qfi;kOv>aLH^wb^wz@Kc*RGAG4W##Z}=?7-P)~EVr%CY+L)=t zy9w_t=87 znB+X;^0}*c`}xKQ-NX>-h-8uL%1z}GvO_v5^_9Y;ui}1jj96843kQT|LXvN~FUq^Is7NN3^XK0i2bxb>&RECVa%`3T+W0l`E9~d6owD_^ zd8|{c-z#Gewc3|B?%G%=Uz#+2pUh8@O8^JvRLYhRmU>+2Wqx6yBgUsFHQ@0hKT z?SZwtb*|-<`JU;n@iflfd~O!I2AL~LU!rDG6RBO4kD5-0GtZg%Y$@&n7i?%`sAW*N z6z41elEu<1C*7@0p)~pRM~}(CM(^PN(!sIlGn=}*&6%bg<7Y6Mb=)L&1T%-eLKUK}k_*YX!RHGFy`15?Bw$JCe^6tV zS;{ro{jVq4>n{`(^GhkxX1R=VSh1+R)m`dK)va2zU@cHHXnE>0b+0;3t)p7hB;_%# zY^9cZOP!&O)YlN`2lR8MGxyQZ)VSUB%>3SR&N|4Jj`&9VP4?^NSHLg9*1`77TERNU za>4x8^x627KZe|O2TD|;TT;tOk=Q~EBL)-8i04F6ay2QEy{U7QgYu`%^bcwk6++D? z-w^>sLw$%gPhF>Mm$ynQ#PLudg}sV9(e=ieI)a_iu14;e zp3B}`U!WK(1LCsihWh$@yL-C0`?_X1uQ^J`^08q1l~(Uq7u;#Uv&}l$ZAv| z9mtepdvWoGJAAUyVftx4Zs}-!XDw$NVw(-jY-wX{2du@ctI-wmnai7M7|Zg3hCKEj zvz4Ak4JRiOyLFc~L5t9wYPQO0)wLs|E``cS>49-=?hhU2Rv)YnQGWwv}z zqNM7GZn^KU_nzm6n{ron&32|bCOaxQVjayKdmW{nznyno3GS~R+E+>FFD{jK%LkOT z>QJqS{!H&nBob}NQzS|KLrtPKPWIuVD^ieD= zP8V+aH1w*;o(pc>)zkITImlViX~b)!GsU^m)x+Jw)5$x|w@J7yrb&#FU-id5d!er+ zs*q2}R@6-@njZVNAGv9Tw$tzN@hrL}9ZAbn7UiUZ=x+2?x)$?^S;O|^DjNcM7ysB8 zZ>nd0XKrcPXZdV#STZe-EGsOPEf36f%sWiKj5cE|UkF^^!91pSQ`5;lL`S`!wgQng zQ+~+XKEWUi@!j@@ zA-+%U7Va0WQLfT1e^-pFm+QW(r#r;s_1L|-FG8#*4UprM_3CDAl|GiJi*vn)szP6& z3o~<>#|**7vX$8iY$Pi)&zQ|jf2IOsWn@~XqnVz}Ii@IkmhHe1hRcTWd{N_T<0zBU z)Yp94oMP6@qWQCVkGZuu$0_vPx&fmf{zozwpD?6^yEp_ZC>=SNCFf zD|bbAZTA@WV|OdWcGr8q>4gXjnL?g`@}ih{#>`G&AE3vU7J7qsj8W#S;YfND=$nafOD_AT3p+s&nNp@zza+J^Fm{DxHS zBsYdD#bvUm+4<~Xwii2sUClmbL%C_(Z?3E1nV~L!nCFaLjO&coj4zE(jc1H=ja7}G z_(A*^^yj7AEjESm(GtALAH-w*qIOh0uH2DxrRrdS#l)AwMq#Qj4m@y|@JJAaGKhAK zcuD+(NC}CRXvrrgix0(p;smjV=o5|$Jp~r5xSub?_sx6GyAN#YwKv2!$H(DoW5pIy z4Y{gPM{TOL)jJR^$?8-nolYNSy09*GHs|6x8}=DK86*P-&Hc-8&M*U!W^y~Z&Rigu z$X;dtWsk78*bFw78_C_^@*9R5t{GUq5kHAv&+p;4@o{_y-jBa*Xa!fKIv3BrV>qTb zU5ly@=22NMr4>`lDNW=F(nT>u+$dBOa(wrE7kxK;AAFjxyf94IFC+@VVheGaxLdp_ zeh^c|Tro%dExr~nz!4iDmJwaT1!20-PzVw{zI30%7btWTP71}v8{!zLs+>LyrZ<|6pfvM#Fsg+ST|8{1*NY-s>X1D_?+rV~8`9GQ8s!a5XuVeaW6d zgeOs**=z*YiCe=x;dHKyp`Br{VWgqIp{XI<@Qqu^73a>eCE0j5F0phcY6`iM*sAZ* z4j^;altHKGykO`22;=!dBtC5G8g;G`GbJ(Imx6Rirvn zZKOU>)3Pb z2iD65awWLRxQcKl?gx8-?GDAWo(X1_(OFa-Y7TjZ_^f+1KdrD@L+LEf1WpJ-7vZ_D zug~iH;JxO(=zZkP_D1>o_zwD#KrF0Gf&gFAkaejOJ)PxhbxLYT!0fa63RNo zXfu^Gl`VpG89GzmvYUxNRHyN+4t;ac0D^Bm{S7y8q9L+Z{|ER zn`y|f;LCHtn9oqr)Ku~|rkNG=PTEj)B6{;`)TAo(6W;pT`968adkcDVJa0U&JwH7@ zkH5F9w~u$X*Y0iMJK{5;P9FR=|1Ba{kZXbY_mkJiALYu* zJ|zO|vAp&|o2A#pu>KA?gDORTr#CPi*%0nCx86{Lf5_K29yaR62Bs0F$)*9ON~T=n zc4Gr$5b~IZBo=F0;ff>WJV2Uyt{gysRPo>+?g=rUcmg+-^ zI77HL#ZmA`B{R^2;N-52iUdj+AY6!{izriIw3Tl8_- zJ=LnVSJuhzq!6i(ctYTXX+F}o-`m3*>y3_98ajXlXp8Rw6X87FGPqJ{BgcQ zrHztVo()#qMmeH*lyYhhbsC)RBkDsnS1q8m)|O~bwMc!oo~aKYl8I5Ims~!~VW{VT}& zq(odIrV`b$2XIGU0ku&aO!<;FUW?Z5;9h4cW0fqqkNgC>c$a7smmqhWeC2WO)_MDR z8+vPa>m#xm-oxHxZ&}|`pWQb|_$dq)?czLWnWJ(Y<*Cw6eXQ2dc4|JYnZ88|fo<5iPOVa8@6Qdzq!3 z*XBXHL~A+fMRk^1TXie@!6|>q<7BTiU6RDvA|tLrFSzC#;0s1aKJVS(-Q?W`hvU09 zzptC`sE@}aGZ{=jU7RZU$;ad-%1>pIN@@$CX2$6s^$NsX;w~~(mh6o?dkI`Cglb7G zrXExI=|S`rI)E9)JYtHli`h)J4R@Xk!R+=8JeMqCq= zTELPsa$m5@gHnBPuW=$T9uS%eF2pewPFyr9)Py)Ip&M-T{q|KCHVYJbxes{@l#jy` zNL3c7k=hxpo}QrBA&wFzM0J?VAY-Yni0KUVg`zRP=udB^-=G6@Vzx5Bn9}SF_7ND> zP`Db5p{-%7;in;n@6Ipb|K+dn*ZI@@I({Huh<^b#;^8K78EjYfHn4FyZKrx*K2VRm zO4K3l!`n{BT`j47R9C4jRGazQ$ zCCgEBsRvMFRgtSz^m({!I$e}$i|NH-oHi>?&us8xH(L&T>LB-%3paE`bzVl#Blr+_ z$Wgq7&oo>zOf*CTOImU-*v9NdCX$&?rvMkvkP+l+g2gn8)#EW0y{YyCZroI+L%HzE zSNVdxL7pP_lAtuGZj>1g<8EQ1&`zi>l)_aFA59ki6;jZ_ z7lWO2g?rUb{vr=obY+`bO?$6R)Xg{nC80B8sdy@n`iEXYKY~sx!L(;4qbr?5*Un~4 zY;m?Zdeu6__KP)g6@e5B!IVF6G8bj2Yv=~_m};1A7;ETis9=z}i`+ntCnpfU^v?P#t%LSW9jo%{QKb_U*MwQxHwSL%)PB|+NL8h{$8`5T=$3Us0)EpY8zEl@Et16X~ib$anFL}ft;$!iwxI8g}Z9xs2DTcc06RNupe6SUQEUarAANF;|+=~O@Z8C{lH z2(Qq>)&o;o#_nU!vkB}AFv9O_5}OK!pTj!94rP|)44e(@Kb(sJhb)3C8h;`&!+gMQ zW&5)c>{DhmnAJKukX}o1V8g%Rv0T?n>$~Bgtye?T{Yq8kjXYH@Dkn;NphN3}>9U9- zTg(ExcZ;gXO941>1*M`=F}z}>NW__6@|W^Sf%v;+rN+`=X_a(KlBBxw3i+p8PdTIn z!HF=zuL{xk>y_Z}bOADsrCjg_Q-JoT7@BR#E(H_(!78jDm|d*CVWQfedP}w;?-MnMV|tXn zUbARRRinCAiBT@eU1eQ5i<4CeC+iz{{R!0A9`O)zbQc;XTV$jHQUyfORT?Tyl;Xg9 zH%fb@lhRG;jg$o@QUSeio%~V`RQf9C6@PW2ny9wb9%_yB`+7^_9nqUi`y1N?%*eW9 z-=Y9J5_&TO4DwIq4dh0k&IWSbxaM3{RHK=5v0vFcP%^97$*9;yn3)E$3X{w{Wll5e zz_FS$5ljYsoE}C;&=05~lm_21gxp4i5*u`zzEoqh1uCnqQo@x}ax2*`?UXuUBJl$% zdc8OcN_rG(ZWa{GQ7F$0(TvLMC{01lUO+rK5+_H)S?C~-kypy6uCoxKRr(Oz!%8|x5^>MP&w3a`WM}vxyD4mLAc4PY(=gYHxmkME4LlzYB4vF z>%rCGqBw>91aD*|w02!Kgmu6@ImFCk`Y<)2S)8cr{qz*NG3^JIwFYxjC%J{JNhdG>^)$9A^7WHB$;?Ei!jP$J z=pB9OiZn}qpbmf$SEm&63OSyPC0~N^ z5qX*i+-oH^5bFW;dx(>uU2fs*6_mP3Yo({iSbcb4r{rWg1W`?c5B@=6)vD@nbtmv6 zpVn4er+w05!A>9Q(cr4zi3aG}0n{8ga$V^=bV+6nlgBg#9{gfs;1$dP%R0kd<*s0k zy_1{I_2sHTU48^}9)Veelexf5L%vje=MpHFAUcsc0zb1pWuZQjd&nW+`I*E)q9>UC z74Q*C->cQu-m9ZglRK4a$~*M52>B7*ovM-`CLoqcVoyZZ1P)dY;Ng1l8jz(Ry1_Q- zn-nb%kPpcja!F+b`h61gSSNKkvL&eHv>|Z2zi9>ZUiuzAO|MAA5wGFF&n7>TRp73A zs4ny+I+&RR*D4lOd6kt=m3^UCwsS|g6Tte-h_pAfGsnGVx3E2c8Xs}KS^*7j(bMV5 zm}{S+#!?l)udb4DWK+_Q{6Op^1`x4ClD-R_&8T121_4RVs$HfcMG5@pCKP3#g*r}a1+p}S7K^3 z2bj_li0NhTvP;nU7L^9op!}ma<^6IOOm81a%cQnIM7#J@Jc+5;8hCgcz@%=8zeFp#!wmS8 zq}&=BCJRhI9yzO|&WFDrt_{!*YnfUpxa)`E^T(hebZvjC1GSk-q>9jE z=*u(-eY_qVs{rz{0sPSmN2dnYhU*S4(ur#b4~OMG!x0(HmSNMGJxm9NhR4{4HesGN zkjh8hAtz!+@q^e(bRmL>Px=mQN0iX*aQNqHO*FIiTwSfU0o!`0ECAaQF!dWJmy?~+ z6=@;RvLsxfEMWf=FU^fzNyySU(g~nE>3Y^BReX!8-ke z9zt{_HV`ktjsGEMkr&8ZvMAM$+D5&j{OA@?#`od0)@NqHk#sU8*xu|4_5%AE@tM)v zBJnbF9(W)p*g3!v6MG-dM>!@DS*uKcrxsCVs1KN?l_ozE%Za+!&OW7&#&pJsxaMgs zwGi#MdPMB|l7YOH0kr)i(o2 zSU4YR;G&mP7Ac9CH*J7J&`jG4jn)E_rgUhTX<#8TQ62a8IGF?`(+U`JhDyRLrU_h( zBjCptrY`8Muby8p!d-8gFUX*x@b{aIuzPswX0fORg{0$6wPU6Ib52CN;GC^U*t>jMocd{Vy7TPR?)#;OSh$S(s4}RPokqe#KwUl#h}B_ zMLmjORV$V6N=0bCG_|p|Powa!T+@Syk;E;+Ms^1>|0WAjy`b_RP;M%QZcdM*Hv%C) z(LOqesmQcphBFJ8oy%HNEa;nAN9!hb_e3$0}E*YMe`Q3 z^che!m6Ske>)+sjHxSuQoT3F_%%kLics8OFwnAFrYJ*sN%Ol}it;ekDrR)U<>8LD2 zWIQ%Bcfz@9sBP6;aQ2VuMq&_glL*Fc+%=L1cilj}p)7O*dOW=yUH3Q8F&xfDBc>zX z^(ZK}*~r{dW+ftwXV#*duVj{BPBn=c0u5f5iNzL0B7K&g5B=g#zoM2?^(Z^Jn`}Wk zaR=*RR=7g1sDITKYgM#VbqBgxu=)j&O#+*URVZ||7xGp3HoNf7SISG|`End`HwUlz z*qB%@ua&pS2j%nfefhKOkZnp?sPb8uIVNJR+gaTVHe5oR21hPNpQgXoOA-sgKq`~V z$ggAxY(89}M5;190+BtSb7&h=5>7An9l&#^A+EW&=732}0jdncE>9Qqg}Ok*D8>S( zF_FGY@1y6?ov~-;}OqdW(BTg z$l6TAIf&`ZG(nxlGX9t$rqVBQDt7{P1|Z`Rv>RU0Hfk`C--*b^psOWf?%sf~>pS%p zx=%X@e~{5G;r$d-lfjY3!soFmsW@YYp-SR#ipHW6$H)^A-x8dN%ob)NDsd6=Hx!Z8XG$>nFeCeh$~}O4F$~C40=`uebscp* zoT^2csQ2V9au8Vr+H*J2jj$03`c!z1U$m84J@{CM;foYNMeb4tLyORGMlOS0EJQ@Z zal!^bb&ru}Acs5Uv%rgFS(hV}8cJ7XD)#9vD_<2&iG|-iUfrfXz-CAhtt+-D9-v>> zgNnJQn}`m?cJQl;h)5(@I3P14ywIXKVquR3D}( zQ=0K(9Ow;5`d_haLp6>^RDY(tLy$epGv$9#so!Nqjs(jb1k^aCyjK*Zu-Xb9 z@ox2r>QxKD$&7D6aHdT@y2zTTeHgRI0 zkoz%HQHdK6*EZyB1(?ZjxIxvRTmR@cH-&S+br&|C$4nx5h;kb;!*2_oTMl?mozK*k29jy2Q zc8jV2NlrtD76S)di%QGEc1Ts=;|RpF1YK)2Vw{7iOAol+g~1hnfMc#fr>I67=`Xk| zGvUe>pfZ8CE6AQuFf#EJ4*M{o3ZBn=rf<^w=taPaPivE~C!*keEks4-Lroq6N;Xys zfMvZyzuqmclINioXCP(b0<1QLpmS*lR807ry7Ile819#0;W2*nX;hL0^bk zi9%!-wfR~rI6lABW9k(2Hk@b+&*#dLu>bLcnqRZxYcbya(=?SdQLKnu{4)eB&d-PBU5uDk`_%>x&#ri7qx z|H5Y64McPTz55Kj;HUBr@Tri$^|(U0ip`m5^s!Z#E|FktQ*p+!u!GebC;73if)x+M zX8v8mfvu?4vs=*K^fcqzQ&sqmq$(w}J;ZGwAK8nsyqeXIt$cp>D> zLw|s~yb6e4i6-f1)JE{MLR1=9_E@qqrZKnvp0N<<&Qq9bwbTpf+1gF0`XO2^Eg!h? zEnxN-wW%7Tiok_4a7D)|?UX90OAeKp2ITmJdFD4cRrUb&3o7-Le##Q%tnx$2r#1#l zyP(?D(%5x6s3mDp;N2Vb7rFti`*`%T_XI;$B>R%f$@Ab@Ec#GKaHHK+0#MR~Cr?__ zBY_e7=^L13rqW)h8xvy#E}9vVanV2EFCV9u15Inv7Wyl&bu6Y#5_yxH2YtlhX{VKc zm1iO};RL-dCWGI#Q+TqY8zvYARO2=9he>J&wE|9?6M4I!Y{d+7D59&altfp~rj~=D&SHJz8psm$jYE~fcGTWav=QCF!?loy@5EIL(xdKz$IFVyy3%tk+;izQ+n^${Q60>|7$&!Bt!MaQ4e zL9?kQlnp-PCQO>b$#3uq`eHvWO+TSeLS!cWqjm_|zBQbFMg6FrQ`f2!)Q-^C;i$+| z<%Mzyift7(mqws6+bE5oOKTvano0wurP2d&Ed-L@QhqBYIL?DHzkRN<=#Mj@{d`(g z{2S+Vhh7GlwU_t|%&$+5!^wC|I>|6>0`$dc*@ej714j&W6zZ%g-uXy+CcTW_K<~m7 z`WWIl4yCgfQ7!rNEFs+pQ)vo0I}Kjd4(OOn9tHoXK)NvToI+H?bnvD=UvH-8)4zci zPXkUzYhEb*<8Ww3s%_QEh>TJ5lrM0yFTs`ChUn(QpBj%?hT$54DxHR?)&oUvD4!Is z5~|jNYqbd{O~TZDxV9ft&q%!|b{#+I!9+)54e=OL_^QB;T(X z51q3XzivW5KY$*61Gt!^h}e>=fJ{#X?mtCjrL?}4o2R5E2GKfOZ zX)DPaWHz*QJw&#cIz-)}zG82Vr9;7SE7SE*lkK5Nd!o5x6&@cq;4~xfGqc0G=iKml#EqgR;J;PY3s5_2=3aI2V;PR{Nr!fge8t zk(C4YC)Hd;_DZ=2rhFbz9LKisQT%!e-1jOr37;WXsmPX5jY9Rd1M;jvHGfeltsEkY z*Y0VeRsj>%gHYB5;D)TnJ|~BhHWAqPiR6I#J%8+|iyxiI?K zd8q4_S~w=VcftE6hU>zi$A^V1|eikZWJ{W!*#1#k^^(}b@ zPTvqrbc5g*T!&-Onj@5;X(%gnEM!U%@^|IME8V za+XLT!pN5Jicg@Y8L=JEn_7Ug_5fa%OyvWQuYl@n2u9z8{s;N1jEogP|B`UJUIRt< zQOl6$j^M(f=w)Bv=5GeOY6sp(lV9OEpr6e-vXYh9q6_j zPJcIW+{nN9_yo6{b>RC0{OKDiQBnNVB4CT1Fgsm_yODs|i;kVm`tVT~f)78_ z9N<^=_2J+lH}nknj*ZdP_7QK8wen;?-05p%I$Zu*;OvXxW<8*OL228Nq0;DBwUMuS z$X`WNXgK^gfl8*Hqi(mOPYeWOEQ(oRDtRB3I1e-a8pv24uy-GrV|$_)HYi@>bWZ~l ziGrtk7bj!bf0)P}Fu-YuttPk#k9~?{)ZcUEA>w<0TKsdyva#cr4;5P%e`_K%!b$Y8 z9MuNw=%7soB3=8t=~4>3bQ z5s`!&d)oVP(%PdQRqZXZ76-jp4qPM&PVYA4t(RIKN;{vbK`$qvx4lPHAMpEcoHG4y zWObnF{zP^fz0e8lsIK+G|K%VY5W5zPYUmI5>ZJZ2xF1WjfUe#O_LxZokTuBxa79jo z^DATw)sPy5n%qNOgZGn0Nt6+;R0LfRQN zh}{AYT<9aj0_e^vc!D$oI~zOnDcB$?q0{Kt7jZg9XpOakng)(^6-sor+FxykP8Eq~ zB{ao_Or-(mGn70cMSaF*4`*-O=-25L2c_Y1XS+8ZE#3^vxrfH_{%e}Oxe zMYo;~HJ^a4W+N-XS)GZj-6fNO|3y(>1K=EQ1+#cSeWo&jCnPdu!DWK0C_=}5hwE|f zZ#DMEorposJ_GMplS6?Xp-`QVFrk}{PF))N6F>B;`UZV0+>m03><21nD_D9bbhi9( z58lHy+<^(iaP)wB@L8jfJ09IzgJPjD0}cRwlmp&({~Osc;9?GT+N&aG3$&xC02y4r zCD_$=+`mlSAH1g*wC6#bhHSzQY^Ve3aRc7lJ1{MO@cw3qZ926UXmS}C_yIY}!t)?* z%(m@d%s+r1x1q{5BmM!HaK=&;)bwR?9lXAVV2uvqAvQFoKv5ULe&a`MDy`CofhQEg zK7XQiUE86})_Q~W6++j}Ko%~-Ib4Ew-bZbX>{LKy#(;H&s$s}tVZ>DjpYI1n7Y|+c zSj`0Dmxnr^jcR-j))=EV$5e0!5I6@;aV=~$EP*8-X*|4l|8#HNGM)*u`FpqiQ!Do=OOl%XBh66GMJ7o_rJqy$S!DM7J_SZ7;6KrZ>YPXa)f%%{t z9#&QK>j~r<@)-Gm{6Pv}{)MR;RBNEac<_?dsJes5(0SzVDy~b2>Ik@VJia!H>I^Pj zkfQM{`W>kAsn`H4PU=v#$59hqf%!D?1vy)R*^QB_;UIRZJ zVzqu*Ptq+o*}dVX9>qy_BC;xoY$8s{Q8ED-=OhhO1XT{0*A}sj!gD1H;7P8hwjjct zxVA%kuR(8^fv@!hbE$xCrjkF&+c>E+z^uxX229W{f`Rl$)mw?*IA`m?>l*7Zx}tr> zIopnD+5oK?YARHt@vPN1@Y`$POnbmEmLoSapxwqJOJmT(CaTl%nHA7;2Qe9VqW)4v zAV>w|Y=X7{cj*WEbU84P`S8C#;O7;U#Oa=ij`N7f`Oi5Uhn{vA_x&?zCuu5}DuzjV z6LjG|@U_OH>Sj~(5aB|+;=t=CBdY%3EKSheW8hgifsI$88)gEFD#Hg!gR0&{jD|-R zM&w~Kz6;pc7TCz@N!o2pmghrVx6~@)`5+D`@(Yel0#4g8>;rFsa$Bh`g`2Pluce4- z9Xi7SaE}}4Wr@IiBT%&#H0%^@6C(Qtudx{Z-_tOsexked2=uej#74~0lE8~gz=t0} zEYf8@#o%%xjE{vEER>ByFmWJ2|Y!w zCnqEOl}LXw8=Z1D_BY$2Q)}om$Kmqy)~iCN<)8;00mmAxwb!a?F_?pT)fCj@BlS8? z(P4ET&}1w0*G9ay;^V#e+-dZN2dKl}@J>0c05aBG8;HE`1R8zU2t5`Ga4a0Mn|i8l zC8}aty%;C$4IvN($U0;naI9@`=w1LrBuv(#z};&C|JzVqP;-5Ofq$-k@H@JK|29L^ zm5|pk%1HU}9k0-*_u$@)#EiHsa+VF$JplgJ4bOs^P>8C{5{CVJMhRG>UqR=6j}NguVcv7MQnXOga`K>I3uDC!+{<3 zwa)n71vsr2v{zb=X2yiS1tMFmpN6w9V8h@aVkl1e8Q_?R=kDs@UCjb+pCg~6U;oKk zB>Gx)^x@_}k`9Qe6D9zyk*)evHRSV8TrA>B2E)G%RNVwEJq-7!G8u+v2!FuM+=s~e zLNA38KK(6_f4M$HZ>UEjYhV8&{~vs8f(!&}6j0;`-v0x{b^-C6z;zPYx`enMfKPqJ zPXX|u4nv?4YT^|Pu8D3v7ytf!BAqbeiNY3m zXNxhPxrXX<%XYfGR!ZGfS3>1e0sbj|XC$@)(G4{8#0rUo7y1K!d^>xpgaCHNU9myxkdY<|b+b+Cs$75wTv?w|`jtuoOW z^|%@D;WM%pN>=;Z)m8%`Zv*MFNgc68Q6*86b&$Enz`@3dt2W%Xl88A!y7PZk;thPq zdgOaB+{-HP2?#QkctV^a)?qiP3wFT62^sZ&4g6;&R9Y=~j|!N`ZFnT@ZXvEmK+UgeDv*Q0M4%}6VjEz`4BV9?Pz_(9ru|ThP0-Kgf`wec z9rVB{t_0*C2e0Q8e1mN4Q53_DNs`jH}OaTTp#>PYd7|1u&;z2yCI|@6Fl`yjq^e_5#Ab%XTLmKHtvC)%_ z`+WiYF%I5*J3K*I6z`kT+?c6C%1}>ZaMJKIJ&0d~Mug*zwe5AF4?M`MMbBgmqqB+v5h@WU#TAfb4=1TxIERs_s7D2KZra0jqqZtrv#9# zC(g?fxR7U%w-3N`7rL7X(S;+Pg1Dl=PlC|HXvzz%`su%&vTpE;iolP{#fH!&oU%FK zAdQLQ@ObRNtjqt2tR<9v2&VEWcxM;ji!23x_r)BeCNdJC*^oIAIwcF)OTm?fkDRIu z*E9hAxdQOMD{yf>_}MwI;Z$r)M1fm%!3kc2p7|IX1{4v6jnU5kiR>ov2`tNmsaFkT zZ7?{}YH}}dA%T1Y)|5^95S@XtV%ib_AIFA#QE&%x(VyQy`J4v#SPW10|BCDlBHIf5 z=m-2QN*ICquYn-jQH?|3R9Di&u{)QA=ech}?QcLujzMp0iSt$#?>-1y2#ls;56-K4 z@Dkw-aCpuu99gXfuGs^Bdm$qGle0ABEE17*2G{@Zk=4Ta9{)FIH&H)%;35%l`kNtZ zW1#xi5T=y1W%02cH)4lfh( z7>H~ZLB{H#Zu^2SE`|;|hsaX!ltnn0&7W#qr5^>0OGc-T1nPGNf-DDDxB-;TCTMh` zGN{MS(2vvLhi<{oBRGdAc%GmOe8nbHIxs$m%)=`aRr&+?`5cj-#T{6O&A*ZOzCV%u zIcFci+IFFv4aNkrBslT^tj76JX>IXNqI4cU);DzQ3qZ)VsIH0VQC$&RedMJqvQr2i zPyuWsgyGjH%mPXx=DKi(x&l9@{}0~Y1KyINc>i8Nl4OvK1O>^UB#|Uhlq4V^L9#>% zErjP|Mh;(>7MHD>3aI9 zdb(%sWgU4WC(o-v_TtEqyxm!Zy<`WTlg{DU^ErOkG(G35wK+Q;$~*q+Ib;2Yx8YN> zt1ZpDr_IT=1Bl2|Iayo|D|euP4}s(<6yq5_{~!Y&80&6OUy0)X0sYvMcX4ZtwG??a z3GeiuC91w;KABN&)0a1^&anL?&U;#9`9)m!`mJB ztJU?$w-t!WMR^LCA2f6GGcQONAq$tMZ9No!IQnrM&z#rsTbP&OY+BAWtFdCg=KeRa zyL^D^f0H+J+w!*JG_vA;ejooSe}OwEnYJpYksZjj!_fcJId5IgDgGAF{SAC0__>$b z9ayeIWzHeTj^XsNGn&6DJK}68$U7jrC8_?7sP7{DmGmd0{yFN_QRniMHk=dIGU)zf zJgL2i^4~P_|A?%k(eYhiV`G$WHTL4=K(_>MaTaI)S`w~S-~_xD@%mGKv$!wk#Z%em z|H^+|@fr#;J;+uie-BLi*(3Z$W)kA$dt|~s?A4cYetnML?M{M*EXwa2)+Zi!NBxgM z|Igy7?K1wl;x9Zi-$L}=LU{wfm$(f3S+pNRzui!sb%^5y*{8?jjocF;JBR&b7czNC zv}$aAr~7x#SI6;&e^d6=1x8K7dxQV*cW$?#1ZTm)uVHN`Jl_axYY=tc8@VEQR^YjN zWny$KqHt4?4+q!b>}BV2{`ecw{1zvWnNXxvd9K}`-^N_Yo6Z05mgj5y4dMp8bv%aO zE!=`PZw?!mcNhz>E3HjD?#!v;Ff!;A^5_Egx69eLt_IOn)GopDXHHZn@cZ@ySc7di zSFOTthUetpl^DiVbj$84! zYbWxS{T_6G7^j{^IU{V(v-KZ|$NP9+tazLQ4}ZX}yDc6c$m#zC5S&FeUC4Xni}_qc ze4fqTd@`tyAP#q9Z~qC;F5hKMzKSw_$bXG^|FG+L4{{WztBv?8p1JsImv_mun|Ysl z1Ut|Ayf>JezgYToAJXo8b z9d`}9-JTQE0eJsgRPvAPZ-3_JPn4&j8OIZahk|Q&dTmA|uFN~j`T1`kC+8i=8|?dc z54(c=J%lsPy2Rsb!zMuaALd+lI!~ZKYgLgWh_qc$|1Dr>0}$zF18{9Rax1tTPP85f zvnQa67s2ygMDj}`-{&`HGjhgWfz{e^)WO8#r6~V%qdwwPJU_auTswi^%-qGZ$NRlp zTbbQyYu=6QM@0UHCzMlR=}&NVHs5Cup(kKHl-6D0_9v+6^5o~7{8ts@b838vXuOTw zJr&*kIq|+6&w^9%B=an%p9{&gy*NFtLf+5BuJ#t$@;9>PTom$1qHR~A?x(Qy6EJNA z#?3QaN3g4(&fC*#dER`OGvhnx$5cFZE{-;C#v8}OS+}c*#}{};o194bF3-KgIlZ2h zwEq>(k5l2}5-8n9#F?{pB53}IQl8HDDg0jIcf{$zX#LJ(ZOIz^V5}uM3(w56^hn;T zJjF?$et2{l@doq8LdBYwkQ_g=@}7`(`- zcyi7@OL2PKj=$eO5!PpUwm*be z`~~~7VsRz(eojV>Ki2zX>m!^)FM+Ycc}CiT9c>BTr%n#C7n${1cAXmf(?25eIV~aE?`G{h`*NpjQ<*bPLQp|nS5`aX3mDS`*`E?9?zjOk~K^7+lLL& zy zgx?NMOf67=TPeVVcUs)Y(vh_%kjQyb`<|hJWcS0;-2)q2dAe)w_&ZRi7ZOJ>oBY2j$jK2zba?~4~ z_ordEUWPN)Rvmm)3-O!jsrc`4PcvJk=sAqV}xCYLCi$d=}1bv^K=o_#$ z9ufHpZ^cJ|?P`?oPcU~pS#>1r9YTH`LjE0tj<_*eS>=lk|?jEvVa=tm8EWVp( z&$sxO+^6Grt>5h-JDk(`MeML6_#2r2@)!LR5M8tLzIRE^Bx|x0Z%$n9z_ZG(>1Q}R zZp-hcHY66mN1p{*hbhMzJ0TlERG*XdV>|R?S>~9QQ^*^f>Fz?i&VsZ3(deHLMN5vF z7Y&#M9eEpHpWqyMD~f(8%$>;z>LfJ&IAZWPP@P01{)u-wS8yKtJBt5r-V=<=s?5bb z)OVIB)y|A$&$rOY72)MapxXp2TY+$E zzPIErn>NI{DvG}tile=3ES_NgneyyB^6UWqg8s)um z>S|=#0>tB#{8i_NBmYabJqB;L^LG47-UXbGqMSwiozBl0pgNZm<`uNvLEJtC#~+Lw z4`g%p@@zN$*7j7Q@ebZgC>p0_J(o#&_6vT0aT0ld9Vf`gI7PgJ`hS_snVH`|e2Y`^ zvh2mH!_T^$DK`Mo2ISw5$gm%PYYCX0gD0Sg(fl_-HiF;1U%RRk~fc-J{ zve(i42}e!WL$(Pg?O(G`OF1Ue!K<^c@%wolXx5#7N+Nn zJP+8ujZ!X8+^vFMuFlVDaP@t-T!ypQw?IELSvEd@Blllo`Cgd6fV=&geR5-dx4J0W zI1x`W(#F5=7iPz^qYY$Mb*6Z6D2Gkna4_lv>J(r~vN2$$!3S=425-kUDKPBt_BCgLpoE^+)M`}Fm& zFJ!y&CUrI5O3c9-`<@Z^^^RDb_5vi z0Nr1CcXtclw{i71tPi6z&$CCr!#k@9I5W=1$!Zz6-!vgRp68_NS-lrVz0Y4tf0g&{ zD{%_ho)gwF=>8=CSBv6dV)KbiIw zPX3?4!)xfsGqCaye@k@_Snfs#@20$m>xZyE4XgiQC;J5Tn2Z&fi+y?pPNAC<0|#+# zJDXkQ9-{tj)Ny(=MC$lc&I^Z4G%^WZ&xH4Lfo(ysEDXLyD8C7+ zd0=x^PS8`4VdD^qZ*l&3l32WjzXUmp2soJMvn@cj4B0##|NYPZc>cVXRXvBdxd(IR z-<;igdE#*n;&Bq*`FxaEdx4029CjWc^6rDD`=~vH&i?~GUnF9M>r3o{({cV-kd^rX zJL6WIYJNqOpG_YB4Gn%HW!g7*i)-*6%AoNoNYM&5V+K zgV>vgpSeLf2iJyc;<3i%Hx%!Zna}fP=N^6|cqO~p$-EQWhqo*n^IQ03(ESM`E?iTy=Z%kYe2A9*o9uirF?KQUjE+NV_uve&A^!@>QbePW zeZrIcKUmXi(8rTl<2`u3-hf?g8MI#tIVn2wDcSZq`u{JmJOfit@p%>&|BW8L$?p6q zktoJyWshGBZC#yg-G*2^h+Xn@)aeG|{V9-r!oNQ;Bbl}o3icD;!tc#Wi?wTb4t*f$ z$lGMwIJ~u)927GUm9vmpv-15_a7_c^FLPEDWB*~Nc%1e4>#(aBe=4zfAj-HkvG9Gg zac-X9zYJ%uG3&i3|An0Kj%J;AhP5B@UgSII$ZYJplO$~Kf#E+e_b(7V&))Sy!u2|l z_#s+90qjmsjxE5b70J|1c#_?N^YHOR!euc+$88ef%vdvODX&0qedT5jhV$2-~=*m9`QG3;`e|bEE>`3c z-hlj`jNOM5$flfcR^Tb-8))MM!#+x!jbL3b%Kvfw35<TxjYt=;C^0+0HyW96@}a!`baNp3j~e^(Mc! zn3!l3vhVTyxjFmwKKS%|a_wSt`ULAzLUR8z0X8!;{Q?{H@KEtnbOF+5Y7Iwq(lMu=ZVioe#yE znWwHPKrjI~#^S9czo6$cjQwt0{;G9ykbjk43-AQAJnFMPD>FPPqahP#&+{B(oXtfh ztO&AAIf?v|{q;9!_Ma1Lw{lW?h&Kq&;rr`E<-5e?$Gp4yjL)akK48y#gLr*`SbUhi zf93RXAt#yRK(-f}FJ#Ln&Zg~g_AGgDE6C2}3HUcC+AoR6%~|=?U~LH^Y~F-zI!+~% zfo?*gZ#)oWzI((f6MuNPxAk#DEC^4wZ+l@x!D0`=J!z3q7;*p zRr;9(oRf1sEx2ame7^vSzYOm`)?%05hSSXc@PE>11(7y>!hg>?EwQo?JK7rTJzJw8 z`;lqKbA~vVeeGIw`TL9OIKiBQ=Kq#6 z1qt!rGEV0# zAekEW^qGeJZUzv44P5iX?UKaes_fF6a+2AN-^&@Y%gN#U(BId1FE<|VLcYdcy)--O zkNGcwb|&)=;lCmH1M&EO>`gb2JAX$T9tGPoF!wL8yad9RC|?BCKiTyj1J^z1&5iWG z2xUB(v-QF3(}rv%^l2WR&?e>o{_P#kSC4VBy8+!li>Hnw@o6{CMw=0jKZJwtvPUhP zu+0HCGm}v>f@elh&XiEifhI0MkMHo7d1ao0)+dsG#&g4g?2aeH+2!c&2u=g9aM~Y- z=Zjf5{Vaj*uah)n54<{>cszr+x-7AFClUD|ygf-aJp-2K(97p2p9R$u*dGAbot#^) zh2`^z#ozO`=s@#@T9P@=Tn~$LdYVU#EVEI!Z%s{ z9n?`8@(uLsyTs%ADIWLYBytQ-G-oE(uHjs9d&2er`u8a6{scddQ+pV+BRF>m*I&?% zi^;LmVfz@eY;T^Yx90a1KP1n-1F~89S8K-S6!JQm_Au{Z{=$j>PwZ(&5=p=0t%$L< z8hbBWraf(O}5l zLLDb$7yUY!wiGA4b&~S$&hy9N>}scwYZt-9^+cMm-3vbt!qUS;;6v2z$0A&RB^$3M z63=IcKZS8e5R1R$1hOS7wFa^9?S$+r=>8{Y$iF!6|D6-o<*f0k=;I-*`7Y?d=5VkU z5xF9m@ZO6#HiRhzQqcc&ZtJy0@B+lOAd^G_Y zGAna0&g!noDsRns&saMV2F^_pY1r-}?nZDfxu2i=sNK`Ubt4&eIcsn>ih3fu;UUBJ zB^I|QYu6(VmLt;VAsU73Q})mo$ph`yS92~tgJ)1#LqY3 zY9XRDZe3{iu|6NU1wSR zSdTN-4rKrS7Q@9p2n_r1i7{+`@UtX8OT*U+M4}i|j%~?W z?82G)VD_>T$g=ae-wo`Q4}$C^-h_y=DL6aMIqX}!pIeEH-;gu^jxRVGrKsZB#O_HwWP1|P+l)rG2*?zT6Y^ikyvu*N@+`ac z-%+uvh{rR@kYhND>`PqjKzwaVwyg~-KY%x3TRNdzlJ8}>S{~~vu&ONE3`N~JadsHl zdJ4OlqVd+0XD^^sAF`uO!ZXI~{Qh%s&RDAvkDH;_#@Z3+!O3uO4xV31%v}pZH-YCC zqVTVL-^8_I@lvwPIQt!EGezSrMB}Es`?frrmv<7=@>D$*??V2IIzEPi-O4+QOYrBE z#M(h9!7i|1*w(@ORpDnP^kg}>T8^LPsjm#;H9-F3#M$=nyeE7g&K*wWPM3_%Geb5u z$fo5SG9MbYEbn?0k6WQ^zl614vu7X2dE^Wjxd2taJfXWDJb!^Lp}K}Ry$qE(kElJ3 zJ^EOp@c^PxoNbKOuEISRW2c@C1$JaFpkDWpY1i|db}n)B`^4IQoF#T9BDcir4Pa$0 zm|KM%Ze@1mmH4boeN}L+MJ|f5twu-VkqMdQ+3no<3H0|3{w~Cj&BpADk`v!&Z`}~R z{u$5ud-Go8aJ26CWSg*^4>Om7?n*N2Dn3_JyPP=vKU)4wk3W!?$DoY+vno5Iu|Hvz zR!ItCoK4K{Ek1y=e=+y{}48;iA^nmm}BXWylH0{tQ9$IVkb?tzbo zpd-IS%TGlm&t?y}02~*C?=pTa<>zAJ^gLS5q{oS5*^%t>`|`xFV^R>)#>I#SMdKtO z`;gUq5p{e34Y`q>^&-xXe_+jz!o&U8b%&E}+kkBowB*Myw>BKD38FPA*XDXX_}rNG zZD4FTS+*a_dQ4J~bBTcKQT-9@m(PRjecm~Kne3h!buQ@XZo;W>1JJF@&pQ09OML_IZUU~Y>9aF^ z_fA=MEGl$5+L$AIjlWGD#a=Dl{|4uf@1P;85}0T=PB#4+ zhRy-cxqP3^)md1D>jZioN$>s0vf*&P1<2MSx|L`1amtx~*kqg>KSB3jN$PkH8gd;G zbRPTlNvPWq==Z*`unSQpY+H~^8-rv+@NB^MhSWDkJGUUiwxiFkiLqa?)Bg_E&m^ud zC%$iov&VS${0}PpS?VV+wtTIlwa|9JSU_> zU|?^U7*4hc+m;F4Cg9nGpH2DMob#pl+6nx>NQ@l{+sC7ff8st@^pHIYvR7HbPk2U~ zjCsG7G(?%UMlT+BAgcC+gI}Q|$B=Epb_)EQ2Ab3P`C~%$2l7j}j;7bI$jm(%r7YWo zyQ~4SWl$z@HUr2e;OX-{o(rXp_mgQirFc9i>7!UvuI9lEh2obFB}?u(ip z#+c*K)-%{WE@72!;tV1M`6m(oHh;-84o~t^qan()#firs5Jl^=&u-1y?@HF}hmIUd z4jltC$0c+pf$t=KPUPyi#Mcp^KZw}fgY4Xqk(;qLKVpqmj z^=GjIBN;;Zb}Y3G#zsY_G)F&(NPuQkJcPA}ztWah?>7QzT>`f$U{g^)dF;J6Yvx zSncx?YsZr_hZAA@Cv3ZcVJEQcknsJCa>s;gS2Aob`WytqN1+}ku_}LNbuLGbZsE5E z4-n~w>?4p($a>Dm?DOKql6dn2RK!@@0iF8=F?K-0b_6JX1D4-{=y!Y{%aw2)MkF4X z7~3_e#}=&1dhCo+#_tg0^N__eFvpkK(LN$hq#;k>!`;N=_4p*#PD=`T6#gDW2JHne zyQ337CoUD4JMr^#t_{~dFe}ES9)BPf&t~_yk~`hXJC+A|iV-qJ<5=qu2t0!e#oO{mA zy$#t|AbST*exBW0nP%~LaboQh_O)YCal^JZx%3MnZx^`JXE>;K!?Gvmj{Vso4x#67 z8F4DHcpj(WD>>=k#vO(1dDiZ2&cwq&HaR=#EbP_`vim3=r6TJSQ(N%_xpT_4eNs&R z8XSj%=14FdNqKk=*ZyGNgXhhi>Hkx5bOUzj)zH~xIE{Xj`_9J7O_4bJI3fEN8uBpb z;@eX^Udofca_uDa;25|#1kd*e!JY}-?jYJ7Ouv9f;o1*Ye@)yTL+=ye`cGt;^y5bE zb`N*`2ip58dFIHbO&YQQ`MwnTC>2?cnA#lHc0lcROT6t5H@||RL%?$wKZjELb;_`P zQTtyc_1G3&+?ZA2|8)obSQ=ytCS=oP$X-Jor6J0+TgZ#m!Tet;uOv$QI@K$T^#kJo|*b`oEm8 zo{@>}VJ{6#ox|x&6SmPr|e>^#kDRVA_;pze~D!25WL5 zC#!2={|=%c=WG;v^`z+jS2>5wL%uK0xk2%`R$^_l6p_NV8{Y3l)a?hB1Jg&}`(ZI$ z!%>gzh(#&>y6DFb;C?BhdjXznXC)e?Ami{Z<_-qk0pPRGf#CWTxDH1Z#n?&oKa0KWqNI#B_mDl6qVY|3&XFLSgj4ZMDA?R& z#bT_q;_-((Uu{6HZ3z!Q!)x*OOPCY7eL*Bl`@rL#Sa&B9cc#}i^p@hU1LxmIWtU8x zmB`-Xy#EsV^&}c{58m8NJYIi7tr+=cQh9xo-P&Vhl`h)BnF zWQxi|KywH`hbB}Je!#3n31UQ+w5pk$H&>N?@7w9c)X;?+8=w^ zjsu&b@@ViJ$>%6)$6zyDe_)poW9PFXSD+s^rhWSU(a7H5?ENWk3?^hpo3^JR+S3$| z-(%g^>an&t5xF(I{S0h7f$rzvv(L_06o=cSNZbVVSdUm-J?Y0XsL{gc?Kg;q8Ho2u zc#avx*+A;}5+^KW+P%b(;_>Rl+WGi;1`+v(#M^P`q|k{ceU9b&IQTq~NIZ>xe?mPj zOtE+!%6J@#T(6U8X>+ho3tH9dYc)B4mCT!azY+`Pwgm0&W z>SsM%TfnUtTZdR&l`LBxWn3Js&5@1I@0vaa+3TDgpG%o`AIdL%ytc>Mx%hhq86<4K zC+d!aqu=&E$8r7pgzMB4iRUE7E+f_~fq{|~U2II?#+6A$CJ2~x)yQl`yEJboK} zTt2b3CZ4X(Q}(6_+tz5w_As{tAN$@O%hvF<1xm9qIVQ%|U`VJ1;Rl3t2oB za~LwIybC0nrQkF?S z?qwf&oV!XJ-(dZOY&>#cs&vBAp7t&DaS8H&MPf<{DIHO^ZINPf8?bB#zU}$mF5&uV z57$OL##SRoSAg{;xX*&zZ}x;t(KtTOF`p18rXkO8E`BKKBqg??Q!z=1(3bYzWEXFLdN3_)|6!0%$)e= z?!}|Awkm4yBh=rpZH|^~1xMRtpPypejClP?kFg&Ti{FEBW!WMin>!(!E^#&i$UX(x zTS-HnCDR^8&;Evr+}z7G>BzZg$DV!XR`tqvXfl~*MDL3?L@V9 zGe`DDLN*M|ng|Vj_}q@2Bl?0wYnHBMOnB-0*C@hBBhu3goONW*qI?3_mIDeDx2 zr*QR0aGgmmT8>?sbkVZxZ>-V7M8UJ{D6bNY#@Uz9eIc8XOq23!zg~h>SFWv^bi}Z2 zL@sR#y3G^5E%+9yO|U8w*G+oADzUgCtFk27x)7Q_7jf`aB7MpfjbnrC1CU7_pCc!9 z#u|}SM66wdr;5n);qC0io6rfLK4MF8C|u5%V(~`SC^5Hb!l!Sc`U!llk9LSLsmJ%ovSnDA#o&HE z_URJYXY6S2Bz1g&oOmL|Q7K+$NNjY9?q*>w2uHCB0E)Or!}Wa-4(%4ug?6W-Q=nf1Z3A>8R>sMd!~ zMdF&|*ebnPTsrB;Hxp;Gao1^6G)};2U&#K)%&+2sGVM{~@m@T;gFWfSr2dBOBCshc zg-(d{Ifv`>5-u@zIgDKgvRjgVNb}o~O_J1cCU$FO+5+Urw|lv^65cA?44b0z#|hsC zd<&K0aBU(n7_%&sGS15hM4U~Vv~j|O>?5-K4b<`9WZF|?+C$|2--)N&l0r&HF2`@h zDaN5o0V6A2%8WfE}rt{Ui=sy2{ zugZ(S$StIuw9tq@_d*QSLcKDA~H<4u3!Z$7L{c}_7KQC8eb~&P?1CZ$yG7;+d6*NSd_6dHD+R z3E`U5*FZVM*Y^`+%hG?zo_@@q_Gv|<@@!J(5Hjs((*0M-G@Tw5kM}1PxihgQ9SLlg zCUnXyeJ)LLXt=KL>EfN}&%G$)Biu>I{++Z@$UcFyaaqqvlZMQg_B5SDzB!t;@4{MO zQ&b9_eO8C9Rg)%uk3P#2y-TINY@wtdbFx3qO7=<{4Vg|MQpY!whGsj_nb-A~7i~S%sff`B|-pNlL#md>JldY*DmTS*Cs3qj54g8;|!_BS&k9_OyQ{ zeH3fTH7Vp@Q?^|XHe=54DFRiyn*1_cHxawavA?kDSnj%u!Cf-&ChoSpHDiwu}OOdz~{lCp__|24M-vHSxiL`)($7??{Y|fU$>@GCoUuD;kY6o%W^s z(hy~u;_>UOwoX~!!bh>T)M#ugC3J@G2MMQiLwqeuBrctDOpIxlo;&SkGxws=kd2c# z)2aCN6pzoNk2)DYjCc1Y)^1PPX4tMv%o)CG5?jJ`L&7D-?jXk$iw~wO`v>=WVRW7; z8nvU1mo!ArGBXg5UrQYTBOtE+`<8=Ob zBJI;JuuuMnReOgybS56Vry-VUGm#sL$9ah;owF888o4ySFAIX@!69_^5vmmuV~WHj z=(!lHA!N$3+0$+|Jn!T3zstN zuPMjGm~`=BkV!xO$x6KpvNu4cJR8Zo5UHbS$aJXmENNGpyO(QMOTjpQe|{PTbi?`DM6_ zF~y>gDa%Y5r%T9`XNK$(km-c=UvmAWbP|z@Xvcm4Y!;Eib}Q(FP3Y{StDCVJF6sTf zy)1j2Y?U$!nR6y&!#MX$Fj_-q;3P6@Peqh#(viiIk}R3DWErq1GW}b)EE2`o!mPyt zAhRr!G78xgX+QI5{4gPthA7iaA0O}K+6er$Y?GE4b7JpiI8+qg%8#_;E^_Se>=h5N zB9>*(pp3@Zn<>wvAVTKqs69>b_;pxQt}Otzg?iccourdXgJcvP}9R&39x{ zkT0e4)koy_J4r)cCew5>ws)t)wUibtJAq>y6Guzee544n|#N4Uh-qCLi>_;dG^u|%dk8^+V8BU7gR zJH_KOp9F6PV(Xse=Qbya&ULk)?8}%F`&a|UVf`)tr zjnt*Gxz5MM)Hscky#)!Y7QX8DG*4W6WalA4&7In<*NNGef4mdP3B3 zGU8Fl#F|c7ipLz=q9Bl(2#bGoEnM2i4A(q8{g{;%5;D)T2@@-4V=MbH-o@Xc0 z+1Oaqo~?)!w!eW+_=L$&DGm*na_k}2;_+UVJqPF}>~wPcD4iYOLd85D zb?SH49wExao3J@P<4UN+mvAY^j4|zH&n0B9phUrR-twRtjZ zhEB0*A1R{Ya>k^Kv-I?%=4=#dEM&G@zn0Ee|LUoTa?MzKC}FdhyswAPkOr)1;0< zCgp#X7*agy)GyYaz~4uc{#(8Yoj&&MxTGCoOnbCqQTidx7qYjA^!Ivs7RV+|@u-uC z&X2RCea&=45jh_}ib{)1<4UOXGwtverQM;NeMyzWR8yI=+#`W6s*+#M&eLJj{>K*+*=NFKLGui&%7II$IgC4|<%L?(2j#8Js_4S_Om&hg_9gX5lJDPM~Cw_}Z?P@~yY*POx@mfk^ z8Rz&M)uUOCJ>AQ)e~s3BN2X}}w8xogh-aGg(X@Xye9f^Lb3){7DGr5ej-GmGFPn)> z)w7v#CS<|cC!^KzP2y3RW-6kHl#WOvg-y&!P4qFYgjRf6j!8Y9P5L2Zrul~K{a&7p z;MX8QPIQb@5TjWldRA$0oKx5wc>(%HjwQM+c&CWR7e_~=STk&5&R8;xflJzv zGxluVY6&g#0i@|`nI~`5@Uv|iOlvhA+sG#y01)g<(G;`A-|eso47G-QVe}c zT+Z0^tcxMjdAQ`v)KTvpEz?XNjWwM{q>)c2C9$YFsfZNP)IWF=HbZE&;Aw0@7&a_vDh8SzEA{LR- z5uN@mDh-iwWj4z(F=ogt%U*+jJ)ONvGBh_sze=!`q@WLz0vrX3cGFZQxb z=lnN%oSEwD2`!L)xtD2E_Ef}kO%Z9>EaSeG^wPg)OPXlNgv(>mG(XQXJ2`4c`v7d( ztqqxJzj963EFz6L!zT7}RJMakX0)6OS7JGuA8~wO=b9m21+G zz!uyIk;R~pd4|16Unzc#%v9fyN%x&KDZkE-I*VvuvurbsG;~6ee}pP>%wo~AERc=M z435k+#F6Pq&9q<0a%|#9SoHC4;WF(oT#n3?(G^6T>EviT+W07#ShJHz&Du=89l-bz zHj6=LOYNo}(nTSgqNg7drPGxZWb8~slxaGNyhX0*lx3{FRA95Hd@g047&N{Dm-JqY zNk1H!ok1)bOAYaOl!}No?b)W0hRx&B_;a=lm8nN$nVqd%^_?^AXr>|W_Ebdi=&T8w zB2rpnd$;h#N4TUNV$6|QmT5Q3Ia8kL|IQ&YZIU7$h0L+pc}v&~pVdt3T@|%QOFyPe zoJl|OJTu*whJ2VflRkiCm305Z-kzp2zcQ_6 z&0|v7j616tD!ut|WQs*)nKWNn7OFpTw1(J;-}Yw@j1r3z_MNN2Fu(tW$1TetCwy%3k4nSs*jjx91rCd9`$Q6f&u!^s#15*`_mz zVVfbHyA+*fQ6$=F(e`L#Y*Ox{eOmijM5A%`(dbNbeKcg!NW*6NW@w}+Rx{;rzVu!v z*AH=)BQxFqQg648O!HimLI!KX=J>4cxQsEKK6GN7jMb5T7_#xWyHr2+YQ>|TW)zPl zYb7>u=bykOy?4fxWv+~lOgpu!qmb!+h@G*tUt6v(nlc^Yq7IAbJ_*$ zIE2Lo)YsxnvD?hU9 z-<9s`>&7#c%ly5Sk-jM>S`_i0CFd8TJH?bW6s zk!g`@&YO@KK1XL3q1Kto)FXCj?Pk*ah{jRr8BIIdc>G8oT}2$5&c|X+S|Vf?mtM;= zEN84nrkz^RC}cWeklE=V>LsiNK}@&dKhEU{6MBW6K8p*DIQ%PZO1m= zgw2@~I^$1#d4}1kN_(^;ljbWL1DR=v>Aq{o#Jv+_L}XwK?zA)O z#KxKJXr_*OP7BuTX-%BzN32;?8c&WX&oS-M##oLlI8!vXW!fZZUo+N(&31suIiYf! zYln6+?PVT~IWo=Sd$p;fahB)W8|f5j=%jvzuB;hf%CSIZ%4pGOJ9XrlX^8eTJyow%~(^^1v;VhILvXC${5<1@72-}i^sqw zTsdzZmzH;S<+$wZA+DRqT=iY|^F2+OmMf&?n^5Uv-+pCUuO7}=iR`1K`Z_rZS?GR= z%(6|mr2mRYi%MfjOc`6Un<_>m+BrXuM$fazH0^1gX+oB(zar9f()crEW;ImW16>!j zOM5IT&vImX3+|lN+Hah-p>w>#Rp*!#zeMJF_Gz|T=g6esI*n*&3!QX~hE%8=S*S;i zOf&diZ6~bQtrd@+ZJuj6Hpk?AIWEsJ-^+BeacwN~OmS1QmSZyv7JY_F-#IR4tkjRt zM&GM*4Y8AmA+xtW9+P%1@yHZc5s5knH<1aKseZYm3E2l(Jo>(7XDwsRa6}9WnQNkO zd5-BlK^~1_%=653KQb*?lfSmN35R2`npsTih0N6>I5WnypEtZ&b5tIQhDu}XX}Zobj#s@M&CZS@4Ey zuZXlWi81F)<+$4PL%4L-*Hd+^Aj){1^;{o=H;YI|i5%PtR0y>f94vZOfz)8XFED$&-N~_tIgCS zkmcIws$Z(3p3}scowC}o1sbb)j%fu9nJHr#jpdH!nO3vryvg?xPZO8;5@XG?mG+f- zM{~}EOu6O?DX)zeW6m)dTh?N@lw*-)9*q%?&RD7Z#+vyWyp`yL%@F5$Z^&}}XyeQ? zO`JJ4f2PT?nOd4=7-EZ9&q->+@Q7OueN=nS9j<+h6jXHpM4 zf7IF-r;ymwTt%ALY&X`oF!{$Bvm7%8ab$i1(S8=lTtl=6Sv2VxORPCIk2)*!D@SFD zZ@OrEnHX#4nQ$3rQhwjnq#>>(b|x`AflBBi5_87Nvy~y!Syk^T9GRjqSQ`jij?0ke zs_6RRd8WI&Hv0KW$h2SEu2!muMO%r;V$oEl&M~cy?q!^Lo(Wm#W1VS+%%9nWL741Y zHH%ZBGGv}-cCs>Lrul8i?(t{qz`_*2EUf*{&>f&S#uG9G4<7V$roRb~NE?W6iL6HU%mn zb*nL!E52#IqTKYuVo?gxL}n+E{5;|)ay(wQxV0=Z#dl=Rn5n)a%QLN1NJW`PWRy|U z?>FPTSnp+qEa%MjYTMJ=BGUIZ&nZXb8I~inSS*p*^O^nLBI42Z>l~S#M{3?`zU)ku zbLQ`@^o}@ZEjTNcKaWT|l{g~j&v$3j4p&CkMMa}==FuorhRj*BGgjB>IV%l3GGPf+TIW^rVujyY$sV~75i82w8443}8Wl`%BLPgi0r_Owz%bkZ_pfg)y~yP0K~{tnPJL~)X{ zR;oxBHfPisvt8OW-_FB|bkj!tl~U+_&YITWqRUxR>DlJBXtTbyD*AT)Fvj%8(M}-) zA(NMRu6f2eV-cx&EDDt~CIxY1d7eo@0-2aIWa1(G_l&YKzY1hR<*IM7DAt5a{|nY! zL;RFgVsj+TQgN6+mpNyO@LctC4RK^1kr9t2w(?5&gv(;lFzL+btZ7$qWWwdFIWj4L z#g+M7#-t&0d?jCzWzt4t%v4{T4TQ{CGi>g8a1=E|NN$(Ti9iA-!cV-}AkYfTNYeNDc4w$;oT)@aRf z*$NGY%%ahEwI*wU&N*{j;>th9S0Ga~Ix?-MaK)ZxC*we7Zx9SYjxI2XRa*no4~yzj z8*9!y&rJK<;aB2R^4LDIIEe< zxyy6R7;8tSRWyCHeaCot?*gDMaW@A03%v^E`_9b7anz zdRYA0Se+UDbfx<`Uz$@h8*hrB*w_3GtLuXyYQtr_vwhc`IWFJN;_PTK>DWvm9htL} ztGwdV>^U-_GR4>VDv(*8mB>6E-CyG-@OgyBj_y6}nbY#jo{o$$iw>=(@g^TE(;^<7 zHOHjVk>q90n2k1Ex}zg=-ZZ<%qp_A_%l#L|z!g`bwuXXZ(XOqr%ni6%Jo7VBf{;St@2%ouZYo@t&h^4Vh2cnkKT zrgr<-D7%NPlu#LKLKk^vo+!_1g)}9}@#J;GZfoEG6vU7jI(z;wjnj9H%^9p)oHNJOhOEii z(6Kp}hRV;vIcF9R9vu;n=83PkA#;taQ3Qu-F~*wuA>K;P44FlZ=UR>}GAVFG%~`YP zwODLJHn4^$mQ4K}pCQTd)Xe3Km9dydW6oKP%>8X5DWlQ**^21f?o?-)xU+RN&h%}W zW~fSRu9qd!yr)Lz$aHVRX3_8JrJNrKTPTIIL>9{E@fhluV{_kJ5nLODre;bu zXUqEeXsu8gjf(rGI$AX8JNG$9;^?jXSuv?UIwD5)ksYbBN~G-=d6j$ShMU8Yf-!qb?Aq9j#*(*SCThWD6Pc}z@Od;iW16wVW?545;D|~*ab<`Cm&K#2uFaqs zOAQgGoHgUF$y<&w`1MG%yI3p=UyjV5(oFdsnfx@)RC8>3B)TofWqBIN;tY}_6GrnW z*AdSiAqk#Jr0OqB_U-rZSaf8rA-1+2kDmX5YT%d@HpAtmkG5zm^UPLL-=QL&C(cEn z%bD_ej;iL&SToKXSssnoH^AUv-34{ zWEPX|S&7Ur+PB4^vz4P)J;wVU>6skSSR!+L;dzbGap&k9mvOErw7c5Md1f1D9+T#s zedmarml})Ptqf$oQg#|BwK4L-Ju_T^uD&)@IX2TCt&8pqdllj-iTi}RV z;MWM}O)DkdVuoPNypT7ZXR68Xz}Cc4S^}BfEs$v*A@Yw!kNk1pN@SL6C7$}q#@e?d z^T;sPEW@2M$L0u~lNw)KN6p6=V-}0XS|GEzOJt6(^gSXmYSF{T1Tu?oyT2h*J-o=h zGxkbe+OC{e8*AToNBg!JoUc3@oi+C}JP$Nci`MAhj?8B)S(9gVM7HB`K2_QXUl)%6 zm3H@LG};=wk6wnlJEFiNi(Pqdm5OJ-m$W0 zHOqGY_FS_v{BOf1o8$7DDWgZD%^+01rnb)Z?F={vfyg7zEN-`c-dm$%rF`X@tl3)E zemX~vt1cZ+sf>;;V%~5WbK#GC%l!uKE8thv92GRG8k)x4kA6bEsyn8W6^Z;wRz6{{b71XEFq)_hEkEaKf~HRi&b z+E?eWL}aMEZpe8RKxm} zy>+KpC7Z#%Jz5-@<7@NU5eSpFt8}}Swmx~5#T@O(Mzt7^WuZ-K1Dl-r$2Uk9}XXS%mXg(Gu(j?R2@Z%a%A zu@$}YSkyZC-8HKrvv2dt5X#pQLpxJtA4lf*u>1Nvn%U>h^GyCZwk9vKl*MVE z-EBSNyGGVTm*a4r%2I2U-^Wo2qt9z=>)yC`{a`aTYsQ>2o5yCfwJm)LkE7xLYc2cu%J_K2b-s4($Q+}Pgx_U+w%Ii<7*j1r7IVvkIv#7k4OgIx zn&YhRp}QJ7ecRk#$`?bGW2^BAle6cg;VhBqUUp~u_BHjD^;HiKo8Fg}{K~XPWBopX zOp)(%TWRYZ_;OxK_VN}-=c^H=&rl*0!eGsDsVvn{INF(XEP+ZEUok85H4Ts2u{i=O z%d0#J<3753zINs8fyrx4EHzeV%}1zooFy{Nn=@yunQ!i4jiDKf>Y?8GXx07BUMrEw zqufK)&2#sEpsN^_*P6&|Ui)r(D36=i>ewvTLQLhzeDwxK=Iid*+9K2OM&Ep8G)I2_ z9F@)Q>u$a|(!drqA@-{hncu@Xv(l9-d?;D-^$!GI%S-F!eWP?-j;=)JYweyzS@ITF zR?Al*$LPpx7R~MRTA8nYbu*F`T90J3`>qJKTkyuXHAx& zAS+`skjd}JEMapbQOkMDk?Ec`cgb6L88!JESAi*Pj>t>3)ORme)}ki-j9NQ}9EbPy zo^~%s=NjVkd+EOAWsM+jQ@w6CTz8V))W~%0 zqx@c8Y9^mm{`%EWJn!nGd-)yxzCN!|M_jshDhKo4`_+A9_xnXnb2R6dPdRIKHsx&t z^~{lJ2Ajubj`^+D?sJJ?@GD2AdHn8yEY?`w=HB;n<*Q=%t?ynVGfx~@M3-5@Ub9)^ zEb%z9SWoB9N<&uSYa(v57>kZ6?y8#48l}~8462u&*ND}ckI;SVJNo=W9X_ZYn4*?j zotw7S@=kH*He}{i?q^%QMw(-@yXN-_!8~gFb7?omt)c z(({^2wR%sL`d|B9W7hB^Jab>YEU}bV>SGokA7#|si}1&5?r*=yYIJ@-n=@uE@il#K z$LLn$t?h1pUq_ag?u%n9S&?-hv^LVm*H<>D&s>(lL-_8@ge7VkUE->*0#VfDkzEap zEm{nveFvtf`MrGR9Ff~pwqdJnB{Ct;?~q^R^OqT7SEc`Um4D~l$sYHMnyhwJ&YWLa z-TcnIuaODAw;QH`kj1RIS6-JtZP?sewgopnJ}+x*IWG5ZOpy6~{2o#I?ByD}b>NJ0 zRF2X{#5mordF6iOW%!b-h%?iMR<;-wHM4q~W-n2dS50hzMd;$n#+9S%E1y+m>5*Rz zhA5Ed_o?sYZLzLVEB%r0&XAXZC(!w*@;>=ho$-!FrTY`!JI1EP$Hf@8SZUuebJWa7 z_f%z#%@JCu@4R<&yjjeX+MlLZjw#f_EN;*J_q&yMv6Tw1qSo}S#8z^q$g0Q2b<})z z_r^=NhsTbgY&0ue83orA@)| zRSvImM2<3W4edVp%%vZBi)US+3%1IB^*!=dp~$^gJx5lz3yWd2?{aK;Ro+Ke`OHy| zTG>NaLKnE?YuUTJ%G+)B(g(Gdmh!3#y^XH#kj?U_}r5@pH7_&#sQPvi>ds(*+9?9mxKz@Y3Q5(|{wjQ~6?s1e+ zvwnH+c1t}XkL~s~Z}RfRps#(cJ?m=EJ#WVvOgbB1jOTv0_VtQca|AUyUFYplk6J#a zX?06@6E(+KTiott-QLBu=FGinN8z4%+5ZSzo7_A1ILfG5zr45Vb$ip2k1$`|<0zwM zDEh}zj~LvKp<&5A?;7C<+Whb~E6XeS*=4EQoAJ}M)V%bA#rxVlV)m%H&$Y$vUUs$D z=rwcgxvt%#ylm^&KDy0XV^g0lZ~JX8wa0wV5vbloQCr4rMCogJC8V{bMqjrNHo`sZ z^1R7o|04$T!+q|;Qnxp`_d7YVrsqvd|5(ZqnzQ!I{fIJZ*0=u=wt|67v*uT-*Oq?U z%hfTTYtMCEd#~%ZenYovbm?t*rPkWgHKJ~p-+mAGwnpOiD5GY5$7F=h>Sg$07Pm(k zHS0U{5#evt+CA5LlzqypW_xXEaxxUl(6RU`*ofS_F3+2h*WU=6+2{AN_FU`XZDTs3 zUel)MO-mP+x;>x6{jELMwYTMETfd?A9n2Hwv+m<|FT2`fecbP+&$Y#SMj18hTaT!@ zj#=H$rls~g=fOtBSnE5`h}^r{v%JmfwWYri@@XJH!r!QQ-`e7KFY9(&uhQ4@N`7=% zy4v%5xCic$mu`=IwYIoD%BWf2!AEGm+ViHR=A|A{w>Pnx zrSzq|GQVr@`?coxG_SgS>q1kvx35n=^FW!O_oF~Tv`p1D2Bs9E3sM>Mg7 zAMRmoal4mwyH?QKtn{n!H)`&4ZE?Gob$c@ky{DC$b09z5pKkQg)9=-8$-OK6P)lve zd$+X@KEga`_anEu$6n@bs=GbPsCnPo^QLF&QRA`ep<82?nAdAw*1oyj%dYk|u4@m& zkAV=3`3U#3&5vj^6kS;A_L|E!MrzNSeZ~}h?tSf9-e&dM(%*=7UTV*qQCg$#9#OAp zleea&KP*~_7~vk)p1D2Bs9E3sM>IWev*h08tcA~AR&NiFqt@=b<}CY^SIzd?(uTzS z@Un@Zws=o3>vqkmw%oh&s+nI+OMfFY-#~u2pJReP#`@iBWZj<2vwSW38{r=K{9d{} z%BWc%@9AaT-dvB`&!*>1ONp$zJmD&{Ac&fwtg&`u8E8cAUF})krg~R<6KiQP6g8GMyz;i$Zy@WK zVCzOxqaA$2P_fm%Hc{4=dc@#<7-yfKxj^s!wE5v}R+d-tv&&Mqm+|t&WASw{bTNC> z+~?Zj_9&xfeFq<*nPW{$Km4kRzW)(+kJ6X&s>w@N``{zo`)*&YN3&o1+B8>VDA=01 z(Z$nXBL>3e_9&y)j#-rorGsrJl0jxuUvI-+0C`o~g^a72HMj>K^B1?Y*w^_NYfK#zZYzRV%$MubMnHE&YtJnPYzUskXR1%BZ#9qi%2d z*|hZIx%I6_gx)xUHb1&01Q@E49{^dPIH?^SSnX z=q$v@s2T1y^j)6y+up<)mhdNP;ZxM2HEMZln>BB@ddwRbqGk-#Jao0^JXv2K5k5uD zeX1>P_p)y9;#zZddEP|d{|LKB?wxxaWz?)+-dpv$y=loulxym1`$b@>(GTv&(6Hp5 zw~q)W9ZQ=Z-qw!3{}C~3co;Qfq~@ioy}4d)$-Qs-+T>3C+xoRz^Si4qKf8Qy;vdry z`RujNd7IU1OMfGbf&O{ue?)VoYtNgk^@m0GixKYOn6lvGo4htH-Ja*34UM;fNA%;_ z=S5$xX}jm$=xtnZ(;Q)zKqkM-D??J_8Q9uAx(!=%)ti3yx%RvpOV}BnFH~Q`oO%~cLO*~DX!~du`>fF+ftxZiFx0f{}8%vbj~%BWf2p^nIBu06}!tX^CC z8zG-+KZjx&DwgP{TIp+frCGZyUG4cjeC8UR+oOz{_3au_x978lhfxb$QOjG0YK?yG zahoUJW@UM${)e1cInp z-~LC~dX>JESMsB@lvir4E%k`}9_?%1&71B~;w`V5?fI!Dh`U(6ph=cBf`-OIYYi)+nUBXK{XjGFcBe}t_~?wxxa zWz?)+-dpv$y=loun9sH6O^*7Jzw7hKk(e!noe(j^%tTs#TpZgqT)U03LTlKE?60I>% z^Uy?FTlyc-uV?*ZDMz@6U7k02?0-bLrllXcYO}cA%bK@=*UOPLJ#Sk2$5M`H^L${> z2EyX@D5K`MWeH@OBfnC;w)ERxu8w)o^h5JBtxb!14b`fCrMKmkT5C(!h`L>V`#s#R z8j0JZjGFZwlMz0vm*K}i7Pos@k8pdGUJHMt*6z91qwG^&HQQ^8<{Y|b?%|k@$i1sQ zuRUuTa$;j z5%nEoeFnx>d*(f(jGFbWN67QMPs|$rM9olseyqM;`OKvsZLHxU z-Zr#*s8{K0dDZm1Y3XN#d)Vc9liRKlb$ioKA+3GYb-e<1JydJ-8wi_b@HQ*UE49{^ zt`TiWYHZ<|wbbp+d(BAYuWR4klcA&S9$_n%`&0U%mfDi{ZfhTWgn1tr9A#~ByO(u) zH`jyvVJNz=)a`9Ndms1EJ&rPJ*2jB#S+~n`Z)+bhm>=#>7jMmb)FXTa!eoKH&1$pc{<+UlM$P)=y;bjOFVPw^&X1Q(w6(>1dRe!(qbq$a zujF@a=?_bZejv}>9%a-FMUACyZ!+KQc{eXL)`3TaKT&g^Ym3{xtlOJdyr-4rnmRwV zuWt9UtG&5iX34!P{ZLD7$$Jl_y~Jw1y2p80d#~%fJ?c@*$26_7l-`zCYOO6@BkJ~i zecXfGt9BIL)5|d#(dBvWnf2`&QMbqHxSvf%YR@%m^ln36x7Q=&MZL-cd*&@;IwJSA z%d>9u`Q5CZTg+GY*vs1UZuH$F>NRb8-n7){bI(<;+jGmnSR#hJkCo+>BWkmHTa<%& z;$GK%-0o#pd#sQ96!Q;caeI_ev(a7mh*{mwrls~g=fOtBSnE5`h}^r{v%JmfwWYri z@@XJHa)0YSdE3zLp5KC`5Jt`KE=%c4 zc_lweOL?W%+ES0m?_nOa`;lASzbK>Devi66pVd9AJ#%}MQM0~79}(V1&3vjotJ|A# zT#pczd{lGIo0g$_?wIQlzJmG8r61Okw?{o{`It6q-rm0I?umQajkbG)-6Qv>^g}JR zCGXwVKKKapJ}~%t*A};XS+@@jed%j?C0w}rp-aX;Jq zh&Dsfg{5wa_@2^;d7VO+hhKynJ3*m^gE&riTmMY6G3h9o?h1NzBajc zHI}^1>b0f65%OgqKito@K6zVPd-Ja9Rr*?9X+)Q$t3AJmdsw4$dz4YLzGE_?AJ44s zn2!j5qt@=Z)}!oGUNzfmi@faSMLlXfe%&11-q-r&{&o4@%*w72W&6;uISwzIcxsFH zj8e56S^u7QkI0#`nPYzUu(r58%BZ#9qi)YL?0iW*- zZenX%KFQUpd>!Dj?mYCOTUe><3 z-OH}_wn(o%3_rZ3wz%EPuJ%|P_p{B9XfqUDSnBqgOL;eR&-%wwj>x_5@~j(uemAS< z7Mt1U_p-*?jlO$Cy{1jio0b}V?z!r9du|yROT>`(v9i2!L~T}Yi*hhe-0QlJ+r8{+ zkM(h%V*Y_FZjUl*HoEH`F{}I8wA7yGJlLohYkdbAk$YErmbY2Gw)8hbJ`LnY?r+^E zZyVY@)T{KhypkVXmag{v9`0e6=iN;DouZ7I-M!oM+%rSb50-L7%pNuOqs!9OEh^qApFR9Ai`%1&n)My}h(HiE^Qrc%Zf{0iJ)(})=9)JxL-*V<*CTudbAOwj zHNCg~`KYKzE$$RGwaS};JaJFE(Khc9WBu;3oxiLu^NTikAC zdqlP2b?>@xx37ke&b=u;QA=&fdk>|(Tp#na+uxdp{zr6sUV7F)mU4u9*yVYX$Nooj zd)|${=5^o^j;!f<)6zedazweNx@ux=T52pdF1NN@0-3xhugtH~JL}QbZz!V&LepIN zcGUg!Yx>x<=zdLW)6%^*zPkB}TfMe;PcOUL+qkYhY@(4~4`qm@ldEO^x4S%B6o?lJ$LmiRNT>8<*THagr z{zk~BZkC#ThKeQnsaE=0UTKalOILe-51+Y4=k_S0*3M*Cdp>J;7`4C^wY+tx*68OR z)!5{Tw^>KHN8O&!>X`atp&5~bSpq@S!l$T3Yt-`AHf!E)^}#$D zQ?$($^E-u4QFEVai`%`d+q>dcb9V96MBo1iyGQPwdmLrdtY6++^}4-j$w$~~`kF== zHAB%qmU_hCehdvu?s@x&VA2t^`QdF=mRIt#w3JtBtt~NYco?;uk)d1jQC|1aF@MzD z>)PUWFT2`n{6oX$o_XmWd+GKlqh@{VJNM2#_A+m?dTsHZUe@g;bLK(2AGy^rc$v4U z?)E67=6&5GF9-Kbt=`kien!NsUbC{il9#om_PlOyjwsi(>+7j?v43vF85NzG|Ml z-RncQ`Uo$Z*oI; z9U3|xk#g*6mGJy=RoF<-V3zYN;)GZ>!gqdPIH?n>prp zpKFWTql{YnJ?i#+R`;;>%BB@dd%y-w^`cOK>cf+ zx{muqtJQLknx3@lNk7)|p6&jHPv&RsZC866KHXz*Y-M{BQ{AqW&F@%_X!pG7Sr?YN zU9&dVqx7TcnLMrg*maw=##N8@`J0|J@u}~a_iOjM%Rk4|)^G5&ab%wl$52Mg$2R}m z_p&UnY+T#uwtHH?K&C$VRU1S7wwH*_+osP=i+pRd4i%e?F1;%skt)~Ll@q86=Q%l#a>fB7h{4`p=QI=d%PM$J60{qJh`NO#Xv z4#m5H`VDQgysACbb?xmJ(Jx0fkk@sef%N;=tdRxD? zoU?v8vj4Zt4eVd-vG??{Zf~OTo>8jy|39{&GZLQW=-RA#yVYxCx-PL=kG6ho@jKY) z+@so)yv^#hrT-CazO-R$>(`F0&1x%?ds}-t)EMjM9&J9?*lNzY+S}3PUa8(h*B+_; zSj&6L&)WB<%BXo?Sq7iIY;X7Q^Y(GS+^Z;~rapsRHRClbfiP;}bJU_WYISQ{ zOWjAFs-NR(`rc;Adx!6CE$?Xz7st+hq|m)>-FTetfP zL>V>n&V9_w+7Dgl?NN_fIi|d_US;1lY{HuR=kOMX;%BXqY!7b*u zd+%k9!tMR_j+vu2G_Ta(dqx>Gzu#aM_qoQ>&4`a|W7yl=gQ0nv_qO`yv$z*cY^7ze ztAWs!o|RWx@1|v7>p(3{-r~NFt<670MYMapX=&@%ob!vZG}ohPkw3ELo|aeElD7|J zX~Pz)7js7~a7L|cEw8*+o7LO$QvFKL%PVWG`{=saueRvk`CL{X6H61#P%X7jV}?X` zDMz+r8w!_Wf?u=Oh)aK(9+vHcU6o^fp0*jiEy}1h`?sw|JCgb?rMIPjx+AQ0{U|8!c0VHO0oxlY=?oXj*rfY9!dQ$=x4*V;3)dYdrydTy%3ov~K! zp;a2MGtWi9natMtsBubmUWG2iQ)gLbS{ ze|?|3nx^GDCf&7urCwc%#6^*+ilkG~l|So|nb0O>k=Z-Z37^uP>|QQ2 zx46&wEEBrAx15PCTXR0Vb>D{szgoe>CNV5ja~IsCZCMEb z*-7+^N;sLmIMw7_(NujuMT)vc&qV(G4wa7?k&!}0p}%L0(?08+yZ+FX*U+d{k@^%x z)ie3tNp-GYDgBwA^EFIgXwB=DlicGctFF2;um3JHIq7;mQ}grR+^M|3T+d8?&#rT> z?a!VwV|t(7M0G{8+eu|twaGl`-g>ZmxKvyZ4;LcO7^BrB%_DkI8?2@lbPj z-zPoa{Q~4j(djMrwqAFI>bHufcl!>dtTa3DIRB2$t1da4G=A8zg87Z6`s ztf!tGfsO7>kEx!%!S1GZX%{{=w@p1ezn#)FOIkwT-be2A(|KCI|MN^eaksOZYrSS% zYgYVOCOdoL7`=CTqGvZt-I}Q=T*V7st4 zO=jz@&zerg&3Uzx*<01$D>m1%`Nq2QO0LhD^VE6b)B5bVI;gwwqU`Bx`i`D-b{(Ie zc%IR}y7L|7$}1<&e#exV2z;lntLQhF^3#p>io&7s?Q?sk-_(0@roLOKz?y|?-r|jXjh${*v{l{T`f0{lud2QJ+*2Kd6Rj4VQ+_6M zPVM^N+>@u8_WE~q?sB)qZ*H_R=bXInGw1%^cbD-O(mQ3Rlas8-dcmMzZ diff --git a/unpublishedScripts/marketplace/xylophone/A4.wav b/unpublishedScripts/marketplace/xylophone/A4.wav new file mode 100644 index 0000000000000000000000000000000000000000..8e3f4e370c72831a28db18f177c93bd7500bb83e GIT binary patch literal 79274 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 literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/B2.wav b/unpublishedScripts/marketplace/xylophone/B2.wav deleted file mode 100644 index 0c58074b841cecfaebc14b0dd438b70957e71908..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180044 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 diff --git a/unpublishedScripts/marketplace/xylophone/C4.wav b/unpublishedScripts/marketplace/xylophone/C4.wav new file mode 100644 index 0000000000000000000000000000000000000000..dc6724de6d2e21563abdeb9b5d503dbb12f78f90 GIT binary patch literal 111906 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

m<<0BLAeD(DTFEa7> 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 literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/D2.wav b/unpublishedScripts/marketplace/xylophone/D2.wav deleted file mode 100644 index 1c51c74d937b8c9179183a483dcbd5e67ff0f1b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190076 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%0DVeG7P%G{~PX{pLw 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

#rs^bE@ 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 GKl~q>m3^WB literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/F2.wav b/unpublishedScripts/marketplace/xylophone/F2.wav deleted file mode 100644 index df8da0fadc559060c655442dd91b33ffae1fa2bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188960 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 QZRn?Tz2iWA>TkdQ0SU`pIRF3v literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/xylophone/G2.wav b/unpublishedScripts/marketplace/xylophone/G2.wav deleted file mode 100644 index b83914ee8a204cb32b1b824113668c7350eae0a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188960 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 bdjhXl+_RPbdA3(x|9@)TiDEr#-BZdxoQ9vo diff --git a/unpublishedScripts/marketplace/xylophone/G4.wav b/unpublishedScripts/marketplace/xylophone/G4.wav new file mode 100644 index 0000000000000000000000000000000000000000..7bb88e690f251b6ce2e47c6e8a265a6350c50e70 GIT binary patch literal 73320 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

+ diff --git a/domain-server/resources/web/js/domain-server.js b/domain-server/resources/web/js/domain-server.js index 88ab7b1470..cc11cf4b48 100644 --- a/domain-server/resources/web/js/domain-server.js +++ b/domain-server/resources/web/js/domain-server.js @@ -33,9 +33,17 @@ $(document).ready(function(){ return this.href == url; }).parent().addClass('active'); - $('body').on('click', '#restart-server', function(e){ - $.get("/restart"); - showRestartModal(); + $('body').on('click', '#restart-server', function(e) { + swal( { + title: "Are you sure?", + text: "This will restart your domain server, causing your domain server to be briefly offline.", + type: "warning", + html: true, + showCancelButton: true + }, function() { + $.get("/restart"); + showRestartModal(); + }); return false; }); }); \ No newline at end of file diff --git a/domain-server/resources/web/settings/index.shtml b/domain-server/resources/web/settings/index.shtml index 13f5668010..b74c3591f0 100644 --- a/domain-server/resources/web/settings/index.shtml +++ b/domain-server/resources/web/settings/index.shtml @@ -86,7 +86,6 @@ - From 7eed90bf54b1f637df5927ad0e2d05c9c201302a Mon Sep 17 00:00:00 2001 From: seefo Date: Thu, 15 Jun 2017 08:48:20 -0700 Subject: [PATCH 0519/1049] Added Upstream Servers setting to domain server --- .../resources/describe-settings.json | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index c7dc97f595..4f3375ede4 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -1395,6 +1395,45 @@ ] } ] + }, + { + "name": "upstream_servers", + "label": "Upstream Servers", + "assignment-types": [0,1], + "type": "table", + "can_add_new_rows": true, + "help": "Upstream servers that relay data for replicated users to this server", + "numbered": false, + "columns": [ + { + "name": "address", + "label": "Address", + "can_set": true + }, + { + "name": "port", + "label": "Port", + "can_set": true + }, + { + "name": "server_type", + "label": "Server Type", + "type": "select", + "placeholder": "Audio Mixer", + "default": "Audio Mixer", + "can_set": true, + "options": [ + { + "value": "Audio Mixer", + "label": "Audio Mixer" + }, + { + "value": "Avatar Mixer", + "label": "Avatar Mixer" + } + ] + } + ] } ] } From 71cc76e94fd3828cfb096d85126af9aaeaa91997 Mon Sep 17 00:00:00 2001 From: seefo Date: Mon, 19 Jun 2017 13:26:14 -0700 Subject: [PATCH 0520/1049] Renamed upstream servers setting in domain server --- domain-server/resources/describe-settings.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index 4f3375ede4..5b2a856338 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -1397,12 +1397,12 @@ ] }, { - "name": "upstream_servers", - "label": "Upstream Servers", + "name": "broadcasting_servers", + "label": "Broadcasting Servers", "assignment-types": [0,1], "type": "table", "can_add_new_rows": true, - "help": "Upstream servers that relay data for replicated users to this server", + "help": "Servers that broadcast data to this domain", "numbered": false, "columns": [ { From 48b5989b6013ce55ab7837d7f478d5ebf4877e64 Mon Sep 17 00:00:00 2001 From: seefo Date: Mon, 19 Jun 2017 15:07:24 -0700 Subject: [PATCH 0521/1049] add upstream nodes to domain nodelist --- .../resources/describe-settings.json | 3 +- domain-server/src/DomainServer.cpp | 115 ++++++++++++------ domain-server/src/DomainServer.h | 8 ++ libraries/networking/src/Node.cpp | 19 ++- libraries/networking/src/NodeType.h | 5 + 5 files changed, 112 insertions(+), 38 deletions(-) diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index 5b2a856338..08eca8bb73 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -1339,6 +1339,7 @@ { "name": "broadcasting", "label": "Broadcasting", + "restart": false, "settings": [ { "name": "users", @@ -1397,7 +1398,7 @@ ] }, { - "name": "broadcasting_servers", + "name": "upstream_servers", "label": "Broadcasting Servers", "assignment-types": [0,1], "type": "table", diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 7c14d2e924..dd0d58570b 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -121,6 +121,8 @@ DomainServer::DomainServer(int argc, char* argv[]) : this, &DomainServer::updateReplicatedNodes); connect(&_settingsManager, &DomainServerSettingsManager::settingsUpdated, this, &DomainServer::updateDownstreamNodes); + connect(&_settingsManager, &DomainServerSettingsManager::settingsUpdated, + this, &DomainServer::updateUpstreamNodes); setupGroupCacheRefresh(); @@ -135,6 +137,7 @@ DomainServer::DomainServer(int argc, char* argv[]) : updateReplicatedNodes(); updateDownstreamNodes(); + updateUpstreamNodes(); if (_type != NonMetaverse) { // if we have a metaverse domain, we'll use an access token for API calls @@ -2229,53 +2232,83 @@ void DomainServer::refreshStaticAssignmentAndAddToQueue(SharedAssignmentPointer& static const QString BROADCASTING_SETTINGS_KEY = "broadcasting"; -void DomainServer::updateDownstreamNodes() { +struct ReplicationServerInfo { + NodeType_t nodeType; + HifiSockAddr sockAddr; +}; + +ReplicationServerInfo serverInformationFromSettings(QVariantMap serverMap, ReplicationServerDirection direction) { + static const QString REPLICATION_SERVER_ADDRESS = "address"; + static const QString REPLICATION_SERVER_PORT = "port"; + static const QString REPLICATION_SERVER_TYPE = "server_type"; + + if (serverMap.contains(REPLICATION_SERVER_ADDRESS) && serverMap.contains(REPLICATION_SERVER_PORT)) { + + auto nodeType = NodeType::fromString(serverMap[REPLICATION_SERVER_TYPE].toString()); + + ReplicationServerInfo serverInfo; + + if (direction == Upstream) { + serverInfo.nodeType = NodeType::upstreamType(nodeType); + } else if (direction == Downstream) { + serverInfo.nodeType = NodeType::downstreamType(nodeType); + } + + // read the address and port and construct a HifiSockAddr from them + serverInfo.sockAddr = { + serverMap[REPLICATION_SERVER_ADDRESS].toString(), + (quint16) serverMap[REPLICATION_SERVER_PORT].toString().toInt() + + }; + + return serverInfo; + } + + return { NodeType::Unassigned, HifiSockAddr() }; +} + +void DomainServer::updateReplicationNodes(ReplicationServerDirection direction) { auto settings = _settingsManager.getSettingsMap(); + if (settings.contains(BROADCASTING_SETTINGS_KEY)) { auto nodeList = DependencyManager::get(); - std::vector downstreamNodesInSettings; - auto replicationSettings = settings.value(BROADCASTING_SETTINGS_KEY).toMap(); - if (replicationSettings.contains("downstream_servers")) { - auto serversSettings = replicationSettings.value("downstream_servers").toList(); + std::vector replicationNodesInSettings; - std::vector knownDownstreamNodes; + auto replicationSettings = settings.value(BROADCASTING_SETTINGS_KEY).toMap(); + + QString serversKey = direction == Upstream ? "upstream_servers" : "downstream_servers"; + QString replicationDirection = direction == Upstream ? "upstream" : "downstream"; + + if (replicationSettings.contains(serversKey)) { + auto serversSettings = replicationSettings.value(serversKey).toList(); + + std::vector knownReplicationNodes; nodeList->eachNode([&](const SharedNodePointer& otherNode) { - if (NodeType::isDownstream(otherNode->getType())) { - knownDownstreamNodes.push_back(otherNode->getPublicSocket()); + if ((direction == Upstream && NodeType::isUpstream(otherNode->getType())) + || (direction == Downstream && NodeType::isDownstream(otherNode->getType()))) { + knownReplicationNodes.push_back(otherNode->getPublicSocket()); } }); for (auto& server : serversSettings) { - auto downstreamServer = server.toMap(); + auto replicationServer = serverInformationFromSettings(server.toMap(), direction); - static const QString DOWNSTREAM_SERVER_ADDRESS = "address"; - static const QString DOWNSTREAM_SERVER_PORT = "port"; - static const QString DOWNSTREAM_SERVER_TYPE = "server_type"; + if (!replicationServer.sockAddr.isNull() && replicationServer.nodeType != NodeType::Unassigned) { + // make sure we have the settings we need for this replication server + replicationNodesInSettings.push_back(replicationServer.sockAddr); - // make sure we have the settings we need for this downstream server - if (downstreamServer.contains(DOWNSTREAM_SERVER_ADDRESS) && downstreamServer.contains(DOWNSTREAM_SERVER_PORT)) { - - auto nodeType = NodeType::fromString(downstreamServer[DOWNSTREAM_SERVER_TYPE].toString()); - auto downstreamNodeType = NodeType::downstreamType(nodeType); - - // read the address and port and construct a HifiSockAddr from them - HifiSockAddr downstreamServerAddr { - downstreamServer[DOWNSTREAM_SERVER_ADDRESS].toString(), - (quint16) downstreamServer[DOWNSTREAM_SERVER_PORT].toString().toInt() - }; - downstreamNodesInSettings.push_back(downstreamServerAddr); - - bool knownNode = find(knownDownstreamNodes.cbegin(), knownDownstreamNodes.cend(), - downstreamServerAddr) != knownDownstreamNodes.cend(); + bool knownNode = find(knownReplicationNodes.cbegin(), knownReplicationNodes.cend(), + replicationServer.sockAddr) != knownReplicationNodes.cend(); if (!knownNode) { - // manually add the downstream node to our node list - auto node = nodeList->addOrUpdateNode(QUuid::createUuid(), downstreamNodeType, - downstreamServerAddr, downstreamServerAddr); + // manually add the replication node to our node list + auto node = nodeList->addOrUpdateNode(QUuid::createUuid(), replicationServer.nodeType, + replicationServer.sockAddr, replicationServer.sockAddr); node->setIsForcedNeverSilent(true); - qDebug() << "Adding downstream node:" << node->getUUID() << downstreamServerAddr; + qDebug() << "Adding" << (direction == Upstream ? "upstream" : "downstream") + << "node:" << node->getUUID() << replicationServer.sockAddr; - // manually activate the public socket for the downstream node + // manually activate the public socket for the replication node node->activatePublicSocket(); } } @@ -2288,11 +2321,13 @@ void DomainServer::updateDownstreamNodes() { // we cannot recursively take the write lock required by handleKillNode) std::vector nodesToKill; nodeList->eachNode([&](const SharedNodePointer& otherNode) { - if (NodeType::isDownstream(otherNode->getType())) { - bool nodeInSettings = find(downstreamNodesInSettings.cbegin(), downstreamNodesInSettings.cend(), - otherNode->getPublicSocket()) != downstreamNodesInSettings.cend(); + if ((direction == Upstream && NodeType::isUpstream(otherNode->getType())) + || (direction == Downstream && NodeType::isDownstream(otherNode->getType()))) { + bool nodeInSettings = find(replicationNodesInSettings.cbegin(), replicationNodesInSettings.cend(), + otherNode->getPublicSocket()) != replicationNodesInSettings.cend(); if (!nodeInSettings) { - qDebug() << "Removing downstream node:" << otherNode->getUUID() << otherNode->getPublicSocket(); + qDebug() << "Removing" << replicationDirection + << "node:" << otherNode->getUUID() << otherNode->getPublicSocket(); nodesToKill.push_back(otherNode); } } @@ -2304,6 +2339,14 @@ void DomainServer::updateDownstreamNodes() { } } +void DomainServer::updateDownstreamNodes() { + updateReplicationNodes(Downstream); +} + +void DomainServer::updateUpstreamNodes() { + updateReplicationNodes(Upstream); +} + void DomainServer::updateReplicatedNodes() { // Make sure we have downstream nodes in our list auto settings = _settingsManager.getSettingsMap(); diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index 7e43397e9c..8851e3380b 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -39,6 +39,11 @@ typedef QMultiHash TransactionHash; using Subnet = QPair; using SubnetList = std::vector; +enum ReplicationServerDirection { + Upstream, + Downstream +}; + class DomainServer : public QCoreApplication, public HTTPSRequestHandler { Q_OBJECT public: @@ -104,6 +109,7 @@ private slots: void updateReplicatedNodes(); void updateDownstreamNodes(); + void updateUpstreamNodes(); signals: void iceServerChanged(); @@ -170,6 +176,8 @@ private: QString pathForRedirect(QString path = QString()) const; + void updateReplicationNodes(ReplicationServerDirection direction); + SubnetList _acSubnetWhitelist; std::vector _replicatedUsernames; diff --git a/libraries/networking/src/Node.cpp b/libraries/networking/src/Node.cpp index ea1b6e0eb5..d7f8f404e6 100644 --- a/libraries/networking/src/Node.cpp +++ b/libraries/networking/src/Node.cpp @@ -42,6 +42,8 @@ void NodeType::init() { TypeNameHash.insert(NodeType::MessagesMixer, "Messages Mixer"); TypeNameHash.insert(NodeType::AssetServer, "Asset Server"); TypeNameHash.insert(NodeType::EntityScriptServer, "Entity Script Server"); + TypeNameHash.insert(NodeType::UpstreamAudioMixer, "Upstream Audio Mixer"); + TypeNameHash.insert(NodeType::UpstreamAvatarMixer, "Upstream Avatar Mixer"); TypeNameHash.insert(NodeType::DownstreamAudioMixer, "Downstream Audio Mixer"); TypeNameHash.insert(NodeType::DownstreamAvatarMixer, "Downstream Avatar Mixer"); TypeNameHash.insert(NodeType::Unassigned, "Unassigned"); @@ -52,8 +54,23 @@ const QString& NodeType::getNodeTypeName(NodeType_t nodeType) { return matchedTypeName != TypeNameHash.end() ? matchedTypeName.value() : UNKNOWN_NodeType_t_NAME; } +bool NodeType::isUpstream(NodeType_t nodeType) { + return nodeType == NodeType::UpstreamAudioMixer || nodeType == NodeType::UpstreamAvatarMixer; +} + bool NodeType::isDownstream(NodeType_t nodeType) { - return nodeType == NodeType::DownstreamAudioMixer || nodeType == NodeType::DownstreamAvatarMixer; + return nodeType == NodeType::DownstreamAudioMixer || nodeType == NodeType::DownstreamAvatarMixer; +} + +NodeType_t NodeType::upstreamType(NodeType_t primaryType) { + switch (primaryType) { + case AudioMixer: + return UpstreamAudioMixer; + case AvatarMixer: + return UpstreamAvatarMixer; + default: + return Unassigned; + } } NodeType_t NodeType::downstreamType(NodeType_t primaryType) { diff --git a/libraries/networking/src/NodeType.h b/libraries/networking/src/NodeType.h index dacd5e1a68..0130e92cfc 100644 --- a/libraries/networking/src/NodeType.h +++ b/libraries/networking/src/NodeType.h @@ -25,6 +25,8 @@ namespace NodeType { const NodeType_t AssetServer = 'A'; const NodeType_t MessagesMixer = 'm'; const NodeType_t EntityScriptServer = 'S'; + const NodeType_t UpstreamAudioMixer = 'B'; + const NodeType_t UpstreamAvatarMixer = 'C'; const NodeType_t DownstreamAudioMixer = 'a'; const NodeType_t DownstreamAvatarMixer = 'w'; const NodeType_t Unassigned = 1; @@ -32,9 +34,12 @@ namespace NodeType { void init(); const QString& getNodeTypeName(NodeType_t nodeType); + bool isUpstream(NodeType_t nodeType); bool isDownstream(NodeType_t nodeType); + NodeType_t upstreamType(NodeType_t primaryType); NodeType_t downstreamType(NodeType_t primaryType); + NodeType_t fromString(QString type); } From ea45e341eec169126a9e28b269209d7b8691d76e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 20 Jun 2017 14:31:27 -0700 Subject: [PATCH 0522/1049] send upstream nodes down to avatar/audio --- assignment-client/src/audio/AudioMixer.cpp | 5 ++++- assignment-client/src/avatars/AvatarMixer.cpp | 5 ++++- domain-server/src/DomainServer.cpp | 3 ++- libraries/networking/src/LimitedNodeList.cpp | 4 ++-- libraries/networking/src/NodeList.cpp | 4 ++-- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index ab4b20b9cc..81bae49594 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -389,7 +389,10 @@ void AudioMixer::start() { auto nodeList = DependencyManager::get(); // prepare the NodeList - nodeList->addSetOfNodeTypesToNodeInterestSet({ NodeType::Agent, NodeType::DownstreamAudioMixer, NodeType::EntityScriptServer }); + nodeList->addSetOfNodeTypesToNodeInterestSet({ + NodeType::Agent, NodeType::EntityScriptServer, + NodeType::UpstreamAudioMixer, NodeType::UpstreamAvatarMixer + }); nodeList->linkedDataCreateCallback = [&](Node* node) { getOrCreateClientData(node); }; // parse out any AudioMixer settings diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 28ede7a77d..4148bb3730 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -862,7 +862,10 @@ AvatarMixerClientData* AvatarMixer::getOrCreateClientData(SharedNodePointer node void AvatarMixer::domainSettingsRequestComplete() { auto nodeList = DependencyManager::get(); - nodeList->addSetOfNodeTypesToNodeInterestSet({ NodeType::Agent, NodeType::DownstreamAvatarMixer, NodeType::EntityScriptServer }); + nodeList->addSetOfNodeTypesToNodeInterestSet({ + NodeType::Agent, NodeType::EntityScriptServer, + NodeType::UpstreamAvatarMixer, NodeType::DownstreamAvatarMixer + }); // parse the settings to pull out the values we need parseDomainServerSettings(nodeList->getDomainHandler().getSettingsObject()); diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index dd0d58570b..276206f37d 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -2302,7 +2302,8 @@ void DomainServer::updateReplicationNodes(ReplicationServerDirection direction) if (!knownNode) { // manually add the replication node to our node list auto node = nodeList->addOrUpdateNode(QUuid::createUuid(), replicationServer.nodeType, - replicationServer.sockAddr, replicationServer.sockAddr); + replicationServer.sockAddr, replicationServer.sockAddr, + false, direction == Upstream); node->setIsForcedNeverSilent(true); qDebug() << "Adding" << (direction == Upstream ? "upstream" : "downstream") diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index d2bae28820..afff71ba23 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -583,14 +583,14 @@ SharedNodePointer LimitedNodeList::addOrUpdateNode(const QUuid& uuid, NodeType_t matchingNode->setPermissions(permissions); matchingNode->setConnectionSecret(connectionSecret); matchingNode->setIsReplicated(isReplicated); - matchingNode->setIsUpstream(isUpstream); + matchingNode->setIsUpstream(isUpstream || NodeType::isUpstream(nodeType)); return matchingNode; } else { // we didn't have this node, so add them Node* newNode = new Node(uuid, nodeType, publicSocket, localSocket); newNode->setIsReplicated(isReplicated); - newNode->setIsUpstream(isUpstream); + newNode->setIsUpstream(isUpstream || NodeType::isUpstream(nodeType)); newNode->setConnectionSecret(connectionSecret); newNode->setPermissions(permissions); diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index f502cb2a3c..423763b3d4 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -669,8 +669,8 @@ void NodeList::parseNodeFromPacketStream(QDataStream& packetStream) { SharedNodePointer node = addOrUpdateNode(nodeUUID, nodeType, nodePublicSocket, nodeLocalSocket, isReplicated, false, connectionUUID, permissions); - // nodes that are downstream of our own type are kept alive when we hear about them from the domain server - if (node->getType() == NodeType::downstreamType(_ownerType)) { + // nodes that are downstream or upstream of our own type are kept alive when we hear about them from the domain server + if (node->getType() == NodeType::downstreamType(_ownerType) || node->getType() == NodeType::upstreamType(_ownerType)) { node->setLastHeardMicrostamp(usecTimestampNow()); } } From 6da5a631526113a09c767abf57f3b1c5348d8801 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 20 Jun 2017 14:53:57 -0700 Subject: [PATCH 0523/1049] verify replicated packets in packet filter --- libraries/networking/src/LimitedNodeList.cpp | 37 ++++++++++++++++++- .../networking/src/udt/PacketHeaders.cpp | 1 + 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index afff71ba23..2212001fec 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -257,8 +257,41 @@ bool LimitedNodeList::packetSourceAndHashMatchAndTrackBandwidth(const udt::Packe PacketType headerType = NLPacket::typeInHeader(packet); if (NON_SOURCED_PACKETS.contains(headerType)) { - emit dataReceived(NodeType::Unassigned, packet.getPayloadSize()); - return true; + if (REPLICATED_PACKET_MAPPING.key(headerType) != PacketType::Unknown) { + // this is a replicated packet type - make sure the socket that sent it to us matches + // one from one of our current upstream nodes + + NodeType_t sendingNodeType { NodeType::Unassigned }; + + eachNodeBreakable([&packet, &sendingNodeType](const SharedNodePointer& node){ + if (node->getType() == NodeType::upstreamType(node->getType()) + && node->getPublicSocket() == packet.getSenderSockAddr()) { + sendingNodeType = node->getType(); + return false; + } else { + return true; + } + }); + + if (sendingNodeType != NodeType::Unassigned) { + emit dataReceived(sendingNodeType, packet.getPayloadSize()); + return true; + } else { + static const QString UNSOLICITED_REPLICATED_REGEX = + "Replicated packet of type \\d+ \\([\\sa-zA-Z:]+\\) received from unknown upstream"; + static QString repeatedMessage + = LogHandler::getInstance().addRepeatedMessageRegex(UNSOLICITED_REPLICATED_REGEX); + + qCDebug(networking) << "Replicated packet of type" << headerType + << "received from unknown upstream" << packet.getSenderSockAddr(); + + return false; + } + + } else { + emit dataReceived(NodeType::Unassigned, packet.getPayloadSize()); + return true; + } } else { QUuid sourceID = NLPacket::sourceIDInHeader(packet); diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index fb416cac4d..ad15d04db1 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -51,6 +51,7 @@ const QHash REPLICATED_PACKET_MAPPING { { PacketType::SilentAudioFrame, PacketType::ReplicatedSilentAudioFrame }, { PacketType::AvatarIdentity, PacketType::ReplicatedAvatarIdentity }, { PacketType::KillAvatar, PacketType::ReplicatedKillAvatar }, + { PacketType::BulkAvatarData, PacketType::ReplicatedBulkAvatarData } }; PacketVersion versionForPacketType(PacketType packetType) { From d05996c13d0a13a31ed5f9a8b11f9b0ff30d9c86 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 20 Jun 2017 16:45:28 -0700 Subject: [PATCH 0524/1049] fix upstream filter check, audio interest set --- assignment-client/src/audio/AudioMixer.cpp | 2 +- libraries/networking/src/LimitedNodeList.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 81bae49594..49eeff8c77 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -391,7 +391,7 @@ void AudioMixer::start() { // prepare the NodeList nodeList->addSetOfNodeTypesToNodeInterestSet({ NodeType::Agent, NodeType::EntityScriptServer, - NodeType::UpstreamAudioMixer, NodeType::UpstreamAvatarMixer + NodeType::UpstreamAudioMixer, NodeType::DownstreamAudioMixer }); nodeList->linkedDataCreateCallback = [&](Node* node) { getOrCreateClientData(node); }; diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index 2212001fec..337845577f 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -264,8 +264,7 @@ bool LimitedNodeList::packetSourceAndHashMatchAndTrackBandwidth(const udt::Packe NodeType_t sendingNodeType { NodeType::Unassigned }; eachNodeBreakable([&packet, &sendingNodeType](const SharedNodePointer& node){ - if (node->getType() == NodeType::upstreamType(node->getType()) - && node->getPublicSocket() == packet.getSenderSockAddr()) { + if (NodeType::isUpstream(node->getType()) && node->getPublicSocket() == packet.getSenderSockAddr()) { sendingNodeType = node->getType(); return false; } else { From 2de6185855097309edcd11ff7c2ed3c365a699f7 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 21 Jun 2017 16:50:15 -0700 Subject: [PATCH 0525/1049] remove avatar mixer destructor --- assignment-client/src/avatars/AvatarMixer.cpp | 4 ---- assignment-client/src/avatars/AvatarMixer.h | 1 - 2 files changed, 5 deletions(-) diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 4148bb3730..7bb4a30652 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -165,10 +165,6 @@ void AvatarMixer::queueIncomingPacket(QSharedPointer message, S _queueIncomingPacketElapsedTime += (end - start); } - -AvatarMixer::~AvatarMixer() { -} - void AvatarMixer::sendIdentityPacket(AvatarMixerClientData* nodeData, const SharedNodePointer& destinationNode) { if (destinationNode->getType() == NodeType::Agent && !destinationNode->isUpstream()) { QByteArray individualData = nodeData->getAvatar().identityByteArray(); diff --git a/assignment-client/src/avatars/AvatarMixer.h b/assignment-client/src/avatars/AvatarMixer.h index 58d4487652..ecff7597f6 100644 --- a/assignment-client/src/avatars/AvatarMixer.h +++ b/assignment-client/src/avatars/AvatarMixer.h @@ -28,7 +28,6 @@ class AvatarMixer : public ThreadedAssignment { Q_OBJECT public: AvatarMixer(ReceivedMessage& message); - ~AvatarMixer(); public slots: /// runs the avatar mixer void run() override; From a6d34010b2994031e918005ea3450cbc0b9a95c2 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 21 Jun 2017 16:56:09 -0700 Subject: [PATCH 0526/1049] use reliable packet lists for replicated identity --- assignment-client/src/avatars/AvatarMixerSlave.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assignment-client/src/avatars/AvatarMixerSlave.cpp b/assignment-client/src/avatars/AvatarMixerSlave.cpp index 8092518454..b2c6b6a341 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.cpp +++ b/assignment-client/src/avatars/AvatarMixerSlave.cpp @@ -83,9 +83,9 @@ int AvatarMixerSlave::sendReplicatedIdentityPacket(const AvatarMixerClientData* if (destinationNode->getType() == NodeType::DownstreamAvatarMixer) { QByteArray individualData = nodeData->getConstAvatarData()->identityByteArray(); individualData.replace(0, NUM_BYTES_RFC4122_UUID, nodeData->getNodeID().toRfc4122()); // FIXME, this looks suspicious - auto identityPacket = NLPacket::create(PacketType::ReplicatedAvatarIdentity); + auto identityPacket = NLPacketList::create(PacketType::ReplicatedAvatarIdentity, QByteArray(), true, true); identityPacket->write(individualData); - DependencyManager::get()->sendUnreliablePacket(*identityPacket, *destinationNode); + DependencyManager::get()->sendPacketList(std::move(identityPacket), *destinationNode); _stats.numIdentityPackets++; return individualData.size(); } else { From e00bbfb2fdf728ce165b0fe54ea63df0403ae4ab Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 22 Jun 2017 12:46:08 -0700 Subject: [PATCH 0527/1049] make upstream nodes setting advanced --- domain-server/resources/describe-settings.json | 1 + 1 file changed, 1 insertion(+) diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index 08eca8bb73..bc67a31c02 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -1402,6 +1402,7 @@ "label": "Broadcasting Servers", "assignment-types": [0,1], "type": "table", + "advanced": true, "can_add_new_rows": true, "help": "Servers that broadcast data to this domain", "numbered": false, From 015284c0e66b2618939ceea63019baac134a128e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 22 Jun 2017 13:03:27 -0700 Subject: [PATCH 0528/1049] do not attempt to replicate audio stream stats --- assignment-client/src/audio/AudioMixerClientData.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index bf19a02d9a..0467b82d40 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -67,7 +67,6 @@ void AudioMixerClientData::processPackets() { case PacketType::MicrophoneAudioNoEcho: case PacketType::MicrophoneAudioWithEcho: case PacketType::InjectAudio: - case PacketType::AudioStreamStats: case PacketType::SilentAudioFrame: case PacketType::ReplicatedMicrophoneAudioNoEcho: case PacketType::ReplicatedMicrophoneAudioWithEcho: @@ -80,11 +79,17 @@ void AudioMixerClientData::processPackets() { QMutexLocker lock(&getMutex()); parseData(*packet); - + optionallyReplicatePacket(*packet, *node); break; } + case PacketType::AudioStreamStats: { + QMutexLocker lock(&getMutex()); + parseData(*packet); + + break; + } case PacketType::NegotiateAudioFormat: negotiateAudioFormat(*packet, node); break; From 0e0f216aeda5ebf162fc01ead37903f927a6b424 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 22 Jun 2017 13:06:47 -0700 Subject: [PATCH 0529/1049] cleanup indentation in packet filter --- libraries/networking/src/LimitedNodeList.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index 337845577f..eab0e5e41f 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -277,12 +277,12 @@ bool LimitedNodeList::packetSourceAndHashMatchAndTrackBandwidth(const udt::Packe return true; } else { static const QString UNSOLICITED_REPLICATED_REGEX = - "Replicated packet of type \\d+ \\([\\sa-zA-Z:]+\\) received from unknown upstream"; + "Replicated packet of type \\d+ \\([\\sa-zA-Z:]+\\) received from unknown upstream"; static QString repeatedMessage - = LogHandler::getInstance().addRepeatedMessageRegex(UNSOLICITED_REPLICATED_REGEX); + = LogHandler::getInstance().addRepeatedMessageRegex(UNSOLICITED_REPLICATED_REGEX); qCDebug(networking) << "Replicated packet of type" << headerType - << "received from unknown upstream" << packet.getSenderSockAddr(); + << "received from unknown upstream" << packet.getSenderSockAddr(); return false; } From 8b7eaaa23a4c0154714c4ea66244e70ffa0dd53d Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 22 Jun 2017 13:27:58 -0700 Subject: [PATCH 0530/1049] activate the public socket always for upstream/downstream servers --- assignment-client/src/audio/AudioMixer.cpp | 5 ----- assignment-client/src/avatars/AvatarMixer.cpp | 1 - libraries/networking/src/NodeList.cpp | 2 ++ 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 49eeff8c77..5e0cd740e6 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -103,11 +103,6 @@ AudioMixer::AudioMixer(ReceivedMessage& message) : ); connect(nodeList.data(), &NodeList::nodeKilled, this, &AudioMixer::handleNodeKilled); - connect(nodeList.data(), &NodeList::nodeAdded, this, [this](const SharedNodePointer& node) { - if (node->getType() == NodeType::DownstreamAudioMixer) { - node->activatePublicSocket(); - } - }); } void AudioMixer::queueAudioPacket(QSharedPointer message, SharedNodePointer node) { diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 7bb4a30652..40cc3a1c0e 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -66,7 +66,6 @@ AvatarMixer::AvatarMixer(ReceivedMessage& message) : connect(nodeList.data(), &NodeList::nodeAdded, this, [this](const SharedNodePointer& node) { if (node->getType() == NodeType::DownstreamAvatarMixer) { getOrCreateClientData(node); - node->activatePublicSocket(); } }); } diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 423763b3d4..e8506e5263 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -670,8 +670,10 @@ void NodeList::parseNodeFromPacketStream(QDataStream& packetStream) { nodeLocalSocket, isReplicated, false, connectionUUID, permissions); // nodes that are downstream or upstream of our own type are kept alive when we hear about them from the domain server + // and always have their public socket as their active socket if (node->getType() == NodeType::downstreamType(_ownerType) || node->getType() == NodeType::upstreamType(_ownerType)) { node->setLastHeardMicrostamp(usecTimestampNow()); + node->activatePublicSocket(); } } From d340c1c68f4069532cf025cd426a37b7fc2c81c7 Mon Sep 17 00:00:00 2001 From: seefo Date: Thu, 22 Jun 2017 13:35:10 -0700 Subject: [PATCH 0531/1049] Fixed a bug where restart modal was shown when it shouldn't be --- domain-server/resources/web/settings/js/settings.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/domain-server/resources/web/settings/js/settings.js b/domain-server/resources/web/settings/js/settings.js index ccd36da757..14347b6be1 100644 --- a/domain-server/resources/web/settings/js/settings.js +++ b/domain-server/resources/web/settings/js/settings.js @@ -424,7 +424,11 @@ function postSettings(jsonSettings) { type: 'POST' }).done(function(data){ if (data.status == "success") { - showRestartModal(); + if ($(".save-button").html() === SAVE_BUTTON_LABEL_RESTART) { + showRestartModal(); + } else { + location.reload(true); + } } else { showErrorMessage("Error", SETTINGS_ERROR_MESSAGE) reloadSettings(); From dd44a81791c8f68f319260d584119ad3f88d41e9 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 22 Jun 2017 13:36:24 -0700 Subject: [PATCH 0532/1049] verify that replication server type is also present --- domain-server/src/DomainServer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 276206f37d..0af1646439 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -2242,7 +2242,8 @@ ReplicationServerInfo serverInformationFromSettings(QVariantMap serverMap, Repli static const QString REPLICATION_SERVER_PORT = "port"; static const QString REPLICATION_SERVER_TYPE = "server_type"; - if (serverMap.contains(REPLICATION_SERVER_ADDRESS) && serverMap.contains(REPLICATION_SERVER_PORT)) { + if (serverMap.contains(REPLICATION_SERVER_ADDRESS) && serverMap.contains(REPLICATION_SERVER_PORT) + && serverMap.contains(REPLICATION_SERVER_TYPE)) { auto nodeType = NodeType::fromString(serverMap[REPLICATION_SERVER_TYPE].toString()); From 0c7baa3ce4d89ba1f0d6d256d5f28bf041cd8d51 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 22 Jun 2017 13:36:58 -0700 Subject: [PATCH 0533/1049] remove an extra blank line --- domain-server/src/DomainServer.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 0af1646439..f842b251d4 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -2259,7 +2259,6 @@ ReplicationServerInfo serverInformationFromSettings(QVariantMap serverMap, Repli serverInfo.sockAddr = { serverMap[REPLICATION_SERVER_ADDRESS].toString(), (quint16) serverMap[REPLICATION_SERVER_PORT].toString().toInt() - }; return serverInfo; From a053a1da4ba402cbcae380ba91c837d5a08a866c Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 22 Jun 2017 13:50:46 -0700 Subject: [PATCH 0534/1049] more HIFI_MEMORY_DEBUGGING fixes --- libraries/gl/CMakeLists.txt | 1 - tests/entities/CMakeLists.txt | 2 +- tools/ice-client/CMakeLists.txt | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/gl/CMakeLists.txt b/libraries/gl/CMakeLists.txt index 0a0ca2fc5f..fd3197410b 100644 --- a/libraries/gl/CMakeLists.txt +++ b/libraries/gl/CMakeLists.txt @@ -1,6 +1,5 @@ set(TARGET_NAME gl) setup_hifi_library(OpenGL Qml Quick) -setup_memory_debugger() link_hifi_libraries(shared networking) target_opengl() diff --git a/tests/entities/CMakeLists.txt b/tests/entities/CMakeLists.txt index 448ea83956..080ae7cdd9 100644 --- a/tests/entities/CMakeLists.txt +++ b/tests/entities/CMakeLists.txt @@ -3,7 +3,7 @@ set(TARGET_NAME "entities-test") # This is not a testcase -- just set it up as a regular hifi project setup_hifi_project(Network Script) - +setup_memory_debugger() set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") # link in the shared libraries diff --git a/tools/ice-client/CMakeLists.txt b/tools/ice-client/CMakeLists.txt index a80145974c..ae42d79f7e 100644 --- a/tools/ice-client/CMakeLists.txt +++ b/tools/ice-client/CMakeLists.txt @@ -1,3 +1,4 @@ set(TARGET_NAME ice-client) setup_hifi_project(Core Widgets) +setup_memory_debugger() link_hifi_libraries(shared networking) From d87a55d6e628071b336bac892db8242895d10065 Mon Sep 17 00:00:00 2001 From: seefo Date: Thu, 22 Jun 2017 13:52:34 -0700 Subject: [PATCH 0535/1049] Made requested change to DS restart dialog message --- domain-server/resources/web/js/domain-server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domain-server/resources/web/js/domain-server.js b/domain-server/resources/web/js/domain-server.js index cc11cf4b48..1577d6f4c6 100644 --- a/domain-server/resources/web/js/domain-server.js +++ b/domain-server/resources/web/js/domain-server.js @@ -36,7 +36,7 @@ $(document).ready(function(){ $('body').on('click', '#restart-server', function(e) { swal( { title: "Are you sure?", - text: "This will restart your domain server, causing your domain server to be briefly offline.", + text: "This will restart your domain server, causing your domain to be briefly offline.", type: "warning", html: true, showCancelButton: true From f1c7d54010b311d0661199507e1b91e7dd30a8f4 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 22 Jun 2017 13:53:06 -0700 Subject: [PATCH 0536/1049] fix the messages printed by domain-server about which name it's using to find ice-servers --- domain-server/src/DomainServer.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 7c14d2e924..bf12549715 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -87,7 +87,7 @@ DomainServer::DomainServer(int argc, char* argv[]) : qDebug() << "[VERSION] VERSION:" << BuildInfo::VERSION; qDebug() << "[VERSION] BUILD_BRANCH:" << BuildInfo::BUILD_BRANCH; qDebug() << "[VERSION] BUILD_GLOBAL_SERVICES:" << BuildInfo::BUILD_GLOBAL_SERVICES; - qDebug() << "[VERSION] We will be using this default ICE server:" << ICE_SERVER_DEFAULT_HOSTNAME; + qDebug() << "[VERSION] We will be using this name to find ICE servers:" << _iceServerAddr; // make sure we have a fresh AccountManager instance @@ -1549,7 +1549,7 @@ void DomainServer::sendHeartbeatToIceServer() { } else { qDebug() << "Not sending ice-server heartbeat since there is no selected ice-server."; - qDebug() << "Waiting for" << ICE_SERVER_DEFAULT_HOSTNAME << "host lookup response"; + qDebug() << "Waiting for" << _iceServerAddr << "host lookup response"; } } @@ -2639,7 +2639,7 @@ void DomainServer::handleICEHostInfo(const QHostInfo& hostInfo) { _iceAddressLookupID = -1; if (hostInfo.error() != QHostInfo::NoError) { - qWarning() << "IP address lookup failed for" << ICE_SERVER_DEFAULT_HOSTNAME << ":" << hostInfo.errorString(); + qWarning() << "IP address lookup failed for" << _iceServerAddr << ":" << hostInfo.errorString(); // if we don't have an ICE server to use yet, trigger a retry if (_iceServerSocket.isNull()) { @@ -2654,7 +2654,7 @@ void DomainServer::handleICEHostInfo(const QHostInfo& hostInfo) { _iceServerAddresses = hostInfo.addresses(); if (countBefore == 0) { - qInfo() << "Found" << _iceServerAddresses.count() << "ice-server IP addresses for" << ICE_SERVER_DEFAULT_HOSTNAME; + qInfo() << "Found" << _iceServerAddresses.count() << "ice-server IP addresses for" << _iceServerAddr; } if (_iceServerSocket.isNull()) { @@ -2689,7 +2689,7 @@ void DomainServer::randomizeICEServerAddress(bool shouldTriggerHostLookup) { // so clear the set of failed addresses and start going through them again qWarning() << "All current ice-server addresses have failed - re-attempting all current addresses for" - << ICE_SERVER_DEFAULT_HOSTNAME; + << _iceServerAddr; _failedIceServerAddresses.clear(); candidateICEAddresses = _iceServerAddresses; From ff5b37c785dbd2e495a9f1f08985be6f69a34528 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Thu, 22 Jun 2017 14:09:05 -0700 Subject: [PATCH 0537/1049] new --scripts switch overrides default scripts location --- interface/src/Application.cpp | 17 +++++++- interface/src/Menu.cpp | 4 +- libraries/script-engine/src/ScriptEngine.cpp | 40 +++++++++---------- libraries/script-engine/src/ScriptEngines.cpp | 21 ++++++---- libraries/script-engine/src/ScriptEngines.h | 3 ++ libraries/script-engine/src/ScriptsModel.cpp | 10 ++--- libraries/shared/src/PathUtils.cpp | 34 +++++++++++----- libraries/shared/src/PathUtils.h | 5 +-- 8 files changed, 85 insertions(+), 49 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e12c73d0bc..a7bed9fc9c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -903,6 +903,11 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo _saveAvatarOverrideUrl = true; } + QString defaultScriptsLocation = getCmdOption(argc, constArgv, "--scripts"); + if (!defaultScriptsLocation.isEmpty()) { + PathUtils::defaultScriptsLocation(defaultScriptsLocation); + } + _glWidget = new GLCanvas(); getApplicationCompositor().setRenderingWidget(_glWidget); _window->setCentralWidget(_glWidget); @@ -1167,7 +1172,15 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // force the model the look at the correct directory (weird order of operations issue) scriptEngines->setScriptsLocation(scriptEngines->getScriptsLocation()); // do this as late as possible so that all required subsystems are initialized - scriptEngines->loadScripts(); + // If we've overridden the default scripts location, just load default scripts + // otherwise, load 'em all + if (!defaultScriptsLocation.isEmpty()) { + scriptEngines->loadDefaultScripts(); + scriptEngines->defaultScriptsLocationOverridden(true); + } else { + scriptEngines->loadScripts(); + } + // Make sure we don't time out during slow operations at startup updateHeartbeat(); @@ -5855,7 +5868,7 @@ void Application::showDialog(const QUrl& widgetUrl, const QUrl& tabletUrl, const void Application::showScriptLogs() { auto scriptEngines = DependencyManager::get(); - QUrl defaultScriptsLoc = defaultScriptsLocation(); + QUrl defaultScriptsLoc = PathUtils::defaultScriptsLocation(); defaultScriptsLoc.setPath(defaultScriptsLoc.path() + "developer/debugging/debugWindow.js"); scriptEngines->loadScript(defaultScriptsLoc.toString()); } diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 8c9baa7c43..3fab5d3d37 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -300,7 +300,7 @@ Menu::Menu() { // Settings > Avatar... action = addActionToQMenuAndActionHash(settingsMenu, "Avatar..."); connect(action, &QAction::triggered, [] { - qApp->showDialog(QString("hifi/dialogs/AvatarPreferencesDialog.qml"), + qApp->showDialog(QString("hifi/dialogs/AvatarPreferencesDialog.qml"), QString("../../hifi/tablet/TabletAvatarPreferences.qml"), "AvatarPreferencesDialog"); }); @@ -626,7 +626,7 @@ Menu::Menu() { action = addActionToQMenuAndActionHash(audioDebugMenu, "Stats..."); connect(action, &QAction::triggered, [] { auto scriptEngines = DependencyManager::get(); - QUrl defaultScriptsLoc = defaultScriptsLocation(); + QUrl defaultScriptsLoc = PathUtils::defaultScriptsLocation(); defaultScriptsLoc.setPath(defaultScriptsLoc.path() + "developer/utilities/audio/stats.js"); scriptEngines->loadScript(defaultScriptsLoc.toString()); }); diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 67b16df1ce..096b3aecfa 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -172,7 +172,7 @@ ScriptEngine::ScriptEngine(Context context, const QString& scriptContents, const emit unhandledException(exception); } }, Qt::DirectConnection); - + setProcessEventsInterval(MSECS_PER_SECOND); if (isEntityServerScript()) { qCDebug(scriptengine) << "isEntityServerScript() -- limiting maxRetries to 1"; @@ -281,7 +281,7 @@ void ScriptEngine::runDebuggable() { scriptDebugMenu = nullptr; } } - disconnect(timer); + disconnect(timer); }); connect(timer, &QTimer::timeout, [this, timer] { @@ -340,7 +340,7 @@ void ScriptEngine::runInThread() { QThread* workerThread = new QThread(); workerThread->setObjectName(QString("js:") + getFilename().replace("about:","")); moveToThread(workerThread); - + // NOTE: If you connect any essential signals for proper shutdown or cleanup of // the script engine, make sure to add code to "reconnect" them to the // disconnectNonEssentialSignals() method @@ -1047,26 +1047,26 @@ void ScriptEngine::run() { auto beforeSleep = clock::now(); // Throttle to SCRIPT_FPS - // We'd like to try to keep the script at a solid SCRIPT_FPS update rate. And so we will + // We'd like to try to keep the script at a solid SCRIPT_FPS update rate. And so we will // calculate a sleepUntil to be the time from our start time until the original target - // sleepUntil for this frame. This approach will allow us to "catch up" in the event - // that some of our script udpates/frames take a little bit longer than the target average + // sleepUntil for this frame. This approach will allow us to "catch up" in the event + // that some of our script udpates/frames take a little bit longer than the target average // to execute. // NOTE: if we go to variable SCRIPT_FPS, then we will need to reconsider this approach const std::chrono::microseconds TARGET_SCRIPT_FRAME_DURATION(USECS_PER_SECOND / SCRIPT_FPS + 1); clock::time_point targetSleepUntil(startTime + (thisFrame++ * TARGET_SCRIPT_FRAME_DURATION)); - // However, if our sleepUntil is not at least our average update and timer execution time - // into the future it means our script is taking too long in its updates, and we want to - // punish the script a little bit. So we will force the sleepUntil to be at least our + // However, if our sleepUntil is not at least our average update and timer execution time + // into the future it means our script is taking too long in its updates, and we want to + // punish the script a little bit. So we will force the sleepUntil to be at least our // averageUpdate + averageTimerPerFrame time into the future. auto averageUpdate = totalUpdates / thisFrame; auto averageTimerPerFrame = _totalTimerExecution / thisFrame; auto averageTimerAndUpdate = averageUpdate + averageTimerPerFrame; auto sleepUntil = std::max(targetSleepUntil, beforeSleep + averageTimerAndUpdate); - // We don't want to actually sleep for too long, because it causes our scripts to hang - // on shutdown and stop... so we want to loop and sleep until we've spent our time in + // We don't want to actually sleep for too long, because it causes our scripts to hang + // on shutdown and stop... so we want to loop and sleep until we've spent our time in // purgatory, constantly checking to see if our script was asked to end bool processedEvents = false; while (!_isFinished && clock::now() < sleepUntil) { @@ -1399,7 +1399,7 @@ QString ScriptEngine::_requireResolve(const QString& moduleId, const QString& re if (!IS_THREADSAFE_INVOCATION(thread(), __FUNCTION__)) { return QString(); } - QUrl defaultScriptsLoc = defaultScriptsLocation(); + QUrl defaultScriptsLoc = PathUtils::defaultScriptsLocation(); QUrl url(moduleId); auto displayId = moduleId; @@ -1465,7 +1465,7 @@ QString ScriptEngine::_requireResolve(const QString& moduleId, const QString& re canonical.setPath(file.canonicalFilePath()); } - bool disallowOutsideFiles = !defaultScriptsLocation().isParentOf(canonical) && !currentSandboxURL.isLocalFile(); + bool disallowOutsideFiles = !PathUtils::defaultScriptsLocation().isParentOf(canonical) && !currentSandboxURL.isLocalFile(); if (disallowOutsideFiles && !PathUtils::isDescendantOf(canonical, currentSandboxURL)) { return throwResolveError(makeError(message.arg( QString("path '%1' outside of origin script '%2' '%3'") @@ -1750,7 +1750,7 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac return; } if (DependencyManager::get()->isStopped()) { - scriptWarningMessage("Script.include() while shutting down is ignored... includeFiles:" + scriptWarningMessage("Script.include() while shutting down is ignored... includeFiles:" + includeFiles.join(",") + "parent script:" + getFilename()); return; // bail early } @@ -1762,7 +1762,7 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac bool isStandardLibrary = false; if (file.startsWith("/~/")) { thisURL = expandScriptUrl(QUrl::fromLocalFile(expandScriptPath(file))); - QUrl defaultScriptsLoc = defaultScriptsLocation(); + QUrl defaultScriptsLoc = PathUtils::defaultScriptsLocation(); if (!defaultScriptsLoc.isParentOf(thisURL)) { scriptWarningMessage("Script.include() -- skipping" + file + "-- outside of standard libraries"); continue; @@ -1774,7 +1774,7 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac bool disallowOutsideFiles = thisURL.isLocalFile() && !isStandardLibrary && !currentSandboxURL.isLocalFile(); if (disallowOutsideFiles && !PathUtils::isDescendantOf(thisURL, currentSandboxURL)) { - scriptWarningMessage("Script.include() ignoring file path" + thisURL.toString() + scriptWarningMessage("Script.include() ignoring file path" + thisURL.toString() + "outside of original entity script" + currentSandboxURL.toString()); } else { // We could also check here for CORS, but we don't yet. @@ -1844,7 +1844,7 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac void ScriptEngine::include(const QString& includeFile, QScriptValue callback) { if (DependencyManager::get()->isStopped()) { - scriptWarningMessage("Script.include() while shutting down is ignored... includeFile:" + scriptWarningMessage("Script.include() while shutting down is ignored... includeFile:" + includeFile + "parent script:" + getFilename()); return; // bail early } @@ -1862,12 +1862,12 @@ void ScriptEngine::load(const QString& loadFile) { return; } if (DependencyManager::get()->isStopped()) { - scriptWarningMessage("Script.load() while shutting down is ignored... loadFile:" + scriptWarningMessage("Script.load() while shutting down is ignored... loadFile:" + loadFile + "parent script:" + getFilename()); return; // bail early } if (!currentEntityIdentifier.isInvalidID()) { - scriptWarningMessage("Script.load() from entity script is ignored... loadFile:" + scriptWarningMessage("Script.load() from entity script is ignored... loadFile:" + loadFile + "parent script:" + getFilename() + "entity: " + currentEntityIdentifier.toString()); return; // bail early } @@ -2548,7 +2548,7 @@ void ScriptEngine::callEntityScriptMethod(const EntityItemID& entityID, const QS qCDebug(scriptengine) << "ScriptEngine::callEntityScriptMethod() called on correct thread [" << thread() << "] " "entityID:" << entityID << "methodName:" << methodName << "otherID:" << otherID << "collision: collision"; #endif - + if (HIFI_AUTOREFRESH_FILE_SCRIPTS) { refreshFileScript(entityID); } diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index 69de067d10..9200550ff2 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -74,7 +74,7 @@ ScriptEngines::ScriptEngines(ScriptEngine::Context context) QUrl normalizeScriptURL(const QUrl& rawScriptURL) { if (rawScriptURL.scheme() == "file") { QUrl fullNormal = rawScriptURL; - QUrl defaultScriptLoc = defaultScriptsLocation(); + QUrl defaultScriptLoc = PathUtils::defaultScriptsLocation(); // if this url is something "beneath" the default script url, replace the local path with ~ if (fullNormal.scheme() == defaultScriptLoc.scheme() && @@ -93,7 +93,7 @@ QUrl normalizeScriptURL(const QUrl& rawScriptURL) { QString expandScriptPath(const QString& rawPath) { QStringList splitPath = rawPath.split("/"); - QUrl defaultScriptsLoc = defaultScriptsLocation(); + QUrl defaultScriptsLoc = PathUtils::defaultScriptsLocation(); return defaultScriptsLoc.path() + "/" + splitPath.mid(2).join("/"); // 2 to skip the slashes in /~/ } @@ -112,7 +112,7 @@ QUrl expandScriptUrl(const QUrl& rawScriptURL) { QFileInfo fileInfo(url.toLocalFile()); url = QUrl::fromLocalFile(fileInfo.canonicalFilePath()); - QUrl defaultScriptsLoc = defaultScriptsLocation(); + QUrl defaultScriptsLoc = PathUtils::defaultScriptsLocation(); if (!defaultScriptsLoc.isParentOf(url)) { qCWarning(scriptengine) << "Script.include() ignoring file path" << rawScriptURL << "-- outside of standard libraries: " @@ -327,6 +327,13 @@ void ScriptEngines::saveScripts() { return; } + // don't save scripts if we started with --scripts, as we would overwrite + // the scripts that the user expects to be there when launched without the + // --scripts override. + if (_defaultScriptsLocationOverridden) { + return; + } + // Saves all currently running user-loaded scripts QVariantList list; @@ -533,11 +540,11 @@ void ScriptEngines::launchScriptEngine(ScriptEngine* scriptEngine) { initializer(scriptEngine); } - // FIXME disabling 'shift key' debugging for now. If you start up the application with - // the shift key held down, it triggers a deadlock because of script interfaces running + // FIXME disabling 'shift key' debugging for now. If you start up the application with + // the shift key held down, it triggers a deadlock because of script interfaces running // on the main thread auto const wantDebug = scriptEngine->isDebuggable(); // || (qApp->queryKeyboardModifiers() & Qt::ShiftModifier); - + if (HIFI_SCRIPT_DEBUGGABLES && wantDebug) { scriptEngine->runDebuggable(); } else { @@ -573,5 +580,5 @@ void ScriptEngines::onScriptEngineError(const QString& scriptFilename) { } QString ScriptEngines::getDefaultScriptsLocation() const { - return defaultScriptsLocation().toString(); + return PathUtils::defaultScriptsLocation().toString(); } diff --git a/libraries/script-engine/src/ScriptEngines.h b/libraries/script-engine/src/ScriptEngines.h index 91dc54a0ec..fbd5f370cf 100644 --- a/libraries/script-engine/src/ScriptEngines.h +++ b/libraries/script-engine/src/ScriptEngines.h @@ -66,6 +66,8 @@ public: Q_PROPERTY(QString defaultScriptsPath READ getDefaultScriptsLocation) + void defaultScriptsLocationOverridden(bool overridden) { _defaultScriptsLocationOverridden = overridden; }; + // Called at shutdown time void shutdownScripting(); bool isStopped() const { return _isStopped; } @@ -112,6 +114,7 @@ protected: ScriptsModel _scriptsModel; ScriptsModelFilter _scriptsModelFilter; std::atomic _isStopped { false }; + bool _defaultScriptsLocationOverridden { false }; }; QUrl normalizeScriptURL(const QUrl& rawScriptURL); diff --git a/libraries/script-engine/src/ScriptsModel.cpp b/libraries/script-engine/src/ScriptsModel.cpp index 31f3a96fbd..9b7a367773 100644 --- a/libraries/script-engine/src/ScriptsModel.cpp +++ b/libraries/script-engine/src/ScriptsModel.cpp @@ -125,15 +125,15 @@ int ScriptsModel::columnCount(const QModelIndex& parent) const { void ScriptsModel::updateScriptsLocation(const QString& newPath) { _fsWatcher.removePath(_localDirectory.absolutePath()); - + if (!newPath.isEmpty()) { _localDirectory.setPath(newPath); - + if (!_localDirectory.absolutePath().isEmpty()) { _fsWatcher.addPath(_localDirectory.absolutePath()); } } - + reloadLocalFiles(); } @@ -154,7 +154,7 @@ void ScriptsModel::reloadDefaultFiles() { } void ScriptsModel::requestDefaultFiles(QString marker) { - QUrl url(defaultScriptsLocation()); + QUrl url(PathUtils::defaultScriptsLocation()); // targets that don't have a scripts folder in the appropriate location will have an empty URL here if (!url.isEmpty()) { @@ -244,7 +244,7 @@ bool ScriptsModel::parseXML(QByteArray xmlFile) { lastKey = xml.text().toString(); if (jsRegex.exactMatch(xml.text().toString())) { QString localPath = lastKey.split("/").mid(1).join("/"); - QUrl fullPath = defaultScriptsLocation(); + QUrl fullPath = PathUtils::defaultScriptsLocation(); fullPath.setPath(fullPath.path() + lastKey); const QString fullPathStr = normalizeScriptURL(fullPath).toString(); _treeNodes.append(new TreeNodeScript(localPath, fullPathStr, SCRIPT_ORIGIN_DEFAULT)); diff --git a/libraries/shared/src/PathUtils.cpp b/libraries/shared/src/PathUtils.cpp index 6e3acc5e99..d1a8ff757b 100644 --- a/libraries/shared/src/PathUtils.cpp +++ b/libraries/shared/src/PathUtils.cpp @@ -20,6 +20,8 @@ #include #include // std::once +//QUrl PathUtils::_overriddenDefaultScriptsLocation = QUrl(); + const QString& PathUtils::resourcesPath() { #ifdef Q_OS_MAC static QString staticResourcePath = QCoreApplication::applicationDirPath() + "/../Resources/"; @@ -71,21 +73,33 @@ QString findMostRecentFileExtension(const QString& originalFileName, QVector - #include "DependencyManager.h" /**jsdoc @@ -38,11 +37,11 @@ public: static QString stripFilename(const QUrl& url); // note: this is FS-case-sensitive version of parentURL.isParentOf(childURL) static bool isDescendantOf(const QUrl& childURL, const QUrl& parentURL); + static QUrl defaultScriptsLocation(const QString& newDefault = ""); + }; QString fileNameWithoutExtension(const QString& fileName, const QVector possibleExtensions); QString findMostRecentFileExtension(const QString& originalFileName, QVector possibleExtensions); -QUrl defaultScriptsLocation(); - #endif // hifi_PathUtils_h From b48efc431789fe3ec55dfe8544c60930fc07f800 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 22 Jun 2017 22:48:32 +0100 Subject: [PATCH 0538/1049] fixed wide stance issue --- plugins/openvr/src/ViveControllerManager.cpp | 34 +++++++++++++++----- plugins/openvr/src/ViveControllerManager.h | 1 + 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index d914cdcfad..648373ccc2 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -959,15 +959,33 @@ void ViveControllerManager::InputDevice::calibrateFeet(glm::mat4& defaultToRefer controller::Pose& secondFootPose = secondFoot.second; if (determineLimbOrdering(firstFootPose, secondFootPose, headXAxis, headPosition)) { - _jointToPuckMap[controller::LEFT_FOOT] = firstFoot.first; - _pucksOffset[firstFoot.first] = computeOffset(defaultToReferenceMat, inputCalibration.defaultLeftFoot, firstFootPose); - _jointToPuckMap[controller::RIGHT_FOOT] = secondFoot.first; - _pucksOffset[secondFoot.first] = computeOffset(defaultToReferenceMat, inputCalibration.defaultRightFoot, secondFootPose); + calibrateFoot(defaultToReferenceMat, inputCalibration, firstFoot, true); + calibrateFoot(defaultToReferenceMat, inputCalibration, secondFoot, false); } else { - _jointToPuckMap[controller::LEFT_FOOT] = secondFoot.first; - _pucksOffset[secondFoot.first] = computeOffset(defaultToReferenceMat, inputCalibration.defaultLeftFoot, secondFootPose); - _jointToPuckMap[controller::RIGHT_FOOT] = firstFoot.first; - _pucksOffset[firstFoot.first] = computeOffset(defaultToReferenceMat, inputCalibration.defaultRightFoot, firstFootPose); + calibrateFoot(defaultToReferenceMat, inputCalibration, secondFoot, true); + calibrateFoot(defaultToReferenceMat, inputCalibration, firstFoot, false); + } +} + +void ViveControllerManager::InputDevice::calibrateFoot(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration, PuckPosePair& footPair, bool isLeftFoot){ + controller::Pose footPose = footPair.second; + glm::mat4 puckPoseAvatarMat = createMatFromQuatAndPos(footPose.getRotation(), footPose.getTranslation()); + glm::mat4 defaultFoot = isLeftFoot ? inputCalibration.defaultLeftFoot : inputCalibration.defaultRightFoot; + glm::mat4 footOffset = computeOffset(defaultToReferenceMat, defaultFoot, footPose); + + glm::quat rotationOffset = glmExtractRotation(footOffset); + glm::vec3 translationOffset = extractTranslation(footOffset); + glm::vec3 avatarXAxisInPuckFrame = glm::normalize(transformVectorFast(glm::inverse(puckPoseAvatarMat), glm::vec3(-1.0f, 0.0f, 0.0f))); + float distance = glm::dot(translationOffset, avatarXAxisInPuckFrame); + glm::vec3 finalTranslation = translationOffset - (distance * avatarXAxisInPuckFrame); + glm::mat4 finalOffset = createMatFromQuatAndPos(rotationOffset, finalTranslation); + + if (isLeftFoot) { + _jointToPuckMap[controller::LEFT_FOOT] = footPair.first; + _pucksOffset[footPair.first] = finalOffset; + } else { + _jointToPuckMap[controller::RIGHT_FOOT] = footPair.first; + _pucksOffset[footPair.first] = finalOffset; } } diff --git a/plugins/openvr/src/ViveControllerManager.h b/plugins/openvr/src/ViveControllerManager.h index 67a9ff46fd..0b0406bb60 100644 --- a/plugins/openvr/src/ViveControllerManager.h +++ b/plugins/openvr/src/ViveControllerManager.h @@ -98,6 +98,7 @@ private: void calibrateLeftHand(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration, PuckPosePair& handPair); void calibrateRightHand(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration, PuckPosePair& handPair); void calibrateFeet(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration); + void calibrateFoot(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration, PuckPosePair& footPair, bool isLeftFoot); void calibrateHips(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration); void calibrateChest(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration); void calibrateShoulders(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration, From 2318b6aef81e2d597192053ada5c57311c5ee357 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 22 Jun 2017 15:02:59 -0700 Subject: [PATCH 0539/1049] Add a /forceNoLaunch switch to the installer --- cmake/templates/NSIS.template.in | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cmake/templates/NSIS.template.in b/cmake/templates/NSIS.template.in index 033e9e0255..6a3263b10b 100644 --- a/cmake/templates/NSIS.template.in +++ b/cmake/templates/NSIS.template.in @@ -470,6 +470,7 @@ Function PostInstallOptionsPage StrCpy $CurrentOffset 0 StrCpy $OffsetUnits u + ${StrContains} $AR_RegFlags "/forceNoLaunch" $CMDLINE ${If} ${SectionIsSelected} ${@CLIENT_COMPONENT_NAME@} ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Create a desktop shortcut for @INTERFACE_HF_SHORTCUT_NAME@" @@ -504,6 +505,9 @@ Function PostInstallOptionsPage ; set the checkbox state depending on what is present in the registry !insertmacro SetPostInstallOption $LaunchServerNowCheckbox @SERVER_LAUNCH_NOW_REG_KEY@ ${BST_CHECKED} + ${If} $AR_RegFlags == "/forceNoLaunch" + ${NSD_SetState} $LaunchServerNowCheckbox ${BST_UNCHECKED} + ${EndIf} IntOp $CurrentOffset $CurrentOffset + 15 ${EndIf} @@ -514,6 +518,9 @@ Function PostInstallOptionsPage ; set the checkbox state depending on what is present in the registry !insertmacro SetPostInstallOption $LaunchClientNowCheckbox @CLIENT_LAUNCH_NOW_REG_KEY@ ${BST_CHECKED} + ${If} $AR_RegFlags == "/forceNoLaunch" + ${NSD_SetState} $LaunchClientNowCheckbox ${BST_UNCHECKED} + ${EndIf} ${EndIf} ${If} @PR_BUILD@ == 1 From 71d2540a239a0b3467075a5eb9096baa0631b43a Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 22 Jun 2017 15:04:39 -0700 Subject: [PATCH 0540/1049] Prevent replication flat loops --- assignment-client/src/audio/AudioMixer.h | 5 +++++ assignment-client/src/audio/AudioMixerClientData.cpp | 2 +- assignment-client/src/avatars/AvatarMixer.cpp | 8 ++++---- assignment-client/src/avatars/AvatarMixer.h | 7 +++++++ assignment-client/src/avatars/AvatarMixerSlave.cpp | 12 ++++++++---- assignment-client/src/avatars/AvatarMixerSlave.h | 2 +- 6 files changed, 26 insertions(+), 10 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.h b/assignment-client/src/audio/AudioMixer.h index e542d82a6a..ed3a5b0541 100644 --- a/assignment-client/src/audio/AudioMixer.h +++ b/assignment-client/src/audio/AudioMixer.h @@ -51,6 +51,11 @@ public: static const QVector& getReverbSettings() { return _zoneReverbSettings; } static const std::pair negotiateCodec(std::vector codecs); + static bool shouldReplicateTo(const Node& from, const Node& to) { + return to.getType() == NodeType::DownstreamAudioMixer && + to.getPublicSocket() != from.getPublicSocket() && + to.getLocalSocket() != from.getLocalSocket(); + } public slots: void run() override; void sendStatsPacket() override; diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 0467b82d40..8befaff9c2 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -146,7 +146,7 @@ void AudioMixerClientData::optionallyReplicatePacket(ReceivedMessage& message, c // enumerate the downstream audio mixers and send them the replicated version of this packet nodeList->unsafeEachNode([&](const SharedNodePointer& downstreamNode) { - if (downstreamNode->getType() == NodeType::DownstreamAudioMixer) { + if (AudioMixer::shouldReplicateTo(node, *downstreamNode)) { // construct the packet only once, if we have any downstream audio mixers to send to if (!packet) { // construct an NLPacket to send to the replicant that has the contents of the received packet diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 40cc3a1c0e..3a5116a2e9 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -143,8 +143,8 @@ void AvatarMixer::optionallyReplicatePacket(ReceivedMessage& message, const Node std::unique_ptr packet; auto nodeList = DependencyManager::get(); - nodeList->eachMatchingNode([&](const SharedNodePointer& node) { - return node->getType() == NodeType::DownstreamAvatarMixer; + nodeList->eachMatchingNode([&](const SharedNodePointer& downstreamNode) { + return shouldReplicateTo(node, *downstreamNode); }, [&](const SharedNodePointer& node) { if (!packet) { // construct an NLPacket to send to the replicant that has the contents of the received packet @@ -424,8 +424,8 @@ void AvatarMixer::nodeKilled(SharedNodePointer killedNode) { nodeList->eachMatchingNode([&](const SharedNodePointer& node) { // we relay avatar kill packets to agents that are not upstream // and downstream avatar mixers, if the node that was just killed was being replicated - return (node->getType() == NodeType::Agent && !node->isUpstream()) - || (killedNode->isReplicated() && node->getType() == NodeType::DownstreamAvatarMixer); + return (node->getType() == NodeType::Agent && !node->isUpstream()) || + (killedNode->isReplicated() && shouldReplicateTo(*killedNode, *node)); }, [&](const SharedNodePointer& node) { if (node->getType() == NodeType::Agent) { if (!killPacket) { diff --git a/assignment-client/src/avatars/AvatarMixer.h b/assignment-client/src/avatars/AvatarMixer.h index ecff7597f6..610da8ad57 100644 --- a/assignment-client/src/avatars/AvatarMixer.h +++ b/assignment-client/src/avatars/AvatarMixer.h @@ -28,6 +28,13 @@ class AvatarMixer : public ThreadedAssignment { Q_OBJECT public: AvatarMixer(ReceivedMessage& message); + + static bool shouldReplicateTo(const Node& from, const Node& to) { + return to.getType() == NodeType::DownstreamAvatarMixer && + to.getPublicSocket() != from.getPublicSocket() && + to.getLocalSocket() != from.getLocalSocket(); + } + public slots: /// runs the avatar mixer void run() override; diff --git a/assignment-client/src/avatars/AvatarMixerSlave.cpp b/assignment-client/src/avatars/AvatarMixerSlave.cpp index b2c6b6a341..bbf68f0e22 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.cpp +++ b/assignment-client/src/avatars/AvatarMixerSlave.cpp @@ -79,13 +79,13 @@ int AvatarMixerSlave::sendIdentityPacket(const AvatarMixerClientData* nodeData, } } -int AvatarMixerSlave::sendReplicatedIdentityPacket(const AvatarMixerClientData* nodeData, const SharedNodePointer& destinationNode) { - if (destinationNode->getType() == NodeType::DownstreamAvatarMixer) { +int AvatarMixerSlave::sendReplicatedIdentityPacket(const Node& agentNode, const AvatarMixerClientData* nodeData, const Node& destinationNode) { + if (AvatarMixer::shouldReplicateTo(agentNode, destinationNode)) { QByteArray individualData = nodeData->getConstAvatarData()->identityByteArray(); individualData.replace(0, NUM_BYTES_RFC4122_UUID, nodeData->getNodeID().toRfc4122()); // FIXME, this looks suspicious auto identityPacket = NLPacketList::create(PacketType::ReplicatedAvatarIdentity, QByteArray(), true, true); identityPacket->write(individualData); - DependencyManager::get()->sendPacketList(std::move(identityPacket), *destinationNode); + DependencyManager::get()->sendPacketList(std::move(identityPacket), destinationNode); _stats.numIdentityPackets++; return individualData.size(); } else { @@ -453,6 +453,10 @@ void AvatarMixerSlave::broadcastAvatarDataToDownstreamMixer(const SharedNodePoin nodeData->resetNumAvatarsSentLastFrame(); std::for_each(_begin, _end, [&](const SharedNodePointer& agentNode) { + if (!AvatarMixer::shouldReplicateTo(*agentNode, *node)) { + return; + } + // collect agents that we have avatar data for that we are supposed to replicate if (agentNode->getType() == NodeType::Agent && agentNode->getLinkedData() && agentNode->isReplicated()) { const AvatarMixerClientData* agentNodeData = reinterpret_cast(agentNode->getLinkedData()); @@ -479,7 +483,7 @@ void AvatarMixerSlave::broadcastAvatarDataToDownstreamMixer(const SharedNodePoin auto lastBroadcastTime = nodeData->getLastBroadcastTime(agentNode->getUUID()); if (lastBroadcastTime <= agentNodeData->getIdentityChangeTimestamp() || (start - lastBroadcastTime) >= REBROADCAST_IDENTITY_TO_DOWNSTREAM_EVERY_US) { - sendReplicatedIdentityPacket(agentNodeData, node); + sendReplicatedIdentityPacket(*agentNode, agentNodeData, *node); nodeData->setLastBroadcastTime(agentNode->getUUID(), start); } diff --git a/assignment-client/src/avatars/AvatarMixerSlave.h b/assignment-client/src/avatars/AvatarMixerSlave.h index 69c707bbf1..bdddd5ceab 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.h +++ b/assignment-client/src/avatars/AvatarMixerSlave.h @@ -95,7 +95,7 @@ public: private: int sendIdentityPacket(const AvatarMixerClientData* nodeData, const SharedNodePointer& destinationNode); - int sendReplicatedIdentityPacket(const AvatarMixerClientData* nodeData, const SharedNodePointer& destinationNode); + int sendReplicatedIdentityPacket(const Node& agentNode, const AvatarMixerClientData* nodeData, const Node& destinationNode); void broadcastAvatarDataToAgent(const SharedNodePointer& node); void broadcastAvatarDataToDownstreamMixer(const SharedNodePointer& node); From bda52c33e615e6be9210d041e4196854d5fef7d0 Mon Sep 17 00:00:00 2001 From: samcake Date: Thu, 22 Jun 2017 15:35:00 -0700 Subject: [PATCH 0541/1049] Adding the function source when profiling, to explore perf issues --- libraries/script-engine/src/ScriptEngine.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 67b16df1ce..d14df662e2 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1284,7 +1284,8 @@ void ScriptEngine::timerFired() { // call the associated JS function, if it exists if (timerData.function.isValid()) { - PROFILE_RANGE(script, __FUNCTION__); + //PROFILE_RANGE(script, __FUNCTION__); + PROFILE_RANGE(script, timerData.function.toString().toStdString().c_str()); auto preTimer = p_high_resolution_clock::now(); callWithEnvironment(timerData.definingEntityIdentifier, timerData.definingSandboxURL, timerData.function, timerData.function, QScriptValueList()); auto postTimer = p_high_resolution_clock::now(); @@ -1311,6 +1312,7 @@ QObject* ScriptEngine::setupTimerWithInterval(const QScriptValue& function, int // make sure the timer stops when the script does connect(this, &ScriptEngine::scriptEnding, newTimer, &QTimer::stop); + CallbackData timerData = { function, currentEntityIdentifier, currentSandboxURL }; _timerFunctionMap.insert(newTimer, timerData); From e5666fbb2f9e0e7fa403cb3eafc74a386e253597 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 22 Jun 2017 15:35:21 -0700 Subject: [PATCH 0542/1049] Two different options for server and client --- cmake/templates/NSIS.template.in | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cmake/templates/NSIS.template.in b/cmake/templates/NSIS.template.in index 6a3263b10b..710fd81316 100644 --- a/cmake/templates/NSIS.template.in +++ b/cmake/templates/NSIS.template.in @@ -470,7 +470,6 @@ Function PostInstallOptionsPage StrCpy $CurrentOffset 0 StrCpy $OffsetUnits u - ${StrContains} $AR_RegFlags "/forceNoLaunch" $CMDLINE ${If} ${SectionIsSelected} ${@CLIENT_COMPONENT_NAME@} ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Create a desktop shortcut for @INTERFACE_HF_SHORTCUT_NAME@" @@ -505,7 +504,8 @@ Function PostInstallOptionsPage ; set the checkbox state depending on what is present in the registry !insertmacro SetPostInstallOption $LaunchServerNowCheckbox @SERVER_LAUNCH_NOW_REG_KEY@ ${BST_CHECKED} - ${If} $AR_RegFlags == "/forceNoLaunch" + ${StrContains} $substringResult "/forceNoLaunchServer" $CMDLINE + ${IfNot} $substringResult == "" ${NSD_SetState} $LaunchServerNowCheckbox ${BST_UNCHECKED} ${EndIf} @@ -518,7 +518,8 @@ Function PostInstallOptionsPage ; set the checkbox state depending on what is present in the registry !insertmacro SetPostInstallOption $LaunchClientNowCheckbox @CLIENT_LAUNCH_NOW_REG_KEY@ ${BST_CHECKED} - ${If} $AR_RegFlags == "/forceNoLaunch" + ${StrContains} $substringResult "/forceNoLaunchClient" $CMDLINE + ${IfNot} $substringResult == "" ${NSD_SetState} $LaunchClientNowCheckbox ${BST_UNCHECKED} ${EndIf} ${EndIf} From ec30d9ad5c6ce9d400b038d5f61dd21d40d9ca72 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 22 Jun 2017 16:18:46 -0700 Subject: [PATCH 0543/1049] always re-process codec for replicated agent --- .../src/audio/AudioMixerClientData.cpp | 22 ++++++++----------- .../src/audio/AudioMixerClientData.h | 2 -- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 0467b82d40..90a14cdeda 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -67,13 +67,9 @@ void AudioMixerClientData::processPackets() { case PacketType::MicrophoneAudioNoEcho: case PacketType::MicrophoneAudioWithEcho: case PacketType::InjectAudio: - case PacketType::SilentAudioFrame: - case PacketType::ReplicatedMicrophoneAudioNoEcho: - case PacketType::ReplicatedMicrophoneAudioWithEcho: - case PacketType::ReplicatedInjectAudio: - case PacketType::ReplicatedSilentAudioFrame: { + case PacketType::SilentAudioFrame: { - if (node->isUpstream() && !_hasSetupCodecForUpstreamNode) { + if (node->isUpstream()) { setupCodecForReplicatedAgent(packet); } @@ -692,14 +688,14 @@ void AudioMixerClientData::setupCodecForReplicatedAgent(QSharedPointerreadString(); - qDebug() << "Manually setting codec for replicated agent" << uuidStringWithoutCurlyBraces(getNodeID()) + if (codecString != _selectedCodecName) { + qDebug() << "Manually setting codec for replicated agent" << uuidStringWithoutCurlyBraces(getNodeID()) << "-" << codecString; - const std::pair codec = AudioMixer::negotiateCodec({ codecString }); - setupCodec(codec.second, codec.first); + const std::pair codec = AudioMixer::negotiateCodec({ codecString }); + setupCodec(codec.second, codec.first); - _hasSetupCodecForUpstreamNode = true; - - // seek back to the beginning of the message so other readers are in the right place - message->seek(0); + // seek back to the beginning of the message so other readers are in the right place + message->seek(0); + } } diff --git a/assignment-client/src/audio/AudioMixerClientData.h b/assignment-client/src/audio/AudioMixerClientData.h index 76a9cd6aa7..7a8690d8cc 100644 --- a/assignment-client/src/audio/AudioMixerClientData.h +++ b/assignment-client/src/audio/AudioMixerClientData.h @@ -184,8 +184,6 @@ private: bool _shouldMuteClient { false }; bool _requestsDomainListData { false }; - - bool _hasSetupCodecForUpstreamNode { false }; }; #endif // hifi_AudioMixerClientData_h From 8682cee17ae68a36158cef40e38b0ec28561d41c Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 23 Jun 2017 11:33:29 +1200 Subject: [PATCH 0544/1049] Refactoring --- interface/src/Application.cpp | 10 +- interface/src/avatar/MyAvatar.h | 2 +- interface/src/avatar/MySkeletonModel.cpp | 235 +++++------------------ interface/src/avatar/MySkeletonModel.h | 4 + 4 files changed, 58 insertions(+), 193 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 92447f0e62..ace38fcc1e 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4564,11 +4564,17 @@ void Application::update(float deltaTime) { MyAvatar::FingerPosesMap leftHandFingerPoses; for (int i = (int)controller::Action::LEFT_HAND_THUMB1; i <= (int)controller::Action::LEFT_HAND_PINKY4; i++) { - leftHandFingerPoses[i] = userInputMapper->getPoseState((controller::Action)i).transform(avatarToSensorMatrix); + leftHandFingerPoses[i] = { + userInputMapper->getPoseState((controller::Action)i).transform(avatarToSensorMatrix), + userInputMapper->getActionName((controller::Action)i) + }; } MyAvatar::FingerPosesMap rightHandFingerPoses; for (int i = (int)controller::Action::RIGHT_HAND_THUMB1; i <= (int)controller::Action::RIGHT_HAND_PINKY4; i++) { - rightHandFingerPoses[i] = userInputMapper->getPoseState((controller::Action)i).transform(avatarToSensorMatrix); + rightHandFingerPoses[i] = { + userInputMapper->getPoseState((controller::Action)i).transform(avatarToSensorMatrix), + userInputMapper->getActionName((controller::Action)i) + }; } myAvatar->setFingerControllerPosesInSensorFrame(leftHandFingerPoses, rightHandFingerPoses); diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 5768a392dd..18e2499c43 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -474,7 +474,7 @@ public: controller::Pose getLeftHandControllerPoseInAvatarFrame() const; controller::Pose getRightHandControllerPoseInAvatarFrame() const; - typedef std::map FingerPosesMap; + typedef std::map> FingerPosesMap; void setFingerControllerPosesInSensorFrame(const FingerPosesMap& left, const FingerPosesMap& right); FingerPosesMap getLeftHandFingerControllerPosesInSensorFrame() const; FingerPosesMap getRightHandFingerControllerPosesInSensorFrame() const; diff --git a/interface/src/avatar/MySkeletonModel.cpp b/interface/src/avatar/MySkeletonModel.cpp index 44e1624aea..54973dc5c5 100644 --- a/interface/src/avatar/MySkeletonModel.cpp +++ b/interface/src/avatar/MySkeletonModel.cpp @@ -172,197 +172,52 @@ void MySkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) { _rig.updateFromEyeParameters(eyeParams); - auto fingerPoses = myAvatar->getLeftHandFingerControllerPosesInSensorFrame(); - if (leftHandPose.isValid() && fingerPoses.size() > 0) { - // Can just check the first finger pose because either all finger poses will be valid or none of them will. - if (fingerPoses[(int)controller::Action::LEFT_HAND_INDEX1].isValid()) { - glm::quat handJointRotation = myAvatar->getLeftHandControllerPoseInSensorFrame().getRotation(); - glm::quat previousJointRotation; - glm::quat thisJointRotation; - - previousJointRotation = handJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_THUMB1].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandThumb1"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_THUMB2].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandThumb2"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_THUMB3].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandThumb3"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_THUMB4].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandThumb4"), glm::inverse(previousJointRotation) * thisJointRotation); - - previousJointRotation = handJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_INDEX1].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandIndex1"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_INDEX2].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandIndex2"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_INDEX3].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandIndex3"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_INDEX4].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandIndex4"), glm::inverse(previousJointRotation) * thisJointRotation); - - previousJointRotation = handJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_MIDDLE1].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandMiddle1"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_MIDDLE2].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandMiddle2"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_MIDDLE3].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandMiddle3"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_MIDDLE4].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandMiddle4"), glm::inverse(previousJointRotation) * thisJointRotation); - - previousJointRotation = handJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_RING1].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandRing1"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_RING2].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandRing2"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_RING3].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandRing3"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_RING4].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandRing4"), glm::inverse(previousJointRotation) * thisJointRotation); - - previousJointRotation = handJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_PINKY1].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandPinky1"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_PINKY2].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandPinky2"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_PINKY3].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandPinky3"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::LEFT_HAND_PINKY4].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("LeftHandPinky4"), glm::inverse(previousJointRotation) * thisJointRotation); - } else { - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandThumb1")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandThumb2")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandThumb3")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandThumb4")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandIndex1")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandIndex2")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandIndex3")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandIndex4")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandMiddle1")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandMiddle2")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandMiddle3")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandMiddle4")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandRing1")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandRing2")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandRing3")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandRing4")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandPinky1")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandPinky2")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandPinky3")); - myAvatar->clearJointData(_rig.indexOfJoint("LeftHandPinky4")); - } + if (leftHandPose.isValid()) { + updateFingers(myAvatar->getLeftHandFingerControllerPosesInSensorFrame()); } - - fingerPoses = myAvatar->getRightHandFingerControllerPosesInSensorFrame(); - if (rightHandPose.isValid() && fingerPoses.size() > 0) { - // Can just check the first finger pose because either all finger poses will be valid or none of them will. - if (fingerPoses[(int)controller::Action::RIGHT_HAND_INDEX1].isValid()) { - glm::quat handJointRotation = myAvatar->getRightHandControllerPoseInSensorFrame().getRotation(); - - glm::quat previousJointRotation; - glm::quat thisJointRotation; - - previousJointRotation = handJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_THUMB1].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandThumb1"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_THUMB2].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandThumb2"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_THUMB3].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandThumb3"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_THUMB4].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandThumb4"), glm::inverse(previousJointRotation) * thisJointRotation); - - previousJointRotation = handJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_INDEX1].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandIndex1"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_INDEX2].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandIndex2"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_INDEX3].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandIndex3"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_INDEX4].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandIndex4"), glm::inverse(previousJointRotation) * thisJointRotation); - - previousJointRotation = handJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_MIDDLE1].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandMiddle1"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_MIDDLE2].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandMiddle2"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_MIDDLE3].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandMiddle3"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_MIDDLE4].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandMiddle4"), glm::inverse(previousJointRotation) * thisJointRotation); - - previousJointRotation = handJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_RING1].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandRing1"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_RING2].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandRing2"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_RING3].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandRing3"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_RING4].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandRing4"), glm::inverse(previousJointRotation) * thisJointRotation); - - previousJointRotation = handJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_PINKY1].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandPinky1"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_PINKY2].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandPinky2"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_PINKY3].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandPinky3"), glm::inverse(previousJointRotation) * thisJointRotation); - previousJointRotation = thisJointRotation; - thisJointRotation = fingerPoses[(int)controller::Action::RIGHT_HAND_PINKY4].getRotation(); - myAvatar->setJointRotation(_rig.indexOfJoint("RightHandPinky4"), glm::inverse(previousJointRotation) * thisJointRotation); - } else { - myAvatar->clearJointData(_rig.indexOfJoint("RightHandThumb1")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandThumb2")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandThumb3")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandThumb4")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandIndex1")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandIndex2")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandIndex3")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandIndex4")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandMiddle1")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandMiddle2")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandMiddle3")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandMiddle4")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandRing1")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandRing2")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandRing3")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandRing4")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandPinky1")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandPinky2")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandPinky3")); - myAvatar->clearJointData(_rig.indexOfJoint("RightHandPinky4")); - } + if (rightHandPose.isValid()) { + updateFingers(myAvatar->getRightHandFingerControllerPosesInSensorFrame()); + } +} + + +void MySkeletonModel::updateFingers(const MyAvatar::FingerPosesMap& fingerPoses) { + // Assumes that finger poses are kept in the poses map in order. + + if (fingerPoses.size() == 0) { + return; + } + + auto posesMapItr = fingerPoses.begin(); + + bool isLeftHand = posesMapItr->first < (int)controller::Action::RIGHT_HAND_THUMB1; + + MyAvatar* myAvatar = static_cast(_owningAvatar); + glm::quat handJointRotation = isLeftHand + ? myAvatar->getLeftHandControllerPoseInSensorFrame().getRotation() + : myAvatar->getRightHandControllerPoseInSensorFrame().getRotation(); + + bool isFingerValid = false; + glm::quat previousJointRotation; + + while (posesMapItr != fingerPoses.end()) { + auto jointName = posesMapItr->second.second; + if (jointName.right(1) == "1") { + isFingerValid = posesMapItr->second.first.isValid(); + previousJointRotation = handJointRotation; + } + + if (isFingerValid) { + auto thisJointRotation = posesMapItr->second.first.getRotation(); + const float CONTROLLER_PRIORITY = 2.0f; + _rig.setJointRotation(_rig.indexOfJoint(jointName), true, glm::inverse(previousJointRotation) * thisJointRotation, + CONTROLLER_PRIORITY); + previousJointRotation = thisJointRotation; + } else { + _rig.clearJointAnimationPriority(_rig.indexOfJoint(jointName)); + } + + posesMapItr++; } } diff --git a/interface/src/avatar/MySkeletonModel.h b/interface/src/avatar/MySkeletonModel.h index 12aba6b545..6867c596af 100644 --- a/interface/src/avatar/MySkeletonModel.h +++ b/interface/src/avatar/MySkeletonModel.h @@ -10,6 +10,7 @@ #define hifi_MySkeletonModel_h #include +#include "MyAvatar.h" /// A skeleton loaded from a model. class MySkeletonModel : public SkeletonModel { @@ -21,6 +22,9 @@ private: public: MySkeletonModel(Avatar* owningAvatar, QObject* parent = nullptr); void updateRig(float deltaTime, glm::mat4 parentTransform) override; + +private: + void updateFingers(const MyAvatar::FingerPosesMap& fingerPoses); }; #endif // hifi_MySkeletonModel_h From 4439de240a0297c42256ac2d61ab5ae37a677032 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 22 Jun 2017 14:46:24 -0700 Subject: [PATCH 0545/1049] Trying to fix QtQml/QtScript crashes --- CMakeGraphvizOptions.cmake | 3 +- interface/src/Application.cpp | 18 +- interface/src/Menu.cpp | 11 +- interface/src/scripting/QmlWrapper.h | 63 --- .../scripting/ToolbarScriptingInterface.cpp | 104 ----- .../src/scripting/ToolbarScriptingInterface.h | 26 -- interface/src/ui/DialogsManager.cpp | 2 +- interface/src/ui/LoginDialog.cpp | 2 +- interface/src/ui/overlays/Web3DOverlay.cpp | 11 +- libraries/entities-renderer/CMakeLists.txt | 2 +- .../src/RenderableWebEntityItem.cpp | 25 +- .../src/RenderableWebEntityItem.h | 5 +- libraries/networking/CMakeLists.txt | 2 +- libraries/script-engine/CMakeLists.txt | 2 +- .../script-engine/src/MenuItemProperties.h | 6 +- libraries/script-engine/src/ScriptEngine.cpp | 6 +- libraries/script-engine/src/ScriptEngines.cpp | 3 - libraries/ui/CMakeLists.txt | 9 +- libraries/ui/src/OffscreenUi.cpp | 3 +- libraries/ui/src/OffscreenUi.h | 2 +- .../gl => ui/src/ui}/OffscreenQmlSurface.cpp | 44 ++- .../gl => ui/src/ui}/OffscreenQmlSurface.h | 0 .../src/ui}/OffscreenQmlSurfaceCache.cpp | 0 .../src/ui}/OffscreenQmlSurfaceCache.h | 0 libraries/ui/src/ui/QmlWrapper.cpp | 59 +++ libraries/ui/src/ui/QmlWrapper.h | 44 +++ .../src/ui}/TabletScriptingInterface.cpp | 363 +++++++++++------- .../src/ui}/TabletScriptingInterface.h | 44 ++- .../ui/src/ui/ToolbarScriptingInterface.cpp | 124 ++++++ .../ui/src/ui/ToolbarScriptingInterface.h | 56 +++ .../src/ui/types}/FileTypeProfile.cpp | 0 .../src => ui/src/ui/types}/FileTypeProfile.h | 0 .../ui/types}/FileTypeRequestInterceptor.cpp | 0 .../ui/types}/FileTypeRequestInterceptor.h | 0 .../ui/types}/HFTabletWebEngineProfile.cpp | 0 .../src/ui/types}/HFTabletWebEngineProfile.h | 0 .../HFTabletWebEngineRequestInterceptor.cpp | 0 .../HFTabletWebEngineRequestInterceptor.h | 0 .../src/ui/types}/HFWebEngineProfile.cpp | 0 .../src/ui/types}/HFWebEngineProfile.h | 0 .../types}/HFWebEngineRequestInterceptor.cpp | 0 .../ui/types}/HFWebEngineRequestInterceptor.h | 0 .../src/ui/types}/RequestFilters.cpp | 0 .../src => ui/src/ui/types}/RequestFilters.h | 0 .../src => ui/src/ui/types}/SoundEffect.cpp | 2 - .../src => ui/src/ui/types}/SoundEffect.h | 0 46 files changed, 618 insertions(+), 423 deletions(-) delete mode 100644 interface/src/scripting/QmlWrapper.h delete mode 100644 interface/src/scripting/ToolbarScriptingInterface.cpp delete mode 100644 interface/src/scripting/ToolbarScriptingInterface.h rename libraries/{gl/src/gl => ui/src/ui}/OffscreenQmlSurface.cpp (97%) rename libraries/{gl/src/gl => ui/src/ui}/OffscreenQmlSurface.h (100%) rename libraries/{gl/src/gl => ui/src/ui}/OffscreenQmlSurfaceCache.cpp (100%) rename libraries/{gl/src/gl => ui/src/ui}/OffscreenQmlSurfaceCache.h (100%) create mode 100644 libraries/ui/src/ui/QmlWrapper.cpp create mode 100644 libraries/ui/src/ui/QmlWrapper.h rename libraries/{script-engine/src => ui/src/ui}/TabletScriptingInterface.cpp (69%) rename libraries/{script-engine/src => ui/src/ui}/TabletScriptingInterface.h (90%) create mode 100644 libraries/ui/src/ui/ToolbarScriptingInterface.cpp create mode 100644 libraries/ui/src/ui/ToolbarScriptingInterface.h rename libraries/{networking/src => ui/src/ui/types}/FileTypeProfile.cpp (100%) rename libraries/{networking/src => ui/src/ui/types}/FileTypeProfile.h (100%) rename libraries/{networking/src => ui/src/ui/types}/FileTypeRequestInterceptor.cpp (100%) rename libraries/{networking/src => ui/src/ui/types}/FileTypeRequestInterceptor.h (100%) rename libraries/{networking/src => ui/src/ui/types}/HFTabletWebEngineProfile.cpp (100%) rename libraries/{networking/src => ui/src/ui/types}/HFTabletWebEngineProfile.h (100%) rename libraries/{networking/src => ui/src/ui/types}/HFTabletWebEngineRequestInterceptor.cpp (100%) rename libraries/{networking/src => ui/src/ui/types}/HFTabletWebEngineRequestInterceptor.h (100%) rename libraries/{networking/src => ui/src/ui/types}/HFWebEngineProfile.cpp (100%) rename libraries/{networking/src => ui/src/ui/types}/HFWebEngineProfile.h (100%) rename libraries/{networking/src => ui/src/ui/types}/HFWebEngineRequestInterceptor.cpp (100%) rename libraries/{networking/src => ui/src/ui/types}/HFWebEngineRequestInterceptor.h (100%) rename libraries/{networking/src => ui/src/ui/types}/RequestFilters.cpp (100%) rename libraries/{networking/src => ui/src/ui/types}/RequestFilters.h (100%) rename libraries/{script-engine/src => ui/src/ui/types}/SoundEffect.cpp (97%) rename libraries/{script-engine/src => ui/src/ui/types}/SoundEffect.h (100%) diff --git a/CMakeGraphvizOptions.cmake b/CMakeGraphvizOptions.cmake index f1b73f1cae..3b23172a79 100644 --- a/CMakeGraphvizOptions.cmake +++ b/CMakeGraphvizOptions.cmake @@ -1 +1,2 @@ -set(GRAPHVIZ_EXTERNAL_LIBS FALSE) \ No newline at end of file +set(GRAPHVIZ_EXTERNAL_LIBS FALSE) +set(GRAPHVIZ_IGNORE_TARGETS "shared;networking") \ No newline at end of file diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e12c73d0bc..ccf81ace3f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -99,8 +99,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -125,7 +125,8 @@ #include #include #include -#include +#include +#include #include #include #include @@ -166,7 +167,6 @@ #include "scripting/SettingsScriptingInterface.h" #include "scripting/WindowScriptingInterface.h" #include "scripting/ControllerScriptingInterface.h" -#include "scripting/ToolbarScriptingInterface.h" #include "scripting/RatesScriptingInterface.h" #if defined(Q_OS_MAC) || defined(Q_OS_WIN) #include "SpeechRecognizer.h" @@ -1792,6 +1792,8 @@ void Application::cleanupBeforeQuit() { #endif // stop QML + DependencyManager::destroy(); + DependencyManager::destroy(); DependencyManager::destroy(); DependencyManager::destroy(); @@ -5535,8 +5537,16 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri scriptEngine->registerGlobalObject("OffscreenFlags", DependencyManager::get()->getFlags()); scriptEngine->registerGlobalObject("Desktop", DependencyManager::get().data()); + + qScriptRegisterMetaType(scriptEngine, wrapperToScriptValue, wrapperFromScriptValue); + qScriptRegisterMetaType(scriptEngine, wrapperToScriptValue, wrapperFromScriptValue); scriptEngine->registerGlobalObject("Toolbars", DependencyManager::get().data()); + qScriptRegisterMetaType(scriptEngine, wrapperToScriptValue, wrapperFromScriptValue); + qScriptRegisterMetaType(scriptEngine, wrapperToScriptValue, wrapperFromScriptValue); + scriptEngine->registerGlobalObject("Tablet", DependencyManager::get().data()); + + DependencyManager::get().data()->setToolbarScriptingInterface(DependencyManager::get().data()); scriptEngine->registerGlobalObject("Window", DependencyManager::get().data()); @@ -5610,7 +5620,6 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri scriptEngine->registerGlobalObject("EntityScriptServerLog", entityScriptServerLog.data()); scriptEngine->registerGlobalObject("AvatarInputs", AvatarInputs::getInstance()); - qScriptRegisterMetaType(scriptEngine, OverlayIDtoScriptValue, OverlayIDfromScriptValue); // connect this script engines printedMessage signal to the global ScriptEngines these various messages @@ -5619,6 +5628,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri connect(scriptEngine, &ScriptEngine::warningMessage, DependencyManager::get().data(), &ScriptEngines::onWarningMessage); connect(scriptEngine, &ScriptEngine::infoMessage, DependencyManager::get().data(), &ScriptEngines::onInfoMessage); connect(scriptEngine, &ScriptEngine::clearDebugWindow, DependencyManager::get().data(), &ScriptEngines::onClearDebugWindow); + } bool Application::canAcceptURL(const QString& urlString) const { diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 8c9baa7c43..5fbae75a57 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include #include @@ -121,9 +121,14 @@ Menu::Menu() { QAction::NoRole, UNSPECIFIED_POSITION, "Advanced"); // Edit > Reload All Scripts... [advanced] - addActionToQMenuAndActionHash(editMenu, MenuOption::ReloadAllScripts, Qt::CTRL | Qt::Key_R, - scriptEngines.data(), SLOT(reloadAllScripts()), + action = addActionToQMenuAndActionHash(editMenu, MenuOption::ReloadAllScripts, Qt::CTRL | Qt::Key_R, + nullptr, nullptr, QAction::NoRole, UNSPECIFIED_POSITION, "Advanced"); + connect(action, &QAction::triggered, [] { + DependencyManager::get()->reloadAllScripts(); + DependencyManager::get()->clearCache(); + }); + // Edit > Console... [advanced] addActionToQMenuAndActionHash(editMenu, MenuOption::Console, Qt::CTRL | Qt::ALT | Qt::Key_J, diff --git a/interface/src/scripting/QmlWrapper.h b/interface/src/scripting/QmlWrapper.h deleted file mode 100644 index 7dd319e445..0000000000 --- a/interface/src/scripting/QmlWrapper.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// Created by Anthony J. Thibault on 2016-12-12 -// Copyright 2013-2016 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#ifndef hifi_QmlWrapper_h -#define hifi_QmlWrapper_h - -#include -#include -#include - -class QmlWrapper : public QObject { - Q_OBJECT -public: - QmlWrapper(QObject* qmlObject, QObject* parent = nullptr) - : QObject(parent), _qmlObject(qmlObject) { - } - - Q_INVOKABLE void writeProperty(QString propertyName, QVariant propertyValue) { - auto offscreenUi = DependencyManager::get(); - offscreenUi->executeOnUiThread([=] { - _qmlObject->setProperty(propertyName.toStdString().c_str(), propertyValue); - }); - } - - Q_INVOKABLE void writeProperties(QVariant propertyMap) { - auto offscreenUi = DependencyManager::get(); - offscreenUi->executeOnUiThread([=] { - QVariantMap map = propertyMap.toMap(); - for (const QString& key : map.keys()) { - _qmlObject->setProperty(key.toStdString().c_str(), map[key]); - } - }); - } - - Q_INVOKABLE QVariant readProperty(const QString& propertyName) { - auto offscreenUi = DependencyManager::get(); - return offscreenUi->returnFromUiThread([&]()->QVariant { - return _qmlObject->property(propertyName.toStdString().c_str()); - }); - } - - Q_INVOKABLE QVariant readProperties(const QVariant& propertyList) { - auto offscreenUi = DependencyManager::get(); - return offscreenUi->returnFromUiThread([&]()->QVariant { - QVariantMap result; - for (const QVariant& property : propertyList.toList()) { - QString propertyString = property.toString(); - result.insert(propertyString, _qmlObject->property(propertyString.toStdString().c_str())); - } - return result; - }); - } - -protected: - QObject* _qmlObject{ nullptr }; -}; - -#endif \ No newline at end of file diff --git a/interface/src/scripting/ToolbarScriptingInterface.cpp b/interface/src/scripting/ToolbarScriptingInterface.cpp deleted file mode 100644 index 2b4f64f35e..0000000000 --- a/interface/src/scripting/ToolbarScriptingInterface.cpp +++ /dev/null @@ -1,104 +0,0 @@ -// -// Created by Bradley Austin Davis on 2016-06-16 -// Copyright 2013-2016 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#include "ToolbarScriptingInterface.h" - - -#include - -#include -#include "QmlWrapper.h" - -class ToolbarButtonProxy : public QmlWrapper { - Q_OBJECT - -public: - ToolbarButtonProxy(QObject* qmlObject, QObject* parent = nullptr) : QmlWrapper(qmlObject, parent) { - std::lock_guard guard(_mutex); - _qmlButton = qobject_cast(qmlObject); - connect(qmlObject, SIGNAL(clicked()), this, SIGNAL(clicked())); - } - - Q_INVOKABLE void editProperties(QVariantMap properties) { - std::lock_guard guard(_mutex); - QVariantMap::const_iterator iter = properties.constBegin(); - while (iter != properties.constEnd()) { - _properties[iter.key()] = iter.value(); - if (_qmlButton) { - // [01/25 14:26:20] [WARNING] [default] QMetaObject::invokeMethod: No such method ToolbarButton_QMLTYPE_195::changeProperty(QVariant,QVariant) - - QMetaObject::invokeMethod(_qmlButton, "changeProperty", Qt::AutoConnection, - Q_ARG(QVariant, QVariant(iter.key())), Q_ARG(QVariant, iter.value())); - } - ++iter; - } - } - -signals: - void clicked(); - -protected: - mutable std::mutex _mutex; - QQuickItem* _qmlButton { nullptr }; - QVariantMap _properties; -}; - -class ToolbarProxy : public QmlWrapper { - Q_OBJECT - -public: - ToolbarProxy(QObject* qmlObject, QObject* parent = nullptr) : QmlWrapper(qmlObject, parent) { } - - Q_INVOKABLE QObject* addButton(const QVariant& properties) { - QVariant resultVar; - Qt::ConnectionType connectionType = Qt::AutoConnection; - if (QThread::currentThread() != _qmlObject->thread()) { - connectionType = Qt::BlockingQueuedConnection; - } - bool invokeResult = QMetaObject::invokeMethod(_qmlObject, "addButton", connectionType, Q_RETURN_ARG(QVariant, resultVar), Q_ARG(QVariant, properties)); - if (!invokeResult) { - return nullptr; - } - - QObject* rawButton = qvariant_cast(resultVar); - if (!rawButton) { - return nullptr; - } - - return new ToolbarButtonProxy(rawButton, this); - } - - Q_INVOKABLE void removeButton(const QVariant& name) { - QMetaObject::invokeMethod(_qmlObject, "removeButton", Qt::AutoConnection, Q_ARG(QVariant, name)); - } -}; - - -QObject* ToolbarScriptingInterface::getToolbar(const QString& toolbarId) { - auto offscreenUi = DependencyManager::get(); - auto desktop = offscreenUi->getDesktop(); - Qt::ConnectionType connectionType = Qt::AutoConnection; - if (QThread::currentThread() != desktop->thread()) { - connectionType = Qt::BlockingQueuedConnection; - } - QVariant resultVar; - bool invokeResult = QMetaObject::invokeMethod(desktop, "getToolbar", connectionType, Q_RETURN_ARG(QVariant, resultVar), Q_ARG(QVariant, toolbarId)); - if (!invokeResult) { - return nullptr; - } - - QObject* rawToolbar = qvariant_cast(resultVar); - if (!rawToolbar) { - return nullptr; - } - - return new ToolbarProxy(rawToolbar); -} - - -#include "ToolbarScriptingInterface.moc" diff --git a/interface/src/scripting/ToolbarScriptingInterface.h b/interface/src/scripting/ToolbarScriptingInterface.h deleted file mode 100644 index 9379284e55..0000000000 --- a/interface/src/scripting/ToolbarScriptingInterface.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// Created by Bradley Austin Davis on 2016-06-16 -// Copyright 2013-2016 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#ifndef hifi_ToolbarScriptingInterface_h -#define hifi_ToolbarScriptingInterface_h - -#include - -#include - -#include - -class ToolbarProxy; - -class ToolbarScriptingInterface : public QObject, public Dependency { - Q_OBJECT -public: - Q_INVOKABLE QObject* getToolbar(const QString& toolbarId); -}; - -#endif // hifi_ToolbarScriptingInterface_h diff --git a/interface/src/ui/DialogsManager.cpp b/interface/src/ui/DialogsManager.cpp index 96b5da3a55..f216bb4edc 100644 --- a/interface/src/ui/DialogsManager.cpp +++ b/interface/src/ui/DialogsManager.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include "AddressBarDialog.h" #include "ConnectionFailureDialog.h" @@ -28,7 +29,6 @@ #include "PreferencesDialog.h" #include "UpdateDialog.h" -#include "TabletScriptingInterface.h" #include "scripting/HMDScriptingInterface.h" static const QVariant TABLET_ADDRESS_DIALOG = "TabletAddressDialog.qml"; diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index 10783afd23..c9341fd3d9 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -19,13 +19,13 @@ #include #include #include +#include #include "AccountManager.h" #include "DependencyManager.h" #include "Menu.h" #include "Application.h" -#include "TabletScriptingInterface.h" #include "scripting/HMDScriptingInterface.h" HIFI_QML_DEF(LoginDialog) diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index b67ca06aa3..80f11fa552 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -25,16 +25,15 @@ #include #include #include -#include +#include +#include +#include #include #include -#include #include #include #include #include -#include -#include #include #include "scripting/AccountScriptingInterface.h" #include "scripting/HMDScriptingInterface.h" @@ -87,7 +86,7 @@ Web3DOverlay::~Web3DOverlay() { if (rootItem && rootItem->objectName() == "tabletRoot") { auto tabletScriptingInterface = DependencyManager::get(); - tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", nullptr, nullptr); + tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", nullptr); } // Fix for crash in QtWebEngineCore when rapidly switching domains @@ -206,7 +205,7 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getSurfaceContext()->setContextProperty("SoundCache", DependencyManager::get().data()); _webSurface->getSurfaceContext()->setContextProperty("pathToFonts", "../../"); - tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); + tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface.data()); // mark the TabletProxy object as cpp ownership. QObject* tablet = tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"); diff --git a/libraries/entities-renderer/CMakeLists.txt b/libraries/entities-renderer/CMakeLists.txt index 3df33b6a5d..40111e257b 100644 --- a/libraries/entities-renderer/CMakeLists.txt +++ b/libraries/entities-renderer/CMakeLists.txt @@ -1,7 +1,7 @@ set(TARGET_NAME entities-renderer) AUTOSCRIBE_SHADER_LIB(gpu model procedural render render-utils) setup_hifi_library(Widgets Network Script) -link_hifi_libraries(shared gpu procedural model model-networking script-engine render render-utils image) +link_hifi_libraries(shared gpu procedural model model-networking script-engine render render-utils image ui) include_hifi_library_headers(networking) include_hifi_library_headers(gl) include_hifi_library_headers(ktx) diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index 948a219831..9a898b4071 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include "EntityTreeRenderer.h" #include "EntitiesRendererLogging.h" @@ -74,19 +74,6 @@ bool RenderableWebEntityItem::buildWebSurface(QSharedPointer qWarning() << "Too many concurrent web views to create new view"; return false; } - QString javaScriptToInject; - QFile webChannelFile(":qtwebchannel/qwebchannel.js"); - QFile createGlobalEventBridgeFile(PathUtils::resourcesPath() + "/html/createGlobalEventBridge.js"); - if (webChannelFile.open(QFile::ReadOnly | QFile::Text) && - createGlobalEventBridgeFile.open(QFile::ReadOnly | QFile::Text)) { - QString webChannelStr = QTextStream(&webChannelFile).readAll(); - QString createGlobalEventBridgeStr = QTextStream(&createGlobalEventBridgeFile).readAll(); - - // concatenate these js files - _javaScriptToInject = webChannelStr + createGlobalEventBridgeStr; - } else { - qCWarning(entitiesrenderer) << "unable to find qwebchannel.js or createGlobalEventBridge.js"; - } // Save the original GL context, because creating a QML surface will create a new context QOpenGLContext* currentContext = QOpenGLContext::currentContext(); @@ -266,10 +253,7 @@ void RenderableWebEntityItem::loadSourceURL() { _webSurface->setMaxFps(DEFAULT_MAX_FPS); } - _webSurface->load("WebEntityView.qml", [&](QQmlContext* context, QObject* obj) { - context->setContextProperty("eventBridgeJavaScriptToInject", QVariant(_javaScriptToInject)); - }); - + _webSurface->load("WebEntityView.qml"); _webSurface->getRootItem()->setProperty("url", _sourceUrl); _webSurface->getSurfaceContext()->setContextProperty("desktop", QVariant()); @@ -280,8 +264,7 @@ void RenderableWebEntityItem::loadSourceURL() { if (_webSurface->getRootItem() && _webSurface->getRootItem()->objectName() == "tabletRoot") { auto tabletScriptingInterface = DependencyManager::get(); - tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", - _webSurface->getRootItem(), _webSurface.data()); + tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface.data()); } } _webSurface->getSurfaceContext()->setContextProperty("globalPosition", vec3toVariant(getPosition())); @@ -386,7 +369,7 @@ void RenderableWebEntityItem::destroyWebSurface() { if (rootItem && rootItem->objectName() == "tabletRoot") { auto tabletScriptingInterface = DependencyManager::get(); - tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", nullptr, nullptr); + tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", nullptr); } // Fix for crash in QtWebEngineCore when rapidly switching domains diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.h b/libraries/entities-renderer/src/RenderableWebEntityItem.h index bbd59a03d6..0f5d307766 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.h +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.h @@ -13,10 +13,9 @@ #include #include #include -#include +#include #include -#include #include "RenderableEntityItem.h" @@ -74,8 +73,6 @@ private: QMetaObject::Connection _mouseMoveConnection; QMetaObject::Connection _hoverLeaveConnection; - QString _javaScriptToInject; - enum contentType { htmlContent, qmlContent diff --git a/libraries/networking/CMakeLists.txt b/libraries/networking/CMakeLists.txt index ff9a05b959..288e98d5a5 100644 --- a/libraries/networking/CMakeLists.txt +++ b/libraries/networking/CMakeLists.txt @@ -1,5 +1,5 @@ set(TARGET_NAME networking) -setup_hifi_library(Network WebEngine) +setup_hifi_library(Network) link_hifi_libraries(shared) target_include_directories(${TARGET_NAME} PRIVATE "${CMAKE_BINARY_DIR}/includes") diff --git a/libraries/script-engine/CMakeLists.txt b/libraries/script-engine/CMakeLists.txt index 39338fd767..0c0004d132 100644 --- a/libraries/script-engine/CMakeLists.txt +++ b/libraries/script-engine/CMakeLists.txt @@ -16,6 +16,6 @@ if (NOT ANDROID) endif () -link_hifi_libraries(shared networking octree gpu ui procedural model model-networking ktx recording avatars fbx entities controllers animation audio physics image) +link_hifi_libraries(shared networking octree gpu procedural model model-networking ktx recording avatars fbx entities controllers animation audio physics image) # ui includes gl, but link_hifi_libraries does not use transitive includes, so gl must be explicit include_hifi_library_headers(gl) diff --git a/libraries/script-engine/src/MenuItemProperties.h b/libraries/script-engine/src/MenuItemProperties.h index 9b95fc66e1..9de4337838 100644 --- a/libraries/script-engine/src/MenuItemProperties.h +++ b/libraries/script-engine/src/MenuItemProperties.h @@ -14,7 +14,6 @@ #include -#include #include "KeyEvent.h" @@ -35,7 +34,7 @@ public: QKeySequence shortcutKeySequence; // this is what we actually use, it's set from one of the above // location related items: in order of priority - int position { ui::Menu::UNSPECIFIED_POSITION }; + int position { UNSPECIFIED_POSITION }; QString beforeItem; QString afterItem; @@ -45,6 +44,9 @@ public: bool isSeparator { false }; QString grouping; /// Either: "", "Advanced", or "Developer" + +private: + static const int UNSPECIFIED_POSITION = -1; }; Q_DECLARE_METATYPE(MenuItemProperties) QScriptValue menuItemPropertiesToScriptValue(QScriptEngine* engine, const MenuItemProperties& props); diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 67b16df1ce..e41d41ee09 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -24,6 +24,8 @@ #include #include +#include +#include #include #include @@ -48,7 +50,6 @@ #include #include #include -#include #include #include @@ -70,7 +71,6 @@ #include "WebSocketClass.h" #include "RecordingScriptingInterface.h" #include "ScriptEngines.h" -#include "TabletScriptingInterface.h" #include "ModelScriptingInterface.h" @@ -697,8 +697,6 @@ void ScriptEngine::init() { // constants globalObject().setProperty("TREE_SCALE", newVariant(QVariant(TREE_SCALE))); - registerGlobalObject("Tablet", DependencyManager::get().data()); - qScriptRegisterMetaType(this, tabletToScriptValue, tabletFromScriptValue); registerGlobalObject("Assets", &_assetScriptingInterface); registerGlobalObject("Resources", DependencyManager::get().data()); diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index 69de067d10..4f134d8a22 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -16,8 +16,6 @@ #include #include -#include - #include "ScriptEngine.h" #include "ScriptEngineLogging.h" @@ -431,7 +429,6 @@ void ScriptEngines::setScriptsLocation(const QString& scriptsLocation) { void ScriptEngines::reloadAllScripts() { qCDebug(scriptengine) << "reloadAllScripts -- clearing caches"; DependencyManager::get()->clearCache(); - DependencyManager::get()->clearCache(); qCDebug(scriptengine) << "reloadAllScripts -- stopping all scripts"; stopAllScripts(true); } diff --git a/libraries/ui/CMakeLists.txt b/libraries/ui/CMakeLists.txt index f2b48446fe..68a6fd25b9 100644 --- a/libraries/ui/CMakeLists.txt +++ b/libraries/ui/CMakeLists.txt @@ -1,3 +1,8 @@ set(TARGET_NAME ui) -setup_hifi_library(OpenGL Network Qml Quick Script WebChannel WebSockets XmlPatterns) -link_hifi_libraries(shared networking gl script-engine) +setup_hifi_library(OpenGL Network Qml Quick Script WebChannel WebEngine WebSockets XmlPatterns) +link_hifi_libraries(shared networking gl audio) + +if (NOT ANDROID) + # Required for some low level GL interaction in the OffscreenQMLSurface + target_glew() +endif () diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index a80105293b..76a8a780b9 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -20,7 +20,8 @@ #include #include #include -#include + +#include "ui/TabletScriptingInterface.h" #include "FileDialogHelper.h" #include "VrMenu.h" diff --git a/libraries/ui/src/OffscreenUi.h b/libraries/ui/src/OffscreenUi.h index 55fb8b2c3d..f228f28d5e 100644 --- a/libraries/ui/src/OffscreenUi.h +++ b/libraries/ui/src/OffscreenUi.h @@ -21,9 +21,9 @@ #include #include -#include #include +#include "ui/OffscreenQmlSurface.h" #include "OffscreenQmlElement.h" class VrMenu; diff --git a/libraries/gl/src/gl/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp similarity index 97% rename from libraries/gl/src/gl/OffscreenQmlSurface.cpp rename to libraries/ui/src/ui/OffscreenQmlSurface.cpp index 9dcc1d7991..f0006cb399 100644 --- a/libraries/gl/src/gl/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -6,7 +6,9 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #include "OffscreenQmlSurface.h" -#include "Config.h" + +// Has to come before Qt GL includes +#include #include #include @@ -33,14 +35,17 @@ #include #include #include -#include -#include -#include -#include "OffscreenGLCanvas.h" -#include "GLHelpers.h" -#include "GLLogging.h" -#include "Context.h" +#include +#include +#include + +#include "types/FileTypeProfile.h" +#include "types/HFWebEngineProfile.h" +#include "types/HFTabletWebEngineProfile.h" +#include "types/SoundEffect.h" + +#include "Logging.h" Q_LOGGING_CATEGORY(trace_render_qml, "trace.render.qml") Q_LOGGING_CATEGORY(trace_render_qml_gl, "trace.render.qml.gl") @@ -272,7 +277,7 @@ QString getEventBridgeJavascript() { QString createGlobalEventBridgeStr = QTextStream(&createGlobalEventBridgeFile).readAll(); javaScriptToInject = webChannelStr + createGlobalEventBridgeStr; } else { - qCWarning(glLogging) << "Unable to find qwebchannel.js or createGlobalEventBridge.js"; + qCWarning(uiLogging) << "Unable to find qwebchannel.js or createGlobalEventBridge.js"; } return javaScriptToInject; } @@ -297,6 +302,14 @@ private: QQmlEngine* acquireEngine(QQuickWindow* window) { Q_ASSERT(QThread::currentThread() == qApp->thread()); + if (QThread::currentThread() != qApp->thread()) { + qCWarning(uiLogging) << "Cannot acquire QML engine on any thread but the main thread"; + } + static std::once_flag once; + std::call_once(once, [] { + qmlRegisterType("Hifi", 1, 0, "SoundEffect"); + }); + if (!globalEngine) { Q_ASSERT(0 == globalEngineRefCount); globalEngine = new QQmlEngine(); @@ -325,8 +338,6 @@ QQmlEngine* acquireEngine(QQuickWindow* window) { rootContext->setContextProperty("FileTypeProfile", new FileTypeProfile(rootContext)); rootContext->setContextProperty("HFWebEngineProfile", new HFWebEngineProfile(rootContext)); rootContext->setContextProperty("HFTabletWebEngineProfile", new HFTabletWebEngineProfile(rootContext)); - - } ++globalEngineRefCount; @@ -457,7 +468,7 @@ void OffscreenQmlSurface::onAboutToQuit() { } void OffscreenQmlSurface::create(QOpenGLContext* shareContext) { - qCDebug(glLogging) << "Building QML surface"; + qCDebug(uiLogging) << "Building QML surface"; _renderControl = new QMyQuickRenderControl(); connect(_renderControl, &QQuickRenderControl::renderRequested, this, [this] { _render = true; }); @@ -548,7 +559,7 @@ void OffscreenQmlSurface::resize(const QSize& newSize_, bool forceResize) { return; } - qCDebug(glLogging) << "Offscreen UI resizing to " << newSize.width() << "x" << newSize.height(); + qCDebug(uiLogging) << "Offscreen UI resizing to " << newSize.width() << "x" << newSize.height(); gl::withSavedContext([&] { _canvas->makeCurrent(); @@ -595,6 +606,9 @@ void OffscreenQmlSurface::setBaseUrl(const QUrl& baseUrl) { } QObject* OffscreenQmlSurface::load(const QUrl& qmlSource, bool createNewContext, std::function f) { + if (QThread::currentThread() != thread()) { + qCWarning(uiLogging) << "Called load on a non-surface thread"; + } // Synchronous loading may take a while; restart the deadlock timer QMetaObject::invokeMethod(qApp, "updateHeartbeat", Qt::DirectConnection); @@ -636,7 +650,7 @@ QObject* OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlCon disconnect(qmlComponent, &QQmlComponent::statusChanged, this, 0); if (qmlComponent->isError()) { for (const auto& error : qmlComponent->errors()) { - qCWarning(glLogging) << error.url() << error.line() << error; + qCWarning(uiLogging) << error.url() << error.line() << error; } qmlComponent->deleteLater(); return nullptr; @@ -646,7 +660,7 @@ QObject* OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlCon QObject* newObject = qmlComponent->beginCreate(qmlContext); if (qmlComponent->isError()) { for (const auto& error : qmlComponent->errors()) { - qCWarning(glLogging) << error.url() << error.line() << error; + qCWarning(uiLogging) << error.url() << error.line() << error; } if (!_rootItem) { qFatal("Unable to finish loading QML root"); diff --git a/libraries/gl/src/gl/OffscreenQmlSurface.h b/libraries/ui/src/ui/OffscreenQmlSurface.h similarity index 100% rename from libraries/gl/src/gl/OffscreenQmlSurface.h rename to libraries/ui/src/ui/OffscreenQmlSurface.h diff --git a/libraries/gl/src/gl/OffscreenQmlSurfaceCache.cpp b/libraries/ui/src/ui/OffscreenQmlSurfaceCache.cpp similarity index 100% rename from libraries/gl/src/gl/OffscreenQmlSurfaceCache.cpp rename to libraries/ui/src/ui/OffscreenQmlSurfaceCache.cpp diff --git a/libraries/gl/src/gl/OffscreenQmlSurfaceCache.h b/libraries/ui/src/ui/OffscreenQmlSurfaceCache.h similarity index 100% rename from libraries/gl/src/gl/OffscreenQmlSurfaceCache.h rename to libraries/ui/src/ui/OffscreenQmlSurfaceCache.h diff --git a/libraries/ui/src/ui/QmlWrapper.cpp b/libraries/ui/src/ui/QmlWrapper.cpp new file mode 100644 index 0000000000..518a05613a --- /dev/null +++ b/libraries/ui/src/ui/QmlWrapper.cpp @@ -0,0 +1,59 @@ +// +// Created by Bradley Austin Davis on 2017/06/22 +// Copyright 2013-2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "QmlWrapper.h" + +#include +#include + +QmlWrapper::QmlWrapper(QObject* qmlObject, QObject* parent) + : QObject(parent), _qmlObject(qmlObject) { + Q_ASSERT(QThread::currentThread() == qApp->thread()); +} + +void QmlWrapper::writeProperty(QString propertyName, QVariant propertyValue) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "writeProperty", Q_ARG(QString, propertyName), Q_ARG(QVariant, propertyValue)); + } + _qmlObject->setProperty(propertyName.toStdString().c_str(), propertyValue); +} + +void QmlWrapper::writeProperties(QVariant propertyMap) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "writeProperties", Q_ARG(QVariant, propertyMap)); + } + QVariantMap map = propertyMap.toMap(); + for (const QString& key : map.keys()) { + _qmlObject->setProperty(key.toStdString().c_str(), map[key]); + } +} + +QVariant QmlWrapper::readProperty(const QString& propertyName) { + if (QThread::currentThread() != thread()) { + QVariant result; + QMetaObject::invokeMethod(this, "readProperty", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVariant, result), Q_ARG(QString, propertyName)); + return result; + } + + return _qmlObject->property(propertyName.toStdString().c_str()); +} + +QVariant QmlWrapper::readProperties(const QVariant& propertyList) { + if (QThread::currentThread() != thread()) { + QVariant result; + QMetaObject::invokeMethod(this, "readProperties", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, propertyList)); + return result; + } + + QVariantMap result; + for (const QVariant& property : propertyList.toList()) { + QString propertyString = property.toString(); + result.insert(propertyString, _qmlObject->property(propertyString.toStdString().c_str())); + } + return result; +} diff --git a/libraries/ui/src/ui/QmlWrapper.h b/libraries/ui/src/ui/QmlWrapper.h new file mode 100644 index 0000000000..d77e45c9dc --- /dev/null +++ b/libraries/ui/src/ui/QmlWrapper.h @@ -0,0 +1,44 @@ +// +// Created by Anthony J. Thibault on 2016-12-12 +// Copyright 2013-2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_QmlWrapper_h +#define hifi_QmlWrapper_h + +#include +#include +#include +#include + +class QmlWrapper : public QObject { + Q_OBJECT +public: + QmlWrapper(QObject* qmlObject, QObject* parent = nullptr); + + Q_INVOKABLE void writeProperty(QString propertyName, QVariant propertyValue); + Q_INVOKABLE void writeProperties(QVariant propertyMap); + Q_INVOKABLE QVariant readProperty(const QString& propertyName); + Q_INVOKABLE QVariant readProperties(const QVariant& propertyList); + +protected: + QObject* _qmlObject{ nullptr }; +}; + +template +QScriptValue wrapperToScriptValue(QScriptEngine* engine, T* const &in) { + if (!in) { + return engine->undefinedValue(); + } + return engine->newQObject(in, QScriptEngine::QtOwnership, QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects); +} + +template +void wrapperFromScriptValue(const QScriptValue& value, T* &out) { + out = qobject_cast(value.toQObject()); +} + +#endif \ No newline at end of file diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp similarity index 69% rename from libraries/script-engine/src/TabletScriptingInterface.cpp rename to libraries/ui/src/ui/TabletScriptingInterface.cpp index ef2887fdfb..f85106918e 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -9,66 +9,51 @@ #include "TabletScriptingInterface.h" #include +#include -#include -#include "DependencyManager.h" #include -#include -#include +#include +#include #include -#include "ScriptEngineLogging.h" -#include -#include -#include "SoundEffect.h" +#include "../QmlWindowClass.h" +#include "../OffscreenUi.h" +#include "../InfoView.h" +#include "ToolbarScriptingInterface.h" +#include "Logging.h" + +// FIXME move to global app properties const QString SYSTEM_TOOLBAR = "com.highfidelity.interface.toolbar.system"; const QString SYSTEM_TABLET = "com.highfidelity.interface.tablet.system"; -QScriptValue tabletToScriptValue(QScriptEngine* engine, TabletProxy* const &in) { - return engine->newQObject(in, QScriptEngine::QtOwnership, QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects); -} - -void tabletFromScriptValue(const QScriptValue& value, TabletProxy* &out) { - out = qobject_cast(value.toQObject()); -} - TabletScriptingInterface::TabletScriptingInterface() { - qmlRegisterType("Hifi", 1, 0, "SoundEffect"); + qCDebug(uiLogging) << "Building tablet scripting interface"; } -QObject* TabletScriptingInterface::getSystemToolbarProxy() { - Qt::ConnectionType connectionType = Qt::AutoConnection; - if (QThread::currentThread() != _toolbarScriptingInterface->thread()) { - connectionType = Qt::BlockingQueuedConnection; - } +TabletScriptingInterface::~TabletScriptingInterface() { + qCDebug(uiLogging) << "Destroying tablet scripting interface"; +} - QObject* toolbarProxy = nullptr; - bool hasResult = QMetaObject::invokeMethod(_toolbarScriptingInterface, "getToolbar", connectionType, Q_RETURN_ARG(QObject*, toolbarProxy), Q_ARG(QString, SYSTEM_TOOLBAR)); - if (hasResult) { - return toolbarProxy; - } else { - qCWarning(scriptengine) << "ToolbarScriptingInterface getToolbar has no result"; - return nullptr; - } +ToolbarProxy* TabletScriptingInterface::getSystemToolbarProxy() { + Q_ASSERT(QThread::currentThread() == qApp->thread()); + return _toolbarScriptingInterface->getToolbar(SYSTEM_TOOLBAR); } TabletProxy* TabletScriptingInterface::getTablet(const QString& tabletId) { TabletProxy* tabletProxy = nullptr; - { - // the only thing guarded should be map mutation - // this avoids a deadlock with the Main thread - // from Qt::BlockingQueuedEvent invocations later in the call-tree - std::lock_guard guard(_mapMutex); + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "getTablet", Qt::BlockingQueuedConnection, Q_RETURN_ARG(TabletProxy*, tabletProxy), Q_ARG(QString, tabletId)); + return tabletProxy; + } - auto iter = _tabletProxies.find(tabletId); - if (iter != _tabletProxies.end()) { - // tablet already exists - return iter->second; - } else { - // tablet must be created - tabletProxy = new TabletProxy(this, tabletId); - _tabletProxies[tabletId] = tabletProxy; - } + auto iter = _tabletProxies.find(tabletId); + if (iter != _tabletProxies.end()) { + // tablet already exists + return iter->second; + } else { + // tablet must be created + tabletProxy = new TabletProxy(this, tabletId); + _tabletProxies[tabletId] = tabletProxy; } assert(tabletProxy); @@ -78,42 +63,40 @@ TabletProxy* TabletScriptingInterface::getTablet(const QString& tabletId) { } void TabletScriptingInterface::setToolbarMode(bool toolbarMode) { - { - // the only thing guarded should be _toolbarMode - // this avoids a deadlock with the Main thread - // from Qt::BlockingQueuedEvent invocations later in the call-tree - std::lock_guard guard(_mapMutex); - _toolbarMode = toolbarMode; - } - + Q_ASSERT(QThread::currentThread() == qApp->thread()); + _toolbarMode = toolbarMode; for (auto& iter : _tabletProxies) { iter.second->setToolbarMode(toolbarMode); } } -void TabletScriptingInterface::setQmlTabletRoot(QString tabletId, QQuickItem* qmlTabletRoot, QObject* qmlOffscreenSurface) { +void TabletScriptingInterface::setQmlTabletRoot(QString tabletId, OffscreenQmlSurface* qmlOffscreenSurface) { + Q_ASSERT(QThread::currentThread() == qApp->thread()); TabletProxy* tablet = qobject_cast(getTablet(tabletId)); if (tablet) { - tablet->setQmlTabletRoot(qmlTabletRoot, qmlOffscreenSurface); + tablet->setQmlTabletRoot(qmlOffscreenSurface); } else { - qCWarning(scriptengine) << "TabletScriptingInterface::setupTablet() bad tablet object"; + qCWarning(uiLogging) << "TabletScriptingInterface::setupTablet() bad tablet object"; } } QQuickWindow* TabletScriptingInterface::getTabletWindow() { + Q_ASSERT(QThread::currentThread() == qApp->thread()); TabletProxy* tablet = qobject_cast(getTablet(SYSTEM_TABLET)); - QObject* qmlSurface = tablet->getTabletSurface(); - - OffscreenQmlSurface* surface = dynamic_cast(qmlSurface); - - if (!surface) { + if (!tablet) { return nullptr; } - QQuickWindow* window = surface->getWindow(); - return window; + + auto* qmlSurface = tablet->getTabletSurface(); + if (!qmlSurface) { + return nullptr; + } + + return qmlSurface->getWindow(); } void TabletScriptingInterface::processMenuEvents(QObject* object, const QKeyEvent* event) { + Q_ASSERT(QThread::currentThread() == qApp->thread()); switch (event->key()) { case Qt::Key_Down: QMetaObject::invokeMethod(object, "nextItem"); @@ -141,6 +124,7 @@ void TabletScriptingInterface::processMenuEvents(QObject* object, const QKeyEven } void TabletScriptingInterface::processTabletEvents(QObject* object, const QKeyEvent* event) { + Q_ASSERT(QThread::currentThread() == qApp->thread()); switch (event->key()) { case Qt::Key_Down: QMetaObject::invokeMethod(object, "downItem"); @@ -167,8 +151,8 @@ void TabletScriptingInterface::processTabletEvents(QObject* object, const QKeyEv } } - void TabletScriptingInterface::processEvent(const QKeyEvent* event) { + Q_ASSERT(QThread::currentThread() == qApp->thread()); TabletProxy* tablet = qobject_cast(getTablet(SYSTEM_TABLET)); QObject* qmlTablet = tablet->getQmlTablet(); QObject* qmlMenu = tablet->getQmlMenu(); @@ -180,8 +164,8 @@ void TabletScriptingInterface::processEvent(const QKeyEvent* event) { } } -QObject* TabletScriptingInterface::getFlags() -{ +QObject* TabletScriptingInterface::getFlags() { + Q_ASSERT(QThread::currentThread() == qApp->thread()); auto offscreenUi = DependencyManager::get(); return offscreenUi->getFlags(); } @@ -199,10 +183,23 @@ class TabletRootWindow : public QmlWindowClass { }; TabletProxy::TabletProxy(QObject* parent, QString name) : QObject(parent), _name(name) { + if (QThread::currentThread() != qApp->thread()) { + qCWarning(uiLogging) << "Creating tablet proxy on wrong thread " << _name; + } +} + +TabletProxy::~TabletProxy() { + qCDebug(uiLogging) << "Destroying tablet proxy " << _name; + if (QThread::currentThread() != thread()) { + qCWarning(uiLogging) << "Destroying tablet proxy on wrong thread" << _name; + } } void TabletProxy::setToolbarMode(bool toolbarMode) { - std::lock_guard guard(_tabletMutex); + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setToolbarMode", Q_ARG(bool, toolbarMode)); + return; + } if (toolbarMode == _toolbarMode) { return; @@ -245,25 +242,23 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { } static void addButtonProxyToQmlTablet(QQuickItem* qmlTablet, TabletButtonProxy* buttonProxy) { - QVariant resultVar; - Qt::ConnectionType connectionType = Qt::AutoConnection; - if (QThread::currentThread() != qmlTablet->thread()) { - connectionType = Qt::BlockingQueuedConnection; + Q_ASSERT(QThread::currentThread() == qApp->thread()); + if (buttonProxy == NULL){ + qCCritical(uiLogging) << "TabletScriptingInterface addButtonProxyToQmlTablet buttonProxy is NULL"; + return; } - if (buttonProxy == NULL){ - qCCritical(scriptengine) << "TabletScriptingInterface addButtonProxyToQmlTablet buttonProxy is NULL"; - return; - } - bool hasResult = QMetaObject::invokeMethod(qmlTablet, "addButtonProxy", connectionType, + + QVariant resultVar; + bool hasResult = QMetaObject::invokeMethod(qmlTablet, "addButtonProxy", Qt::DirectConnection, Q_RETURN_ARG(QVariant, resultVar), Q_ARG(QVariant, buttonProxy->getProperties())); if (!hasResult) { - qCWarning(scriptengine) << "TabletScriptingInterface addButtonProxyToQmlTablet has no result"; + qCWarning(uiLogging) << "TabletScriptingInterface addButtonProxyToQmlTablet has no result"; return; } QObject* qmlButton = qvariant_cast(resultVar); if (!qmlButton) { - qCWarning(scriptengine) << "TabletScriptingInterface addButtonProxyToQmlTablet result not a QObject"; + qCWarning(uiLogging) << "TabletScriptingInterface addButtonProxyToQmlTablet result not a QObject"; return; } QObject::connect(qmlButton, SIGNAL(clicked()), buttonProxy, SLOT(clickedSlot())); @@ -281,6 +276,11 @@ static QString getUsername() { } void TabletProxy::initialScreen(const QVariant& url) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "initialScreen", Q_ARG(QVariant, url)); + return; + } + if (_qmlTabletRoot) { pushOntoStack(url); } else { @@ -290,34 +290,49 @@ void TabletProxy::initialScreen(const QVariant& url) { } bool TabletProxy::isMessageDialogOpen() { - if (_qmlTabletRoot) { - QVariant result; - QMetaObject::invokeMethod(_qmlTabletRoot, "isDialogOpen",Qt::DirectConnection, - Q_RETURN_ARG(QVariant, result)); - - return result.toBool(); + if (QThread::currentThread() != thread()) { + bool result = false; + QMetaObject::invokeMethod(this, "isMessageDialogOpen", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result)); + return result; } - return false; + if (!_qmlTabletRoot) { + return false; + } + + QVariant result; + QMetaObject::invokeMethod(_qmlTabletRoot, "isDialogOpen",Qt::DirectConnection, + Q_RETURN_ARG(QVariant, result)); + return result.toBool(); } void TabletProxy::emitWebEvent(QVariant msg) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "emitWebEvent", Q_ARG(QVariant, msg)); + return; + } emit webEventReceived(msg); } bool TabletProxy::isPathLoaded(QVariant path) { + if (QThread::currentThread() != thread()) { + bool result = false; + QMetaObject::invokeMethod(this, "isPathLoaded", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result), Q_ARG(QVariant, path)); + return result; + } + return path.toString() == _currentPathLoaded.toString(); } -void TabletProxy::setQmlTabletRoot(QQuickItem* qmlTabletRoot, QObject* qmlOffscreenSurface) { - std::lock_guard guard(_tabletMutex); - _qmlOffscreenSurface = qmlOffscreenSurface; - _qmlTabletRoot = qmlTabletRoot; - if (_qmlTabletRoot && _qmlOffscreenSurface) { - QObject::connect(_qmlOffscreenSurface, SIGNAL(webEventReceived(QVariant)), this, SLOT(emitWebEvent(QVariant)), Qt::DirectConnection); +void TabletProxy::setQmlTabletRoot(OffscreenQmlSurface* qmlOffscreenSurface) { + Q_ASSERT(QThread::currentThread() == qApp->thread()); + _qmlOffscreenSurface = qmlOffscreenSurface; + _qmlTabletRoot = qmlOffscreenSurface ? qmlOffscreenSurface->getRootItem() : nullptr; + if (_qmlTabletRoot && _qmlOffscreenSurface) { + QObject::connect(_qmlOffscreenSurface, SIGNAL(webEventReceived(QVariant)), this, SLOT(emitWebEvent(QVariant))); // forward qml surface events to interface js - connect(dynamic_cast(_qmlOffscreenSurface), &OffscreenQmlSurface::fromQml, [this](QVariant message) { + connect(_qmlOffscreenSurface, &OffscreenQmlSurface::fromQml, [this](QVariant message) { if (message.canConvert()) { emit fromQml(qvariant_cast(message).toVariant()); } else if (message.canConvert()) { @@ -330,7 +345,7 @@ void TabletProxy::setQmlTabletRoot(QQuickItem* qmlTabletRoot, QObject* qmlOffscr if (_toolbarMode) { // if someone creates the tablet in toolbar mode, make sure to display the home screen on the tablet. auto loader = _qmlTabletRoot->findChild("loader"); - QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen()), Qt::DirectConnection); + QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen())); QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(TABLET_SOURCE_URL))); } @@ -360,9 +375,18 @@ void TabletProxy::setQmlTabletRoot(QQuickItem* qmlTabletRoot, QObject* qmlOffscr } void TabletProxy::gotoHomeScreen() { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "gotoHomeScreen"); + return; + } loadHomeScreen(false); } + void TabletProxy::gotoMenuScreen(const QString& submenu) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "gotoMenuScreen", Q_ARG(QString, submenu)); + return; + } QObject* root = nullptr; if (!_toolbarMode && _qmlTabletRoot) { @@ -385,6 +409,11 @@ void TabletProxy::gotoMenuScreen(const QString& submenu) { } void TabletProxy::loadQMLOnTop(const QVariant& path) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "loadQMLOnTop", Q_ARG(QVariant, path)); + return; + } + QObject* root = nullptr; if (!_toolbarMode && _qmlTabletRoot) { root = _qmlTabletRoot; @@ -396,11 +425,16 @@ void TabletProxy::loadQMLOnTop(const QVariant& path) { QMetaObject::invokeMethod(root, "loadQMLOnTop", Q_ARG(const QVariant&, path)); QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true))); } else { - qCDebug(scriptengine) << "tablet cannot load QML because _qmlTabletRoot is null"; + qCDebug(uiLogging) << "tablet cannot load QML because _qmlTabletRoot is null"; } } void TabletProxy::returnToPreviousApp() { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "returnToPreviousApp"); + return; + } + QObject* root = nullptr; if (!_toolbarMode && _qmlTabletRoot) { root = _qmlTabletRoot; @@ -412,11 +446,15 @@ void TabletProxy::returnToPreviousApp() { QMetaObject::invokeMethod(root, "returnToPreviousApp"); QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true))); } else { - qCDebug(scriptengine) << "tablet cannot load QML because _qmlTabletRoot is null"; + qCDebug(uiLogging) << "tablet cannot load QML because _qmlTabletRoot is null"; } } void TabletProxy::loadQMLSource(const QVariant& path) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "loadQMLSource", Q_ARG(QVariant, path)); + return; + } QObject* root = nullptr; if (!_toolbarMode && _qmlTabletRoot) { @@ -435,11 +473,17 @@ void TabletProxy::loadQMLSource(const QVariant& path) { QMetaObject::invokeMethod(root, "setShown", Q_ARG(const QVariant&, QVariant(true))); } } else { - qCDebug(scriptengine) << "tablet cannot load QML because _qmlTabletRoot is null"; + qCDebug(uiLogging) << "tablet cannot load QML because _qmlTabletRoot is null"; } } bool TabletProxy::pushOntoStack(const QVariant& path) { + if (QThread::currentThread() != thread()) { + bool result = false; + QMetaObject::invokeMethod(this, "pushOntoStack", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result), Q_ARG(QVariant, path)); + return result; + } + QObject* root = nullptr; if (!_toolbarMode && _qmlTabletRoot) { root = _qmlTabletRoot; @@ -455,13 +499,18 @@ bool TabletProxy::pushOntoStack(const QVariant& path) { loadQMLSource(path); } } else { - qCDebug(scriptengine) << "tablet cannot push QML because _qmlTabletRoot or _desktopWindow is null"; + qCDebug(uiLogging) << "tablet cannot push QML because _qmlTabletRoot or _desktopWindow is null"; } return root; } void TabletProxy::popFromStack() { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "popFromStack"); + return; + } + QObject* root = nullptr; if (!_toolbarMode && _qmlTabletRoot) { root = _qmlTabletRoot; @@ -473,15 +522,20 @@ void TabletProxy::popFromStack() { auto stack = root->findChild("stack"); QMetaObject::invokeMethod(stack, "popSource"); } else { - qCDebug(scriptengine) << "tablet cannot pop QML because _qmlTabletRoot or _desktopWindow is null"; + qCDebug(uiLogging) << "tablet cannot pop QML because _qmlTabletRoot or _desktopWindow is null"; } } void TabletProxy::loadHomeScreen(bool forceOntoHomeScreen) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "loadHomeScreen", Q_ARG(bool, forceOntoHomeScreen)); + return; + } + if ((_state != State::Home && _state != State::Uninitialized) || forceOntoHomeScreen) { if (!_toolbarMode && _qmlTabletRoot) { auto loader = _qmlTabletRoot->findChild("loader"); - QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen()), Qt::DirectConnection); + QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen())); QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(TABLET_SOURCE_URL))); QMetaObject::invokeMethod(_qmlTabletRoot, "playButtonClickSound"); } else if (_toolbarMode && _desktopWindow) { @@ -505,6 +559,11 @@ void TabletProxy::loadWebScreenOnTop(const QVariant& url) { } void TabletProxy::loadWebScreenOnTop(const QVariant& url, const QString& injectJavaScriptUrl) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "loadWebScreenOnTop", Q_ARG(QVariant, url), Q_ARG(QString, injectJavaScriptUrl)); + return; + } + QObject* root = nullptr; if (!_toolbarMode && _qmlTabletRoot) { root = _qmlTabletRoot; @@ -521,6 +580,10 @@ void TabletProxy::loadWebScreenOnTop(const QVariant& url, const QString& injectJ } void TabletProxy::gotoWebScreen(const QString& url, const QString& injectedJavaScriptUrl) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "gotoWebScreen", Q_ARG(QString, url), Q_ARG(QString, injectedJavaScriptUrl)); + return; + } QObject* root = nullptr; if (!_toolbarMode && _qmlTabletRoot) { @@ -540,57 +603,59 @@ void TabletProxy::gotoWebScreen(const QString& url, const QString& injectedJavaS _currentPathLoaded = QVariant(url); } -QObject* TabletProxy::addButton(const QVariant& properties) { +TabletButtonProxy* TabletProxy::addButton(const QVariant& properties) { + if (QThread::currentThread() != thread()) { + TabletButtonProxy* result = nullptr; + QMetaObject::invokeMethod(this, "addButton", Qt::BlockingQueuedConnection, Q_RETURN_ARG(TabletButtonProxy*, result), Q_ARG(QVariant, properties)); + return result; + } + auto tabletButtonProxy = QSharedPointer(new TabletButtonProxy(properties.toMap())); - std::unique_lock guard(_tabletMutex); _tabletButtonProxies.push_back(tabletButtonProxy); if (!_toolbarMode && _qmlTabletRoot) { auto tablet = getQmlTablet(); if (tablet) { addButtonProxyToQmlTablet(tablet, tabletButtonProxy.data()); } else { - qCCritical(scriptengine) << "Could not find tablet in TabletRoot.qml"; + qCCritical(uiLogging) << "Could not find tablet in TabletRoot.qml"; } } else if (_toolbarMode) { auto tabletScriptingInterface = DependencyManager::get(); - QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy(); - - Qt::ConnectionType connectionType = Qt::AutoConnection; - if (QThread::currentThread() != toolbarProxy->thread()) { - connectionType = Qt::BlockingQueuedConnection; - } - - guard.unlock(); - - // copy properties from tablet button proxy to toolbar button proxy. - QObject* toolbarButtonProxy = nullptr; - bool hasResult = QMetaObject::invokeMethod(toolbarProxy, "addButton", connectionType, Q_RETURN_ARG(QObject*, toolbarButtonProxy), Q_ARG(QVariant, tabletButtonProxy->getProperties())); - if (hasResult) { - tabletButtonProxy->setToolbarButtonProxy(toolbarButtonProxy); - } else { - qCWarning(scriptengine) << "ToolbarProxy addButton has no result"; + auto toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy(); + if (toolbarProxy) { + // copy properties from tablet button proxy to toolbar button proxy. + toolbarProxy->addButton(tabletButtonProxy->getProperties()); } } return tabletButtonProxy.data(); } bool TabletProxy::onHomeScreen() { + if (QThread::currentThread() != thread()) { + bool result = false; + QMetaObject::invokeMethod(this, "onHomeScreen", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result)); + return result; + } + return _state == State::Home; } -void TabletProxy::removeButton(QObject* tabletButtonProxy) { - std::unique_lock guard(_tabletMutex); +void TabletProxy::removeButton(TabletButtonProxy* tabletButtonProxy) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "removeButton", Q_ARG(TabletButtonProxy*, tabletButtonProxy)); + return; + } auto tablet = getQmlTablet(); if (!tablet) { - qCCritical(scriptengine) << "Could not find tablet in TabletRoot.qml"; + qCCritical(uiLogging) << "Could not find tablet in TabletRoot.qml"; } QSharedPointer buttonProxy; { auto iter = std::find(_tabletButtonProxies.begin(), _tabletButtonProxies.end(), tabletButtonProxy); if (iter == _tabletButtonProxies.end()) { - qCWarning(scriptengine) << "TabletProxy::removeButton() could not find button " << tabletButtonProxy; + qCWarning(uiLogging) << "TabletProxy::removeButton() could not find button " << tabletButtonProxy; return; } buttonProxy = *iter; @@ -600,21 +665,23 @@ void TabletProxy::removeButton(QObject* tabletButtonProxy) { if (!_toolbarMode && _qmlTabletRoot) { buttonProxy->setQmlButton(nullptr); if (tablet) { - guard.unlock(); QMetaObject::invokeMethod(tablet, "removeButtonProxy", Qt::AutoConnection, Q_ARG(QVariant, buttonProxy->getProperties())); } } else if (_toolbarMode) { auto tabletScriptingInterface = DependencyManager::get(); QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy(); - // remove button from toolbarProxy - guard.unlock(); QMetaObject::invokeMethod(toolbarProxy, "removeButton", Qt::AutoConnection, Q_ARG(QVariant, buttonProxy->getUuid().toString())); buttonProxy->setToolbarButtonProxy(nullptr); } } void TabletProxy::emitScriptEvent(QVariant msg) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "emitScriptEvent", Q_ARG(QVariant, msg)); + return; + } + if (!_toolbarMode && _qmlOffscreenSurface) { QMetaObject::invokeMethod(_qmlOffscreenSurface, "emitScriptEvent", Qt::AutoConnection, Q_ARG(QVariant, msg)); } else if (_toolbarMode && _desktopWindow) { @@ -623,6 +690,11 @@ void TabletProxy::emitScriptEvent(QVariant msg) { } void TabletProxy::sendToQml(QVariant msg) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "sendToQml", Q_ARG(QVariant, msg)); + return; + } + if (!_toolbarMode && _qmlOffscreenSurface) { QMetaObject::invokeMethod(_qmlOffscreenSurface, "sendToQml", Qt::AutoConnection, Q_ARG(QVariant, msg)); } else if (_toolbarMode && _desktopWindow) { @@ -644,7 +716,7 @@ void TabletProxy::addButtonsToHomeScreen() { QObject::disconnect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen())); } -QObject* TabletProxy::getTabletSurface() { +OffscreenQmlSurface* TabletProxy::getTabletSurface() { return _qmlOffscreenSurface; } @@ -678,7 +750,7 @@ void TabletProxy::addButtonsToToolbar() { if (hasResult) { buttonProxy->setToolbarButtonProxy(toolbarButtonProxy); } else { - qCWarning(scriptengine) << "ToolbarProxy addButton has no result"; + qCWarning(uiLogging) << "ToolbarProxy addButton has no result"; } } @@ -753,34 +825,55 @@ TabletButtonProxy::TabletButtonProxy(const QVariantMap& properties) : _properties[UUID_KEY] = _uuid; _properties[OBJECT_NAME_KEY] = _uuid.toString(); _properties[STABLE_ORDER_KEY] = _stableOrder; + if (QThread::currentThread() != qApp->thread()) { + qCWarning(uiLogging) << "Creating tablet button proxy on wrong thread"; + } +} + +TabletButtonProxy::~TabletButtonProxy() { + qCDebug(uiLogging) << "Destroying tablet button proxy " ; + if (QThread::currentThread() != thread()) { + qCWarning(uiLogging) << "Destroying tablet button proxy on wrong thread"; + } } void TabletButtonProxy::setQmlButton(QQuickItem* qmlButton) { - std::lock_guard guard(_buttonMutex); + Q_ASSERT(QThread::currentThread() == qApp->thread()); _qmlButton = qmlButton; } void TabletButtonProxy::setToolbarButtonProxy(QObject* toolbarButtonProxy) { - std::lock_guard guard(_buttonMutex); _toolbarButtonProxy = toolbarButtonProxy; if (_toolbarButtonProxy) { QObject::connect(_toolbarButtonProxy, SIGNAL(clicked()), this, SLOT(clickedSlot())); } } -QVariantMap TabletButtonProxy::getProperties() const { - std::lock_guard guard(_buttonMutex); +QVariantMap TabletButtonProxy::getProperties() { + if (QThread::currentThread() != thread()) { + QVariantMap result; + QMetaObject::invokeMethod(this, "getProperties", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVariantMap, result)); + return result; + } + return _properties; } void TabletButtonProxy::editProperties(QVariantMap properties) { - std::lock_guard guard(_buttonMutex); + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "editProperties", Qt::BlockingQueuedConnection, Q_ARG(QVariantMap, properties)); + return; + } QVariantMap::const_iterator iter = properties.constBegin(); while (iter != properties.constEnd()) { - _properties[iter.key()] = iter.value(); - if (_qmlButton) { - QMetaObject::invokeMethod(_qmlButton, "changeProperty", Qt::AutoConnection, Q_ARG(QVariant, QVariant(iter.key())), Q_ARG(QVariant, iter.value())); + const auto& key = iter.key(); + const auto& value = iter.value(); + if (!_properties.contains(key) || _properties[key] != value) { + _properties[iter.key()] = iter.value(); + if (_qmlButton) { + QMetaObject::invokeMethod(_qmlButton, "changeProperty", Qt::AutoConnection, Q_ARG(QVariant, QVariant(iter.key())), Q_ARG(QVariant, iter.value())); + } } ++iter; } @@ -789,5 +882,3 @@ void TabletButtonProxy::editProperties(QVariantMap properties) { QMetaObject::invokeMethod(_toolbarButtonProxy, "editProperties", Qt::AutoConnection, Q_ARG(QVariantMap, properties)); } } - -#include "TabletScriptingInterface.moc" diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/ui/src/ui/TabletScriptingInterface.h similarity index 90% rename from libraries/script-engine/src/TabletScriptingInterface.h rename to libraries/ui/src/ui/TabletScriptingInterface.h index 23d7ecaea4..0303a0a1c4 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/ui/src/ui/TabletScriptingInterface.h @@ -26,9 +26,13 @@ #include +class ToolbarProxy; +class ToolbarScriptingInterface; + class TabletProxy; class TabletButtonProxy; class QmlWindowClass; +class OffscreenQmlSurface; /**jsdoc * @namespace Tablet @@ -37,9 +41,9 @@ class TabletScriptingInterface : public QObject, public Dependency { Q_OBJECT public: TabletScriptingInterface(); + ~TabletScriptingInterface(); - void setToolbarScriptingInterface(QObject* toolbarScriptingInterface) { _toolbarScriptingInterface = toolbarScriptingInterface; } - QObject* getSystemToolbarProxy(); + void setToolbarScriptingInterface(ToolbarScriptingInterface* toolbarScriptingInterface) { _toolbarScriptingInterface = toolbarScriptingInterface; } /**jsdoc * Creates or retruns a new TabletProxy and returns it. @@ -51,7 +55,7 @@ public: void setToolbarMode(bool toolbarMode); - void setQmlTabletRoot(QString tabletId, QQuickItem* qmlTabletRoot, QObject* qmlOffscreenSurface); + void setQmlTabletRoot(QString tabletId, OffscreenQmlSurface* offscreenQmlSurface); void processEvent(const QKeyEvent* event); @@ -67,13 +71,14 @@ signals: void tabletNotification(); private: + friend class TabletProxy; void processMenuEvents(QObject* object, const QKeyEvent* event); void processTabletEvents(QObject* object, const QKeyEvent* event); + ToolbarProxy* getSystemToolbarProxy(); protected: - std::mutex _mapMutex; std::map _tabletProxies; - QObject* _toolbarScriptingInterface { nullptr }; + ToolbarScriptingInterface* _toolbarScriptingInterface { nullptr }; bool _toolbarMode { false }; }; @@ -91,18 +96,19 @@ class TabletProxy : public QObject { Q_PROPERTY(bool tabletShown MEMBER _tabletShown NOTIFY tabletShownChanged) public: TabletProxy(QObject* parent, QString name); + ~TabletProxy(); - void setQmlTabletRoot(QQuickItem* qmlTabletRoot, QObject* qmlOffscreenSurface); - - Q_INVOKABLE void gotoMenuScreen(const QString& submenu = ""); - - QString getName() const { return _name; } + void setQmlTabletRoot(OffscreenQmlSurface* offscreenQmlSurface); + const QString getName() const { return _name; } bool getToolbarMode() const { return _toolbarMode; } void setToolbarMode(bool toolbarMode); + + Q_INVOKABLE void gotoMenuScreen(const QString& submenu = ""); Q_INVOKABLE void initialScreen(const QVariant& url); + /**jsdoc * transition to the home screen * @function TabletProxy#gotoHomeScreen @@ -143,14 +149,14 @@ public: * @param properties {Object} button properties UI_TABLET_HACK: enumerate these when we figure out what they should be! * @returns {TabletButtonProxy} */ - Q_INVOKABLE QObject* addButton(const QVariant& properties); + Q_INVOKABLE TabletButtonProxy* addButton(const QVariant& properties); /**jsdoc * removes button from the tablet * @function TabletProxy.removeButton * @param tabletButtonProxy {TabletButtonProxy} button to be removed */ - Q_INVOKABLE void removeButton(QObject* tabletButtonProxy); + Q_INVOKABLE void removeButton(TabletButtonProxy* tabletButtonProxy); /**jsdoc * Used to send an event to the html/js embedded in the tablet @@ -184,7 +190,7 @@ public: QQuickItem* getTabletRoot() const { return _qmlTabletRoot; } - QObject* getTabletSurface(); + OffscreenQmlSurface* getTabletSurface(); QQuickItem* getQmlTablet() const; @@ -236,10 +242,9 @@ protected: QVariant _initialPath { "" }; QVariant _currentPathLoaded { "" }; QString _name; - std::mutex _tabletMutex; std::vector> _tabletButtonProxies; QQuickItem* _qmlTabletRoot { nullptr }; - QObject* _qmlOffscreenSurface { nullptr }; + OffscreenQmlSurface* _qmlOffscreenSurface { nullptr }; QmlWindowClass* _desktopWindow { nullptr }; bool _toolbarMode { false }; bool _tabletShown { false }; @@ -251,9 +256,6 @@ protected: Q_DECLARE_METATYPE(TabletProxy*); -QScriptValue tabletToScriptValue(QScriptEngine* engine, TabletProxy* const &in); -void tabletFromScriptValue(const QScriptValue& value, TabletProxy* &out); - /**jsdoc * @class TabletButtonProxy * @property uuid {QUuid} READ_ONLY: uniquely identifies this button @@ -263,6 +265,7 @@ class TabletButtonProxy : public QObject { Q_PROPERTY(QUuid uuid READ getUuid) public: TabletButtonProxy(const QVariantMap& properties); + ~TabletButtonProxy(); void setQmlButton(QQuickItem* qmlButton); void setToolbarButtonProxy(QObject* toolbarButtonProxy); @@ -274,7 +277,7 @@ public: * @function TabletButtonProxy#getProperties * @returns {ButtonProperties} */ - Q_INVOKABLE QVariantMap getProperties() const; + Q_INVOKABLE QVariantMap getProperties(); /**jsdoc * Replace the values of some of this button's properties @@ -297,12 +300,13 @@ signals: protected: QUuid _uuid; int _stableOrder; - mutable std::mutex _buttonMutex; QQuickItem* _qmlButton { nullptr }; QObject* _toolbarButtonProxy { nullptr }; QVariantMap _properties; }; +Q_DECLARE_METATYPE(TabletButtonProxy*); + /**jsdoc * @typedef TabletButtonProxy.ButtonProperties * @property {string} icon - url to button icon. (50 x 50) diff --git a/libraries/ui/src/ui/ToolbarScriptingInterface.cpp b/libraries/ui/src/ui/ToolbarScriptingInterface.cpp new file mode 100644 index 0000000000..330c652cdc --- /dev/null +++ b/libraries/ui/src/ui/ToolbarScriptingInterface.cpp @@ -0,0 +1,124 @@ +// +// Created by Bradley Austin Davis on 2016-06-16 +// Copyright 2013-2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "ToolbarScriptingInterface.h" + +#include +#include +#include +#include +#include "../OffscreenUi.h" + +QScriptValue toolbarToScriptValue(QScriptEngine* engine, ToolbarProxy* const &in) { + if (!in) { + return engine->undefinedValue(); + } + return engine->newQObject(in, QScriptEngine::QtOwnership, QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects); +} + +void toolbarFromScriptValue(const QScriptValue& value, ToolbarProxy* &out) { + out = qobject_cast(value.toQObject()); +} + +QScriptValue toolbarButtonToScriptValue(QScriptEngine* engine, ToolbarButtonProxy* const &in) { + if (!in) { + return engine->undefinedValue(); + } + return engine->newQObject(in, QScriptEngine::QtOwnership, QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects); +} + +void toolbarButtonFromScriptValue(const QScriptValue& value, ToolbarButtonProxy* &out) { + out = qobject_cast(value.toQObject()); +} + + +ToolbarButtonProxy::ToolbarButtonProxy(QObject* qmlObject, QObject* parent) : QmlWrapper(qmlObject, parent) { + Q_ASSERT(QThread::currentThread() == qApp->thread()); + _qmlButton = qobject_cast(qmlObject); + connect(qmlObject, SIGNAL(clicked()), this, SIGNAL(clicked())); +} + +void ToolbarButtonProxy::editProperties(const QVariantMap& properties) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "editProperties", Q_ARG(QVariantMap, properties)); + return; + } + + QVariantMap::const_iterator iter = properties.constBegin(); + while (iter != properties.constEnd()) { + _properties[iter.key()] = iter.value(); + if (_qmlButton) { + // [01/25 14:26:20] [WARNING] [default] QMetaObject::invokeMethod: No such method ToolbarButton_QMLTYPE_195::changeProperty(QVariant,QVariant) + QMetaObject::invokeMethod(_qmlButton, "changeProperty", Qt::AutoConnection, + Q_ARG(QVariant, QVariant(iter.key())), Q_ARG(QVariant, iter.value())); + } + ++iter; + } +} + +ToolbarProxy::ToolbarProxy(QObject* qmlObject, QObject* parent) : QmlWrapper(qmlObject, parent) { + Q_ASSERT(QThread::currentThread() == qApp->thread()); +} + +ToolbarButtonProxy* ToolbarProxy::addButton(const QVariant& properties) { + if (QThread::currentThread() != thread()) { + ToolbarButtonProxy* result = nullptr; + QMetaObject::invokeMethod(this, "addButton", Qt::BlockingQueuedConnection, Q_RETURN_ARG(ToolbarButtonProxy*, result), Q_ARG(QVariant, properties)); + return result; + } + + QVariant resultVar; + bool invokeResult = QMetaObject::invokeMethod(_qmlObject, "addButton", Q_RETURN_ARG(QVariant, resultVar), Q_ARG(QVariant, properties)); + if (!invokeResult) { + return nullptr; + } + + QObject* rawButton = qvariant_cast(resultVar); + if (!rawButton) { + return nullptr; + } + + return new ToolbarButtonProxy(rawButton, this); +} + +void ToolbarProxy::removeButton(const QVariant& name) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "removeButton", Q_ARG(QVariant, name)); + return; + } + + QMetaObject::invokeMethod(_qmlObject, "removeButton", Q_ARG(QVariant, name)); +} + + +ToolbarProxy* ToolbarScriptingInterface::getToolbar(const QString& toolbarId) { + if (QThread::currentThread() != thread()) { + ToolbarProxy* result = nullptr; + QMetaObject::invokeMethod(this, "getToolbar", Qt::BlockingQueuedConnection, Q_RETURN_ARG(ToolbarProxy*, result), Q_ARG(QString, toolbarId)); + return result; + } + + auto offscreenUi = DependencyManager::get(); + auto desktop = offscreenUi->getDesktop(); + Qt::ConnectionType connectionType = Qt::AutoConnection; + if (QThread::currentThread() != desktop->thread()) { + connectionType = Qt::BlockingQueuedConnection; + } + QVariant resultVar; + bool invokeResult = QMetaObject::invokeMethod(desktop, "getToolbar", connectionType, Q_RETURN_ARG(QVariant, resultVar), Q_ARG(QVariant, toolbarId)); + if (!invokeResult) { + return nullptr; + } + + QObject* rawToolbar = qvariant_cast(resultVar); + if (!rawToolbar) { + return nullptr; + } + + return new ToolbarProxy(rawToolbar); +} diff --git a/libraries/ui/src/ui/ToolbarScriptingInterface.h b/libraries/ui/src/ui/ToolbarScriptingInterface.h new file mode 100644 index 0000000000..108cf6bdd5 --- /dev/null +++ b/libraries/ui/src/ui/ToolbarScriptingInterface.h @@ -0,0 +1,56 @@ +// +// Created by Bradley Austin Davis on 2016-06-16 +// Copyright 2013-2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_ToolbarScriptingInterface_h +#define hifi_ToolbarScriptingInterface_h + +#include + +#include +#include + +#include +#include "QmlWrapper.h" + +class QQuickItem; + +class ToolbarButtonProxy : public QmlWrapper { + Q_OBJECT + +public: + ToolbarButtonProxy(QObject* qmlObject, QObject* parent = nullptr); + Q_INVOKABLE void editProperties(const QVariantMap& properties); + +signals: + void clicked(); + +protected: + QQuickItem* _qmlButton { nullptr }; + QVariantMap _properties; +}; + +Q_DECLARE_METATYPE(ToolbarButtonProxy*); + +class ToolbarProxy : public QmlWrapper { + Q_OBJECT +public: + ToolbarProxy(QObject* qmlObject, QObject* parent = nullptr); + Q_INVOKABLE ToolbarButtonProxy* addButton(const QVariant& properties); + Q_INVOKABLE void removeButton(const QVariant& name); +}; + +Q_DECLARE_METATYPE(ToolbarProxy*); + +class ToolbarScriptingInterface : public QObject, public Dependency { + Q_OBJECT +public: + Q_INVOKABLE ToolbarProxy* getToolbar(const QString& toolbarId); +}; + + +#endif // hifi_ToolbarScriptingInterface_h diff --git a/libraries/networking/src/FileTypeProfile.cpp b/libraries/ui/src/ui/types/FileTypeProfile.cpp similarity index 100% rename from libraries/networking/src/FileTypeProfile.cpp rename to libraries/ui/src/ui/types/FileTypeProfile.cpp diff --git a/libraries/networking/src/FileTypeProfile.h b/libraries/ui/src/ui/types/FileTypeProfile.h similarity index 100% rename from libraries/networking/src/FileTypeProfile.h rename to libraries/ui/src/ui/types/FileTypeProfile.h diff --git a/libraries/networking/src/FileTypeRequestInterceptor.cpp b/libraries/ui/src/ui/types/FileTypeRequestInterceptor.cpp similarity index 100% rename from libraries/networking/src/FileTypeRequestInterceptor.cpp rename to libraries/ui/src/ui/types/FileTypeRequestInterceptor.cpp diff --git a/libraries/networking/src/FileTypeRequestInterceptor.h b/libraries/ui/src/ui/types/FileTypeRequestInterceptor.h similarity index 100% rename from libraries/networking/src/FileTypeRequestInterceptor.h rename to libraries/ui/src/ui/types/FileTypeRequestInterceptor.h diff --git a/libraries/networking/src/HFTabletWebEngineProfile.cpp b/libraries/ui/src/ui/types/HFTabletWebEngineProfile.cpp similarity index 100% rename from libraries/networking/src/HFTabletWebEngineProfile.cpp rename to libraries/ui/src/ui/types/HFTabletWebEngineProfile.cpp diff --git a/libraries/networking/src/HFTabletWebEngineProfile.h b/libraries/ui/src/ui/types/HFTabletWebEngineProfile.h similarity index 100% rename from libraries/networking/src/HFTabletWebEngineProfile.h rename to libraries/ui/src/ui/types/HFTabletWebEngineProfile.h diff --git a/libraries/networking/src/HFTabletWebEngineRequestInterceptor.cpp b/libraries/ui/src/ui/types/HFTabletWebEngineRequestInterceptor.cpp similarity index 100% rename from libraries/networking/src/HFTabletWebEngineRequestInterceptor.cpp rename to libraries/ui/src/ui/types/HFTabletWebEngineRequestInterceptor.cpp diff --git a/libraries/networking/src/HFTabletWebEngineRequestInterceptor.h b/libraries/ui/src/ui/types/HFTabletWebEngineRequestInterceptor.h similarity index 100% rename from libraries/networking/src/HFTabletWebEngineRequestInterceptor.h rename to libraries/ui/src/ui/types/HFTabletWebEngineRequestInterceptor.h diff --git a/libraries/networking/src/HFWebEngineProfile.cpp b/libraries/ui/src/ui/types/HFWebEngineProfile.cpp similarity index 100% rename from libraries/networking/src/HFWebEngineProfile.cpp rename to libraries/ui/src/ui/types/HFWebEngineProfile.cpp diff --git a/libraries/networking/src/HFWebEngineProfile.h b/libraries/ui/src/ui/types/HFWebEngineProfile.h similarity index 100% rename from libraries/networking/src/HFWebEngineProfile.h rename to libraries/ui/src/ui/types/HFWebEngineProfile.h diff --git a/libraries/networking/src/HFWebEngineRequestInterceptor.cpp b/libraries/ui/src/ui/types/HFWebEngineRequestInterceptor.cpp similarity index 100% rename from libraries/networking/src/HFWebEngineRequestInterceptor.cpp rename to libraries/ui/src/ui/types/HFWebEngineRequestInterceptor.cpp diff --git a/libraries/networking/src/HFWebEngineRequestInterceptor.h b/libraries/ui/src/ui/types/HFWebEngineRequestInterceptor.h similarity index 100% rename from libraries/networking/src/HFWebEngineRequestInterceptor.h rename to libraries/ui/src/ui/types/HFWebEngineRequestInterceptor.h diff --git a/libraries/networking/src/RequestFilters.cpp b/libraries/ui/src/ui/types/RequestFilters.cpp similarity index 100% rename from libraries/networking/src/RequestFilters.cpp rename to libraries/ui/src/ui/types/RequestFilters.cpp diff --git a/libraries/networking/src/RequestFilters.h b/libraries/ui/src/ui/types/RequestFilters.h similarity index 100% rename from libraries/networking/src/RequestFilters.h rename to libraries/ui/src/ui/types/RequestFilters.h diff --git a/libraries/script-engine/src/SoundEffect.cpp b/libraries/ui/src/ui/types/SoundEffect.cpp similarity index 97% rename from libraries/script-engine/src/SoundEffect.cpp rename to libraries/ui/src/ui/types/SoundEffect.cpp index bfc0ad2100..e35d009ef6 100644 --- a/libraries/script-engine/src/SoundEffect.cpp +++ b/libraries/ui/src/ui/types/SoundEffect.cpp @@ -41,5 +41,3 @@ void SoundEffect::play(QVariant position) { _injector = AudioInjector::playSound(samples, options); } } - -#include "SoundEffect.moc" diff --git a/libraries/script-engine/src/SoundEffect.h b/libraries/ui/src/ui/types/SoundEffect.h similarity index 100% rename from libraries/script-engine/src/SoundEffect.h rename to libraries/ui/src/ui/types/SoundEffect.h From 20d8c11e28f84c2d2df66d81bd7ac6abe4b94e6d Mon Sep 17 00:00:00 2001 From: samcake Date: Thu, 22 Jun 2017 17:54:16 -0700 Subject: [PATCH 0546/1049] ALmost there, getting eback everything to work with the light and background stages in the scene, not in deferredLighting Effect anymore --- interface/src/Application.cpp | 2 +- interface/src/Util.cpp | 14 +-- interface/src/Util.h | 3 +- interface/src/ui/overlays/Cube3DOverlay.cpp | 4 +- interface/src/ui/overlays/Shape3DOverlay.cpp | 4 +- interface/src/ui/overlays/Sphere3DOverlay.cpp | 4 +- interface/src/ui/overlays/Text3DOverlay.cpp | 2 +- .../src/avatars-renderer/Avatar.cpp | 2 +- .../src/avatars-renderer/SkeletonModel.cpp | 6 +- .../src/avatars-renderer/SkeletonModel.h | 2 +- .../src/RenderableModelEntityItem.cpp | 2 +- .../src/RenderableShapeEntityItem.cpp | 4 +- .../src/RenderableZoneEntityItem.cpp | 4 +- .../render-utils/src/BackgroundStage.cpp | 5 +- .../src/DeferredLightingEffect.cpp | 98 +++++-------------- .../render-utils/src/DeferredLightingEffect.h | 3 +- libraries/render-utils/src/GeometryCache.cpp | 36 +++---- libraries/render-utils/src/GeometryCache.h | 36 +++---- .../render-utils/src/RenderPipelines.cpp | 12 +-- .../render-utils/src/UpdateSceneTask.cpp | 6 +- libraries/render-utils/src/ZoneRenderer.cpp | 20 ++-- libraries/render/src/render/ShapePipeline.cpp | 6 +- libraries/render/src/render/ShapePipeline.h | 4 +- tests/gpu-test/src/TestWindow.cpp | 2 +- tests/render-perf/src/main.cpp | 4 +- 25 files changed, 120 insertions(+), 165 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 690a833c3b..27361d0bd0 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5110,7 +5110,7 @@ namespace render { auto& batch = *args->_batch; DependencyManager::get()->bindSimpleProgram(batch); - renderWorldBox(batch); + renderWorldBox(args, batch); } } } diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 78a503bc71..7822b78244 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -34,7 +34,7 @@ using namespace std; -void renderWorldBox(gpu::Batch& batch) { +void renderWorldBox(RenderArgs* args, gpu::Batch& batch) { auto geometryCache = DependencyManager::get(); // Show center of world @@ -115,7 +115,7 @@ void renderWorldBox(gpu::Batch& batch) { geometryIds[17]); - geometryCache->renderWireCubeInstance(batch, GREY4); + geometryCache->renderWireCubeInstance(args, batch, GREY4); // Draw meter markers along the 3 axis to help with measuring things const float MARKER_DISTANCE = 1.0f; @@ -123,23 +123,23 @@ void renderWorldBox(gpu::Batch& batch) { transform = Transform().setScale(MARKER_RADIUS); batch.setModelTransform(transform); - geometryCache->renderSolidSphereInstance(batch, RED); + geometryCache->renderSolidSphereInstance(args, batch, RED); transform = Transform().setTranslation(glm::vec3(MARKER_DISTANCE, 0.0f, 0.0f)).setScale(MARKER_RADIUS); batch.setModelTransform(transform); - geometryCache->renderSolidSphereInstance(batch, RED); + geometryCache->renderSolidSphereInstance(args, batch, RED); transform = Transform().setTranslation(glm::vec3(0.0f, MARKER_DISTANCE, 0.0f)).setScale(MARKER_RADIUS); batch.setModelTransform(transform); - geometryCache->renderSolidSphereInstance(batch, GREEN); + geometryCache->renderSolidSphereInstance(args, batch, GREEN); transform = Transform().setTranslation(glm::vec3(0.0f, 0.0f, MARKER_DISTANCE)).setScale(MARKER_RADIUS); batch.setModelTransform(transform); - geometryCache->renderSolidSphereInstance(batch, BLUE); + geometryCache->renderSolidSphereInstance(args, batch, BLUE); transform = Transform().setTranslation(glm::vec3(MARKER_DISTANCE, 0.0f, MARKER_DISTANCE)).setScale(MARKER_RADIUS); batch.setModelTransform(transform); - geometryCache->renderSolidSphereInstance(batch, GREY); + geometryCache->renderSolidSphereInstance(args, batch, GREY); } // Do some basic timing tests and report the results diff --git a/interface/src/Util.h b/interface/src/Util.h index b1b4c78bcb..48acb53936 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -16,8 +16,9 @@ #include #include +#include -void renderWorldBox(gpu::Batch& batch); +void renderWorldBox(RenderArgs* args, gpu::Batch& batch); void runTimingTests(); void runUnitTests(); diff --git a/interface/src/ui/overlays/Cube3DOverlay.cpp b/interface/src/ui/overlays/Cube3DOverlay.cpp index 8af4c1d908..707aabc241 100644 --- a/interface/src/ui/overlays/Cube3DOverlay.cpp +++ b/interface/src/ui/overlays/Cube3DOverlay.cpp @@ -73,7 +73,7 @@ void Cube3DOverlay::render(RenderArgs* args) { if (_isSolid) { transform.setScale(dimensions); batch->setModelTransform(transform); - geometryCache->renderSolidCubeInstance(*batch, cubeColor, pipeline); + geometryCache->renderSolidCubeInstance(args, *batch, cubeColor, pipeline); } else { geometryCache->bindSimpleProgram(*batch, false, false, false, true, true); if (getIsDashedLine()) { @@ -109,7 +109,7 @@ void Cube3DOverlay::render(RenderArgs* args) { } else { transform.setScale(dimensions); batch->setModelTransform(transform); - geometryCache->renderWireCubeInstance(*batch, cubeColor, pipeline); + geometryCache->renderWireCubeInstance(args, *batch, cubeColor, pipeline); } } } diff --git a/interface/src/ui/overlays/Shape3DOverlay.cpp b/interface/src/ui/overlays/Shape3DOverlay.cpp index 2556bc84aa..72c57565d4 100644 --- a/interface/src/ui/overlays/Shape3DOverlay.cpp +++ b/interface/src/ui/overlays/Shape3DOverlay.cpp @@ -53,9 +53,9 @@ void Shape3DOverlay::render(RenderArgs* args) { transform.setScale(dimensions); batch->setModelTransform(transform); if (_isSolid) { - geometryCache->renderSolidShapeInstance(*batch, _shape, cubeColor, pipeline); + geometryCache->renderSolidShapeInstance(args, *batch, _shape, cubeColor, pipeline); } else { - geometryCache->renderWireShapeInstance(*batch, _shape, cubeColor, pipeline); + geometryCache->renderWireShapeInstance(args, *batch, _shape, cubeColor, pipeline); } } } diff --git a/interface/src/ui/overlays/Sphere3DOverlay.cpp b/interface/src/ui/overlays/Sphere3DOverlay.cpp index 07c2861f16..67e11cf1d8 100644 --- a/interface/src/ui/overlays/Sphere3DOverlay.cpp +++ b/interface/src/ui/overlays/Sphere3DOverlay.cpp @@ -50,9 +50,9 @@ void Sphere3DOverlay::render(RenderArgs* args) { } if (_isSolid) { - geometryCache->renderSolidSphereInstance(*batch, sphereColor, pipeline); + geometryCache->renderSolidSphereInstance(args, *batch, sphereColor, pipeline); } else { - geometryCache->renderWireSphereInstance(*batch, sphereColor, pipeline); + geometryCache->renderWireSphereInstance(args, *batch, sphereColor, pipeline); } } } diff --git a/interface/src/ui/overlays/Text3DOverlay.cpp b/interface/src/ui/overlays/Text3DOverlay.cpp index ebc28ca86a..ed29bc4e1b 100644 --- a/interface/src/ui/overlays/Text3DOverlay.cpp +++ b/interface/src/ui/overlays/Text3DOverlay.cpp @@ -138,7 +138,7 @@ void Text3DOverlay::render(RenderArgs* args) { _textRenderer->draw(batch, 0, 0, getText(), textColor, glm::vec2(-1.0f), getDrawInFront()); // so before we continue, we must reset the pipeline batch.setPipeline(args->_pipeline->pipeline); - args->_pipeline->prepare(batch); + args->_pipeline->prepare(batch, args); } const render::ShapeKey Text3DOverlay::getShapeKey() { diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index a0a348388e..6cdffff844 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -609,7 +609,7 @@ void Avatar::render(RenderArgs* renderArgs) { if (showCollisionShapes && shouldRenderHead(renderArgs) && _skeletonModel->isRenderable()) { PROFILE_RANGE_BATCH(batch, __FUNCTION__":skeletonBoundingCollisionShapes"); const float BOUNDING_SHAPE_ALPHA = 0.7f; - _skeletonModel->renderBoundingCollisionShapes(*renderArgs->_batch, getUniformScale(), BOUNDING_SHAPE_ALPHA); + _skeletonModel->renderBoundingCollisionShapes(renderArgs, *renderArgs->_batch, getUniformScale(), BOUNDING_SHAPE_ALPHA); } if (showReceiveStats || showNamesAboveHeads) { diff --git a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp index 2a2817e68b..9651951b46 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp @@ -322,20 +322,20 @@ void SkeletonModel::computeBoundingShape() { _boundingCapsuleLocalOffset = invScale * offset; } -void SkeletonModel::renderBoundingCollisionShapes(gpu::Batch& batch, float scale, float alpha) { +void SkeletonModel::renderBoundingCollisionShapes(RenderArgs* args, gpu::Batch& batch, float scale, float alpha) { auto geometryCache = DependencyManager::get(); // draw a blue sphere at the capsule top point glm::vec3 topPoint = _translation + getRotation() * (scale * (_boundingCapsuleLocalOffset + (0.5f * _boundingCapsuleHeight) * Vectors::UNIT_Y)); batch.setModelTransform(Transform().setTranslation(topPoint).postScale(scale * _boundingCapsuleRadius)); - geometryCache->renderSolidSphereInstance(batch, glm::vec4(0.6f, 0.6f, 0.8f, alpha)); + geometryCache->renderSolidSphereInstance(args, batch, glm::vec4(0.6f, 0.6f, 0.8f, alpha)); // draw a yellow sphere at the capsule bottom point glm::vec3 bottomPoint = topPoint - glm::vec3(0.0f, scale * _boundingCapsuleHeight, 0.0f); glm::vec3 axis = topPoint - bottomPoint; batch.setModelTransform(Transform().setTranslation(bottomPoint).postScale(scale * _boundingCapsuleRadius)); - geometryCache->renderSolidSphereInstance(batch, glm::vec4(0.8f, 0.8f, 0.6f, alpha)); + geometryCache->renderSolidSphereInstance(args, batch, glm::vec4(0.8f, 0.8f, 0.6f, alpha)); // draw a green cylinder between the two points glm::vec3 origin(0.0f); diff --git a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h index db87a37477..e48884c581 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h +++ b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.h @@ -96,7 +96,7 @@ public: /// \return whether or not the head was found. glm::vec3 getDefaultEyeModelPosition() const; - void renderBoundingCollisionShapes(gpu::Batch& batch, float scale, float alpha); + void renderBoundingCollisionShapes(RenderArgs* args, gpu::Batch& batch, float scale, float alpha); float getBoundingCapsuleRadius() const { return _boundingCapsuleRadius; } float getBoundingCapsuleHeight() const { return _boundingCapsuleHeight; } const glm::vec3 getBoundingCapsuleOffset() const { return _boundingCapsuleLocalOffset; } diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index f343fdb155..e94a965156 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -380,7 +380,7 @@ void RenderableModelEntityItem::render(RenderArgs* args) { auto shapeTransform = getTransformToCenter(success); if (success) { batch.setModelTransform(shapeTransform); // we want to include the scale as well - DependencyManager::get()->renderWireCubeInstance(batch, greenColor); + DependencyManager::get()->renderWireCubeInstance(args, batch, greenColor); } return; } diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp index 27dd678d91..62ab3377a8 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp @@ -128,9 +128,9 @@ void RenderableShapeEntityItem::render(RenderArgs* args) { auto pipeline = color.a < 1.0f ? geometryCache->getTransparentShapePipeline() : geometryCache->getOpaqueShapePipeline(); if (render::ShapeKey(args->_globalShapeKey).isWireframe()) { - geometryCache->renderWireShapeInstance(batch, MAPPING[_shape], color, pipeline); + geometryCache->renderWireShapeInstance(args, batch, MAPPING[_shape], color, pipeline); } else { - geometryCache->renderSolidShapeInstance(batch, MAPPING[_shape], color, pipeline); + geometryCache->renderSolidShapeInstance(args, batch, MAPPING[_shape], color, pipeline); } } diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index da0aef75aa..bb07454992 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -221,10 +221,10 @@ void RenderableZoneEntityItem::render(RenderArgs* args) { if (getShapeType() == SHAPE_TYPE_SPHERE) { shapeTransform.postScale(SPHERE_ENTITY_SCALE); batch.setModelTransform(shapeTransform); - geometryCache->renderWireSphereInstance(batch, DEFAULT_COLOR); + geometryCache->renderWireSphereInstance(args, batch, DEFAULT_COLOR); } else { batch.setModelTransform(shapeTransform); - geometryCache->renderWireCubeInstance(batch, DEFAULT_COLOR); + geometryCache->renderWireCubeInstance(args, batch, DEFAULT_COLOR); } break; } diff --git a/libraries/render-utils/src/BackgroundStage.cpp b/libraries/render-utils/src/BackgroundStage.cpp index b980887471..c164b584a9 100644 --- a/libraries/render-utils/src/BackgroundStage.cpp +++ b/libraries/render-utils/src/BackgroundStage.cpp @@ -60,7 +60,6 @@ void DrawBackgroundStage::run(const render::RenderContextPointer& renderContext, // Background rendering decision - // auto backgroundStage = DependencyManager::get()->getBackgroundStage(); auto backgroundStage = renderContext->_scene->getStage("BACKGROUND_STAGE"); model::SunSkyStagePointer background; model::SkyboxPointer skybox; @@ -69,9 +68,9 @@ void DrawBackgroundStage::run(const render::RenderContextPointer& renderContext, auto background = backgroundStage->getBackground(backgroundId); if (background) { skybox = background->getSkybox(); - } + } } else { - // skybox = DependencyManager::get()->getDefaultSkybox(); + skybox = backgroundStage->getBackground(0)->getSkybox(); } /* auto backgroundMode = skyStage->getBackgroundMode(); diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index 374487a79d..84c972bab3 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -99,64 +99,23 @@ void DeferredLightingEffect::init() { loadLightProgram(deferred_light_vert, local_lights_shading_frag, true, _localLight, _localLightLocations); loadLightProgram(deferred_light_vert, local_lights_drawOutline_frag, true, _localLightOutline, _localLightOutlineLocations); - - // Light Stage and clusters - /* _lightStage = std::make_shared(); - - // Allocate a global light representing the Global Directional light casting shadow (the sun) and the ambient light - _allocatedLights.push_back(std::make_shared()); - model::LightPointer lp = _allocatedLights[0]; - lp->setType(model::Light::SUN); - lp->setDirection(glm::vec3(-1.0f)); - lp->setColor(glm::vec3(1.0f)); - lp->setIntensity(1.0f); - lp->setType(model::Light::SUN); - lp->setAmbientSpherePreset(gpu::SphericalHarmonics::Preset::OLD_TOWN_SQUARE); - - // Add the global light to the light stage (for later shadow rendering) - _globalLights.push_back(_lightStage->addLight(lp)); - _lightStage->addShadow(_globalLights[0]); - - - _backgroundStage = std::make_shared(); - - auto textureCache = DependencyManager::get(); - - { - PROFILE_RANGE(render, "Process Default Skybox"); - auto textureCache = DependencyManager::get(); - - auto skyboxUrl = PathUtils::resourcesPath().toStdString() + "images/Default-Sky-9-cubemap.ktx"; - - _defaultSkyboxTexture = gpu::Texture::unserialize(skyboxUrl); - _defaultSkyboxAmbientTexture = _defaultSkyboxTexture; - - _defaultSkybox->setCubemap(_defaultSkyboxTexture); - } - - - lp->setAmbientIntensity(0.5f); - lp->setAmbientMap(_defaultSkyboxAmbientTexture); - auto irradianceSH = _defaultSkyboxAmbientTexture->getIrradiance(); - if (irradianceSH) { - lp->setAmbientSphere((*irradianceSH)); - }*/ } -void DeferredLightingEffect::setupKeyLightBatch(gpu::Batch& batch, int lightBufferUnit, int ambientBufferUnit, int skyboxCubemapUnit) { +void DeferredLightingEffect::setupKeyLightBatch(const RenderArgs* args, gpu::Batch& batch, int lightBufferUnit, int ambientBufferUnit, int skyboxCubemapUnit) { PerformanceTimer perfTimer("DLE->setupBatch()"); model::LightPointer keySunLight; - if (_lightStage && _lightStage->_currentFrame._sunLights.size()) { - keySunLight = _lightStage->getLight(_lightStage->_currentFrame._sunLights.front()); + auto lightStage = args->_scene->getStage("LIGHT_STAGE"); + if (lightStage && lightStage->_currentFrame._sunLights.size()) { + keySunLight = lightStage->getLight(lightStage->_currentFrame._sunLights.front()); } else { - keySunLight = _allocatedLights[_globalLights.front()]; + keySunLight = lightStage->getLight(0); } model::LightPointer keyAmbiLight; - if (_lightStage && _lightStage->_currentFrame._ambientLights.size()) { - keyAmbiLight = _lightStage->getLight(_lightStage->_currentFrame._ambientLights.front()); + if (lightStage && lightStage->_currentFrame._ambientLights.size()) { + keyAmbiLight = lightStage->getLight(lightStage->_currentFrame._ambientLights.front()); } else { - keyAmbiLight = _allocatedLights[_globalLights.front()]; + keyAmbiLight = lightStage->getLight(0); } if (lightBufferUnit >= 0) { @@ -266,21 +225,6 @@ static void loadLightProgram(const char* vertSource, const char* fragSource, boo } -void DeferredLightingEffect::setGlobalLight(const model::LightPointer& light) { - /* auto globalLight = _allocatedLights.front(); - globalLight->setDirection(light->getDirection()); - globalLight->setColor(light->getColor()); - globalLight->setIntensity(light->getIntensity()); - globalLight->setAmbientIntensity(light->getAmbientIntensity()); - globalLight->setAmbientSphere(light->getAmbientSphere()); - globalLight->setAmbientMap(light->getAmbientMap());*/ -} -/* -const model::LightPointer& DeferredLightingEffect::getGlobalLight() const { - return _allocatedLights.front(); -} -*/ - #include model::MeshPointer DeferredLightingEffect::getPointLightMesh() { @@ -483,8 +427,6 @@ void PrepareDeferred::run(const RenderContextPointer& renderContext, const Input // Prepare a fresh Light Frame - //auto deferredLightingEffect = DependencyManager::get(); - //deferredLightingEffect->getLightStage()->_currentFrame.clear(); auto lightStage = renderContext->_scene->getStage("LIGHT_STAGE"); lightStage->_currentFrame.clear(); } @@ -550,9 +492,7 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext, // Global directional light and ambient pass auto lightStage = renderContext->_scene->getStage("LIGHT_STAGE"); - // assert(deferredLightingEffect->getLightStage()->getNumLights() > 0); assert(lightStage->getNumLights() > 0); - // auto lightAndShadow = deferredLightingEffect->getLightStage()->getLightAndShadow(0); auto lightAndShadow = lightStage->getLightAndShadow(0); const auto& globalShadow = lightAndShadow.second; @@ -563,7 +503,8 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext, auto& program = deferredLightingEffect->_directionalSkyboxLight; LightLocationsPtr locations = deferredLightingEffect->_directionalSkyboxLightLocations; - const auto& keyLight = deferredLightingEffect->_allocatedLights[deferredLightingEffect->_globalLights.front()]; + + auto keyLight = lightStage->getLight(0); // Setup the global directional pass pipeline { @@ -602,7 +543,7 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext, batch._glUniform4fv(locations->texcoordFrameTransform, 1, reinterpret_cast< const float* >(&textureFrameTransform)); // Setup the global lighting - deferredLightingEffect->setupKeyLightBatch(batch, locations->lightBufferUnit, locations->ambientBufferUnit, SKYBOX_MAP_UNIT); + deferredLightingEffect->setupKeyLightBatch(args, batch, locations->lightBufferUnit, locations->ambientBufferUnit, SKYBOX_MAP_UNIT); batch.draw(gpu::TRIANGLE_STRIP, 4); @@ -759,7 +700,7 @@ void RenderDeferred::run(const RenderContextPointer& renderContext, const Inputs void DefaultLightingSetup::run(const RenderContextPointer& renderContext) { - if (!_defaultLight) { + if (!_defaultLight || !_defaultBackground) { if (!_defaultSkyboxTexture) { auto textureCache = DependencyManager::get(); { @@ -779,7 +720,7 @@ void DefaultLightingSetup::run(const RenderContextPointer& renderContext) { if (lightStage) { // Allocate a default global light directional and ambient - model::LightPointer lp = std::make_shared(); + auto lp = std::make_shared(); lp->setType(model::Light::SUN); lp->setDirection(glm::vec3(-1.0f)); lp->setColor(glm::vec3(1.0f)); @@ -801,6 +742,19 @@ void DefaultLightingSetup::run(const RenderContextPointer& renderContext) { auto defaultLightID = lightStage->addLight(lp); lightStage->addShadow(defaultLightID); } + + auto backgroundStage = renderContext->_scene->getStage("BACKGROUND_STAGE"); + if (backgroundStage) { + + auto background = std::make_shared(); + background->setSkybox(_defaultSkybox); + + // capture deault background + _defaultBackground = background; + + // Add the global light to the light stage (for later shadow rendering) + auto defaultBackgroundID = backgroundStage->addBackground(_defaultBackground); + } } } diff --git a/libraries/render-utils/src/DeferredLightingEffect.h b/libraries/render-utils/src/DeferredLightingEffect.h index 0e1b365149..fcbb8acf25 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.h +++ b/libraries/render-utils/src/DeferredLightingEffect.h @@ -47,7 +47,7 @@ class DeferredLightingEffect : public Dependency { public: void init(); - void setupKeyLightBatch(gpu::Batch& batch, int lightBufferUnit, int ambientBufferUnit, int skyboxCubemapUnit); + void setupKeyLightBatch(const RenderArgs* args, gpu::Batch& batch, int lightBufferUnit, int ambientBufferUnit, int skyboxCubemapUnit); void unsetKeyLightBatch(gpu::Batch& batch, int lightBufferUnit, int ambientBufferUnit, int skyboxCubemapUnit); // update global lighting @@ -203,6 +203,7 @@ public: protected: model::LightPointer _defaultLight; + model::SunSkyStagePointer _defaultBackground; model::SkyboxPointer _defaultSkybox { new ProceduralSkybox() }; gpu::TexturePointer _defaultSkyboxTexture; gpu::TexturePointer _defaultSkyboxAmbientTexture; diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index dcf90012c1..49b844efb0 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -455,7 +455,7 @@ _nextID(0) { buildShapes(); GeometryCache::_simpleOpaquePipeline = std::make_shared(getSimplePipeline(false, false, true, false), nullptr, - [](const render::ShapePipeline&, gpu::Batch& batch) { + [](const render::ShapePipeline&, gpu::Batch& batch, RenderArgs* args) { // Set the defaults needed for a simple program batch.setResourceTexture(render::ShapePipeline::Slot::MAP::ALBEDO, DependencyManager::get()->getWhiteTexture()); @@ -463,7 +463,7 @@ _nextID(0) { ); GeometryCache::_simpleTransparentPipeline = std::make_shared(getSimplePipeline(false, true, true, false), nullptr, - [](const render::ShapePipeline&, gpu::Batch& batch) { + [](const render::ShapePipeline&, gpu::Batch& batch, RenderArgs* args) { // Set the defaults needed for a simple program batch.setResourceTexture(render::ShapePipeline::Slot::MAP::ALBEDO, DependencyManager::get()->getWhiteTexture()); @@ -471,7 +471,7 @@ _nextID(0) { ); GeometryCache::_simpleWirePipeline = std::make_shared(getSimplePipeline(false, false, true, true), nullptr, - [](const render::ShapePipeline&, gpu::Batch& batch) {}); + [](const render::ShapePipeline&, gpu::Batch& batch, RenderArgs* args) {}); } GeometryCache::~GeometryCache() { @@ -1938,7 +1938,7 @@ uint32_t toCompactColor(const glm::vec4& color) { static const size_t INSTANCE_COLOR_BUFFER = 0; -void renderInstances(gpu::Batch& batch, const glm::vec4& color, bool isWire, +void renderInstances(RenderArgs* args, gpu::Batch& batch, const glm::vec4& color, bool isWire, const render::ShapePipelinePointer& pipeline, GeometryCache::Shape shape) { // Add pipeline to name std::string instanceName = (isWire ? "wire_shapes_" : "solid_shapes_") + std::to_string(shape) + "_" + std::to_string(std::hash()(pipeline)); @@ -1951,9 +1951,9 @@ void renderInstances(gpu::Batch& batch, const glm::vec4& color, bool isWire, } // Add call to named buffer - batch.setupNamedCalls(instanceName, [isWire, pipeline, shape](gpu::Batch& batch, gpu::Batch::NamedBatchData& data) { + batch.setupNamedCalls(instanceName, [args, isWire, pipeline, shape](gpu::Batch& batch, gpu::Batch::NamedBatchData& data) { batch.setPipeline(pipeline->pipeline); - pipeline->prepare(batch); + pipeline->prepare(batch, args); if (isWire) { DependencyManager::get()->renderWireShapeInstances(batch, shape, data.count(), data.buffers[INSTANCE_COLOR_BUFFER]); @@ -1963,28 +1963,28 @@ void renderInstances(gpu::Batch& batch, const glm::vec4& color, bool isWire, }); } -void GeometryCache::renderSolidShapeInstance(gpu::Batch& batch, GeometryCache::Shape shape, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { - renderInstances(batch, color, false, pipeline, shape); +void GeometryCache::renderSolidShapeInstance(RenderArgs* args, gpu::Batch& batch, GeometryCache::Shape shape, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { + renderInstances(args, batch, color, false, pipeline, shape); } -void GeometryCache::renderWireShapeInstance(gpu::Batch& batch, GeometryCache::Shape shape, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { - renderInstances(batch, color, true, pipeline, shape); +void GeometryCache::renderWireShapeInstance(RenderArgs* args, gpu::Batch& batch, GeometryCache::Shape shape, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { + renderInstances(args, batch, color, true, pipeline, shape); } -void GeometryCache::renderSolidSphereInstance(gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { - renderInstances(batch, color, false, pipeline, GeometryCache::Sphere); +void GeometryCache::renderSolidSphereInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { + renderInstances(args, batch, color, false, pipeline, GeometryCache::Sphere); } -void GeometryCache::renderWireSphereInstance(gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { - renderInstances(batch, color, true, pipeline, GeometryCache::Sphere); +void GeometryCache::renderWireSphereInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { + renderInstances(args, batch, color, true, pipeline, GeometryCache::Sphere); } // Enable this in a debug build to cause 'box' entities to iterate through all the // available shape types, both solid and wireframes //#define DEBUG_SHAPES -void GeometryCache::renderSolidCubeInstance(gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { +void GeometryCache::renderSolidCubeInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { #ifdef DEBUG_SHAPES static auto startTime = usecTimestampNow(); renderInstances(INSTANCE_NAME, batch, color, pipeline, [](gpu::Batch& batch, gpu::Batch::NamedBatchData& data) { @@ -2018,11 +2018,11 @@ void GeometryCache::renderSolidCubeInstance(gpu::Batch& batch, const glm::vec4& } }); #else - renderInstances(batch, color, false, pipeline, GeometryCache::Cube); + renderInstances(args, batch, color, false, pipeline, GeometryCache::Cube); #endif } -void GeometryCache::renderWireCubeInstance(gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { +void GeometryCache::renderWireCubeInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline) { static const std::string INSTANCE_NAME = __FUNCTION__; - renderInstances(batch, color, true, pipeline, GeometryCache::Cube); + renderInstances(args, batch, color, true, pipeline, GeometryCache::Cube); } diff --git a/libraries/render-utils/src/GeometryCache.h b/libraries/render-utils/src/GeometryCache.h index 9853269280..fa558a1151 100644 --- a/libraries/render-utils/src/GeometryCache.h +++ b/libraries/render-utils/src/GeometryCache.h @@ -172,46 +172,46 @@ public: void renderShapeInstances(gpu::Batch& batch, Shape shape, size_t count, gpu::BufferPointer& colorBuffer); void renderWireShapeInstances(gpu::Batch& batch, Shape shape, size_t count, gpu::BufferPointer& colorBuffer); - void renderSolidShapeInstance(gpu::Batch& batch, Shape shape, const glm::vec4& color = glm::vec4(1), + void renderSolidShapeInstance(RenderArgs* args, gpu::Batch& batch, Shape shape, const glm::vec4& color = glm::vec4(1), const render::ShapePipelinePointer& pipeline = _simpleOpaquePipeline); - void renderSolidShapeInstance(gpu::Batch& batch, Shape shape, const glm::vec3& color, + void renderSolidShapeInstance(RenderArgs* args, gpu::Batch& batch, Shape shape, const glm::vec3& color, const render::ShapePipelinePointer& pipeline = _simpleOpaquePipeline) { - renderSolidShapeInstance(batch, shape, glm::vec4(color, 1.0f), pipeline); + renderSolidShapeInstance(args, batch, shape, glm::vec4(color, 1.0f), pipeline); } - void renderWireShapeInstance(gpu::Batch& batch, Shape shape, const glm::vec4& color = glm::vec4(1), + void renderWireShapeInstance(RenderArgs* args, gpu::Batch& batch, Shape shape, const glm::vec4& color = glm::vec4(1), const render::ShapePipelinePointer& pipeline = _simpleOpaquePipeline); - void renderWireShapeInstance(gpu::Batch& batch, Shape shape, const glm::vec3& color, + void renderWireShapeInstance(RenderArgs* args, gpu::Batch& batch, Shape shape, const glm::vec3& color, const render::ShapePipelinePointer& pipeline = _simpleOpaquePipeline) { - renderWireShapeInstance(batch, shape, glm::vec4(color, 1.0f), pipeline); + renderWireShapeInstance(args, batch, shape, glm::vec4(color, 1.0f), pipeline); } - void renderSolidSphereInstance(gpu::Batch& batch, const glm::vec4& color, + void renderSolidSphereInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline = _simpleOpaquePipeline); - void renderSolidSphereInstance(gpu::Batch& batch, const glm::vec3& color, + void renderSolidSphereInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec3& color, const render::ShapePipelinePointer& pipeline = _simpleOpaquePipeline) { - renderSolidSphereInstance(batch, glm::vec4(color, 1.0f), pipeline); + renderSolidSphereInstance(args, batch, glm::vec4(color, 1.0f), pipeline); } - void renderWireSphereInstance(gpu::Batch& batch, const glm::vec4& color, + void renderWireSphereInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline = _simpleWirePipeline); - void renderWireSphereInstance(gpu::Batch& batch, const glm::vec3& color, + void renderWireSphereInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec3& color, const render::ShapePipelinePointer& pipeline = _simpleWirePipeline) { - renderWireSphereInstance(batch, glm::vec4(color, 1.0f), pipeline); + renderWireSphereInstance(args, batch, glm::vec4(color, 1.0f), pipeline); } - void renderSolidCubeInstance(gpu::Batch& batch, const glm::vec4& color, + void renderSolidCubeInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline = _simpleOpaquePipeline); - void renderSolidCubeInstance(gpu::Batch& batch, const glm::vec3& color, + void renderSolidCubeInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec3& color, const render::ShapePipelinePointer& pipeline = _simpleOpaquePipeline) { - renderSolidCubeInstance(batch, glm::vec4(color, 1.0f), pipeline); + renderSolidCubeInstance(args, batch, glm::vec4(color, 1.0f), pipeline); } - void renderWireCubeInstance(gpu::Batch& batch, const glm::vec4& color, + void renderWireCubeInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec4& color, const render::ShapePipelinePointer& pipeline = _simpleWirePipeline); - void renderWireCubeInstance(gpu::Batch& batch, const glm::vec3& color, + void renderWireCubeInstance(RenderArgs* args, gpu::Batch& batch, const glm::vec3& color, const render::ShapePipelinePointer& pipeline = _simpleWirePipeline) { - renderWireCubeInstance(batch, glm::vec4(color, 1.0f), pipeline); + renderWireCubeInstance(args, batch, glm::vec4(color, 1.0f), pipeline); } // Dynamic geometry diff --git a/libraries/render-utils/src/RenderPipelines.cpp b/libraries/render-utils/src/RenderPipelines.cpp index 42ed0bdad9..6c3a58b7e5 100644 --- a/libraries/render-utils/src/RenderPipelines.cpp +++ b/libraries/render-utils/src/RenderPipelines.cpp @@ -76,8 +76,8 @@ void initForwardPipelines(ShapePlumber& plumber); void addPlumberPipeline(ShapePlumber& plumber, const ShapeKey& key, const gpu::ShaderPointer& vertex, const gpu::ShaderPointer& pixel); -void batchSetter(const ShapePipeline& pipeline, gpu::Batch& batch); -void lightBatchSetter(const ShapePipeline& pipeline, gpu::Batch& batch); +void batchSetter(const ShapePipeline& pipeline, gpu::Batch& batch, RenderArgs* args); +void lightBatchSetter(const ShapePipeline& pipeline, gpu::Batch& batch, RenderArgs* args); void initOverlay3DPipelines(ShapePlumber& plumber) { auto vertex = gpu::Shader::createVertex(std::string(overlay3D_vert)); @@ -359,7 +359,7 @@ void addPlumberPipeline(ShapePlumber& plumber, } } -void batchSetter(const ShapePipeline& pipeline, gpu::Batch& batch) { +void batchSetter(const ShapePipeline& pipeline, gpu::Batch& batch, RenderArgs* args) { // Set a default albedo map batch.setResourceTexture(render::ShapePipeline::Slot::MAP::ALBEDO, DependencyManager::get()->getWhiteTexture()); @@ -382,13 +382,13 @@ void batchSetter(const ShapePipeline& pipeline, gpu::Batch& batch) { } } -void lightBatchSetter(const ShapePipeline& pipeline, gpu::Batch& batch) { +void lightBatchSetter(const ShapePipeline& pipeline, gpu::Batch& batch, RenderArgs* args) { // Set the batch - batchSetter(pipeline, batch); + batchSetter(pipeline, batch, args); // Set the light if (pipeline.locations->lightBufferUnit >= 0) { - DependencyManager::get()->setupKeyLightBatch(batch, + DependencyManager::get()->setupKeyLightBatch(args, batch, pipeline.locations->lightBufferUnit, pipeline.locations->lightAmbientBufferUnit, pipeline.locations->lightAmbientMapUnit); diff --git a/libraries/render-utils/src/UpdateSceneTask.cpp b/libraries/render-utils/src/UpdateSceneTask.cpp index 1a9beb4bed..2daee5fb5a 100644 --- a/libraries/render-utils/src/UpdateSceneTask.cpp +++ b/libraries/render-utils/src/UpdateSceneTask.cpp @@ -16,11 +16,11 @@ #include "DeferredLightingEffect.h" void UpdateSceneTask::build(JobModel& task, const render::Varying& input, render::Varying& output) { - - task.addJob("PerformSceneTransaction"); - task.addJob("LightStageSetup"); + task.addJob("BackgroundStageSetup"); task.addJob("DefaultLightingSetup"); + + task.addJob("PerformSceneTransaction"); } diff --git a/libraries/render-utils/src/ZoneRenderer.cpp b/libraries/render-utils/src/ZoneRenderer.cpp index e20e7d9ed8..80be123f0f 100644 --- a/libraries/render-utils/src/ZoneRenderer.cpp +++ b/libraries/render-utils/src/ZoneRenderer.cpp @@ -52,14 +52,19 @@ void ZoneRendererTask::build(JobModel& task, const Varying& input, Varying& oupu } void SetupZones::run(const RenderContextPointer& context, const Inputs& inputs) { - - // auto backgroundStage = DependencyManager::get()->getBackgroundStage(); auto backgroundStage = context->_scene->getStage("BACKGROUND_STAGE"); backgroundStage->_currentFrame.clear(); // call render in the correct order first... render::renderItems(context, inputs); + // Finally add the default lights and background: + auto lightStage = context->_scene->getStage("LIGHT_STAGE"); + lightStage->_currentFrame.pushSunLight(0); + lightStage->_currentFrame.pushAmbientLight(0); + + backgroundStage->_currentFrame.pushBackground(0); + } const gpu::PipelinePointer& DebugZoneLighting::getKeyLightPipeline() { @@ -131,7 +136,6 @@ void DebugZoneLighting::run(const render::RenderContextPointer& context, const I auto deferredTransform = inputs; - // auto lightStage = DependencyManager::get()->getLightStage(); auto lightStage = context->_scene->getStage("LIGHT_STAGE"); std::vector keyLightStack; if (lightStage && lightStage->_currentFrame._sunLights.size()) { @@ -139,8 +143,7 @@ void DebugZoneLighting::run(const render::RenderContextPointer& context, const I keyLightStack.push_back(lightStage->getLight(index)); } } - // keyLightStack.push_back(DependencyManager::get()->getGlobalLight()); - keyLightStack.push_back(lightStage->getLight(0)); + // keyLightStack.push_back(lightStage->getLight(0)); std::vector ambientLightStack; if (lightStage && lightStage->_currentFrame._ambientLights.size()) { @@ -148,11 +151,8 @@ void DebugZoneLighting::run(const render::RenderContextPointer& context, const I ambientLightStack.push_back(lightStage->getLight(index)); } } - // ambientLightStack.push_back(DependencyManager::get()->getGlobalLight()); - ambientLightStack.push_back(lightStage->getLight(0)); + // ambientLightStack.push_back(lightStage->getLight(0)); - - // auto backgroundStage = DependencyManager::get()->getBackgroundStage(); auto backgroundStage = context->_scene->getStage("BACKGROUND_STAGE"); std::vector skyboxStack; if (backgroundStage && backgroundStage->_currentFrame._backgrounds.size()) { @@ -163,7 +163,7 @@ void DebugZoneLighting::run(const render::RenderContextPointer& context, const I } } } - // skyboxStack.push_back(DependencyManager::get()->getDefaultSkybox()); + // skyboxStack.push_back(backgroundStage->getBackground(0)->getSkybox()); gpu::doInBatch(args->_context, [=](gpu::Batch& batch) { diff --git a/libraries/render/src/render/ShapePipeline.cpp b/libraries/render/src/render/ShapePipeline.cpp index d51d7f8cb6..79ac5c0990 100644 --- a/libraries/render/src/render/ShapePipeline.cpp +++ b/libraries/render/src/render/ShapePipeline.cpp @@ -17,9 +17,9 @@ using namespace render; -void ShapePipeline::prepare(gpu::Batch& batch) { +void ShapePipeline::prepare(gpu::Batch& batch, RenderArgs* args) { if (batchSetter) { - batchSetter(*this, batch); + batchSetter(*this, batch, args); } } @@ -119,7 +119,7 @@ const ShapePipelinePointer ShapePlumber::pickPipeline(RenderArgs* args, const Ke // Run the pipeline's BatchSetter on the passed in batch if (shapePipeline->batchSetter) { - shapePipeline->batchSetter(*shapePipeline, *batch); + shapePipeline->batchSetter(*shapePipeline, *batch, args); } return shapePipeline; diff --git a/libraries/render/src/render/ShapePipeline.h b/libraries/render/src/render/ShapePipeline.h index 434c909198..1b97baae7c 100644 --- a/libraries/render/src/render/ShapePipeline.h +++ b/libraries/render/src/render/ShapePipeline.h @@ -240,14 +240,14 @@ public: }; using LocationsPointer = std::shared_ptr; - using BatchSetter = std::function; + using BatchSetter = std::function; ShapePipeline(gpu::PipelinePointer pipeline, LocationsPointer locations, BatchSetter batchSetter) : pipeline(pipeline), locations(locations), batchSetter(batchSetter) {} // Normally, a pipeline is accessed thorugh pickPipeline. If it needs to be set manually, // after calling setPipeline this method should be called to prepare the pipeline with default buffers. - void prepare(gpu::Batch& batch); + void prepare(gpu::Batch& batch, RenderArgs* args); gpu::PipelinePointer pipeline; std::shared_ptr locations; diff --git a/tests/gpu-test/src/TestWindow.cpp b/tests/gpu-test/src/TestWindow.cpp index 6436ff1ef4..5b5102701a 100644 --- a/tests/gpu-test/src/TestWindow.cpp +++ b/tests/gpu-test/src/TestWindow.cpp @@ -77,7 +77,7 @@ void TestWindow::initGl() { #ifdef DEFERRED_LIGHTING auto deferredLightingEffect = DependencyManager::get(); deferredLightingEffect->init(); - deferredLightingEffect->setGlobalLight(_light); + // deferredLightingEffect->setGlobalLight(_light); initDeferredPipelines(*_shapePlumber); #endif } diff --git a/tests/render-perf/src/main.cpp b/tests/render-perf/src/main.cpp index 52592cd202..f725e1f09d 100644 --- a/tests/render-perf/src/main.cpp +++ b/tests/render-perf/src/main.cpp @@ -891,7 +891,7 @@ private: // Setup the current Zone Entity lighting { auto stage = DependencyManager::get()->getSkyStage(); - DependencyManager::get()->setGlobalLight(stage->getSunLight()); + // DependencyManager::get()->setGlobalLight(stage->getSunLight()); } { @@ -914,7 +914,7 @@ private: // The pending changes collecting the changes here render::Transaction transaction; // Setup the current Zone Entity lighting - DependencyManager::get()->setGlobalLight(_sunSkyStage.getSunLight()); + // DependencyManager::get()->setGlobalLight(_sunSkyStage.getSunLight()); { PerformanceTimer perfTimer("SceneProcessTransaction"); _main3DScene->enqueueTransaction(transaction); From c24e254257deee74bb7e0da65c2eeff367b2e1d9 Mon Sep 17 00:00:00 2001 From: samcake Date: Thu, 22 Jun 2017 18:10:20 -0700 Subject: [PATCH 0547/1049] Add support for profiling from scripts --- libraries/script-engine/src/ScriptEngine.cpp | 17 +++++++++++++++-- libraries/script-engine/src/ScriptEngine.h | 3 +++ .../system/controllers/handControllerGrab.js | 2 ++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index d14df662e2..fd61c41583 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1284,8 +1284,8 @@ void ScriptEngine::timerFired() { // call the associated JS function, if it exists if (timerData.function.isValid()) { - //PROFILE_RANGE(script, __FUNCTION__); - PROFILE_RANGE(script, timerData.function.toString().toStdString().c_str()); + PROFILE_RANGE(script, __FUNCTION__); + // PROFILE_RANGE(script, timerData.function.toString().toStdString().c_str()); auto preTimer = p_high_resolution_clock::now(); callWithEnvironment(timerData.definingEntityIdentifier, timerData.definingSandboxURL, timerData.function, timerData.function, QScriptValueList()); auto postTimer = p_high_resolution_clock::now(); @@ -1396,6 +1396,19 @@ void ScriptEngine::print(const QString& message) { emit printedMessage(message, getFilename()); } + +void ScriptEngine::beginProfileRange(const QString& label) const { + if (trace_script().isDebugEnabled()) { + tracing::traceEvent(trace_script(), label.toStdString().c_str(), tracing::DurationBegin); + } +} + +void ScriptEngine::endProfileRange(const QString& label) const { + if (trace_script().isDebugEnabled()) { + tracing::traceEvent(trace_script(), label.toStdString().c_str(), tracing::DurationEnd); + } +} + // Script.require.resolve -- like resolvePath, but performs more validation and throws exceptions on invalid module identifiers (for consistency with Node.js) QString ScriptEngine::_requireResolve(const QString& moduleId, const QString& relativeTo) { if (!IS_THREADSAFE_INVOCATION(thread(), __FUNCTION__)) { diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index 9da8603814..7c473a305b 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -43,6 +43,7 @@ #include "Vec3.h" #include "ConsoleScriptingInterface.h" #include "SettingHandle.h" +#include "Profile.h" class QScriptEngineDebugger; @@ -182,6 +183,8 @@ public: Q_INVOKABLE void print(const QString& message); Q_INVOKABLE QUrl resolvePath(const QString& path) const; Q_INVOKABLE QUrl resourcesPath() const; + Q_INVOKABLE void beginProfileRange(const QString& label) const; + Q_INVOKABLE void endProfileRange(const QString& label) const; // Entity Script Related methods Q_INVOKABLE bool isEntityScriptRunning(const EntityItemID& entityID) { diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 04921fe14d..8631a84fcf 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -1173,6 +1173,7 @@ function MyController(hand) { }; this.update = function(deltaTime, timestamp) { + Script.beginProfileRange("handControllerGrab:MyController:update") this.updateSmoothedTrigger(); this.maybeScaleMyAvatar(); @@ -1209,6 +1210,7 @@ function MyController(hand) { } else { print("WARNING: could not find state " + this.state + " in state machine"); } + Script.endProfileRange("handControllerGrab:MyController:update") }; this.callEntityMethodOnGrabbed = function(entityMethodName) { From d50c44815167216ba99ea9743c4bafe48893e4af Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 22 Jun 2017 19:15:58 -0700 Subject: [PATCH 0548/1049] Fix heap corruption coming out of running scripts dialog --- .../qml/hifi/dialogs/RunningScripts.qml | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/RunningScripts.qml b/interface/resources/qml/hifi/dialogs/RunningScripts.qml index b8ba66b73f..da9ffdb07e 100644 --- a/interface/resources/qml/hifi/dialogs/RunningScripts.qml +++ b/interface/resources/qml/hifi/dialogs/RunningScripts.qml @@ -39,10 +39,26 @@ ScrollingWindow { property alias x: root.x property alias y: root.y } + + Timer { + id: refreshTimer + interval: 100 + repeat: false + running: false + onTriggered: updateRunningScripts(); + } + + Component { + id: listModelBuilder + ListModel { } + } Connections { target: ScriptDiscoveryService - onScriptCountChanged: updateRunningScripts(); + onScriptCountChanged: { + runningScriptsModel = listModelBuilder.createObject(root); + refreshTimer.restart(); + } } Component.onCompleted: { @@ -65,10 +81,16 @@ ScrollingWindow { b = simplify(b.path); return a < b ? -1 : a > b ? 1 : 0; }); - runningScriptsModel.clear() + // Calling `runningScriptsModel.clear()` here instead of creating a new object + // triggers some kind of weird heap corruption deep inside Qt. So instead of + // modifying the model in place, possibly triggering behaviors in the table + // instead we create a new `ListModel`, populate it and update the + // existing model atomically. + var newRunningScriptsModel = listModelBuilder.createObject(root); for (var i = 0; i < runningScripts.length; ++i) { - runningScriptsModel.append(runningScripts[i]); + newRunningScriptsModel.append(runningScripts[i]); } + runningScriptsModel = newRunningScriptsModel; } function loadScript(script) { From b26f5c5811f6e285ad15120bc132d6e2f1fba86c Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 23 Jun 2017 16:15:40 +1200 Subject: [PATCH 0549/1049] Clear finger joints when finger poses no longer being updated --- interface/src/Application.cpp | 29 ++++++++++++++++-------- interface/src/avatar/MySkeletonModel.cpp | 23 ++++++++----------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ace38fcc1e..38ebfe609f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4562,19 +4562,28 @@ void Application::update(float deltaTime) { auto avatarToSensorMatrix = worldToSensorMatrix * myAvatarMatrix; myAvatar->setHandControllerPosesInSensorFrame(leftHandPose.transform(avatarToSensorMatrix), rightHandPose.transform(avatarToSensorMatrix)); + // If have previously done finger poses or there are new valid finger poses, update finger pose values. This so that if + // fingers are not being controlled, finger joints are not updated in MySkeletonModel. + // Assumption: Finger poses are either all present and valid or not present at all; thus can test just one joint. MyAvatar::FingerPosesMap leftHandFingerPoses; - for (int i = (int)controller::Action::LEFT_HAND_THUMB1; i <= (int)controller::Action::LEFT_HAND_PINKY4; i++) { - leftHandFingerPoses[i] = { - userInputMapper->getPoseState((controller::Action)i).transform(avatarToSensorMatrix), - userInputMapper->getActionName((controller::Action)i) - }; + if (myAvatar->getLeftHandFingerControllerPosesInSensorFrame().size() > 0 + || userInputMapper->getPoseState(controller::Action::LEFT_HAND_THUMB1).isValid()) { + for (int i = (int)controller::Action::LEFT_HAND_THUMB1; i <= (int)controller::Action::LEFT_HAND_PINKY4; i++) { + leftHandFingerPoses[i] = { + userInputMapper->getPoseState((controller::Action)i).transform(avatarToSensorMatrix), + userInputMapper->getActionName((controller::Action)i) + }; + } } MyAvatar::FingerPosesMap rightHandFingerPoses; - for (int i = (int)controller::Action::RIGHT_HAND_THUMB1; i <= (int)controller::Action::RIGHT_HAND_PINKY4; i++) { - rightHandFingerPoses[i] = { - userInputMapper->getPoseState((controller::Action)i).transform(avatarToSensorMatrix), - userInputMapper->getActionName((controller::Action)i) - }; + if (myAvatar->getRightHandFingerControllerPosesInSensorFrame().size() > 0 + || userInputMapper->getPoseState(controller::Action::RIGHT_HAND_THUMB1).isValid()) { + for (int i = (int)controller::Action::RIGHT_HAND_THUMB1; i <= (int)controller::Action::RIGHT_HAND_PINKY4; i++) { + rightHandFingerPoses[i] = { + userInputMapper->getPoseState((controller::Action)i).transform(avatarToSensorMatrix), + userInputMapper->getActionName((controller::Action)i) + }; + } } myAvatar->setFingerControllerPosesInSensorFrame(leftHandFingerPoses, rightHandFingerPoses); diff --git a/interface/src/avatar/MySkeletonModel.cpp b/interface/src/avatar/MySkeletonModel.cpp index 54973dc5c5..ee292725e0 100644 --- a/interface/src/avatar/MySkeletonModel.cpp +++ b/interface/src/avatar/MySkeletonModel.cpp @@ -172,18 +172,13 @@ void MySkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) { _rig.updateFromEyeParameters(eyeParams); - - if (leftHandPose.isValid()) { - updateFingers(myAvatar->getLeftHandFingerControllerPosesInSensorFrame()); - } - if (rightHandPose.isValid()) { - updateFingers(myAvatar->getRightHandFingerControllerPosesInSensorFrame()); - } + updateFingers(myAvatar->getLeftHandFingerControllerPosesInSensorFrame()); + updateFingers(myAvatar->getRightHandFingerControllerPosesInSensorFrame()); } void MySkeletonModel::updateFingers(const MyAvatar::FingerPosesMap& fingerPoses) { - // Assumes that finger poses are kept in the poses map in order. + // Assumes that finger poses are kept in order in the poses map. if (fingerPoses.size() == 0) { return; @@ -194,21 +189,23 @@ void MySkeletonModel::updateFingers(const MyAvatar::FingerPosesMap& fingerPoses) bool isLeftHand = posesMapItr->first < (int)controller::Action::RIGHT_HAND_THUMB1; MyAvatar* myAvatar = static_cast(_owningAvatar); - glm::quat handJointRotation = isLeftHand - ? myAvatar->getLeftHandControllerPoseInSensorFrame().getRotation() - : myAvatar->getRightHandControllerPoseInSensorFrame().getRotation(); + auto handPose = isLeftHand + ? myAvatar->getLeftHandControllerPoseInSensorFrame() + : myAvatar->getRightHandControllerPoseInSensorFrame(); + auto handJointRotation = handPose.getRotation(); + bool isHandValid = handPose.isValid(); bool isFingerValid = false; glm::quat previousJointRotation; while (posesMapItr != fingerPoses.end()) { auto jointName = posesMapItr->second.second; - if (jointName.right(1) == "1") { + if (isHandValid && jointName.right(1) == "1") { isFingerValid = posesMapItr->second.first.isValid(); previousJointRotation = handJointRotation; } - if (isFingerValid) { + if (isHandValid && isFingerValid) { auto thisJointRotation = posesMapItr->second.first.getRotation(); const float CONTROLLER_PRIORITY = 2.0f; _rig.setJointRotation(_rig.indexOfJoint(jointName), true, glm::inverse(previousJointRotation) * thisJointRotation, From e1dcf01706109a6197b4cbee661690871be24772 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 23 Jun 2017 17:33:02 +1200 Subject: [PATCH 0550/1049] Better settings text --- plugins/hifiLeapMotion/src/LeapMotionPlugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/hifiLeapMotion/src/LeapMotionPlugin.cpp b/plugins/hifiLeapMotion/src/LeapMotionPlugin.cpp index bc9ff5745c..2139da6ce6 100644 --- a/plugins/hifiLeapMotion/src/LeapMotionPlugin.cpp +++ b/plugins/hifiLeapMotion/src/LeapMotionPlugin.cpp @@ -349,7 +349,7 @@ void LeapMotionPlugin::init() { saveSettings(); applyDesktopHeightOffset(); }; - auto preference = new SpinnerPreference(LEAPMOTION_PLUGIN, "Desktop height offset", getter, setter); + auto preference = new SpinnerPreference(LEAPMOTION_PLUGIN, "Desktop height for horizontal forearms", getter, setter); float MIN_VALUE = 0.0f; float MAX_VALUE = 1.0f; float DECIMALS = 2.0f; From 9f48a139cc695ccb3bac784e38fec586be0abda8 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 23 Jun 2017 18:37:48 +1200 Subject: [PATCH 0551/1049] Fix crash when enable Leap Motion --- plugins/hifiLeapMotion/src/LeapMotionPlugin.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/plugins/hifiLeapMotion/src/LeapMotionPlugin.cpp b/plugins/hifiLeapMotion/src/LeapMotionPlugin.cpp index 2139da6ce6..174dd02426 100644 --- a/plugins/hifiLeapMotion/src/LeapMotionPlugin.cpp +++ b/plugins/hifiLeapMotion/src/LeapMotionPlugin.cpp @@ -365,20 +365,14 @@ void LeapMotionPlugin::init() { bool LeapMotionPlugin::activate() { InputPlugin::activate(); - if (_enabled) { - // Nothing required to be done to start up Leap Motion. + // Nothing required to be done to start up Leap Motion library. - auto userInputMapper = DependencyManager::get(); - userInputMapper->registerDevice(_inputDevice); + _joints.resize(LeapMotionJointIndex::Size, { glm::vec3(), glm::quat() }); - if (_joints.size() != LeapMotionJointIndex::Size) { - _joints.resize(LeapMotionJointIndex::Size, { glm::vec3(), glm::quat() }); - } + auto userInputMapper = DependencyManager::get(); + userInputMapper->registerDevice(_inputDevice); - return true; - } - - return false; + return true; } void LeapMotionPlugin::deactivate() { From a82cc0ec09612035abd906c8de263cdbec94288c Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Fri, 23 Jun 2017 09:35:48 -0400 Subject: [PATCH 0552/1049] retab --- interface/src/scripting/AudioDevices.cpp | 70 ++++++++++++------------ interface/src/scripting/AudioDevices.h | 2 +- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index 4e88232ce1..b0ea8226e8 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -27,11 +27,11 @@ static Setting::Handle hmdInputDeviceSetting { QStringList { Audio::AUD static Setting::Handle hmdOutputDeviceSetting { QStringList { Audio::AUDIO, Audio::HMD, "OUTPUT" }}; Setting::Handle& getSetting(bool contextIsHMD, QAudio::Mode mode) { - if (mode == QAudio::AudioInput) { - return contextIsHMD ? hmdInputDeviceSetting : desktopInputDeviceSetting; - } else { // if (mode == QAudio::AudioOutput) - return contextIsHMD ? hmdOutputDeviceSetting : desktopOutputDeviceSetting; - } + if (mode == QAudio::AudioInput) { + return contextIsHMD ? hmdInputDeviceSetting : desktopInputDeviceSetting; + } else { // if (mode == QAudio::AudioOutput) + return contextIsHMD ? hmdOutputDeviceSetting : desktopOutputDeviceSetting; + } } QHash AudioDeviceList::_roles { @@ -55,38 +55,38 @@ QVariant AudioDeviceList::data(const QModelIndex& index, int role) const { } bool AudioDeviceList::setData(const QModelIndex& index, const QVariant& value, int role) { - if (!index.isValid() || index.row() >= _devices.size() || role != Qt::CheckStateRole) { - return false; - } + if (!index.isValid() || index.row() >= _devices.size() || role != Qt::CheckStateRole) { + return false; + } - // only allow switching to a new device, not deactivating an in-use device - auto selected = value.toBool(); - if (!selected) { - return false; - } + // only allow switching to a new device, not deactivating an in-use device + auto selected = value.toBool(); + if (!selected) { + return false; + } - return setDevice(index.row(), true); + return setDevice(index.row(), true); } bool AudioDeviceList::setDevice(int row, bool fromUser) { bool success = false; - auto& device = _devices[row]; + auto& device = _devices[row]; - // skip if already selected - if (!device.selected) { - auto client = DependencyManager::get(); - QMetaObject::invokeMethod(client.data(), "switchAudioDevice", Qt::BlockingQueuedConnection, - Q_RETURN_ARG(bool, success), - Q_ARG(QAudio::Mode, _mode), - Q_ARG(const QAudioDeviceInfo&, device.info)); + // skip if already selected + if (!device.selected) { + auto client = DependencyManager::get(); + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, success), + Q_ARG(QAudio::Mode, _mode), + Q_ARG(const QAudioDeviceInfo&, device.info)); - if (success) { - device.selected = true; - if (fromUser) { - emit deviceSelected(device.info, _selectedDevice); - } - emit deviceChanged(device.info); - } + if (success) { + device.selected = true; + if (fromUser) { + emit deviceSelected(device.info, _selectedDevice); + } + emit deviceChanged(device.info); + } } emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, 0)); @@ -105,7 +105,7 @@ void AudioDeviceList::resetDevice(bool contextIsHMD, const QString& device) { } } if (i < rowCount()) { - success = setDevice(i, false); + success = setDevice(i, false); } // the selection failed - reset it @@ -193,8 +193,8 @@ AudioDevices::AudioDevices(bool& contextIsHMD) : _contextIsHMD(contextIsHMD) { } void AudioDevices::onContextChanged(const QString& context) { - auto input = getSetting(_contextIsHMD, QAudio::AudioInput).get(); - auto output = getSetting(_contextIsHMD, QAudio::AudioOutput).get(); + auto input = getSetting(_contextIsHMD, QAudio::AudioInput).get(); + auto output = getSetting(_contextIsHMD, QAudio::AudioOutput).get(); _inputs.resetDevice(_contextIsHMD, input); _outputs.resetDevice(_contextIsHMD, output); @@ -203,7 +203,7 @@ void AudioDevices::onContextChanged(const QString& context) { void AudioDevices::onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& device, const QAudioDeviceInfo& previousDevice) { QString deviceName = device.isNull() ? QString() : device.deviceName(); - auto& setting = getSetting(_contextIsHMD, mode); + auto& setting = getSetting(_contextIsHMD, mode); // check for a previous device auto wasDefault = setting.get().isNull(); @@ -216,8 +216,8 @@ void AudioDevices::onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& d QJsonObject data; const QString MODE = "audio_mode"; - const QString INPUT = "INPUT"; - const QString OUTPUT = "OUTPUT"; data[MODE] = mode == QAudio::AudioInput ? INPUT : OUTPUT; + const QString INPUT = "INPUT"; + const QString OUTPUT = "OUTPUT"; data[MODE] = mode == QAudio::AudioInput ? INPUT : OUTPUT; const QString CONTEXT = "display_mode"; data[CONTEXT] = _contextIsHMD ? Audio::HMD : Audio::DESKTOP; diff --git a/interface/src/scripting/AudioDevices.h b/interface/src/scripting/AudioDevices.h index 36d887d3d4..cd47ab4191 100644 --- a/interface/src/scripting/AudioDevices.h +++ b/interface/src/scripting/AudioDevices.h @@ -54,7 +54,7 @@ private slots: private: friend class AudioDevices; - bool setDevice(int index, bool fromUser); + bool setDevice(int index, bool fromUser); static QHash _roles; static Qt::ItemFlags _flags; From 7ef50042bafc79268f5fdb729032bb14f8636e5e Mon Sep 17 00:00:00 2001 From: David Kelly Date: Fri, 23 Jun 2017 08:00:18 -0700 Subject: [PATCH 0553/1049] remove turd --- libraries/shared/src/PathUtils.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/libraries/shared/src/PathUtils.cpp b/libraries/shared/src/PathUtils.cpp index d1a8ff757b..9bf9d7bdcf 100644 --- a/libraries/shared/src/PathUtils.cpp +++ b/libraries/shared/src/PathUtils.cpp @@ -20,8 +20,6 @@ #include #include // std::once -//QUrl PathUtils::_overriddenDefaultScriptsLocation = QUrl(); - const QString& PathUtils::resourcesPath() { #ifdef Q_OS_MAC static QString staticResourcePath = QCoreApplication::applicationDirPath() + "/../Resources/"; From 5af07dfb627e5803bf36e295020c7f9bd6120843 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Fri, 23 Jun 2017 08:16:48 -0700 Subject: [PATCH 0554/1049] more memory-debugger --- interface/CMakeLists.txt | 4 ++-- tests/gpu-test/CMakeLists.txt | 1 + tests/render-perf/CMakeLists.txt | 2 ++ tests/render-texture-load/CMakeLists.txt | 2 ++ tests/render-utils/CMakeLists.txt | 2 ++ tests/shaders/CMakeLists.txt | 2 ++ 6 files changed, 11 insertions(+), 2 deletions(-) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index fe42b1432b..dcb1cacef9 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -4,6 +4,8 @@ project(${TARGET_NAME}) # set a default root dir for each of our optional externals if it was not passed set(OPTIONAL_EXTERNALS "LeapMotion") +setup_memory_debugger() + foreach(EXTERNAL ${OPTIONAL_EXTERNALS}) string(TOUPPER ${EXTERNAL} ${EXTERNAL}_UPPERCASE) if (NOT ${${EXTERNAL}_UPPERCASE}_ROOT_DIR) @@ -356,8 +358,6 @@ if (ANDROID) qt_create_apk() endif () -setup_memory_debugger() - add_dependency_external_projects(GifCreator) find_package(GifCreator REQUIRED) target_include_directories(${TARGET_NAME} PUBLIC ${GIFCREATOR_INCLUDE_DIRS}) diff --git a/tests/gpu-test/CMakeLists.txt b/tests/gpu-test/CMakeLists.txt index c37e36b53b..d73d7a111d 100644 --- a/tests/gpu-test/CMakeLists.txt +++ b/tests/gpu-test/CMakeLists.txt @@ -2,6 +2,7 @@ set(TARGET_NAME gpu-test) AUTOSCRIBE_SHADER_LIB(gpu model render-utils) # This is not a testcase -- just set it up as a regular hifi project setup_hifi_project(Quick Gui OpenGL Script Widgets) +setup_memory_debugger() set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") link_hifi_libraries(networking gl gpu gpu-gl procedural shared fbx model model-networking animation script-engine render render-utils octree image ktx) package_libraries_for_deployment() diff --git a/tests/render-perf/CMakeLists.txt b/tests/render-perf/CMakeLists.txt index a8e4ab286c..b6989a57b7 100644 --- a/tests/render-perf/CMakeLists.txt +++ b/tests/render-perf/CMakeLists.txt @@ -5,6 +5,8 @@ if (WIN32) SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4049 /ignore:4217") endif() +setup_memory_debugger() + # This is not a testcase -- just set it up as a regular hifi project setup_hifi_project(Quick Gui OpenGL) set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") diff --git a/tests/render-texture-load/CMakeLists.txt b/tests/render-texture-load/CMakeLists.txt index 1f0c0a069a..30030914ab 100644 --- a/tests/render-texture-load/CMakeLists.txt +++ b/tests/render-texture-load/CMakeLists.txt @@ -5,6 +5,8 @@ if (WIN32) SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4049 /ignore:4217") endif() +setup_memory_debugger() + # This is not a testcase -- just set it up as a regular hifi project setup_hifi_project(Quick Gui OpenGL) set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") diff --git a/tests/render-utils/CMakeLists.txt b/tests/render-utils/CMakeLists.txt index 5ec6a28b5c..4944ad2cbc 100644 --- a/tests/render-utils/CMakeLists.txt +++ b/tests/render-utils/CMakeLists.txt @@ -5,6 +5,8 @@ set(TARGET_NAME render-utils-test) setup_hifi_project(Quick Gui OpenGL) set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") +setup_memory_debugger() + # link in the shared libraries link_hifi_libraries(render-utils gl gpu gpu-gl shared) target_link_libraries(${TARGET_NAME} ${CMAKE_THREAD_LIBS_INIT}) diff --git a/tests/shaders/CMakeLists.txt b/tests/shaders/CMakeLists.txt index 5b38f473e8..bab1e0dcdc 100644 --- a/tests/shaders/CMakeLists.txt +++ b/tests/shaders/CMakeLists.txt @@ -5,6 +5,8 @@ set(TARGET_NAME shaders-test) setup_hifi_project(Quick Gui OpenGL) set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") +setup_memory_debugger() + # link in the shared libraries link_hifi_libraries(shared octree gl gpu gpu-gl model render fbx networking entities script-engine physics From 35f27313baeadb9ca3312f1c30ed55d84ac0c50d Mon Sep 17 00:00:00 2001 From: humbletim Date: Fri, 23 Jun 2017 12:05:44 -0400 Subject: [PATCH 0555/1049] persist command history to data folder; fix warning message color --- interface/src/ui/JSConsole.cpp | 32 ++++++++++++++++++++++++-------- interface/src/ui/JSConsole.h | 1 + 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/interface/src/ui/JSConsole.cpp b/interface/src/ui/JSConsole.cpp index 79314ce49a..820ed4207d 100644 --- a/interface/src/ui/JSConsole.cpp +++ b/interface/src/ui/JSConsole.cpp @@ -23,13 +23,14 @@ #include "ScriptHighlighting.h" const int NO_CURRENT_HISTORY_COMMAND = -1; -const int MAX_HISTORY_SIZE = 64; +const int MAX_HISTORY_SIZE = 256; +const QString HISTORY_FILENAME = "JSConsole.history.txt"; const QString COMMAND_STYLE = "color: #266a9b;"; const QString RESULT_SUCCESS_STYLE = "color: #677373;"; const QString RESULT_INFO_STYLE = "color: #223bd1;"; -const QString RESULT_WARNING_STYLE = "color: #d13b22;"; +const QString RESULT_WARNING_STYLE = "color: #999922;"; const QString RESULT_ERROR_STYLE = "color: #d13b22;"; const QString GUTTER_PREVIOUS_COMMAND = "<"; @@ -37,14 +38,26 @@ const QString GUTTER_ERROR = "X"; const QString JSConsole::_consoleFileName { "about:console" }; +QList _readLines(const QString& filename) { + QFile file(filename); + file.open(QFile::ReadOnly); + return QTextStream(&file).readAll().split("\r\n"); +} + +void _writeLines(const QString& filename, const QList& lines) { + QFile file(filename); + file.open(QFile::WriteOnly); + QTextStream(&file) << lines.join("\r\n"); +} + JSConsole::JSConsole(QWidget* parent, ScriptEngine* scriptEngine) : QWidget(parent), _ui(new Ui::Console), _currentCommandInHistory(NO_CURRENT_HISTORY_COMMAND), - _commandHistory(), + _savedHistoryFilename(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/" + HISTORY_FILENAME), + _commandHistory(_readLines(_savedHistoryFilename)), _ownScriptEngine(scriptEngine == NULL), _scriptEngine(NULL) { - _ui->setupUi(this); _ui->promptTextEdit->setLineWrapMode(QTextEdit::NoWrap); _ui->promptTextEdit->setWordWrapMode(QTextOption::NoWrap); @@ -100,9 +113,12 @@ void JSConsole::setScriptEngine(ScriptEngine* scriptEngine) { } void JSConsole::executeCommand(const QString& command) { - _commandHistory.prepend(command); - if (_commandHistory.length() > MAX_HISTORY_SIZE) { - _commandHistory.removeLast(); + if (_commandHistory.constFirst() != command) { + _commandHistory.prepend(command); + if (_commandHistory.length() > MAX_HISTORY_SIZE) { + _commandHistory.removeLast(); + } + _writeLines(_savedHistoryFilename, _commandHistory); } _ui->promptTextEdit->setDisabled(true); @@ -181,7 +197,7 @@ bool JSConsole::eventFilter(QObject* sender, QEvent* event) { // a new QTextBlock isn't created. keyEvent->setModifiers(keyEvent->modifiers() & ~Qt::ShiftModifier); } else { - QString command = _ui->promptTextEdit->toPlainText().trimmed(); + QString command = _ui->promptTextEdit->toPlainText().replace("\r\n","\n").trimmed(); if (!command.isEmpty()) { QTextCursor cursor = _ui->promptTextEdit->textCursor(); diff --git a/interface/src/ui/JSConsole.h b/interface/src/ui/JSConsole.h index 864f847071..59280f65aa 100644 --- a/interface/src/ui/JSConsole.h +++ b/interface/src/ui/JSConsole.h @@ -63,6 +63,7 @@ private: QFutureWatcher _executeWatcher; Ui::Console* _ui; int _currentCommandInHistory; + QString _savedHistoryFilename; QList _commandHistory; // Keeps track if the script engine is created inside the JSConsole bool _ownScriptEngine; From 04160f2ca160881256d2de9d9ecf59877106f885 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Fri, 23 Jun 2017 09:19:41 -0700 Subject: [PATCH 0556/1049] switch to change ktx_cache directory (only) --- interface/src/main.cpp | 10 ++++++++-- libraries/shared/src/PathUtils.cpp | 15 ++++++++++++++- libraries/shared/src/PathUtils.h | 2 +- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 83cac6d9bb..0ab00b1e57 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -71,15 +71,17 @@ int main(int argc, const char* argv[]) { QCommandLineOption runServerOption("runServer", "Whether to run the server"); QCommandLineOption serverContentPathOption("serverContentPath", "Where to find server content", "serverContentPath"); QCommandLineOption allowMultipleInstancesOption("allowMultipleInstances", "Allow multiple instances to run"); + QCommandLineOption overrideAppLocalDataPathOption("cache", "Override cache directory", "value"); parser.addOption(urlOption); parser.addOption(noUpdaterOption); parser.addOption(checkMinSpecOption); parser.addOption(runServerOption); parser.addOption(serverContentPathOption); + parser.addOption(overrideAppLocalDataPathOption); parser.addOption(allowMultipleInstancesOption); parser.parse(arguments); - + const QString& applicationName = getInterfaceSharedMemoryName(); bool instanceMightBeRunning = true; #ifdef Q_OS_WIN @@ -96,6 +98,10 @@ int main(int argc, const char* argv[]) { if (allowMultipleInstances) { instanceMightBeRunning = false; } + if (parser.isSet(overrideAppLocalDataPathOption)) { + QString appLocalDataPath = parser.value(overrideAppLocalDataPathOption); + PathUtils::getAppLocalDataPath(appLocalDataPath); + } if (instanceMightBeRunning) { // Try to connect and send message to existing interface instance @@ -179,7 +185,7 @@ int main(int argc, const char* argv[]) { QString openvrDllPath = appPath + "/plugins/openvr.dll"; HMODULE openvrDll; CHECKMINSPECPROC checkMinSpecPtr; - if ((openvrDll = LoadLibrary(openvrDllPath.toLocal8Bit().data())) && + if ((openvrDll = LoadLibrary(openvrDllPath.toLocal8Bit().data())) && (checkMinSpecPtr = (CHECKMINSPECPROC)GetProcAddress(openvrDll, "CheckMinSpec"))) { if (!checkMinSpecPtr()) { return -1; diff --git a/libraries/shared/src/PathUtils.cpp b/libraries/shared/src/PathUtils.cpp index 9bf9d7bdcf..63a94c1696 100644 --- a/libraries/shared/src/PathUtils.cpp +++ b/libraries/shared/src/PathUtils.cpp @@ -34,7 +34,20 @@ QString PathUtils::getAppDataPath() { return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/"; } -QString PathUtils::getAppLocalDataPath() { +QString PathUtils::getAppLocalDataPath(const QString& overridePath) { + static QString overriddenPath = ""; + + // set the overridden path if one was passed in + if (!overridePath.isEmpty()) { + overriddenPath = overridePath; + } + + // return overridden path if there is one + if (!overriddenPath.isEmpty()) { + return overriddenPath; + } + + // otherwise return the standard path return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/"; } diff --git a/libraries/shared/src/PathUtils.h b/libraries/shared/src/PathUtils.h index 14eb81dd9a..1160fd8106 100644 --- a/libraries/shared/src/PathUtils.h +++ b/libraries/shared/src/PathUtils.h @@ -28,7 +28,7 @@ public: static const QString& resourcesPath(); static QString getAppDataPath(); - static QString getAppLocalDataPath(); + static QString getAppLocalDataPath(const QString& overrideDataPath = ""); static QString getAppDataFilePath(const QString& filename); static QString getAppLocalDataFilePath(const QString& filename); From 341646c780edcc41a5926f91f34b80daad22811b Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 23 Jun 2017 09:58:27 -0700 Subject: [PATCH 0557/1049] Fix bad invocation, cleanup signatures --- .../ui/src/ui/TabletScriptingInterface.cpp | 55 +++++++------------ .../ui/src/ui/TabletScriptingInterface.h | 12 ++-- 2 files changed, 27 insertions(+), 40 deletions(-) diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index f85106918e..8b3dc342e2 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -182,7 +182,7 @@ class TabletRootWindow : public QmlWindowClass { virtual QString qmlSource() const override { return "hifi/tablet/WindowRoot.qml"; } }; -TabletProxy::TabletProxy(QObject* parent, QString name) : QObject(parent), _name(name) { +TabletProxy::TabletProxy(QObject* parent, const QString& name) : QObject(parent), _name(name) { if (QThread::currentThread() != qApp->thread()) { qCWarning(uiLogging) << "Creating tablet proxy on wrong thread " << _name; } @@ -306,7 +306,7 @@ bool TabletProxy::isMessageDialogOpen() { return result.toBool(); } -void TabletProxy::emitWebEvent(QVariant msg) { +void TabletProxy::emitWebEvent(const QVariant& msg) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "emitWebEvent", Q_ARG(QVariant, msg)); return; @@ -314,7 +314,7 @@ void TabletProxy::emitWebEvent(QVariant msg) { emit webEventReceived(msg); } -bool TabletProxy::isPathLoaded(QVariant path) { +bool TabletProxy::isPathLoaded(const QVariant& path) { if (QThread::currentThread() != thread()) { bool result = false; QMetaObject::invokeMethod(this, "isPathLoaded", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result), Q_ARG(QVariant, path)); @@ -620,8 +620,7 @@ TabletButtonProxy* TabletProxy::addButton(const QVariant& properties) { qCCritical(uiLogging) << "Could not find tablet in TabletRoot.qml"; } } else if (_toolbarMode) { - auto tabletScriptingInterface = DependencyManager::get(); - auto toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy(); + auto toolbarProxy = DependencyManager::get()->getSystemToolbarProxy(); if (toolbarProxy) { // copy properties from tablet button proxy to toolbar button proxy. toolbarProxy->addButton(tabletButtonProxy->getProperties()); @@ -668,15 +667,16 @@ void TabletProxy::removeButton(TabletButtonProxy* tabletButtonProxy) { QMetaObject::invokeMethod(tablet, "removeButtonProxy", Qt::AutoConnection, Q_ARG(QVariant, buttonProxy->getProperties())); } } else if (_toolbarMode) { - auto tabletScriptingInterface = DependencyManager::get(); - QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy(); + auto toolbarProxy = DependencyManager::get()->getSystemToolbarProxy(); // remove button from toolbarProxy - QMetaObject::invokeMethod(toolbarProxy, "removeButton", Qt::AutoConnection, Q_ARG(QVariant, buttonProxy->getUuid().toString())); - buttonProxy->setToolbarButtonProxy(nullptr); + if (toolbarProxy) { + toolbarProxy->removeButton(buttonProxy->getUuid().toString()); + buttonProxy->setToolbarButtonProxy(nullptr); + } } } -void TabletProxy::emitScriptEvent(QVariant msg) { +void TabletProxy::emitScriptEvent(const QVariant& msg) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "emitScriptEvent", Q_ARG(QVariant, msg)); return; @@ -689,7 +689,7 @@ void TabletProxy::emitScriptEvent(QVariant msg) { } } -void TabletProxy::sendToQml(QVariant msg) { +void TabletProxy::sendToQml(const QVariant& msg) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "sendToQml", Q_ARG(QVariant, msg)); return; @@ -707,8 +707,6 @@ void TabletProxy::addButtonsToHomeScreen() { if (!tablet || _toolbarMode) { return; } - - auto tabletScriptingInterface = DependencyManager::get(); for (auto& buttonProxy : _tabletButtonProxies) { addButtonProxyToQmlTablet(tablet, buttonProxy.data()); } @@ -735,35 +733,23 @@ void TabletProxy::desktopWindowClosed() { } void TabletProxy::addButtonsToToolbar() { - auto tabletScriptingInterface = DependencyManager::get(); - QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy(); - - Qt::ConnectionType connectionType = Qt::AutoConnection; - if (QThread::currentThread() != toolbarProxy->thread()) { - connectionType = Qt::BlockingQueuedConnection; - } - + Q_ASSERT(QThread::currentThread() == thread()); + ToolbarProxy* toolbarProxy = DependencyManager::get()->getSystemToolbarProxy(); for (auto& buttonProxy : _tabletButtonProxies) { // copy properties from tablet button proxy to toolbar button proxy. - QObject* toolbarButtonProxy = nullptr; - bool hasResult = QMetaObject::invokeMethod(toolbarProxy, "addButton", connectionType, Q_RETURN_ARG(QObject*, toolbarButtonProxy), Q_ARG(QVariant, buttonProxy->getProperties())); - if (hasResult) { - buttonProxy->setToolbarButtonProxy(toolbarButtonProxy); - } else { - qCWarning(uiLogging) << "ToolbarProxy addButton has no result"; - } + buttonProxy->setToolbarButtonProxy(toolbarProxy->addButton(buttonProxy->getProperties())); } // make the toolbar visible - QMetaObject::invokeMethod(toolbarProxy, "writeProperty", Qt::AutoConnection, Q_ARG(QString, "visible"), Q_ARG(QVariant, QVariant(true))); + toolbarProxy->writeProperty("visible", QVariant(true)); } void TabletProxy::removeButtonsFromToolbar() { - auto tabletScriptingInterface = DependencyManager::get(); - QObject* toolbarProxy = tabletScriptingInterface->getSystemToolbarProxy(); + Q_ASSERT(QThread::currentThread() == thread()); + ToolbarProxy* toolbarProxy = DependencyManager::get()->getSystemToolbarProxy(); for (auto& buttonProxy : _tabletButtonProxies) { // remove button from toolbarProxy - QMetaObject::invokeMethod(toolbarProxy, "removeButton", Qt::AutoConnection, Q_ARG(QVariant, buttonProxy->getUuid().toString())); + toolbarProxy->removeButton(buttonProxy->getUuid().toString()); buttonProxy->setToolbarButtonProxy(nullptr); } } @@ -843,6 +829,7 @@ void TabletButtonProxy::setQmlButton(QQuickItem* qmlButton) { } void TabletButtonProxy::setToolbarButtonProxy(QObject* toolbarButtonProxy) { + Q_ASSERT(QThread::currentThread() == thread()); _toolbarButtonProxy = toolbarButtonProxy; if (_toolbarButtonProxy) { QObject::connect(_toolbarButtonProxy, SIGNAL(clicked()), this, SLOT(clickedSlot())); @@ -859,9 +846,9 @@ QVariantMap TabletButtonProxy::getProperties() { return _properties; } -void TabletButtonProxy::editProperties(QVariantMap properties) { +void TabletButtonProxy::editProperties(const QVariantMap& properties) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "editProperties", Qt::BlockingQueuedConnection, Q_ARG(QVariantMap, properties)); + QMetaObject::invokeMethod(this, "editProperties", Q_ARG(QVariantMap, properties)); return; } diff --git a/libraries/ui/src/ui/TabletScriptingInterface.h b/libraries/ui/src/ui/TabletScriptingInterface.h index 0303a0a1c4..e61398585e 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.h +++ b/libraries/ui/src/ui/TabletScriptingInterface.h @@ -95,7 +95,7 @@ class TabletProxy : public QObject { Q_PROPERTY(bool landscape READ getLandscape WRITE setLandscape) Q_PROPERTY(bool tabletShown MEMBER _tabletShown NOTIFY tabletShownChanged) public: - TabletProxy(QObject* parent, QString name); + TabletProxy(QObject* parent, const QString& name); ~TabletProxy(); void setQmlTabletRoot(OffscreenQmlSurface* offscreenQmlSurface); @@ -163,14 +163,14 @@ public: * @function TabletProxy#emitScriptEvent * @param msg {object|string} */ - Q_INVOKABLE void emitScriptEvent(QVariant msg); + Q_INVOKABLE void emitScriptEvent(const QVariant& msg); /**jsdoc * Used to send an event to the qml embedded in the tablet * @function TabletProxy#sendToQml * @param msg {object|string} */ - Q_INVOKABLE void sendToQml(QVariant msg); + Q_INVOKABLE void sendToQml(const QVariant& msg); /**jsdoc * Check if the tablet is on the homescreen @@ -186,7 +186,7 @@ public: Q_INVOKABLE void setLandscape(bool landscape) { _landscape = landscape; } Q_INVOKABLE bool getLandscape() { return _landscape; } - Q_INVOKABLE bool isPathLoaded(QVariant path); + Q_INVOKABLE bool isPathLoaded(const QVariant& path); QQuickItem* getTabletRoot() const { return _qmlTabletRoot; } @@ -231,7 +231,7 @@ signals: protected slots: void addButtonsToHomeScreen(); void desktopWindowClosed(); - void emitWebEvent(QVariant msg); + void emitWebEvent(const QVariant& msg); protected: void removeButtonsFromHomeScreen(); void loadHomeScreen(bool forceOntoHomeScreen); @@ -284,7 +284,7 @@ public: * @function TabletButtonProxy#editProperties * @param {ButtonProperties} properties - set of properties to change */ - Q_INVOKABLE void editProperties(QVariantMap properties); + Q_INVOKABLE void editProperties(const QVariantMap& properties); public slots: void clickedSlot() { emit clicked(); } From d6eb77e815147b818fe3129fb6ea5cb2f827d98f Mon Sep 17 00:00:00 2001 From: humbletim Date: Fri, 23 Jun 2017 13:09:22 -0400 Subject: [PATCH 0558/1049] changes per feedback to quiet print debugs throughout --- .../app-doppleganger-attachments.js | 14 ++++++-- .../doppleganger-attachments.js | 13 ++++--- .../doppleganger-attachments/doppleganger.js | 34 +++++++++++-------- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js b/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js index 4142ff332e..4617cf47b6 100644 --- a/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js +++ b/unpublishedScripts/marketplace/doppleganger-attachments/app-doppleganger-attachments.js @@ -12,6 +12,8 @@ var require = Script.require; +var WANT_DEBUG = false; + var DopplegangerClass = require('./doppleganger.js'), DopplegangerAttachments = require('./doppleganger-attachments.js'), modelHelper = require('./model-helper.js').modelHelper; @@ -57,7 +59,7 @@ var doppleganger = new DopplegangerClass({ var currentHash = dopplegangerAttachments.getAttachmentsHash(); if (currentHash !== lastHash) { lastHash = currentHash; - print('app-doppleganger | detect attachment change'); + debugPrint('app-doppleganger | detect attachment change'); dopplegangerAttachments.refreshAttachments(); } } @@ -86,7 +88,7 @@ button.clicked.connect(doppleganger, 'toggle'); doppleganger.activeChanged.connect(function(active, reason) { if (button) { button.editProperties({ isActive: active }); - print('doppleganger.activeChanged', active, reason); + debugPrint('doppleganger.activeChanged', active, reason); } }); @@ -101,9 +103,15 @@ doppleganger.modelLoaded.connect(function(error, result) { // add debug indicators, but only if the user has configured the settings value if (Settings.getValue('debug.doppleganger', false)) { + WANT_DEBUG = true; DopplegangerClass.addDebugControls(doppleganger); } +function debugPrint() { + if (WANT_DEBUG) { + print('app-doppleganger | ' + [].slice.call(arguments).join(' ')); + } +} // ---------------------------------------------------------------------------- UserActivityLogger.logAction('doppleganger_app_load'); @@ -115,7 +123,7 @@ doppleganger.activeChanged.connect(function(active, reason) { // user intentionally toggled the doppleganger UserActivityLogger.logAction('doppleganger_disable'); } else { - print('doppleganger stopped:', reason); + debugPrint('doppleganger stopped:', reason); UserActivityLogger.logAction('doppleganger_autodisable', { reason: reason }); } } diff --git a/unpublishedScripts/marketplace/doppleganger-attachments/doppleganger-attachments.js b/unpublishedScripts/marketplace/doppleganger-attachments/doppleganger-attachments.js index 1d3847cad2..a3b3873c2d 100644 --- a/unpublishedScripts/marketplace/doppleganger-attachments/doppleganger-attachments.js +++ b/unpublishedScripts/marketplace/doppleganger-attachments/doppleganger-attachments.js @@ -5,6 +5,7 @@ module.exports = DopplegangerAttachments; DopplegangerAttachments.version = '0.0.0'; +DopplegangerAttachments.WANT_DEBUG = false; var _modelHelper = require('./model-helper.js'), modelHelper = _modelHelper.modelHelper, @@ -15,6 +16,10 @@ function log() { print('doppleganger-attachments | ' + [].slice.call(arguments).join(' ')); } +function debugPrint() { + DopplegangerAttachments.WANT_DEBUG && log.apply(this, arguments); +} + function DopplegangerAttachments(doppleganger, options) { utils.assign(this, { _options: options, @@ -24,7 +29,7 @@ function DopplegangerAttachments(doppleganger, options) { attachmentsUpdated: utils.signal(function attachmentsUpdated(currentAttachments, previousAttachments){}), }); this._initialize(); - log('DopplegangerAttachments...', JSON.stringify(options)); + debugPrint('DopplegangerAttachments...', JSON.stringify(options)); } DopplegangerAttachments.prototype = { // "hash" the current attachments (so that changes can be detected) @@ -87,7 +92,7 @@ DopplegangerAttachments.prototype = { jointNames = this.doppleganger.jointNames, properties = modelHelper.getProperties(this.doppleganger.objectID); - log('DopplegangerAttachments..._createAttachmentObjects', JSON.stringify({ + debugPrint('DopplegangerAttachments..._createAttachmentObjects', JSON.stringify({ type: properties.type, attachments: attachments.length, parentID: parentID, @@ -96,7 +101,7 @@ DopplegangerAttachments.prototype = { return attachments.map(utils.bind(this, function(attachment, i) { var type = modelHelper.type(attachment.properties && attachment.properties.objectID); if (type === 'overlay') { - log('skipping already-provisioned attachment object', type, attachment.properties && attachment.properties.name); + debugPrint('skipping already-provisioned attachment object', type, attachment.properties && attachment.properties.name); return attachment; } var jointIndex = attachment.$jointIndex, // jointNames.indexOf(attachment.jointName), @@ -133,7 +138,7 @@ DopplegangerAttachments.prototype = { modelHelper.deleteObject(objectID); return objectID = null; } - log('attachment model ('+modelHelper.type(result.objectID)+') is ready; # joints ==', + debugPrint('attachment model ('+modelHelper.type(result.objectID)+') is ready; # joints ==', result.jointNames && result.jointNames.length, result.naturalDimensions, result.objectID); var properties = modelHelper.getProperties(result.objectID), naturalDimensions = attachment.properties.naturalDimensions = properties.naturalDimensions; diff --git a/unpublishedScripts/marketplace/doppleganger-attachments/doppleganger.js b/unpublishedScripts/marketplace/doppleganger-attachments/doppleganger.js index 375105e722..bebd36df45 100644 --- a/unpublishedScripts/marketplace/doppleganger-attachments/doppleganger.js +++ b/unpublishedScripts/marketplace/doppleganger-attachments/doppleganger.js @@ -28,15 +28,15 @@ var _modelHelper = require('./model-helper.js'), modelHelper = _modelHelper.modelHelper, ModelReadyWatcher = _modelHelper.ModelReadyWatcher; +// @property {bool} - toggle verbose debug logging on/off +Doppleganger.WANT_DEBUG = false; + // @property {bool} - when set true, Script.update will be used instead of setInterval for syncing joint data Doppleganger.USE_SCRIPT_UPDATE = false; // @property {int} - the frame rate to target when using setInterval for joint updates Doppleganger.TARGET_FPS = 60; -// @property {int} - the maximum time in seconds to wait for the model overlay to finish loading -Doppleganger.MAX_WAIT_SECS = 10; - // @class Doppleganger - Creates a new instance of a Doppleganger. // @param {Avatar} [options.avatar=MyAvatar] - Avatar used to retrieve position and joint data. // @param {bool} [options.mirrored=true] - Apply "symmetric mirroring" of Left/Right joints. @@ -64,10 +64,10 @@ Doppleganger.prototype = { // @public @method - toggles doppleganger on/off toggle: function() { if (this.active) { - log('toggling off'); + debugPrint('toggling off'); this.stop(); } else { - log('toggling on'); + debugPrint('toggling on'); this.start(); } return this.active; @@ -92,7 +92,7 @@ Doppleganger.prototype = { // note: this mismatch can happen when the avatar's model is actively changing if (size !== translations.length || (this.jointStateCount && size !== this.jointStateCount)) { - log('mismatched joint counts (avatar model likely changed)', size, translations.length, this.jointStateCount); + debugPrint('mismatched joint counts (avatar model likely changed)', size, translations.length, this.jointStateCount); this.stop('avatar_changed_joints'); return; } @@ -168,7 +168,7 @@ Doppleganger.prototype = { Script.scriptEnding.connect(this, function() { modelHelper.deleteObject(this.objectID); }); - log('doppleganger created; objectID =', this.objectID); + debugPrint('doppleganger created; objectID =', this.objectID); // trigger clean up (and stop updates) if the object gets deleted this.onObjectDeleted = function(uuid) { @@ -193,14 +193,14 @@ Doppleganger.prototype = { if (error) { return this.stop(error); } - log('model ('+modelHelper.type(this.objectID)+')' + ' is ready; # joints == ' + result.jointNames.length); + debugPrint('model ('+modelHelper.type(this.objectID)+')' + ' is ready; # joints == ' + result.jointNames.length); var naturalDimensions = modelHelper.getProperties(this.objectID, ['naturalDimensions']).naturalDimensions; - log('naturalDimensions:', JSON.stringify(naturalDimensions)); + debugPrint('naturalDimensions:', JSON.stringify(naturalDimensions)); var props = { visible: true }; if (naturalDimensions) { props.dimensions = Vec3.multiply(this.scale, naturalDimensions); } - log('scaledDimensions:', this.scale, JSON.stringify(props.dimensions)); + debugPrint('scaledDimensions:', this.scale, JSON.stringify(props.dimensions)); modelHelper.editObject(this.objectID, props); if (!options.position) { this.syncVerticalPosition(); @@ -250,7 +250,7 @@ Doppleganger.prototype = { if (this.active) { this.activeChanged(this.active = false, reason); } else if (reason) { - log('already stopped so not triggering another activeChanged; latest reason was:', reason); + debugPrint('already stopped so not triggering another activeChanged; latest reason was:', reason); } }, // @public @method - Reposition the doppleganger so it sees "eye to eye" with the Avatar. @@ -263,7 +263,7 @@ Doppleganger.prototype = { doppleJointIndex = modelHelper.getJointIndex(this.objectID, byJointName),// names.indexOf(byJointName), doppleJointPosition = positions[doppleJointIndex]; - print('........... doppleJointPosition', JSON.stringify({ + debugPrint('........... doppleJointPosition', JSON.stringify({ byJointName: byJointName, dopplePosition: dopplePosition, doppleJointIndex: doppleJointIndex, @@ -276,7 +276,7 @@ Doppleganger.prototype = { avatarJointPosition = this.avatar.getJointPosition(avatarJointIndex); var offset = (avatarJointPosition.y - doppleJointPosition.y); - log('adjusting for offset', offset); + debugPrint('adjusting for offset', offset); if (properties.type === 'model') { dopplePosition.y = avatarPosition.y + offset; } else { @@ -290,11 +290,11 @@ Doppleganger.prototype = { // @private @method - creates the update thread to synchronize joint data _createUpdateThread: function() { if (Doppleganger.USE_SCRIPT_UPDATE) { - log('creating Script.update thread'); + debugPrint('creating Script.update thread'); this.onUpdate = this.update; Script.update.connect(this, 'onUpdate'); } else { - log('creating Script.setInterval thread @ ~', Doppleganger.TARGET_FPS +'fps'); + debugPrint('creating Script.setInterval thread @ ~', Doppleganger.TARGET_FPS +'fps'); var timeout = 1000 / Doppleganger.TARGET_FPS; this._interval = Script.setInterval(bind(this, 'update'), timeout); } @@ -369,6 +369,10 @@ function log() { print('doppleganger | ' + [].slice.call(arguments).join(' ')); } +function debugPrint() { + Doppleganger.WANT_DEBUG && log.apply(this, arguments); +} + // -- ADVANCED DEBUGGING -- // @function - Add debug joint indicators / extra debugging info. // @param {Doppleganger} - existing Doppleganger instance to add controls to From 416852c0cd216a772558f4079efaba9dfd8b2142 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 23 Jun 2017 10:19:16 -0700 Subject: [PATCH 0559/1049] Fix warnings about creating QObjects with parents in different thread --- interface/src/Application.cpp | 6 +++++- libraries/gpu-gl/src/gpu/gl/GLBackend.cpp | 5 +++++ libraries/gpu-gl/src/gpu/gl/GLTexture.cpp | 5 ----- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a7bed9fc9c..1ce21f9ec7 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -713,9 +713,13 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo updateHeartbeat(); // setup a timer for domain-server check ins - QTimer* domainCheckInTimer = new QTimer(nodeList.data()); + QTimer* domainCheckInTimer = new QTimer(this); connect(domainCheckInTimer, &QTimer::timeout, nodeList.data(), &NodeList::sendDomainServerCheckIn); domainCheckInTimer->start(DOMAIN_SERVER_CHECK_IN_MSECS); + connect(this, &QCoreApplication::aboutToQuit, [domainCheckInTimer] { + domainCheckInTimer->stop(); + domainCheckInTimer->deleteLater(); + }); auto audioIO = DependencyManager::get(); diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp index 791130ef6e..3441407f62 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp @@ -178,6 +178,11 @@ void GLBackend::init() { int swapInterval = wglGetSwapIntervalEXT(); qCDebug(gpugllogging, "V-Sync is %s\n", (swapInterval > 0 ? "ON" : "OFF")); }*/ +#endif +#if THREADED_TEXTURE_BUFFERING + // This has to happen on the main thread in order to give the thread + // pool a reasonable parent object + GLVariableAllocationSupport::TransferJob::startBufferingThread(); #endif }); } diff --git a/libraries/gpu-gl/src/gpu/gl/GLTexture.cpp b/libraries/gpu-gl/src/gpu/gl/GLTexture.cpp index 4161242a24..7758ddaf49 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLTexture.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLTexture.cpp @@ -461,11 +461,6 @@ void GLVariableAllocationSupport::updateMemoryPressure() { if (newState != _memoryPressureState) { _memoryPressureState = newState; -#if THREADED_TEXTURE_BUFFERING - if (MemoryPressureState::Transfer == _memoryPressureState) { - TransferJob::startBufferingThread(); - } -#endif // Clear the existing queue _transferQueue = WorkQueue(); _promoteQueue = WorkQueue(); From 54af6af651117bbc0c4703abda38b14ff56b505a Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 23 Jun 2017 10:38:21 -0700 Subject: [PATCH 0560/1049] Fix for pole vector stability and knee pole vector computation --- .../animation/src/AnimInverseKinematics.cpp | 45 +++++++++----- libraries/animation/src/Rig.cpp | 62 ++++++++++++------- libraries/animation/src/Rig.h | 2 +- 3 files changed, 71 insertions(+), 38 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index 3ea8937eec..e2e0d72d66 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -530,22 +530,33 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const if (dLen > EPSILON) { glm::vec3 dUnit = d / dLen; glm::vec3 e = midPose.xformVector(target.getPoleReferenceVector()); - glm::vec3 p = target.getPoleVector(); glm::vec3 eProj = e - glm::dot(e, dUnit) * dUnit; - glm::vec3 pProj = p - glm::dot(p, dUnit) * dUnit; float eProjLen = glm::length(eProj); - float pProjLen = glm::length(pProj); - if (eProjLen > EPSILON && pProjLen > EPSILON) { + const float MIN_EPROJ_LEN = 0.5f; + if (eProjLen < MIN_EPROJ_LEN) { + glm::vec3 midPoint = topPose.trans() + d * 0.5f; + e = midPose.trans() - midPoint; + eProj = e - glm::dot(e, dUnit) * dUnit; + eProjLen = glm::length(eProj); + } + + glm::vec3 p = target.getPoleVector(); + glm::vec3 pProj = p - glm::dot(p, dUnit) * dUnit; + float pProjLen = glm::length(pProj); + + if (eProjLen > EPSILON && pProjLen > EPSILON) { // as pProjLen become orthognal to d, reduce the amount of rotation. float magnitude = easeOutExpo(pProjLen); - float dot = glm::clamp(glm::dot(eProj / eProjLen, pProj / pProjLen), 0.0f, 1.0f); float theta = acosf(dot); glm::vec3 cross = glm::cross(eProj, pProj); - float crossLen = glm::length(cross); - if (crossLen > EPSILON) { - glm::vec3 axis = cross / crossLen; + const float MIN_ADJUSTMENT_ANGLE = 0.001745f; // 0.1 degree + if (theta > MIN_ADJUSTMENT_ANGLE) { + glm::vec3 axis = dUnit; + if (glm::dot(cross, dUnit) < 0) { + axis = -dUnit; + } poleRot = glm::angleAxis(magnitude * theta, axis); } } @@ -562,8 +573,17 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const glm::vec3 dUnit = d / dLen; glm::vec3 e = midPose.xformVector(target.getPoleReferenceVector()); - glm::vec3 p = target.getPoleVector(); glm::vec3 eProj = e - glm::dot(e, dUnit) * dUnit; + float eProjLen = glm::length(eProj); + const float MIN_EPROJ_LEN = 0.5f; + if (eProjLen < MIN_EPROJ_LEN) { + glm::vec3 midPoint = topPose.trans() + d * 0.5f; + e = midPose.trans() - midPoint; + eProj = e - glm::dot(e, dUnit) * dUnit; + eProjLen = glm::length(eProj); + } + + glm::vec3 p = target.getPoleVector(); glm::vec3 pProj = p - glm::dot(p, dUnit) * dUnit; const float PROJ_VECTOR_LEN = 10.0f; @@ -573,11 +593,8 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const geomToWorldPose.xformPoint(topPose.trans()), YELLOW); DebugDraw::getInstance().drawRay(geomToWorldPose.xformPoint(midPoint), - geomToWorldPose.xformPoint(midPoint + PROJ_VECTOR_LEN * glm::normalize(eProj)), + geomToWorldPose.xformPoint(midPoint + PROJ_VECTOR_LEN * glm::normalize(e)), RED); - DebugDraw::getInstance().drawRay(geomToWorldPose.xformPoint(midPoint), - geomToWorldPose.xformPoint(midPoint + PROJ_VECTOR_LEN * glm::normalize(pProj)), - GREEN); DebugDraw::getInstance().drawRay(geomToWorldPose.xformPoint(midPoint), geomToWorldPose.xformPoint(midPoint + POLE_VECTOR_LEN * glm::normalize(p)), BLUE); @@ -1060,7 +1077,7 @@ void AnimInverseKinematics::initConstraints() { // y | // | | // | O---O---O RightUpLeg - // z | | Hips2 | + // z | | Hips | // \ | | | // \| | | // x -----+ O O RightLeg diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 51480e8ef1..8466b79d1d 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -1265,14 +1265,14 @@ void Rig::updateFeet(bool leftFootEnabled, bool rightFootEnabled, const AnimPose int hipsIndex = indexOfJoint("Hips"); if (leftFootEnabled) { - glm::vec3 footPosition = leftFootPose.trans(); - glm::quat footRotation = leftFootPose.rot(); - _animVars.set("leftFootPosition", footPosition); - _animVars.set("leftFootRotation", footRotation); + _animVars.set("leftFootPosition", leftFootPose.trans()); + _animVars.set("leftFootRotation", leftFootPose.rot()); _animVars.set("leftFootType", (int)IKTarget::Type::RotationAndPosition); int footJointIndex = _animSkeleton->nameToJointIndex("LeftFoot"); - glm::vec3 poleVector = calculateKneePoleVector(footJointIndex, footRotation, hipsIndex); + int kneeJointIndex = _animSkeleton->nameToJointIndex("LeftLeg"); + int upLegJointIndex = _animSkeleton->nameToJointIndex("LeftUpLeg"); + glm::vec3 poleVector = calculateKneePoleVector(footJointIndex, kneeJointIndex, upLegJointIndex, hipsIndex, leftFootPose); // smooth toward desired pole vector from previous pole vector... to reduce jitter if (!_prevLeftFootPoleVectorValid) { @@ -1295,14 +1295,14 @@ void Rig::updateFeet(bool leftFootEnabled, bool rightFootEnabled, const AnimPose } if (rightFootEnabled) { - glm::vec3 footPosition = rightFootPose.trans(); - glm::quat footRotation = rightFootPose.rot(); - _animVars.set("rightFootPosition", footPosition); - _animVars.set("rightFootRotation", footRotation); + _animVars.set("rightFootPosition", rightFootPose.trans()); + _animVars.set("rightFootRotation", rightFootPose.rot()); _animVars.set("rightFootType", (int)IKTarget::Type::RotationAndPosition); int footJointIndex = _animSkeleton->nameToJointIndex("RightFoot"); - glm::vec3 poleVector = calculateKneePoleVector(footJointIndex, footRotation, hipsIndex); + int kneeJointIndex = _animSkeleton->nameToJointIndex("RightLeg"); + int upLegJointIndex = _animSkeleton->nameToJointIndex("RightUpLeg"); + glm::vec3 poleVector = calculateKneePoleVector(footJointIndex, kneeJointIndex, upLegJointIndex, hipsIndex, rightFootPose); // smooth toward desired pole vector from previous pole vector... to reduce jitter if (!_prevRightFootPoleVectorValid) { @@ -1375,20 +1375,23 @@ glm::vec3 Rig::calculateElbowPoleVector(int handIndex, int elbowIndex, int armIn AnimPose handPose = _externalPoseSet._absolutePoses[handIndex]; AnimPose elbowPose = _externalPoseSet._absolutePoses[elbowIndex]; AnimPose armPose = _externalPoseSet._absolutePoses[armIndex]; + + // ray from hand to arm. glm::vec3 d = glm::normalize(handPose.trans() - armPose.trans()); float sign = isLeft ? 1.0f : -1.0f; + // form a plane normal to the hips x-axis. glm::vec3 n = hipsPose.rot() * Vectors::UNIT_X; glm::vec3 y = hipsPose.rot() * Vectors::UNIT_Y; - // project d onto n. + + // project d onto this plane glm::vec3 dProj = d - glm::dot(d, n) * n; + // give dProj a bit of offset away from the body. float avatarScale = extractUniformScale(_modelOffset); const float LATERAL_OFFSET = 0.333f * avatarScale; const float VERTICAL_OFFSET = -0.333f * avatarScale; - - // give dProj a bit of offset away from the body. glm::vec3 dProjWithOffset = dProj + sign * LATERAL_OFFSET * n + y * VERTICAL_OFFSET; // rotate dProj by 90 degrees to get the poleVector. @@ -1402,19 +1405,32 @@ glm::vec3 Rig::calculateElbowPoleVector(int handIndex, int elbowIndex, int armIn return glm::normalize(poleAdjust * poleVector); } -glm::vec3 Rig::calculateKneePoleVector(int footJointIndex, const glm::quat& footTargetOrientation, int hipsIndex) const { +glm::vec3 Rig::calculateKneePoleVector(int footJointIndex, int kneeIndex, int upLegIndex, int hipsIndex, const AnimPose& targetFootPose) const { - AnimPose defaultPose = _animSkeleton->getAbsoluteDefaultPose(footJointIndex); - glm::vec3 localForward = glm::inverse(defaultPose.rot()) * Vectors::UNIT_Z; - glm::vec3 footForward = footTargetOrientation * localForward; + AnimPose hipsPose = _externalPoseSet._absolutePoses[hipsIndex]; + AnimPose footPose = targetFootPose; + AnimPose kneePose = _externalPoseSet._absolutePoses[kneeIndex]; + AnimPose upLegPose = _externalPoseSet._absolutePoses[upLegIndex]; - // compute the forward direction of the hips. - glm::quat hipsRotation = _externalPoseSet._absolutePoses[hipsIndex].rot(); - glm::vec3 hipsForward = hipsRotation * Vectors::UNIT_Z; + // ray from foot to upLeg + glm::vec3 d = glm::normalize(footPose.trans() - upLegPose.trans()); - // blend between the hips and the foot. - const float FOOT_TO_HIPS_BLEND_FACTOR = 0.5f; - return glm::normalize(lerp(footForward, hipsForward, FOOT_TO_HIPS_BLEND_FACTOR)); + // form a plane normal to the hips x-axis + glm::vec3 n = hipsPose.rot() * Vectors::UNIT_X; + glm::vec3 y = hipsPose.rot() * Vectors::UNIT_Y; + + // project d onto this plane + glm::vec3 dProj = d - glm::dot(d, n) * n; + + // rotate dProj by 90 degrees to get the poleVector. + glm::vec3 poleVector = glm::angleAxis(-PI / 2.0f, n) * dProj; + + // blend the foot oreintation into the pole vector + glm::quat kneeToFootDelta = footPose.rot() * glm::inverse(kneePose.rot()); + const float WRIST_POLE_ADJUST_FACTOR = 0.5f; + glm::quat poleAdjust = quatLerp(Quaternions::IDENTITY, kneeToFootDelta, WRIST_POLE_ADJUST_FACTOR); + + return glm::normalize(poleAdjust * poleVector); } void Rig::updateFromControllerParameters(const ControllerParameters& params, float dt) { diff --git a/libraries/animation/src/Rig.h b/libraries/animation/src/Rig.h index 413b598079..c17a7b9c8f 100644 --- a/libraries/animation/src/Rig.h +++ b/libraries/animation/src/Rig.h @@ -239,7 +239,7 @@ protected: void calcAnimAlpha(float speed, const std::vector& referenceSpeeds, float* alphaOut) const; glm::vec3 calculateElbowPoleVector(int handIndex, int elbowIndex, int armIndex, int hipsIndex, bool isLeft) const; - glm::vec3 calculateKneePoleVector(int footJointIndex, const glm::quat& footTargetOrientation, int hipsIndex) const; + glm::vec3 calculateKneePoleVector(int footJointIndex, int kneeJoint, int upLegIndex, int hipsIndex, const AnimPose& targetFootPose) const; AnimPose _modelOffset; // model to rig space AnimPose _geometryOffset; // geometry to model space (includes unit offset & fst offsets) From 8f89ef09319045f735e6e327c987f196f7131163 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 23 Jun 2017 10:52:23 -0700 Subject: [PATCH 0561/1049] Fix for eye direction when no look at targets are present. --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e12c73d0bc..28094dddb1 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4165,7 +4165,7 @@ void Application::updateMyAvatarLookAtPosition() { lookAtSpot = transformPoint(worldHeadMat, glm::vec3(0.0f, 0.0f, TREE_SCALE)); } else { lookAtSpot = myAvatar->getHead()->getEyePosition() + - (myAvatar->getHead()->getFinalOrientationInWorldFrame() * glm::vec3(0.0f, 0.0f, TREE_SCALE)); + (myAvatar->getHead()->getFinalOrientationInWorldFrame() * glm::vec3(0.0f, 0.0f, -TREE_SCALE)); } } From 7298cd69404e04d2c46abb45954b16ff3d68eba4 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 23 Jun 2017 10:54:31 -0700 Subject: [PATCH 0562/1049] Add support for vs2015 and vs2017 FBX libs --- cmake/modules/FindFBX.cmake | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmake/modules/FindFBX.cmake b/cmake/modules/FindFBX.cmake index 2e84d1ea19..b362d93cd3 100644 --- a/cmake/modules/FindFBX.cmake +++ b/cmake/modules/FindFBX.cmake @@ -56,6 +56,14 @@ elseif (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") endif() function(_fbx_find_library _name _lib _suffix) + if (MSVC15) + set(VS_PREFIX vs2017) + endif() + + if (MSVC14) + set(VS_PREFIX vs2015) + endif() + if (MSVC12) set(VS_PREFIX vs2013) endif() From b12018ccf3f7cb2dd5e76cbf05ccb7a1e6d91fbc Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 23 Jun 2017 10:54:48 -0700 Subject: [PATCH 0563/1049] Fix Oven not properly handling native separators --- tools/oven/src/Oven.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/oven/src/Oven.cpp b/tools/oven/src/Oven.cpp index dc763cc82d..d0b8c3cd65 100644 --- a/tools/oven/src/Oven.cpp +++ b/tools/oven/src/Oven.cpp @@ -61,7 +61,9 @@ Oven::Oven(int argc, char* argv[]) : if (parser.isSet(CLI_INPUT_PARAMETER) || parser.isSet(CLI_OUTPUT_PARAMETER)) { if (parser.isSet(CLI_INPUT_PARAMETER) && parser.isSet(CLI_OUTPUT_PARAMETER)) { BakerCLI* cli = new BakerCLI(this); - cli->bakeFile(parser.value(CLI_INPUT_PARAMETER), parser.value(CLI_OUTPUT_PARAMETER)); + QUrl inputUrl(QDir::fromNativeSeparators(parser.value(CLI_INPUT_PARAMETER))); + QUrl outputUrl(QDir::fromNativeSeparators(parser.value(CLI_OUTPUT_PARAMETER))); + cli->bakeFile(inputUrl, outputUrl.toString()); } else { parser.showHelp(); QApplication::quit(); From bda50af78098ea0fd549a201bcd0622906ecd23e Mon Sep 17 00:00:00 2001 From: David Kelly Date: Fri, 23 Jun 2017 11:06:48 -0700 Subject: [PATCH 0564/1049] this uses qt's test location for AppData/Local, but leaves Roaming alone --- interface/src/main.cpp | 12 +++++++++--- libraries/shared/src/PathUtils.cpp | 15 +-------------- libraries/shared/src/PathUtils.h | 2 +- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 0ab00b1e57..81bf0244d9 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -71,7 +71,7 @@ int main(int argc, const char* argv[]) { QCommandLineOption runServerOption("runServer", "Whether to run the server"); QCommandLineOption serverContentPathOption("serverContentPath", "Where to find server content", "serverContentPath"); QCommandLineOption allowMultipleInstancesOption("allowMultipleInstances", "Allow multiple instances to run"); - QCommandLineOption overrideAppLocalDataPathOption("cache", "Override cache directory", "value"); + QCommandLineOption overrideAppLocalDataPathOption("cache", "set test cache directory"); parser.addOption(urlOption); parser.addOption(noUpdaterOption); parser.addOption(checkMinSpecOption); @@ -99,8 +99,14 @@ int main(int argc, const char* argv[]) { instanceMightBeRunning = false; } if (parser.isSet(overrideAppLocalDataPathOption)) { - QString appLocalDataPath = parser.value(overrideAppLocalDataPathOption); - PathUtils::getAppLocalDataPath(appLocalDataPath); + // get standard path + auto standardAppDataLocation = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + // set to test so all future paths are the test paths + QStandardPaths::setTestModeEnabled(true); + // now, we need to link everything in AppDataLocation to the test AppDataLocation. This + // leaves the test location for AppLocalDataLocation alone, but allows all the stuff in + // AppDataLocation to be usable + QFile::link(standardAppDataLocation, QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); } if (instanceMightBeRunning) { diff --git a/libraries/shared/src/PathUtils.cpp b/libraries/shared/src/PathUtils.cpp index 63a94c1696..9bf9d7bdcf 100644 --- a/libraries/shared/src/PathUtils.cpp +++ b/libraries/shared/src/PathUtils.cpp @@ -34,20 +34,7 @@ QString PathUtils::getAppDataPath() { return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/"; } -QString PathUtils::getAppLocalDataPath(const QString& overridePath) { - static QString overriddenPath = ""; - - // set the overridden path if one was passed in - if (!overridePath.isEmpty()) { - overriddenPath = overridePath; - } - - // return overridden path if there is one - if (!overriddenPath.isEmpty()) { - return overriddenPath; - } - - // otherwise return the standard path +QString PathUtils::getAppLocalDataPath() { return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/"; } diff --git a/libraries/shared/src/PathUtils.h b/libraries/shared/src/PathUtils.h index 1160fd8106..14eb81dd9a 100644 --- a/libraries/shared/src/PathUtils.h +++ b/libraries/shared/src/PathUtils.h @@ -28,7 +28,7 @@ public: static const QString& resourcesPath(); static QString getAppDataPath(); - static QString getAppLocalDataPath(const QString& overrideDataPath = ""); + static QString getAppLocalDataPath(); static QString getAppDataFilePath(const QString& filename); static QString getAppLocalDataFilePath(const QString& filename); From fe7d4b1d232a291c3fe8ff403d8adab9c9c5e8cb Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 23 Jun 2017 11:54:35 -0700 Subject: [PATCH 0565/1049] Remove dependency between codec plugins and UI --- assignment-client/CMakeLists.txt | 2 +- assignment-client/src/audio/AudioMixer.cpp | 13 ------- interface/src/Application.cpp | 10 ++++++ libraries/plugins/src/plugins/Forward.h | 5 +++ .../plugins/src/plugins/PluginManager.cpp | 35 +++++++++++++------ libraries/plugins/src/plugins/PluginManager.h | 12 +++++++ plugins/hifiCodec/CMakeLists.txt | 2 +- plugins/hifiNeuron/CMakeLists.txt | 2 +- plugins/hifiSdl2/CMakeLists.txt | 2 +- plugins/hifiSixense/CMakeLists.txt | 2 +- plugins/pcmCodec/CMakeLists.txt | 2 +- 11 files changed, 58 insertions(+), 29 deletions(-) diff --git a/assignment-client/CMakeLists.txt b/assignment-client/CMakeLists.txt index 54afabfd21..c9af474949 100644 --- a/assignment-client/CMakeLists.txt +++ b/assignment-client/CMakeLists.txt @@ -11,7 +11,7 @@ endif () link_hifi_libraries( audio avatars octree gpu model fbx entities networking animation recording shared script-engine embedded-webserver - controllers physics plugins + physics plugins ) if (WIN32) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 5e0cd740e6..93b9b10eb7 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -166,19 +166,6 @@ void AudioMixer::handleMuteEnvironmentPacket(QSharedPointer mes } } -DisplayPluginList getDisplayPlugins() { - DisplayPluginList result; - return result; -} - -InputPluginList getInputPlugins() { - InputPluginList result; - return result; -} - -// must be here to satisfy a reference in PluginManager::saveSettings() -void saveInputPluginSettings(const InputPluginList& plugins) {} - const std::pair AudioMixer::negotiateCodec(std::vector codecs) { QString selectedCodecName; CodecPluginPointer selectedCodec; diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a7bed9fc9c..3ca8c29288 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -441,6 +441,11 @@ static const QString STATE_ADVANCED_MOVEMENT_CONTROLS = "AdvancedMovement"; static const QString STATE_GROUNDED = "Grounded"; static const QString STATE_NAV_FOCUSED = "NavigationFocused"; +// Statically provided display and input plugins +extern DisplayPluginList getDisplayPlugins(); +extern InputPluginList getInputPlugins(); +extern void saveInputPluginSettings(const InputPluginList& plugins); + bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { const char** constArgv = const_cast(argv); @@ -480,6 +485,11 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { Setting::init(); + // Tell the plugin manager about our statically linked plugins + PluginManager::setInputPluginProvider([] { return getInputPlugins(); }); + PluginManager::setDisplayPluginProvider([] { return getDisplayPlugins(); }); + PluginManager::setInputPluginSettingsPersister([](const InputPluginList& plugins) { saveInputPluginSettings(plugins); }); + if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { steamClient->init(); } diff --git a/libraries/plugins/src/plugins/Forward.h b/libraries/plugins/src/plugins/Forward.h index b95bf4c2e6..90746d648e 100644 --- a/libraries/plugins/src/plugins/Forward.h +++ b/libraries/plugins/src/plugins/Forward.h @@ -9,6 +9,7 @@ #include #include +#include enum class PluginType { DISPLAY_PLUGIN, @@ -26,8 +27,12 @@ class PluginManager; using DisplayPluginPointer = std::shared_ptr; using DisplayPluginList = std::vector; +using DisplayPluginProvider = std::function; using InputPluginPointer = std::shared_ptr; using InputPluginList = std::vector; +using InputPluginProvider = std::function; using CodecPluginPointer = std::shared_ptr; using CodecPluginList = std::vector; +using CodecPluginProvider = std::function; using SteamClientPluginPointer = std::shared_ptr; +using InputPluginSettingsPersister = std::function; diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index 8471dbc7e8..e90d3e3a0f 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -23,6 +23,26 @@ #include "InputPlugin.h" #include "PluginLogging.h" +DisplayPluginProvider PluginManager::_displayPluginProvider = []()->DisplayPluginList { return {}; }; +InputPluginProvider PluginManager::_inputPluginProvider = []()->InputPluginList { return {}; }; +CodecPluginProvider PluginManager::_codecPluginProvider = []()->CodecPluginList { return {}; }; +InputPluginSettingsPersister PluginManager::_inputSettingsPersister = [](const InputPluginList& list) {}; + +void PluginManager::setDisplayPluginProvider(const DisplayPluginProvider& provider) { + _displayPluginProvider = provider; +} + +void PluginManager::setInputPluginProvider(const InputPluginProvider& provider) { + _inputPluginProvider = provider; +} + +void PluginManager::setCodecPluginProvider(const CodecPluginProvider& provider) { + _codecPluginProvider = provider; +} + +void PluginManager::setInputPluginSettingsPersister(const InputPluginSettingsPersister& persister) { + _inputSettingsPersister = persister; +} PluginManager* PluginManager::getInstance() { static PluginManager _manager; @@ -117,12 +137,12 @@ const LoaderList& getLoadedPlugins() { PluginManager::PluginManager() { } -extern CodecPluginList getCodecPlugins(); - const CodecPluginList& PluginManager::getCodecPlugins() { static CodecPluginList codecPlugins; static std::once_flag once; std::call_once(once, [&] { + codecPlugins = _codecPluginProvider(); + // Now grab the dynamic plugins for (auto loader : getLoadedPlugins()) { CodecProvider* codecProvider = qobject_cast(loader->instance()); @@ -163,11 +183,6 @@ const SteamClientPluginPointer PluginManager::getSteamClientPlugin() { #ifndef Q_OS_ANDROID -// TODO migrate to a DLL model where plugins are discovered and loaded at runtime by the PluginManager class -extern DisplayPluginList getDisplayPlugins(); -extern InputPluginList getInputPlugins(); - -extern void saveInputPluginSettings(const InputPluginList& plugins); static DisplayPluginList displayPlugins; const DisplayPluginList& PluginManager::getDisplayPlugins() { @@ -183,7 +198,7 @@ const DisplayPluginList& PluginManager::getDisplayPlugins() { std::call_once(once, [&] { // Grab the built in plugins - displayPlugins = ::getDisplayPlugins(); + displayPlugins = _displayPluginProvider(); // Now grab the dynamic plugins @@ -229,7 +244,7 @@ const InputPluginList& PluginManager::getInputPlugins() { }; std::call_once(once, [&] { - inputPlugins = ::getInputPlugins(); + inputPlugins = _inputPluginProvider(); // Now grab the dynamic plugins for (auto loader : getLoadedPlugins()) { @@ -288,7 +303,7 @@ void PluginManager::disableInputs(const QStringList& inputs) { } void PluginManager::saveSettings() { - saveInputPluginSettings(getInputPlugins()); + _inputSettingsPersister(getInputPlugins()); } void PluginManager::shutdown() { diff --git a/libraries/plugins/src/plugins/PluginManager.h b/libraries/plugins/src/plugins/PluginManager.h index 687e5c9e9b..cb011392a4 100644 --- a/libraries/plugins/src/plugins/PluginManager.h +++ b/libraries/plugins/src/plugins/PluginManager.h @@ -31,6 +31,18 @@ public: void setContainer(PluginContainer* container) { _container = container; } void shutdown(); + + // Application that have statically linked plugins can expose them to the plugin manager with these function + static void setDisplayPluginProvider(const DisplayPluginProvider& provider); + static void setInputPluginProvider(const InputPluginProvider& provider); + static void setCodecPluginProvider(const CodecPluginProvider& provider); + static void setInputPluginSettingsPersister(const InputPluginSettingsPersister& persister); + private: + static DisplayPluginProvider _displayPluginProvider; + static InputPluginProvider _inputPluginProvider; + static CodecPluginProvider _codecPluginProvider; + static InputPluginSettingsPersister _inputSettingsPersister; + PluginContainer* _container { nullptr }; }; diff --git a/plugins/hifiCodec/CMakeLists.txt b/plugins/hifiCodec/CMakeLists.txt index 15572e8266..28c1dc3807 100644 --- a/plugins/hifiCodec/CMakeLists.txt +++ b/plugins/hifiCodec/CMakeLists.txt @@ -8,7 +8,7 @@ set(TARGET_NAME hifiCodec) setup_hifi_client_server_plugin() -link_hifi_libraries(audio plugins input-plugins display-plugins) +link_hifi_libraries(audio plugins) add_dependency_external_projects(hifiAudioCodec) target_include_directories(${TARGET_NAME} PRIVATE ${HIFIAUDIOCODEC_INCLUDE_DIRS}) target_link_libraries(${TARGET_NAME} ${HIFIAUDIOCODEC_LIBRARIES}) diff --git a/plugins/hifiNeuron/CMakeLists.txt b/plugins/hifiNeuron/CMakeLists.txt index e3a725ca2f..a9ed8cca6e 100644 --- a/plugins/hifiNeuron/CMakeLists.txt +++ b/plugins/hifiNeuron/CMakeLists.txt @@ -10,7 +10,7 @@ if (APPLE OR WIN32) set(TARGET_NAME hifiNeuron) setup_hifi_plugin(Script Qml Widgets) - link_hifi_libraries(shared controllers ui plugins input-plugins display-plugins) + link_hifi_libraries(shared controllers ui plugins input-plugins) target_neuron() endif() diff --git a/plugins/hifiSdl2/CMakeLists.txt b/plugins/hifiSdl2/CMakeLists.txt index 86bda5a15d..7e499e314a 100644 --- a/plugins/hifiSdl2/CMakeLists.txt +++ b/plugins/hifiSdl2/CMakeLists.txt @@ -8,5 +8,5 @@ set(TARGET_NAME hifiSdl2) setup_hifi_plugin(Script Qml Widgets) -link_hifi_libraries(shared controllers ui plugins input-plugins script-engine display-plugins) +link_hifi_libraries(shared controllers ui plugins input-plugins script-engine) target_sdl2() diff --git a/plugins/hifiSixense/CMakeLists.txt b/plugins/hifiSixense/CMakeLists.txt index 54884bddff..14676217db 100644 --- a/plugins/hifiSixense/CMakeLists.txt +++ b/plugins/hifiSixense/CMakeLists.txt @@ -9,6 +9,6 @@ if (NOT ANDROID) set(TARGET_NAME hifiSixense) setup_hifi_plugin(Script Qml Widgets) - link_hifi_libraries(shared controllers ui plugins ui-plugins input-plugins display-plugins) + link_hifi_libraries(shared controllers ui plugins ui-plugins input-plugins) target_sixense() endif () diff --git a/plugins/pcmCodec/CMakeLists.txt b/plugins/pcmCodec/CMakeLists.txt index 5e52705033..900a642a88 100644 --- a/plugins/pcmCodec/CMakeLists.txt +++ b/plugins/pcmCodec/CMakeLists.txt @@ -8,6 +8,6 @@ set(TARGET_NAME pcmCodec) setup_hifi_client_server_plugin() -link_hifi_libraries(shared plugins input-plugins display-plugins) +link_hifi_libraries(shared plugins) install_beside_console() From f3206106812ceb2e376f6dd41c7d9aa3d8a8da64 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 23 Jun 2017 14:06:00 -0700 Subject: [PATCH 0566/1049] opened up shoulder constraint + other fixes * bent elbows will be away from the body a bit more. * sped up smoothing of pole vectors --- libraries/animation/src/AnimInverseKinematics.cpp | 6 ++++-- libraries/animation/src/Rig.cpp | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index e2e0d72d66..0395d4d391 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -1122,7 +1122,9 @@ void AnimInverseKinematics::initConstraints() { if (0 == baseName.compare("Arm", Qt::CaseSensitive)) { SwingTwistConstraint* stConstraint = new SwingTwistConstraint(); stConstraint->setReferenceRotation(_defaultRelativePoses[i].rot()); - stConstraint->setTwistLimits(-PI / 2.0f, PI / 2.0f); + //stConstraint->setTwistLimits(-PI / 2.0f, PI / 2.0f); + const float TWIST_LIMIT = 5.0f * PI / 8.0f; + stConstraint->setTwistLimits(-TWIST_LIMIT, TWIST_LIMIT); /* KEEP THIS CODE for future experimentation // these directions are approximate swing limits in root-frame @@ -1148,7 +1150,7 @@ void AnimInverseKinematics::initConstraints() { // simple cone std::vector minDots; - const float MAX_HAND_SWING = PI / 2.0f; + const float MAX_HAND_SWING = 5.0f * PI / 8.0f; minDots.push_back(cosf(MAX_HAND_SWING)); stConstraint->setSwingLimits(minDots); diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 8466b79d1d..53e3f3ddc0 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -1089,7 +1089,7 @@ void Rig::updateHands(bool leftHandEnabled, bool rightHandEnabled, bool hipsEnab const bool LEFT_HAND = true; const bool RIGHT_HAND = false; - const float ELBOW_POLE_VECTOR_BLEND_FACTOR = 0.9f; + const float ELBOW_POLE_VECTOR_BLEND_FACTOR = 0.95f; if (leftHandEnabled) { if (!_isLeftHandControlled) { @@ -1260,7 +1260,7 @@ void Rig::updateHands(bool leftHandEnabled, bool rightHandEnabled, bool hipsEnab void Rig::updateFeet(bool leftFootEnabled, bool rightFootEnabled, const AnimPose& leftFootPose, const AnimPose& rightFootPose) { - const float KNEE_POLE_VECTOR_BLEND_FACTOR = 0.9f; + const float KNEE_POLE_VECTOR_BLEND_FACTOR = 0.95f; int hipsIndex = indexOfJoint("Hips"); @@ -1390,7 +1390,7 @@ glm::vec3 Rig::calculateElbowPoleVector(int handIndex, int elbowIndex, int armIn // give dProj a bit of offset away from the body. float avatarScale = extractUniformScale(_modelOffset); - const float LATERAL_OFFSET = 0.333f * avatarScale; + const float LATERAL_OFFSET = 1.0f * avatarScale; const float VERTICAL_OFFSET = -0.333f * avatarScale; glm::vec3 dProjWithOffset = dProj + sign * LATERAL_OFFSET * n + y * VERTICAL_OFFSET; From c0e8b6c8bcf617b7ef1b64360e6c08085a312811 Mon Sep 17 00:00:00 2001 From: samcake Date: Fri, 23 Jun 2017 14:18:56 -0700 Subject: [PATCH 0567/1049] clean up --- libraries/script-engine/src/ScriptEngine.cpp | 9 ++------- libraries/shared/src/Profile.h | 16 ++++++++++++++++ scripts/system/controllers/handControllerGrab.js | 2 -- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 16927e0d2e..df74c04aaf 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1283,7 +1283,6 @@ void ScriptEngine::timerFired() { // call the associated JS function, if it exists if (timerData.function.isValid()) { PROFILE_RANGE(script, __FUNCTION__); - // PROFILE_RANGE(script, timerData.function.toString().toStdString().c_str()); auto preTimer = p_high_resolution_clock::now(); callWithEnvironment(timerData.definingEntityIdentifier, timerData.definingSandboxURL, timerData.function, timerData.function, QScriptValueList()); auto postTimer = p_high_resolution_clock::now(); @@ -1396,15 +1395,11 @@ void ScriptEngine::print(const QString& message) { void ScriptEngine::beginProfileRange(const QString& label) const { - if (trace_script().isDebugEnabled()) { - tracing::traceEvent(trace_script(), label.toStdString().c_str(), tracing::DurationBegin); - } + PROFILE_SYNC_BEGIN(script, label.toStdString().c_str(), label.toStdString().c_str()); } void ScriptEngine::endProfileRange(const QString& label) const { - if (trace_script().isDebugEnabled()) { - tracing::traceEvent(trace_script(), label.toStdString().c_str(), tracing::DurationEnd); - } + PROFILE_SYNC_END(script, label.toStdString().c_str(), label.toStdString().c_str()); } // Script.require.resolve -- like resolvePath, but performs more validation and throws exceptions on invalid module identifiers (for consistency with Node.js) diff --git a/libraries/shared/src/Profile.h b/libraries/shared/src/Profile.h index ee09298deb..5de4e8f41a 100644 --- a/libraries/shared/src/Profile.h +++ b/libraries/shared/src/Profile.h @@ -46,6 +46,20 @@ private: const QLoggingCategory& _category; }; + +inline void syncBegin(const QLoggingCategory& category, const QString& name, const QString& id, const QVariantMap& args = QVariantMap(), const QVariantMap& extra = QVariantMap()) { + if (category.isDebugEnabled()) { + tracing::traceEvent(category, name, tracing::DurationBegin, id, args, extra); + } +} + + +inline void syncEnd(const QLoggingCategory& category, const QString& name, const QString& id, const QVariantMap& args = QVariantMap(), const QVariantMap& extra = QVariantMap()) { + if (category.isDebugEnabled()) { + tracing::traceEvent(category, name, tracing::DurationEnd, id, args, extra); + } +} + inline void asyncBegin(const QLoggingCategory& category, const QString& name, const QString& id, const QVariantMap& args = QVariantMap(), const QVariantMap& extra = QVariantMap()) { if (category.isDebugEnabled()) { tracing::traceEvent(category, name, tracing::AsyncNestableStart, id, args, extra); @@ -80,6 +94,8 @@ inline void metadata(const QString& metadataType, const QVariantMap& args) { #define PROFILE_RANGE_EX(category, name, argbColor, payload, ...) Duration profileRangeThis(trace_##category(), name, argbColor, (uint64_t)payload, ##__VA_ARGS__); #define PROFILE_RANGE_BEGIN(category, rangeId, name, argbColor) rangeId = Duration::beginRange(trace_##category(), name, argbColor) #define PROFILE_RANGE_END(category, rangeId) Duration::endRange(trace_##category(), rangeId) +#define PROFILE_SYNC_BEGIN(category, name, id, ...) syncBegin(trace_##category(), name, id, ##__VA_ARGS__); +#define PROFILE_SYNC_END(category, name, id, ...) syncEnd(trace_##category(), name, id, ##__VA_ARGS__); #define PROFILE_ASYNC_BEGIN(category, name, id, ...) asyncBegin(trace_##category(), name, id, ##__VA_ARGS__); #define PROFILE_ASYNC_END(category, name, id, ...) asyncEnd(trace_##category(), name, id, ##__VA_ARGS__); #define PROFILE_COUNTER_IF_CHANGED(category, name, type, value) { static type lastValue = 0; type newValue = value; if (newValue != lastValue) { counter(trace_##category(), name, { { name, newValue }}); lastValue = newValue; } } diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 8631a84fcf..04921fe14d 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -1173,7 +1173,6 @@ function MyController(hand) { }; this.update = function(deltaTime, timestamp) { - Script.beginProfileRange("handControllerGrab:MyController:update") this.updateSmoothedTrigger(); this.maybeScaleMyAvatar(); @@ -1210,7 +1209,6 @@ function MyController(hand) { } else { print("WARNING: could not find state " + this.state + " in state machine"); } - Script.endProfileRange("handControllerGrab:MyController:update") }; this.callEntityMethodOnGrabbed = function(entityMethodName) { From 86ed61a15dccda8fd29196b72e8ad347c9ad6786 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 23 Jun 2017 14:26:13 -0700 Subject: [PATCH 0568/1049] Push avatar packet version for isReplicated --- libraries/networking/src/udt/PacketHeaders.cpp | 2 +- libraries/networking/src/udt/PacketHeaders.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index ad15d04db1..240697d890 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -69,7 +69,7 @@ PacketVersion versionForPacketType(PacketType packetType) { case PacketType::AvatarData: case PacketType::BulkAvatarData: case PacketType::KillAvatar: - return static_cast(AvatarMixerPacketVersion::AvatarIdentitySequenceFront); + return static_cast(AvatarMixerPacketVersion::IsReplicatedInAvatarIdentity); case PacketType::MessagesData: return static_cast(MessageDataVersion::TextOrBinaryData); case PacketType::ICEServerHeartbeat: diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index 2944c1ce93..6c42193e11 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -247,7 +247,8 @@ enum class AvatarMixerPacketVersion : PacketVersion { IdentityPacketsIncludeUpdateTime, AvatarIdentitySequenceId, MannequinDefaultAvatar, - AvatarIdentitySequenceFront + AvatarIdentitySequenceFront, + IsReplicatedInAvatarIdentity }; enum class DomainConnectRequestVersion : PacketVersion { From b8c638b2b7214d5e7f508366443a33761dcf8ca1 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 23 Jun 2017 14:36:59 -0700 Subject: [PATCH 0569/1049] warning fixes --- libraries/animation/src/AnimInverseKinematics.cpp | 2 -- libraries/animation/src/Rig.cpp | 1 - 2 files changed, 3 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index 0395d4d391..3e948a4f5b 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -584,8 +584,6 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const } glm::vec3 p = target.getPoleVector(); - glm::vec3 pProj = p - glm::dot(p, dUnit) * dUnit; - const float PROJ_VECTOR_LEN = 10.0f; const float POLE_VECTOR_LEN = 100.0f; glm::vec3 midPoint = (basePose.trans() + topPose.trans()) * 0.5f; diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 53e3f3ddc0..3f63f226e7 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -1417,7 +1417,6 @@ glm::vec3 Rig::calculateKneePoleVector(int footJointIndex, int kneeIndex, int up // form a plane normal to the hips x-axis glm::vec3 n = hipsPose.rot() * Vectors::UNIT_X; - glm::vec3 y = hipsPose.rot() * Vectors::UNIT_Y; // project d onto this plane glm::vec3 dProj = d - glm::dot(d, n) * n; From 384e2cefdb098e557fd801ce5d83b259399ec826 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 24 Jun 2017 09:53:58 +1200 Subject: [PATCH 0570/1049] Update make file per master changes --- plugins/hifiLeapMotion/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/hifiLeapMotion/CMakeLists.txt b/plugins/hifiLeapMotion/CMakeLists.txt index 119fe5516e..14f9bbaa17 100644 --- a/plugins/hifiLeapMotion/CMakeLists.txt +++ b/plugins/hifiLeapMotion/CMakeLists.txt @@ -10,6 +10,6 @@ find_package(LEAPMOTION) if (LEAPMOTION_FOUND) set(TARGET_NAME hifiLeapMotion) setup_hifi_plugin(Script Qml Widgets) - link_hifi_libraries(shared controllers ui plugins input-plugins display-plugins) + link_hifi_libraries(shared controllers ui plugins input-plugins) target_leapmotion() endif() From aabbcfd23dafecd99beb85a6c3ab3cf7a7e6b3dc Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 23 Jun 2017 16:47:53 -0700 Subject: [PATCH 0571/1049] code review feedback --- scripts/developer/tests/puck-attach.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/scripts/developer/tests/puck-attach.js b/scripts/developer/tests/puck-attach.js index 00d2ca5fa3..2d0a2e6d02 100644 --- a/scripts/developer/tests/puck-attach.js +++ b/scripts/developer/tests/puck-attach.js @@ -5,6 +5,18 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +// When this script is running, a new app button, named "PUCKTACH", will be added to the toolbar/tablet. +// Click this app to bring up the puck attachment panel. This panel contains the following fields. +// +// * Tracked Object - A drop down list of all the available pucks found. If no pucks are found this list will only have a single NONE entry. +// Closing and re-opening the app will refresh this list. +// * Model URL - A model url of the model you wish to be attached to the specified puck. +// * Position X, Y, Z - used to apply an offset between the puck and the attached model. +// * Rot X, Y, Z - used to apply euler angle offsets, in degrees, between the puck and the attached model. +// * Create Attachment - when this button is pressed a new Entity will be created at the specified puck's location. +// If a puck atttachment already exists, it will be destroyed before the new entity is created. +// * Destroy Attachmetn - destroies the entity attached to the puck. +// /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ /* global Xform */ @@ -46,7 +58,7 @@ function onScreenChanged(type, url) { var availableTrackedObjects = getAvailableTrackedObjects(); tablet.emitScriptEvent(JSON.stringify(availableTrackedObjects)); - print("PUCK-ATTACH: availableTrackedObjects = " + JSON.stringify(availableTrackedObjects)); + // print("PUCK-ATTACH: availableTrackedObjects = " + JSON.stringify(availableTrackedObjects)); }, 1000); // wait 1 sec before sending.. } shown = true; @@ -93,10 +105,10 @@ function attach(obj) { var key = indexToTrackedObjectName(Number(attachedObj.puckno)); attachedObj.key = key; - print("PUCK-ATTACH: attachedObj = " + JSON.stringify(attachedObj)); + // print("PUCK-ATTACH: attachedObj = " + JSON.stringify(attachedObj)); Script.update.connect(update); - update(0.001); + update(); } function remove() { @@ -113,7 +125,7 @@ function pad(num, size) { return tempString.substr(tempString.length - size); } -function update(dt) { +function update() { if (attachedEntity && attachedObj && Controller.Hardware.Vive) { var pose = Controller.getPoseValue(Controller.Hardware.Vive[attachedObj.key]); var avatarXform = new Xform(MyAvatar.orientation, MyAvatar.position); From b546d977f4ec3ff2874e62901f8355e7959e9121 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 24 Jun 2017 12:07:20 +1200 Subject: [PATCH 0572/1049] "EZRECORD" app script and button --- scripts/developer/EZrecord.js | 60 +++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 scripts/developer/EZrecord.js diff --git a/scripts/developer/EZrecord.js b/scripts/developer/EZrecord.js new file mode 100644 index 0000000000..ae397afb36 --- /dev/null +++ b/scripts/developer/EZrecord.js @@ -0,0 +1,60 @@ +"use strict"; + +// +// EZrecord.js +// +// Created by David Rowe on 24 Jun 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +(function () { + + var APP_NAME = "EZRECORD", + APP_ICON_INACTIVE = "icons/tablet-icons/avatar-record-i.svg", + APP_ICON_ACTIVE = "icons/tablet-icons/avatar-record-a.svg", + tablet, + button; + + function onButtonClicked() { + // TODO + print("Clicked"); + } + + function setUp() { + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + if (!tablet) { + return; + } + + // Tablet/toolbar button. + button = tablet.addButton({ + icon: APP_ICON_INACTIVE, + activeIcon: APP_ICON_ACTIVE, + text: APP_NAME, + isActive: false + }); + if (button) { + button.clicked.connect(onButtonClicked); + } + } + + function tearDown() { + if (!tablet) { + return; + } + + if (button) { + button.clicked.disconnect(onButtonClicked); + tablet.removeButton(button); + button = null; + } + + tablet = null; + } + + setUp(); + Script.scriptEnding.connect(tearDown); +}()); From 5da43257f70ce701e09fb54e4d760357d9173969 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 23 Jun 2017 10:52:23 -0700 Subject: [PATCH 0573/1049] Fix for eye direction when no look at targets are present. --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b9e3b48903..c138230893 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4180,7 +4180,7 @@ void Application::updateMyAvatarLookAtPosition() { lookAtSpot = transformPoint(worldHeadMat, glm::vec3(0.0f, 0.0f, TREE_SCALE)); } else { lookAtSpot = myAvatar->getHead()->getEyePosition() + - (myAvatar->getHead()->getFinalOrientationInWorldFrame() * glm::vec3(0.0f, 0.0f, TREE_SCALE)); + (myAvatar->getHead()->getFinalOrientationInWorldFrame() * glm::vec3(0.0f, 0.0f, -TREE_SCALE)); } } From ced9473eb34d624889206d54dfee1c9024ec8a8b Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 24 Jun 2017 12:49:45 +1200 Subject: [PATCH 0574/1049] Icon toggling and keyboard shortcut --- scripts/developer/EZrecord.js | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/scripts/developer/EZrecord.js b/scripts/developer/EZrecord.js index ae397afb36..d28c182ea0 100644 --- a/scripts/developer/EZrecord.js +++ b/scripts/developer/EZrecord.js @@ -15,12 +15,25 @@ var APP_NAME = "EZRECORD", APP_ICON_INACTIVE = "icons/tablet-icons/avatar-record-i.svg", APP_ICON_ACTIVE = "icons/tablet-icons/avatar-record-a.svg", + SHORTCUT_KEY = "r", // Ctrl modifier is assumed. tablet, - button; + button, + isRecording = false; + + function toggleRecording() { + isRecording = !isRecording; + button.editProperties({ isActive: isRecording }); + // TODO: Start/cancel/finish recording. + } + + function onKeyPressEvent(event) { + if (event.isControl && event.text === SHORTCUT_KEY && !event.isMeta && !event.isAlt && !event.isAutoRepeat) { + toggleRecording(); + } + } function onButtonClicked() { - // TODO - print("Clicked"); + toggleRecording(); } function setUp() { @@ -39,9 +52,15 @@ if (button) { button.clicked.connect(onButtonClicked); } + + Controller.keyPressEvent.connect(onKeyPressEvent); } function tearDown() { + if (isRecording) { + // TODO: Cancel recording. + } + if (!tablet) { return; } @@ -53,6 +72,8 @@ } tablet = null; + + Controller.keyPressEvent.disconnect(onKeyPressEvent); } setUp(); From 1ddae1c61ad02c82538d0360cfebbccd937a2c5a Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 24 Jun 2017 13:19:25 +1200 Subject: [PATCH 0575/1049] Change keyboard shortcut to avoid conflict --- scripts/developer/EZrecord.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/developer/EZrecord.js b/scripts/developer/EZrecord.js index d28c182ea0..bb173343df 100644 --- a/scripts/developer/EZrecord.js +++ b/scripts/developer/EZrecord.js @@ -15,7 +15,7 @@ var APP_NAME = "EZRECORD", APP_ICON_INACTIVE = "icons/tablet-icons/avatar-record-i.svg", APP_ICON_ACTIVE = "icons/tablet-icons/avatar-record-a.svg", - SHORTCUT_KEY = "r", // Ctrl modifier is assumed. + SHORTCUT_KEY = "r", // Alt modifier is assumed. tablet, button, isRecording = false; @@ -27,7 +27,7 @@ } function onKeyPressEvent(event) { - if (event.isControl && event.text === SHORTCUT_KEY && !event.isMeta && !event.isAlt && !event.isAutoRepeat) { + if (event.isAlt && event.text === SHORTCUT_KEY && !event.isControl && !event.isMeta && !event.isAutoRepeat) { toggleRecording(); } } From ce32f1704e6830dc7c533adf277067b444609b83 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 24 Jun 2017 13:22:00 +1200 Subject: [PATCH 0576/1049] Start/cancel/finish recording logic --- scripts/developer/EZrecord.js | 85 +++++++++++++++++++++++++++++++---- 1 file changed, 77 insertions(+), 8 deletions(-) diff --git a/scripts/developer/EZrecord.js b/scripts/developer/EZrecord.js index bb173343df..f6ff15fa57 100644 --- a/scripts/developer/EZrecord.js +++ b/scripts/developer/EZrecord.js @@ -18,12 +18,79 @@ SHORTCUT_KEY = "r", // Alt modifier is assumed. tablet, button, - isRecording = false; + + Recorder; + + Recorder = (function () { + var IDLE = 0, + COUNTING_DOWN = 1, + RECORDING = 2, + recordingState = IDLE; + + function isRecording() { + return recordingState === COUNTING_DOWN || recordingState === RECORDING; + } + + function startRecording() { + + if (recordingState !== IDLE) { + return; + } + + // TODO + + recordingState = COUNTING_DOWN; + + } + + function cancelRecording() { + + // TODO + + recordingState = IDLE; + } + + function finishRecording() { + + // TODO + + recordingState = IDLE; + } + + function stopRecording() { + if (recordingState === COUNTING_DOWN) { + cancelRecording(); + } else { + finishRecording(); + } + } + + function setUp() { + + } + + function tearDown() { + if (recordingState !== IDLE) { + cancelRecording(); + } + } + + return { + isRecording: isRecording, + startRecording: startRecording, + stopRecording: stopRecording, + setUp: setUp, + tearDown: tearDown + }; + }()); function toggleRecording() { - isRecording = !isRecording; - button.editProperties({ isActive: isRecording }); - // TODO: Start/cancel/finish recording. + if (Recorder.isRecording()) { + Recorder.stopRecording(); + } else { + Recorder.startRecording(); + } + button.editProperties({ isActive: Recorder.isRecording() }); } function onKeyPressEvent(event) { @@ -42,6 +109,8 @@ return; } + Recorder.setUp(); + // Tablet/toolbar button. button = tablet.addButton({ icon: APP_ICON_INACTIVE, @@ -57,9 +126,10 @@ } function tearDown() { - if (isRecording) { - // TODO: Cancel recording. - } + + Controller.keyPressEvent.disconnect(onKeyPressEvent); + + Recorder.tearDown(); if (!tablet) { return; @@ -73,7 +143,6 @@ tablet = null; - Controller.keyPressEvent.disconnect(onKeyPressEvent); } setUp(); From 6543b74b52a1ae18004e3d4b0be5f3947263c7dd Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 24 Jun 2017 14:26:01 +1200 Subject: [PATCH 0577/1049] Add beeps --- scripts/developer/EZrecord.js | 65 ++++++++++++++++-- .../system/assets/sounds/countdown-tick.wav | Bin 0 -> 9702 bytes .../system/assets/sounds/finish-recording.wav | Bin 0 -> 63128 bytes .../system/assets/sounds/start-recording.wav | Bin 0 -> 63128 bytes 4 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 scripts/system/assets/sounds/countdown-tick.wav create mode 100644 scripts/system/assets/sounds/finish-recording.wav create mode 100644 scripts/system/assets/sounds/start-recording.wav diff --git a/scripts/developer/EZrecord.js b/scripts/developer/EZrecord.js index f6ff15fa57..593f9d5fbb 100644 --- a/scripts/developer/EZrecord.js +++ b/scripts/developer/EZrecord.js @@ -21,36 +21,85 @@ Recorder; + function log(message) { + print(APP_NAME + ": " + message); + } + Recorder = (function () { var IDLE = 0, COUNTING_DOWN = 1, RECORDING = 2, - recordingState = IDLE; + recordingState = IDLE, + + countdownTimer, + countdownSeconds, + COUNTDOWN_SECONDS = 3, + + tickSound, + startRecordingSound, + finishRecordingSound, + TICK_SOUND = "../system/assets/sounds/countdown-tick.wav", + START_RECORDING_SOUND = "../system/assets/sounds/start-recording.wav", + FINISH_RECORDING_SOUND = "../system/assets/sounds/finish-recording.wav", + START_RECORDING_SOUND_DURATION = 1200, + SOUND_VOLUME = 0.2; + + function playSound(sound) { + Audio.playSound(sound, { + position: MyAvatar.position, + localOnly: true, + volume: SOUND_VOLUME + }); + } function isRecording() { return recordingState === COUNTING_DOWN || recordingState === RECORDING; } function startRecording() { - if (recordingState !== IDLE) { return; } - // TODO + log("Start countdown"); + countdownSeconds = COUNTDOWN_SECONDS; + playSound(tickSound); + countdownTimer = Script.setInterval(function () { + countdownSeconds -= 1; + if (countdownSeconds <= 0) { + Script.clearInterval(countdownTimer); + playSound(startRecordingSound); + log("Start recording"); + Script.setTimeout(function () { + // Delay start so that start beep is not included in recorded sound. + + // TODO + + }, START_RECORDING_SOUND_DURATION); + recordingState = RECORDING; + } else { + playSound(tickSound); + } + }, 1000); recordingState = COUNTING_DOWN; - } function cancelRecording() { + log("Cancel recording"); + if (recordingState === COUNTING_DOWN) { + Script.clearInterval(countdownTimer); + } else { - // TODO + // TODO + } recordingState = IDLE; } function finishRecording() { + log("Finish recording"); + playSound(finishRecordingSound); // TODO @@ -60,13 +109,15 @@ function stopRecording() { if (recordingState === COUNTING_DOWN) { cancelRecording(); - } else { + } else if (recordingState === RECORDING) { finishRecording(); } } function setUp() { - + tickSound = SoundCache.getSound(Script.resolvePath(TICK_SOUND)); + startRecordingSound = SoundCache.getSound(Script.resolvePath(START_RECORDING_SOUND)); + finishRecordingSound = SoundCache.getSound(Script.resolvePath(FINISH_RECORDING_SOUND)); } function tearDown() { diff --git a/scripts/system/assets/sounds/countdown-tick.wav b/scripts/system/assets/sounds/countdown-tick.wav new file mode 100644 index 0000000000000000000000000000000000000000..015e1f642e91b72578bca1c318f7a7c0d515d843 GIT binary patch literal 9702 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 Ay#N3J literal 0 HcmV?d00001 diff --git a/scripts/system/assets/sounds/finish-recording.wav b/scripts/system/assets/sounds/finish-recording.wav new file mode 100644 index 0000000000000000000000000000000000000000..f224049f97bfb1f4b042b44383ee4232e1143e67 GIT binary patch literal 63128 zcmZU+SGSeLzV2J$?E@515d=(_6-87ORLr7)0TodU>u$HU+qpXDZhwe#dA`IlU;r^7 zil`tUDhdW984v^$0*VTwzg2a9&%fS27<2Eonybw=RpuDIdR0CDC)JV%7A*Mx{&DW9 zd!C&CfBirI>!LHAbDsaZ?1C`?o9VT|HuFOAOAQ1jCXlVI5STP7nLjB^?q)? zJ3i1ZZk|a?!b9aAe`}r^LwQTb5=T&h_{UJvh< z58amVb=nhuN{7NfCHWzDdOkZ&Yp-aoOE-nP@`CVae$qeT7o~ff+uIxCHThD1o}1{# zxmbq%U+%ZEH|)yW{Ksycd)uvaFO+5BwfweU?>;GC_&sHx``sTaeb@NY$|QGzzdT

~x*b~-KeTq=LL-^2cPckiqA6aQg&C$01^`WNzw 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

L!rg(0$b03|HApRMgVZ>V~mN)p5yW`wrje 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 literal 0 HcmV?d00001 diff --git a/scripts/system/assets/sounds/start-recording.wav b/scripts/system/assets/sounds/start-recording.wav new file mode 100644 index 0000000000000000000000000000000000000000..71c69f3372c7a9785bf0fdf8ffb43459bf6d0179 GIT binary patch literal 63128 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%0AAQ)#l`rvawO77s@)D=3gai z4_cI+`jhxMcQt8Vbd4rYw(V{41-U6{w(?#eM|Nse)_r?Hj>RL-?uDE3wcQJTE+J8A6Y4rJSl^_jA}pnG<&G7m?>9$ygH=mU7nCHzU2vUO;h*TL?>7;s0!X{#^D z?JMwP7oUT>zLQg4@?PTiGQHtYxugBuuw2>QnIsQJl1{4@GaA+|eWTjuzHl zrxz?MtiA74GBSd;AIZ?BGF**{FvM$L@m}0Tobq~_moF{3 zsi&A!S~qmf$xX4b!S25DWS5N_5q39_n?fhJPkI;hGL7`YnWc8s}bHy8#gSc9NvrMf%?5*cjKsR zaNeV)yI0*8r0nii$*kj;5QM=UjcbzW1$RoXj2l->$>fxi`czlra1;gcds*4NxTAlB z5g<`g_XVNA(xg)EUUgp(=UV(D!h3N?qd9^wvd%?IroHZ7>X4m+~WLaWayJ!>uapF33@NFQylMFOVY+3lb%? zu;}hZ4~b4M1MejWgC>=moO1etL|M-^7Tf$+;g~-!tUY_bXpT&;@HWYVskl{X+#n$X z!f?a!?$V?}UW7cH_=4cQB=xC{8+B!!9aVfmZEaW49E7TsvkpHZti5Ve z_=2QKMcG~M=#;w_Xc)cY5J4DjZm}HiE=?+Nf*HwomCU*;p4aeuIi?pL2X!?j5+!6q zgde$2f)V6s%jt!(?iPfV@b;oP>hubov(`bU7dy4^BY3h6T?E-~_ys)K_$41Y`hxhb z>d97iSNnoU=QZ^OmAn@!sqS82Uv@8WFvt;13_nu*QBRb>Y+EU8b2vaU@knkXUHh2P6O$E}C5p3oc}2m`nM zuHs;JB7hvVNd;vcMnLm$GQGm;Y*jHY`%qJ#Z?Vg$Hf7npP+;M`BFNF9O=YmVd{@z? z)YS-|IWXW>l|%{7HD&EfPj-OaEgEUX65fl{Cz=%e2q#@qpST)97}Ct3to^G*3Ad8& zUfLJb4OIZ-7+`nttZ14SXC+N4k~~0jWO|{qNb;bw5ckgXawU@b(OqKkl?@kE06DylSZI?j!IO%X;?gwfXxgApN7qG{eT z4~MG}ey~K2l{Q6Qv_g)}rx%(d{0MyJNGpzsN?9-4&frHnz~bP^1`{>;f?TPrbIR2* z@kf^DwG4iQ?@HqaelN+uF5z!QSo?uEVe#(Prx!al)60m4K^K8053b^2P{%~*l=UH> z$@EI|$lHhi^b={~vLi`j{S#*No~L4q*w$F(8%TO~^H&I!9aPubnK zX~n{mEvZks)qcf|bd==5HgFERm#6J4fgJNknR>DV+7w$O(+eC;W?iP2CCv*1)PZKC zoTS(-w$A^WUfj`4FVP&8-DP?iT#bHtAW>2&>r5~5J2rcfKdk+Z`%M!ir7wsLN-RTXj5QGT#b&tpzLWOJx~`syjKD_7EG@oelK-3a>{jjp-qjn z69TTrVokOJ|Hf4CY%@=Gye-PQw%BcxG_T)Ve48=7(oJ9OUgF7aKE3FGs}dz74^*3q zH^^C?HuMF-uLuiBniti076 zBe04i#qXuQpej*fOXRqPMwcC$S;rTYfgI_pYAMRPCQ4LUr&po!1(B@iQnbc)_D{y{ z#h)Ezom+{vGyYCUeaiIWj;>sd!jCX1rW?HWaEXE(;YV<*cEX3HT?F=5b1v!bRb%(^ zdn3v^%_x%ke91NeBY^TknwRgnMEZi@M;ImgniN*<1+kRnGESkk;~ zV7hy;pWSZb}j*wBB^2 z7ew-K!tQF@8SOZ-A(?elG3g6h?}Q)uM%mq)?s0hG@CBJ3?9?OEM2{~h`#3CR9t(0DEXXltUZ)pX z8d!TW&C+7W?uFm;Eb|>-5C}thWqL`XL|A+7cwCL#3uum_P2rf3%sO3-vyr9lo}>RpCd-p2!`oz92Y-&75+k7YO6` z!0u(Fi-6rrrWcJHiyeJI+1v8r~$$i+5Mtsw6RVdXb8K%j@n1 zr*x0Zne+u6pnGX!_)IeEw2n3Tg5WQ@3`hUaC#KOVVjxZB@P+r@%CLTKa-s)23calz=cu3W+vVpI%IU;k`(dkQ9O+ zDW=rk&4I?{?nL|JFkQsl_4!R`fPjpkVN&6=8KWqN@(aW$rmnwz38 zC<$^Tv(ARsF2|ECO|wy2>`3!wbMq+~ti5>)N7`#mvyz(v9dJjpdx0?6Em{U%ZikU=aeIO}cG)Mfsu=d>1wAj^~X4Nrq7FQk0dMJF$qN7YNKaR;cuVQzb zO)qD0>OJJU;tOKOVD}ncSgsw(TIm$Zx$UEe}@db$| zyKI_u(gQ^vPCVJ#19b@=icY_}CmXLl2*WMWKIQ-DYJA0eaW}({(7HkDGoxwNNzM^v zonHf)b@2tEYb}pW$~sLd!jDv*Y}#8+Nf$vmy)?6a0ZvZ32%3;1iB+^IOQOUtWFpHQ zO<$02QzZWkANp%;XO`pviCCr=sb_XCblR?76D6E-921;!5+$;Gp^k_)MPHDz_DnCb ziE_$SSr=EMX4cugT1NfDhQ*8`>(b$6j*JV<&M^-S<<}PGz$yJ z^pZ3$Ucxo#+Um)cJlrc+qq`)H8|2}%FR0X}Ja@Et>Nw@KE=3=7^!KFgtlYie1GQ-u z?D2m{lo+NLH-siiaDKPVy662R4_BL6uzMNt?uuJ=D19Iu^M-F?E^6f%9r$z!y~RUXnau_d=WEyGrVlu10^MxSDZC zdt8krYcFYDGD5=ck|=TGBfA&v6L@!pwJ-B~bx*cTuhNsPxv2qByt|?~N@ks= zS+e6pLvNghI=x8nsVAGP6RbVF6}}+Rrjj;p@Lg4#qB#ZDUicBdE3QV%^vZhT8Op*- z`m}Gtlc71%A%!QKP6L`|l^C7u=ajtAW=fLx!S$Nty<>cB(q-6!%3n< z@^Cb6uzT_6Zc3DtzMy(nBY#&U5A3~gHM>w~7Xc|+@^Glzq)f@wPwUyvy4+)9Es!e&)ykz$(Pj-^NAY6@P2d2~M$L=MWb@oi*N9f5`f9E&M1E-(WA%>ve*Q;xD;da|Xfu|B=voh8i+KY}ZwyB);z z;*<+=G|SMGKd6mq9MsS=r*R{`#7hA0Mb{fGcH(Lz=cve0_z`KE1z|KP>(WI~x*F@d z7kJLWUf^o1BS$X?gFIZ>b|$`{SBVmCCCN=SHEvi~dr9+(V?wkk_+XHu+d*#hvtoDi zuEu)X8JYEoddjQ5AW_!E)u>$rWY$YhcG%}|ztIl8PkceJ_T=G8Pd2(UZD+VuX9v0n z;u1597E8%ZF}=_@UZTL#)ks$_%6k48POEL^E7`r=Rbh8iaDp)U1nCPB?=HR|c=x8= z3qD@D2xyuWPqwL)bs7l{mU%dtUeSoM4$f@az2JyT-V0YFyce1y-5wwe*UZ&OYqxlJ zf69NaJCSRknaT zTBnyFN8We%r)>F$wXa-_&GK;C)hM|sws^^`&rAywo@{!mr=k%JWfu~^7j9Kpd-8Dp zC``M0vhnsDDSoK^Oa~_j14e)@0vd!z7aw>$*_tSs9VJoHtnCaY7{>%&dw4I@dH4~@ z!-*$b5Qb?P@CD^V+4-iVx#(kSNT5pcU<6KDv?&lSycZch;k^#i2J@-^wAhh-O&dCn z2|74I7-b#~U5?$W%)`m<_4P=4ZIgTW7RZkMv=b# zs920%$n;`2Ce16ZMs6i?Q_?h>pQ(L^1LlkHZ}w_Ql$^mGbDL}{(+dTjmj5^gm+Krs zj%CX~6Oo>5*}YI;we3uJuhNr^clXuw67Mc;XBKVB)AA2@2f~Q7{O99a41d|TR!uLI z_1_d>hyn}mrTmEYWQ!+Tnr4mM(b~9C?+X&%E5Un79*%t%SEIuhgmY!T_62Q~z98AX z9KIkr>s6cbBuemP;tQhRYZ<;Tx*GWn_r(3yjQ4U(FWL=t_o{oclWJ4AZbX|Jhr4PH zet!@K-*ti;30r}(E`34pBiu^T7bGqJWluIfHpxxh!!Z#(yqB=M@VO}KX_X=jZ97YS zq;Z2hoVpqV?5?!@+h%W+;PzHmW0@!s&Cy9;5KXga2$L;$G_ED#N3>6w>BT8$dTo<8 zN($1vywag9|9n^7y}-;&FOM%srk54RgzjGSDa&`&M2X(fXj5#n+oW*=21>OlqdnQE zF*qh-k@ogyOE|@{39Sok^qt@k=&HFou!F%`Z2xArdf9CrZg{%K-2DpN++pL z^d9{2lU*FEUC7zJV0U%* zvP>@ra#VzYHYIPAWWyW#Ho)$BrkB;-i@QvbquUHKN}AWe2;e{v-ix;^@I9+9NcoZF zl39mk1z~V2wPY`Pf~$euE8xj4c`rkgiUT>aQ$JSCku)!80)9kXjrF!O*j`RK%rCA+ z@darfjzo#s%Gub4lkS*ddS!R>zW~}TY9vbduH@kaIfgaaqJp06G+a`j^guDa@G(hd z{iG%jv@a-eM@!3pM$@eDUXtd;`A6y#7a*DSFwaiY7Q4Q@hQRc~WdgfP*JU$Lw)lc@ zrO?&L?})|?+$vR?m+yhAk=6{R7d{^lMu9I#k)t-vq9Nl8lH3&gHNGHrvZk&^crR&# zCsE?ireFjrPqv{+#gQn%q4An08x`TWBoELWOXNsq-MnKt<>G2Yfml#x)}<$#KWFI+ zVtUa*N>BFdiIP{oAkn5Axv5f{;=77>m!?_iBB*<^*$gxfr(Fd4Mv3fR^q=F&CMVGY zgfY5+-K}>uR@1A=7i2}lIPKuQV2VD0&m>V|wdFraZb}>zy%LF%AbmlaStm~`2x9=f z`)E_*YLv!}>=bHJ*>;8}TYI3y7sMMS^!Rtyw=Blv@*+`!0=vL4y}W3S@FO&7b4MFI z+5Y?DtJ==SjSZjWoO1QrUr+E}!IF-b+>~gJ@FVbEc(VNz5&%OBd_nZ#zUFF_>BV>b zQg$zKHKI+BS*K%!-Af!3N7hp>@E!fk!> zmqBx+UvPTu{d{-^a|Ww(^B&bSuXZ)kMt52r6HKoJKjM29gEIILa&UOEUFFFp zxvf3fF#CUqtI?l^FWVco`1O+Jl}6Iy7cXt_>|Uy@>kCVMUV$gO-ZU%hF04JCY!H#W z#8dJkRbP;ta$K7r41UqANk_r%;)|-9W?}8&z3_XHhZE!|FDyB zqgBok?=HKSww;+lG?K#F%R6GcJ%g)}$@wLIe{Gt@YY#s{UhfIJKc4Jzdg<<^z93i* zcrTJrd{<|Sr?m(9Z_>Eozvg`F3rp@$aRSEVTBc32AV=N340m+4C|_M$2~P|^!tN!h z&#GzG!0v)=w5!o!j{pWmlu@UT72`M>=-VrtpnO z%fF;PajOb)6yD274-|bt^gy9G;+UoFj1Erj=+HmwUdS6IbTyW)#=0*^lLt+W8{!LM z!=mM%{&S|6c(N_iOOAY`v?*zth25oTRv@lUZ_ zdZ0A3-V5)pB!%dK0v9#&WY>GLHO-4QghqfLE@ zwxvDU+|lRx_1vWyldeX1b@&mS@l9QgX*zn@aMWR@7hY5nC5h=Ji4tB|V)x2+^_;bVA{D{{)99UX?L7aT17yOC(g6fG9*xj{~JSe9Z zyBBvf2?vq~ybpH@)VdpWpXr6~fv(0tq6GCn3UV}k$xT&xIK1{uFN=R9z}n01mHttF zEu@hY)?QMd;%Y3X7e08VmuQaS3xcnLA8~v2 zl;hp4E9+6b_SNns(~B-nP4m|CaE7K?aZIqYX;-80Ui7Ks3qt9Ewa;1<^aZ6MaV&Yb zIk+||Pj=apOV6|pQcf?n4Dowybs$ID z;D2VP{*#uwh9Gw|2!nJt%DQwB2)he%6z?t?hPM3QlsugKrr3iMdV@A@uzSh$f=d_2 zg!Vwa+Pz9wV`6$q4^(dG9K{y|KhmVEyIp0X1Wz2i7Z^mFW+hP~yq9z};-kaW$ajU^ z#W4ZGV5jDkqy6G)WcLz;LF0xX$B3&D2NToFf*g5?1I;n5OLP&?;RbR{J-zfmp{&Du zaYw^@m0bk-J{-OSnr7)Hkvv?7G7lHwN6@p^1?eKd)yO8Kc{rK^v}qQ9!y#I^#A^?` zi(>*;BR&YptgEY$>@MEjGEt(AiDqeDHZ)r7$aT~5FO3^yf_I_Qi+=>SDxH3k=9N=E z!olv!J7VZUax3v&aZFUmk$KDXLNO%|Cy5eIX5F!SiLy?cMooIMK^W32BQ5{`rA^`Y zg7;!`g|%m1RGw@nXAZn8yw<-E?=FoS_+5D268%M| zSK8#%)mU82(5CD&xS-ZBpM9--S4ECxPqwhT+;^R|ivWIvlccUjX*(0QDyfcBoH$8+ zz7%bW=Bj~F^Ki8#`8s_^tZJH#9XP?b8V$<27w;~vM)L_C67>bqVkg>EA=(sZWQg=Y zNmpZHdNB#vy~s^z%Rfyjaz~@AllpAt$)-c{Doro6ok>??B6&bx5P7&l{9besz;22* zg{zT$gxyOLC4w->k7=UB@d~0xn^Mh@Q=Yh^h4-R;eGv^N^)3RD-FaUp{_>vFM4If)kva*srCl_=Gy~LAUpI*}PU*HQ0(gt5mFWhfvQz)>qd!bFyhp@iv3zF&O z?iEjJkxVAOAaZ=<;mWQ?7!Fu_P%)nDvT3$Vl!&qp!f4iZhUTcemr>q}?>Zh{xaw+T zlM~h+rVkf(H)HoIGwbZr+BC~XIfgyE7c&}9 zHclvdvPlCTL4nmbTopOO?i%e23Ju_G*}dc?p1IO?CM|Y;Vm_i_Ku#Xc;>m7!l=DUj zsYLY!(Ig<+l(ziK^b%JiS?s>@3L;A50@0={>@K+})u!sZ7kuW04CF|^jwVWIJ3C45 zj<%g8kfXeUDAP-Opw>tp4qvn&M^c~cUYv6E+Dl)MPA|A>bxd&Q^17wGf>=&3Zly_N z*70O>M}GuYGRjuIAn6N&F$7^mc525PuG#i{zrJn>?^REf;6r+wJA~il!s%wzP@qJL#9`mD3P9QGYN)(>BTn}c9+}~ot>va81P>Dj+pLVnEejfiwI{pu1;H%+gbMU6?+%hYc;(5~Mp9gjf*kSMkMkdr7oabQ zomyRuvU_E1c;oPyqpMMr^^7}Oly&LJrkOzdf+Wo=ryM*oOwzn@0qPchFSuewj>_7D zFxUvLismTqh~W$eVU)fgb}u>Q-qNIklbllya>TnUU5)a>QW~U<8?`{91V#W?Bku)* z9L3cLyUPpI5e#hcQ+ATaf0Gi`}bK*5SQ)iAUaWb?jb>FbaKVT^fX$Uc6o?$~t*C znO>!<5l2LO)6;=4{3LxxjNMD#hr_+fclC5N)*1^C2LJoq(KsT@wlj7wCL%5W^17uY zN_cxl*j<`trNz#nO@;Sy==7(@n?#8y>+%YsrasZ8$PMhs4i?AtyWW>3mC#Dwhocp{ zay2#~$6*DoM&4N$7w%>lf${}v2g2aRE?kYg z54?e{G1|`1rf@Z8^13C;y6a=#F5AweX%_4!eL=&NA0f>viIP`cjkrgeO|Mc}_w)so z$~s${BoC^_4YUAwFZ^|MH5PX=@dfGhVguAf2?{K%Jtyx4Ng+WPc(TRSi2F_Zf}|(= zl{N)dzNPPo9YLX^i$M7irkCtqlKLd2t!-!A>*~qI<-REU2-nrfg6YLwA?z-mY`Sc4 zHI{j}I`35?NB9w@muil}kKle2Ul6FN+P&DRlLI-HuONyqhP(Vzi8B5h~*y~wQNwWsY2-mBWZxU=<* z5?<;dH`TnW5sn3ZBpnrmA)ajXFW6oF^K|!;9w^*zu=aF!4~Ml^lE8kVvT~I7dv-nyx%`0tZqZro9&WR|ZkY)`f+t&9dufB$#tqor>Edd{Ck1i@Z}3J*i5wk0 z+0vvU>@ImYb}yP#RGVr(z4Vk%EZJRJ=%npT6D2q%r0uLqlsN5b6n+H0TC^!u*15H+ zz98C?CM&|AX_k$2qBN4$^KdvO@CEVqjIg`xUgS9rfXk)Djysy9Pz&x2d_mc}0cG8? zd!fKKy+92n#1{lUgdahT`I`3+wdFtZ5)c0qJlWa<1#8c(G+dFRHqFW%O#_kog6i6o zDC>^gRGH@WxEjTiO%D`_k__aCzn0w#)~@LVYTkAnEtz!#KSJvBPvJ*sQjt@xeL*F1 ztS3qgu14lQdAKrBQocZq@~6Ha*G~F^$b3lS25o2Z0(IGTChv&xUGW8>DAJQnCTJK4 z1LPRtN63{hz386pmv^qU#=9%5J=zq#I>L{@?nX4n0)7PKh<6vw2ZSNt)u|_&od@J7 zXy{|%kwl5`UUElsE1kyYb4%D=crRRy!tT~v{zY@-MMO=MsNYMJ zb#0o(8;UmNm|i4Ed4XD9Sdw?d@OxFhAiOK{qz#@t+|06zK(r||$N$R1DZ(iE5xN?k zAt%-)?^_#AUy^E5@`fueUV5O6yu_m||Kj&zN@yNVG)LTT>I+id>jg>M_UOHm=AEeT z!|C)=c6W&3j`j_C-tbp`%m0GL_+NQA@p~!4z}1L0r9IiQdy!0`?Tn0FHNE5=F@Ga) z%HiBd9>DH4AxHVHc*p61LP28pA}cVD4o*^^_{`;w#y=v{OHa9avf+q!(ddUSD3azy zYnQgO=Y^@YE%0QETa`vq;k{PUKhEwYZD(-D;+T-kI<7{KFQ~RXU!QFS?~o{=$q07W zfiOzm%i>n0GX%#3-S+BgEO1OX*j?GZ>@D|mI4!)Fq2Vy%A8|*Evkkwzyxs7mAhT|8 zHHtPR2!pe=R=OGuyq9)xwkxbxS0g+unRVXg)#>F9THYwhe#`G=+BA#K3P0k@Gdo@&dK;Bb;)aDzLlU(G%;hAPQ@be?(o4i7o;< z&S~5zc`p<;@^I|dBueN+CsD$y9k9DewJE&zw4I43TQo=dm9_1Rlo?I4Y&Uqa*eCB^LDQ^>;YsaYPMVju>V@|b@9vjTyt_;<<}2ToQ%;&Ujf@k^o^0_2 zDRQJQh}2)r=lLJC+Xb2z)Fm%gCV)u@?u*xmZ{62DjJ$rj{@cR}-T&0m{lU+rH1k%wb?xf(B6l858PY4UKE7pOg5jnWrn z2Rl63SUg|ie*8Z)&GN#Mu)8R*u)9r7vmn^&4Oi)EEm|*vk>7~e#w=B4owC#)@2UvT#qwBnv`2qd!_v~^0oX^&-*1Z_u zL5}Ez>|UiOTX!!q>!f+}3|C_{y(D>1Z`{DUtKYRL4_Bsn`PZwf(SD$5-tK6cE_+!# zqIc?Y_CuiUjQ4@@WNR0JD(j+6p`($9;}yhrQIqD;_pQ4Z4j=ihl`lwJ?9isr9MzMJ z4tpq`z)?b?MEaERdvQmr->cLdSE%L)a^%IMH_>?MY9t}AE&ufws3o&b>gT6OnpaLa zHxCHIj8=X`ni=rg!)KC*Bju}UUS99G#jbWH|JGMsjk0^$bKy#MhX&ySPk-gf#)TuA z<63%NXTUz8O~F`{T?Fu6Bw>Wz-GwGDyq9{iIpvin+jL>eVtNG{H|Qe;Vc-yYPp4NG zePKymjqKFwY82j!S25@dLUX)cw)|@sfxII&F=|(%qiGhW(l{_JU5#0bJkLmdqP*w} z)V%q}^eT}fz5(G!a5XCL1;Qw&7k?Yv(Z$3XE&ooH_0kuF^ZADwyqA;Ir@9((=u|EL z=&23oOh%d;@h}w2$Kp4UJXDG1J@{cE*7nW!{tD#Nt0(0eRWIJokoNMaI zmJZHh9_hMqXaOXJ^p3_C1XitFjhdUM%%)Fd( zN%J1(E8z>W;h! zX4lZJMmFrG7nURsN7{8bjuBey{OV$5!~Dh%v-jxTk(YQ{q0zq9)d*tSO#k@d3||oM zh>?dQ#RGB_&5>k}PA|J0b$kk`pCS5=816Svzc$S#d_md+C4I`@1?f}1r7!W+G&jX} zRb^chC1qD5Zpj|5eZbWyjtO*5c52*j&88P;?k=1wnxk|zde~j#qUK|BWwb^m(!+MzN_#fBuYwGBka;RQP#y5 zR5s1Rk7(N&T?Ehlqj;THbVXU`jS^+;nO=C=a5a(?5`Lt!?Mr@yJDS|oYGHSIQS3Ek zojFHe5dSLfXn7w_x(H~0q|=Yr=bnR4=_25cro~R0W^smB$~wGrGhYz6h|GHV0yQ|8 zOiYE$%o;cCo!k)`2%I8J%BdqqW#ct6|g8zoI|xbnKCu)Euo-NhHgOFXKq%kR_@lZ%+U9~9^CCcu)=>gWhSW%lV9h^A$ z;k`IH>|S0n>&lPRyBh1hAlbdjo^054SbNQ^<7zBfd&3(gd{_KlcnNNCA1gn?cl|dG zxP78cp=(qxP>Zq-(iF{6*xfQWMbj(@16O1DMoIB|?Q(Ha5+&vIlBU@@a)hmHDJ}oC zcj!8rrtgUH0=4vHm&!WH8Og)pYP7=ISIANQUN|Na$Pu4&wR@GmAiIcn**N8;C!78r zJ>{IjyRVvNdBG5EO1cQ7#m@gBZdKag*{KC#)bntntm7wk0q-vAMB*GvgYbXtUiyYByO$(NM4LkO7_VIf z^aasvimQ>|jyBC|Zt5<)W0mFw=WO9O_f73|p-r=rDDiYPmb(|ZsU>u)GQHreN%P{{ zL~|@%jiOC8xf-|8GL0v@d|}CG9!?uK#wkCdsZVh=vIPy0+!V|Oz94ol?P}y}yn08B z7nbC^(oxsSRXy2`7CZV#;YZl1nO@S>Nb0j$Pc})q9gai^bMO$13%(#}JJYVl?)WI> zyOJoeyivk?*i-VcwaSwn*}V$#a1quXb&b9tzALXFk_h`5-zIHm;ADLTF>2E+Sc~1O zM2^h&YWFIALFgXhn9$uz8#gLXHrp=R6nBRaE|hVyx~xLUL4cQPW`3f%JDk-kPxod)(CG#IYPD^vB^G>4NMY&|P~-`QfzXJ%hhVA}MCQn|s8#Co5@o(qzlv z46`n2*3QEZmyVM1O}%G0lmy_f%ik}4nGV-gILGVzF~b(FX;Al$hys8xe|VPgvSilYRs1l?^oO14R}&3#^dyVr=DqW7w- zM%W|Vi*qZNBXl>85^wZ-T>DeAc$oG3CtZ-2$@G#)`ZP43sxg}EOfUb&cc)iWjr!p* z>n&AdG}-H#UK8#G&y;pXttzY0?;6+VVVq6Dy()_!j*`{C4s+6MF2`~nY?<}aWXrC+ zV{-G-#F<{b%P|*5rWY>?ZVE=Mfm-r51~$z4hMU*b4z+J8FGx05G3#C!n(Vex{@1!J zFfY0+pu2TB`h86=-bWV(B#7%1=SUaC4`=s+b>9+ncS@Rt2)G>k`Em^I6+c`j2g+s( z_rky)l#`7MudGI_AxB9rj3jRKoAIzg;s%WVQ|otJjx=$9(;q&r)5OzaV3U(w=yshM>Vf-cE+5aZRj^e+j7iQh`3g<{aGOHTnDCsYwT)Ps#G^-lnSsJMGM)NWI z%3T(m2mY7cOaGMVl?+bWp*d+byH_;X>9UZ|4EN%5oE;_Y^O;`Ddl%mtlSn#qQ@Jqg z5j5HUyeDECqW6+T!08xn%I-xuAmu-b2`MAbu4u9wyBBv2+$-AMiCKr*OC(LhQu_%S z9Mg*~$mJN+KIm>7C0K8}SF#9_7qrc4OkPlQL6atXO5Dih=(4!1|9AfjvknJ4$Pb5E ze>lv#6g$(4zS|q^a&%!d@`5H+qx8I47qq%`aly_x`#!Prk;Ml_ez*qiH9WU`V(}2) zR5(ZYNPkb5b=@=ND2Z=Me;Q_eIDh1u3OBWKIgWqdDA(<==%%ZJ-A_s+t}sU$;s}yd52HB3BIfwX+L+e z>D5y;hI5Q(ed4Az4<-#B=O`}-Qu1K`gl5;5Mz~ilNBJBd_eLj4B^|D{dwKci-OGhB zPp{+!rNb3dMw9JNR(U~gq4L9F)#`F=>4LT?|NP1>M;t{Z&GIs9pdPhbZgoKrq)Izm z?+ZSX2I~HExa>;#?=BcWJ#ds9oRcm0zQ%$dM zQ-0lY^ZNFoyD}!=UX!CF)2sU7cBfZ%uS~C2PPX0aoZ*7;(*7WH*VZ4@o~qHt_*kh` zE9F0$Y&WsIpzL0gs&S8_9?mbIj%F?sZ{o>|WFK%I-ByuO2tG@9E{EgB+-IS@gGV zzP)AE*RQyvO)m*rN!-|@$@VJM^h!>)o%&_|yC<;))T&e)ag@vr)bNqlR&+s9?2@N! zdTDZm+IP6AZNrkR(Rq4}KauwK{lV_#U;TegX=iaBV5?mi{@y-<^*E>AXu6J=smoE44%h!*7sRz&X=mZ4s8xOCG}&iV1NA#{vNOGsb{0)`^H}%G@ppE+ zaZ!#E*;Dyli<{c;P0^tF%6qz?Fzea9`X_n5WHm}sk+_kLlFH!R<0x@YNU@VhI;$FS zj&p}={BRSq-avPU+m~OH_~>$+93??_dDY6z8(mO;A@y7QaC}p6uXxtqL*)`T@9&a! zmKH>s?Bpqbr@McAWRStR#l0H4SKPea#pRp2ta`-$VRDrC%7c3qH^o($%dxmAxiSaP z-9roAElsw5IMYjW))#pQa8uLtYUZR_-8-0dz60FU@ZZY^7f-B8la0NKZ_4l5owG8% zbXZ^2{fjqR%D)U-yVqVvNr#)l@6!dP!*xnKTVvLjM@^dSj-zDZjpmP$MNp`H@`7BB z=_uLy;i%KE*J@iS|G6A7u=HML{_)f|`N}U&(yWaZHx;$&X5PIvT-wnE!P#r~YM}P3 zAIiJY57)f5S`UZQyPOzRW9?p7d!uDFb}q+>n~L)wxL5Uv-Q5-Lm8?dny$eHk<{N$a z;Z}Ap3@kTq;UlxEadE=Vd-ff&9JxM!=Pfn8=)GKyHpwvS8kY9BdEq0`Wc#}5f+`0} zUJ$?YaZB9P>TM|S^WJoqqm1p!YLqPhz`nI@cQ=wJO|8?oZI&ys|Xg>fhCuC%iQNwbZd?3ONQV%CSN^|PI~IvfADW!B3N$DtW?ckU?3 z?gh`BF2_nc%k;8S^GzkIaZRo2-|xv%>|Bme`&Z78kNIKZ zhbvtWm!B*GuKf7npt~I1r&d;D`Qf;K{^cP;N*JiL5r*waAmca;Y3cZH9%yv=Le)bf;l z$L}NuYB%Ly)^2n`b5>(C*_7+17u4Pxy*_m~Yx!B(u0eOdk_!WVPP?1Ljcr~KeZ#$S zZEn=S%Cip7d|a}V%Q0?V3951P&S_^9UtjLeU;Sf?o7&sq+PECUO%0M}b2+Xa8lJ@S z{AuLo)tptjpzZVuYTuo=I*XR$gW7R4P*bP>rpn+gNF{!S^> zXFRjva~%FkH?-J!_u{za$%`|`&kSE$UcUJ1(yg?LVq(TKU8p#W0}O0A!1VrM+2V7I z62==HZ}afU<>wavGG5gs#qRTVkK9UAid~vLeC1(a*LP^k`=%T8zmp6dwW?dm-$wI( zC>eKP=?t#z=I)s&Vb*e>Rx4US97g|>Rk}XuM|`Dpd=P=B$KNbo8F!-b3Cq`P^{i8{m_Zpo+ zG@j5R3ia;tLVAK{Vq@T${=H6}2WzQV{STIR?YntN?*-|>CF_@s&v9*Iq1}~HbXI>} z?ybqC?RTACC3t2wQJBsXy*s*>NV@(;wQ_K2L%^fst65Il>W*HVzw_nAwX1_%+BnBb z#hN&b_1)F8e)9?&lUGS@8x=C=f!y5#od;0B>Rb+ymFvwr?Gzq}Z+8TkhyM_@hwI^h);(|2ZxhYP+1g&6v{orY3jbWf=CEOHTfIIE*+C z+*?pU_tpU=%r;|Uo?f{yl3Z!qz$J%`$+oeY7_0ElA=)Oj=?2+m896&FMZ|E zqCNf^_{i1xx>6xW$ESt88Fe14yh=84ceLg}?t8r7!+zJaH@postvfmz&z3uIxNhVW zTH7MmrG$Z1x}$>v`dzEB1u|RtUgZEQHb$aGw7Vy-O|N9X;Vp5F)UP$Y>MQp~C%KXz zS~7zMYK`&J^nyIg_mT_^1(XDFYDb~oNl((ZQu$uJjEVl3m3GVJ8$)yk@DYh2rdNxN z>FJ8jfxdW$UhHw~Iw(Qh0COCKGd$r}Sac^<(x9OX@!Jj0*E0(R*xonf@ zIw;`kqsiSJpn&$K%U2MAJxZ8TsN1t1je~!E3#>aH3V7x=op3YxYuwSZzXs9+c{(TA zs(t*cT`{op9Uc8h6ccWxywT4>?O&5+HmRiC(NVwo%G2k#mrLHbs4AJErSYuP@Nc?7 zE8lCvGslL9kiRA_GKn;rim_y0g4)Z>jSAVVlERl=@q?~Wavj}HYMb2cBoO0 zg3g~zx0mUaO>~zOXTFC0sJ~q&{vMGudx`*DIR+ zlS^CbwXeLAk1(*?w!AdjV%c^(m%Eo%ulw780bKf=Y@+M^2M~b?&%}<_9gRD_-|uO62OL3(`U8@+$7{nZLn*Vw(HP#rh!wa`@T0i zw^FH)u>-Yx$+N*>^jFDNP5wDHrjVXwOw4z5OC@FZ`sOwvCl0Xj#l@Rr-e}rg+4xDt zlAe^-(zVu78S}|jJ#?MjtL|tWd(#~a&#VjM=aLd+t9I2?Jl)Z0Y-zu`E;gn=gEHCf zg>&Q%S=E9i0&F!>%Nf37VY@4&9A9=1zGDG!oOM(iX z`F{&+O!rc2_v-Cl`VK#~{N&;b*b5g%N5{85dpK>GX7NMRN59r{2ev=uh?ZQ5-HO(} zcCU77Ej7Ku)VT&KHN3rUb@?D6hg$Vyzm<%MFm*2f2?hLaciZYeq|JWEe*Ngy=NNBu za(8L}K0_UK#YUea57wvkhknGqP9s1I`0|vyJEMR%Ok8rl@-$~Po6W3Hr)reUV24b5 zgM2S8?TL+%E3;Lo(=xiF=`(5VdCH=-ujv()R4zw4i*Oj%zEj87K#NvT!13|H?v?4a zO~?tJ*}aml97F2D*m|4I;W)rtjzN0DC3ls~uz>=4&Av0<5;kT#y}WpuvogKRhf^gk zMQ3p3)}>wfUir!!UfU#BR$HC~fg2?V-!UXXxVYr#_~Ja^Xsq1bWco!hu`#`tr!Dv# z`@>wx@xYe9#@1%{THLh!RxcrkH^$`%O`kc8Qoo&FsaP%y9*S8B)9;HraD~IbBR$Z4 z52y6C>2idFRmOy!Ix4B^o5H|SNkRT6_kAVgMDI1ey?90T^3T_gXitnn-R`wzW77L) z_df)SZ}$oci1W02CI6g$PLN9M~6zX+h%y?$B_U_7g_lm|7MwH~rD?2(q zokG#tzgOBpw7bE&>y7p&`1&>>$L~so>~}4VXX`7c&yt?R%T@_FT-(W*pqPk$MBYbP$(ZZ}jo>VbpJ{q$lmy&i2J2{?(6`MxeFv{z?AGQ<|OXa-@`p zQ~Q^foqFPuqmufNYz+DlTEwg3()N`X8zcG1g&`OGkJ?(HfLf;RT;0&o+OMS(PR&{H zOsU~6jNRN_7aJvv;p!{rS=Zi034<&9l&Q)? zfo1cRyL3%2SMPm1uoM%?n1EViW3X)AXx;+&2>nQL7&88G$x`yMF;S~#_u`tHr`MER znKzokDT;~b<8!nZ<&AbZhJlsoXL=>yE7J?-7$wZA^dre1p)-)HT5ODrnFGyPGQu!* zmHpP(y<{?*Uh6$NJ|3KEY+1V;@gFx);nnU1fwFr^tlzjC^OaLFhr_6^T*ibsgk>|6 z4r}w3$9eEXaIf@D>C)D@45y}664KFjB}JZSL3Z z1(CR7+qv9l_kw5oUGtSc@5Y0Bm5YoLhGHVW>oa}rUX9%=Is*)>3!}egyn6BF<#~hM ztEE<@0OcZcVbFN`%DQ=Rv98zBpd8xGs(HwAJ#@ zwIMM5#C&f<2gxmNp;|>q(yN2UdC&f1v+-o-(dY)cp{oC=^Na#rZ zh+d+JOD_MauRP6J@}}O~eNf8B?&ZikaQ-M6T7KCvVPjS<#}$9gf!%B3k~dF4In%j3 z?Oqh>zJ}l<*H$+#4@GJ1-y=_Lvy#jpclYt(!6gQ^E{rH9T#ghIao3SoZTzl=3?rm?6-1h%ir)u$E7`PhU()^YWS3j1^bVG^&wLr zZ}eO6%wk|&XfDUXx@-6104p}8b75>K)GHOM+<|;8b9+OkSO3a#XWy`M6vfL)i_=H$ zz|~hIlGgNUPhUfKU6s97wLi1Fr2ernFDbi!O1cCT*Uy?AH!O;x8*u`$uw z)1kJ(z53_JCwsZOqq0*m_DXav&UKwWNnW%t6=)%4;H2&@1)}n%=*x zmzcPBZ}@9wZ}VlnjEVNbN`}^MIUFS!nzwnvy>L^emwX%33zIOR_R)LI)2nm_Vd~-l zGrhJx$6Oe629?Y}{dOn4gv&A6s@seS-$was{H~vhzsB}f2|3lu5yb=)a3i_WttwZh z`F@Xqm6;3OosyyDB=0oy^cqf=ka6MomChSYBM`N!j0rgfgKT{2w>>H;=&sG>0f;~{ zCem7Jr#2r>9naLN7Tl}Y7#$_1mn}ER&~NoGkIzxlNUnrdW%ttFV0sn0i)Cx#4&0m& z)IR9$20qf!@zHzba(u_`<#J5t!EU~nZT;odn?t)iVvy-)F~bPf7YMs)YWkm z6G81=j+ywNU4=x%FzaShGAfApI!$5k3_X*@H%R#eE#3kFJ)C5Kw_z3g7qOLP`JICtP0?&WuNVc3!@-)l-{NUltFFADX!wbVN` zCFIoZg~Om9(H>@}o|Q20k^Y1zCN?@;lPlBOz0!GL=aJjCxo^Wm!IK*IJ@uPh8JT|c zBi?9RB%h-kku%$*6CO%Mm{EQ;0zAUeS2+2b>1mIgg7BYHyc>+PjLQLO$HK@p|${+9xC& z-qYVn(+IWK@gdhfZ#30+HMT%dYkIZNUAWi9i_b03O#b;0CCu7%2{-llq)^ZF^1Es+ zl`x7+mN8Mul~gbFyQVFVO8vre-%Ey;_cutceEhuBBn*?B+-LqGc?EVqQ525Rq?!N4{&o_<&Ez!h#P>4dvJN55NTsKTWkCCrwaf&x}@W$6sc9q9Ywb4ull*L`d=UyjL@N#{Y5E2Hs@OPi*7PKFNdwK<#*0|Ps{ zFxI|u4A;e_wLi5zp?$9mMQ=0(IBzrc+xPtmzMceO&Jb^OvQ@p&e%I1?&bt?!x-Q2y zoa1rpp!P0D*?mvxF#W~8Ly4dd; zy%!WPmt*u^Cbh4;aXG>OxC1$3p!VJ;tsE2+#W_Mf<;sL}^e?@3FWb3dBTiL33FWl7l*5c3O^PSw?=tner>~d4C+VVL@B^CV$ zox$hr8E~(bOPhzn^qMY5xB-97)YwuAbviyA#zXy6HY}Jl_q&gvan^$&fFN)kYxa6bDpASKIx6`Y*skj48uP7$ULm^FEzSm}_e}#h| zYQOry;ycm}qgK7!SB_a<|9;D?}q z+~zLFWK1L>2Ln6fBT#M03^M(Kk5p?ZPg%NoIfYypuNOX&Jmq`3JI1dsZrb_Q;(xsQ z-1oU0hdDKz!vE7N90qj~bQfZC2IMBV*FLw~35#>95_iee(!Zx8{v*Xo}aS1qrZnzN$gn=VIhbm1ch zxG5Xhz5Y*dFE{0zvR<|KV0=dLeEV@o-}Cfv*JrL{E7y328ma~!_|0rW<_lU0mAdH=pi4F@9KzUHq$1doxD%TXrwZ`azBHQNnN@XtZrjFZf6_o|Q2XpQGRP zZ?u+bY{~B`U0R;<>W<#-B?sz0uhLUI4VtrLTT-Y~g!0$W;m~;Q$@dCA;*Rze#(7Ye zBi%<76Oy6fnRI-WkTb{&DtBO0J?k6(Rj#8-$e}CA^jga5j1L3uB}x8fK1a-Y6cciw zOs`yyNoL?;(Kpou_cFccS=h)JC@=Zmd zeoeQVkb}*Pf3@6!Z8f&gS4HDV7nJE$T6>oxjom!Gs7vXBIIN+&JQRG66i!F4R2YU? zAD>=4w!D9srx)}-oa56$?Zd45uPbIfjV&@f_ZK&{O@=-ysC{#gE(pp@t=g0>sIhy6 zn~E-ob8YTC@Vib9u#a`=6biHMjb6!>sXp#BwwPYcz1@$ray++uY4Miek0X}HNR9fK zo|iA^ufDdqs&KEfS8y+wMYt(nd8yxi7}VZxLWSINX?NRvuTFOTv4!rQo9wr(&v8O` zqqV2?gM0a}-?MwcGfgka&}na2r!CL4EN^qr-L-tL<@v)o91+p+_=2FIlElfJ0Jj)l|m0@6y;XHuu+S=0W;c^VRD;EH>E<0pBK<(4m z;?P8czwrtIrH)j8w>R-)HyoZ~GUm-K+oZ zcnkNv%W=w9oiZl2?!dj=RK3w3pL9X_%H8bGQ)WF3sk)1@@*6w1@4IK`!NpHk;T*ZN z{jNF>{H}CC?U!3`G)E|3`RK`bD1whnyB9>@Q;1yy~=q2AHf0C?ls`1hK**AKXkQwO`Qka_q6tYS8ud;bGjVgpWVx@ zM4>+6UM>a6&`HQC&XK?7fG#Mg{gja7|1J)&U1r_8?kk6z(c0&C&E+`lUQlGy%T-gm zmv1ZX`@4JjUS3S9MsD8hUQ~@x`$`RuT2&&{KT2DL?zTw~mKwg%*s_u72PdNU^1He) z+Sp&9clFuf?B%J859$pmT~MYMHioLv&h&M7q~5=Ao?hBmI(%`Z zhD*h|aEVzTCFG=Yxz)-+{pNCn2ziw-I4(y>QPADHeJ4B=9HlNt$OGJq4F9|Bp(R;m4?*$*>8-tJF z9B*9irW4xis2aV0g?rJDOzuG0s`ekKeRM%~>dM{ii&>wh*Xm|0>Z}Wj`YpJZ3lZ+s zeFiRa`P8`_e1w1USP4A+(AFA8mMbjRnouX+2heey@Tk2S?jHP^t4>T<;KoR9?J^?LHxP$p!j zz8$K1Q`#GJZa$S(4u9Wmf0Wkwp!WI7zcT59r2LmAn|9ab$cb%wxiI29*mF6;!f=jW zEtli^*x{7r83R?L%QHDpw7Y5Lh}K?qi0ro|Z*!ybV7QBZB*{m$do^&cWK1LtKD(Ff z_Ha{IQNPh-PYF4$W874Ix6`ZJ&smIfN*}Y2d6?|la5tO^j#e#F(!~=T`H*d8!v>(>P!lm8PdvTG;Q;xsJ?;4-u zy>V%Kx#M%xmgkK&y`l?(`Dgd?m2b`(PTTq5zW0uYOw9WFSD4OdcXhbBVUuhBh*Y}Y zE?@3zdZn=ikMwDXK;G!;{o??ebwS?XnqFQdx}f&f*`+;CFUYUUaogBJpI~}P5T*;# z6f*B#>zZEvRfTiZ?6K7a1>M~|GcoJ@_0V020DL6wz{0&uuZH@q8qvJbdTT3p7Ym&< z_@vm~hqse4A;%WFi^DLzw!4?kgEXRH*5R2h$F|U2^VS>fBG7r@3-w0393M$52hM4^ zDqYa#q|HC{+=0X8t4cn~^lE2KHvI^_*K|3?U$dQFm4E(1|0;JwX|ltt^H^R?{l+OY zb}B$ z95<%dc;8S7IgN}7!|6y@dug(BId<0-YVVEaUp=l5YQG9s_c+l7<55!hOb| zyAHW|=W7E^wsy<994liY+*IveUM2Vlwbrc39#52#e0c9wYW_r3{{;T!UUTclbS~4{ z^EpcVev$hgv(8gQ)tJk1^X1Jow2`IB?&5QVkJ#L+Z)$zO9hluKzA3-!;?GOC*V5&< z{HWZ3+1reByvT*2IV+Bm1I&7+m;8~^WJ^A}e|T)SwRF~GPq{KK44h-87v)to#&b9D zHiubHYIsMJ9bM4o`?)Y6S;0rPn(R0as&6W|m+XyyOhOJFE4>$|1x>c(N~%WaE^ewC z;~(mw_P8FX{Q+H&#NId$D%YN>QN9<hCjn^;iUY*}{{KaB-dPUWk z)bK4g)yx?aoI=qBxg6bh+VY^g+VUu>?OwiDs>ZD!4g-ao@?DoEJNf4>M;C^>qwtY% zQ?lQF!UOAaoHW_Aul#VF2Y>20N}#*E%^l9MHNE_EpxO~36taARFKIZA9Urk6MR1OBFh+RGoAk}JD|RgG}3cD@|rhl{GwCT#bb z5^~a7+ROKfVj|gZcCYd_ciw2p(Dw`vjZgG+L513fo0@b%b}y`@-D~x^;p`E!zIl%< z+l?EQE{Id;L5-tS8^A z+0$BT_u_5dZETV0H#Npb)fi27wU(Bu(fa`((FqA3$@Iz_-BLCBm)MxJa%INqJfJ_0 zCi`DYlg;%B-8H>Bs6FQS2`;*tUM+OjS5khs)k`{;IZALpA2B89g6y$4$2J#+gq*Hi z+Iv&6U>Zpz<@#)8t0vz|m%-BSTAbrFz0&M4G3&BJwymW+>v4TfxEJm3*QGF-UfI2< zRb7rrW-u-J;Rd-fE!3WtB?-bG$6>&|+R_DWQ^Wmdz^v+qKmp_CO^O}diw-M_iSjl_lWnKo-(Rt!3xbcx zKaZPt+c)KneqeiH_P9ji=h~N_`hTY_Z}rX2g<-O5Z?L0= z!>HuS=z?4rm-u&*>81D2zn%GV^p(3DC4a)bTo^Y{vS^HNAC;+@Ml`O^HC5v@z1C8( zphdgPI^8DJe#-QNXKs@jf@ebQ&44M_o-PRbaC|PuOt0)-W{2rzj(oUJ4is*xQ2V^m z_x4G}f_o+ZJkzUxarydU(tA-g_WGuhik0aFDfwjYa-`Ni3`6k-Bn7jc>D5C4E4NMe z%rw1*x1IAxuFB0j?OvtbHNCu*e%Ih5xMJMYq-yjkCE*adTc|zUYjTuCt-3yGIAiBC z`z~5uCUa=Y4skj1Il@Ph%uspC+`Rm=w_t@z7ld=n8!aKH<>pP-=ah7gQHUrWcL1-<7hBqomMXU-_1EoTiuCx-{7^l%rS24X2D} zbf0Z7>;3*}7N=?~Kb&mU>|V{>*b-HvyKmNH+o|CrL&GKUzVU=~LY5}`O1DyRQ_=2* zS@)k+a-}!A93{a=?9@>E(go>Uw$IF}#!Y-v93@hAu1p5!>dbuQe%HLw@R8_(#yR`V z^eNnnO0hbZq4r5nI;l%~(nUHUY3=P`xg0qUOg3LRheBMRkH~xbcF$4L{AVX)g4T$m zWCPum>8I;c?&p+>WvAxmt?9+ZG^-lpDDg(i-L-q&MB`NXUctTM`oyog9ETH^e?P#z zOs}i*yJ{%1d#zmbn%=+AUV0uCA;a*UC_z1Ns&e2Z&Gf2dJd{a03 z_X^#WVf1*R_VKLmGV4L@`7o~Dsv6yb(g}l)OsdA9_SH*t(+awKuqHdYAo*xhGQ%~c zwf9D^=z_Gz+l)VqE-PQs+Y%OY@x*Yq+&f_ur}oHW_gs@u+koA_4? z-EE%W5t)*qIZ7yiC?+O+1UqH-;yf_Dl902R-e_O>>Oo!<+4z`{;3E&OpVS4D{BwS| z;RD{mPte-aWDomCx%M1-L3iirRoqnVUP%qtUvrzBFX@Dx3u9u|{jRw%rpxiN&Hkx# zIlGtNwN#DO2}zT^rdFjZir$N7-R0Y?E!K_Qgn!a*sRoP`wdn)?cy=>1< z+M=WPx~UL>dnoU9E@PSBa6in`Ytm%X?oQdN)Nhj?E~-WsM(tjuYWxNjvdht1`7`a7 zvQ_bcb7KpwEp)ej*R*n+kyZ}4N3saykI?B>DpqZx`CT#V=6hV9tJdx%uah56&d^0( zwXiYOJwsJjx*%>|Z*&XYwfB9ixmluBX|lW0WYf63!w-k4GrjB`rOB4!n7<9&RCGac z9=IHDw3*M%SJgfmWKj2<*nS+WZR8`?mph~O?CV=n_EmTDRvti zMzRR@POtu=@zQjpw>7+BeNxUZvSl;@i9l)>G3fokGD!%<@Au@JbEW>>>M&O3F@6#p`#K!TDYu zGnXSZXlb&!qFor&s&~2G9)>N>n(W>iZAWrpbQdHEkHQJMi&;O#{gXD@5#wTd1@~Hg zx63AaEA*bDq^X1)K1j?u-_$7*4&h#{jfF-4v%b=t)$qgNFv6_QO~vNL%^3dM(-`ly zOe=@W(Vx{D-D+$pKin0im?%fdI-d2z$~X05d{dM__oSD|G>>Qfp&mEo!lny?2-M{W zEjvH`HRBb-KacbDN;+ZCT}olj1Jmp7KHlaz85(l)8%l_{KDl|NSLr-}+Cz)-D#?VB zkV89AjuOe0lk)(&i^Hhh3+E_<(?^2dFVTn=*QbP>-t;=atm7Q- z!jFZGk+{)g)}mzZxkfrs)MuKD9l&bz#sC zU(@Rpk_DXU#k1~LoBO6J6)Uat!Kvwjrse!fB)fionG{|+I zH~N{NyW`!9JC-*L@XX0klIARl-|et>_qt@bZh2XBL49#knO>X)-e{L2Zc66?ta}I| z@IW(9FP?Uu^-0xegH5{hp6TU!DNXj;?uE_go3bPL%4JMo)?JQMUQm2f<%esNq!N`> z60P7~+uf^hugVMRXm_E2H@Q>p>a^%cA$o37HRi&wshvha_c_<^<>p^$D;xZSq_T;d z@-GF>|LFLG{(JZ_ifp+TPxQ}ngFrFVrujYQ^YwOZmLI`4aGczZkFC#?Pw`J?@bur|{mr{2fwmk; zudZIQ?LFg`e#~X@;O5c(XUkvh``z-T{?*Ofe))Y;VczE*JkkH;k9$|or0zTk-}rvW z@evwH8#n)Jo0s`0o}(1_+4`~JiSg&%ubbaP!2h~_1NPB!Kpes8a}4zIL;l_V9VFny z_IRrBqx&PreSPm`dmEPciV5)o58bnyr|rSNg|)vt{)LL+ZLE0bmp#nucC^3O573!^ zs6Ec_`95gq5m1T2d$D$Lz2$EEi-z$RP4C}Jd4AdZ{u?3_%3N- z@3Tk0$8BmBIM$S1eqX9vO9+(BR1OArO^wEtlK H_s#zUt4;@G literal 0 HcmV?d00001 From bae04966f912d83d3ea5c40622a45c0d452c31a3 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 24 Jun 2017 14:35:28 +1200 Subject: [PATCH 0578/1049] Add "REC" indicator --- scripts/developer/EZrecord.js | 67 +++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/scripts/developer/EZrecord.js b/scripts/developer/EZrecord.js index 593f9d5fbb..f8dd7bc26e 100644 --- a/scripts/developer/EZrecord.js +++ b/scripts/developer/EZrecord.js @@ -19,12 +19,76 @@ tablet, button, + RecordingIndicator, Recorder; function log(message) { print(APP_NAME + ": " + message); } + RecordingIndicator = (function () { + // Displays "recording" overlay. + + var hmdOverlay, + HMD_FONT_SIZE = 0.08, + desktopOverlay, + DESKTOP_FONT_SIZE = 24; + + function show() { + // Create both overlays in case user switches desktop/HMD mode. + var screenSize = Controller.getViewportDimensions(), + recordingText = "REC", // Unicode circle \u25cf doesn't render in HMD. + CAMERA_JOINT_INDEX = -7; + + if (HMD.active) { + // 3D overlay attached to avatar. + hmdOverlay = Overlays.addOverlay("text3d", { + text: recordingText, + dimensions: { x: 3 * HMD_FONT_SIZE, y: HMD_FONT_SIZE }, + parentID: MyAvatar.sessionUUID, + parentJointIndex: CAMERA_JOINT_INDEX, + localPosition: { x: 0.95, y: 0.95, z: -2.0 }, + color: { red: 255, green: 0, blue: 0 }, + alpha: 0.9, + lineHeight: HMD_FONT_SIZE, + backgroundAlpha: 0, + ignoreRayIntersection: true, + isFacingAvatar: true, + drawInFront: true, + visible: true + }); + } else { + // 2D overlay on desktop. + desktopOverlay = Overlays.addOverlay("text", { + text: recordingText, + width: 3 * DESKTOP_FONT_SIZE, + height: DESKTOP_FONT_SIZE, + x: screenSize.x - 4 * DESKTOP_FONT_SIZE, + y: DESKTOP_FONT_SIZE, + font: { size: DESKTOP_FONT_SIZE }, + color: { red: 255, green: 8, blue: 8 }, + alpha: 1.0, + backgroundAlpha: 0, + visible: true + }); + } + } + + function hide() { + if (desktopOverlay) { + Overlays.deleteOverlay(desktopOverlay); + } + if (hmdOverlay) { + Overlays.deleteOverlay(hmdOverlay); + } + } + + return { + show: show, + hide: hide + }; + }()); + Recorder = (function () { var IDLE = 0, COUNTING_DOWN = 1, @@ -75,6 +139,7 @@ // TODO + RecordingIndicator.show(); }, START_RECORDING_SOUND_DURATION); recordingState = RECORDING; } else { @@ -93,6 +158,7 @@ // TODO + RecordingIndicator.hide(); } recordingState = IDLE; } @@ -103,6 +169,7 @@ // TODO + RecordingIndicator.hide(); recordingState = IDLE; } From 3de1c0a312ffbd10d0fb78d3b418a1bed1d184cf Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 24 Jun 2017 15:57:57 +1200 Subject: [PATCH 0579/1049] Make and save recording --- .../src/RecordingScriptingInterface.cpp | 23 +++++++++++++------ .../src/RecordingScriptingInterface.h | 1 + scripts/developer/EZrecord.js | 18 +++++++-------- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/libraries/script-engine/src/RecordingScriptingInterface.cpp b/libraries/script-engine/src/RecordingScriptingInterface.cpp index 98838441d2..7583f562e6 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.cpp +++ b/libraries/script-engine/src/RecordingScriptingInterface.cpp @@ -8,9 +8,17 @@ #include "RecordingScriptingInterface.h" +#include #include +#include +#include +#include +#include +#include +#include #include +#include #include #include #include @@ -18,13 +26,6 @@ #include #include - -#include -#include -#include -#include -#include - #include "ScriptEngineLogging.h" using namespace recording; @@ -188,6 +189,14 @@ void RecordingScriptingInterface::stopRecording() { _lastClip->seek(0); } +QString RecordingScriptingInterface::getDefaultRecordingSaveDirectory() { + QString directory = PathUtils::getAppLocalDataPath() + "Avatar Recordings/"; + if (!QDir(directory).exists()) { + QDir().mkdir(directory); + } + return directory; +} + void RecordingScriptingInterface::saveRecording(const QString& filename) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "saveRecording", Qt::BlockingQueuedConnection, diff --git a/libraries/script-engine/src/RecordingScriptingInterface.h b/libraries/script-engine/src/RecordingScriptingInterface.h index a9fdf1deb4..c4220958a2 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.h +++ b/libraries/script-engine/src/RecordingScriptingInterface.h @@ -65,6 +65,7 @@ public slots: float recorderElapsed() const; + QString getDefaultRecordingSaveDirectory(); void saveRecording(const QString& filename); bool saveRecordingToAsset(QScriptValue getClipAtpUrl); void loadLastRecording(); diff --git a/scripts/developer/EZrecord.js b/scripts/developer/EZrecord.js index f8dd7bc26e..382633f4f2 100644 --- a/scripts/developer/EZrecord.js +++ b/scripts/developer/EZrecord.js @@ -136,9 +136,7 @@ log("Start recording"); Script.setTimeout(function () { // Delay start so that start beep is not included in recorded sound. - - // TODO - + Recording.startRecording(); RecordingIndicator.show(); }, START_RECORDING_SOUND_DURATION); recordingState = RECORDING; @@ -155,21 +153,21 @@ if (recordingState === COUNTING_DOWN) { Script.clearInterval(countdownTimer); } else { - - // TODO - + Recording.stopRecording(); RecordingIndicator.hide(); } recordingState = IDLE; } function finishRecording() { - log("Finish recording"); playSound(finishRecordingSound); - - // TODO - + Recording.stopRecording(); RecordingIndicator.hide(); + var filename = (new Date()).toISOString(); // yyyy-mm-ddThh:mm:ss.sssZ + filename = filename.replace(/[\-:]|\.\d*Z$/g, "").replace("T", "-") + ".hfr"; // yyyymmmdd-hhmmss.hfr + filename = Recording.getDefaultRecordingSaveDirectory() + filename; + log("Finish recording: " + filename); + Recording.saveRecording(filename); recordingState = IDLE; } From 48caad1ad252d7841fe1fbabc87f3d9a688412cb Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 24 Jun 2017 16:03:55 +1200 Subject: [PATCH 0580/1049] Add user activity logging --- scripts/developer/EZrecord.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/developer/EZrecord.js b/scripts/developer/EZrecord.js index 382633f4f2..7fdebada79 100644 --- a/scripts/developer/EZrecord.js +++ b/scripts/developer/EZrecord.js @@ -26,6 +26,12 @@ print(APP_NAME + ": " + message); } + function logDetails() { + return { + current_domain: location.placename + }; + } + RecordingIndicator = (function () { // Displays "recording" overlay. @@ -169,6 +175,7 @@ log("Finish recording: " + filename); Recording.saveRecording(filename); recordingState = IDLE; + UserActivityLogger.logAction("ezrecord_finish_recording", logDetails()); } function stopRecording() { @@ -239,6 +246,8 @@ } Controller.keyPressEvent.connect(onKeyPressEvent); + + UserActivityLogger.logAction("ezrecord_run_script", logDetails()); } function tearDown() { From 05f0ec267e2f1fadbcfafbd4f1166928b73acfd3 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Sat, 24 Jun 2017 18:53:00 -0700 Subject: [PATCH 0581/1049] fix an initialization order fiasco --- libraries/controllers/src/controllers/Input.cpp | 7 ++++++- libraries/controllers/src/controllers/Input.h | 2 ++ libraries/controllers/src/controllers/UserInputMapper.cpp | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/libraries/controllers/src/controllers/Input.cpp b/libraries/controllers/src/controllers/Input.cpp index 6f8bd547a2..dbc9071f43 100644 --- a/libraries/controllers/src/controllers/Input.cpp +++ b/libraries/controllers/src/controllers/Input.cpp @@ -9,9 +9,14 @@ #include "Input.h" namespace controller { - const Input Input::INVALID_INPUT = Input(0x7fffffff); + const Input Input::INVALID_INPUT = invalidInput(); const uint16_t Input::INVALID_DEVICE = Input::INVALID_INPUT.device; const uint16_t Input::INVALID_CHANNEL = Input::INVALID_INPUT.channel; const uint16_t Input::INVALID_TYPE = Input::INVALID_INPUT.type; + + const Input& Input::invalidInput() { + static const Input INVALID_INPUT = Input(0x7fffffff); + return INVALID_INPUT; + } } diff --git a/libraries/controllers/src/controllers/Input.h b/libraries/controllers/src/controllers/Input.h index b74ad48c6f..3ca4076de2 100644 --- a/libraries/controllers/src/controllers/Input.h +++ b/libraries/controllers/src/controllers/Input.h @@ -83,6 +83,8 @@ struct Input { using NamedPair = QPair; using NamedVector = QVector; + + static const Input& invalidInput(); }; } diff --git a/libraries/controllers/src/controllers/UserInputMapper.cpp b/libraries/controllers/src/controllers/UserInputMapper.cpp index 79f4325ae6..29f011fba2 100755 --- a/libraries/controllers/src/controllers/UserInputMapper.cpp +++ b/libraries/controllers/src/controllers/UserInputMapper.cpp @@ -47,8 +47,8 @@ namespace controller { const uint16_t UserInputMapper::STANDARD_DEVICE = 0; - const uint16_t UserInputMapper::ACTIONS_DEVICE = Input::INVALID_DEVICE - 0x00FF; - const uint16_t UserInputMapper::STATE_DEVICE = Input::INVALID_DEVICE - 0x0100; + const uint16_t UserInputMapper::ACTIONS_DEVICE = Input::invalidInput().device - 0x00FF; + const uint16_t UserInputMapper::STATE_DEVICE = Input::invalidInput().device - 0x0100; } // Default contruct allocate the poutput size with the current hardcoded action channels From 960017ddd704cfa77321a1edcc6df25e91330595 Mon Sep 17 00:00:00 2001 From: Bradley Austin Davis Date: Sat, 24 Jun 2017 22:22:47 -0700 Subject: [PATCH 0582/1049] Fix static plugin initialization on Linux --- interface/src/Application.cpp | 10 +++++----- libraries/plugins/src/plugins/PluginManager.cpp | 4 ---- libraries/plugins/src/plugins/PluginManager.h | 17 ++++++++--------- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c80626ad5c..0951e0973b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -486,11 +486,11 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { Setting::init(); // Tell the plugin manager about our statically linked plugins - PluginManager::setInputPluginProvider([] { return getInputPlugins(); }); - PluginManager::setDisplayPluginProvider([] { return getDisplayPlugins(); }); - PluginManager::setInputPluginSettingsPersister([](const InputPluginList& plugins) { saveInputPluginSettings(plugins); }); - - if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { + auto pluginManager = PluginManager::getInstance(); + pluginManager->setInputPluginProvider([] { return getInputPlugins(); }); + pluginManager->setDisplayPluginProvider([] { return getDisplayPlugins(); }); + pluginManager->setInputPluginSettingsPersister([](const InputPluginList& plugins) { saveInputPluginSettings(plugins); }); + if (auto steamClient = pluginManager->getSteamClientPlugin()) { steamClient->init(); } diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index e90d3e3a0f..18ac905ef1 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -23,10 +23,6 @@ #include "InputPlugin.h" #include "PluginLogging.h" -DisplayPluginProvider PluginManager::_displayPluginProvider = []()->DisplayPluginList { return {}; }; -InputPluginProvider PluginManager::_inputPluginProvider = []()->InputPluginList { return {}; }; -CodecPluginProvider PluginManager::_codecPluginProvider = []()->CodecPluginList { return {}; }; -InputPluginSettingsPersister PluginManager::_inputSettingsPersister = [](const InputPluginList& list) {}; void PluginManager::setDisplayPluginProvider(const DisplayPluginProvider& provider) { _displayPluginProvider = provider; diff --git a/libraries/plugins/src/plugins/PluginManager.h b/libraries/plugins/src/plugins/PluginManager.h index cb011392a4..08fe4fde20 100644 --- a/libraries/plugins/src/plugins/PluginManager.h +++ b/libraries/plugins/src/plugins/PluginManager.h @@ -33,16 +33,15 @@ public: void shutdown(); // Application that have statically linked plugins can expose them to the plugin manager with these function - static void setDisplayPluginProvider(const DisplayPluginProvider& provider); - static void setInputPluginProvider(const InputPluginProvider& provider); - static void setCodecPluginProvider(const CodecPluginProvider& provider); - static void setInputPluginSettingsPersister(const InputPluginSettingsPersister& persister); + void setDisplayPluginProvider(const DisplayPluginProvider& provider); + void setInputPluginProvider(const InputPluginProvider& provider); + void setCodecPluginProvider(const CodecPluginProvider& provider); + void setInputPluginSettingsPersister(const InputPluginSettingsPersister& persister); private: - static DisplayPluginProvider _displayPluginProvider; - static InputPluginProvider _inputPluginProvider; - static CodecPluginProvider _codecPluginProvider; - static InputPluginSettingsPersister _inputSettingsPersister; - + DisplayPluginProvider _displayPluginProvider { []()->DisplayPluginList { return {}; } }; + InputPluginProvider _inputPluginProvider { []()->InputPluginList { return {}; } }; + CodecPluginProvider _codecPluginProvider { []()->CodecPluginList { return {}; } }; + InputPluginSettingsPersister _inputSettingsPersister { [](const InputPluginList& list) {} }; PluginContainer* _container { nullptr }; }; From 08784ff30c6006d4225d8b0d2a1718250cdcd049 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sun, 25 Jun 2017 02:34:58 -0700 Subject: [PATCH 0583/1049] Fix toolbar button mouse click when they were added via the tablet scripting interface --- libraries/ui/src/ui/TabletScriptingInterface.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index 8b3dc342e2..1e426dd8f0 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -623,7 +623,8 @@ TabletButtonProxy* TabletProxy::addButton(const QVariant& properties) { auto toolbarProxy = DependencyManager::get()->getSystemToolbarProxy(); if (toolbarProxy) { // copy properties from tablet button proxy to toolbar button proxy. - toolbarProxy->addButton(tabletButtonProxy->getProperties()); + auto toolbarButtonProxy = toolbarProxy->addButton(tabletButtonProxy->getProperties()); + tabletButtonProxy->setToolbarButtonProxy(toolbarButtonProxy); } } return tabletButtonProxy.data(); From f811971a422c1f7058601541391ce78a0d0e5591 Mon Sep 17 00:00:00 2001 From: Menithal Date: Sun, 25 Jun 2017 21:57:07 +0300 Subject: [PATCH 0584/1049] Avatar Bookmarking --- interface/src/AvatarBookmarks.cpp | 48 ++++++++++++++++++++----- interface/src/AvatarBookmarks.h | 10 ++++-- interface/src/Bookmarks.cpp | 56 ++++++++++++++++++++++------- interface/src/Bookmarks.h | 15 ++++---- interface/src/LocationBookmarks.cpp | 18 ++++++++-- interface/src/LocationBookmarks.h | 4 +-- 6 files changed, 115 insertions(+), 36 deletions(-) diff --git a/interface/src/AvatarBookmarks.cpp b/interface/src/AvatarBookmarks.cpp index db2a240b92..31c0e94073 100644 --- a/interface/src/AvatarBookmarks.cpp +++ b/interface/src/AvatarBookmarks.cpp @@ -58,16 +58,39 @@ void AvatarBookmarks::setupMenus(Menu* menubar, MenuWrapper* menu) { _deleteBookmarksAction = menubar->addActionToQMenuAndActionHash(menu, MenuOption::DeleteAvatarBookmark); QObject::connect(_deleteBookmarksAction, SIGNAL(triggered()), this, SLOT(deleteBookmark()), Qt::QueuedConnection); - Bookmarks::setupMenus(menubar, menu); + for (auto it = _bookmarks.begin(); it != _bookmarks.end(); ++it) { + addBookmarkToMenu(menubar, it.key(), it.value()); + } + Bookmarks::sortActions(menubar, _bookmarksMenu); } void AvatarBookmarks::changeToBookmarkedAvatar() { QAction* action = qobject_cast(sender()); - const QString& address = action->data().toString(); - auto myAvatar = DependencyManager::get()->getMyAvatar(); - myAvatar->useFullAvatarURL(address); + + + // TODO: Phase this out eventually. + if (action->data().type() == QVariant::String) { + // Legacy avatar bookmark. + + myAvatar->useFullAvatarURL(action->data().toString()); + qCDebug(interfaceapp) << " Using Legacy Avatar Bookmark "; + } + else { + // TODO: this is where the entry is interpreted. + const QMap bookmark = action->data().toMap(); + // Not magic value. This is the current made version, and if it changes this interpreter should be updated to handle the new one separately. + if (bookmark.value(ENTRY_VERSION) == 3) { + + myAvatar->useFullAvatarURL(bookmark.value(ENTRY_AVATAR_URL).toString()); + myAvatar->setAttachmentsVariant(bookmark.value(ENTRY_AVATAR_ATTACHMENTS).toList()); + } + else { + qCDebug(interfaceapp) << " Bookmark entry does not match client version, make sure client has a handler for the new AvatarBookmark"; + } + } + } void AvatarBookmarks::addBookmark() { @@ -83,13 +106,22 @@ void AvatarBookmarks::addBookmark() { } auto myAvatar = DependencyManager::get()->getMyAvatar(); - const QString& bookmarkAddress = myAvatar->getSkeletonModelURL().toString(); - Bookmarks::addBookmarkToFile(bookmarkName, bookmarkAddress); + + const QString& avatarUrl = myAvatar->getSkeletonModelURL().toString(); + const QVariantList& attachments = myAvatar->getAttachmentsVariant(); + + // If Avatar attachments ever change, this is where to update them, when saving remember to also append to AVATAR_BOOKMARK_VERSION + QVariantMap *bookmark = new QVariantMap; + bookmark->insert(ENTRY_VERSION, AVATAR_BOOKMARK_VERSION); + bookmark->insert(ENTRY_AVATAR_URL, avatarUrl); + bookmark->insert(ENTRY_AVATAR_ATTACHMENTS, attachments); + + Bookmarks::addBookmarkToFile(bookmarkName, *bookmark); } -void AvatarBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, const QString& address) { +void AvatarBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) { QAction* changeAction = _bookmarksMenu->newAction(); - changeAction->setData(address); + changeAction->setData(bookmark); connect(changeAction, SIGNAL(triggered()), this, SLOT(changeToBookmarkedAvatar())); if (!_isMenuSorted) { menubar->addActionToQMenuAndActionHash(_bookmarksMenu, changeAction, name, 0, QAction::NoRole); diff --git a/interface/src/AvatarBookmarks.h b/interface/src/AvatarBookmarks.h index dc5a0aee6e..4136f5edca 100644 --- a/interface/src/AvatarBookmarks.h +++ b/interface/src/AvatarBookmarks.h @@ -21,18 +21,22 @@ class AvatarBookmarks: public Bookmarks, public Dependency { public: AvatarBookmarks(); - - void setupMenus(Menu* menubar, MenuWrapper* menu) override; + void setupMenus(Menu* menubar, MenuWrapper* menu); public slots: void addBookmark(); protected: - void addBookmarkToMenu(Menu* menubar, const QString& name, const QString& address) override; + void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark); void readFromFile(); private: const QString AVATARBOOKMARKS_FILENAME = "avatarbookmarks.json"; + const QString ENTRY_AVATAR_URL = "avatarUrl"; + const QString ENTRY_AVATAR_ATTACHMENTS = "attachments"; + const QString ENTRY_VERSION = "version"; + + const int AVATAR_BOOKMARK_VERSION = 3; private slots: void changeToBookmarkedAvatar(); diff --git a/interface/src/Bookmarks.cpp b/interface/src/Bookmarks.cpp index 4cbc17f8ce..f495e5b502 100644 --- a/interface/src/Bookmarks.cpp +++ b/interface/src/Bookmarks.cpp @@ -28,7 +28,7 @@ Bookmarks::Bookmarks() : _isMenuSorted(false) { } - +/** void Bookmarks::setupMenus(Menu* menubar, MenuWrapper* menu) { // Enable/Disable menus as needed enableMenuItems(_bookmarks.count() > 0); @@ -36,11 +36,41 @@ void Bookmarks::setupMenus(Menu* menubar, MenuWrapper* menu) { // Load Bookmarks for (auto it = _bookmarks.begin(); it != _bookmarks.end(); ++it) { QString bookmarkName = it.key(); - QString bookmarkAddress = it.value().toString(); - addBookmarkToMenu(menubar, bookmarkName, bookmarkAddress); + + QMap *avatarData; + QVariant::Type type = it.value().type; + + if (type == QVariant::Map){ + QMap& map = it.value().toMap; + + // Convert to map and get version.- + if (map.contains("version")){ + auto version = map.find("version"); + + if (version == AVATAR_BOOKMARK_VERSION) { + addBookmarkToMenu(menubar, bookmarkName, map); + } + } + else { + //Not valid. Skip? + } + } + else if (type == QVariant::String) { + // Bookmark String type, generic usually for avatars or locations. + QString bookmarkAddress = it.value().toString(); + avatarData = new QVariantMap; + + avatarData->insert(); + + addBookmarkToMenu(menubar, bookmarkName, bookmarkAddress); + } + else { + // Unexpected Type + } + } } - +*/ void Bookmarks::deleteBookmark() { QStringList bookmarkList; QList menuItems = _bookmarksMenu->actions(); @@ -67,7 +97,7 @@ void Bookmarks::deleteBookmark() { } } -void Bookmarks::addBookmarkToFile(const QString& bookmarkName, const QString& bookmarkAddress) { +void Bookmarks::addBookmarkToFile(const QString& bookmarkName, const QVariant& bookmark) { Menu* menubar = Menu::getInstance(); if (contains(bookmarkName)) { auto offscreenUi = DependencyManager::get(); @@ -75,7 +105,6 @@ void Bookmarks::addBookmarkToFile(const QString& bookmarkName, const QString& bo "The bookmark name you entered already exists in your list.", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); duplicateBookmarkMessage->setProperty("informativeText", "Would you like to overwrite it?"); - auto result = offscreenUi->waitForMessageBoxResult(duplicateBookmarkMessage); if (result != QMessageBox::Yes) { return; @@ -83,19 +112,20 @@ void Bookmarks::addBookmarkToFile(const QString& bookmarkName, const QString& bo removeBookmarkFromMenu(menubar, bookmarkName); } - addBookmarkToMenu(menubar, bookmarkName, bookmarkAddress); - insert(bookmarkName, bookmarkAddress); // Overwrites any item with the same bookmarkName. + addBookmarkToMenu(menubar, bookmarkName, bookmark); + insert(bookmarkName, bookmark); // Overwrites any item with the same bookmarkName. enableMenuItems(true); } -void Bookmarks::insert(const QString& name, const QString& address) { - _bookmarks.insert(name, address); +void Bookmarks::insert(const QString& name, const QVariant& bookmark) { + _bookmarks.insert(name, bookmark); if (contains(name)) { - qCDebug(interfaceapp) << "Added bookmark:" << name << "," << address; + qCDebug(interfaceapp) << "Added bookmark:" << name; persistToFile(); - } else { - qWarning() << "Couldn't add bookmark: " << name << "," << address; + } + else { + qWarning() << "Couldn't add bookmark: " << name; } } diff --git a/interface/src/Bookmarks.h b/interface/src/Bookmarks.h index 6c322197cc..aa3b95c6de 100644 --- a/interface/src/Bookmarks.h +++ b/interface/src/Bookmarks.h @@ -27,18 +27,20 @@ class Bookmarks: public QObject { public: Bookmarks(); - virtual void setupMenus(Menu* menubar, MenuWrapper* menu); + virtual void setupMenus(Menu* menubar, MenuWrapper* menu) = 0; QString addressForBookmark(const QString& name) const; protected: - virtual void addBookmarkToFile(const QString& bookmarkName, const QString& bookmarkAddress); - virtual void addBookmarkToMenu(Menu* menubar, const QString& name, const QString& address) = 0; + void addBookmarkToFile(const QString& bookmarkName, const QVariant& bookmark); + virtual void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) = 0; void enableMenuItems(bool enabled); - void readFromFile(); - void insert(const QString& name, const QString& address); // Overwrites any existing entry with same name. + virtual void readFromFile(); + void insert(const QString& name, const QVariant& address); // Overwrites any existing entry with same name. void sortActions(Menu* menubar, MenuWrapper* menu); int getMenuItemLocation(QList actions, const QString& name) const; - + + bool Bookmarks::contains(const QString& name) const; + QVariantMap _bookmarks; // { name: url, ... } QPointer _bookmarksMenu; QPointer _deleteBookmarksAction; @@ -50,7 +52,6 @@ protected slots: private: void remove(const QString& name); - bool contains(const QString& name) const; static bool sortOrder(QAction* a, QAction* b); void persistToFile(); diff --git a/interface/src/LocationBookmarks.cpp b/interface/src/LocationBookmarks.cpp index b79adcf1b7..eee6cdf3c8 100644 --- a/interface/src/LocationBookmarks.cpp +++ b/interface/src/LocationBookmarks.cpp @@ -41,13 +41,25 @@ void LocationBookmarks::setupMenus(Menu* menubar, MenuWrapper* menu) { _deleteBookmarksAction = menubar->addActionToQMenuAndActionHash(menu, MenuOption::DeleteBookmark); QObject::connect(_deleteBookmarksAction, SIGNAL(triggered()), this, SLOT(deleteBookmark()), Qt::QueuedConnection); - Bookmarks::setupMenus(menubar, menu); + // Legacy Location to Bookmark. + + // Enable/Disable menus as needed + enableMenuItems(_bookmarks.count() > 0); + + // Load Bookmarks + for (auto it = _bookmarks.begin(); it != _bookmarks.end(); ++it) { + QString bookmarkName = it.key(); + QString bookmarkAddress = it.value().toString(); + addBookmarkToMenu(menubar, bookmarkName, bookmarkAddress); + } + Bookmarks::sortActions(menubar, _bookmarksMenu); } void LocationBookmarks::setHomeLocation() { auto addressManager = DependencyManager::get(); QString bookmarkAddress = addressManager->currentAddress().toString(); + Bookmarks::addBookmarkToFile(HOME_BOOKMARK, bookmarkAddress); } @@ -74,7 +86,7 @@ void LocationBookmarks::addBookmark() { Bookmarks::addBookmarkToFile(bookmarkName, bookmarkAddress); } -void LocationBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, const QString& address) { +void LocationBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& address) { QAction* teleportAction = _bookmarksMenu->newAction(); teleportAction->setData(address); connect(teleportAction, SIGNAL(triggered()), this, SLOT(teleportToBookmark())); @@ -85,4 +97,4 @@ void LocationBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, co menubar->addActionToQMenuAndActionHash(_bookmarksMenu, teleportAction, name, 0, QAction::NoRole); Bookmarks::sortActions(menubar, _bookmarksMenu); } -} +} \ No newline at end of file diff --git a/interface/src/LocationBookmarks.h b/interface/src/LocationBookmarks.h index 1324e96574..76f008cc55 100644 --- a/interface/src/LocationBookmarks.h +++ b/interface/src/LocationBookmarks.h @@ -22,14 +22,14 @@ class LocationBookmarks : public Bookmarks, public Dependency { public: LocationBookmarks(); - void setupMenus(Menu* menubar, MenuWrapper* menu) override; + void setupMenus(Menu* menubar, MenuWrapper* menu); static const QString HOME_BOOKMARK; public slots: void addBookmark(); protected: - void addBookmarkToMenu(Menu* menubar, const QString& name, const QString& address) override; + void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& address); private: const QString LOCATIONBOOKMARKS_FILENAME = "bookmarks.json"; From d43d8ae846982c4d0f2bdf556d6f589b2aec065b Mon Sep 17 00:00:00 2001 From: Menithal Date: Sun, 25 Jun 2017 22:01:14 +0300 Subject: [PATCH 0585/1049] Removed Old Comments --- interface/src/Bookmarks.cpp | 43 ------------------------------------- 1 file changed, 43 deletions(-) diff --git a/interface/src/Bookmarks.cpp b/interface/src/Bookmarks.cpp index f495e5b502..0bd6b01128 100644 --- a/interface/src/Bookmarks.cpp +++ b/interface/src/Bookmarks.cpp @@ -28,49 +28,6 @@ Bookmarks::Bookmarks() : _isMenuSorted(false) { } -/** -void Bookmarks::setupMenus(Menu* menubar, MenuWrapper* menu) { - // Enable/Disable menus as needed - enableMenuItems(_bookmarks.count() > 0); - - // Load Bookmarks - for (auto it = _bookmarks.begin(); it != _bookmarks.end(); ++it) { - QString bookmarkName = it.key(); - - QMap *avatarData; - QVariant::Type type = it.value().type; - - if (type == QVariant::Map){ - QMap& map = it.value().toMap; - - // Convert to map and get version.- - if (map.contains("version")){ - auto version = map.find("version"); - - if (version == AVATAR_BOOKMARK_VERSION) { - addBookmarkToMenu(menubar, bookmarkName, map); - } - } - else { - //Not valid. Skip? - } - } - else if (type == QVariant::String) { - // Bookmark String type, generic usually for avatars or locations. - QString bookmarkAddress = it.value().toString(); - avatarData = new QVariantMap; - - avatarData->insert(); - - addBookmarkToMenu(menubar, bookmarkName, bookmarkAddress); - } - else { - // Unexpected Type - } - - } -} -*/ void Bookmarks::deleteBookmark() { QStringList bookmarkList; QList menuItems = _bookmarksMenu->actions(); From 359642eb0e2fa4e434a5b6bc7919ab9ab2f21597 Mon Sep 17 00:00:00 2001 From: Menithal Date: Sun, 25 Jun 2017 23:48:36 +0300 Subject: [PATCH 0586/1049] Refining and allowing for Avatar Scale to be saved as well --- interface/src/AvatarBookmarks.cpp | 37 +++++++++++++++++++++---------- interface/src/AvatarBookmarks.h | 1 + interface/src/avatar/MyAvatar.cpp | 15 +++++++++++++ interface/src/avatar/MyAvatar.h | 5 ++++- 4 files changed, 45 insertions(+), 13 deletions(-) diff --git a/interface/src/AvatarBookmarks.cpp b/interface/src/AvatarBookmarks.cpp index 31c0e94073..db83a82a1e 100644 --- a/interface/src/AvatarBookmarks.cpp +++ b/interface/src/AvatarBookmarks.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -24,6 +25,8 @@ #include "AvatarBookmarks.h" #include "InterfaceLogging.h" +#include "QVariantGLM.h" + #include AvatarBookmarks::AvatarBookmarks() { @@ -70,23 +73,32 @@ void AvatarBookmarks::changeToBookmarkedAvatar() { auto myAvatar = DependencyManager::get()->getMyAvatar(); - // TODO: Phase this out eventually. + if (action->data().type() == QVariant::String) { + // TODO: Phase this out eventually. // Legacy avatar bookmark. myAvatar->useFullAvatarURL(action->data().toString()); - qCDebug(interfaceapp) << " Using Legacy Avatar Bookmark "; - } - else { - // TODO: this is where the entry is interpreted. + qCDebug(interfaceapp) << " Using Legacy V1 Avatar Bookmark "; + } else { + const QMap bookmark = action->data().toMap(); - // Not magic value. This is the current made version, and if it changes this interpreter should be updated to handle the new one separately. + // Not magic value. This is the current made version, and if it changes this interpreter should be updated to + // handle the new one separately. + // This is where the avatar bookmark entry is parsed. If adding new Paradrims, make sure to have backward compat with previous if (bookmark.value(ENTRY_VERSION) == 3) { + const QString& avatarUrl = bookmark.value(ENTRY_AVATAR_URL, "").toString(); + myAvatar->useFullAvatarURL(avatarUrl); + qCDebug(interfaceapp) << "Avatar On " << avatarUrl; + const QList& attachments = bookmark.value(ENTRY_AVATAR_ATTACHMENTS, QList()).toList(); - myAvatar->useFullAvatarURL(bookmark.value(ENTRY_AVATAR_URL).toString()); - myAvatar->setAttachmentsVariant(bookmark.value(ENTRY_AVATAR_ATTACHMENTS).toList()); - } - else { + qCDebug(interfaceapp) << "Attach " << attachments; + myAvatar->setAttachmentsVariant(attachments); + + const float& qScale = bookmark.value(ENTRY_AVATAR_SCALE, 1.0f).toFloat(); + myAvatar->setAvatarScale(qScale); + + } else { qCDebug(interfaceapp) << " Bookmark entry does not match client version, make sure client has a handler for the new AvatarBookmark"; } } @@ -108,13 +120,14 @@ void AvatarBookmarks::addBookmark() { auto myAvatar = DependencyManager::get()->getMyAvatar(); const QString& avatarUrl = myAvatar->getSkeletonModelURL().toString(); - const QVariantList& attachments = myAvatar->getAttachmentsVariant(); + const QVariant& avatarScale = myAvatar->getAvatarScale(); // If Avatar attachments ever change, this is where to update them, when saving remember to also append to AVATAR_BOOKMARK_VERSION QVariantMap *bookmark = new QVariantMap; bookmark->insert(ENTRY_VERSION, AVATAR_BOOKMARK_VERSION); bookmark->insert(ENTRY_AVATAR_URL, avatarUrl); - bookmark->insert(ENTRY_AVATAR_ATTACHMENTS, attachments); + bookmark->insert(ENTRY_AVATAR_SCALE, avatarScale); + bookmark->insert(ENTRY_AVATAR_ATTACHMENTS, myAvatar->getAttachmentsVariant()); Bookmarks::addBookmarkToFile(bookmarkName, *bookmark); } diff --git a/interface/src/AvatarBookmarks.h b/interface/src/AvatarBookmarks.h index 4136f5edca..0fc3ff9740 100644 --- a/interface/src/AvatarBookmarks.h +++ b/interface/src/AvatarBookmarks.h @@ -34,6 +34,7 @@ private: const QString AVATARBOOKMARKS_FILENAME = "avatarbookmarks.json"; const QString ENTRY_AVATAR_URL = "avatarUrl"; const QString ENTRY_AVATAR_ATTACHMENTS = "attachments"; + const QString ENTRY_AVATAR_SCALE = "avatarScale"; const QString ENTRY_VERSION = "version"; const int AVATAR_BOOKMARK_VERSION = 3; diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index e5c4f4b972..c932c82e39 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2524,6 +2524,21 @@ bool MyAvatar::getFlyingEnabled() { return _enableFlying; } +// Public interface for targetscale +float MyAvatar::getAvatarScale() { + return getTargetScale(); +} + +void MyAvatar::setAvatarScale(float val) { + + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setScale", Q_ARG(float, val)); + return; + } + + setTargetScale(val); +} + void MyAvatar::setCollisionsEnabled(bool enabled) { if (QThread::currentThread() != thread()) { diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index e2ea745ed0..97d3bc2a1e 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -366,7 +366,7 @@ public: float getDriveKey(DriveKeys key) const; Q_INVOKABLE float getRawDriveKey(DriveKeys key) const; void relayDriveKeysToCharacterController(); - + Q_INVOKABLE void disableDriveKey(DriveKeys key); Q_INVOKABLE void enableDriveKey(DriveKeys key); Q_INVOKABLE bool isDriveKeyDisabled(DriveKeys key) const; @@ -512,6 +512,9 @@ public: Q_INVOKABLE void setFlyingEnabled(bool enabled); Q_INVOKABLE bool getFlyingEnabled(); + Q_INVOKABLE float getAvatarScale(); + Q_INVOKABLE void setAvatarScale(float scale); + Q_INVOKABLE void setCollisionsEnabled(bool enabled); Q_INVOKABLE bool getCollisionsEnabled(); Q_INVOKABLE void setCharacterControllerEnabled(bool enabled); // deprecated From b1b26bc8a52094f9d6dae502718f896e0072d41e Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sun, 25 Jun 2017 02:34:58 -0700 Subject: [PATCH 0587/1049] Fix toolbar button mouse click when they were added via the tablet scripting interface --- libraries/ui/src/ui/TabletScriptingInterface.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index 8b3dc342e2..1e426dd8f0 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -623,7 +623,8 @@ TabletButtonProxy* TabletProxy::addButton(const QVariant& properties) { auto toolbarProxy = DependencyManager::get()->getSystemToolbarProxy(); if (toolbarProxy) { // copy properties from tablet button proxy to toolbar button proxy. - toolbarProxy->addButton(tabletButtonProxy->getProperties()); + auto toolbarButtonProxy = toolbarProxy->addButton(tabletButtonProxy->getProperties()); + tabletButtonProxy->setToolbarButtonProxy(toolbarButtonProxy); } } return tabletButtonProxy.data(); From 5abd254a5893c7f10b1e1e9462ad1964d2f27a0c Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 26 Jun 2017 15:58:14 +1200 Subject: [PATCH 0588/1049] Bail in Neuron plugin update if plugin not enabled --- plugins/hifiNeuron/src/NeuronPlugin.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/plugins/hifiNeuron/src/NeuronPlugin.cpp b/plugins/hifiNeuron/src/NeuronPlugin.cpp index 93e7da028f..4e27777628 100644 --- a/plugins/hifiNeuron/src/NeuronPlugin.cpp +++ b/plugins/hifiNeuron/src/NeuronPlugin.cpp @@ -367,6 +367,12 @@ void NeuronPlugin::init() { auto preferences = DependencyManager::get(); static const QString NEURON_PLUGIN { "Perception Neuron" }; + { + auto getter = [this]()->bool { return _enabled; }; + auto setter = [this](bool value) { _enabled = value; saveSettings(); }; + auto preference = new CheckPreference(NEURON_PLUGIN, "Enabled", getter, setter); + preferences->addPreference(preference); + } { auto getter = [this]()->QString { return _serverAddress; }; auto setter = [this](const QString& value) { _serverAddress = value; saveSettings(); }; @@ -387,12 +393,6 @@ void NeuronPlugin::init() { preference->setStep(1); preferences->addPreference(preference); } - { - auto getter = [this]()->bool { return _enabled; }; - auto setter = [this](bool value) { _enabled = value; saveSettings(); }; - auto preference = new CheckPreference(NEURON_PLUGIN, "Enabled", getter, setter); - preferences->addPreference(preference); - } } bool NeuronPlugin::isSupported() const { @@ -455,6 +455,10 @@ void NeuronPlugin::deactivate() { } void NeuronPlugin::pluginUpdate(float deltaTime, const controller::InputCalibrationData& inputCalibrationData) { + if (!_enabled) { + return; + } + std::vector joints; { // lock and copy From 361bc1ce034190a81b913a9fe078284d5a2d4a2a Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 26 Jun 2017 16:00:18 +1200 Subject: [PATCH 0589/1049] Add "enabled" setting for SDL2 joystick; bail in update if not enabled --- .../hifi/dialogs/GeneralPreferencesDialog.qml | 2 +- .../hifi/tablet/TabletGeneralPreferences.qml | 2 +- plugins/hifiSdl2/src/SDL2Manager.cpp | 48 ++++++++++++++++++- plugins/hifiSdl2/src/SDL2Manager.h | 8 +++- 4 files changed, 55 insertions(+), 5 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml index 44cae95696..605e2e79db 100644 --- a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml +++ b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml @@ -17,7 +17,7 @@ PreferencesDialog { id: root objectName: "GeneralPreferencesDialog" title: "General Settings" - showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "Sixense Controllers", "Perception Neuron", "Kinect"] + showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Sixense Controllers", "Perception Neuron", "Kinect"] property var settings: Settings { category: root.objectName property alias x: root.x diff --git a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml index fe043f6ac7..2558100d0f 100644 --- a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml @@ -32,6 +32,6 @@ StackView { TabletPreferencesDialog { id: root objectName: "TabletGeneralPreferences" - showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "Sixense Controllers", "Perception Neuron", "Kinect", "Vive Pucks Configuration"] + showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Sixense Controllers", "Perception Neuron", "Kinect", "Vive Pucks Configuration"] } } diff --git a/plugins/hifiSdl2/src/SDL2Manager.cpp b/plugins/hifiSdl2/src/SDL2Manager.cpp index 5ab5758412..2f7d91846d 100644 --- a/plugins/hifiSdl2/src/SDL2Manager.cpp +++ b/plugins/hifiSdl2/src/SDL2Manager.cpp @@ -11,8 +11,10 @@ #include -#include #include +#include +#include +#include #include "SDL2Manager.h" @@ -38,10 +40,13 @@ static_assert( (int)controller::RY == (int)SDL_CONTROLLER_AXIS_RIGHTY && (int)controller::LT == (int)SDL_CONTROLLER_AXIS_TRIGGERLEFT && (int)controller::RT == (int)SDL_CONTROLLER_AXIS_TRIGGERRIGHT, - "SDL2 equvalence: Enums and values from StandardControls.h are assumed to match enums from SDL_gamecontroller.h"); + "SDL2 equivalence: Enums and values from StandardControls.h are assumed to match enums from SDL_gamecontroller.h"); const char* SDL2Manager::NAME = "SDL2"; +const char* SDL2Manager::SDL2_ID_STRING = "SDL2"; + +const bool DEFAULT_ENABLED = false; SDL_JoystickID SDL2Manager::getInstanceId(SDL_GameController* controller) { SDL_Joystick* joystick = SDL_GameControllerGetJoystick(controller); @@ -49,6 +54,20 @@ SDL_JoystickID SDL2Manager::getInstanceId(SDL_GameController* controller) { } void SDL2Manager::init() { + loadSettings(); + + auto preferences = DependencyManager::get(); + static const QString SDL2_PLUGIN { "SDL2 Joystick" }; + { + auto getter = [this]()->bool { return _isEnabled; }; + auto setter = [this](bool value) { + _isEnabled = value; + saveSettings(); + }; + auto preference = new CheckPreference(SDL2_PLUGIN, "Enabled", getter, setter); + preferences->addPreference(preference); + } + bool initSuccess = (SDL_Init(SDL_INIT_GAMECONTROLLER | SDL_INIT_HAPTIC) == 0); if (initSuccess) { @@ -110,6 +129,27 @@ void SDL2Manager::deactivate() { InputPlugin::deactivate(); } +const char* SETTINGS_ENABLED_KEY = "enabled"; + +void SDL2Manager::saveSettings() const { + Settings settings; + QString idString = getID(); + settings.beginGroup(idString); + { + settings.setValue(QString(SETTINGS_ENABLED_KEY), _isEnabled); + } + settings.endGroup(); +} + +void SDL2Manager::loadSettings() { + Settings settings; + QString idString = getID(); + settings.beginGroup(idString); + { + _isEnabled = settings.value(SETTINGS_ENABLED_KEY, QVariant(DEFAULT_ENABLED)).toBool(); + } + settings.endGroup(); +} bool SDL2Manager::isSupported() const { return true; @@ -122,6 +162,10 @@ void SDL2Manager::pluginFocusOutEvent() { } void SDL2Manager::pluginUpdate(float deltaTime, const controller::InputCalibrationData& inputCalibrationData) { + if (!_isEnabled) { + return; + } + if (_isInitialized) { auto userInputMapper = DependencyManager::get(); for (auto joystick : _openJoysticks) { diff --git a/plugins/hifiSdl2/src/SDL2Manager.h b/plugins/hifiSdl2/src/SDL2Manager.h index 9cb4d268c0..48e779a204 100644 --- a/plugins/hifiSdl2/src/SDL2Manager.h +++ b/plugins/hifiSdl2/src/SDL2Manager.h @@ -25,6 +25,7 @@ public: // Plugin functions bool isSupported() const override; const QString getName() const override { return NAME; } + const QString getID() const override { return SDL2_ID_STRING; } QStringList getSubdeviceNames() override; @@ -39,6 +40,9 @@ public: void pluginFocusOutEvent() override; void pluginUpdate(float deltaTime, const controller::InputCalibrationData& inputCalibrationData) override; + virtual void saveSettings() const override; + virtual void loadSettings() override; + signals: void joystickAdded(Joystick* joystick); void joystickRemoved(Joystick* joystick); @@ -77,8 +81,10 @@ private: int buttonRelease() const { return SDL_RELEASED; } QMap _openJoysticks; - bool _isInitialized { false } ; + bool _isEnabled { false }; + bool _isInitialized { false }; static const char* NAME; + static const char* SDL2_ID_STRING; QStringList _subdeviceNames; }; From 31714675c358d3e76204d4d25a6927452aa4213f Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 26 Jun 2017 16:14:57 +1200 Subject: [PATCH 0590/1049] Remove unused Sixense preference and associated methods --- .../qml/hifi/dialogs/GeneralPreferencesDialog.qml | 2 +- .../qml/hifi/tablet/TabletGeneralPreferences.qml | 2 +- interface/src/ui/PreferencesDialog.cpp | 11 ----------- .../controllers/src/controllers/InputDevice.cpp | 14 -------------- .../controllers/src/controllers/InputDevice.h | 4 ---- 5 files changed, 2 insertions(+), 31 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml index 605e2e79db..08631bc6e8 100644 --- a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml +++ b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml @@ -17,7 +17,7 @@ PreferencesDialog { id: root objectName: "GeneralPreferencesDialog" title: "General Settings" - showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Sixense Controllers", "Perception Neuron", "Kinect"] + showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Perception Neuron", "Kinect"] property var settings: Settings { category: root.objectName property alias x: root.x diff --git a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml index 2558100d0f..d893bab776 100644 --- a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml @@ -32,6 +32,6 @@ StackView { TabletPreferencesDialog { id: root objectName: "TabletGeneralPreferences" - showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Sixense Controllers", "Perception Neuron", "Kinect", "Vive Pucks Configuration"] + showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Perception Neuron", "Kinect", "Vive Pucks Configuration"] } } diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 41a4ebdf68..d9f71c8d3d 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -297,17 +297,6 @@ void setupPreferences() { preferences->addPreference(preference); } - - { - auto getter = []()->float { return controller::InputDevice::getReticleMoveSpeed(); }; - auto setter = [](float value) { controller::InputDevice::setReticleMoveSpeed(value); }; - auto preference = new SpinnerPreference("Sixense Controllers", "Reticle movement speed", getter, setter); - preference->setMin(0); - preference->setMax(100); - preference->setStep(1); - preferences->addPreference(preference); - } - { static const QString RENDER("Graphics"); auto renderConfig = qApp->getRenderEngine()->getConfiguration(); diff --git a/libraries/controllers/src/controllers/InputDevice.cpp b/libraries/controllers/src/controllers/InputDevice.cpp index dd27726a55..a907842a17 100644 --- a/libraries/controllers/src/controllers/InputDevice.cpp +++ b/libraries/controllers/src/controllers/InputDevice.cpp @@ -15,20 +15,6 @@ namespace controller { - const float DEFAULT_HAND_RETICLE_MOVE_SPEED = 37.5f; - float InputDevice::_reticleMoveSpeed = DEFAULT_HAND_RETICLE_MOVE_SPEED; - - //Constants for getCursorPixelRangeMultiplier() - const float MIN_PIXEL_RANGE_MULT = 0.4f; - const float MAX_PIXEL_RANGE_MULT = 2.0f; - const float RANGE_MULT = (MAX_PIXEL_RANGE_MULT - MIN_PIXEL_RANGE_MULT) * 0.01f; - - //Returns a multiplier to be applied to the cursor range for the controllers - float InputDevice::getCursorPixelRangeMult() { - //scales (0,100) to (MINIMUM_PIXEL_RANGE_MULT, MAXIMUM_PIXEL_RANGE_MULT) - return InputDevice::_reticleMoveSpeed * RANGE_MULT + MIN_PIXEL_RANGE_MULT; - } - float InputDevice::getButton(int channel) const { if (!_buttonPressedMap.empty()) { if (_buttonPressedMap.find(channel) != _buttonPressedMap.end()) { diff --git a/libraries/controllers/src/controllers/InputDevice.h b/libraries/controllers/src/controllers/InputDevice.h index 9d46930104..7315868bb4 100644 --- a/libraries/controllers/src/controllers/InputDevice.h +++ b/libraries/controllers/src/controllers/InputDevice.h @@ -73,10 +73,6 @@ public: int getDeviceID() { return _deviceID; } void setDeviceID(int deviceID) { _deviceID = deviceID; } - static float getCursorPixelRangeMult(); - static float getReticleMoveSpeed() { return _reticleMoveSpeed; } - static void setReticleMoveSpeed(float reticleMoveSpeed) { _reticleMoveSpeed = reticleMoveSpeed; } - Input makeInput(StandardButtonChannel button) const; Input makeInput(StandardAxisChannel axis) const; Input makeInput(StandardPoseChannel pose) const; From 72d712ac767ebc04ab8a1fcb83b0f79ede6d43e7 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 26 Jun 2017 16:43:06 +1200 Subject: [PATCH 0591/1049] Add "enabled" setting for Sixense; bail in update if note enabled --- .../hifi/dialogs/GeneralPreferencesDialog.qml | 2 +- .../hifi/tablet/TabletGeneralPreferences.qml | 2 +- plugins/hifiSixense/src/SixenseManager.cpp | 47 +++++++++++++++---- plugins/hifiSixense/src/SixenseManager.h | 7 ++- 4 files changed, 46 insertions(+), 12 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml index 08631bc6e8..605e2e79db 100644 --- a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml +++ b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml @@ -17,7 +17,7 @@ PreferencesDialog { id: root objectName: "GeneralPreferencesDialog" title: "General Settings" - showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Perception Neuron", "Kinect"] + showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Sixense Controllers", "Perception Neuron", "Kinect"] property var settings: Settings { category: root.objectName property alias x: root.x diff --git a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml index d893bab776..2558100d0f 100644 --- a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml @@ -32,6 +32,6 @@ StackView { TabletPreferencesDialog { id: root objectName: "TabletGeneralPreferences" - showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Perception Neuron", "Kinect", "Vive Pucks Configuration"] + showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Sixense Controllers", "Perception Neuron", "Kinect", "Vive Pucks Configuration"] } } diff --git a/plugins/hifiSixense/src/SixenseManager.cpp b/plugins/hifiSixense/src/SixenseManager.cpp index 7d443bd50d..88f73786bd 100644 --- a/plugins/hifiSixense/src/SixenseManager.cpp +++ b/plugins/hifiSixense/src/SixenseManager.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -46,19 +47,26 @@ static const unsigned int BUTTON_TRIGGER = 1U << 8; const glm::vec3 SixenseManager::DEFAULT_AVATAR_POSITION { -0.25f, -0.35f, -0.3f }; // in hydra frame const float SixenseManager::CONTROLLER_THRESHOLD { 0.35f }; + +bool SixenseManager::_isEnabled = false; bool SixenseManager::_sixenseLoaded = false; +#define BAIL_IF_NOT_ENABLED \ + if (!_isEnabled) { \ + return; \ + } + #define BAIL_IF_NOT_LOADED \ if (!_sixenseLoaded) { \ return; \ } - - const char* SixenseManager::NAME { "Sixense" }; -const char* SixenseManager::HYDRA_ID_STRING { "Razer Hydra" }; +const char* SixenseManager::SIXENSE_ID_STRING { "Sixense" }; -const char* MENU_PARENT { "Developer" }; +const bool DEFAULT_ENABLED = false; + +const char* MENU_PARENT{ "Developer" }; const char* MENU_NAME { "Sixense" }; const char* MENU_PATH { "Developer" ">" "Sixense" }; const char* TOGGLE_SMOOTH { "Smooth Sixense Movement" }; @@ -73,6 +81,22 @@ bool SixenseManager::isSupported() const { #endif } +void SixenseManager::init() { + loadSettings(); + + auto preferences = DependencyManager::get(); + static const QString SIXENSE_PLUGIN { "Sixense Controllers" }; + { + auto getter = [this]()->bool { return _isEnabled; }; + auto setter = [this](bool value) { + _isEnabled = value; + saveSettings(); + }; + auto preference = new CheckPreference(SIXENSE_PLUGIN, "Enabled", getter, setter); + preferences->addPreference(preference); + } +} + bool SixenseManager::activate() { InputPlugin::activate(); @@ -133,6 +157,7 @@ void SixenseManager::setSixenseFilter(bool filter) { } void SixenseManager::pluginUpdate(float deltaTime, const controller::InputCalibrationData& inputCalibrationData) { + BAIL_IF_NOT_ENABLED BAIL_IF_NOT_LOADED #ifdef HAVE_SIXENSE @@ -553,14 +578,19 @@ QString SixenseManager::InputDevice::getDefaultMappingConfig() const { return MAPPING_JSON; } +const char* SETTINGS_ENABLED_KEY = "enabled"; +const char* SETTINGS_AVATAR_POSITION_KEY = "avatarPosition"; +const char* SETTINGS_AVATAR_ROTATION_KEY = "avatarPosition"; + // virtual void SixenseManager::saveSettings() const { Settings settings; QString idString = getID(); settings.beginGroup(idString); { - settings.setVec3Value(QString("avatarPosition"), _inputDevice->_avatarPosition); - settings.setQuatValue(QString("avatarRotation"), _inputDevice->_avatarRotation); + settings.setValue(QString(SETTINGS_ENABLED_KEY), _isEnabled); + settings.setVec3Value(QString(SETTINGS_AVATAR_POSITION_KEY), _inputDevice->_avatarPosition); + settings.setQuatValue(QString(SETTINGS_AVATAR_ROTATION_KEY), _inputDevice->_avatarRotation); } settings.endGroup(); } @@ -570,8 +600,9 @@ void SixenseManager::loadSettings() { QString idString = getID(); settings.beginGroup(idString); { - settings.getVec3ValueIfValid(QString("avatarPosition"), _inputDevice->_avatarPosition); - settings.getQuatValueIfValid(QString("avatarRotation"), _inputDevice->_avatarRotation); + _isEnabled = settings.value(SETTINGS_ENABLED_KEY, QVariant(DEFAULT_ENABLED)).toBool(); + settings.getVec3ValueIfValid(QString(SETTINGS_AVATAR_POSITION_KEY), _inputDevice->_avatarPosition); + settings.getQuatValueIfValid(QString(SETTINGS_AVATAR_ROTATION_KEY), _inputDevice->_avatarRotation); } settings.endGroup(); } diff --git a/plugins/hifiSixense/src/SixenseManager.h b/plugins/hifiSixense/src/SixenseManager.h index 5b2c140868..e9d571ad8c 100644 --- a/plugins/hifiSixense/src/SixenseManager.h +++ b/plugins/hifiSixense/src/SixenseManager.h @@ -29,12 +29,14 @@ public: // Plugin functions virtual bool isSupported() const override; virtual const QString getName() const override { return NAME; } - virtual const QString getID() const override { return HYDRA_ID_STRING; } + virtual const QString getID() const override { return SIXENSE_ID_STRING; } // Sixense always seems to initialize even if the hydras are not present. Is there // a way we can properly detect whether the hydras are present? // bool isHandController() const override { return true; } + virtual void init() override; + virtual bool activate() override; virtual void deactivate() override; @@ -93,8 +95,9 @@ private: std::shared_ptr _inputDevice { std::make_shared() }; static const char* NAME; - static const char* HYDRA_ID_STRING; + static const char* SIXENSE_ID_STRING; + static bool _isEnabled; static bool _sixenseLoaded; }; From 77644e7e9dbf890e760d54a8a5a20b30d3e877b7 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 26 Jun 2017 14:34:09 +0200 Subject: [PATCH 0592/1049] Removing commented objects from deferredlighting effect --- .../render-utils/src/DeferredLightingEffect.h | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/libraries/render-utils/src/DeferredLightingEffect.h b/libraries/render-utils/src/DeferredLightingEffect.h index fcbb8acf25..7fc9600d18 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.h +++ b/libraries/render-utils/src/DeferredLightingEffect.h @@ -50,27 +50,13 @@ public: void setupKeyLightBatch(const RenderArgs* args, gpu::Batch& batch, int lightBufferUnit, int ambientBufferUnit, int skyboxCubemapUnit); void unsetKeyLightBatch(gpu::Batch& batch, int lightBufferUnit, int ambientBufferUnit, int skyboxCubemapUnit); - // update global lighting - // void setGlobalLight(const model::LightPointer& light); - // const model::LightPointer& getGlobalLight() const; - - // const LightStagePointer& getLightStage() { return _lightStage; } - // const BackgroundStagePointer& getBackgroundStage() { return _backgroundStage; } - void setShadowMapEnabled(bool enable) { _shadowMapEnabled = enable; }; void setAmbientOcclusionEnabled(bool enable) { _ambientOcclusionEnabled = enable; } bool isAmbientOcclusionEnabled() const { return _ambientOcclusionEnabled; } - // model::SkyboxPointer getDefaultSkybox() const { return _defaultSkybox; } - // gpu::TexturePointer getDefaultSkyboxTexture() const { return _defaultSkyboxTexture; } - // gpu::TexturePointer getDefaultSkyboxAmbientTexture() const { return _defaultSkyboxAmbientTexture; } - private: DeferredLightingEffect() = default; - // LightStagePointer _lightStage; - // BackgroundStagePointer _backgroundStage; - bool _shadowMapEnabled{ false }; bool _ambientOcclusionEnabled{ false }; @@ -97,15 +83,6 @@ private: LightLocationsPtr _localLightLocations; LightLocationsPtr _localLightOutlineLocations; - // using Lights = std::vector; - - // Lights _allocatedLights; - // std::vector _globalLights; - - // model::SkyboxPointer _defaultSkybox { new ProceduralSkybox() }; - // gpu::TexturePointer _defaultSkyboxTexture; - // gpu::TexturePointer _defaultSkyboxAmbientTexture; - friend class LightClusteringPass; friend class RenderDeferredSetup; friend class RenderDeferredLocals; From 904f22985c4840c3412308cb6a52393ac75fd8be Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 26 Jun 2017 16:43:04 +0200 Subject: [PATCH 0593/1049] CLeaning up comments --- .../entities-renderer/src/RenderableZoneEntityItem.cpp | 6 ++---- libraries/render-utils/src/BackgroundStage.cpp | 6 ++++-- libraries/render-utils/src/BackgroundStage.h | 3 +++ libraries/render-utils/src/DeferredLightingEffect.cpp | 10 +++++----- libraries/render-utils/src/LightStage.cpp | 6 ++++-- libraries/render-utils/src/LightStage.h | 3 +++ libraries/render/src/render/Scene.h | 2 +- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index bb07454992..a57a6e5d52 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -554,13 +554,11 @@ void RenderableZoneEntityItemMeta::setProceduralUserData(QString userData) { void RenderableZoneEntityItemMeta::render(RenderArgs* args) { if (!_stage) { - // _stage = DependencyManager::get()->getLightStage(); - _stage = args->_scene->getStage("LIGHT_STAGE"); + _stage = args->_scene->getStage(); } if (!_backgroundStage) { - //_backgroundStage = DependencyManager::get()->getBackgroundStage(); - _backgroundStage = args->_scene->getStage("BACKGROUND_STAGE"); + _backgroundStage = args->_scene->getStage(); } { // Sun diff --git a/libraries/render-utils/src/BackgroundStage.cpp b/libraries/render-utils/src/BackgroundStage.cpp index c164b584a9..8599ec64e0 100644 --- a/libraries/render-utils/src/BackgroundStage.cpp +++ b/libraries/render-utils/src/BackgroundStage.cpp @@ -13,6 +13,8 @@ #include +std::string BackgroundStage::_stageName { "BACKGROUND_STAGE"}; + BackgroundStage::Index BackgroundStage::findBackground(const BackgroundPointer& background) const { auto found = _backgroundMap.find(background); if (found != _backgroundMap.end()) { @@ -143,9 +145,9 @@ BackgroundStageSetup::BackgroundStageSetup() { } void BackgroundStageSetup::run(const render::RenderContextPointer& renderContext) { - auto stage = renderContext->_scene->getStage("BACKGROUND_STAGE"); + auto stage = renderContext->_scene->getStage(BackgroundStage::getName()); if (!stage) { - renderContext->_scene->resetStage("BACKGROUND_STAGE", std::make_shared()); + renderContext->_scene->resetStage(BackgroundStage::getName(), std::make_shared()); } } diff --git a/libraries/render-utils/src/BackgroundStage.h b/libraries/render-utils/src/BackgroundStage.h index 2f0231b071..eab7c94f0d 100644 --- a/libraries/render-utils/src/BackgroundStage.h +++ b/libraries/render-utils/src/BackgroundStage.h @@ -23,6 +23,9 @@ // Background stage to set up background-related rendering tasks class BackgroundStage : public render::Stage { public: + static std::string _stageName; + static const std::string& getName() { return _stageName; } + using Index = render::indexed_container::Index; static const Index INVALID_INDEX { render::indexed_container::INVALID_INDEX }; static bool isIndexInvalid(Index index) { return index == INVALID_INDEX; } diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index 84c972bab3..399225ac3b 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -104,7 +104,7 @@ void DeferredLightingEffect::init() { void DeferredLightingEffect::setupKeyLightBatch(const RenderArgs* args, gpu::Batch& batch, int lightBufferUnit, int ambientBufferUnit, int skyboxCubemapUnit) { PerformanceTimer perfTimer("DLE->setupBatch()"); model::LightPointer keySunLight; - auto lightStage = args->_scene->getStage("LIGHT_STAGE"); + auto lightStage = args->_scene->getStage(); if (lightStage && lightStage->_currentFrame._sunLights.size()) { keySunLight = lightStage->getLight(lightStage->_currentFrame._sunLights.front()); } else { @@ -427,7 +427,7 @@ void PrepareDeferred::run(const RenderContextPointer& renderContext, const Input // Prepare a fresh Light Frame - auto lightStage = renderContext->_scene->getStage("LIGHT_STAGE"); + auto lightStage = renderContext->_scene->getStage(); lightStage->_currentFrame.clear(); } @@ -491,7 +491,7 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext, // Global directional light and ambient pass - auto lightStage = renderContext->_scene->getStage("LIGHT_STAGE"); + auto lightStage = renderContext->_scene->getStage(); assert(lightStage->getNumLights() > 0); auto lightAndShadow = lightStage->getLightAndShadow(0); const auto& globalShadow = lightAndShadow.second; @@ -716,7 +716,7 @@ void DefaultLightingSetup::run(const RenderContextPointer& renderContext) { } } - auto lightStage = renderContext->_scene->getStage("LIGHT_STAGE"); + auto lightStage = renderContext->_scene->getStage(); if (lightStage) { // Allocate a default global light directional and ambient @@ -743,7 +743,7 @@ void DefaultLightingSetup::run(const RenderContextPointer& renderContext) { lightStage->addShadow(defaultLightID); } - auto backgroundStage = renderContext->_scene->getStage("BACKGROUND_STAGE"); + auto backgroundStage = renderContext->_scene->getStage(); if (backgroundStage) { auto background = std::make_shared(); diff --git a/libraries/render-utils/src/LightStage.cpp b/libraries/render-utils/src/LightStage.cpp index 10c99bf008..d0e9f2467e 100644 --- a/libraries/render-utils/src/LightStage.cpp +++ b/libraries/render-utils/src/LightStage.cpp @@ -13,6 +13,8 @@ #include "LightStage.h" +std::string LightStage::_stageName { "LIGHT_STAGE"}; + LightStage::LightStage() { } @@ -172,10 +174,10 @@ LightStageSetup::LightStageSetup() { } void LightStageSetup::run(const render::RenderContextPointer& renderContext) { - auto stage = renderContext->_scene->getStage("LIGHT_STAGE"); + auto stage = renderContext->_scene->getStage(LightStage::getName()); if (!stage) { stage = std::make_shared(); - renderContext->_scene->resetStage("LIGHT_STAGE", stage); + renderContext->_scene->resetStage(LightStage::getName(), stage); } } diff --git a/libraries/render-utils/src/LightStage.h b/libraries/render-utils/src/LightStage.h index 8273118f0c..f946cf699e 100644 --- a/libraries/render-utils/src/LightStage.h +++ b/libraries/render-utils/src/LightStage.h @@ -28,6 +28,9 @@ class ViewFrustum; // Light stage to set up light-related rendering tasks class LightStage : public render::Stage { public: + static std::string _stageName; + static const std::string& getName() { return _stageName; } + using Index = render::indexed_container::Index; static const Index INVALID_INDEX { render::indexed_container::INVALID_INDEX }; static bool isIndexInvalid(Index index) { return index == INVALID_INDEX; } diff --git a/libraries/render/src/render/Scene.h b/libraries/render/src/render/Scene.h index f0c5e7a3f0..199d9ce224 100644 --- a/libraries/render/src/render/Scene.h +++ b/libraries/render/src/render/Scene.h @@ -117,7 +117,7 @@ public: // Thread safe StagePointer getStage(const Stage::Name& name) const; template - std::shared_ptr getStage(const Stage::Name& name) const { + std::shared_ptr getStage(const Stage::Name& name = T::getName()) const { auto stage = getStage(name); return (stage ? std::static_pointer_cast(stage) : std::shared_ptr()); } From a2fc44703d4be82b9b10982e2834c6aeece07b5a Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 26 Jun 2017 16:45:54 +0200 Subject: [PATCH 0594/1049] One less constant --- libraries/render-utils/src/BackgroundStage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/render-utils/src/BackgroundStage.cpp b/libraries/render-utils/src/BackgroundStage.cpp index 8599ec64e0..5275331696 100644 --- a/libraries/render-utils/src/BackgroundStage.cpp +++ b/libraries/render-utils/src/BackgroundStage.cpp @@ -62,7 +62,7 @@ void DrawBackgroundStage::run(const render::RenderContextPointer& renderContext, // Background rendering decision - auto backgroundStage = renderContext->_scene->getStage("BACKGROUND_STAGE"); + auto backgroundStage = renderContext->_scene->getStage(); model::SunSkyStagePointer background; model::SkyboxPointer skybox; if (backgroundStage->_currentFrame._backgrounds.size()) { From 7cbeabfc2991949ec18eed4c8ec16c4c1f59a7a5 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 26 Jun 2017 16:49:20 +0200 Subject: [PATCH 0595/1049] less comments & constant --- libraries/render-utils/src/LightClusters.cpp | 2 +- libraries/render-utils/src/LightPayload.cpp | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/libraries/render-utils/src/LightClusters.cpp b/libraries/render-utils/src/LightClusters.cpp index 79b755f310..1f99f190af 100644 --- a/libraries/render-utils/src/LightClusters.cpp +++ b/libraries/render-utils/src/LightClusters.cpp @@ -576,7 +576,7 @@ void LightClusteringPass::run(const render::RenderContextPointer& renderContext, // From the LightStage and the current frame, update the light cluster Grid // auto deferredLightingEffect = DependencyManager::get(); // auto lightStage = deferredLightingEffect->getLightStage(); - auto lightStage = renderContext->_scene->getStage("LIGHT_STAGE"); + auto lightStage = renderContext->_scene->getStage(); _lightClusters->updateLightStage(lightStage); _lightClusters->updateLightFrame(lightStage->_currentFrame, lightingModel->isPointLightEnabled(), lightingModel->isSpotLightEnabled()); diff --git a/libraries/render-utils/src/LightPayload.cpp b/libraries/render-utils/src/LightPayload.cpp index d0cc8dfd18..5f7f7236f2 100644 --- a/libraries/render-utils/src/LightPayload.cpp +++ b/libraries/render-utils/src/LightPayload.cpp @@ -55,8 +55,7 @@ LightPayload::~LightPayload() { void LightPayload::render(RenderArgs* args) { if (!_stage) { - // _stage = DependencyManager::get()->getLightStage(); - _stage = args->_scene->getStage("LIGHT_STAGE"); + _stage = args->_scene->getStage(); } // Do we need to allocate the light in the stage ? if (LightStage::isIndexInvalid(_index)) { @@ -124,8 +123,7 @@ KeyLightPayload::~KeyLightPayload() { void KeyLightPayload::render(RenderArgs* args) { if (!_stage) { - // _stage = DependencyManager::get()->getLightStage(); - _stage = args->_scene->getStage("LIGHT_STAGE"); + _stage = args->_scene->getStage(); } // Do we need to allocate the light in the stage ? if (LightStage::isIndexInvalid(_index)) { From 6ab2dccd3830dbe013337cbbf51b7693c19f7cb4 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 26 Jun 2017 16:52:04 +0200 Subject: [PATCH 0596/1049] less comments & constant --- libraries/render-utils/src/LightClusters.cpp | 2 -- libraries/render-utils/src/RenderShadowTask.cpp | 6 ++---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/libraries/render-utils/src/LightClusters.cpp b/libraries/render-utils/src/LightClusters.cpp index 1f99f190af..74209ce951 100644 --- a/libraries/render-utils/src/LightClusters.cpp +++ b/libraries/render-utils/src/LightClusters.cpp @@ -574,8 +574,6 @@ void LightClusteringPass::run(const render::RenderContextPointer& renderContext, } // From the LightStage and the current frame, update the light cluster Grid - // auto deferredLightingEffect = DependencyManager::get(); - // auto lightStage = deferredLightingEffect->getLightStage(); auto lightStage = renderContext->_scene->getStage(); _lightClusters->updateLightStage(lightStage); _lightClusters->updateLightFrame(lightStage->_currentFrame, lightingModel->isPointLightEnabled(), lightingModel->isSpotLightEnabled()); diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp index 2d8f6c0cab..a817a6abff 100644 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -35,8 +35,7 @@ void RenderShadowMap::run(const render::RenderContextPointer& renderContext, assert(renderContext->args); assert(renderContext->args->hasViewFrustum()); - // auto lightStage = DependencyManager::get()->getLightStage(); - auto lightStage = renderContext->_scene->getStage("LIGHT_STAGE"); + auto lightStage = renderContext->_scene->getStage(); LightStage::Index globalLightIndex { 0 }; @@ -141,8 +140,7 @@ void RenderShadowTask::configure(const Config& configuration) { } void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, Output& output) { - // auto lightStage = DependencyManager::get()->getLightStage(); - auto lightStage = renderContext->_scene->getStage("LIGHT_STAGE"); + auto lightStage = renderContext->_scene->getStage(); const auto globalShadow = lightStage->getShadow(0); // Cache old render args From 5e05c41980c9248f67b33ccd3fb6e20cded4dc2a Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 26 Jun 2017 16:56:04 +0200 Subject: [PATCH 0597/1049] less comments & constant --- libraries/render-utils/src/DebugDeferredBuffer.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/libraries/render-utils/src/DebugDeferredBuffer.cpp b/libraries/render-utils/src/DebugDeferredBuffer.cpp index e83789252c..8887de81ef 100644 --- a/libraries/render-utils/src/DebugDeferredBuffer.cpp +++ b/libraries/render-utils/src/DebugDeferredBuffer.cpp @@ -432,11 +432,8 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I batch.setResourceTexture(Lighting, deferredFramebuffer->getLightingTexture()); } - // auto deferredLightingEffect = DependencyManager::get(); - auto lightStage = renderContext->_scene->getStage("LIGHT_STAGE"); - // assert(deferredLightingEffect->getLightStage()->getNumLights() > 0); + auto lightStage = renderContext->_scene->getStage(); assert(lightStage->getNumLights() > 0); - // auto lightAndShadow = deferredLightingEffect->getLightStage()->getLightAndShadow(0); auto lightAndShadow = lightStage->getLightAndShadow(0); const auto& globalShadow = lightAndShadow.second; if (globalShadow) { From 7687bdc0600880b40fc5b7d13fe6b877afa4e080 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 26 Jun 2017 17:02:45 +0200 Subject: [PATCH 0598/1049] less comments & constant --- .../src/DeferredLightingEffect.cpp | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index 399225ac3b..5f18916a92 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -107,26 +107,27 @@ void DeferredLightingEffect::setupKeyLightBatch(const RenderArgs* args, gpu::Bat auto lightStage = args->_scene->getStage(); if (lightStage && lightStage->_currentFrame._sunLights.size()) { keySunLight = lightStage->getLight(lightStage->_currentFrame._sunLights.front()); - } else { - keySunLight = lightStage->getLight(0); } model::LightPointer keyAmbiLight; if (lightStage && lightStage->_currentFrame._ambientLights.size()) { keyAmbiLight = lightStage->getLight(lightStage->_currentFrame._ambientLights.front()); - } else { - keyAmbiLight = lightStage->getLight(0); } - if (lightBufferUnit >= 0) { - batch.setUniformBuffer(lightBufferUnit, keySunLight->getLightSchemaBuffer()); - } - if (ambientBufferUnit >= 0) { - batch.setUniformBuffer(ambientBufferUnit, keyAmbiLight->getAmbientSchemaBuffer()); + if (keySunLight) { + if (lightBufferUnit >= 0) { + batch.setUniformBuffer(lightBufferUnit, keySunLight->getLightSchemaBuffer()); + } } - if (keyAmbiLight->getAmbientMap() && (skyboxCubemapUnit >= 0)) { - batch.setResourceTexture(skyboxCubemapUnit, keyAmbiLight->getAmbientMap()); + if (keyAmbiLight) { + if (ambientBufferUnit >= 0) { + batch.setUniformBuffer(ambientBufferUnit, keyAmbiLight->getAmbientSchemaBuffer()); + } + + if (keyAmbiLight->getAmbientMap() && (skyboxCubemapUnit >= 0)) { + batch.setResourceTexture(skyboxCubemapUnit, keyAmbiLight->getAmbientMap()); + } } } From db2b702221fbf0b02f8eab9f7b707f1e6398c143 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Mon, 26 Jun 2017 08:08:52 -0700 Subject: [PATCH 0599/1049] Fix reverbTest script --- scripts/developer/utilities/tools/reverbTest.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/developer/utilities/tools/reverbTest.js b/scripts/developer/utilities/tools/reverbTest.js index a7a6bad9d7..8d83140ecd 100644 --- a/scripts/developer/utilities/tools/reverbTest.js +++ b/scripts/developer/utilities/tools/reverbTest.js @@ -35,8 +35,8 @@ var audioOptions = new AudioEffectOptions({ wetDryMix: 50, }); -AudioDevice.setReverbOptions(audioOptions); -AudioDevice.setReverb(true); +Audio.setReverbOptions(audioOptions); +Audio.setReverb(true); print("Reverb is ON."); var panel = new Panel(10, 160); @@ -66,7 +66,7 @@ var parameters = [ ] function setter(name) { - return function(value) { audioOptions[name] = value; AudioDevice.setReverbOptions(audioOptions); } + return function(value) { audioOptions[name] = value; Audio.setReverbOptions(audioOptions); } } function getter(name) { @@ -89,7 +89,7 @@ Controller.mouseReleaseEvent.connect(function(event) { return panel.mouseRelease function scriptEnding() { panel.destroy(); - AudioDevice.setReverb(false); + Audio.setReverb(false); print("Reverb is OFF."); } Script.scriptEnding.connect(scriptEnding); From fba1a8ddaa284bb2be4ca791bdd5f6be8a553f76 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Mon, 26 Jun 2017 08:28:29 -0700 Subject: [PATCH 0600/1049] Fix halfDuplex script --- scripts/tutorials/halfDuplex.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/scripts/tutorials/halfDuplex.js b/scripts/tutorials/halfDuplex.js index e1ed132233..d4a993ae06 100644 --- a/scripts/tutorials/halfDuplex.js +++ b/scripts/tutorials/halfDuplex.js @@ -20,7 +20,7 @@ var averageLoudness = 0.0; var AVERAGING_TIME = 0.9; var LOUDNESS_THRESHOLD = 100; -var HYSTERESIS_GAP = 1.41; // 3db gap +var HYSTERESIS_GAP = 1.41; // 3dB gap var MICROPHONE_DISPLAY_NAME = "Microphone"; var debug = false; @@ -54,17 +54,13 @@ Script.update.connect(function () { print("Muted!"); } isMuted = true; - if (!AudioDevice.getMuted()) { - AudioDevice.toggleMute(); - } + Audio.muted = true; } else if (isMuted && (averageLoudness < LOUDNESS_THRESHOLD)) { if (debug) { print("UnMuted!"); } isMuted = false; - if (AudioDevice.getMuted()) { - AudioDevice.toggleMute(); - } + Audio.muted = false; } }); From 5f92c1adc09abb7c332a300c40fc1b352c1c6257 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 26 Jun 2017 09:40:07 -0700 Subject: [PATCH 0601/1049] Update FindFBX to use newer MSVC_VERSION --- cmake/modules/FindFBX.cmake | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/cmake/modules/FindFBX.cmake b/cmake/modules/FindFBX.cmake index b362d93cd3..9a1d08a010 100644 --- a/cmake/modules/FindFBX.cmake +++ b/cmake/modules/FindFBX.cmake @@ -56,27 +56,17 @@ elseif (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") endif() function(_fbx_find_library _name _lib _suffix) - if (MSVC15) + if (MSVC_VERSION EQUAL 1910) set(VS_PREFIX vs2017) - endif() - - if (MSVC14) + elseif (MSVC_VERSION EQUAL 1900) set(VS_PREFIX vs2015) - endif() - - if (MSVC12) + elseif (MSVC_VERSION EQUAL 1800) set(VS_PREFIX vs2013) - endif() - - if (MSVC11) + elseif (MSVC_VERSION EQUAL 1700) set(VS_PREFIX vs2012) - endif() - - if (MSVC10) + elseif (MSVC_VERSION EQUAL 1600) set(VS_PREFIX vs2010) - endif() - - if (MSVC90) + elseif (MSVC_VERSION EQUAL 1500) set(VS_PREFIX vs2008) endif() From 232382e6d0e1da354fb8df757d4f8ad3bbbede29 Mon Sep 17 00:00:00 2001 From: Menithal Date: Mon, 26 Jun 2017 19:52:11 +0300 Subject: [PATCH 0602/1049] 21387: Fixed issue with av scaling via script --- interface/src/avatar/MyAvatar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index c932c82e39..3f5f1739c8 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2532,7 +2532,7 @@ float MyAvatar::getAvatarScale() { void MyAvatar::setAvatarScale(float val) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "setScale", Q_ARG(float, val)); + QMetaObject::invokeMethod(this, "setAvatarScale", Q_ARG(float, val)); return; } From e5f5d3835cdfb13ed9fe3fadbb86d1faa7c808dd Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Mon, 26 Jun 2017 08:08:52 -0700 Subject: [PATCH 0603/1049] Fix reverbTest script --- scripts/developer/utilities/tools/reverbTest.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/developer/utilities/tools/reverbTest.js b/scripts/developer/utilities/tools/reverbTest.js index a7a6bad9d7..8d83140ecd 100644 --- a/scripts/developer/utilities/tools/reverbTest.js +++ b/scripts/developer/utilities/tools/reverbTest.js @@ -35,8 +35,8 @@ var audioOptions = new AudioEffectOptions({ wetDryMix: 50, }); -AudioDevice.setReverbOptions(audioOptions); -AudioDevice.setReverb(true); +Audio.setReverbOptions(audioOptions); +Audio.setReverb(true); print("Reverb is ON."); var panel = new Panel(10, 160); @@ -66,7 +66,7 @@ var parameters = [ ] function setter(name) { - return function(value) { audioOptions[name] = value; AudioDevice.setReverbOptions(audioOptions); } + return function(value) { audioOptions[name] = value; Audio.setReverbOptions(audioOptions); } } function getter(name) { @@ -89,7 +89,7 @@ Controller.mouseReleaseEvent.connect(function(event) { return panel.mouseRelease function scriptEnding() { panel.destroy(); - AudioDevice.setReverb(false); + Audio.setReverb(false); print("Reverb is OFF."); } Script.scriptEnding.connect(scriptEnding); From 2260c0965c55c8e15ef3477ca385d65dc7a9f26b Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Mon, 26 Jun 2017 08:28:29 -0700 Subject: [PATCH 0604/1049] Fix halfDuplex script --- scripts/tutorials/halfDuplex.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/scripts/tutorials/halfDuplex.js b/scripts/tutorials/halfDuplex.js index e1ed132233..d4a993ae06 100644 --- a/scripts/tutorials/halfDuplex.js +++ b/scripts/tutorials/halfDuplex.js @@ -20,7 +20,7 @@ var averageLoudness = 0.0; var AVERAGING_TIME = 0.9; var LOUDNESS_THRESHOLD = 100; -var HYSTERESIS_GAP = 1.41; // 3db gap +var HYSTERESIS_GAP = 1.41; // 3dB gap var MICROPHONE_DISPLAY_NAME = "Microphone"; var debug = false; @@ -54,17 +54,13 @@ Script.update.connect(function () { print("Muted!"); } isMuted = true; - if (!AudioDevice.getMuted()) { - AudioDevice.toggleMute(); - } + Audio.muted = true; } else if (isMuted && (averageLoudness < LOUDNESS_THRESHOLD)) { if (debug) { print("UnMuted!"); } isMuted = false; - if (AudioDevice.getMuted()) { - AudioDevice.toggleMute(); - } + Audio.muted = false; } }); From d7416434bf9c869e26a96c5503252665ca98bc84 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Mon, 26 Jun 2017 11:38:24 -0700 Subject: [PATCH 0605/1049] added tool to visualize avatar-animation.json using graphviz. --- tools/avatar-json-to-dot.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 tools/avatar-json-to-dot.js diff --git a/tools/avatar-json-to-dot.js b/tools/avatar-json-to-dot.js new file mode 100644 index 0000000000..fcd75a99c1 --- /dev/null +++ b/tools/avatar-json-to-dot.js @@ -0,0 +1,27 @@ +// usage: +// node avatar-json-to-dot.js /path/to/avatar-animaton.json > out.dot +// +// Then if you have graphviz installed you can run the following command to generate a png. +// dot -Tpng out.dot > out.png + +var fs = require('fs'); +var filename = process.argv[2]; + +function dumpNodes(node) { + node.children.forEach(function (child) { + console.log(' ' + node.id + ' -> ' + child.id + ';'); + dumpNodes(child); + }); +} + +fs.readFile(filename, 'utf8', function (err, data) { + if (err) { + console.log('error opening ' + filename + ', err = ' + err); + } else { + var graph = JSON.parse(data); + console.log('digraph graphname {'); + console.log(' rankdir = "LR";'); + dumpNodes(graph.root); + console.log('}'); + } +}); From 0a0e40e1829af0894e2f21142150646c82b610fa Mon Sep 17 00:00:00 2001 From: Menithal Date: Mon, 26 Jun 2017 23:04:48 +0300 Subject: [PATCH 0606/1049] Removed Redudant qualification from heade:>r --- interface/src/Bookmarks.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Bookmarks.h b/interface/src/Bookmarks.h index aa3b95c6de..dd47a286bf 100644 --- a/interface/src/Bookmarks.h +++ b/interface/src/Bookmarks.h @@ -39,7 +39,7 @@ protected: void sortActions(Menu* menubar, MenuWrapper* menu); int getMenuItemLocation(QList actions, const QString& name) const; - bool Bookmarks::contains(const QString& name) const; + bool contains(const QString& name) const; QVariantMap _bookmarks; // { name: url, ... } QPointer _bookmarksMenu; From 8602d57a577c8344962bffd4d2a11a272ac17561 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Mon, 26 Jun 2017 14:09:10 -0700 Subject: [PATCH 0607/1049] Eliminated to wiggle while pucks are enabled. * Added new anim node AnimDefaultPose * AnimNodeLoader was changed to support the addition of the AnimDefaultPose node * Edited default avatar-animation.json to insert an AnimOverlay and AnimDefaultPose between the IK node and the rest of the "underPose". * Rig uses this to fade in default pose for the toes when the hip/feet puck are active. This effectively deadens the toe animations, without effecting the hand animations. * Also, the rig was changed to use the LimitCenter solution when the feet are enabled but the hips are not. --- .../resources/avatar/avatar-animation.json | 21 ++++------- libraries/animation/src/AnimDefaultPose.cpp | 34 ++++++++++++++++++ libraries/animation/src/AnimDefaultPose.h | 36 +++++++++++++++++++ libraries/animation/src/AnimNode.h | 1 + libraries/animation/src/AnimNodeLoader.cpp | 13 ++++++- libraries/animation/src/AnimOverlay.cpp | 15 ++++++++ libraries/animation/src/AnimOverlay.h | 2 ++ libraries/animation/src/Rig.cpp | 20 +++++++++-- 8 files changed, 124 insertions(+), 18 deletions(-) create mode 100644 libraries/animation/src/AnimDefaultPose.cpp create mode 100644 libraries/animation/src/AnimDefaultPose.h diff --git a/interface/resources/avatar/avatar-animation.json b/interface/resources/avatar/avatar-animation.json index 018987b58b..a493d8e9af 100644 --- a/interface/resources/avatar/avatar-animation.json +++ b/interface/resources/avatar/avatar-animation.json @@ -150,28 +150,19 @@ "children": [] }, { - "id": "hipsManipulatorOverlay", + "id": "defaultPoseOverlay", "type": "overlay", "data": { "alpha": 0.0, - "boneSet": "hipsOnly" + "alphaVar": "defaultPoseOverlayAlpha", + "boneSet": "fullBody", + "boneSetVar": "defaultPoseOverlayBoneSet" }, "children": [ { - "id": "hipsManipulator", - "type": "manipulator", + "id": "defaultPose", + "type": "defaultPose", "data": { - "alpha": 0.0, - "alphaVar": "hipsManipulatorAlpha", - "joints": [ - { - "jointName": "Hips", - "rotationType": "absolute", - "translationType": "absolute", - "rotationVar": "hipsManipulatorRotation", - "translationVar": "hipsManipulatorPosition" - } - ] }, "children": [] }, diff --git a/libraries/animation/src/AnimDefaultPose.cpp b/libraries/animation/src/AnimDefaultPose.cpp new file mode 100644 index 0000000000..70bcbe7c21 --- /dev/null +++ b/libraries/animation/src/AnimDefaultPose.cpp @@ -0,0 +1,34 @@ +// +// AnimDefaultPose.cpp +// +// Created by Anthony J. Thibault on 6/26/17. +// Copyright (c) 2017 High Fidelity, Inc. All rights reserved. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "AnimDefaultPose.h" + +AnimDefaultPose::AnimDefaultPose(const QString& id) : + AnimNode(AnimNode::Type::DefaultPose, id) +{ + +} + +AnimDefaultPose::~AnimDefaultPose() { + +} + +const AnimPoseVec& AnimDefaultPose::evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, Triggers& triggersOut) { + if (_skeleton) { + _poses = _skeleton->getRelativeDefaultPoses(); + } else { + _poses.clear(); + } + return _poses; +} + +const AnimPoseVec& AnimDefaultPose::getPosesInternal() const { + return _poses; +} diff --git a/libraries/animation/src/AnimDefaultPose.h b/libraries/animation/src/AnimDefaultPose.h new file mode 100644 index 0000000000..eefefac7af --- /dev/null +++ b/libraries/animation/src/AnimDefaultPose.h @@ -0,0 +1,36 @@ +// +// AnimDefaultPose.h +// +// Created by Anthony J. Thibault on 6/26/17. +// Copyright (c) 2017 High Fidelity, Inc. All rights reserved. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_AnimDefaultPose_h +#define hifi_AnimDefaultPose_h + +#include +#include "AnimNode.h" + +// Always returns the default pose of the current skeleton. + +class AnimDefaultPose : public AnimNode { +public: + AnimDefaultPose(const QString& id); + virtual ~AnimDefaultPose() override; + + virtual const AnimPoseVec& evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, Triggers& triggersOut) override; +protected: + // for AnimDebugDraw rendering + virtual const AnimPoseVec& getPosesInternal() const override; + + AnimPoseVec _poses; + + // no copies + AnimDefaultPose(const AnimDefaultPose&) = delete; + AnimDefaultPose& operator=(const AnimDefaultPose&) = delete; +}; + +#endif // hifi_AnimDefaultPose_h diff --git a/libraries/animation/src/AnimNode.h b/libraries/animation/src/AnimNode.h index 10db38f42e..6d9d35b19b 100644 --- a/libraries/animation/src/AnimNode.h +++ b/libraries/animation/src/AnimNode.h @@ -44,6 +44,7 @@ public: StateMachine, Manipulator, InverseKinematics, + DefaultPose, NumTypes }; using Pointer = std::shared_ptr; diff --git a/libraries/animation/src/AnimNodeLoader.cpp b/libraries/animation/src/AnimNodeLoader.cpp index 2a1978127d..33f3d72756 100644 --- a/libraries/animation/src/AnimNodeLoader.cpp +++ b/libraries/animation/src/AnimNodeLoader.cpp @@ -23,6 +23,7 @@ #include "AnimStateMachine.h" #include "AnimManipulator.h" #include "AnimInverseKinematics.h" +#include "AnimDefaultPose.h" using NodeLoaderFunc = AnimNode::Pointer (*)(const QJsonObject& jsonObj, const QString& id, const QUrl& jsonUrl); using NodeProcessFunc = bool (*)(AnimNode::Pointer node, const QJsonObject& jsonObj, const QString& id, const QUrl& jsonUrl); @@ -35,6 +36,7 @@ static AnimNode::Pointer loadOverlayNode(const QJsonObject& jsonObj, const QStri static AnimNode::Pointer loadStateMachineNode(const QJsonObject& jsonObj, const QString& id, const QUrl& jsonUrl); static AnimNode::Pointer loadManipulatorNode(const QJsonObject& jsonObj, const QString& id, const QUrl& jsonUrl); static AnimNode::Pointer loadInverseKinematicsNode(const QJsonObject& jsonObj, const QString& id, const QUrl& jsonUrl); +static AnimNode::Pointer loadDefaultPoseNode(const QJsonObject& jsonObj, const QString& id, const QUrl& jsonUrl); // called after children have been loaded // returns node on success, nullptr on failure. @@ -50,6 +52,7 @@ static const char* animNodeTypeToString(AnimNode::Type type) { case AnimNode::Type::StateMachine: return "stateMachine"; case AnimNode::Type::Manipulator: return "manipulator"; case AnimNode::Type::InverseKinematics: return "inverseKinematics"; + case AnimNode::Type::DefaultPose: return "defaultPose"; case AnimNode::Type::NumTypes: return nullptr; }; return nullptr; @@ -109,6 +112,7 @@ static NodeLoaderFunc animNodeTypeToLoaderFunc(AnimNode::Type type) { case AnimNode::Type::StateMachine: return loadStateMachineNode; case AnimNode::Type::Manipulator: return loadManipulatorNode; case AnimNode::Type::InverseKinematics: return loadInverseKinematicsNode; + case AnimNode::Type::DefaultPose: return loadDefaultPoseNode; case AnimNode::Type::NumTypes: return nullptr; }; return nullptr; @@ -123,6 +127,7 @@ static NodeProcessFunc animNodeTypeToProcessFunc(AnimNode::Type type) { case AnimNode::Type::StateMachine: return processStateMachineNode; case AnimNode::Type::Manipulator: return processDoNothing; case AnimNode::Type::InverseKinematics: return processDoNothing; + case AnimNode::Type::DefaultPose: return processDoNothing; case AnimNode::Type::NumTypes: return nullptr; }; return nullptr; @@ -347,7 +352,8 @@ static const char* boneSetStrings[AnimOverlay::NumBoneSets] = { "empty", "leftHand", "rightHand", - "hipsOnly" + "hipsOnly", + "bothFeet" }; static AnimOverlay::BoneSet stringToBoneSetEnum(const QString& str) { @@ -517,6 +523,11 @@ AnimNode::Pointer loadInverseKinematicsNode(const QJsonObject& jsonObj, const QS return node; } +static AnimNode::Pointer loadDefaultPoseNode(const QJsonObject& jsonObj, const QString& id, const QUrl& jsonUrl) { + auto node = std::make_shared(id); + return node; +} + void buildChildMap(std::map& map, AnimNode::Pointer node) { for (int i = 0; i < (int)node->getChildCount(); ++i) { map.insert(std::pair(node->getChild(i)->getID(), i)); diff --git a/libraries/animation/src/AnimOverlay.cpp b/libraries/animation/src/AnimOverlay.cpp index e086413dde..10594af20a 100644 --- a/libraries/animation/src/AnimOverlay.cpp +++ b/libraries/animation/src/AnimOverlay.cpp @@ -35,6 +35,7 @@ void AnimOverlay::buildBoneSet(BoneSet boneSet) { case LeftHandBoneSet: buildLeftHandBoneSet(); break; case RightHandBoneSet: buildRightHandBoneSet(); break; case HipsOnlyBoneSet: buildHipsOnlyBoneSet(); break; + case BothFeetBoneSet: buildBothFeetBoneSet(); break; default: case EmptyBoneSet: buildEmptyBoneSet(); break; } @@ -196,6 +197,20 @@ void AnimOverlay::buildHipsOnlyBoneSet() { _boneSetVec[hipsJoint] = 1.0f; } +void AnimOverlay::buildBothFeetBoneSet() { + assert(_skeleton); + buildEmptyBoneSet(); + int rightFoot = _skeleton->nameToJointIndex("RightFoot"); + for_each_child_joint(_skeleton, rightFoot, [&](int i) { + _boneSetVec[i] = 1.0f; + }); + int leftFoot = _skeleton->nameToJointIndex("LeftFoot"); + for_each_child_joint(_skeleton, leftFoot, [&](int i) { + _boneSetVec[i] = 1.0f; + }); +} + + // for AnimDebugDraw rendering const AnimPoseVec& AnimOverlay::getPosesInternal() const { return _poses; diff --git a/libraries/animation/src/AnimOverlay.h b/libraries/animation/src/AnimOverlay.h index ed9439feb7..8b6e1529fc 100644 --- a/libraries/animation/src/AnimOverlay.h +++ b/libraries/animation/src/AnimOverlay.h @@ -38,6 +38,7 @@ public: LeftHandBoneSet, RightHandBoneSet, HipsOnlyBoneSet, + BothFeetBoneSet, NumBoneSets }; @@ -77,6 +78,7 @@ public: void buildLeftHandBoneSet(); void buildRightHandBoneSet(); void buildHipsOnlyBoneSet(); + void buildBothFeetBoneSet(); // no copies AnimOverlay(const AnimOverlay&) = delete; diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 3f63f226e7..3d04b0b26f 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -27,6 +27,7 @@ #include "AnimationLogging.h" #include "AnimClip.h" #include "AnimInverseKinematics.h" +#include "AnimOverlay.h" #include "AnimSkeleton.h" #include "AnimUtil.h" #include "IKTarget.h" @@ -1459,13 +1460,28 @@ void Rig::updateFromControllerParameters(const ControllerParameters& params, flo updateFeet(leftFootEnabled, rightFootEnabled, params.controllerPoses[ControllerType_LeftFoot], params.controllerPoses[ControllerType_RightFoot]); - if (hipsEnabled) { + // if the hips or the feet are being controlled. + if (hipsEnabled || rightFootEnabled || leftFootEnabled) { + // for more predictable IK solve from the center of the joint limits, not from the underpose _animVars.set("solutionSource", (int)AnimInverseKinematics::SolutionSource::RelaxToLimitCenterPoses); + + // replace the feet animation with the default pose, this is to prevent unexpected toe wiggling. + _animVars.set("defaultPoseOverlayAlpha", 1.0f); + _animVars.set("defaultPoseOverlayBoneSet", (int)AnimOverlay::BothFeetBoneSet); + } else { + // augment the IK with the underPose. + _animVars.set("solutionSource", (int)AnimInverseKinematics::SolutionSource::RelaxToUnderPoses); + + // feet should follow source animation + _animVars.unset("defaultPoseOverlayAlpha"); + _animVars.unset("defaultPoseOverlayBoneSet"); + } + + if (hipsEnabled) { _animVars.set("hipsType", (int)IKTarget::Type::RotationAndPosition); _animVars.set("hipsPosition", params.controllerPoses[ControllerType_Hips].trans()); _animVars.set("hipsRotation", params.controllerPoses[ControllerType_Hips].rot()); } else { - _animVars.set("solutionSource", (int)AnimInverseKinematics::SolutionSource::RelaxToUnderPoses); _animVars.set("hipsType", (int)IKTarget::Type::Unknown); } From 057e88311127ebd4c284b72260fe721486806209 Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Wed, 21 Jun 2017 15:09:43 -0700 Subject: [PATCH 0608/1049] Changing window size while in monitor display --- scripts/system/spectatorCamera.js | 41 +++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index b144619fc5..979c6ac43b 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -99,11 +99,16 @@ var farClipPlaneDistance = 100.0; function spectatorCameraOn() { // Set the special texture size based on the window in which it will eventually be displayed. - var size = Controller.getViewportDimensions(); // FIXME: Need a signal to hook into when the dimensions change. - var sizeX = Window.innerWidth; - var sizeY = Window.innerHeight; - windowAspectRatio = sizeX/sizeY; - spectatorFrameRenderConfig.resetSizeSpectatorCamera(sizeX, sizeY); + var previewWidth = Window.innerWidth / Window.innerHeight / previewAspectRatio * 0.16; + var previewHeight = Window.innerWidth / Window.innerHeight / previewAspectRatio * -0.16; + spectatorFrameRenderConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); + //----------------------- + /*if (windowAspectRatio < previewAspectRatio) { //vertical + Overlays.editOverlay(viewFinderOverlay, { dimensions: { x: 0.16 * windowAspectRatio / previewAspectRatio, y: -0.16, z: 0 } }); + } else { //horizontal + Overlays.editOverlay(viewFinderOverlay, { dimensions: { x: 0.16, y: -0.16 * previewAspectRatio / windowAspectRatio, z: 0 } }); + }*/ + //----------------------- spectatorFrameRenderConfig.enabled = beginSpectatorFrameRenderConfig.enabled = true; beginSpectatorFrameRenderConfig.vFoV = vFoV; beginSpectatorFrameRenderConfig.nearClipPlaneDistance = nearClipPlaneDistance; @@ -141,7 +146,7 @@ parentID: camera, alpha: 1, position: { x: 0.007, y: 0.15, z: -0.005 }, - dimensions: { x: 0.16, y: -0.16 * windowAspectRatio / previewAspectRatio, z: 0 } + dimensions: { x: 0.16, y: -0.16, z: 0 } // Negative dimension for viewfinder is necessary for now due to the way Image3DOverlay // draws textures. // See Image3DOverlay.cpp:91. If you change the two lines there to: @@ -149,7 +154,6 @@ // glm::vec2 bottomRight(x, y); // the viewfinder will appear rightside up without this negative y-dimension. // However, other Image3DOverlay textures (like the PAUSED one) will appear upside-down. *Why?* - // FIXME: This code will stretch the preview as the window aspect ratio changes. Fix that! }); Entities.editEntity(camera, { position: cameraPosition, rotation: cameraRotation }); setDisplay(monitorShowsCameraView); @@ -241,6 +245,7 @@ addOrRemoveButton(false, HMD.active); tablet.screenChanged.connect(onTabletScreenChanged); Window.domainChanged.connect(spectatorCameraOff); + Window.geometryChanged.connect(resizePreview); Controller.keyPressEvent.connect(keyPressEvent); HMD.displayModeChanged.connect(onHMDChanged); viewFinderOverlay = false; @@ -299,6 +304,27 @@ setMonitorShowsCameraViewAndSendToQml(!monitorShowsCameraView); } } + function resizePreview(geometryChanged) { + var previewWidth = 0.16; + var previewHeight = -0.16; + if (geometryChanged.width / geometryChanged.height < previewAspectRatio) { //vertical is less than 1.71 + previewWidth *= ((geometryChanged.width / geometryChanged.height) / previewAspectRatio) * 1.6; + if (previewWidth > 0.16) { + previewWidth = 0.16; + } + print("vert " + previewWidth); + } else { //horizontal is greater than 1.71 + previewHeight *= (previewAspectRatio / (geometryChanged.width / geometryChanged.height)) * 1.6; + if (previewHeight < -0.16) { + previewHeight = -0.16; + } + print("hori " + previewHeight); + } + Overlays.editOverlay(viewFinderOverlay, { dimensions: { x: previewWidth, y: previewHeight, z: 0 } }); + + spectatorFrameRenderConfig.resetSizeSpectatorCamera(geometryChanged.width, geometryChanged.height); + setDisplay(monitorShowsCameraView); + } const SWITCH_VIEW_FROM_CONTROLLER_DEFAULT = false; var switchViewFromController = !!Settings.getValue('spectatorCamera/switchViewFromController', SWITCH_VIEW_FROM_CONTROLLER_DEFAULT); @@ -502,6 +528,7 @@ function shutdown() { spectatorCameraOff(); Window.domainChanged.disconnect(spectatorCameraOff); + Window.geometryChanged.disconnect(resizePreview); addOrRemoveButton(true, HMD.active); tablet.screenChanged.disconnect(onTabletScreenChanged); HMD.displayModeChanged.disconnect(onHMDChanged); From 495fa1d9ba4effca09c08003431492066833ae67 Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Fri, 23 Jun 2017 11:25:53 -0700 Subject: [PATCH 0609/1049] Overlay updates with resize (vertical not adjusted) --- scripts/system/spectatorCamera.js | 140 ++++++++++++++++++++---------- 1 file changed, 93 insertions(+), 47 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 979c6ac43b..5d12314dcd 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -56,6 +56,8 @@ var spectatorFrameRenderConfig = Render.getConfig("SecondaryCameraFrame"); var beginSpectatorFrameRenderConfig = Render.getConfig("BeginSecondaryCamera"); var viewFinderOverlay = false; + var backdrop = false; + var backdropAspect = false; var camera = false; var cameraIsDynamic = false; var lastCameraPosition = false; @@ -93,22 +95,12 @@ // var isUpdateRenderWired = false; var windowAspectRatio; - var previewAspectRatio = 16 / 9; var vFoV = 45.0; var nearClipPlaneDistance = 0.1; var farClipPlaneDistance = 100.0; function spectatorCameraOn() { // Set the special texture size based on the window in which it will eventually be displayed. - var previewWidth = Window.innerWidth / Window.innerHeight / previewAspectRatio * 0.16; - var previewHeight = Window.innerWidth / Window.innerHeight / previewAspectRatio * -0.16; spectatorFrameRenderConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); - //----------------------- - /*if (windowAspectRatio < previewAspectRatio) { //vertical - Overlays.editOverlay(viewFinderOverlay, { dimensions: { x: 0.16 * windowAspectRatio / previewAspectRatio, y: -0.16, z: 0 } }); - } else { //horizontal - Overlays.editOverlay(viewFinderOverlay, { dimensions: { x: 0.16, y: -0.16 * previewAspectRatio / windowAspectRatio, z: 0 } }); - }*/ - //----------------------- spectatorFrameRenderConfig.enabled = beginSpectatorFrameRenderConfig.enabled = true; beginSpectatorFrameRenderConfig.vFoV = vFoV; beginSpectatorFrameRenderConfig.nearClipPlaneDistance = nearClipPlaneDistance; @@ -121,20 +113,14 @@ "collisionsWillMove": 0, "damping": 0.98000001907348633, "dimensions": { - "x": 0.2338641881942749, - "y": 0.407032310962677, - "z": 0.38702544569969177 + "x": .1, + "y": .1, + "z": .1 }, "dynamic": cameraIsDynamic, "modelURL": "http://hifi-content.s3.amazonaws.com/alan/dev/spectator-camera.fbx", - "queryAACube": { - "scale": 0.60840487480163574, - "x": -0.30420243740081787, - "y": -0.30420243740081787, - "z": -0.30420243740081787 - }, - "rotation": { x: 0, y: 0, z: 0 }, - "position": { x: 0, y: 0, z: 0 }, + "rotation": cameraRotation, + "position": cameraPosition, "shapeType": "simple-compound", "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":true}}" @@ -145,18 +131,47 @@ emissive: true, parentID: camera, alpha: 1, - position: { x: 0.007, y: 0.15, z: -0.005 }, - dimensions: { x: 0.16, y: -0.16, z: 0 } - // Negative dimension for viewfinder is necessary for now due to the way Image3DOverlay - // draws textures. - // See Image3DOverlay.cpp:91. If you change the two lines there to: - // glm::vec2 topLeft(-x, -y); - // glm::vec2 bottomRight(x, y); - // the viewfinder will appear rightside up without this negative y-dimension. - // However, other Image3DOverlay textures (like the PAUSED one) will appear upside-down. *Why?* + localPosition: { x: 0, y: 0.18, z: 0 }, + dimensions: { x: 0.2, y: -0.2, z: 0.2 } }); - Entities.editEntity(camera, { position: cameraPosition, rotation: cameraRotation }); + var backdropProp = { + parentID: camera, + "color": { + "blue": 0, + "green": 0, + "red": 0 + }, + localPosition: {x: 0, y: 0.18, z: -.0075}, + "dimensions": { + "x": 0.2, + "y": 0.2, + "z": 0.01 + }, + "shape": "Cube", + "type": "Box" + } + var backdropAspectProp = { + parentID: camera, + "color": { + "blue": 255, + "green": 255, + "red": 255 + }, + localPosition: { x: 0, y: 0.18, z: -.0073 }, + "dimensions": { + "x": 0.2, + "y": 0.1125, + "z": 0.01 + }, + "shape": "Cube", + "type": "Box" + } + backdrop = Entities.addEntity(backdropProp); + backdropAspect = Entities.addEntity(backdropAspectProp); setDisplay(monitorShowsCameraView); + print("woot1 " + JSON.stringify(Entities.getEntityProperties(camera).position)); + print("woot2 " + JSON.stringify(Overlays.getProperty(viewFinderOverlay, "position"))); + //"x":64.33030700683594,"y":2.2086398601531982,"z":333.57318115234375 } // @@ -184,8 +199,16 @@ if (viewFinderOverlay) { Overlays.deleteOverlay(viewFinderOverlay); } + if (backdrop) { + Overlays.deleteOverlay(backdrop); + } + if (backdropAspect) { + Overlays.deleteOverlay(backdropAspect); + } camera = false; viewFinderOverlay = false; + backdrop = false; + backdropAspect = false; setDisplay(monitorShowsCameraView); } @@ -249,6 +272,8 @@ Controller.keyPressEvent.connect(keyPressEvent); HMD.displayModeChanged.connect(onHMDChanged); viewFinderOverlay = false; + backdrop = false; + backdropAspect = false; camera = false; registerButtonMappings(); } @@ -305,25 +330,46 @@ } } function resizePreview(geometryChanged) { - var previewWidth = 0.16; - var previewHeight = -0.16; - if (geometryChanged.width / geometryChanged.height < previewAspectRatio) { //vertical is less than 1.71 - previewWidth *= ((geometryChanged.width / geometryChanged.height) / previewAspectRatio) * 1.6; - if (previewWidth > 0.16) { - previewWidth = 0.16; - } - print("vert " + previewWidth); - } else { //horizontal is greater than 1.71 - previewHeight *= (previewAspectRatio / (geometryChanged.width / geometryChanged.height)) * 1.6; - if (previewHeight < -0.16) { - previewHeight = -0.16; - } - print("hori " + previewHeight); - } - Overlays.editOverlay(viewFinderOverlay, { dimensions: { x: previewWidth, y: previewHeight, z: 0 } }); + Overlays.deleteOverlay(viewFinderOverlay); + viewFinderOverlay = Overlays.addOverlay("image3d", { + url: "resource://spectatorCameraFrame", + emissive: true, + parentID: camera, + alpha: 1, + localPosition: { x: 0, y: 0.18, z: 0 }, + dimensions: { x: 0.2, y: -0.2, z: 0.2 } + }); + //print("woot2 " + JSON.stringify(Overlays.getProperty(viewFinderOverlay, "position"))); + //* (geometryChanged.width / geometryChanged.height) spectatorFrameRenderConfig.resetSizeSpectatorCamera(geometryChanged.width, geometryChanged.height); setDisplay(monitorShowsCameraView); + + /*ZACH CODE + spectatorCameraOff(); + spectatorCameraOn(); + var previewWidth = 0.0005 * geometryChanged.height; + var previewHeight = -0.0005 * geometryChanged.height; + Overlays.editOverlay(viewFinderOverlay, { dimensions: { x: previewWidth, y: previewHeight, z: 0.5 } }); + */ + + /*MY CODE + var previewwidth = 0.16; + var previewheight = -0.16; + //if (geometrychanged.width / geometrychanged.height < previewaspectratio) { //vertical is less than 1.71 + // previewwidth *= ((geometrychanged.width / geometrychanged.height) / previewaspectratio); + // print("vert " + previewwidth); + //} else { //horizontal is greater than 1.71 + // previewheight *= (previewaspectratio / (geometrychanged.width / geometrychanged.height)); + // print("hori " + previewheight); + //} + previewwidth *= ((geometrychanged.width / geometrychanged.height) / previewaspectratio); + print((geometrychanged.width / geometrychanged.height)); + print(previewwidth); + previewheight *= (previewaspectratio / (geometrychanged.width / geometrychanged.height)); + print(previewheight); + overlays.editoverlay(viewfinderoverlay, { dimensions: { x: previewwidth, y: previewheight, z: 0 } }); + */ } const SWITCH_VIEW_FROM_CONTROLLER_DEFAULT = false; From 4d6ba306ff0bc31b922cc2a2383ffa03b780cd69 Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Mon, 26 Jun 2017 14:04:04 -0700 Subject: [PATCH 0610/1049] Preview scaled correctly with backdrop --- scripts/system/spectatorCamera.js | 53 +++++++++++-------------------- 1 file changed, 18 insertions(+), 35 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 5d12314dcd..6a0db2fcc3 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -80,8 +80,6 @@ // Relevant Variables: // isUpdateRenderWired: Bool storing whether or not the camera's update // function is wired. - // windowAspectRatio: The ratio of the Interface windows's sizeX/sizeY - // previewAspectRatio: The ratio of the camera preview's sizeX/sizeY // vFoV: The vertical field of view of the spectator camera // nearClipPlaneDistance: The near clip plane distance of the spectator camera // farClipPlaneDistance: The far clip plane distance of the spectator camera @@ -94,10 +92,12 @@ // spawn the camera entity. // var isUpdateRenderWired = false; - var windowAspectRatio; var vFoV = 45.0; var nearClipPlaneDistance = 0.1; var farClipPlaneDistance = 100.0; + var cameraRotation; + var cameraPosition; + var viewFinderOverlayDim = { x: 0.2, y: -0.2, z: 0.2 }; function spectatorCameraOn() { // Set the special texture size based on the window in which it will eventually be displayed. spectatorFrameRenderConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); @@ -105,7 +105,7 @@ beginSpectatorFrameRenderConfig.vFoV = vFoV; beginSpectatorFrameRenderConfig.nearClipPlaneDistance = nearClipPlaneDistance; beginSpectatorFrameRenderConfig.farClipPlaneDistance = farClipPlaneDistance; - var cameraRotation = MyAvatar.orientation, cameraPosition = inFrontOf(1, Vec3.sum(MyAvatar.position, { x: 0, y: 0.3, z: 0 })); + cameraRotation = MyAvatar.orientation, cameraPosition = inFrontOf(1, Vec3.sum(MyAvatar.position, { x: 0, y: 0.3, z: 0 })); Script.update.connect(updateRenderFromCamera); isUpdateRenderWired = true; camera = Entities.addEntity({ @@ -131,8 +131,9 @@ emissive: true, parentID: camera, alpha: 1, + rotation: cameraRotation, localPosition: { x: 0, y: 0.18, z: 0 }, - dimensions: { x: 0.2, y: -0.2, z: 0.2 } + dimensions: viewFinderOverlayDim }); var backdropProp = { parentID: camera, @@ -169,9 +170,6 @@ backdrop = Entities.addEntity(backdropProp); backdropAspect = Entities.addEntity(backdropAspectProp); setDisplay(monitorShowsCameraView); - print("woot1 " + JSON.stringify(Entities.getEntityProperties(camera).position)); - print("woot2 " + JSON.stringify(Overlays.getProperty(viewFinderOverlay, "position"))); - //"x":64.33030700683594,"y":2.2086398601531982,"z":333.57318115234375 } // @@ -330,46 +328,31 @@ } } function resizePreview(geometryChanged) { - Overlays.deleteOverlay(viewFinderOverlay); viewFinderOverlay = Overlays.addOverlay("image3d", { url: "resource://spectatorCameraFrame", emissive: true, parentID: camera, alpha: 1, + rotation: cameraRotation, localPosition: { x: 0, y: 0.18, z: 0 }, dimensions: { x: 0.2, y: -0.2, z: 0.2 } }); - //print("woot2 " + JSON.stringify(Overlays.getProperty(viewFinderOverlay, "position"))); - //* (geometryChanged.width / geometryChanged.height) spectatorFrameRenderConfig.resetSizeSpectatorCamera(geometryChanged.width, geometryChanged.height); setDisplay(monitorShowsCameraView); - /*ZACH CODE - spectatorCameraOff(); - spectatorCameraOn(); - var previewWidth = 0.0005 * geometryChanged.height; - var previewHeight = -0.0005 * geometryChanged.height; - Overlays.editOverlay(viewFinderOverlay, { dimensions: { x: previewWidth, y: previewHeight, z: 0.5 } }); - */ + var previewHolderRatio = 16 / 9; + var verticalScale = 1 / previewHolderRatio; + var squareScale = verticalScale * (1 + (1 - (1 / (geometryChanged.width / geometryChanged.height)))); - /*MY CODE - var previewwidth = 0.16; - var previewheight = -0.16; - //if (geometrychanged.width / geometrychanged.height < previewaspectratio) { //vertical is less than 1.71 - // previewwidth *= ((geometrychanged.width / geometrychanged.height) / previewaspectratio); - // print("vert " + previewwidth); - //} else { //horizontal is greater than 1.71 - // previewheight *= (previewaspectratio / (geometrychanged.width / geometrychanged.height)); - // print("hori " + previewheight); - //} - previewwidth *= ((geometrychanged.width / geometrychanged.height) / previewaspectratio); - print((geometrychanged.width / geometrychanged.height)); - print(previewwidth); - previewheight *= (previewaspectratio / (geometrychanged.width / geometrychanged.height)); - print(previewheight); - overlays.editoverlay(viewfinderoverlay, { dimensions: { x: previewwidth, y: previewheight, z: 0 } }); - */ + if (geometryChanged.height > geometryChanged.width) { //vertical window size + viewFinderOverlayDim = { x: (0.2 * verticalScale), y: (-0.2 * verticalScale), z: 0.02 }; + } else if ((geometryChanged.width / geometryChanged.height) < previewHolderRatio) { //square window size + viewFinderOverlayDim = { x: (0.2 * squareScale), y: (-0.2 * squareScale), z: 0.02 }; + } else { //horizontal window size + viewFinderOverlayDim = { x: 0.2, y: -0.2, z: 0.02 }; + } + Overlays.editOverlay(viewFinderOverlay, { dimensions: viewFinderOverlayDim }); } const SWITCH_VIEW_FROM_CONTROLLER_DEFAULT = false; From 2ecf0ed061cd22ccc010a2b954be42aec805865d Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Mon, 26 Jun 2017 14:14:08 -0700 Subject: [PATCH 0611/1049] Preview scaled correctly without backdrop --- scripts/system/spectatorCamera.js | 46 ------------------------------- 1 file changed, 46 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 6a0db2fcc3..079320dc4e 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -56,8 +56,6 @@ var spectatorFrameRenderConfig = Render.getConfig("SecondaryCameraFrame"); var beginSpectatorFrameRenderConfig = Render.getConfig("BeginSecondaryCamera"); var viewFinderOverlay = false; - var backdrop = false; - var backdropAspect = false; var camera = false; var cameraIsDynamic = false; var lastCameraPosition = false; @@ -135,40 +133,6 @@ localPosition: { x: 0, y: 0.18, z: 0 }, dimensions: viewFinderOverlayDim }); - var backdropProp = { - parentID: camera, - "color": { - "blue": 0, - "green": 0, - "red": 0 - }, - localPosition: {x: 0, y: 0.18, z: -.0075}, - "dimensions": { - "x": 0.2, - "y": 0.2, - "z": 0.01 - }, - "shape": "Cube", - "type": "Box" - } - var backdropAspectProp = { - parentID: camera, - "color": { - "blue": 255, - "green": 255, - "red": 255 - }, - localPosition: { x: 0, y: 0.18, z: -.0073 }, - "dimensions": { - "x": 0.2, - "y": 0.1125, - "z": 0.01 - }, - "shape": "Cube", - "type": "Box" - } - backdrop = Entities.addEntity(backdropProp); - backdropAspect = Entities.addEntity(backdropAspectProp); setDisplay(monitorShowsCameraView); } @@ -197,16 +161,8 @@ if (viewFinderOverlay) { Overlays.deleteOverlay(viewFinderOverlay); } - if (backdrop) { - Overlays.deleteOverlay(backdrop); - } - if (backdropAspect) { - Overlays.deleteOverlay(backdropAspect); - } camera = false; viewFinderOverlay = false; - backdrop = false; - backdropAspect = false; setDisplay(monitorShowsCameraView); } @@ -270,8 +226,6 @@ Controller.keyPressEvent.connect(keyPressEvent); HMD.displayModeChanged.connect(onHMDChanged); viewFinderOverlay = false; - backdrop = false; - backdropAspect = false; camera = false; registerButtonMappings(); } From 75b449c778b78c4e1b34be8a8286a0af2831fe4e Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Mon, 26 Jun 2017 14:56:18 -0700 Subject: [PATCH 0612/1049] Preview centered inside glass pane --- scripts/system/spectatorCamera.js | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 079320dc4e..f24dd3369e 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -95,7 +95,7 @@ var farClipPlaneDistance = 100.0; var cameraRotation; var cameraPosition; - var viewFinderOverlayDim = { x: 0.2, y: -0.2, z: 0.2 }; + var viewFinderOverlayDim = { x: 0.16, y: -0.16, z: 0.16 }; function spectatorCameraOn() { // Set the special texture size based on the window in which it will eventually be displayed. spectatorFrameRenderConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); @@ -110,13 +110,8 @@ "angularDamping": 0.98000001907348633, "collisionsWillMove": 0, "damping": 0.98000001907348633, - "dimensions": { - "x": .1, - "y": .1, - "z": .1 - }, "dynamic": cameraIsDynamic, - "modelURL": "http://hifi-content.s3.amazonaws.com/alan/dev/spectator-camera.fbx", + "modelURL": "http://hifi-content.s3.amazonaws.com/alan/dev/spectator-camera.fbx?1", "rotation": cameraRotation, "position": cameraPosition, "shapeType": "simple-compound", @@ -130,7 +125,7 @@ parentID: camera, alpha: 1, rotation: cameraRotation, - localPosition: { x: 0, y: 0.18, z: 0 }, + localPosition: { x: 0.007, y: 0.15, z: -0.005 }, dimensions: viewFinderOverlayDim }); setDisplay(monitorShowsCameraView); @@ -289,8 +284,8 @@ parentID: camera, alpha: 1, rotation: cameraRotation, - localPosition: { x: 0, y: 0.18, z: 0 }, - dimensions: { x: 0.2, y: -0.2, z: 0.2 } + localPosition: { x: 0.007, y: 0.15, z: -0.005 }, + dimensions: { x: 0.16, y: -0.16, z: 0.16 } }); spectatorFrameRenderConfig.resetSizeSpectatorCamera(geometryChanged.width, geometryChanged.height); setDisplay(monitorShowsCameraView); @@ -300,11 +295,11 @@ var squareScale = verticalScale * (1 + (1 - (1 / (geometryChanged.width / geometryChanged.height)))); if (geometryChanged.height > geometryChanged.width) { //vertical window size - viewFinderOverlayDim = { x: (0.2 * verticalScale), y: (-0.2 * verticalScale), z: 0.02 }; + viewFinderOverlayDim = { x: (0.16 * verticalScale), y: (-0.16 * verticalScale), z: 0.16 }; } else if ((geometryChanged.width / geometryChanged.height) < previewHolderRatio) { //square window size - viewFinderOverlayDim = { x: (0.2 * squareScale), y: (-0.2 * squareScale), z: 0.02 }; + viewFinderOverlayDim = { x: (0.16 * squareScale), y: (-0.16 * squareScale), z: 0.16 }; } else { //horizontal window size - viewFinderOverlayDim = { x: 0.2, y: -0.2, z: 0.02 }; + viewFinderOverlayDim = { x: 0.16, y: -0.16, z: 0.16 }; } Overlays.editOverlay(viewFinderOverlay, { dimensions: viewFinderOverlayDim }); } From bf7da71eafcbe89124c220e0be166e6c96bed940 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 26 Jun 2017 15:07:22 -0700 Subject: [PATCH 0613/1049] use QEventLoop and a timer for a less CPU using sleep + event-processing --- libraries/script-engine/src/ScriptEngine.cpp | 29 +++++++++----------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index d9b41bb55d..017124af1c 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1067,24 +1067,21 @@ void ScriptEngine::run() { // on shutdown and stop... so we want to loop and sleep until we've spent our time in // purgatory, constantly checking to see if our script was asked to end bool processedEvents = false; - while (!_isFinished && clock::now() < sleepUntil) { - - { - PROFILE_RANGE(script, "processEvents-sleep"); - QCoreApplication::processEvents(); // before we sleep again, give events a chance to process + if (!_isFinished) { + PROFILE_RANGE(script, "processEvents-sleep"); + std::chrono::milliseconds sleepFor = + std::chrono::duration_cast(sleepUntil - clock::now()); + if (sleepFor > std::chrono::milliseconds(0)) { + QEventLoop loop; + QTimer timer; + timer.setSingleShot(true); + connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); + timer.start(sleepFor); + loop.exec(); + } else { + QCoreApplication::processEvents(); } processedEvents = true; - - // If after processing events, we're past due, exit asap - if (clock::now() >= sleepUntil) { - break; - } - - // We only want to sleep a small amount so that any pending events (like timers or invokeMethod events) - // will be able to process quickly. - static const int SMALL_SLEEP_AMOUNT = 100; - auto smallSleepUntil = clock::now() + static_cast(SMALL_SLEEP_AMOUNT); - std::this_thread::sleep_until(smallSleepUntil); } PROFILE_RANGE(script, "ScriptMainLoop"); From 4f672f93d20ed87aec24b57f3fd37c3a6d2e76d8 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 26 Jun 2017 16:03:39 -0700 Subject: [PATCH 0614/1049] avoid cast that isn't always available --- libraries/script-engine/src/ScriptEngine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 017124af1c..81b815a34b 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1076,7 +1076,7 @@ void ScriptEngine::run() { QTimer timer; timer.setSingleShot(true); connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); - timer.start(sleepFor); + timer.start(sleepFor.count()); loop.exec(); } else { QCoreApplication::processEvents(); From 839a504d01954d360a139c974b868a03d039a5e1 Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Mon, 26 Jun 2017 17:05:35 -0700 Subject: [PATCH 0615/1049] Revision after code review from zach --- scripts/system/spectatorCamera.js | 66 +++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index f24dd3369e..103ef7eb6b 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -79,8 +79,12 @@ // isUpdateRenderWired: Bool storing whether or not the camera's update // function is wired. // vFoV: The vertical field of view of the spectator camera - // nearClipPlaneDistance: The near clip plane distance of the spectator camera + // nearClipPlaneDistance: The near clip plane distance of the spectator camera (aka "camera") // farClipPlaneDistance: The far clip plane distance of the spectator camera + // cameraRotation: The rotation of the spectator camera + // cameraPosition: The position of the spectator camera + // glassPaneWidth: The width of the glass pane above the spectator camera that holds the viewFinderOverlay + // viewFinderOverlayDim: The x, y, and z dimensions of the viewFinderOverlay // // Arguments: // None @@ -95,9 +99,13 @@ var farClipPlaneDistance = 100.0; var cameraRotation; var cameraPosition; - var viewFinderOverlayDim = { x: 0.16, y: -0.16, z: 0.16 }; + //The negative y dimension for viewFinderOverlay is necessary for now due to the way Image3DOverlay + // draws textures, but should be looked into at some point. Also the z dimension doesn't matter + // so it is set to the glassPaneWidth + var glassPaneWidth = 0.16; + var viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: glassPaneWidth }; function spectatorCameraOn() { - // Set the special texture size based on the window in which it will eventually be displayed. + // Sets the special texture size based on the window it is displayed in, which doesn't include the menu bar spectatorFrameRenderConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); spectatorFrameRenderConfig.enabled = beginSpectatorFrameRenderConfig.enabled = true; beginSpectatorFrameRenderConfig.vFoV = vFoV; @@ -217,7 +225,7 @@ addOrRemoveButton(false, HMD.active); tablet.screenChanged.connect(onTabletScreenChanged); Window.domainChanged.connect(spectatorCameraOff); - Window.geometryChanged.connect(resizePreview); + Window.geometryChanged.connect(resizeViewFinderOverlay); Controller.keyPressEvent.connect(keyPressEvent); HMD.displayModeChanged.connect(onHMDChanged); viewFinderOverlay = false; @@ -276,7 +284,38 @@ setMonitorShowsCameraViewAndSendToQml(!monitorShowsCameraView); } } - function resizePreview(geometryChanged) { + + // + // Function Name: resizeViewFinderOverlay() + // + // Relevant Variables: + // glassPaneRatio: The aspect ratio of the glass pane, currently set as a 16:9 aspect ratio (change if model changes) + // verticalScale: The amount the viewFinderOverlay should be scaled if the window size is vertical + // squareScale: The amount the viewFinderOverlay should be scaled if the window size is not vertical but is more square than the + // glass pane's aspect ratio + // + // Arguments: + // geometryChanged: The signal argument that gives information on how the window changed, including x, y, width, and height + // + // Description: + // A function called when the window is moved/resized, which changes the viewFinderOverlay's texture and dimensions to be + // appropriately altered to fit inside the glass pane while not distorting the texture + // + function resizeViewFinderOverlay(geometryChanged) { + var glassPaneRatio = 16 / 9; + var verticalScale = 1 / glassPaneRatio; + var squareScale = verticalScale * (1 + (1 - (1 / (geometryChanged.width / geometryChanged.height)))); + + if (geometryChanged.height > geometryChanged.width) { //vertical window size + viewFinderOverlayDim = { x: (glassPaneWidth * verticalScale), y: (-glassPaneWidth * verticalScale), z: glassPaneWidth }; + } else if ((geometryChanged.width / geometryChanged.height) < glassPaneRatio) { //square-ish window size, in-between vertical and horizontal + viewFinderOverlayDim = { x: (glassPaneWidth * squareScale), y: (-glassPaneWidth * squareScale), z: glassPaneWidth }; + } else { //horizontal window size + viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: glassPaneWidth }; + } + + // The only way I found to update the viewFinderOverlay without turning the spectator camera on and off is to delete and recreate the + // overlay, which is inefficient but resizing the window shouldn't be performed often Overlays.deleteOverlay(viewFinderOverlay); viewFinderOverlay = Overlays.addOverlay("image3d", { url: "resource://spectatorCameraFrame", @@ -285,23 +324,10 @@ alpha: 1, rotation: cameraRotation, localPosition: { x: 0.007, y: 0.15, z: -0.005 }, - dimensions: { x: 0.16, y: -0.16, z: 0.16 } + dimensions: viewFinderOverlayDim }); spectatorFrameRenderConfig.resetSizeSpectatorCamera(geometryChanged.width, geometryChanged.height); setDisplay(monitorShowsCameraView); - - var previewHolderRatio = 16 / 9; - var verticalScale = 1 / previewHolderRatio; - var squareScale = verticalScale * (1 + (1 - (1 / (geometryChanged.width / geometryChanged.height)))); - - if (geometryChanged.height > geometryChanged.width) { //vertical window size - viewFinderOverlayDim = { x: (0.16 * verticalScale), y: (-0.16 * verticalScale), z: 0.16 }; - } else if ((geometryChanged.width / geometryChanged.height) < previewHolderRatio) { //square window size - viewFinderOverlayDim = { x: (0.16 * squareScale), y: (-0.16 * squareScale), z: 0.16 }; - } else { //horizontal window size - viewFinderOverlayDim = { x: 0.16, y: -0.16, z: 0.16 }; - } - Overlays.editOverlay(viewFinderOverlay, { dimensions: viewFinderOverlayDim }); } const SWITCH_VIEW_FROM_CONTROLLER_DEFAULT = false; @@ -506,7 +532,7 @@ function shutdown() { spectatorCameraOff(); Window.domainChanged.disconnect(spectatorCameraOff); - Window.geometryChanged.disconnect(resizePreview); + Window.geometryChanged.disconnect(resizeViewFinderOverlay); addOrRemoveButton(true, HMD.active); tablet.screenChanged.disconnect(onTabletScreenChanged); HMD.displayModeChanged.disconnect(onHMDChanged); From 2814c945821edc60f14d692df69812896407e9c2 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Mon, 26 Jun 2017 17:43:51 -0700 Subject: [PATCH 0616/1049] Hips should no longer waggle when feet are active --- libraries/animation/src/AnimInverseKinematics.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index 3e948a4f5b..5d98357ea3 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -870,9 +870,9 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars float scaleFactor = ((offsetLength - MIN_HIPS_OFFSET_LENGTH) / offsetLength); glm::vec3 hipsOffset = scaleFactor * _hipsOffset; if (_hipsParentIndex == -1) { - _relativePoses[_hipsIndex].trans() = underPoses[_hipsIndex].trans() + hipsOffset; + _relativePoses[_hipsIndex].trans() = _relativePoses[_hipsIndex].trans() + hipsOffset; } else { - auto absHipsPose = _skeleton->getAbsolutePose(_hipsIndex, underPoses); + auto absHipsPose = _skeleton->getAbsolutePose(_hipsIndex, _relativePoses); absHipsPose.trans() += hipsOffset; _relativePoses[_hipsIndex] = _skeleton->getAbsolutePose(_hipsParentIndex, _relativePoses).inverse() * absHipsPose; } @@ -1732,6 +1732,10 @@ void AnimInverseKinematics::initRelativePosesFromSolutionSource(SolutionSource s break; case SolutionSource::RelaxToLimitCenterPoses: blendToPoses(_limitCenterPoses, underPoses, RELAX_BLEND_FACTOR); + // special case for hips: copy over hips pose whether or not IK is enabled. + if (_hipsIndex >= 0 && _hipsIndex < _relativePoses.size()) { + _relativePoses[_hipsIndex] = _limitCenterPoses[_hipsIndex]; + } break; case SolutionSource::PreviousSolution: // do nothing... _relativePoses is already the previous solution From de88a34e977b1cd33913216a911ab813129e195d Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 26 Jun 2017 23:18:21 -0700 Subject: [PATCH 0617/1049] Fix toolbar button activation states --- scripts/system/audio.js | 12 ++++-------- scripts/system/help.js | 3 ++- scripts/system/marketplaces/marketplaces.js | 12 ++---------- scripts/system/menu.js | 9 ++------- scripts/system/pal.js | 16 ++++++---------- scripts/system/snapshot.js | 10 +++------- 6 files changed, 19 insertions(+), 43 deletions(-) diff --git a/scripts/system/audio.js b/scripts/system/audio.js index cb9589ae9e..0a3471fa81 100644 --- a/scripts/system/audio.js +++ b/scripts/system/audio.js @@ -15,6 +15,7 @@ var TABLET_BUTTON_NAME = "AUDIO"; var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; +var AUDIO_QML_SOURCE = "../audio/Audio.qml"; var MUTE_ICONS = { icon: "icons/tablet-icons/mic-mute-i.svg", @@ -34,7 +35,6 @@ function onMuteToggled() { } } -var shouldActivateButton = false; var onAudioScreen = false; function onClicked() { @@ -44,18 +44,14 @@ function onClicked() { } else { var entity = HMD.tabletID; Entities.editEntity(entity, { textures: JSON.stringify({ "tex.close": HOME_BUTTON_TEXTURE }) }); - shouldActivateButton = true; - shouldActivateButton = true; - tablet.loadQMLSource("../audio/Audio.qml"); - onAudioScreen = true; + tablet.loadQMLSource(AUDIO_QML_SOURCE); } } function onScreenChanged(type, url) { + onAudioScreen = (type === "QML" && url === AUDIO_QML_SOURCE); // for toolbar mode: change button to active when window is first openend, false otherwise. - button.editProperties({isActive: shouldActivateButton}); - shouldActivateButton = false; - onAudioScreen = false; + button.editProperties({isActive: onAudioScreen}); } var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); diff --git a/scripts/system/help.js b/scripts/system/help.js index a335b2ef9c..1265a5597b 100644 --- a/scripts/system/help.js +++ b/scripts/system/help.js @@ -40,7 +40,8 @@ } function onScreenChanged(type, url) { - onHelpScreen = false; + onHelpScreen = type === "Web" && url.startsWith("../../../html/tabletHelp.html"); + button.editProperties({ isActive: onHelpScreen }); } button.clicked.connect(onClicked); diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index 4d26bcadb6..3be8143830 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -52,17 +52,11 @@ function onMessageBoxClosed(id, button) { Window.messageBoxClosed.connect(onMessageBoxClosed); -var shouldActivateButton = false; var onMarketplaceScreen = false; function showMarketplace() { UserActivityLogger.openedMarketplace(); - - shouldActivateButton = true; - tablet.gotoWebScreen(MARKETPLACE_URL_INITIAL, MARKETPLACES_INJECT_SCRIPT_URL); - onMarketplaceScreen = true; - tablet.webEventReceived.connect(function (message) { if (message === GOTO_DIRECTORY) { @@ -122,7 +116,6 @@ function onClick() { if (onMarketplaceScreen) { // for toolbar-mode: go back to home screen, this will close the window. tablet.gotoHomeScreen(); - onMarketplaceScreen = false; } else { var entity = HMD.tabletID; Entities.editEntity(entity, {textures: JSON.stringify({"tex.close": HOME_BUTTON_TEXTURE})}); @@ -131,10 +124,9 @@ function onClick() { } function onScreenChanged(type, url) { + onMarketplaceScreen = type === "Web" && url === MARKETPLACE_URL_INITIAL // for toolbar mode: change button to active when window is first openend, false otherwise. - marketplaceButton.editProperties({isActive: shouldActivateButton}); - shouldActivateButton = false; - onMarketplaceScreen = false; + marketplaceButton.editProperties({isActive: onMarketplaceScreen}); } marketplaceButton.clicked.connect(onClick); diff --git a/scripts/system/menu.js b/scripts/system/menu.js index 4ad5958144..c7a44d3e48 100644 --- a/scripts/system/menu.js +++ b/scripts/system/menu.js @@ -21,7 +21,6 @@ var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet- sortOrder: 3 }); - var shouldActivateButton = false; var onMenuScreen = false; function onClicked() { @@ -31,17 +30,13 @@ var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet- } else { var entity = HMD.tabletID; Entities.editEntity(entity, {textures: JSON.stringify({"tex.close": HOME_BUTTON_TEXTURE})}); - shouldActivateButton = true; tablet.gotoMenuScreen(); - onMenuScreen = true; } } function onScreenChanged(type, url) { - // for toolbar mode: change button to active when window is first openend, false otherwise. - button.editProperties({isActive: shouldActivateButton}); - shouldActivateButton = false; - onMenuScreen = false; + onMenuScreen = type === "Menu"; + button.editProperties({isActive: onMenuScreen}); } button.clicked.connect(onClicked); diff --git a/scripts/system/pal.js b/scripts/system/pal.js index 6c1652c700..2c81622668 100644 --- a/scripts/system/pal.js +++ b/scripts/system/pal.js @@ -40,7 +40,7 @@ var HOVER_TEXTURES = { var UNSELECTED_COLOR = { red: 0x1F, green: 0xC6, blue: 0xA6}; var SELECTED_COLOR = {red: 0xF3, green: 0x91, blue: 0x29}; var HOVER_COLOR = {red: 0xD0, green: 0xD0, blue: 0xD0}; // almost white for now - +var PAL_QML_SOURCE = "../Pal.qml"; var conserveResources = true; Script.include("/~/system/libraries/controllers.js"); @@ -727,17 +727,14 @@ function tabletVisibilityChanged() { } var onPalScreen = false; -var shouldActivateButton = false; function onTabletButtonClicked() { if (onPalScreen) { // for toolbar-mode: go back to home screen, this will close the window. tablet.gotoHomeScreen(); } else { - shouldActivateButton = true; - tablet.loadQMLSource("../Pal.qml"); + tablet.loadQMLSource(PAL_QML_SOURCE); tablet.tabletShownChanged.connect(tabletVisibilityChanged); - onPalScreen = true; Users.requestsDomainListData = true; populateNearbyUserList(); isWired = true; @@ -765,14 +762,13 @@ function wireEventBridge(on) { } function onTabletScreenChanged(type, url) { - wireEventBridge(shouldActivateButton); + onPalScreen = (type === "QML" && url === PAL_QML_SOURCE); + wireEventBridge(onPalScreen); // for toolbar mode: change button to active when window is first openend, false otherwise. - button.editProperties({isActive: shouldActivateButton}); - shouldActivateButton = false; - onPalScreen = false; + button.editProperties({isActive: onPalScreen}); // disable sphere overlays when not on pal screen. - if (type !== "QML" || url !== "../Pal.qml") { + if (!onPalScreen) { off(); } } diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index 6321c17ded..c60e3a67f7 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -377,18 +377,15 @@ function fillImageDataFromPrevious() { var SNAPSHOT_REVIEW_URL = Script.resolvePath("html/SnapshotReview.html"); var isInSnapshotReview = false; -var shouldActivateButton = false; function onButtonClicked() { if (isInSnapshotReview){ // for toolbar-mode: go back to home screen, this will close the window. tablet.gotoHomeScreen(); } else { - shouldActivateButton = true; fillImageDataFromPrevious(); tablet.gotoWebScreen(SNAPSHOT_REVIEW_URL); tablet.webEventReceived.connect(onMessage); HMD.openTablet(); - isInSnapshotReview = true; } } @@ -662,11 +659,10 @@ function maybeDeleteSnapshotStories() { storyIDsToMaybeDelete = []; } function onTabletScreenChanged(type, url) { - button.editProperties({ isActive: shouldActivateButton }); - shouldActivateButton = false; - if (isInSnapshotReview) { + isInSnapshotReview = (type === "Web" && url === SNAPSHOT_REVIEW_URL); + button.editProperties({ isActive: isInSnapshotReview }); + if (!isInSnapshotReview) { tablet.webEventReceived.disconnect(onMessage); - isInSnapshotReview = false; } } function onUsernameChanged() { From 76dae279cf4f9381796016fd6b4ef3546208e915 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Tue, 27 Jun 2017 14:24:34 +0200 Subject: [PATCH 0618/1049] Removing the default case from the renderer --- libraries/render-utils/src/BackgroundStage.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libraries/render-utils/src/BackgroundStage.cpp b/libraries/render-utils/src/BackgroundStage.cpp index 5275331696..5d04f188f1 100644 --- a/libraries/render-utils/src/BackgroundStage.cpp +++ b/libraries/render-utils/src/BackgroundStage.cpp @@ -54,13 +54,11 @@ BackgroundStage::BackgroundPointer BackgroundStage::removeBackground(Index index void DrawBackgroundStage::run(const render::RenderContextPointer& renderContext, const Inputs& inputs) { - const auto& lightingModel = inputs; if (!lightingModel->isBackgroundEnabled()) { return; } - // Background rendering decision auto backgroundStage = renderContext->_scene->getStage(); model::SunSkyStagePointer background; @@ -71,10 +69,7 @@ void DrawBackgroundStage::run(const render::RenderContextPointer& renderContext, if (background) { skybox = background->getSkybox(); } - } else { - skybox = backgroundStage->getBackground(0)->getSkybox(); } - /* auto backgroundMode = skyStage->getBackgroundMode(); switch (backgroundMode) { From 01155ba4e38e90800650a5a2324a61eeae61b15f Mon Sep 17 00:00:00 2001 From: David Kelly Date: Tue, 27 Jun 2017 08:47:54 -0700 Subject: [PATCH 0619/1049] this handles redirecting ktx_cache, data8, prepared --- interface/src/Application.cpp | 2 -- interface/src/Application.h | 3 +++ interface/src/main.cpp | 22 ++++++++++++-------- libraries/networking/src/AssetClient.cpp | 13 ++++++------ libraries/networking/src/AssetClient.h | 4 +++- libraries/networking/src/ResourceManager.cpp | 8 +++++-- libraries/networking/src/ResourceManager.h | 5 +++++ libraries/shared/src/PathUtils.cpp | 13 +++++++++++- libraries/shared/src/PathUtils.h | 2 +- 9 files changed, 50 insertions(+), 22 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 35d00ba34a..9052f082dc 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -37,8 +37,6 @@ #include #include -#include - #include #include diff --git a/interface/src/Application.h b/interface/src/Application.h index cab42d1e1c..a7aded006b 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -297,6 +297,7 @@ public: void setAvatarOverrideUrl(const QUrl& url, bool save); QUrl getAvatarOverrideUrl() { return _avatarOverrideUrl; } bool getSaveAvatarOverrideUrl() { return _saveAvatarOverrideUrl; } + void setCacheOverrideDir(const QString& dirName) { _cacheDir = dirName; } signals: void svoImportRequested(const QString& url); @@ -688,5 +689,7 @@ private: QUrl _avatarOverrideUrl; bool _saveAvatarOverrideUrl { false }; + + QString _cacheDir; }; #endif // hifi_Application_h diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 81bf0244d9..67e248506f 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include "AddressManager.h" #include "Application.h" @@ -71,7 +72,7 @@ int main(int argc, const char* argv[]) { QCommandLineOption runServerOption("runServer", "Whether to run the server"); QCommandLineOption serverContentPathOption("serverContentPath", "Where to find server content", "serverContentPath"); QCommandLineOption allowMultipleInstancesOption("allowMultipleInstances", "Allow multiple instances to run"); - QCommandLineOption overrideAppLocalDataPathOption("cache", "set test cache directory"); + QCommandLineOption overrideAppLocalDataPathOption("cache", "set test cache

", "dir"); parser.addOption(urlOption); parser.addOption(noUpdaterOption); parser.addOption(checkMinSpecOption); @@ -99,14 +100,17 @@ int main(int argc, const char* argv[]) { instanceMightBeRunning = false; } if (parser.isSet(overrideAppLocalDataPathOption)) { - // get standard path - auto standardAppDataLocation = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); - // set to test so all future paths are the test paths - QStandardPaths::setTestModeEnabled(true); - // now, we need to link everything in AppDataLocation to the test AppDataLocation. This - // leaves the test location for AppLocalDataLocation alone, but allows all the stuff in - // AppDataLocation to be usable - QFile::link(standardAppDataLocation, QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); + // get dir to use for cache + QString cacheDir = parser.value(overrideAppLocalDataPathOption); + if (!cacheDir.isEmpty()) { + // tell everyone to use the right cache location + // + // this handles data8 and prepared + ResourceManager::setCacheDir(cacheDir); + + // this does the ktx_cache + PathUtils::getAppLocalDataPath(cacheDir); + } } if (instanceMightBeRunning) { diff --git a/libraries/networking/src/AssetClient.cpp b/libraries/networking/src/AssetClient.cpp index 3faa9981dc..e97660da4c 100644 --- a/libraries/networking/src/AssetClient.cpp +++ b/libraries/networking/src/AssetClient.cpp @@ -31,7 +31,7 @@ MessageID AssetClient::_currentID = 0; -AssetClient::AssetClient() { +AssetClient::AssetClient(const QString& cacheDir) : _cacheDir(cacheDir) { setCustomDeleter([](Dependency* dependency){ static_cast(dependency)->deleteLater(); }); @@ -55,14 +55,15 @@ void AssetClient::init() { // Setup disk cache if not already auto& networkAccessManager = NetworkAccessManager::getInstance(); if (!networkAccessManager.cache()) { - QString cachePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation); - cachePath = !cachePath.isEmpty() ? cachePath : "interfaceCache"; - + if (_cacheDir.isEmpty()) { + QString cachePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation); + _cacheDir = !cachePath.isEmpty() ? cachePath : "interfaceCache"; + } QNetworkDiskCache* cache = new QNetworkDiskCache(); cache->setMaximumCacheSize(MAXIMUM_CACHE_SIZE); - cache->setCacheDirectory(cachePath); + cache->setCacheDirectory(_cacheDir); networkAccessManager.setCache(cache); - qInfo() << "ResourceManager disk cache setup at" << cachePath + qInfo() << "ResourceManager disk cache setup at" << _cacheDir << "(size:" << MAXIMUM_CACHE_SIZE / BYTES_PER_GIGABYTES << "GB)"; } } diff --git a/libraries/networking/src/AssetClient.h b/libraries/networking/src/AssetClient.h index cab4a4f5b0..2bc694f367 100644 --- a/libraries/networking/src/AssetClient.h +++ b/libraries/networking/src/AssetClient.h @@ -49,7 +49,7 @@ using ProgressCallback = std::function class AssetClient : public QObject, public Dependency { Q_OBJECT public: - AssetClient(); + AssetClient(const QString& cacheDir=""); Q_INVOKABLE GetMappingRequest* createGetMappingRequest(const AssetPath& path); Q_INVOKABLE GetAllMappingsRequest* createGetAllMappingsRequest(); @@ -109,6 +109,8 @@ private: std::unordered_map> _pendingInfoRequests; std::unordered_map> _pendingUploads; + QString _cacheDir; + friend class AssetRequest; friend class AssetUpload; friend class MappingRequest; diff --git a/libraries/networking/src/ResourceManager.cpp b/libraries/networking/src/ResourceManager.cpp index e2c1cf2431..e4357ca507 100644 --- a/libraries/networking/src/ResourceManager.cpp +++ b/libraries/networking/src/ResourceManager.cpp @@ -27,7 +27,7 @@ QThread ResourceManager::_thread; ResourceManager::PrefixMap ResourceManager::_prefixMap; QMutex ResourceManager::_prefixMapLock; - +QString ResourceManager::_cacheDir; void ResourceManager::setUrlPrefixOverride(const QString& prefix, const QString& replacement) { QMutexLocker locker(&_prefixMapLock); @@ -78,7 +78,7 @@ QUrl ResourceManager::normalizeURL(const QUrl& originalUrl) { void ResourceManager::init() { _thread.setObjectName("Resource Manager Thread"); - auto assetClient = DependencyManager::set(); + auto assetClient = DependencyManager::set(_cacheDir); assetClient->moveToThread(&_thread); QObject::connect(&_thread, &QThread::started, assetClient.data(), &AssetClient::init); @@ -164,3 +164,7 @@ bool ResourceManager::resourceExists(const QUrl& url) { return false; } +void ResourceManager::setCacheDir(const QString& cacheDir) { + // TODO: check for existence? + _cacheDir = cacheDir; +} diff --git a/libraries/networking/src/ResourceManager.h b/libraries/networking/src/ResourceManager.h index 41da892701..699573ddd6 100644 --- a/libraries/networking/src/ResourceManager.h +++ b/libraries/networking/src/ResourceManager.h @@ -40,6 +40,9 @@ public: // to return to the calling thread so that events can still be processed. static bool resourceExists(const QUrl& url); + // adjust where we persist the cache + static void setCacheDir(const QString& cacheDir); + private: static QThread _thread; @@ -47,6 +50,8 @@ private: static PrefixMap _prefixMap; static QMutex _prefixMapLock; + + static QString _cacheDir; }; #endif diff --git a/libraries/shared/src/PathUtils.cpp b/libraries/shared/src/PathUtils.cpp index 9bf9d7bdcf..1fe9e2f83d 100644 --- a/libraries/shared/src/PathUtils.cpp +++ b/libraries/shared/src/PathUtils.cpp @@ -34,7 +34,18 @@ QString PathUtils::getAppDataPath() { return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/"; } -QString PathUtils::getAppLocalDataPath() { +QString PathUtils::getAppLocalDataPath(const QString& overridePath /* = "" */) { + static QString overriddenPath = ""; + // set the overridden path if one was passed in + if (!overridePath.isEmpty()) { + overriddenPath = overridePath; + } + // return overridden path if set + if (!overriddenPath.isEmpty()) { + return overriddenPath; + } + + // otherwise return standard path return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/"; } diff --git a/libraries/shared/src/PathUtils.h b/libraries/shared/src/PathUtils.h index 14eb81dd9a..42dd09c8b0 100644 --- a/libraries/shared/src/PathUtils.h +++ b/libraries/shared/src/PathUtils.h @@ -28,7 +28,7 @@ public: static const QString& resourcesPath(); static QString getAppDataPath(); - static QString getAppLocalDataPath(); + static QString getAppLocalDataPath(const QString& overridePath = ""); static QString getAppDataFilePath(const QString& filename); static QString getAppLocalDataFilePath(const QString& filename); From 1ce6be7d63274e7daa5d674d37adf7dbe8eb2fd9 Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Tue, 27 Jun 2017 10:36:39 -0700 Subject: [PATCH 0620/1049] Additional commentation and setting z dimension to 0 --- scripts/system/spectatorCamera.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 103ef7eb6b..5ea9ab3fae 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -100,10 +100,10 @@ var cameraRotation; var cameraPosition; //The negative y dimension for viewFinderOverlay is necessary for now due to the way Image3DOverlay - // draws textures, but should be looked into at some point. Also the z dimension doesn't matter - // so it is set to the glassPaneWidth + // draws textures, but should be looked into at some point. Also the z dimension shouldn't affect + // the overlay since it is an Image3DOverlay so it is set to 0 var glassPaneWidth = 0.16; - var viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: glassPaneWidth }; + var viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: 0 }; function spectatorCameraOn() { // Sets the special texture size based on the window it is displayed in, which doesn't include the menu bar spectatorFrameRenderConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); @@ -307,11 +307,11 @@ var squareScale = verticalScale * (1 + (1 - (1 / (geometryChanged.width / geometryChanged.height)))); if (geometryChanged.height > geometryChanged.width) { //vertical window size - viewFinderOverlayDim = { x: (glassPaneWidth * verticalScale), y: (-glassPaneWidth * verticalScale), z: glassPaneWidth }; + viewFinderOverlayDim = { x: (glassPaneWidth * verticalScale), y: (-glassPaneWidth * verticalScale), z: 0 }; } else if ((geometryChanged.width / geometryChanged.height) < glassPaneRatio) { //square-ish window size, in-between vertical and horizontal - viewFinderOverlayDim = { x: (glassPaneWidth * squareScale), y: (-glassPaneWidth * squareScale), z: glassPaneWidth }; + viewFinderOverlayDim = { x: (glassPaneWidth * squareScale), y: (-glassPaneWidth * squareScale), z: 0 }; } else { //horizontal window size - viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: glassPaneWidth }; + viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: 0 }; } // The only way I found to update the viewFinderOverlay without turning the spectator camera on and off is to delete and recreate the From d4122cff5ad20cf5b9db00d62f2e72c3cc9b4a61 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Tue, 27 Jun 2017 11:29:08 -0700 Subject: [PATCH 0621/1049] warning fix --- libraries/animation/src/AnimInverseKinematics.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index 5d98357ea3..d7076a443e 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -1733,7 +1733,7 @@ void AnimInverseKinematics::initRelativePosesFromSolutionSource(SolutionSource s case SolutionSource::RelaxToLimitCenterPoses: blendToPoses(_limitCenterPoses, underPoses, RELAX_BLEND_FACTOR); // special case for hips: copy over hips pose whether or not IK is enabled. - if (_hipsIndex >= 0 && _hipsIndex < _relativePoses.size()) { + if (_hipsIndex >= 0 && _hipsIndex < (int)_relativePoses.size()) { _relativePoses[_hipsIndex] = _limitCenterPoses[_hipsIndex]; } break; From dcdf07191b87f2bcaf4ee6ace7a9dd4b90fb2e69 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Tue, 27 Jun 2017 11:29:44 -0700 Subject: [PATCH 0622/1049] Fast acosf() using polynomial approximation --- libraries/shared/src/AudioHelpers.h | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/libraries/shared/src/AudioHelpers.h b/libraries/shared/src/AudioHelpers.h index b43764ef5d..d75733e678 100644 --- a/libraries/shared/src/AudioHelpers.h +++ b/libraries/shared/src/AudioHelpers.h @@ -66,6 +66,48 @@ static inline float fastExp2f(float x) { return x * xi.f; } +// +// on x86 architecture, assume that SSE2 is present +// +#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__x86_64__) + +#include +// inline sqrtss, without requiring /fp:fast +static inline float fastSqrtf(float x) { + return _mm_cvtss_f32(_mm_sqrt_ss(_mm_set_ss(x))); +} + +#else + +static inline float fastSqrtf(float x) { + return sqrtf(x); +} + +#endif + +// +// for -1 <= x <= 1, returns acos(x) +// otherwise, returns NaN +// +// abs |error| < 7e-5, smooth +// +static inline float fastAcosf(float x) { + + union { float f; int32_t i; } xi = { x }; + + int32_t sign = xi.i & 0x80000000; + xi.i ^= sign; // fabs(x) + + // compute sqrt(1-x) in parallel + float r = fastSqrtf(1.0f - xi.f); + + // polynomial for acos(x)/sqrt(1-x) over x=[0,1] + xi.f = ((-0.0198439236f * xi.f + 0.0762021306f) * xi.f + -0.212940971f) * xi.f + 1.57079633f; + + xi.f *= r; + return (sign ? 3.141592654f - xi.f : xi.f); +} + // // Quantize a non-negative gain value to the nearest 0.5dB, and pack to a byte. // From 089a2bb36204f2161684b9b4e437107d0592dd4c Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 27 Jun 2017 11:58:03 -0700 Subject: [PATCH 0623/1049] do not manage identity data without identity data received --- assignment-client/src/avatars/AvatarMixer.cpp | 7 +++++++ libraries/avatars/src/AvatarData.h | 1 + 2 files changed, 8 insertions(+) diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index f218daed03..27deb0e666 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -285,6 +285,13 @@ void AvatarMixer::start() { // is guaranteed to not be accessed by other thread void AvatarMixer::manageIdentityData(const SharedNodePointer& node) { AvatarMixerClientData* nodeData = reinterpret_cast(node->getLinkedData()); + + // there is no need to manage identity data we haven't received yet + // so bail early if we've never received an identity packet for this avatar + if (!nodeData->getAvatar().hasProcessedFirstIdentity()) { + return; + } + bool sendIdentity = false; if (nodeData && nodeData->getAvatarSessionDisplayNameMustChange()) { AvatarData& avatar = nodeData->getAvatar(); diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 63bdd1112f..d6241c2c50 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -627,6 +627,7 @@ public: void markIdentityDataChanged() { _identityDataChanged = true; } void pushIdentitySequenceNumber() { ++_identitySequenceNumber; }; + bool hasProcessedFirstIdentity() const { return _hasProcessedFirstIdentity; } float getDensity() const { return _density; } From af79555e4b03ec401a541698bc381738a62a486c Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 27 Jun 2017 12:05:35 -0700 Subject: [PATCH 0624/1049] make sure nodeData exists before using it --- assignment-client/src/avatars/AvatarMixer.cpp | 2 +- assignment-client/src/avatars/AvatarMixerSlave.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 27deb0e666..b4aae40c10 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -288,7 +288,7 @@ void AvatarMixer::manageIdentityData(const SharedNodePointer& node) { // there is no need to manage identity data we haven't received yet // so bail early if we've never received an identity packet for this avatar - if (!nodeData->getAvatar().hasProcessedFirstIdentity()) { + if (!nodeData || !nodeData->getAvatar().hasProcessedFirstIdentity()) { return; } diff --git a/assignment-client/src/avatars/AvatarMixerSlave.cpp b/assignment-client/src/avatars/AvatarMixerSlave.cpp index 4ff447a95a..d38ffa9998 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.cpp +++ b/assignment-client/src/avatars/AvatarMixerSlave.cpp @@ -320,14 +320,15 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node) ++numOtherAvatars; const AvatarMixerClientData* otherNodeData = reinterpret_cast(otherNode->getLinkedData()); + const AvatarData* otherAvatar = otherNodeData->getConstAvatarData(); // If the time that the mixer sent AVATAR DATA about Avatar B to Avatar A is BEFORE OR EQUAL TO // the time that Avatar B flagged an IDENTITY DATA change, send IDENTITY DATA about Avatar B to Avatar A. - if (nodeData->getLastBroadcastTime(otherNode->getUUID()) <= otherNodeData->getIdentityChangeTimestamp()) { + if (otherAvatar->hasProcessedFirstIdentity() + && nodeData->getLastBroadcastTime(otherNode->getUUID()) <= otherNodeData->getIdentityChangeTimestamp()) { identityBytesSent += sendIdentityPacket(otherNodeData, node); } - const AvatarData* otherAvatar = otherNodeData->getConstAvatarData(); glm::vec3 otherPosition = otherAvatar->getClientGlobalPosition(); // determine if avatar is in view, to determine how much data to include... From 241231c00ceb173cb3139fe78b5db60fde4b8872 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi Date: Tue, 27 Jun 2017 22:14:58 +0200 Subject: [PATCH 0625/1049] file lists works, but not initial yet --- .../qml/dialogs/TabletFileDialog.qml | 50 ++++++++++++++----- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/interface/resources/qml/dialogs/TabletFileDialog.qml b/interface/resources/qml/dialogs/TabletFileDialog.qml index 5e33663436..f77cc7c78a 100644 --- a/interface/resources/qml/dialogs/TabletFileDialog.qml +++ b/interface/resources/qml/dialogs/TabletFileDialog.qml @@ -25,11 +25,14 @@ import "fileDialog" //FIXME implement shortcuts for favorite location TabletModalWindow { id: root + anchors.fill: parent width: parent.width height: parent.height HifiConstants { id: hifi } + property var filesModel: ListModel { } + Settings { category: "FileDialog" property alias width: root.width @@ -250,7 +253,9 @@ TabletModalWindow { } currentSelectionUrl = helper.pathToUrl(fileTableView.model.get(row).filePath); - currentSelectionIsFolder = fileTableView.model.isFolder(row); + currentSelectionIsFolder = fileTableView.model !== filesModel ? + fileTableView.model.isFolder(row) : + fileTableModel.isFolder(row); if (root.selectDirectory || !currentSelectionIsFolder) { currentSelection.text = capitalizeDrive(helper.urlToPath(currentSelectionUrl)); } else { @@ -288,7 +293,7 @@ TabletModalWindow { } onFolderChanged: { - fileTableModel.update(); // Update once the data from the folder change is available. + refreshTimer.start() } function getItem(index, field) { @@ -328,7 +333,20 @@ TabletModalWindow { } } - ListModel { + Timer { + id: refreshTimer + interval: 100 + repeat: false + running: false + onTriggered: fileTableModel.update() + } + + Component { + id: filesModelBuilder + ListModel { } + } + + QtObject { id: fileTableModel // FolderListModel has a couple of problems: @@ -380,7 +398,11 @@ TabletModalWindow { if (row === -1) { return false; } - return get(row).fileIsDir; + return filesModel.get(row).fileIsDir; + } + + function get(row) { + return filesModel.get(row) } function update() { @@ -398,7 +420,8 @@ TabletModalWindow { rows = 0, i; - clear(); + console.log("dialog.qml updating") + var newFilesModel = filesModelBuilder.createObject(root); comparisonFunction = sortOrder === Qt.AscendingOrder ? function(a, b) { return a < b; } @@ -420,7 +443,7 @@ TabletModalWindow { while (lower < upper) { middle = Math.floor((lower + upper) / 2); var lessThan; - if (comparisonFunction(sortValue, get(middle)[sortField])) { + if (comparisonFunction(sortValue, newFilesModel.get(middle)[sortField])) { lessThan = true; upper = middle; } else { @@ -429,7 +452,7 @@ TabletModalWindow { } } - insert(lower, { + newFilesModel.insert(lower, { fileName: fileName, fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")), fileSize: model.getItem(i, "fileSize"), @@ -440,6 +463,7 @@ TabletModalWindow { rows++; } + filesModel = newFilesModel; d.clearSelection(); } @@ -467,7 +491,7 @@ TabletModalWindow { sortIndicatorOrder: Qt.AscendingOrder sortIndicatorVisible: true - model: fileTableModel + model: filesModel function updateSort() { model.sortOrder = sortIndicatorOrder; @@ -559,11 +583,12 @@ TabletModalWindow { } function navigateToCurrentRow() { + var currentModel = fileTableView.model !== filesModel ? fileTableView.model : fileTableModel var row = fileTableView.currentRow - var isFolder = model.isFolder(row); - var file = model.get(row).filePath; + var isFolder = currentModel.isFolder(row); + var file = currentModel.get(row).filePath; if (isFolder) { - fileTableView.model.folder = helper.pathToUrl(file); + currentModel.folder = helper.pathToUrl(file); } else { okAction.trigger(); } @@ -578,7 +603,8 @@ TabletModalWindow { var newPrefix = prefix + event.text.toLowerCase(); var matchedIndex = -1; for (var i = 0; i < model.count; ++i) { - var name = model.get(i).fileName.toLowerCase(); + var name = model !== filesModel ? model.get(i).fileName.toLowerCase() : + filesModel.get(i).fileName.toLowerCase(); if (0 === name.indexOf(newPrefix)) { matchedIndex = i; break; From ad970c9f5c8ec1712ecd7974f83086df4d8a3bcb Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Tue, 27 Jun 2017 13:45:18 -0700 Subject: [PATCH 0626/1049] fast compute of HRTF azimuth --- assignment-client/src/audio/AudioMixerSlave.cpp | 17 +++++++++++------ libraries/audio-client/src/AudioClient.cpp | 17 ++++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/assignment-client/src/audio/AudioMixerSlave.cpp b/assignment-client/src/audio/AudioMixerSlave.cpp index 2d800c3561..14b4fdea68 100644 --- a/assignment-client/src/audio/AudioMixerSlave.cpp +++ b/assignment-client/src/audio/AudioMixerSlave.cpp @@ -545,7 +545,6 @@ float computeAzimuth(const AvatarAudioStream& listeningNodeStream, const Positio const glm::vec3& relativePosition) { glm::quat inverseOrientation = glm::inverse(listeningNodeStream.getOrientation()); - // Compute sample delay for the two ears to create phase panning glm::vec3 rotatedSourcePosition = inverseOrientation * relativePosition; // project the rotated source position vector onto the XZ plane @@ -553,11 +552,17 @@ float computeAzimuth(const AvatarAudioStream& listeningNodeStream, const Positio const float SOURCE_DISTANCE_THRESHOLD = 1e-30f; - if (glm::length2(rotatedSourcePosition) > SOURCE_DISTANCE_THRESHOLD) { + float rotatedSourcePositionLength2 = glm::length2(rotatedSourcePosition); + if (rotatedSourcePositionLength2 > SOURCE_DISTANCE_THRESHOLD) { + // produce an oriented angle about the y-axis - return glm::orientedAngle(glm::vec3(0.0f, 0.0f, -1.0f), glm::normalize(rotatedSourcePosition), glm::vec3(0.0f, -1.0f, 0.0f)); - } else { - // there is no distance between listener and source - return no azimuth - return 0; + // return glm::orientedAngle(glm::vec3(0.0f, 0.0f, -1.0f), glm::normalize(rotatedSourcePosition), glm::vec3(0.0f, -1.0f, 0.0f)); + glm::vec3 direction = rotatedSourcePosition * (1.0f / fastSqrtf(rotatedSourcePositionLength2)); + float angle = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); + return (direction.x < 0.0f) ? -angle : angle; + + } else { + // no azimuth if they are in same spot + return 0.0f; } } diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index fc54a04a5e..27e70e5f01 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -48,6 +48,7 @@ #include "AudioClientLogging.h" #include "AudioLogging.h" +#include "AudioHelpers.h" #include "AudioClient.h" @@ -1688,23 +1689,25 @@ int AudioClient::calculateNumberOfFrameSamples(int numBytes) const { } float AudioClient::azimuthForSource(const glm::vec3& relativePosition) { - // copied from AudioMixer, more or less glm::quat inverseOrientation = glm::inverse(_orientationGetter()); - // compute sample delay for the 2 ears to create phase panning glm::vec3 rotatedSourcePosition = inverseOrientation * relativePosition; - // project the rotated source position vector onto x-y plane + // project the rotated source position vector onto the XZ plane rotatedSourcePosition.y = 0.0f; static const float SOURCE_DISTANCE_THRESHOLD = 1e-30f; - if (glm::length2(rotatedSourcePosition) > SOURCE_DISTANCE_THRESHOLD) { + float rotatedSourcePositionLength2 = glm::length2(rotatedSourcePosition); + if (rotatedSourcePositionLength2 > SOURCE_DISTANCE_THRESHOLD) { // produce an oriented angle about the y-axis - return glm::orientedAngle(glm::vec3(0.0f, 0.0f, -1.0f), glm::normalize(rotatedSourcePosition), glm::vec3(0.0f, -1.0f, 0.0f)); - } else { - + // return glm::orientedAngle(glm::vec3(0.0f, 0.0f, -1.0f), glm::normalize(rotatedSourcePosition), glm::vec3(0.0f, -1.0f, 0.0f)); + glm::vec3 direction = rotatedSourcePosition * (1.0f / fastSqrtf(rotatedSourcePositionLength2)); + float angle = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); + return (direction.x < 0.0f) ? -angle : angle; + + } else { // no azimuth if they are in same spot return 0.0f; } From a00cd425668ac30b92bc3fe8c612da25c3a94830 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Tue, 27 Jun 2017 14:01:28 -0700 Subject: [PATCH 0627/1049] fast compute of HRTF gain --- assignment-client/src/audio/AudioMixerSlave.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/assignment-client/src/audio/AudioMixerSlave.cpp b/assignment-client/src/audio/AudioMixerSlave.cpp index 14b4fdea68..9cfc659c14 100644 --- a/assignment-client/src/audio/AudioMixerSlave.cpp +++ b/assignment-client/src/audio/AudioMixerSlave.cpp @@ -497,13 +497,14 @@ float computeGain(const AvatarAudioStream& listeningNodeStream, const Positional // avatar: apply fixed off-axis attenuation to make them quieter as they turn away } else if (!isEcho && (streamToAdd.getType() == PositionalAudioStream::Microphone)) { glm::vec3 rotatedListenerPosition = glm::inverse(streamToAdd.getOrientation()) * relativePosition; - float angleOfDelivery = glm::angle(glm::vec3(0.0f, 0.0f, -1.0f), - glm::normalize(rotatedListenerPosition)); + + // float angleOfDelivery = glm::angle(glm::vec3(0.0f, 0.0f, -1.0f), glm::normalize(rotatedListenerPosition)); + glm::vec3 direction = glm::normalize(rotatedListenerPosition); + float angleOfDelivery = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); const float MAX_OFF_AXIS_ATTENUATION = 0.2f; const float OFF_AXIS_ATTENUATION_STEP = (1 - MAX_OFF_AXIS_ATTENUATION) / 2.0f; - float offAxisCoefficient = MAX_OFF_AXIS_ATTENUATION + - (angleOfDelivery * (OFF_AXIS_ATTENUATION_STEP / PI_OVER_TWO)); + float offAxisCoefficient = MAX_OFF_AXIS_ATTENUATION + (angleOfDelivery * (OFF_AXIS_ATTENUATION_STEP / PI_OVER_TWO)); gain *= offAxisCoefficient; } From 827fa98baaa68448882b1780399410a81a2f7729 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 26 Jun 2017 23:18:21 -0700 Subject: [PATCH 0628/1049] Fix toolbar button activation states --- scripts/system/audio.js | 12 ++++-------- scripts/system/help.js | 3 ++- scripts/system/marketplaces/marketplaces.js | 12 ++---------- scripts/system/menu.js | 9 ++------- scripts/system/pal.js | 16 ++++++---------- scripts/system/snapshot.js | 10 +++------- 6 files changed, 19 insertions(+), 43 deletions(-) diff --git a/scripts/system/audio.js b/scripts/system/audio.js index cb9589ae9e..0a3471fa81 100644 --- a/scripts/system/audio.js +++ b/scripts/system/audio.js @@ -15,6 +15,7 @@ var TABLET_BUTTON_NAME = "AUDIO"; var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; +var AUDIO_QML_SOURCE = "../audio/Audio.qml"; var MUTE_ICONS = { icon: "icons/tablet-icons/mic-mute-i.svg", @@ -34,7 +35,6 @@ function onMuteToggled() { } } -var shouldActivateButton = false; var onAudioScreen = false; function onClicked() { @@ -44,18 +44,14 @@ function onClicked() { } else { var entity = HMD.tabletID; Entities.editEntity(entity, { textures: JSON.stringify({ "tex.close": HOME_BUTTON_TEXTURE }) }); - shouldActivateButton = true; - shouldActivateButton = true; - tablet.loadQMLSource("../audio/Audio.qml"); - onAudioScreen = true; + tablet.loadQMLSource(AUDIO_QML_SOURCE); } } function onScreenChanged(type, url) { + onAudioScreen = (type === "QML" && url === AUDIO_QML_SOURCE); // for toolbar mode: change button to active when window is first openend, false otherwise. - button.editProperties({isActive: shouldActivateButton}); - shouldActivateButton = false; - onAudioScreen = false; + button.editProperties({isActive: onAudioScreen}); } var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); diff --git a/scripts/system/help.js b/scripts/system/help.js index a335b2ef9c..1265a5597b 100644 --- a/scripts/system/help.js +++ b/scripts/system/help.js @@ -40,7 +40,8 @@ } function onScreenChanged(type, url) { - onHelpScreen = false; + onHelpScreen = type === "Web" && url.startsWith("../../../html/tabletHelp.html"); + button.editProperties({ isActive: onHelpScreen }); } button.clicked.connect(onClicked); diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index 4d26bcadb6..3be8143830 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -52,17 +52,11 @@ function onMessageBoxClosed(id, button) { Window.messageBoxClosed.connect(onMessageBoxClosed); -var shouldActivateButton = false; var onMarketplaceScreen = false; function showMarketplace() { UserActivityLogger.openedMarketplace(); - - shouldActivateButton = true; - tablet.gotoWebScreen(MARKETPLACE_URL_INITIAL, MARKETPLACES_INJECT_SCRIPT_URL); - onMarketplaceScreen = true; - tablet.webEventReceived.connect(function (message) { if (message === GOTO_DIRECTORY) { @@ -122,7 +116,6 @@ function onClick() { if (onMarketplaceScreen) { // for toolbar-mode: go back to home screen, this will close the window. tablet.gotoHomeScreen(); - onMarketplaceScreen = false; } else { var entity = HMD.tabletID; Entities.editEntity(entity, {textures: JSON.stringify({"tex.close": HOME_BUTTON_TEXTURE})}); @@ -131,10 +124,9 @@ function onClick() { } function onScreenChanged(type, url) { + onMarketplaceScreen = type === "Web" && url === MARKETPLACE_URL_INITIAL // for toolbar mode: change button to active when window is first openend, false otherwise. - marketplaceButton.editProperties({isActive: shouldActivateButton}); - shouldActivateButton = false; - onMarketplaceScreen = false; + marketplaceButton.editProperties({isActive: onMarketplaceScreen}); } marketplaceButton.clicked.connect(onClick); diff --git a/scripts/system/menu.js b/scripts/system/menu.js index 4ad5958144..c7a44d3e48 100644 --- a/scripts/system/menu.js +++ b/scripts/system/menu.js @@ -21,7 +21,6 @@ var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet- sortOrder: 3 }); - var shouldActivateButton = false; var onMenuScreen = false; function onClicked() { @@ -31,17 +30,13 @@ var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet- } else { var entity = HMD.tabletID; Entities.editEntity(entity, {textures: JSON.stringify({"tex.close": HOME_BUTTON_TEXTURE})}); - shouldActivateButton = true; tablet.gotoMenuScreen(); - onMenuScreen = true; } } function onScreenChanged(type, url) { - // for toolbar mode: change button to active when window is first openend, false otherwise. - button.editProperties({isActive: shouldActivateButton}); - shouldActivateButton = false; - onMenuScreen = false; + onMenuScreen = type === "Menu"; + button.editProperties({isActive: onMenuScreen}); } button.clicked.connect(onClicked); diff --git a/scripts/system/pal.js b/scripts/system/pal.js index 0500c13f9b..f7ea4b8f8a 100644 --- a/scripts/system/pal.js +++ b/scripts/system/pal.js @@ -40,7 +40,7 @@ var HOVER_TEXTURES = { var UNSELECTED_COLOR = { red: 0x1F, green: 0xC6, blue: 0xA6}; var SELECTED_COLOR = {red: 0xF3, green: 0x91, blue: 0x29}; var HOVER_COLOR = {red: 0xD0, green: 0xD0, blue: 0xD0}; // almost white for now - +var PAL_QML_SOURCE = "../Pal.qml"; var conserveResources = true; Script.include("/~/system/libraries/controllers.js"); @@ -726,17 +726,14 @@ function tabletVisibilityChanged() { } var onPalScreen = false; -var shouldActivateButton = false; function onTabletButtonClicked() { if (onPalScreen) { // for toolbar-mode: go back to home screen, this will close the window. tablet.gotoHomeScreen(); } else { - shouldActivateButton = true; - tablet.loadQMLSource("../Pal.qml"); + tablet.loadQMLSource(PAL_QML_SOURCE); tablet.tabletShownChanged.connect(tabletVisibilityChanged); - onPalScreen = true; Users.requestsDomainListData = true; populateNearbyUserList(); isWired = true; @@ -764,14 +761,13 @@ function wireEventBridge(on) { } function onTabletScreenChanged(type, url) { - wireEventBridge(shouldActivateButton); + onPalScreen = (type === "QML" && url === PAL_QML_SOURCE); + wireEventBridge(onPalScreen); // for toolbar mode: change button to active when window is first openend, false otherwise. - button.editProperties({isActive: shouldActivateButton}); - shouldActivateButton = false; - onPalScreen = false; + button.editProperties({isActive: onPalScreen}); // disable sphere overlays when not on pal screen. - if (type !== "QML" || url !== "../Pal.qml") { + if (!onPalScreen) { off(); } } diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index 6321c17ded..c60e3a67f7 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -377,18 +377,15 @@ function fillImageDataFromPrevious() { var SNAPSHOT_REVIEW_URL = Script.resolvePath("html/SnapshotReview.html"); var isInSnapshotReview = false; -var shouldActivateButton = false; function onButtonClicked() { if (isInSnapshotReview){ // for toolbar-mode: go back to home screen, this will close the window. tablet.gotoHomeScreen(); } else { - shouldActivateButton = true; fillImageDataFromPrevious(); tablet.gotoWebScreen(SNAPSHOT_REVIEW_URL); tablet.webEventReceived.connect(onMessage); HMD.openTablet(); - isInSnapshotReview = true; } } @@ -662,11 +659,10 @@ function maybeDeleteSnapshotStories() { storyIDsToMaybeDelete = []; } function onTabletScreenChanged(type, url) { - button.editProperties({ isActive: shouldActivateButton }); - shouldActivateButton = false; - if (isInSnapshotReview) { + isInSnapshotReview = (type === "Web" && url === SNAPSHOT_REVIEW_URL); + button.editProperties({ isActive: isInSnapshotReview }); + if (!isInSnapshotReview) { tablet.webEventReceived.disconnect(onMessage); - isInSnapshotReview = false; } } function onUsernameChanged() { From e6cf7cf106cc00b8bdd443f95b87689b7278b352 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 27 Jun 2017 14:25:53 -0700 Subject: [PATCH 0629/1049] flag last broadcast for identity in right place --- assignment-client/src/avatars/AvatarMixerSlave.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/avatars/AvatarMixerSlave.cpp b/assignment-client/src/avatars/AvatarMixerSlave.cpp index d38ffa9998..7e37f583ff 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.cpp +++ b/assignment-client/src/avatars/AvatarMixerSlave.cpp @@ -327,6 +327,9 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node) if (otherAvatar->hasProcessedFirstIdentity() && nodeData->getLastBroadcastTime(otherNode->getUUID()) <= otherNodeData->getIdentityChangeTimestamp()) { identityBytesSent += sendIdentityPacket(otherNodeData, node); + + // remember the last time we sent identity details about this other node to the receiver + nodeData->setLastBroadcastTime(otherNode->getUUID(), usecTimestampNow()); } glm::vec3 otherPosition = otherAvatar->getClientGlobalPosition(); @@ -401,9 +404,6 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node) // set the last sent sequence number for this sender on the receiver nodeData->setLastBroadcastSequenceNumber(otherNode->getUUID(), otherNodeData->getLastReceivedSequenceNumber()); - - // remember the last time we sent details about this other node to the receiver - nodeData->setLastBroadcastTime(otherNode->getUUID(), start); } } From 6d0b853668e08249a6baea6da67aef46bdadd97b Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Tue, 27 Jun 2017 14:34:01 -0700 Subject: [PATCH 0630/1049] Comment structure changes for compacting --- interface/src/SecondaryCamera.cpp | 2 +- scripts/system/spectatorCamera.js | 245 +++++++++--------------------- 2 files changed, 77 insertions(+), 170 deletions(-) diff --git a/interface/src/SecondaryCamera.cpp b/interface/src/SecondaryCamera.cpp index f6ee8caa61..1b8f8a4577 100644 --- a/interface/src/SecondaryCamera.cpp +++ b/interface/src/SecondaryCamera.cpp @@ -39,7 +39,7 @@ void SecondaryCameraRenderTaskConfig::resetSizeSpectatorCamera(int width, int he resetSize(width, height); } -class BeginSecondaryCameraFrame { // Changes renderContext for our framebuffer and and view. +class BeginSecondaryCameraFrame { // Changes renderContext for our framebuffer and view. glm::vec3 _position{}; glm::quat _orientation{}; float _vFoV{}; diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 5ea9ab3fae..ca5752dd2c 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -1,7 +1,4 @@ "use strict"; -/*jslint vars:true, plusplus:true, forin:true*/ -/*global Tablet, Script, */ -/* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // spectatorCamera.js // @@ -14,45 +11,39 @@ (function () { // BEGIN LOCAL_SCOPE - // // FUNCTION VAR DECLARATIONS - // var sendToQml, addOrRemoveButton, onTabletScreenChanged, fromQml, onTabletButtonClicked, wireEventBridge, startup, shutdown, registerButtonMappings; - // // Function Name: inFrontOf() // // Description: - // Spectator camera utility functions and variables. - // + // -Returns the position in front of the given "position" argument, where the forward vector is based off + // the "orientation" argument and the amount in front is based off the "distance" argument. function inFrontOf(distance, position, orientation) { return Vec3.sum(position || MyAvatar.position, Vec3.multiply(distance, Quat.getForward(orientation || MyAvatar.orientation))); } - // + + // Function Name: updateRenderFromCamera() // - // Relevant Variables: - // spectatorFrameRenderConfig: The render configuration of the spectator camera - // render job. Controls size. - // beginSpectatorFrameRenderConfig: The render configuration of the spectator camera - // render job. Controls position and orientation. - // viewFinderOverlay: The in-world overlay that displays the spectator camera's view. - // camera: The in-world entity that corresponds to the spectator camera. - // cameraIsDynamic: "false" for now while we figure out why dynamic, parented overlays - // drift with respect to their parent - // lastCameraPosition: Holds the last known camera position - // lastCameraRotation: Holds the last known camera rotation - // - // Arguments: - // None - // // Description: - // The update function for the spectator camera. Modifies the camera's position - // and orientation. + // -The update function for the spectator camera. Modifies the camera's position + // and orientation. // + // Relevant Variables: + // -spectatorFrameRenderConfig: The render configuration of the spectator camera + // render job. Controls size. + // -beginSpectatorFrameRenderConfig: The render configuration of the spectator camera + // render job. Controls position and orientation. + // -viewFinderOverlay: The in-world overlay that displays the spectator camera's view. + // -camera: The in-world entity that corresponds to the spectator camera. + // -cameraIsDynamic: "false" for now while we figure out why dynamic, parented overlays + // drift with respect to their parent. + // -lastCameraPosition: Holds the last known camera position. + // -lastCameraRotation: Holds the last known camera rotation. var spectatorFrameRenderConfig = Render.getConfig("SecondaryCameraFrame"); var beginSpectatorFrameRenderConfig = Render.getConfig("BeginSecondaryCamera"); var viewFinderOverlay = false; @@ -72,37 +63,34 @@ } } - // // Function Name: spectatorCameraOn() - // - // Relevant Variables: - // isUpdateRenderWired: Bool storing whether or not the camera's update - // function is wired. - // vFoV: The vertical field of view of the spectator camera - // nearClipPlaneDistance: The near clip plane distance of the spectator camera (aka "camera") - // farClipPlaneDistance: The far clip plane distance of the spectator camera - // cameraRotation: The rotation of the spectator camera - // cameraPosition: The position of the spectator camera - // glassPaneWidth: The width of the glass pane above the spectator camera that holds the viewFinderOverlay - // viewFinderOverlayDim: The x, y, and z dimensions of the viewFinderOverlay - // - // Arguments: - // None // // Description: - // Call this function to set up the spectator camera and - // spawn the camera entity. + // -Call this function to set up the spectator camera and + // spawn the camera entity. // + // Relevant Variables: + // -isUpdateRenderWired: Bool storing whether or not the camera's update + // function is wired. + // -vFoV: The vertical field of view of the spectator camera. + // -nearClipPlaneDistance: The near clip plane distance of the spectator camera (aka "camera"). + // -farClipPlaneDistance: The far clip plane distance of the spectator camera. + // -cameraRotation: The rotation of the spectator camera. + // -cameraPosition: The position of the spectator camera. + // -glassPaneWidth: The width of the glass pane above the spectator camera that holds the viewFinderOverlay. + // -viewFinderOverlayDim: The x, y, and z dimensions of the viewFinderOverlay. + // -camera: The camera model which is grabbable. + // -viewFinderOverlay: The preview of what the spectator camera is viewing, placed inside the glass pane. var isUpdateRenderWired = false; var vFoV = 45.0; var nearClipPlaneDistance = 0.1; var farClipPlaneDistance = 100.0; var cameraRotation; var cameraPosition; - //The negative y dimension for viewFinderOverlay is necessary for now due to the way Image3DOverlay - // draws textures, but should be looked into at some point. Also the z dimension shouldn't affect - // the overlay since it is an Image3DOverlay so it is set to 0 var glassPaneWidth = 0.16; + // The negative y dimension for viewFinderOverlay is necessary for now due to the way Image3DOverlay + // draws textures, but should be looked into at some point. Also the z dimension shouldn't affect + // the overlay since it is an Image3DOverlay so it is set to 0. var viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: 0 }; function spectatorCameraOn() { // Sets the special texture size based on the window it is displayed in, which doesn't include the menu bar @@ -126,7 +114,6 @@ "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":true}}" }, true); - // This image3d overlay acts as the camera's preview screen. viewFinderOverlay = Overlays.addOverlay("image3d", { url: "resource://spectatorCameraFrame", emissive: true, @@ -139,19 +126,11 @@ setDisplay(monitorShowsCameraView); } - // // Function Name: spectatorCameraOff() - // - // Relevant Variables: - // None - // - // Arguments: - // None // // Description: - // Call this function to shut down the spectator camera and - // destroy the camera entity. - // + // -Call this function to shut down the spectator camera and + // destroy the camera entity. function spectatorCameraOff() { spectatorFrameRenderConfig.enabled = beginSpectatorFrameRenderConfig.enabled = false; if (isUpdateRenderWired) { @@ -169,22 +148,18 @@ setDisplay(monitorShowsCameraView); } - // // Function Name: addOrRemoveButton() // - // Relevant Variables: - // button: The tablet button. - // buttonName: The name of the button. - // tablet: The tablet instance to be modified. - // showInDesktop: Set to "true" to show the "SPECTATOR" app in desktop mode - // - // Arguments: - // isShuttingDown: Set to "true" if you're calling this function upon script shutdown - // isHMDMode: "true" if user is in HMD; false otherwise - // // Description: - // Used to add or remove the "SPECTATOR" app button from the HUD/tablet + // -Used to add or remove the "SPECTATOR" app button from the HUD/tablet. Set the "isShuttingDown" argument + // to true if you're calling this function upon script shutdown. Set the "isHMDmode" to true if the user is + // in HMD; otherwise set to false. // + // Relevant Variables: + // -button: The tablet button. + // -buttonName: The name of the button. + // -tablet: The tablet instance to be modified. + // -showInDesktop: Set to "true" to show the "SPECTATOR" app in desktop mode. var button = false; var buttonName = "SPECTATOR"; var tablet = null; @@ -208,18 +183,10 @@ } } - // // Function Name: startup() // - // Relevant Variables: - // None - // - // Arguments: - // None - // // Description: - // startup() will be called when the script is loaded. - // + // -startup() will be called when the script is loaded. function startup() { tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); addOrRemoveButton(false, HMD.active); @@ -233,18 +200,14 @@ registerButtonMappings(); } - // // Function Name: wireEventBridge() // - // Relevant Variables: - // hasEventBridge: true/false depending on whether we've already connected the event bridge - // - // Arguments: - // on: Enable or disable the event bridge - // // Description: - // Used to connect/disconnect the script's response to the tablet's "fromQml" signal. + // -Used to connect/disconnect the script's response to the tablet's "fromQml" signal. Set the "on" argument to enable or + // disable to event bridge. // + // Relevant Variables: + // -hasEventBridge: true/false depending on whether we've already connected the event bridge. var hasEventBridge = false; function wireEventBridge(on) { if (on) { @@ -285,22 +248,18 @@ } } - // // Function Name: resizeViewFinderOverlay() // - // Relevant Variables: - // glassPaneRatio: The aspect ratio of the glass pane, currently set as a 16:9 aspect ratio (change if model changes) - // verticalScale: The amount the viewFinderOverlay should be scaled if the window size is vertical - // squareScale: The amount the viewFinderOverlay should be scaled if the window size is not vertical but is more square than the - // glass pane's aspect ratio - // - // Arguments: - // geometryChanged: The signal argument that gives information on how the window changed, including x, y, width, and height - // // Description: - // A function called when the window is moved/resized, which changes the viewFinderOverlay's texture and dimensions to be - // appropriately altered to fit inside the glass pane while not distorting the texture + // -A function called when the window is moved/resized, which changes the viewFinderOverlay's texture and dimensions to be + // appropriately altered to fit inside the glass pane while not distorting the texture. The "geometryChanged" argument gives information + // on how the window changed, including x, y, width, and height. // + // Relevant Variables: + // -glassPaneRatio: The aspect ratio of the glass pane, currently set as a 16:9 aspect ratio (change if model changes). + // -verticalScale: The amount the viewFinderOverlay should be scaled if the window size is vertical. + // -squareScale: The amount the viewFinderOverlay should be scaled if the window size is not vertical but is more square than the + // glass pane's aspect ratio. function resizeViewFinderOverlay(geometryChanged) { var glassPaneRatio = 16 / 9; var verticalScale = 1 / glassPaneRatio; @@ -315,7 +274,7 @@ } // The only way I found to update the viewFinderOverlay without turning the spectator camera on and off is to delete and recreate the - // overlay, which is inefficient but resizing the window shouldn't be performed often + // overlay, which is inefficient but resizing the window shouldn't be performed often Overlays.deleteOverlay(viewFinderOverlay); viewFinderOverlay = Overlays.addOverlay("image3d", { url: "resource://spectatorCameraFrame", @@ -348,20 +307,15 @@ Settings.setValue('spectatorCamera/switchViewFromController', setting); } - // // Function Name: registerButtonMappings() // - // Relevant Variables: - // controllerMappingName: The name of the controller mapping - // controllerMapping: The controller mapping itself - // controllerType: "OculusTouch", "Vive", "Other" - // - // Arguments: - // None - // // Description: - // Updates controller button mappings for Spectator Camera. + // -Updates controller button mappings for Spectator Camera. // + // Relevant Variables: + // -controllerMappingName: The name of the controller mapping. + // -controllerMapping: The controller mapping itself. + // -controllerType: "OculusTouch", "Vive", "Other". var controllerMappingName; var controllerMapping; var controllerType = "Other"; @@ -394,20 +348,15 @@ sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); } - // // Function Name: onTabletButtonClicked() // - // Relevant Variables: - // onSpectatorCameraScreen: true/false depending on whether we're looking at the spectator camera app - // shouldActivateButton: true/false depending on whether we should show the button as white or gray the - // next time we edit the button's properties - // - // Arguments: - // None - // // Description: - // Fired when the Spectator Camera app button is pressed. + // -Fired when the Spectator Camera app button is pressed. // + // Relevant Variables: + // -onSpectatorCameraScreen: true/false depending on whether we're looking at the spectator camera app. + // -shouldActivateButton: true/false depending on whether we should show the button as white or gray the + // next time we edit the button's properties. var onSpectatorCameraScreen = false; var shouldActivateButton = false; function onTabletButtonClicked() { @@ -425,19 +374,11 @@ } } - // // Function Name: onTabletScreenChanged() // - // Relevant Variables: - // None - // - // Arguments: - // type: "Home", "Web", "Menu", "QML", "Closed" - // url: Only valid for Web and QML. - // // Description: - // Called when the TabletScriptingInterface::screenChanged() signal is emitted. - // + // -Called when the TabletScriptingInterface::screenChanged() signal is emitted. The "type" argument can be either the string + // value of "Home", "Web", "Menu", "QML", or "Closed". The "url" argument is only valid for Web and QML. function onTabletScreenChanged(type, url) { wireEventBridge(shouldActivateButton); // for toolbar mode: change button to active when window is first openend, false otherwise. @@ -448,36 +389,20 @@ onSpectatorCameraScreen = false; } - // // Function Name: sendToQml() // - // Relevant Variables: - // None - // - // Arguments: - // message: The message to send to the SpectatorCamera QML. - // Messages are in format "{method, params}", like json-rpc. See also fromQml(). - // // Description: - // Use this function to send a message to the QML (i.e. to change appearances). - // + // -Use this function to send a message to the QML (i.e. to change appearances). The "message" argument is what is sent to + // SpectatorCamera QML in the format "{method, params}", like json-rpc. See also fromQml(). function sendToQml(message) { tablet.sendToQml(message); } - // // Function Name: fromQml() // - // Relevant Variables: - // None - // - // Arguments: - // message: The message sent from the SpectatorCamera QML. - // Messages are in format "{method, params}", like json-rpc. See also sendToQml(). - // // Description: - // Called when a message is received from SpectatorCamera.qml. - // + // -Called when a message is received from SpectatorCamera.qml. The "message" argument is what is sent from the SpectatorCamera QML + // in the format "{method, params}", like json-rpc. See also sendToQml(). function fromQml(message) { switch (message.method) { case 'spectatorCameraOn': @@ -497,18 +422,10 @@ } } - // // Function Name: onHMDChanged() - // - // Relevant Variables: - // None - // - // Arguments: - // isHMDMode: "true" if HMD is on; "false" otherwise // // Description: - // Called from C++ when HMD mode is changed - // + // -Called from C++ when HMD mode is changed. The argument "isHMDMode" should be true if HMD is on; false otherwise. function onHMDChanged(isHMDMode) { setDisplay(monitorShowsCameraView); addOrRemoveButton(false, isHMDMode); @@ -517,18 +434,10 @@ } } - // // Function Name: shutdown() - // - // Relevant Variables: - // None - // - // Arguments: - // None // // Description: - // shutdown() will be called when the script ends (i.e. is stopped). - // + // -shutdown() will be called when the script ends (i.e. is stopped). function shutdown() { spectatorCameraOff(); Window.domainChanged.disconnect(spectatorCameraOff); @@ -540,9 +449,7 @@ controllerMapping.disable(); } - // // These functions will be called when the script is loaded. - // startup(); Script.scriptEnding.connect(shutdown); From 24616f150f72d80c661fa6ecd1e7933abfe1b36c Mon Sep 17 00:00:00 2001 From: Menithal Date: Wed, 28 Jun 2017 00:37:18 +0300 Subject: [PATCH 0631/1049] Appeasing the Linux gods --- interface/src/AvatarBookmarks.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/src/AvatarBookmarks.h b/interface/src/AvatarBookmarks.h index 0fc3ff9740..0529eeb516 100644 --- a/interface/src/AvatarBookmarks.h +++ b/interface/src/AvatarBookmarks.h @@ -21,14 +21,14 @@ class AvatarBookmarks: public Bookmarks, public Dependency { public: AvatarBookmarks(); - void setupMenus(Menu* menubar, MenuWrapper* menu); + void setupMenus(Menu* menubar, MenuWrapper* menu) override; public slots: void addBookmark(); protected: - void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark); - void readFromFile(); + void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) override; + void readFromFile() override; private: const QString AVATARBOOKMARKS_FILENAME = "avatarbookmarks.json"; From 994117b524eb0ad16a55a95393238bafbca185e6 Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Tue, 27 Jun 2017 15:08:37 -0700 Subject: [PATCH 0632/1049] Small comment change to clarify configurations --- scripts/system/spectatorCamera.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index ca5752dd2c..7b60c14575 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -25,8 +25,6 @@ Vec3.multiply(distance, Quat.getForward(orientation || MyAvatar.orientation))); } - - // Function Name: updateRenderFromCamera() // // Description: @@ -35,9 +33,10 @@ // // Relevant Variables: // -spectatorFrameRenderConfig: The render configuration of the spectator camera - // render job. Controls size. + // render job. It controls the rendered texture size of the spectator camera. // -beginSpectatorFrameRenderConfig: The render configuration of the spectator camera - // render job. Controls position and orientation. + // render job. It controls the orientation and position of the secondary camera whose viewport is rendered to + // the texture. // -viewFinderOverlay: The in-world overlay that displays the spectator camera's view. // -camera: The in-world entity that corresponds to the spectator camera. // -cameraIsDynamic: "false" for now while we figure out why dynamic, parented overlays From 1392297da9b2ee5ff22ad90de50bec6c9dcb461a Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Tue, 27 Jun 2017 16:50:44 -0700 Subject: [PATCH 0633/1049] Messing around, howard please refer the commit before this one --- scripts/system/spectatorCamera.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 7b60c14575..6b867d4abc 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -48,6 +48,7 @@ var viewFinderOverlay = false; var camera = false; var cameraIsDynamic = false; + var attachedToggle = false; var lastCameraPosition = false; var lastCameraRotation = false; function updateRenderFromCamera() { @@ -123,6 +124,30 @@ dimensions: viewFinderOverlayDim }); setDisplay(monitorShowsCameraView); + + attachedToggle = Entities.addEntity({ + "color": { + "blue": 0, + "green": 0, + "red": 255 + }, + parentID: camera, + localPosition: { x: 0.1, y: 0, z: -0.05 }, + localRotation: { w: 0.70708787441253662, x: 0, y: 0, z: 0.70708787441253662 }, + "dimensions": { + "x": 0.03, + "y": 0.03, + "z": 0.03 + }, + "queryAACube": { + "scale": 0.052, + "x": -0.026, + "y": -0.026, + "z": -0.026 + }, + "shape": "Cylinder", + "type": "Shape" + }, true); } // Function Name: spectatorCameraOff() @@ -142,8 +167,12 @@ if (viewFinderOverlay) { Overlays.deleteOverlay(viewFinderOverlay); } + if (attachedToggle) { + Entities.deleteEntity(attachedToggle); + } camera = false; viewFinderOverlay = false; + attachedToggle = false; setDisplay(monitorShowsCameraView); } @@ -196,6 +225,7 @@ HMD.displayModeChanged.connect(onHMDChanged); viewFinderOverlay = false; camera = false; + attachedToggle = false; registerButtonMappings(); } From 617e927695bab6bf91adb4522f19768f8e5fd7fc Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Tue, 27 Jun 2017 17:13:39 -0700 Subject: [PATCH 0634/1049] rotation changed to localRotation --- scripts/system/spectatorCamera.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 5ea9ab3fae..685df66ba2 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -132,7 +132,7 @@ emissive: true, parentID: camera, alpha: 1, - rotation: cameraRotation, + localRotation: { x: 0, y: 0, z: 0 }, localPosition: { x: 0.007, y: 0.15, z: -0.005 }, dimensions: viewFinderOverlayDim }); @@ -322,7 +322,7 @@ emissive: true, parentID: camera, alpha: 1, - rotation: cameraRotation, + localRotation: { x: 0, y: 0, z: 0 }, localPosition: { x: 0.007, y: 0.15, z: -0.005 }, dimensions: viewFinderOverlayDim }); From 9e822de196ed831ee3c35e31eec19f7f74728820 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 27 Jun 2017 17:40:23 -0700 Subject: [PATCH 0635/1049] remove local collection of radius ignored nodes --- .../src/avatars/AvatarMixerClientData.cpp | 3 --- interface/src/avatar/AvatarManager.cpp | 4 ---- .../src/avatars-renderer/Avatar.cpp | 3 +-- libraries/avatars/src/AvatarHashMap.cpp | 7 ------ libraries/avatars/src/AvatarHashMap.h | 1 - libraries/networking/src/NodeList.cpp | 22 +------------------ libraries/networking/src/NodeList.h | 4 ---- libraries/networking/src/udt/PacketHeaders.h | 1 - 8 files changed, 2 insertions(+), 43 deletions(-) diff --git a/assignment-client/src/avatars/AvatarMixerClientData.cpp b/assignment-client/src/avatars/AvatarMixerClientData.cpp index 4d80bc7d17..a4bf8fa253 100644 --- a/assignment-client/src/avatars/AvatarMixerClientData.cpp +++ b/assignment-client/src/avatars/AvatarMixerClientData.cpp @@ -108,9 +108,6 @@ void AvatarMixerClientData::ignoreOther(SharedNodePointer self, SharedNodePointe void AvatarMixerClientData::removeFromRadiusIgnoringSet(SharedNodePointer self, const QUuid& other) { if (isRadiusIgnoring(other)) { _radiusIgnoredOthers.erase(other); - auto exitingSpaceBubblePacket = NLPacket::create(PacketType::ExitingSpaceBubble, NUM_BYTES_RFC4122_UUID); - exitingSpaceBubblePacket->write(other.toRfc4122()); - DependencyManager::get()->sendUnreliablePacket(*exitingSpaceBubblePacket, *self); } } diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 20b3949bc6..74775245a7 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -62,7 +62,6 @@ AvatarManager::AvatarManager(QObject* parent) : packetReceiver.registerListener(PacketType::BulkAvatarData, this, "processAvatarDataPacket"); packetReceiver.registerListener(PacketType::KillAvatar, this, "processKillAvatar"); packetReceiver.registerListener(PacketType::AvatarIdentity, this, "processAvatarIdentityPacket"); - packetReceiver.registerListener(PacketType::ExitingSpaceBubble, this, "processExitingSpaceBubble"); // when we hear that the user has ignored an avatar by session UUID // immediately remove that avatar instead of waiting for the absence of packets from avatar mixer @@ -319,9 +318,6 @@ void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble) { emit DependencyManager::get()->enteredIgnoreRadius(); - } - if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble || removalReason == YourAvatarEnteredTheirBubble) { - DependencyManager::get()->radiusIgnoreNodeBySessionID(avatar->getSessionUUID(), true); } else if (removalReason == KillAvatarReason::AvatarDisconnected) { // remove from node sets, if present DependencyManager::get()->removeFromIgnoreMuteSets(avatar->getSessionUUID()); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index a0a348388e..9355b15ed8 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1439,8 +1439,7 @@ void Avatar::addToScene(AvatarSharedPointer myHandle, const render::ScenePointer if (scene) { auto nodelist = DependencyManager::get(); if (showAvatars - && !nodelist->isIgnoringNode(getSessionUUID()) - && !nodelist->isRadiusIgnoringNode(getSessionUUID())) { + && !nodelist->isIgnoringNode(getSessionUUID())) { render::Transaction transaction; addToScene(myHandle, scene, transaction); scene->enqueueTransaction(transaction); diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp index e8c37bdaa8..3712080cdb 100644 --- a/libraries/avatars/src/AvatarHashMap.cpp +++ b/libraries/avatars/src/AvatarHashMap.cpp @@ -170,13 +170,6 @@ void AvatarHashMap::processKillAvatar(QSharedPointer message, S removeAvatar(sessionUUID, reason); } -void AvatarHashMap::processExitingSpaceBubble(QSharedPointer message, SharedNodePointer sendingNode) { - // read the node id - QUuid sessionUUID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID)); - auto nodeList = DependencyManager::get(); - nodeList->radiusIgnoreNodeBySessionID(sessionUUID, false); -} - void AvatarHashMap::removeAvatar(const QUuid& sessionUUID, KillAvatarReason removalReason) { QWriteLocker locker(&_hashLock); diff --git a/libraries/avatars/src/AvatarHashMap.h b/libraries/avatars/src/AvatarHashMap.h index 21ea8081c7..68fc232685 100644 --- a/libraries/avatars/src/AvatarHashMap.h +++ b/libraries/avatars/src/AvatarHashMap.h @@ -60,7 +60,6 @@ protected slots: void processAvatarDataPacket(QSharedPointer message, SharedNodePointer sendingNode); void processAvatarIdentityPacket(QSharedPointer message, SharedNodePointer sendingNode); void processKillAvatar(QSharedPointer message, SharedNodePointer sendingNode); - void processExitingSpaceBubble(QSharedPointer message, SharedNodePointer sendingNode); protected: AvatarHashMap(); diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index e8506e5263..ef9b131928 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -239,11 +239,7 @@ void NodeList::reset() { LimitedNodeList::reset(); _numNoReplyDomainCheckIns = 0; - - // lock and clear our set of radius ignored IDs - _radiusIgnoredSetLock.lockForWrite(); - _radiusIgnoredNodeIDs.clear(); - _radiusIgnoredSetLock.unlock(); +; // lock and clear our set of ignored IDs _ignoredSetLock.lockForWrite(); _ignoredNodeIDs.clear(); @@ -809,22 +805,6 @@ void NodeList::sendIgnoreRadiusStateToNode(const SharedNodePointer& destinationN sendPacket(std::move(ignorePacket), *destinationNode); } -void NodeList::radiusIgnoreNodeBySessionID(const QUuid& nodeID, bool radiusIgnoreEnabled) { - if (radiusIgnoreEnabled) { - QReadLocker radiusIgnoredSetLocker{ &_radiusIgnoredSetLock }; // read lock for insert - // add this nodeID to our set of ignored IDs - _radiusIgnoredNodeIDs.insert(nodeID); - } else { - QWriteLocker radiusIgnoredSetLocker{ &_radiusIgnoredSetLock }; // write lock for unsafe_erase - _radiusIgnoredNodeIDs.unsafe_erase(nodeID); - } -} - -bool NodeList::isRadiusIgnoringNode(const QUuid& nodeID) const { - QReadLocker radiusIgnoredSetLocker{ &_radiusIgnoredSetLock }; // read lock for reading - return _radiusIgnoredNodeIDs.find(nodeID) != _radiusIgnoredNodeIDs.cend(); -} - void NodeList::ignoreNodeBySessionID(const QUuid& nodeID, bool ignoreEnabled) { // enumerate the nodes to send a reliable ignore packet to each that can leverage it if (!nodeID.isNull() && _sessionUUID != nodeID) { diff --git a/libraries/networking/src/NodeList.h b/libraries/networking/src/NodeList.h index 6db760b3ca..b3a12153e5 100644 --- a/libraries/networking/src/NodeList.h +++ b/libraries/networking/src/NodeList.h @@ -77,8 +77,6 @@ public: void toggleIgnoreRadius() { ignoreNodesInRadius(!getIgnoreRadiusEnabled()); } void enableIgnoreRadius() { ignoreNodesInRadius(true); } void disableIgnoreRadius() { ignoreNodesInRadius(false); } - void radiusIgnoreNodeBySessionID(const QUuid& nodeID, bool radiusIgnoreEnabled); - bool isRadiusIgnoringNode(const QUuid& other) const; void ignoreNodeBySessionID(const QUuid& nodeID, bool ignoreEnabled); bool isIgnoringNode(const QUuid& nodeID) const; void personalMuteNodeBySessionID(const QUuid& nodeID, bool muteEnabled); @@ -166,8 +164,6 @@ private: QTimer _keepAlivePingTimer; bool _requestsDomainListData; - mutable QReadWriteLock _radiusIgnoredSetLock; - tbb::concurrent_unordered_set _radiusIgnoredNodeIDs; mutable QReadWriteLock _ignoredSetLock; tbb::concurrent_unordered_set _ignoredNodeIDs; mutable QReadWriteLock _personalMutedSetLock; diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index 6c42193e11..848bfd97cf 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -105,7 +105,6 @@ public: UsernameFromIDReply, ViewFrustum, RequestsDomainListData, - ExitingSpaceBubble, PerAvatarGainSet, EntityScriptGetStatus, EntityScriptGetStatusReply, From 9417a176a17d5d7e899be8563199c5fac69dcd07 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Tue, 27 Jun 2017 18:10:54 -0700 Subject: [PATCH 0636/1049] make scripts tree show scripts in directory passed in with --scripts --- interface/src/Application.cpp | 12 ++++++------ interface/src/main.cpp | 10 ++++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9052f082dc..72e14656f3 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -915,11 +915,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo _saveAvatarOverrideUrl = true; } - QString defaultScriptsLocation = getCmdOption(argc, constArgv, "--scripts"); - if (!defaultScriptsLocation.isEmpty()) { - PathUtils::defaultScriptsLocation(defaultScriptsLocation); - } - _glWidget = new GLCanvas(); getApplicationCompositor().setRenderingWidget(_glWidget); _window->setCentralWidget(_glWidget); @@ -1186,7 +1181,12 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // do this as late as possible so that all required subsystems are initialized // If we've overridden the default scripts location, just load default scripts // otherwise, load 'em all - if (!defaultScriptsLocation.isEmpty()) { + + // we just want to see if --scripts was set, we've already parsed it and done + // the change in PathUtils. Rather than pass that in the constructor, lets just + // look (this could be debated) + QDir defaultScriptsLocation(getCmdOption(argc, constArgv, "--scripts")); + if (!defaultScriptsLocation.exists()) { scriptEngines->loadDefaultScripts(); scriptEngines->defaultScriptsLocationOverridden(true); } else { diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 67e248506f..ac1b6d5010 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -73,12 +73,14 @@ int main(int argc, const char* argv[]) { QCommandLineOption serverContentPathOption("serverContentPath", "Where to find server content", "serverContentPath"); QCommandLineOption allowMultipleInstancesOption("allowMultipleInstances", "Allow multiple instances to run"); QCommandLineOption overrideAppLocalDataPathOption("cache", "set test cache ", "dir"); + QCommandLineOption overrideScriptsPathOption("scripts", "set scripts ", "path"); parser.addOption(urlOption); parser.addOption(noUpdaterOption); parser.addOption(checkMinSpecOption); parser.addOption(runServerOption); parser.addOption(serverContentPathOption); parser.addOption(overrideAppLocalDataPathOption); + parser.addOption(overrideScriptsPathOption); parser.addOption(allowMultipleInstancesOption); parser.parse(arguments); @@ -99,6 +101,14 @@ int main(int argc, const char* argv[]) { if (allowMultipleInstances) { instanceMightBeRunning = false; } + + if (parser.isSet(overrideScriptsPathOption)) { + QDir scriptsPath(parser.value(overrideScriptsPathOption)); + if (scriptsPath.exists()) { + PathUtils::defaultScriptsLocation(scriptsPath.path()); + } + } + if (parser.isSet(overrideAppLocalDataPathOption)) { // get dir to use for cache QString cacheDir = parser.value(overrideAppLocalDataPathOption); From 8130a91b8c403fd1e78936b2834954c446717717 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 21 Jun 2017 12:43:48 -0700 Subject: [PATCH 0637/1049] Cleanup entity dependencies --- interface/src/Application.cpp | 5 +- libraries/animation/src/AnimationCache.cpp | 35 ------ libraries/animation/src/AnimationCache.h | 21 ---- .../src/EntityTreeRenderer.cpp | 34 +----- .../src/EntityTreeRenderer.h | 5 +- .../src/RenderableEntityItem.h | 5 + .../src/RenderableModelEntityItem.cpp | 60 +++++++--- .../src/RenderableModelEntityItem.h | 18 ++- .../src/RenderablePolyVoxEntityItem.cpp | 8 +- .../src/RenderablePolyVoxEntityItem.h | 8 +- libraries/entities/CMakeLists.txt | 8 +- .../entities/src/AnimationPropertyGroup.cpp | 4 +- .../entities/src/AnimationPropertyGroup.h | 2 +- libraries/entities/src/EntityItem.cpp | 23 +--- libraries/entities/src/EntityItem.h | 7 +- libraries/entities/src/EntityItemID.cpp | 2 +- .../entities/src/EntityItemProperties.cpp | 1 + libraries/entities/src/EntityItemProperties.h | 1 + .../entities/src/EntityScriptingInterface.cpp | 13 --- libraries/entities/src/EntityTree.cpp | 14 ++- libraries/entities/src/EntityTree.h | 18 --- libraries/entities/src/EntityTreeElement.cpp | 5 +- .../entities/src/KeyLightPropertyGroup.cpp | 5 +- libraries/entities/src/ModelEntityItem.cpp | 25 ---- libraries/entities/src/ModelEntityItem.h | 11 -- .../src/model-networking/MeshFace.cpp | 44 ------- .../src/model-networking/MeshFace.h | 43 ------- .../src/model-networking/MeshProxy.cpp | 48 -------- .../src/model-networking/MeshProxy.h | 52 --------- .../src/model-networking/SimpleMeshProxy.cpp | 27 +++++ .../src/model-networking/SimpleMeshProxy.h | 36 ++++++ libraries/model/src/model/Forward.h | 19 +++ .../src/ModelScriptingInterface.cpp | 12 +- .../src/ModelScriptingInterface.h | 12 +- libraries/shared/src/GLMHelpers.h | 1 + libraries/shared/src/RegisteredMetaTypes.cpp | 109 +++++++++++++++++- libraries/shared/src/RegisteredMetaTypes.h | 70 +++++++++++ .../src/shared/types}/AnimationLoop.cpp | 10 +- .../src/shared/types}/AnimationLoop.h | 7 +- tests/render-perf/src/main.cpp | 1 + 40 files changed, 391 insertions(+), 438 deletions(-) delete mode 100644 libraries/model-networking/src/model-networking/MeshFace.cpp delete mode 100644 libraries/model-networking/src/model-networking/MeshFace.h delete mode 100644 libraries/model-networking/src/model-networking/MeshProxy.cpp delete mode 100644 libraries/model-networking/src/model-networking/MeshProxy.h create mode 100644 libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp create mode 100644 libraries/model-networking/src/model-networking/SimpleMeshProxy.h create mode 100644 libraries/model/src/model/Forward.h rename libraries/{animation/src => shared/src/shared/types}/AnimationLoop.cpp (95%) rename libraries/{animation/src => shared/src/shared/types}/AnimationLoop.h (93%) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9052f082dc..c6741ee7e4 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4094,7 +4094,10 @@ void Application::init() { EntityTreePointer tree = getEntities()->getTree(); if (auto entity = tree->findEntityByEntityItemID(id)) { auto sound = DependencyManager::get()->getSound(newURL); - entity->setCollisionSound(sound); + auto renderable = entity->getRenderableInterface(); + if (renderable) { + renderable->setCollisionSound(sound); + } } }, Qt::QueuedConnection); connect(getMyAvatar().get(), &MyAvatar::newCollisionSoundURL, this, [this](QUrl newURL) { diff --git a/libraries/animation/src/AnimationCache.cpp b/libraries/animation/src/AnimationCache.cpp index 6594482085..7d4c0f4e92 100644 --- a/libraries/animation/src/AnimationCache.cpp +++ b/libraries/animation/src/AnimationCache.cpp @@ -144,38 +144,3 @@ void Animation::animationParseError(int error, QString str) { finishedLoading(false); } -AnimationDetails::AnimationDetails() : - role(), url(), fps(0.0f), priority(0.0f), loop(false), hold(false), - startAutomatically(false), firstFrame(0.0f), lastFrame(0.0f), running(false), currentFrame(0.0f) -{ -} - -AnimationDetails::AnimationDetails(QString role, QUrl url, float fps, float priority, bool loop, - bool hold, bool startAutomatically, float firstFrame, float lastFrame, bool running, float currentFrame) : - role(role), url(url), fps(fps), priority(priority), loop(loop), hold(hold), - startAutomatically(startAutomatically), firstFrame(firstFrame), lastFrame(lastFrame), - running(running), currentFrame(currentFrame) -{ -} - - -QScriptValue animationDetailsToScriptValue(QScriptEngine* engine, const AnimationDetails& details) { - QScriptValue obj = engine->newObject(); - obj.setProperty("role", details.role); - obj.setProperty("url", details.url.toString()); - obj.setProperty("fps", details.fps); - obj.setProperty("priority", details.priority); - obj.setProperty("loop", details.loop); - obj.setProperty("hold", details.hold); - obj.setProperty("startAutomatically", details.startAutomatically); - obj.setProperty("firstFrame", details.firstFrame); - obj.setProperty("lastFrame", details.lastFrame); - obj.setProperty("running", details.running); - obj.setProperty("currentFrame", details.currentFrame); - return obj; -} - -void animationDetailsFromScriptValue(const QScriptValue& object, AnimationDetails& details) { - // nothing for now... -} - diff --git a/libraries/animation/src/AnimationCache.h b/libraries/animation/src/AnimationCache.h index 0e6a94c1b8..490bb7dcd8 100644 --- a/libraries/animation/src/AnimationCache.h +++ b/libraries/animation/src/AnimationCache.h @@ -107,26 +107,5 @@ private: QByteArray _data; }; -class AnimationDetails { -public: - AnimationDetails(); - AnimationDetails(QString role, QUrl url, float fps, float priority, bool loop, - bool hold, bool startAutomatically, float firstFrame, float lastFrame, bool running, float currentFrame); - - QString role; - QUrl url; - float fps; - float priority; - bool loop; - bool hold; - bool startAutomatically; - float firstFrame; - float lastFrame; - bool running; - float currentFrame; -}; -Q_DECLARE_METATYPE(AnimationDetails); -QScriptValue animationDetailsToScriptValue(QScriptEngine* engine, const AnimationDetails& event); -void animationDetailsFromScriptValue(const QScriptValue& object, AnimationDetails& event); #endif // hifi_AnimationCache_h diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index ffaac3bf3e..c02bde2244 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -163,7 +163,6 @@ void EntityTreeRenderer::reloadEntityScripts() { void EntityTreeRenderer::init() { OctreeProcessor::init(); EntityTreePointer entityTree = std::static_pointer_cast(_tree); - entityTree->setFBXService(this); if (_wantScripts) { resetEntitiesScriptEngine(); @@ -188,7 +187,6 @@ void EntityTreeRenderer::shutdown() { void EntityTreeRenderer::setTree(OctreePointer newTree) { OctreeProcessor::setTree(newTree); - std::static_pointer_cast(_tree)->setFBXService(this); } void EntityTreeRenderer::update() { @@ -373,31 +371,6 @@ bool EntityTreeRenderer::applyLayeredZones() { return true; } -const FBXGeometry* EntityTreeRenderer::getGeometryForEntity(EntityItemPointer entityItem) { - const FBXGeometry* result = NULL; - - if (entityItem->getType() == EntityTypes::Model) { - std::shared_ptr modelEntityItem = - std::dynamic_pointer_cast(entityItem); - assert(modelEntityItem); // we need this!!! - ModelPointer model = modelEntityItem->getModel(getSharedFromThis()); - if (model && model->isLoaded()) { - result = &model->getFBXGeometry(); - } - } - return result; -} - -ModelPointer EntityTreeRenderer::getModelForEntityItem(EntityItemPointer entityItem) { - ModelPointer result = nullptr; - if (entityItem->getType() == EntityTypes::Model) { - std::shared_ptr modelEntityItem = - std::dynamic_pointer_cast(entityItem); - result = modelEntityItem->getModel(getSharedFromThis()); - } - return result; -} - void EntityTreeRenderer::processEraseMessage(ReceivedMessage& message, const SharedNodePointer& sourceNode) { std::static_pointer_cast(_tree)->processEraseMessage(message, sourceNode); } @@ -889,7 +862,12 @@ void EntityTreeRenderer::checkAndCallPreload(const EntityItemID& entityID, bool void EntityTreeRenderer::playEntityCollisionSound(EntityItemPointer entity, const Collision& collision) { assert((bool)entity); - SharedSoundPointer collisionSound = entity->getCollisionSound(); + auto renderable = entity->getRenderableInterface(); + if (!renderable) { + return; + } + + SharedSoundPointer collisionSound = renderable->getCollisionSound(); if (!collisionSound) { return; } diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.h b/libraries/entities-renderer/src/EntityTreeRenderer.h index 5dcbd1aeb9..f4909a2036 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.h +++ b/libraries/entities-renderer/src/EntityTreeRenderer.h @@ -39,7 +39,7 @@ using ModelWeakPointer = std::weak_ptr; using CalculateEntityLoadingPriority = std::function; // Generic client side Octree renderer class. -class EntityTreeRenderer : public OctreeProcessor, public EntityItemFBXService, public Dependency { +class EntityTreeRenderer : public OctreeProcessor, public Dependency { Q_OBJECT public: EntityTreeRenderer(bool wantScripts, AbstractViewStateInterface* viewState, @@ -68,9 +68,6 @@ public: virtual void init() override; - virtual const FBXGeometry* getGeometryForEntity(EntityItemPointer entityItem) override; - virtual ModelPointer getModelForEntityItem(EntityItemPointer entityItem) override; - /// clears the tree virtual void clear() override; diff --git a/libraries/entities-renderer/src/RenderableEntityItem.h b/libraries/entities-renderer/src/RenderableEntityItem.h index 244a850d67..c848b10f6a 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.h +++ b/libraries/entities-renderer/src/RenderableEntityItem.h @@ -14,6 +14,7 @@ #include #include +#include #include "AbstractViewStateInterface.h" #include "EntitiesRendererLogging.h" @@ -40,7 +41,11 @@ public: virtual void render(RenderArgs* args) {}; virtual bool addToScene(const EntityItemPointer& self, const render::ScenePointer& scene, render::Transaction& transaction) = 0; virtual void removeFromScene(const EntityItemPointer& self, const render::ScenePointer& scene, render::Transaction& transaction) = 0; + const SharedSoundPointer& getCollisionSound() { return _collisionSound; } + void setCollisionSound(const SharedSoundPointer& sound) { _collisionSound = sound; } virtual RenderableEntityInterface* getRenderableInterface() { return nullptr; } +private: + SharedSoundPointer _collisionSound; }; class RenderableEntityItemProxy { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index f343fdb155..b8e869e4d9 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -69,11 +69,9 @@ void RenderableModelEntityItem::setModelURL(const QString& url) { void RenderableModelEntityItem::loader() { _needsModelReload = true; - auto renderer = DependencyManager::get(); - assert(renderer); { PerformanceTimer perfTimer("getModel"); - getModel(renderer); + getModel(); } } @@ -390,8 +388,7 @@ void RenderableModelEntityItem::render(RenderArgs* args) { if (!_model || _needsModelReload) { // TODO: this getModel() appears to be about 3% of model render time. We should optimize PerformanceTimer perfTimer("getModel"); - auto renderer = qSharedPointerCast(args->_renderData); - getModel(renderer); + getModel(); // Remap textures immediately after loading to avoid flicker remapTextures(); @@ -483,7 +480,7 @@ void RenderableModelEntityItem::render(RenderArgs* args) { auto& currentURL = getParsedModelURL(); if (currentURL != _model->getURL()) { // Defer setting the url to the render thread - getModel(_myRenderer); + getModel(); } } } @@ -492,16 +489,11 @@ ModelPointer RenderableModelEntityItem::getModelNotSafe() { return _model; } -ModelPointer RenderableModelEntityItem::getModel(QSharedPointer renderer) { - if (!renderer) { - return nullptr; - } - +ModelPointer RenderableModelEntityItem::getModel() { // make sure our renderer is setup if (!_myRenderer) { - _myRenderer = renderer; + _myRenderer = DependencyManager::get(); } - assert(_myRenderer == renderer); // you should only ever render on one renderer if (!_myRenderer || QThread::currentThread() != _myRenderer->thread()) { return _model; @@ -513,7 +505,7 @@ ModelPointer RenderableModelEntityItem::getModel(QSharedPointerallocateModel(getModelURL(), renderer->getEntityLoadingPriority(*this), this); + _model = _myRenderer->allocateModel(getModelURL(), _myRenderer->getEntityLoadingPriority(*this), this); _needsInitialSimulation = true; // If we need to change URLs, update it *after rendering* (to avoid access violations) } else if (QUrl(getModelURL()) != _model->getURL()) { @@ -587,6 +579,22 @@ EntityItemProperties RenderableModelEntityItem::getProperties(EntityPropertyFlag properties.setRenderInfoHasTransparent(_model->getRenderInfoHasTransparent()); } + + const FBXGeometry* geometry = NULL; + const_cast(this)->getModel(); + if (_model && _model->isLoaded()) { + geometry = &_model->getFBXGeometry(); + } + + // TODO: improve naturalDimensions in the future, + // for now we've added this hack for setting natural dimensions of models + if (geometry) { + Extents meshExtents = geometry->getUnscaledMeshExtents(); + properties.setNaturalDimensions(meshExtents.maximum - meshExtents.minimum); + properties.calculateNaturalPosition(meshExtents.minimum, meshExtents.maximum); + } + + return properties; } @@ -1255,3 +1263,27 @@ QStringList RenderableModelEntityItem::getJointNames() const { } return result; } + +void RenderableModelEntityItem::mapJoints(const QStringList& modelJointNames) { + // if we don't have animation, or we're already joint mapped then bail early + if (!hasAnimation() || jointsMapped()) { + return; + } + + if (!_animation || _animation->getURL().toString() != getAnimationURL()) { + _animation = DependencyManager::get()->getAnimation(getAnimationURL()); + } + + if (_animation && _animation->isLoaded()) { + QStringList animationJointNames = _animation->getJointNames(); + + if (modelJointNames.size() > 0 && animationJointNames.size() > 0) { + _jointMapping.resize(modelJointNames.size()); + for (int i = 0; i < modelJointNames.size(); i++) { + _jointMapping[i] = animationJointNames.indexOf(modelJointNames[i]); + } + _jointMappingCompleted = true; + _jointMappingURL = _animationProperties.getURL(); + } + } +} diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 2bbb51b3f0..2d240c01a6 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -16,6 +16,7 @@ #include #include +#include class Model; class EntityTreeRenderer; @@ -53,7 +54,7 @@ public: bool& keepSearching, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, void** intersectedObject, bool precisionPicking) const override; - ModelPointer getModel(QSharedPointer renderer); + ModelPointer getModel(); ModelPointer getModelNotSafe(); virtual bool needsToCallUpdate() const override; @@ -106,6 +107,15 @@ public: // Transparency is handled in ModelMeshPartPayload bool isTransparent() override { return false; } + void mapJoints(const QStringList& modelJointNames); + bool jointsMapped() const { + return _jointMappingURL == getAnimationURL() && _jointMappingCompleted; + } + + AnimationPointer getAnimation() const { + return _animation; + } + private: QVariantMap parseTexturesToMap(QString textures); void remapTextures(); @@ -131,6 +141,12 @@ private: bool _needsJointSimulation { false }; bool _showCollisionGeometry { false }; const void* _collisionMeshKey { nullptr }; + + // used on client side + bool _jointMappingCompleted { false }; + QVector _jointMapping; // domain is index into model-joints, range is index into animation-joints + QString _jointMappingURL; + AnimationPointer _animation; }; #endif // hifi_RenderableModelEntityItem_h diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index 6cda472d96..88a5d2b873 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -9,11 +9,15 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // + +#include "RenderablePolyVoxEntityItem.h" + #include #include #include #include #include +#include #include "ModelScriptingInterface.h" #if defined(__GNUC__) && !defined(__clang__) @@ -52,7 +56,6 @@ #include "EntityTreeRenderer.h" #include "polyvox_vert.h" #include "polyvox_frag.h" -#include "RenderablePolyVoxEntityItem.h" #include "EntityEditPacketSender.h" #include "PhysicalEntitySimulation.h" @@ -1626,6 +1629,7 @@ void RenderablePolyVoxEntityItem::locationChanged(bool tellPhysics) { scene->enqueueTransaction(transaction); } + bool RenderablePolyVoxEntityItem::getMeshes(MeshProxyList& result) { if (!updateDependents()) { return false; @@ -1645,7 +1649,7 @@ bool RenderablePolyVoxEntityItem::getMeshes(MeshProxyList& result) { } else { success = true; // the mesh will be in voxel-space. transform it into object-space - meshProxy = new MeshProxy( + meshProxy = new SimpleMeshProxy( _mesh->map([=](glm::vec3 position){ return glm::vec3(transform * glm::vec4(position, 1.0f)); }, [=](glm::vec3 normal){ return glm::normalize(glm::vec3(transform * glm::vec4(normal, 0.0f))); }, [&](uint32_t index){ return index; })); diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h index 174d6338d3..45625ada6d 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h @@ -12,17 +12,19 @@ #ifndef hifi_RenderablePolyVoxEntityItem_h #define hifi_RenderablePolyVoxEntityItem_h -#include #include +#include + #include #include +#include +#include #include +#include -#include "PolyVoxEntityItem.h" #include "RenderableEntityItem.h" -#include "gpu/Context.h" class PolyVoxPayload { public: diff --git a/libraries/entities/CMakeLists.txt b/libraries/entities/CMakeLists.txt index ddb5fbaf73..19341ec3e2 100644 --- a/libraries/entities/CMakeLists.txt +++ b/libraries/entities/CMakeLists.txt @@ -1,9 +1,3 @@ set(TARGET_NAME entities) setup_hifi_library(Network Script) -link_hifi_libraries(avatars shared audio octree model model-networking fbx networking animation) -include_hifi_library_headers(networking) -include_hifi_library_headers(gpu) - -target_bullet() - -include_hifi_library_headers(render) +link_hifi_libraries(shared networking octree avatars) diff --git a/libraries/entities/src/AnimationPropertyGroup.cpp b/libraries/entities/src/AnimationPropertyGroup.cpp index f6d08ad8b9..848d4352a7 100644 --- a/libraries/entities/src/AnimationPropertyGroup.cpp +++ b/libraries/entities/src/AnimationPropertyGroup.cpp @@ -9,12 +9,12 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "AnimationPropertyGroup.h" + #include #include -#include -#include "AnimationPropertyGroup.h" #include "EntityItemProperties.h" #include "EntityItemPropertiesMacros.h" diff --git a/libraries/entities/src/AnimationPropertyGroup.h b/libraries/entities/src/AnimationPropertyGroup.h index c6d386d2ef..c0086b41b3 100644 --- a/libraries/entities/src/AnimationPropertyGroup.h +++ b/libraries/entities/src/AnimationPropertyGroup.h @@ -19,7 +19,7 @@ #include -#include "AnimationLoop.h" +#include // for Animation, AnimationCache, and AnimationPointer classes #include "EntityItemPropertiesMacros.h" #include "PropertyGroup.h" diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 17de15e32b..23ce097cc2 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -23,8 +23,8 @@ #include #include #include // usecTimestampNow() -#include #include +#include #include "EntityScriptingInterface.h" #include "EntitiesLogging.h" @@ -988,21 +988,6 @@ void EntityItem::setCollisionSoundURL(const QString& value) { } } -SharedSoundPointer EntityItem::getCollisionSound() { - SharedSoundPointer result; - withReadLock([&] { - result = _collisionSound; - }); - - if (!result) { - result = DependencyManager::get()->getSound(_collisionSoundURL); - withWriteLock([&] { - _collisionSound = result; - }); - } - return result; -} - void EntityItem::simulate(const quint64& now) { if (getLastSimulated() == 0) { setLastSimulated(now); @@ -2650,12 +2635,6 @@ QString EntityItem::getCollisionSoundURL() const { return result; } -void EntityItem::setCollisionSound(SharedSoundPointer sound) { - withWriteLock([&] { - _collisionSound = sound; - }); -} - glm::vec3 EntityItem::getRegistrationPoint() const { glm::vec3 result; withReadLock([&] { diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 0318c72991..92c83651aa 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -19,14 +19,13 @@ #include -#include // for Animation, AnimationCache, and AnimationPointer classes +#include // for Animation, AnimationCache, and AnimationPointer classes #include // for EncodeBitstreamParams class #include // for OctreeElement::AppendState #include #include #include #include -#include #include #include @@ -260,9 +259,6 @@ public: QString getCollisionSoundURL() const; void setCollisionSoundURL(const QString& value); - SharedSoundPointer getCollisionSound(); - void setCollisionSound(SharedSoundPointer sound); - glm::vec3 getRegistrationPoint() const; /// registration point as ratio of entity /// registration point as ratio of entity @@ -526,7 +522,6 @@ protected: quint64 _loadedScriptTimestamp { ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP + 1 }; QString _collisionSoundURL; - SharedSoundPointer _collisionSound; glm::vec3 _registrationPoint; float _angularDamping; bool _visible; diff --git a/libraries/entities/src/EntityItemID.cpp b/libraries/entities/src/EntityItemID.cpp index 5f07019db4..3b4ca1cea0 100644 --- a/libraries/entities/src/EntityItemID.cpp +++ b/libraries/entities/src/EntityItemID.cpp @@ -9,6 +9,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "EntityItemID.h" #include #include @@ -17,7 +18,6 @@ #include #include "RegisteredMetaTypes.h" -#include "EntityItemID.h" int entityItemIDTypeID = qRegisterMetaType(); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 1ed020e592..a207902789 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include "EntitiesLogging.h" #include "EntityItem.h" diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 590298e102..b526ac663c 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -15,6 +15,7 @@ #include #include +#include #include #include diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 90dc6893b4..7351d49dff 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -21,7 +21,6 @@ #include #include #include -#include #include "EntitiesLogging.h" #include "EntityDynamicFactoryInterface.h" @@ -298,18 +297,6 @@ EntityItemProperties EntityScriptingInterface::getEntityProperties(QUuid identit } results = entity->getProperties(desiredProperties); - - // TODO: improve naturalDimensions in the future, - // for now we've added this hack for setting natural dimensions of models - if (entity->getType() == EntityTypes::Model) { - const FBXGeometry* geometry = _entityTree->getGeometryForEntity(entity); - if (geometry) { - Extents meshExtents = geometry->getUnscaledMeshExtents(); - results.setNaturalDimensions(meshExtents.maximum - meshExtents.minimum); - results.calculateNaturalPosition(meshExtents.minimum, meshExtents.maximum); - } - } - } }); } diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 11694c4cea..4773f45af7 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -9,11 +9,15 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include -#include +#include "EntityTree.h" +#include +#include + #include -#include "EntityTree.h" +#include +#include + #include "EntitySimulation.h" #include "VariantMapToScriptValue.h" @@ -55,9 +59,7 @@ public: EntityTree::EntityTree(bool shouldReaverage) : - Octree(shouldReaverage), - _fbxService(NULL), - _simulation(NULL) + Octree(shouldReaverage) { resetClientEditStats(); } diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index 8e3c9f5412..24e6c364b1 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -41,13 +41,6 @@ public: virtual void entityCreated(const EntityItem& newEntity, const SharedNodePointer& senderNode) = 0; }; -class EntityItemFBXService { -public: - virtual const FBXGeometry* getGeometryForEntity(EntityItemPointer entityItem) = 0; - virtual ModelPointer getModelForEntityItem(EntityItemPointer entityItem) = 0; -}; - - class SendEntitiesOperationArgs { public: glm::vec3 root; @@ -189,15 +182,6 @@ public: int processEraseMessage(ReceivedMessage& message, const SharedNodePointer& sourceNode); int processEraseMessageDetails(const QByteArray& buffer, const SharedNodePointer& sourceNode); - EntityItemFBXService* getFBXService() const { return _fbxService; } - void setFBXService(EntityItemFBXService* service) { _fbxService = service; } - const FBXGeometry* getGeometryForEntity(EntityItemPointer entityItem) { - return _fbxService ? _fbxService->getGeometryForEntity(entityItem) : NULL; - } - ModelPointer getModelForEntityItem(EntityItemPointer entityItem) { - return _fbxService ? _fbxService->getModelForEntityItem(entityItem) : NULL; - } - EntityTreeElementPointer getContainingElement(const EntityItemID& entityItemID) /*const*/; void setContainingElement(const EntityItemID& entityItemID, EntityTreeElementPointer element); void debugDumpMap(); @@ -325,8 +309,6 @@ protected: _deletedEntityItemIDs << id; } - EntityItemFBXService* _fbxService; - mutable QReadWriteLock _entityToElementLock; QHash _entityToElementMap; diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index 0dc42717f5..cce7ee006f 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -9,17 +9,18 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "EntityTreeElement.h" + #include -#include #include #include +#include #include "EntitiesLogging.h" #include "EntityNodeData.h" #include "EntityItemProperties.h" #include "EntityTree.h" -#include "EntityTreeElement.h" #include "EntityTypes.h" EntityTreeElement::EntityTreeElement(unsigned char* octalCode) : OctreeElement() { diff --git a/libraries/entities/src/KeyLightPropertyGroup.cpp b/libraries/entities/src/KeyLightPropertyGroup.cpp index 1011094266..f0d059af67 100644 --- a/libraries/entities/src/KeyLightPropertyGroup.cpp +++ b/libraries/entities/src/KeyLightPropertyGroup.cpp @@ -9,12 +9,11 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "KeyLightPropertyGroup.h" + #include #include -#include - -#include "KeyLightPropertyGroup.h" #include "EntityItemProperties.h" #include "EntityItemPropertiesMacros.h" diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 89213459fa..b5e759d2d8 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -37,7 +37,6 @@ ModelEntityItem::ModelEntityItem(const EntityItemID& entityItemID) : EntityItem( _animationLoop.setResetOnRunning(false); _type = EntityTypes::Model; - _jointMappingCompleted = false; _lastKnownCurrentFrame = -1; _color[0] = _color[1] = _color[2] = 0; } @@ -204,30 +203,6 @@ void ModelEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit } -void ModelEntityItem::mapJoints(const QStringList& modelJointNames) { - // if we don't have animation, or we're already joint mapped then bail early - if (!hasAnimation() || jointsMapped()) { - return; - } - - if (!_animation || _animation->getURL().toString() != getAnimationURL()) { - _animation = DependencyManager::get()->getAnimation(getAnimationURL()); - } - - if (_animation && _animation->isLoaded()) { - QStringList animationJointNames = _animation->getJointNames(); - - if (modelJointNames.size() > 0 && animationJointNames.size() > 0) { - _jointMapping.resize(modelJointNames.size()); - for (int i = 0; i < modelJointNames.size(); i++) { - _jointMapping[i] = animationJointNames.indexOf(modelJointNames[i]); - } - _jointMappingCompleted = true; - _jointMappingURL = _animationProperties.getURL(); - } - } -} - bool ModelEntityItem::isAnimatingSomething() const { return getAnimationIsPlaying() && getAnimationFPS() != 0.0f && diff --git a/libraries/entities/src/ModelEntityItem.h b/libraries/entities/src/ModelEntityItem.h index 5076a43892..0c6132e211 100644 --- a/libraries/entities/src/ModelEntityItem.h +++ b/libraries/entities/src/ModelEntityItem.h @@ -12,8 +12,6 @@ #ifndef hifi_ModelEntityItem_h #define hifi_ModelEntityItem_h -#include - #include "EntityItem.h" #include "AnimationPropertyGroup.h" @@ -103,10 +101,7 @@ public: void setAnimationLastFrame(float lastFrame) { _animationLoop.setLastFrame(lastFrame); } float getAnimationLastFrame() const { return _animationLoop.getLastFrame(); } - void mapJoints(const QStringList& modelJointNames); - bool jointsMapped() const { return _jointMappingURL == getAnimationURL() && _jointMappingCompleted; } - AnimationPointer getAnimation() const { return _animation; } bool getAnimationIsPlaying() const { return _animationLoop.getRunning(); } float getAnimationCurrentFrame() const { return _animationLoop.getCurrentFrame(); } float getAnimationFPS() const { return _animationLoop.getFPS(); } @@ -158,7 +153,6 @@ protected: QUrl _parsedModelURL; QString _compoundShapeURL; - AnimationPointer _animation; AnimationPropertyGroup _animationProperties; AnimationLoop _animationLoop; @@ -166,11 +160,6 @@ protected: QString _textures; ShapeType _shapeType = SHAPE_TYPE_NONE; - - // used on client side - bool _jointMappingCompleted; - QVector _jointMapping; // domain is index into model-joints, range is index into animation-joints - QString _jointMappingURL; }; #endif // hifi_ModelEntityItem_h diff --git a/libraries/model-networking/src/model-networking/MeshFace.cpp b/libraries/model-networking/src/model-networking/MeshFace.cpp deleted file mode 100644 index 8092d36aa3..0000000000 --- a/libraries/model-networking/src/model-networking/MeshFace.cpp +++ /dev/null @@ -1,44 +0,0 @@ -// -// MeshFace.cpp -// libraries/model/src/model/ -// -// Created by Seth Alves on 2017-3-23 -// Copyright 2017 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#include - -#include "MeshFace.h" - - -QScriptValue meshFaceToScriptValue(QScriptEngine* engine, const MeshFace &meshFace) { - QScriptValue obj = engine->newObject(); - obj.setProperty("vertices", qVectorIntToScriptValue(engine, meshFace.vertexIndices)); - return obj; -} - -void meshFaceFromScriptValue(const QScriptValue &object, MeshFace& meshFaceResult) { - qVectorIntFromScriptValue(object.property("vertices"), meshFaceResult.vertexIndices); -} - -QScriptValue qVectorMeshFaceToScriptValue(QScriptEngine* engine, const QVector& vector) { - QScriptValue array = engine->newArray(); - for (int i = 0; i < vector.size(); i++) { - array.setProperty(i, meshFaceToScriptValue(engine, vector.at(i))); - } - return array; -} - -void qVectorMeshFaceFromScriptValue(const QScriptValue& array, QVector& result) { - int length = array.property("length").toInteger(); - result.clear(); - - for (int i = 0; i < length; i++) { - MeshFace meshFace = MeshFace(); - meshFaceFromScriptValue(array.property(i), meshFace); - result << meshFace; - } -} diff --git a/libraries/model-networking/src/model-networking/MeshFace.h b/libraries/model-networking/src/model-networking/MeshFace.h deleted file mode 100644 index 3b81b372c3..0000000000 --- a/libraries/model-networking/src/model-networking/MeshFace.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// MeshFace.h -// libraries/model/src/model/ -// -// Created by Seth Alves on 2017-3-23 -// Copyright 2017 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#ifndef hifi_MeshFace_h -#define hifi_MeshFace_h - -#include -#include -#include - -#include - -using MeshPointer = std::shared_ptr; - -class MeshFace { - -public: - MeshFace() {} - ~MeshFace() {} - - QVector vertexIndices; - // TODO -- material... -}; - -Q_DECLARE_METATYPE(MeshFace) -Q_DECLARE_METATYPE(QVector) - -QScriptValue meshFaceToScriptValue(QScriptEngine* engine, const MeshFace &meshFace); -void meshFaceFromScriptValue(const QScriptValue &object, MeshFace& meshFaceResult); -QScriptValue qVectorMeshFaceToScriptValue(QScriptEngine* engine, const QVector& vector); -void qVectorMeshFaceFromScriptValue(const QScriptValue& array, QVector& result); - - - -#endif // hifi_MeshFace_h diff --git a/libraries/model-networking/src/model-networking/MeshProxy.cpp b/libraries/model-networking/src/model-networking/MeshProxy.cpp deleted file mode 100644 index 1b6fa43c82..0000000000 --- a/libraries/model-networking/src/model-networking/MeshProxy.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// -// MeshProxy.cpp -// libraries/model/src/model/ -// -// Created by Seth Alves on 2017-3-22. -// Copyright 2017 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#include "MeshProxy.h" - - -QScriptValue meshToScriptValue(QScriptEngine* engine, MeshProxy* const &in) { - return engine->newQObject(in, QScriptEngine::QtOwnership, - QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects); -} - -void meshFromScriptValue(const QScriptValue& value, MeshProxy* &out) { - out = qobject_cast(value.toQObject()); -} - -QScriptValue meshesToScriptValue(QScriptEngine* engine, const MeshProxyList &in) { - // QScriptValueList result; - QScriptValue result = engine->newArray(); - int i = 0; - foreach (MeshProxy* const meshProxy, in) { - result.setProperty(i++, meshToScriptValue(engine, meshProxy)); - } - return result; -} - -void meshesFromScriptValue(const QScriptValue& value, MeshProxyList &out) { - QScriptValueIterator itr(value); - - qDebug() << "in meshesFromScriptValue, value.length =" << value.property("length").toInt32(); - - while(itr.hasNext()) { - itr.next(); - MeshProxy* meshProxy = qscriptvalue_cast(itr.value()); - if (meshProxy) { - out.append(meshProxy); - } else { - qDebug() << "null meshProxy"; - } - } -} diff --git a/libraries/model-networking/src/model-networking/MeshProxy.h b/libraries/model-networking/src/model-networking/MeshProxy.h deleted file mode 100644 index c5b25b7895..0000000000 --- a/libraries/model-networking/src/model-networking/MeshProxy.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// MeshProxy.h -// libraries/model/src/model/ -// -// Created by Seth Alves on 2017-1-27. -// Copyright 2017 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#ifndef hifi_MeshProxy_h -#define hifi_MeshProxy_h - -#include -#include -#include - -#include - -using MeshPointer = std::shared_ptr; - -class MeshProxy : public QObject { - Q_OBJECT - -public: - MeshProxy(MeshPointer mesh) : _mesh(mesh) {} - ~MeshProxy() {} - - MeshPointer getMeshPointer() const { return _mesh; } - - Q_INVOKABLE int getNumVertices() const { return (int)_mesh->getNumVertices(); } - Q_INVOKABLE glm::vec3 getPos3(int index) const { return _mesh->getPos3(index); } - - -protected: - MeshPointer _mesh; -}; - -Q_DECLARE_METATYPE(MeshProxy*); - -class MeshProxyList : public QList {}; // typedef and using fight with the Qt macros/templates, do this instead -Q_DECLARE_METATYPE(MeshProxyList); - - -QScriptValue meshToScriptValue(QScriptEngine* engine, MeshProxy* const &in); -void meshFromScriptValue(const QScriptValue& value, MeshProxy* &out); - -QScriptValue meshesToScriptValue(QScriptEngine* engine, const MeshProxyList &in); -void meshesFromScriptValue(const QScriptValue& value, MeshProxyList &out); - -#endif // hifi_MeshProxy_h diff --git a/libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp b/libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp new file mode 100644 index 0000000000..40b30154bf --- /dev/null +++ b/libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp @@ -0,0 +1,27 @@ +// +// MeshProxy.cpp +// libraries/model/src/model/ +// +// Created by Seth Alves on 2017-3-22. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "SimpleMeshProxy.h" + +#include + +MeshPointer SimpleMeshProxy::getMeshPointer() const { + return _mesh; +} + +int SimpleMeshProxy::getNumVertices() const { + return (int)_mesh->getNumVertices(); +} + +glm::vec3 SimpleMeshProxy::getPos3(int index) const { + return _mesh->getPos3(index); +} + diff --git a/libraries/model-networking/src/model-networking/SimpleMeshProxy.h b/libraries/model-networking/src/model-networking/SimpleMeshProxy.h new file mode 100644 index 0000000000..b82e501673 --- /dev/null +++ b/libraries/model-networking/src/model-networking/SimpleMeshProxy.h @@ -0,0 +1,36 @@ +// +// MeshProxy.h +// libraries/model/src/model/ +// +// Created by Seth Alves on 2017-1-27. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_SimpleMeshProxy_h +#define hifi_SimpleMeshProxy_h + +#include +#include +#include + +#include + +class SimpleMeshProxy : public MeshProxy { +public: + SimpleMeshProxy(const MeshPointer& mesh) : _mesh(mesh) { } + + MeshPointer getMeshPointer() const override; + + int getNumVertices() const override; + + glm::vec3 getPos3(int index) const override; + + +protected: + const MeshPointer _mesh; +}; + +#endif // hifi_SimpleMeshProxy_h diff --git a/libraries/model/src/model/Forward.h b/libraries/model/src/model/Forward.h new file mode 100644 index 0000000000..362eabb454 --- /dev/null +++ b/libraries/model/src/model/Forward.h @@ -0,0 +1,19 @@ +// +// Geometry.h +// libraries/model/src/model +// +// Created by Sam Gateau on 12/5/2014. +// Copyright 2014 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +#ifndef hifi_model_Forward_h +#define hifi_model_Forward_h + +namespace model { + class Mesh; + using MeshPointer = std::shared_ptr; +} + +#endif diff --git a/libraries/script-engine/src/ModelScriptingInterface.cpp b/libraries/script-engine/src/ModelScriptingInterface.cpp index f56312568e..762d9ffb29 100644 --- a/libraries/script-engine/src/ModelScriptingInterface.cpp +++ b/libraries/script-engine/src/ModelScriptingInterface.cpp @@ -9,17 +9,17 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "ModelScriptingInterface.h" #include #include #include -#include +#include #include "ScriptEngine.h" #include "ScriptEngineLogging.h" -#include "ModelScriptingInterface.h" #include "OBJWriter.h" ModelScriptingInterface::ModelScriptingInterface(QObject* parent) : QObject(parent) { - _modelScriptEngine = qobject_cast(parent); + _modelScriptEngine = qobject_cast(parent); qScriptRegisterSequenceMetaType>(_modelScriptEngine); qScriptRegisterMetaType(_modelScriptEngine, meshFaceToScriptValue, meshFaceFromScriptValue); @@ -118,7 +118,7 @@ QScriptValue ModelScriptingInterface::appendMeshes(MeshProxyList in) { (gpu::Byte*) parts.data()), gpu::Element::PART_DRAWCALL)); - MeshProxy* resultProxy = new MeshProxy(result); + MeshProxy* resultProxy = new SimpleMeshProxy(result); return meshToScriptValue(_modelScriptEngine, resultProxy); } @@ -134,7 +134,7 @@ QScriptValue ModelScriptingInterface::transformMesh(glm::mat4 transform, MeshPro model::MeshPointer result = mesh->map([&](glm::vec3 position){ return glm::vec3(transform * glm::vec4(position, 1.0f)); }, [&](glm::vec3 normal){ return glm::vec3(transform * glm::vec4(normal, 0.0f)); }, [&](uint32_t index){ return index; }); - MeshProxy* resultProxy = new MeshProxy(result); + MeshProxy* resultProxy = new SimpleMeshProxy(result); return meshToScriptValue(_modelScriptEngine, resultProxy); } @@ -188,6 +188,6 @@ QScriptValue ModelScriptingInterface::newMesh(const QVector& vertices - MeshProxy* meshProxy = new MeshProxy(mesh); + MeshProxy* meshProxy = new SimpleMeshProxy(mesh); return meshToScriptValue(_modelScriptEngine, meshProxy); } diff --git a/libraries/script-engine/src/ModelScriptingInterface.h b/libraries/script-engine/src/ModelScriptingInterface.h index d899f532d8..ba23623acf 100644 --- a/libraries/script-engine/src/ModelScriptingInterface.h +++ b/libraries/script-engine/src/ModelScriptingInterface.h @@ -9,19 +9,13 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // - #ifndef hifi_ModelScriptingInterface_h #define hifi_ModelScriptingInterface_h #include -#include -#include -#include -#include -#include -using MeshPointer = std::shared_ptr; -class ScriptEngine; +#include +class QScriptEngine; class ModelScriptingInterface : public QObject { Q_OBJECT @@ -37,7 +31,7 @@ public: const QVector& faces); private: - ScriptEngine* _modelScriptEngine { nullptr }; + QScriptEngine* _modelScriptEngine { nullptr }; }; #endif // hifi_ModelScriptingInterface_h diff --git a/libraries/shared/src/GLMHelpers.h b/libraries/shared/src/GLMHelpers.h index ef92552d1f..3386ea2c22 100644 --- a/libraries/shared/src/GLMHelpers.h +++ b/libraries/shared/src/GLMHelpers.h @@ -17,6 +17,7 @@ #include #include #include +#include // Bring the most commonly used GLM types into the default namespace using glm::ivec2; diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp index 70067b93f3..1e5fe23458 100644 --- a/libraries/shared/src/RegisteredMetaTypes.cpp +++ b/libraries/shared/src/RegisteredMetaTypes.cpp @@ -9,6 +9,10 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "RegisteredMetaTypes.h" + +#include + #include #include #include @@ -17,10 +21,9 @@ #include #include #include -#include -#include - -#include "RegisteredMetaTypes.h" +#include +#include +#include int vec4MetaTypeId = qRegisterMetaType(); int vec3MetaTypeId = qRegisterMetaType(); @@ -796,3 +799,101 @@ void qSizeFFromScriptValue(const QScriptValue& object, QSizeF& qSizeF) { qSizeF.setWidth(object.property("width").toVariant().toFloat()); qSizeF.setHeight(object.property("height").toVariant().toFloat()); } + +AnimationDetails::AnimationDetails() : + role(), url(), fps(0.0f), priority(0.0f), loop(false), hold(false), + startAutomatically(false), firstFrame(0.0f), lastFrame(0.0f), running(false), currentFrame(0.0f) { +} + +AnimationDetails::AnimationDetails(QString role, QUrl url, float fps, float priority, bool loop, + bool hold, bool startAutomatically, float firstFrame, float lastFrame, bool running, float currentFrame) : + role(role), url(url), fps(fps), priority(priority), loop(loop), hold(hold), + startAutomatically(startAutomatically), firstFrame(firstFrame), lastFrame(lastFrame), + running(running), currentFrame(currentFrame) { +} + + +QScriptValue animationDetailsToScriptValue(QScriptEngine* engine, const AnimationDetails& details) { + QScriptValue obj = engine->newObject(); + obj.setProperty("role", details.role); + obj.setProperty("url", details.url.toString()); + obj.setProperty("fps", details.fps); + obj.setProperty("priority", details.priority); + obj.setProperty("loop", details.loop); + obj.setProperty("hold", details.hold); + obj.setProperty("startAutomatically", details.startAutomatically); + obj.setProperty("firstFrame", details.firstFrame); + obj.setProperty("lastFrame", details.lastFrame); + obj.setProperty("running", details.running); + obj.setProperty("currentFrame", details.currentFrame); + return obj; +} + +void animationDetailsFromScriptValue(const QScriptValue& object, AnimationDetails& details) { + // nothing for now... +} + +QScriptValue meshToScriptValue(QScriptEngine* engine, MeshProxy* const &in) { + return engine->newQObject(in, QScriptEngine::QtOwnership, + QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects); +} + +void meshFromScriptValue(const QScriptValue& value, MeshProxy* &out) { + out = qobject_cast(value.toQObject()); +} + +QScriptValue meshesToScriptValue(QScriptEngine* engine, const MeshProxyList &in) { + // QScriptValueList result; + QScriptValue result = engine->newArray(); + int i = 0; + foreach(MeshProxy* const meshProxy, in) { + result.setProperty(i++, meshToScriptValue(engine, meshProxy)); + } + return result; +} + +void meshesFromScriptValue(const QScriptValue& value, MeshProxyList &out) { + QScriptValueIterator itr(value); + + qDebug() << "in meshesFromScriptValue, value.length =" << value.property("length").toInt32(); + + while (itr.hasNext()) { + itr.next(); + MeshProxy* meshProxy = qscriptvalue_cast(itr.value()); + if (meshProxy) { + out.append(meshProxy); + } else { + qDebug() << "null meshProxy"; + } + } +} + + +QScriptValue meshFaceToScriptValue(QScriptEngine* engine, const MeshFace &meshFace) { + QScriptValue obj = engine->newObject(); + obj.setProperty("vertices", qVectorIntToScriptValue(engine, meshFace.vertexIndices)); + return obj; +} + +void meshFaceFromScriptValue(const QScriptValue &object, MeshFace& meshFaceResult) { + qVectorIntFromScriptValue(object.property("vertices"), meshFaceResult.vertexIndices); +} + +QScriptValue qVectorMeshFaceToScriptValue(QScriptEngine* engine, const QVector& vector) { + QScriptValue array = engine->newArray(); + for (int i = 0; i < vector.size(); i++) { + array.setProperty(i, meshFaceToScriptValue(engine, vector.at(i))); + } + return array; +} + +void qVectorMeshFaceFromScriptValue(const QScriptValue& array, QVector& result) { + int length = array.property("length").toInteger(); + result.clear(); + + for (int i = 0; i < length; i++) { + MeshFace meshFace = MeshFace(); + meshFaceFromScriptValue(array.property(i), meshFace); + result << meshFace; + } +} diff --git a/libraries/shared/src/RegisteredMetaTypes.h b/libraries/shared/src/RegisteredMetaTypes.h index 8a15f62eed..dd37cb3410 100644 --- a/libraries/shared/src/RegisteredMetaTypes.h +++ b/libraries/shared/src/RegisteredMetaTypes.h @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -167,4 +168,73 @@ void quuidFromScriptValue(const QScriptValue& object, QUuid& uuid); QScriptValue qSizeFToScriptValue(QScriptEngine* engine, const QSizeF& qSizeF); void qSizeFFromScriptValue(const QScriptValue& object, QSizeF& qSizeF); +class AnimationDetails { +public: + AnimationDetails(); + AnimationDetails(QString role, QUrl url, float fps, float priority, bool loop, + bool hold, bool startAutomatically, float firstFrame, float lastFrame, bool running, float currentFrame); + + QString role; + QUrl url; + float fps; + float priority; + bool loop; + bool hold; + bool startAutomatically; + float firstFrame; + float lastFrame; + bool running; + float currentFrame; +}; +Q_DECLARE_METATYPE(AnimationDetails); +QScriptValue animationDetailsToScriptValue(QScriptEngine* engine, const AnimationDetails& event); +void animationDetailsFromScriptValue(const QScriptValue& object, AnimationDetails& event); + +namespace model { + class Mesh; +} + +using MeshPointer = std::shared_ptr; + + +class MeshProxy : public QObject { + Q_OBJECT + +public: + virtual MeshPointer getMeshPointer() const = 0; + Q_INVOKABLE virtual int getNumVertices() const = 0; + Q_INVOKABLE virtual glm::vec3 getPos3(int index) const = 0; +}; + +Q_DECLARE_METATYPE(MeshProxy*); + +class MeshProxyList : public QList {}; // typedef and using fight with the Qt macros/templates, do this instead +Q_DECLARE_METATYPE(MeshProxyList); + + +QScriptValue meshToScriptValue(QScriptEngine* engine, MeshProxy* const &in); +void meshFromScriptValue(const QScriptValue& value, MeshProxy* &out); + +QScriptValue meshesToScriptValue(QScriptEngine* engine, const MeshProxyList &in); +void meshesFromScriptValue(const QScriptValue& value, MeshProxyList &out); + +class MeshFace { + +public: + MeshFace() {} + ~MeshFace() {} + + QVector vertexIndices; + // TODO -- material... +}; + +Q_DECLARE_METATYPE(MeshFace) +Q_DECLARE_METATYPE(QVector) + +QScriptValue meshFaceToScriptValue(QScriptEngine* engine, const MeshFace &meshFace); +void meshFaceFromScriptValue(const QScriptValue &object, MeshFace& meshFaceResult); +QScriptValue qVectorMeshFaceToScriptValue(QScriptEngine* engine, const QVector& vector); +void qVectorMeshFaceFromScriptValue(const QScriptValue& array, QVector& result); + + #endif // hifi_RegisteredMetaTypes_h diff --git a/libraries/animation/src/AnimationLoop.cpp b/libraries/shared/src/shared/types/AnimationLoop.cpp similarity index 95% rename from libraries/animation/src/AnimationLoop.cpp rename to libraries/shared/src/shared/types/AnimationLoop.cpp index 3d7bca863f..f77bd8bb2a 100644 --- a/libraries/animation/src/AnimationLoop.cpp +++ b/libraries/shared/src/shared/types/AnimationLoop.cpp @@ -9,11 +9,13 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include - -#include "AnimationCache.h" #include "AnimationLoop.h" +#include "../../NumericalConstants.h" +#include "../../SharedUtil.h" +#include "../../GLMHelpers.h" +#include "../../RegisteredMetaTypes.h" + const float AnimationLoop::MAXIMUM_POSSIBLE_FRAME = 100000.0f; AnimationLoop::AnimationLoop() : @@ -62,7 +64,7 @@ AnimationLoop::AnimationLoop(float fps, bool loop, bool hold, bool startAutomati { } -void AnimationLoop::simulateAtTime(quint64 now) { +void AnimationLoop::simulateAtTime(uint64_t now) { float deltaTime = (float)(now - _lastSimulated) / (float)USECS_PER_SECOND; _lastSimulated = now; simulate(deltaTime); diff --git a/libraries/animation/src/AnimationLoop.h b/libraries/shared/src/shared/types/AnimationLoop.h similarity index 93% rename from libraries/animation/src/AnimationLoop.h rename to libraries/shared/src/shared/types/AnimationLoop.h index 6adfbf35e2..33434209e7 100644 --- a/libraries/animation/src/AnimationLoop.h +++ b/libraries/shared/src/shared/types/AnimationLoop.h @@ -14,6 +14,9 @@ class AnimationDetails; +#include +#include + class AnimationLoop { public: static const float MAXIMUM_POSSIBLE_FRAME; @@ -58,7 +61,7 @@ public: void stop() { setRunning(false); } void simulate(float deltaTime); /// call this with deltaTime if you as the caller are managing the delta time between calls - void simulateAtTime(quint64 now); /// call this with "now" if you want the animationLoop to handle delta times + void simulateAtTime(uint64_t now); /// call this with "now" if you want the animationLoop to handle delta times private: float _fps; @@ -71,7 +74,7 @@ private: float _currentFrame; float _maxFrameIndexHint; bool _resetOnRunning; - quint64 _lastSimulated; + uint64_t _lastSimulated; }; #endif // hifi_AnimationLoop_h diff --git a/tests/render-perf/src/main.cpp b/tests/render-perf/src/main.cpp index 52592cd202..552dc3d270 100644 --- a/tests/render-perf/src/main.cpp +++ b/tests/render-perf/src/main.cpp @@ -47,6 +47,7 @@ #include #include +#include #include #include #include From 28d727153b4418c277b2d4cbf75584cddf4d233f Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 27 Jun 2017 19:22:07 -0700 Subject: [PATCH 0638/1049] PR feedback --- .../src/RenderableModelEntityItem.cpp | 13 ++++--------- .../src/model-networking/SimpleMeshProxy.cpp | 4 ++-- .../src/model-networking/SimpleMeshProxy.h | 4 ++-- libraries/model/src/model/Forward.h | 6 +++--- 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index b8e869e4d9..0547c60364 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -580,21 +580,16 @@ EntityItemProperties RenderableModelEntityItem::getProperties(EntityPropertyFlag } - const FBXGeometry* geometry = NULL; - const_cast(this)->getModel(); if (_model && _model->isLoaded()) { - geometry = &_model->getFBXGeometry(); - } - - // TODO: improve naturalDimensions in the future, - // for now we've added this hack for setting natural dimensions of models - if (geometry) { - Extents meshExtents = geometry->getUnscaledMeshExtents(); + // TODO: improve naturalDimensions in the future, + // for now we've added this hack for setting natural dimensions of models + Extents meshExtents = _model->getFBXGeometry().getUnscaledMeshExtents(); properties.setNaturalDimensions(meshExtents.maximum - meshExtents.minimum); properties.calculateNaturalPosition(meshExtents.minimum, meshExtents.maximum); } + return properties; } diff --git a/libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp b/libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp index 40b30154bf..b44ea1ff56 100644 --- a/libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp +++ b/libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp @@ -1,6 +1,6 @@ // -// MeshProxy.cpp -// libraries/model/src/model/ +// SimpleMeshProxy.cpp +// libraries/model-networking/src/model-networking/ // // Created by Seth Alves on 2017-3-22. // Copyright 2017 High Fidelity, Inc. diff --git a/libraries/model-networking/src/model-networking/SimpleMeshProxy.h b/libraries/model-networking/src/model-networking/SimpleMeshProxy.h index b82e501673..24c3fca27e 100644 --- a/libraries/model-networking/src/model-networking/SimpleMeshProxy.h +++ b/libraries/model-networking/src/model-networking/SimpleMeshProxy.h @@ -1,6 +1,6 @@ // -// MeshProxy.h -// libraries/model/src/model/ +// SimpleMeshProxy.h +// libraries/model-networking/src/model-networking/ // // Created by Seth Alves on 2017-1-27. // Copyright 2017 High Fidelity, Inc. diff --git a/libraries/model/src/model/Forward.h b/libraries/model/src/model/Forward.h index 362eabb454..90f55fa64f 100644 --- a/libraries/model/src/model/Forward.h +++ b/libraries/model/src/model/Forward.h @@ -1,9 +1,9 @@ // -// Geometry.h +// Forward.h // libraries/model/src/model // -// Created by Sam Gateau on 12/5/2014. -// Copyright 2014 High Fidelity, Inc. +// Created by Bradley Austin Davis on 2017/06/21 +// Copyright 2013-2017 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html From ffd9ee2908b59b44b88d26b69886513f6027aeea Mon Sep 17 00:00:00 2001 From: Menithal Date: Wed, 28 Jun 2017 07:09:15 +0300 Subject: [PATCH 0639/1049] More appeasement of GNU C Compiler warnings --- interface/src/LocationBookmarks.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/LocationBookmarks.h b/interface/src/LocationBookmarks.h index 76f008cc55..6cac56ae04 100644 --- a/interface/src/LocationBookmarks.h +++ b/interface/src/LocationBookmarks.h @@ -22,14 +22,14 @@ class LocationBookmarks : public Bookmarks, public Dependency { public: LocationBookmarks(); - void setupMenus(Menu* menubar, MenuWrapper* menu); + void setupMenus(Menu* menubar, MenuWrapper* menu) override; static const QString HOME_BOOKMARK; public slots: void addBookmark(); protected: - void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& address); + void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& address) override; private: const QString LOCATIONBOOKMARKS_FILENAME = "bookmarks.json"; From 37e5454421c4f924fb035540a0ff9b949af49b16 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Wed, 28 Jun 2017 15:12:20 +0200 Subject: [PATCH 0640/1049] Fix lighting issues identified with 2nd rendering pipeline --- interface/src/SecondaryCamera.cpp | 2 ++ libraries/gpu-gl/src/gpu/gl/GLBackend.cpp | 11 ++++++++++- libraries/gpu-gl/src/gpu/gl/GLBackend.h | 9 +++++++++ libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp | 8 +++++++- libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp | 2 +- libraries/gpu/src/gpu/Batch.cpp | 7 +++++++ libraries/gpu/src/gpu/Batch.h | 6 ++++++ libraries/render-utils/src/DeferredFrameTransform.cpp | 2 +- libraries/render-utils/src/RenderDeferredTask.cpp | 2 +- libraries/render-utils/src/SurfaceGeometryPass.cpp | 2 +- libraries/render/src/render/Args.h | 2 ++ libraries/render/src/render/BlurTask.cpp | 4 ++-- 12 files changed, 49 insertions(+), 8 deletions(-) diff --git a/interface/src/SecondaryCamera.cpp b/interface/src/SecondaryCamera.cpp index f6ee8caa61..f59d2fcc7a 100644 --- a/interface/src/SecondaryCamera.cpp +++ b/interface/src/SecondaryCamera.cpp @@ -79,6 +79,7 @@ public: gpu::doInBatch(args->_context, [&](gpu::Batch& batch) { batch.disableContextStereo(); + batch.disableContextViewCorrection(); }); auto srcViewFrustum = args->getViewFrustum(); @@ -112,6 +113,7 @@ public: gpu::doInBatch(args->_context, [&](gpu::Batch& batch) { batch.restoreContextStereo(); + batch.restoreContextViewCorrection(); }); } }; diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp index 3441407f62..11e67811b6 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp @@ -114,7 +114,9 @@ GLBackend::CommandCall GLBackend::_commandCalls[Batch::NUM_COMMANDS] = (&::gpu::gl::GLBackend::do_getQuery), (&::gpu::gl::GLBackend::do_resetStages), - + + (&::gpu::gl::GLBackend::do_disableContextViewCorrection), + (&::gpu::gl::GLBackend::do_restoreContextViewCorrection), (&::gpu::gl::GLBackend::do_disableContextStereo), (&::gpu::gl::GLBackend::do_restoreContextStereo), @@ -374,6 +376,13 @@ void GLBackend::do_resetStages(const Batch& batch, size_t paramOffset) { resetStages(); } +void GLBackend::do_disableContextViewCorrection(const Batch& batch, size_t paramOffset) { + _transform._viewCorrectionEnabled = false; +} + +void GLBackend::do_restoreContextViewCorrection(const Batch& batch, size_t paramOffset) { + _transform._viewCorrectionEnabled = true; +} void GLBackend::do_disableContextStereo(const Batch& batch, size_t paramOffset) { diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.h b/libraries/gpu-gl/src/gpu/gl/GLBackend.h index 96217555e1..88aecda617 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.h +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.h @@ -143,6 +143,10 @@ public: // Reset stages virtual void do_resetStages(const Batch& batch, size_t paramOffset) final; + + virtual void do_disableContextViewCorrection(const Batch& batch, size_t paramOffset) final; + virtual void do_restoreContextViewCorrection(const Batch& batch, size_t paramOffset) final; + virtual void do_disableContextStereo(const Batch& batch, size_t paramOffset) final; virtual void do_restoreContextStereo(const Batch& batch, size_t paramOffset) final; @@ -333,6 +337,8 @@ protected: bool _skybox { false }; Transform _view; CameraCorrection _correction; + bool _viewCorrectionEnabled{ true }; + Mat4 _projection; Vec4i _viewport { 0, 0, 1, 1 }; @@ -400,6 +406,7 @@ protected: bool _invalidProgram { false }; BufferView _cameraCorrectionBuffer { gpu::BufferView(std::make_shared(sizeof(CameraCorrection), nullptr )) }; + BufferView _cameraCorrectionBufferIdentity { gpu::BufferView(std::make_shared(sizeof(CameraCorrection), nullptr )) }; State::Data _stateCache{ State::DEFAULT }; State::Signature _stateSignatureCache { 0 }; @@ -409,6 +416,8 @@ protected: PipelineStageState() { _cameraCorrectionBuffer.edit() = CameraCorrection(); + _cameraCorrectionBufferIdentity.edit() = CameraCorrection(); + _cameraCorrectionBufferIdentity._buffer->flush(); } } _pipeline; diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp index 2d71e8ed78..7ef64343ea 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp @@ -77,8 +77,14 @@ void GLBackend::do_setPipeline(const Batch& batch, size_t paramOffset) { if (_pipeline._invalidProgram) { glUseProgram(_pipeline._program); if (_pipeline._cameraCorrectionLocation != -1) { - auto cameraCorrectionBuffer = syncGPUObject(*_pipeline._cameraCorrectionBuffer._buffer); + gl::GLBuffer* cameraCorrectionBuffer = nullptr; + if (_transform._viewCorrectionEnabled) { + cameraCorrectionBuffer = syncGPUObject(*_pipeline._cameraCorrectionBuffer._buffer); + } else { + cameraCorrectionBuffer = syncGPUObject(*_pipeline._cameraCorrectionBufferIdentity._buffer); + } glBindBufferRange(GL_UNIFORM_BUFFER, _pipeline._cameraCorrectionLocation, cameraCorrectionBuffer->_id, 0, sizeof(CameraCorrection)); + } (void) CHECK_GL_ERROR(); _pipeline._invalidProgram = false; diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp index 01f055e0d9..f286a5cca9 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp @@ -102,7 +102,7 @@ void GLBackend::TransformStageState::preUpdate(size_t commandIndex, const Stereo if (_invalidView) { // Apply the correction - if (_viewIsCamera && _correction.correction != glm::mat4()) { + if (_viewIsCamera && (_viewCorrectionEnabled && _correction.correction != glm::mat4())) { // FIXME should I switch to using the camera correction buffer in Transform.slf and leave this out? Transform result; _view.mult(result, _view, _correction.correction); diff --git a/libraries/gpu/src/gpu/Batch.cpp b/libraries/gpu/src/gpu/Batch.cpp index 15c0dfce49..c432e19368 100644 --- a/libraries/gpu/src/gpu/Batch.cpp +++ b/libraries/gpu/src/gpu/Batch.cpp @@ -390,6 +390,13 @@ void Batch::resetStages() { ADD_COMMAND(resetStages); } +void Batch::disableContextViewCorrection() { + ADD_COMMAND(disableContextViewCorrection); +} + +void Batch::restoreContextViewCorrection() { + ADD_COMMAND(restoreContextViewCorrection); +} void Batch::disableContextStereo() { ADD_COMMAND(disableContextStereo); diff --git a/libraries/gpu/src/gpu/Batch.h b/libraries/gpu/src/gpu/Batch.h index 27c9402131..77d22258b2 100644 --- a/libraries/gpu/src/gpu/Batch.h +++ b/libraries/gpu/src/gpu/Batch.h @@ -217,6 +217,9 @@ public: // Reset the stage caches and states void resetStages(); + void disableContextViewCorrection(); + void restoreContextViewCorrection(); + void disableContextStereo(); void restoreContextStereo(); @@ -304,6 +307,9 @@ public: COMMAND_resetStages, + COMMAND_disableContextViewCorrection, + COMMAND_restoreContextViewCorrection, + COMMAND_disableContextStereo, COMMAND_restoreContextStereo, diff --git a/libraries/render-utils/src/DeferredFrameTransform.cpp b/libraries/render-utils/src/DeferredFrameTransform.cpp index b1166437db..baf523312c 100644 --- a/libraries/render-utils/src/DeferredFrameTransform.cpp +++ b/libraries/render-utils/src/DeferredFrameTransform.cpp @@ -39,7 +39,7 @@ void DeferredFrameTransform::update(RenderArgs* args) { args->getViewFrustum().evalProjectionMatrix(frameTransformBuffer.projectionMono); // Running in stero ? - bool isStereo = args->_context->isStereo(); + bool isStereo = args->isStereo(); if (!isStereo) { frameTransformBuffer.projection[0] = frameTransformBuffer.projectionMono; frameTransformBuffer.stereoInfo = glm::vec4(0.0f, (float)args->_viewport.z, 0.0f, 0.0f); diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index b49a066bf7..20c999019b 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -406,7 +406,7 @@ void Blit::run(const RenderContextPointer& renderContext, const gpu::Framebuffer batch.setFramebuffer(blitFbo); if (renderArgs->_renderMode == RenderArgs::MIRROR_RENDER_MODE) { - if (renderArgs->_context->isStereo()) { + if (renderArgs->isStereo()) { gpu::Vec4i srcRectLeft; srcRectLeft.z = width / 2; srcRectLeft.w = height; diff --git a/libraries/render-utils/src/SurfaceGeometryPass.cpp b/libraries/render-utils/src/SurfaceGeometryPass.cpp index 1941766353..c4eea7ce7f 100644 --- a/libraries/render-utils/src/SurfaceGeometryPass.cpp +++ b/libraries/render-utils/src/SurfaceGeometryPass.cpp @@ -459,7 +459,7 @@ void SurfaceGeometryPass::run(const render::RenderContextPointer& renderContext, auto diffuseVPipeline = _diffusePass.getBlurVPipeline(); auto diffuseHPipeline = _diffusePass.getBlurHPipeline(); - _diffusePass.getParameters()->setWidthHeight(curvatureViewport.z, curvatureViewport.w, args->_context->isStereo()); + _diffusePass.getParameters()->setWidthHeight(curvatureViewport.z, curvatureViewport.w, args->isStereo()); glm::ivec2 textureSize(curvatureTexture->getDimensions()); _diffusePass.getParameters()->setTexcoordTransform(gpu::Framebuffer::evalSubregionTexcoordTransformCoefficients(textureSize, curvatureViewport)); _diffusePass.getParameters()->setDepthPerspective(args->getViewFrustum().getProjection()[1][1]); diff --git a/libraries/render/src/render/Args.h b/libraries/render/src/render/Args.h index a75488ce7a..c2e03d4f46 100644 --- a/libraries/render/src/render/Args.h +++ b/libraries/render/src/render/Args.h @@ -99,6 +99,8 @@ namespace render { void pushViewFrustum(const ViewFrustum& viewFrustum) { _viewFrustums.push(viewFrustum); } void popViewFrustum() { _viewFrustums.pop(); } + bool isStereo() const { return _displayMode != MONO; } + std::shared_ptr _context; std::shared_ptr _blitFramebuffer; std::shared_ptr _pipeline; diff --git a/libraries/render/src/render/BlurTask.cpp b/libraries/render/src/render/BlurTask.cpp index 0a6b3d16fc..73a8e0a0dd 100644 --- a/libraries/render/src/render/BlurTask.cpp +++ b/libraries/render/src/render/BlurTask.cpp @@ -217,7 +217,7 @@ void BlurGaussian::run(const RenderContextPointer& renderContext, const gpu::Fra auto blurVPipeline = getBlurVPipeline(); auto blurHPipeline = getBlurHPipeline(); - _parameters->setWidthHeight(args->_viewport.z, args->_viewport.w, args->_context->isStereo()); + _parameters->setWidthHeight(args->_viewport.z, args->_viewport.w, args->isStereo()); glm::ivec2 textureSize(blurringResources.sourceTexture->getDimensions()); _parameters->setTexcoordTransform(gpu::Framebuffer::evalSubregionTexcoordTransformCoefficients(textureSize, args->_viewport)); @@ -330,7 +330,7 @@ void BlurGaussianDepthAware::run(const RenderContextPointer& renderContext, cons auto sourceViewport = args->_viewport; - _parameters->setWidthHeight(sourceViewport.z, sourceViewport.w, args->_context->isStereo()); + _parameters->setWidthHeight(sourceViewport.z, sourceViewport.w, args->isStereo()); glm::ivec2 textureSize(blurringResources.sourceTexture->getDimensions()); _parameters->setTexcoordTransform(gpu::Framebuffer::evalSubregionTexcoordTransformCoefficients(textureSize, sourceViewport)); _parameters->setDepthPerspective(args->getViewFrustum().getProjection()[1][1]); From 93963b32577737dfc469e7bd80f7dfd64f0f03e9 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Wed, 28 Jun 2017 15:44:17 +0200 Subject: [PATCH 0641/1049] Apply the projection and deferred transform fixes found while working on spectator camera --- interface/src/SecondaryCamera.cpp | 2 ++ libraries/gpu-gl/src/gpu/gl/GLBackend.cpp | 11 ++++++++++- libraries/gpu-gl/src/gpu/gl/GLBackend.h | 9 +++++++++ libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp | 8 +++++++- libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp | 2 +- libraries/gpu/src/gpu/Batch.cpp | 7 +++++++ libraries/gpu/src/gpu/Batch.h | 6 ++++++ libraries/render-utils/src/DeferredFrameTransform.cpp | 2 +- libraries/render-utils/src/RenderDeferredTask.cpp | 2 +- libraries/render-utils/src/SurfaceGeometryPass.cpp | 2 +- libraries/render/src/render/Args.h | 2 ++ libraries/render/src/render/BlurTask.cpp | 4 ++-- 12 files changed, 49 insertions(+), 8 deletions(-) diff --git a/interface/src/SecondaryCamera.cpp b/interface/src/SecondaryCamera.cpp index f6ee8caa61..f59d2fcc7a 100644 --- a/interface/src/SecondaryCamera.cpp +++ b/interface/src/SecondaryCamera.cpp @@ -79,6 +79,7 @@ public: gpu::doInBatch(args->_context, [&](gpu::Batch& batch) { batch.disableContextStereo(); + batch.disableContextViewCorrection(); }); auto srcViewFrustum = args->getViewFrustum(); @@ -112,6 +113,7 @@ public: gpu::doInBatch(args->_context, [&](gpu::Batch& batch) { batch.restoreContextStereo(); + batch.restoreContextViewCorrection(); }); } }; diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp index 3441407f62..11e67811b6 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.cpp @@ -114,7 +114,9 @@ GLBackend::CommandCall GLBackend::_commandCalls[Batch::NUM_COMMANDS] = (&::gpu::gl::GLBackend::do_getQuery), (&::gpu::gl::GLBackend::do_resetStages), - + + (&::gpu::gl::GLBackend::do_disableContextViewCorrection), + (&::gpu::gl::GLBackend::do_restoreContextViewCorrection), (&::gpu::gl::GLBackend::do_disableContextStereo), (&::gpu::gl::GLBackend::do_restoreContextStereo), @@ -374,6 +376,13 @@ void GLBackend::do_resetStages(const Batch& batch, size_t paramOffset) { resetStages(); } +void GLBackend::do_disableContextViewCorrection(const Batch& batch, size_t paramOffset) { + _transform._viewCorrectionEnabled = false; +} + +void GLBackend::do_restoreContextViewCorrection(const Batch& batch, size_t paramOffset) { + _transform._viewCorrectionEnabled = true; +} void GLBackend::do_disableContextStereo(const Batch& batch, size_t paramOffset) { diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackend.h b/libraries/gpu-gl/src/gpu/gl/GLBackend.h index 96217555e1..88aecda617 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackend.h +++ b/libraries/gpu-gl/src/gpu/gl/GLBackend.h @@ -143,6 +143,10 @@ public: // Reset stages virtual void do_resetStages(const Batch& batch, size_t paramOffset) final; + + virtual void do_disableContextViewCorrection(const Batch& batch, size_t paramOffset) final; + virtual void do_restoreContextViewCorrection(const Batch& batch, size_t paramOffset) final; + virtual void do_disableContextStereo(const Batch& batch, size_t paramOffset) final; virtual void do_restoreContextStereo(const Batch& batch, size_t paramOffset) final; @@ -333,6 +337,8 @@ protected: bool _skybox { false }; Transform _view; CameraCorrection _correction; + bool _viewCorrectionEnabled{ true }; + Mat4 _projection; Vec4i _viewport { 0, 0, 1, 1 }; @@ -400,6 +406,7 @@ protected: bool _invalidProgram { false }; BufferView _cameraCorrectionBuffer { gpu::BufferView(std::make_shared(sizeof(CameraCorrection), nullptr )) }; + BufferView _cameraCorrectionBufferIdentity { gpu::BufferView(std::make_shared(sizeof(CameraCorrection), nullptr )) }; State::Data _stateCache{ State::DEFAULT }; State::Signature _stateSignatureCache { 0 }; @@ -409,6 +416,8 @@ protected: PipelineStageState() { _cameraCorrectionBuffer.edit() = CameraCorrection(); + _cameraCorrectionBufferIdentity.edit() = CameraCorrection(); + _cameraCorrectionBufferIdentity._buffer->flush(); } } _pipeline; diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp index 2d71e8ed78..7ef64343ea 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackendPipeline.cpp @@ -77,8 +77,14 @@ void GLBackend::do_setPipeline(const Batch& batch, size_t paramOffset) { if (_pipeline._invalidProgram) { glUseProgram(_pipeline._program); if (_pipeline._cameraCorrectionLocation != -1) { - auto cameraCorrectionBuffer = syncGPUObject(*_pipeline._cameraCorrectionBuffer._buffer); + gl::GLBuffer* cameraCorrectionBuffer = nullptr; + if (_transform._viewCorrectionEnabled) { + cameraCorrectionBuffer = syncGPUObject(*_pipeline._cameraCorrectionBuffer._buffer); + } else { + cameraCorrectionBuffer = syncGPUObject(*_pipeline._cameraCorrectionBufferIdentity._buffer); + } glBindBufferRange(GL_UNIFORM_BUFFER, _pipeline._cameraCorrectionLocation, cameraCorrectionBuffer->_id, 0, sizeof(CameraCorrection)); + } (void) CHECK_GL_ERROR(); _pipeline._invalidProgram = false; diff --git a/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp b/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp index 01f055e0d9..f286a5cca9 100644 --- a/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp +++ b/libraries/gpu-gl/src/gpu/gl/GLBackendTransform.cpp @@ -102,7 +102,7 @@ void GLBackend::TransformStageState::preUpdate(size_t commandIndex, const Stereo if (_invalidView) { // Apply the correction - if (_viewIsCamera && _correction.correction != glm::mat4()) { + if (_viewIsCamera && (_viewCorrectionEnabled && _correction.correction != glm::mat4())) { // FIXME should I switch to using the camera correction buffer in Transform.slf and leave this out? Transform result; _view.mult(result, _view, _correction.correction); diff --git a/libraries/gpu/src/gpu/Batch.cpp b/libraries/gpu/src/gpu/Batch.cpp index 15c0dfce49..c432e19368 100644 --- a/libraries/gpu/src/gpu/Batch.cpp +++ b/libraries/gpu/src/gpu/Batch.cpp @@ -390,6 +390,13 @@ void Batch::resetStages() { ADD_COMMAND(resetStages); } +void Batch::disableContextViewCorrection() { + ADD_COMMAND(disableContextViewCorrection); +} + +void Batch::restoreContextViewCorrection() { + ADD_COMMAND(restoreContextViewCorrection); +} void Batch::disableContextStereo() { ADD_COMMAND(disableContextStereo); diff --git a/libraries/gpu/src/gpu/Batch.h b/libraries/gpu/src/gpu/Batch.h index 27c9402131..77d22258b2 100644 --- a/libraries/gpu/src/gpu/Batch.h +++ b/libraries/gpu/src/gpu/Batch.h @@ -217,6 +217,9 @@ public: // Reset the stage caches and states void resetStages(); + void disableContextViewCorrection(); + void restoreContextViewCorrection(); + void disableContextStereo(); void restoreContextStereo(); @@ -304,6 +307,9 @@ public: COMMAND_resetStages, + COMMAND_disableContextViewCorrection, + COMMAND_restoreContextViewCorrection, + COMMAND_disableContextStereo, COMMAND_restoreContextStereo, diff --git a/libraries/render-utils/src/DeferredFrameTransform.cpp b/libraries/render-utils/src/DeferredFrameTransform.cpp index b1166437db..baf523312c 100644 --- a/libraries/render-utils/src/DeferredFrameTransform.cpp +++ b/libraries/render-utils/src/DeferredFrameTransform.cpp @@ -39,7 +39,7 @@ void DeferredFrameTransform::update(RenderArgs* args) { args->getViewFrustum().evalProjectionMatrix(frameTransformBuffer.projectionMono); // Running in stero ? - bool isStereo = args->_context->isStereo(); + bool isStereo = args->isStereo(); if (!isStereo) { frameTransformBuffer.projection[0] = frameTransformBuffer.projectionMono; frameTransformBuffer.stereoInfo = glm::vec4(0.0f, (float)args->_viewport.z, 0.0f, 0.0f); diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index b49a066bf7..20c999019b 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -406,7 +406,7 @@ void Blit::run(const RenderContextPointer& renderContext, const gpu::Framebuffer batch.setFramebuffer(blitFbo); if (renderArgs->_renderMode == RenderArgs::MIRROR_RENDER_MODE) { - if (renderArgs->_context->isStereo()) { + if (renderArgs->isStereo()) { gpu::Vec4i srcRectLeft; srcRectLeft.z = width / 2; srcRectLeft.w = height; diff --git a/libraries/render-utils/src/SurfaceGeometryPass.cpp b/libraries/render-utils/src/SurfaceGeometryPass.cpp index 1941766353..c4eea7ce7f 100644 --- a/libraries/render-utils/src/SurfaceGeometryPass.cpp +++ b/libraries/render-utils/src/SurfaceGeometryPass.cpp @@ -459,7 +459,7 @@ void SurfaceGeometryPass::run(const render::RenderContextPointer& renderContext, auto diffuseVPipeline = _diffusePass.getBlurVPipeline(); auto diffuseHPipeline = _diffusePass.getBlurHPipeline(); - _diffusePass.getParameters()->setWidthHeight(curvatureViewport.z, curvatureViewport.w, args->_context->isStereo()); + _diffusePass.getParameters()->setWidthHeight(curvatureViewport.z, curvatureViewport.w, args->isStereo()); glm::ivec2 textureSize(curvatureTexture->getDimensions()); _diffusePass.getParameters()->setTexcoordTransform(gpu::Framebuffer::evalSubregionTexcoordTransformCoefficients(textureSize, curvatureViewport)); _diffusePass.getParameters()->setDepthPerspective(args->getViewFrustum().getProjection()[1][1]); diff --git a/libraries/render/src/render/Args.h b/libraries/render/src/render/Args.h index a75488ce7a..c2e03d4f46 100644 --- a/libraries/render/src/render/Args.h +++ b/libraries/render/src/render/Args.h @@ -99,6 +99,8 @@ namespace render { void pushViewFrustum(const ViewFrustum& viewFrustum) { _viewFrustums.push(viewFrustum); } void popViewFrustum() { _viewFrustums.pop(); } + bool isStereo() const { return _displayMode != MONO; } + std::shared_ptr _context; std::shared_ptr _blitFramebuffer; std::shared_ptr _pipeline; diff --git a/libraries/render/src/render/BlurTask.cpp b/libraries/render/src/render/BlurTask.cpp index 0a6b3d16fc..73a8e0a0dd 100644 --- a/libraries/render/src/render/BlurTask.cpp +++ b/libraries/render/src/render/BlurTask.cpp @@ -217,7 +217,7 @@ void BlurGaussian::run(const RenderContextPointer& renderContext, const gpu::Fra auto blurVPipeline = getBlurVPipeline(); auto blurHPipeline = getBlurHPipeline(); - _parameters->setWidthHeight(args->_viewport.z, args->_viewport.w, args->_context->isStereo()); + _parameters->setWidthHeight(args->_viewport.z, args->_viewport.w, args->isStereo()); glm::ivec2 textureSize(blurringResources.sourceTexture->getDimensions()); _parameters->setTexcoordTransform(gpu::Framebuffer::evalSubregionTexcoordTransformCoefficients(textureSize, args->_viewport)); @@ -330,7 +330,7 @@ void BlurGaussianDepthAware::run(const RenderContextPointer& renderContext, cons auto sourceViewport = args->_viewport; - _parameters->setWidthHeight(sourceViewport.z, sourceViewport.w, args->_context->isStereo()); + _parameters->setWidthHeight(sourceViewport.z, sourceViewport.w, args->isStereo()); glm::ivec2 textureSize(blurringResources.sourceTexture->getDimensions()); _parameters->setTexcoordTransform(gpu::Framebuffer::evalSubregionTexcoordTransformCoefficients(textureSize, sourceViewport)); _parameters->setDepthPerspective(args->getViewFrustum().getProjection()[1][1]); From d3282a4ed06d203c74b9f9fb0272f57aa18a929e Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi Date: Wed, 28 Jun 2017 15:56:35 +0200 Subject: [PATCH 0642/1049] Cleanup --- .../resources/qml/dialogs/TabletFileDialog.qml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/interface/resources/qml/dialogs/TabletFileDialog.qml b/interface/resources/qml/dialogs/TabletFileDialog.qml index f77cc7c78a..9e1d0a9f5a 100644 --- a/interface/resources/qml/dialogs/TabletFileDialog.qml +++ b/interface/resources/qml/dialogs/TabletFileDialog.qml @@ -293,7 +293,7 @@ TabletModalWindow { } onFolderChanged: { - refreshTimer.start() + fileTableModel.update() } function getItem(index, field) { @@ -333,14 +333,6 @@ TabletModalWindow { } } - Timer { - id: refreshTimer - interval: 100 - repeat: false - running: false - onTriggered: fileTableModel.update() - } - Component { id: filesModelBuilder ListModel { } @@ -377,17 +369,16 @@ TabletModalWindow { } onFolderChanged: { + if (folder === rootFolder) { model = driveListModel; helper.monitorDirectory(""); update(); } else { var needsUpdate = model === driveListModel && folder === folderListModel.folder; - model = folderListModel; folderListModel.folder = folder; helper.monitorDirectory(helper.urlToPath(folder)); - if (needsUpdate) { update(); } @@ -420,7 +411,6 @@ TabletModalWindow { rows = 0, i; - console.log("dialog.qml updating") var newFilesModel = filesModelBuilder.createObject(root); comparisonFunction = sortOrder === Qt.AscendingOrder From 51b44d90213e823280233088f8b5d6c84a0a73a1 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi Date: Wed, 28 Jun 2017 16:36:25 +0200 Subject: [PATCH 0643/1049] Implement same for HMD mode --- .../resources/qml/dialogs/FileDialog.qml | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/interface/resources/qml/dialogs/FileDialog.qml b/interface/resources/qml/dialogs/FileDialog.qml index 0886a25949..106e067968 100644 --- a/interface/resources/qml/dialogs/FileDialog.qml +++ b/interface/resources/qml/dialogs/FileDialog.qml @@ -34,6 +34,8 @@ ModalWindow { HifiConstants { id: hifi } + property var filesModel: ListModel { } + Settings { category: "FileDialog" property alias width: root.width @@ -253,7 +255,9 @@ ModalWindow { } currentSelectionUrl = helper.pathToUrl(fileTableView.model.get(row).filePath); - currentSelectionIsFolder = fileTableView.model.isFolder(row); + currentSelectionIsFolder = fileTableView.model !== filesModel ? + fileTableView.model.isFolder(row) : + fileTableModel.isFolder(row); if (root.selectDirectory || !currentSelectionIsFolder) { currentSelection.text = capitalizeDrive(helper.urlToPath(currentSelectionUrl)); } else { @@ -331,7 +335,12 @@ ModalWindow { } } - ListModel { + Component { + id: filesModelBuilder + ListModel { } + } + + QtObject { id: fileTableModel // FolderListModel has a couple of problems: @@ -383,7 +392,11 @@ ModalWindow { if (row === -1) { return false; } - return get(row).fileIsDir; + return filesModel.get(row).fileIsDir; + } + + function get(row) { + return filesModel.get(row) } function update() { @@ -401,7 +414,7 @@ ModalWindow { rows = 0, i; - clear(); + var newFilesModel = filesModelBuilder.createObject(root); comparisonFunction = sortOrder === Qt.AscendingOrder ? function(a, b) { return a < b; } @@ -423,7 +436,7 @@ ModalWindow { while (lower < upper) { middle = Math.floor((lower + upper) / 2); var lessThan; - if (comparisonFunction(sortValue, get(middle)[sortField])) { + if (comparisonFunction(sortValue, newFilesModel.get(middle)[sortField])) { lessThan = true; upper = middle; } else { @@ -432,7 +445,7 @@ ModalWindow { } } - insert(lower, { + newFilesModel.insert(lower, { fileName: fileName, fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")), fileSize: model.getItem(i, "fileSize"), @@ -443,6 +456,7 @@ ModalWindow { rows++; } + filesModel = newFilesModel; d.clearSelection(); } @@ -469,7 +483,7 @@ ModalWindow { sortIndicatorOrder: Qt.AscendingOrder sortIndicatorVisible: true - model: fileTableModel + model: filesModel function updateSort() { model.sortOrder = sortIndicatorOrder; @@ -561,11 +575,12 @@ ModalWindow { } function navigateToCurrentRow() { + var currentModel = fileTableView.model !== filesModel ? fileTableView.model : fileTableModel var row = fileTableView.currentRow - var isFolder = model.isFolder(row); - var file = model.get(row).filePath; + var isFolder = currentModel.isFolder(row); + var file = currentModel.get(row).filePath; if (isFolder) { - fileTableView.model.folder = helper.pathToUrl(file); + currentModel.folder = helper.pathToUrl(file); } else { okAction.trigger(); } @@ -580,7 +595,8 @@ ModalWindow { var newPrefix = prefix + event.text.toLowerCase(); var matchedIndex = -1; for (var i = 0; i < model.count; ++i) { - var name = model.get(i).fileName.toLowerCase(); + var name = model !== filesModel ? model.get(i).fileName.toLowerCase() : + filesModel.get(i).fileName.toLowerCase(); if (0 === name.indexOf(newPrefix)) { matchedIndex = i; break; From f6ba264de67ff3bbc31441f19588b96ce020078b Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 28 Jun 2017 16:22:28 +0100 Subject: [PATCH 0644/1049] avatar recording fix --- libraries/avatars/src/AvatarData.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 1147b8a811..5023bd7ae5 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1978,7 +1978,7 @@ JointData jointDataFromJsonValue(const QJsonValue& json) { result.rotation = quatFromJsonValue(array[0]); result.rotationSet = true; result.translation = vec3FromJsonValue(array[1]); - result.translationSet = false; + result.translationSet = true; } return result; } @@ -2146,12 +2146,9 @@ void AvatarData::fromJson(const QJsonObject& json, bool useFrameSkeleton) { QVector jointArray; QJsonArray jointArrayJson = json[JSON_AVATAR_JOINT_ARRAY].toArray(); jointArray.reserve(jointArrayJson.size()); - int i = 0; for (const auto& jointJson : jointArrayJson) { auto joint = jointDataFromJsonValue(jointJson); jointArray.push_back(joint); - setJointData(i, joint.rotation, joint.translation); - i++; } setRawJointData(jointArray); } From be37998b47ad185fe53753e679264d7cc0d6d5c0 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 28 Jun 2017 10:11:55 -0700 Subject: [PATCH 0645/1049] remove stray semicolon in NodeList --- libraries/networking/src/NodeList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index ef9b131928..09622ff19d 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -239,7 +239,7 @@ void NodeList::reset() { LimitedNodeList::reset(); _numNoReplyDomainCheckIns = 0; -; + // lock and clear our set of ignored IDs _ignoredSetLock.lockForWrite(); _ignoredNodeIDs.clear(); From 0acbdc7755e925e7ba498583ca0252e1a04a10db Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Wed, 28 Jun 2017 10:18:54 -0700 Subject: [PATCH 0646/1049] CR fix: use predefined PI --- libraries/shared/src/AudioHelpers.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/shared/src/AudioHelpers.h b/libraries/shared/src/AudioHelpers.h index d75733e678..1dcc11af0c 100644 --- a/libraries/shared/src/AudioHelpers.h +++ b/libraries/shared/src/AudioHelpers.h @@ -14,6 +14,8 @@ #include +#include + const int IEEE754_MANT_BITS = 23; const int IEEE754_EXPN_BIAS = 127; @@ -105,7 +107,7 @@ static inline float fastAcosf(float x) { xi.f = ((-0.0198439236f * xi.f + 0.0762021306f) * xi.f + -0.212940971f) * xi.f + 1.57079633f; xi.f *= r; - return (sign ? 3.141592654f - xi.f : xi.f); + return (sign ? PI - xi.f : xi.f); } // From fedbc28da45bf28fe8d0008a92d40f0dd41637a2 Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Wed, 28 Jun 2017 10:47:34 -0700 Subject: [PATCH 0647/1049] Rotation quaternion fix --- scripts/system/spectatorCamera.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 685df66ba2..b3cc17ad74 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -132,7 +132,7 @@ emissive: true, parentID: camera, alpha: 1, - localRotation: { x: 0, y: 0, z: 0 }, + localRotation: { w: 1, x: 0, y: 0, z: 0 }, localPosition: { x: 0.007, y: 0.15, z: -0.005 }, dimensions: viewFinderOverlayDim }); @@ -322,7 +322,7 @@ emissive: true, parentID: camera, alpha: 1, - localRotation: { x: 0, y: 0, z: 0 }, + localRotation: { w: 1, x: 0, y: 0, z: 0 }, localPosition: { x: 0.007, y: 0.15, z: -0.005 }, dimensions: viewFinderOverlayDim }); From 2f3109e4beb86222227fcd89d53211626184407e Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 28 Jun 2017 11:00:05 -0700 Subject: [PATCH 0648/1049] move the location of Q_DECLARE_METATYPE(std::function) so that the server-script AC can see it --- libraries/shared/src/RegisteredMetaTypes.cpp | 2 ++ libraries/shared/src/RegisteredMetaTypes.h | 2 ++ libraries/ui/src/ui/OffscreenQmlSurface.cpp | 6 ------ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp index 1e5fe23458..b30637c83f 100644 --- a/libraries/shared/src/RegisteredMetaTypes.cpp +++ b/libraries/shared/src/RegisteredMetaTypes.cpp @@ -37,6 +37,8 @@ int pickRayMetaTypeId = qRegisterMetaType(); int collisionMetaTypeId = qRegisterMetaType(); int qMapURLStringMetaTypeId = qRegisterMetaType>(); int socketErrorMetaTypeId = qRegisterMetaType(); +int voidLambdaType = qRegisterMetaType>(); +int variantLambdaType = qRegisterMetaType>(); void registerMetaTypes(QScriptEngine* engine) { qScriptRegisterMetaType(engine, mat4toScriptValue, mat4FromScriptValue); diff --git a/libraries/shared/src/RegisteredMetaTypes.h b/libraries/shared/src/RegisteredMetaTypes.h index dd37cb3410..123c769a96 100644 --- a/libraries/shared/src/RegisteredMetaTypes.h +++ b/libraries/shared/src/RegisteredMetaTypes.h @@ -34,6 +34,8 @@ Q_DECLARE_METATYPE(xColor) Q_DECLARE_METATYPE(QVector) Q_DECLARE_METATYPE(QVector) Q_DECLARE_METATYPE(AACube) +Q_DECLARE_METATYPE(std::function); +Q_DECLARE_METATYPE(std::function); void registerMetaTypes(QScriptEngine* engine); diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index f0006cb399..648bdad1bf 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -886,12 +886,6 @@ QQmlContext* OffscreenQmlSurface::getSurfaceContext() { return _qmlContext; } -Q_DECLARE_METATYPE(std::function); -auto VoidLambdaType = qRegisterMetaType>(); -Q_DECLARE_METATYPE(std::function); -auto VariantLambdaType = qRegisterMetaType>(); - - void OffscreenQmlSurface::executeOnUiThread(std::function function, bool blocking ) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "executeOnUiThread", blocking ? Qt::BlockingQueuedConnection : Qt::QueuedConnection, From 252d100a5eb7eb9a3614b2e1acb007832db690d9 Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Wed, 28 Jun 2017 11:31:40 -0700 Subject: [PATCH 0649/1049] Function updateOverlay() made so we don't repeat code --- scripts/system/spectatorCamera.js | 40 ++++++++++++++----------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index b3cc17ad74..97fadb7e6f 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -127,15 +127,7 @@ "userData": "{\"grabbableKey\":{\"grabbable\":true}}" }, true); // This image3d overlay acts as the camera's preview screen. - viewFinderOverlay = Overlays.addOverlay("image3d", { - url: "resource://spectatorCameraFrame", - emissive: true, - parentID: camera, - alpha: 1, - localRotation: { w: 1, x: 0, y: 0, z: 0 }, - localPosition: { x: 0.007, y: 0.15, z: -0.005 }, - dimensions: viewFinderOverlayDim - }); + updateOverlay(); setDisplay(monitorShowsCameraView); } @@ -284,6 +276,22 @@ setMonitorShowsCameraViewAndSendToQml(!monitorShowsCameraView); } } + function updateOverlay() { + // The only way I found to update the viewFinderOverlay without turning the spectator camera on and off is to delete and recreate the + // overlay, which is inefficient but resizing the window shouldn't be performed often + if (viewFinderOverlay) { + Overlays.deleteOverlay(viewFinderOverlay); + } + viewFinderOverlay = Overlays.addOverlay("image3d", { + url: "resource://spectatorCameraFrame", + emissive: true, + parentID: camera, + alpha: 1, + localRotation: { w: 1, x: 0, y: 0, z: 0 }, + localPosition: { x: 0.007, y: 0.15, z: -0.005 }, + dimensions: viewFinderOverlayDim + }); + } // // Function Name: resizeViewFinderOverlay() @@ -313,19 +321,7 @@ } else { //horizontal window size viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: 0 }; } - - // The only way I found to update the viewFinderOverlay without turning the spectator camera on and off is to delete and recreate the - // overlay, which is inefficient but resizing the window shouldn't be performed often - Overlays.deleteOverlay(viewFinderOverlay); - viewFinderOverlay = Overlays.addOverlay("image3d", { - url: "resource://spectatorCameraFrame", - emissive: true, - parentID: camera, - alpha: 1, - localRotation: { w: 1, x: 0, y: 0, z: 0 }, - localPosition: { x: 0.007, y: 0.15, z: -0.005 }, - dimensions: viewFinderOverlayDim - }); + updateOverlay(); spectatorFrameRenderConfig.resetSizeSpectatorCamera(geometryChanged.width, geometryChanged.height); setDisplay(monitorShowsCameraView); } From 0dbb7a71f3831b69b86b8960e4e6b07cdd1d9143 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Wed, 28 Jun 2017 11:32:24 -0700 Subject: [PATCH 0650/1049] CR fix: comments instead of ref code --- libraries/audio-client/src/AudioClient.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 27e70e5f01..43af7afdef 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -1702,9 +1702,8 @@ float AudioClient::azimuthForSource(const glm::vec3& relativePosition) { if (rotatedSourcePositionLength2 > SOURCE_DISTANCE_THRESHOLD) { // produce an oriented angle about the y-axis - // return glm::orientedAngle(glm::vec3(0.0f, 0.0f, -1.0f), glm::normalize(rotatedSourcePosition), glm::vec3(0.0f, -1.0f, 0.0f)); glm::vec3 direction = rotatedSourcePosition * (1.0f / fastSqrtf(rotatedSourcePositionLength2)); - float angle = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); + float angle = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); // UNIT_NEG_Z is "forward" return (direction.x < 0.0f) ? -angle : angle; } else { From a7a049434d733c3b3a8ed112697ce7a9c4824781 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Wed, 28 Jun 2017 11:32:41 -0700 Subject: [PATCH 0651/1049] CR fix: comments instead of ref code --- assignment-client/src/audio/AudioMixerSlave.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/assignment-client/src/audio/AudioMixerSlave.cpp b/assignment-client/src/audio/AudioMixerSlave.cpp index 9cfc659c14..ed63bbc298 100644 --- a/assignment-client/src/audio/AudioMixerSlave.cpp +++ b/assignment-client/src/audio/AudioMixerSlave.cpp @@ -498,9 +498,9 @@ float computeGain(const AvatarAudioStream& listeningNodeStream, const Positional } else if (!isEcho && (streamToAdd.getType() == PositionalAudioStream::Microphone)) { glm::vec3 rotatedListenerPosition = glm::inverse(streamToAdd.getOrientation()) * relativePosition; - // float angleOfDelivery = glm::angle(glm::vec3(0.0f, 0.0f, -1.0f), glm::normalize(rotatedListenerPosition)); + // source directivity is based on angle of emission, in local coordinates glm::vec3 direction = glm::normalize(rotatedListenerPosition); - float angleOfDelivery = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); + float angleOfDelivery = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); // UNIT_NEG_Z is "forward" const float MAX_OFF_AXIS_ATTENUATION = 0.2f; const float OFF_AXIS_ATTENUATION_STEP = (1 - MAX_OFF_AXIS_ATTENUATION) / 2.0f; @@ -557,9 +557,8 @@ float computeAzimuth(const AvatarAudioStream& listeningNodeStream, const Positio if (rotatedSourcePositionLength2 > SOURCE_DISTANCE_THRESHOLD) { // produce an oriented angle about the y-axis - // return glm::orientedAngle(glm::vec3(0.0f, 0.0f, -1.0f), glm::normalize(rotatedSourcePosition), glm::vec3(0.0f, -1.0f, 0.0f)); glm::vec3 direction = rotatedSourcePosition * (1.0f / fastSqrtf(rotatedSourcePositionLength2)); - float angle = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); + float angle = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); // UNIT_NEG_Z is "forward" return (direction.x < 0.0f) ? -angle : angle; } else { From a2df2f84720ae626cbd76911c6bd9f45094b8920 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 28 Jun 2017 19:52:19 +0100 Subject: [PATCH 0652/1049] added user activity status --- .../qml/hifi/tablet/CalibratingScreen.qml | 14 ++++++- .../qml/hifi/tablet/OpenVrConfiguration.qml | 39 +++++++++++++++++-- plugins/openvr/src/ViveControllerManager.cpp | 28 +++++++++++++ plugins/openvr/src/ViveControllerManager.h | 1 + 4 files changed, 77 insertions(+), 5 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/CalibratingScreen.qml b/interface/resources/qml/hifi/tablet/CalibratingScreen.qml index 338a76989f..8053673e9c 100644 --- a/interface/resources/qml/hifi/tablet/CalibratingScreen.qml +++ b/interface/resources/qml/hifi/tablet/CalibratingScreen.qml @@ -25,11 +25,12 @@ Rectangle { signal canceled() signal restart() - property int count: 3 + property int count: 5 property string calibratingText: "CALIBRATING..." property string calibratingCountText: "CALIBRATION STARTING IN" property string calibrationSuccess: "CALIBRATION COMPLETED" property string calibrationFailed: "CALIBRATION FAILED" + property string instructionText: "Please stand in a T-Pose during calibration" HifiConstants { id: hifi } visible: true @@ -158,6 +159,15 @@ Rectangle { onClicked: { restart(); + statusText.color = hifi.colors.blueHighlight; + statusText.text = info.calibratingCountText; + directions.text = instructionText; + countDown.visible = true; + busyIndicator.running = true; + busyRotation.from = 0 + busyRotation.to = 360 + busyIndicator.source = blueIndicator; + closeWindow.stop(); numberAnimation.stop(); info.count = (timer.interval / 1000); numberAnimation.start(); @@ -178,6 +188,7 @@ Rectangle { } } + function start(interval, countNumber) { countDown.visible = true; statusText.color = hifi.colors.blueHighlight; @@ -201,6 +212,7 @@ Rectangle { busyIndicator.running = false; statusText.text = info.calibrationSuccess statusText.color = hifi.colors.greenHighlight + directions.text = "SUCCESS" closeWindow.start(); } diff --git a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml index 52a935ab19..3b3f23b1d8 100644 --- a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml +++ b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml @@ -458,7 +458,7 @@ Rectangle { width: glyphButton.width + calibrationText.width + padding height: hifi.dimensions.controlLineHeight anchors.top: bottomSeperator.bottom - anchors.topMargin: 10 + anchors.topMargin: 15 anchors.left: parent.left anchors.leftMargin: leftMargin @@ -590,16 +590,24 @@ Rectangle { lastConfiguration = composeConfigurationSettings(); } + Component.onDestruction: { + var settings = InputConfiguration.configurationSettings(pluginName); + var data = { + "num_pucks": settings["puckCount"] + } + UserActivityLogger.logAction("mocap_ui_close_dialog", data); + } + HifiControls.SpinBox { id: timeToCalibrate width: 70 anchors.top: calibrationButton.bottom - anchors.topMargin: 40 + anchors.topMargin: 20 anchors.left: parent.left anchors.leftMargin: leftMargin - minimumValue: 3 - value: 3 + minimumValue: 5 + value: 5 colorScheme: hifi.colorSchemes.dark onEditingFinished: { @@ -645,10 +653,27 @@ Rectangle { var calibrationScreen = stack.currentItem; if (status["calibrated"]) { calibrationScreen.success(); + var data = { + "num_pucks": status["puckCount"], + "puck_configuration": status["configuration"], + "head_puck": status["head_puck"], + "hand_puck": status["hand_puck"] + } + + UserActivityLogger.logAction("mocap_ui_success", data); } else if (!status["calibrated"]) { var uncalibrated = status["success"]; if (!uncalibrated) { calibrationScreen.failure(); + + var data = { + "num_pucks": status["puckCount"], + "puck_configuration": status["configuration"], + "head_puck": status["head_puck"], + "hand_puck": status["hand_puck"] + } + + UserActivityLogger.logAction("mocap_ui_fail", data); } } @@ -717,6 +742,12 @@ Rectangle { initializeButtonState(); updateCalibrationText(); + + var data = { + "num_pucks": settings["puckCount"] + }; + + UserActivityLogger.logAction("mocap_ui_open_dialog", data); } function displayTrackerConfiguration(type) { diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index 648373ccc2..ba5fc7e288 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -374,6 +374,7 @@ QJsonObject ViveControllerManager::InputDevice::configurationSettings() { configurationSettings["trackerConfiguration"] = configToString(_preferedConfig); configurationSettings["HMDHead"] = (_headConfig == HeadConfig::HMD) ? true : false; configurationSettings["handController"] = (_handConfig == HandConfig::HandController) ? true : false; + configurationSettings["puckCount"] = (int)_validTrackedObjects.size(); return configurationSettings; } @@ -384,14 +385,22 @@ void ViveControllerManager::InputDevice::emitCalibrationStatus(const bool succes if (_calibrated && success) { status["calibrated"] = _calibrated; status["configuration"] = configToString(_preferedConfig); + status["head_puck"] = (_headConfig == HeadConfig::Puck) ? true : false; + status["hand_pucks"] = (_handConfig == HandConfig::Pucks) ? true : false; + status["puckCount"] = (int)_validTrackedObjects.size(); } else if (!_calibrated && !success) { status["calibrated"] = _calibrated; status["success"] = success; + status["success"] = (int)_validTrackedObjects.size(); + status["head_puck"] = (_headConfig == HeadConfig::Puck) ? true : false; + status["hand_pucks"] = (_handConfig == HandConfig::Pucks) ? true : false; } else if (!_calibrated && success) { status["calibrated"] = _calibrated; status["success"] = success; status["configuration"] = configToString(_preferedConfig); status["puckCount"] = (int)_validTrackedObjects.size(); + status["head_puck"] = (_headConfig == HeadConfig::Puck) ? true : false; + status["hand_pucks"] = (_handConfig == HandConfig::Pucks) ? true : false; } emit inputConfiguration->calibrationStatus(status); //inputConfiguration->calibrated(status); @@ -437,12 +446,31 @@ void ViveControllerManager::InputDevice::handleTrackedObject(uint32_t deviceInde } } +void ViveControllerManager::InputDevice::sendUserActivityData(QString activity) { + QJsonObject jsonData = { + {"num_pucks", (int)_validTrackedObjects.size()}, + {"configuration", configToString(_preferedConfig)}, + {"head_puck", (_headConfig == HeadConfig::Puck) ? true : false}, + {"hand_pucks", (_handConfig == HandConfig::Pucks) ? true : false} + }; + + UserActivityLogger::getInstance().logAction(activity, jsonData); +} + void ViveControllerManager::InputDevice::calibrateOrUncalibrate(const controller::InputCalibrationData& inputCalibration) { if (!_calibrated) { calibrate(inputCalibration); + + if (_calibrated) { + sendUserActivityData("mocap_button_success"); + } else { + sendUserActivityData("mocap_button_fail"); + } + } else { uncalibrate(); emitCalibrationStatus(true); + sendUserActivityData("mocap_button_uncalibrate"); } } diff --git a/plugins/openvr/src/ViveControllerManager.h b/plugins/openvr/src/ViveControllerManager.h index 0b0406bb60..19b485ad55 100644 --- a/plugins/openvr/src/ViveControllerManager.h +++ b/plugins/openvr/src/ViveControllerManager.h @@ -73,6 +73,7 @@ private: void calibrateOrUncalibrate(const controller::InputCalibrationData& inputCalibration); void calibrate(const controller::InputCalibrationData& inputCalibration); void uncalibrate(); + void sendUserActivityData(QString activity); void configureCalibrationSettings(const QJsonObject configurationSettings); QJsonObject configurationSettings(); controller::Pose addOffsetToPuckPose(int joint) const; From 9bcaa6d2566bde83fb2a8febeaf0724add76600c Mon Sep 17 00:00:00 2001 From: Patrick Manalich Date: Wed, 28 Jun 2017 12:10:16 -0700 Subject: [PATCH 0653/1049] Revert "Messing around, howard please refer the commit before this one" This reverts commit 1392297da9b2ee5ff22ad90de50bec6c9dcb461a. --- scripts/system/spectatorCamera.js | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 6b867d4abc..7b60c14575 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -48,7 +48,6 @@ var viewFinderOverlay = false; var camera = false; var cameraIsDynamic = false; - var attachedToggle = false; var lastCameraPosition = false; var lastCameraRotation = false; function updateRenderFromCamera() { @@ -124,30 +123,6 @@ dimensions: viewFinderOverlayDim }); setDisplay(monitorShowsCameraView); - - attachedToggle = Entities.addEntity({ - "color": { - "blue": 0, - "green": 0, - "red": 255 - }, - parentID: camera, - localPosition: { x: 0.1, y: 0, z: -0.05 }, - localRotation: { w: 0.70708787441253662, x: 0, y: 0, z: 0.70708787441253662 }, - "dimensions": { - "x": 0.03, - "y": 0.03, - "z": 0.03 - }, - "queryAACube": { - "scale": 0.052, - "x": -0.026, - "y": -0.026, - "z": -0.026 - }, - "shape": "Cylinder", - "type": "Shape" - }, true); } // Function Name: spectatorCameraOff() @@ -167,12 +142,8 @@ if (viewFinderOverlay) { Overlays.deleteOverlay(viewFinderOverlay); } - if (attachedToggle) { - Entities.deleteEntity(attachedToggle); - } camera = false; viewFinderOverlay = false; - attachedToggle = false; setDisplay(monitorShowsCameraView); } @@ -225,7 +196,6 @@ HMD.displayModeChanged.connect(onHMDChanged); viewFinderOverlay = false; camera = false; - attachedToggle = false; registerButtonMappings(); } From 99ebd743e6bdf9f3ea223b1417d9b45cdb22d7da Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 27 Jun 2017 17:09:59 -0700 Subject: [PATCH 0654/1049] First steps --- scripts/system/spectatorCamera.js | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 97fadb7e6f..434ecaa033 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -58,18 +58,10 @@ var viewFinderOverlay = false; var camera = false; var cameraIsDynamic = false; - var lastCameraPosition = false; - var lastCameraRotation = false; function updateRenderFromCamera() { var cameraData = Entities.getEntityProperties(camera, ['position', 'rotation']); - if (JSON.stringify(lastCameraRotation) !== JSON.stringify(cameraData.rotation)) { - lastCameraRotation = cameraData.rotation; - beginSpectatorFrameRenderConfig.orientation = lastCameraRotation; - } - if (JSON.stringify(lastCameraPosition) !== JSON.stringify(cameraData.position)) { - lastCameraPosition = cameraData.position; - beginSpectatorFrameRenderConfig.position = Vec3.sum(inFrontOf(0.17, lastCameraPosition, lastCameraRotation), {x: 0, y: 0.02, z: 0}); - } + beginSpectatorFrameRenderConfig.orientation = cameraData.rotation; + beginSpectatorFrameRenderConfig.position = Vec3.sum(inFrontOf(0.17, cameraData.position, lastCameraRotation), {x: 0, y: 0.02, z: 0}); } // @@ -104,6 +96,7 @@ // the overlay since it is an Image3DOverlay so it is set to 0 var glassPaneWidth = 0.16; var viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: 0 }; + var cameraUpdateInterval; function spectatorCameraOn() { // Sets the special texture size based on the window it is displayed in, which doesn't include the menu bar spectatorFrameRenderConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); @@ -112,7 +105,7 @@ beginSpectatorFrameRenderConfig.nearClipPlaneDistance = nearClipPlaneDistance; beginSpectatorFrameRenderConfig.farClipPlaneDistance = farClipPlaneDistance; cameraRotation = MyAvatar.orientation, cameraPosition = inFrontOf(1, Vec3.sum(MyAvatar.position, { x: 0, y: 0.3, z: 0 })); - Script.update.connect(updateRenderFromCamera); + cameraUpdateInterval = Script.setInterval(updateRenderFromCamera, 10); isUpdateRenderWired = true; camera = Entities.addEntity({ "angularDamping": 0.98000001907348633, @@ -147,7 +140,7 @@ function spectatorCameraOff() { spectatorFrameRenderConfig.enabled = beginSpectatorFrameRenderConfig.enabled = false; if (isUpdateRenderWired) { - Script.update.disconnect(updateRenderFromCamera); + Script.clearInterval(cameraUpdateInterval); isUpdateRenderWired = false; } if (camera) { From c54a7a713c47d7df9efe6d2c513ecb7366458553 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 28 Jun 2017 11:33:18 -0700 Subject: [PATCH 0655/1049] New registration point; attempt to fix button interactions --- scripts/system/spectatorCamera.js | 119 ++++++++++++++++-------------- 1 file changed, 65 insertions(+), 54 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 434ecaa033..72e062338d 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -43,8 +43,6 @@ // camera: The in-world entity that corresponds to the spectator camera. // cameraIsDynamic: "false" for now while we figure out why dynamic, parented overlays // drift with respect to their parent - // lastCameraPosition: Holds the last known camera position - // lastCameraRotation: Holds the last known camera rotation // // Arguments: // None @@ -61,7 +59,7 @@ function updateRenderFromCamera() { var cameraData = Entities.getEntityProperties(camera, ['position', 'rotation']); beginSpectatorFrameRenderConfig.orientation = cameraData.rotation; - beginSpectatorFrameRenderConfig.position = Vec3.sum(inFrontOf(0.17, cameraData.position, lastCameraRotation), {x: 0, y: 0.02, z: 0}); + beginSpectatorFrameRenderConfig.position = cameraData.position; } // @@ -77,6 +75,7 @@ // cameraPosition: The position of the spectator camera // glassPaneWidth: The width of the glass pane above the spectator camera that holds the viewFinderOverlay // viewFinderOverlayDim: The x, y, and z dimensions of the viewFinderOverlay + // cameraUpdateInterval: Used when setting Script.setInterval() // // Arguments: // None @@ -105,14 +104,20 @@ beginSpectatorFrameRenderConfig.nearClipPlaneDistance = nearClipPlaneDistance; beginSpectatorFrameRenderConfig.farClipPlaneDistance = farClipPlaneDistance; cameraRotation = MyAvatar.orientation, cameraPosition = inFrontOf(1, Vec3.sum(MyAvatar.position, { x: 0, y: 0.3, z: 0 })); - cameraUpdateInterval = Script.setInterval(updateRenderFromCamera, 10); + cameraUpdateInterval = Script.setInterval(updateRenderFromCamera, 11); // Update every 11ms (90.9hz) isUpdateRenderWired = true; camera = Entities.addEntity({ - "angularDamping": 0.98000001907348633, - "collisionsWillMove": 0, - "damping": 0.98000001907348633, + "angularDamping": 1, + "damping": 1, + "collidesWith": "static,dynamic,kinematic,", + "collisionMask": 7, "dynamic": cameraIsDynamic, - "modelURL": "http://hifi-content.s3.amazonaws.com/alan/dev/spectator-camera.fbx?1", + "modelURL": "http://hifi-content.s3.amazonaws.com/alan/dev/spectator-camera.fbx?7", + "registrationPoint": { + "x": 0.53, + "y": 0.545, + "z": 0.2 + }, "rotation": cameraRotation, "position": cameraPosition, "shapeType": "simple-compound", @@ -160,7 +165,6 @@ // Relevant Variables: // button: The tablet button. // buttonName: The name of the button. - // tablet: The tablet instance to be modified. // showInDesktop: Set to "true" to show the "SPECTATOR" app in desktop mode // // Arguments: @@ -172,24 +176,25 @@ // var button = false; var buttonName = "SPECTATOR"; - var tablet = null; var showSpectatorInDesktop = true; function addOrRemoveButton(isShuttingDown, isHMDMode) { - if (!button) { - if ((isHMDMode || showSpectatorInDesktop) && !isShuttingDown) { - button = tablet.addButton({ - text: buttonName - }); - button.clicked.connect(onTabletButtonClicked); + if (tablet) { + if (!button) { + if ((isHMDMode || showSpectatorInDesktop) && !isShuttingDown) { + button = tablet.addButton({ + text: buttonName + }); + button.clicked.connect(onTabletButtonClicked); + } + } else if (button) { + if ((!showSpectatorInDesktop || isShuttingDown)) { + button.clicked.disconnect(onTabletButtonClicked); + tablet.removeButton(button); + button = false; + } + } else { + print("ERROR adding/removing Spectator button!"); } - } else if (button) { - if ((!showSpectatorInDesktop || isShuttingDown) && !isHMDMode) { - button.clicked.disconnect(onTabletButtonClicked); - tablet.removeButton(button); - button = false; - } - } else { - print("ERROR adding/removing Spectator button!"); } } @@ -197,7 +202,7 @@ // Function Name: startup() // // Relevant Variables: - // None + // tablet: The tablet instance to be modified. // // Arguments: // None @@ -205,6 +210,7 @@ // Description: // startup() will be called when the script is loaded. // + var tablet = null; function startup() { tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); addOrRemoveButton(false, HMD.active); @@ -232,15 +238,17 @@ // var hasEventBridge = false; function wireEventBridge(on) { - if (on) { - if (!hasEventBridge) { - tablet.fromQml.connect(fromQml); - hasEventBridge = true; - } - } else { - if (hasEventBridge) { - tablet.fromQml.disconnect(fromQml); - hasEventBridge = false; + if (tablet) { + if (on) { + if (!hasEventBridge) { + tablet.fromQml.connect(fromQml); + hasEventBridge = true; + } + } else { + if (hasEventBridge) { + tablet.fromQml.disconnect(fromQml); + hasEventBridge = false; + } } } } @@ -281,7 +289,7 @@ parentID: camera, alpha: 1, localRotation: { w: 1, x: 0, y: 0, z: 0 }, - localPosition: { x: 0.007, y: 0.15, z: -0.005 }, + localPosition: { x: 0, y: 0.13, z: 0.112 }, dimensions: viewFinderOverlayDim }); } @@ -387,9 +395,8 @@ // Function Name: onTabletButtonClicked() // // Relevant Variables: + // SPECTATOR_CAMERA_QML_SOURCE: The path to the SpectatorCamera QML // onSpectatorCameraScreen: true/false depending on whether we're looking at the spectator camera app - // shouldActivateButton: true/false depending on whether we should show the button as white or gray the - // next time we edit the button's properties // // Arguments: // None @@ -397,20 +404,20 @@ // Description: // Fired when the Spectator Camera app button is pressed. // + var SPECTATOR_CAMERA_QML_SOURCE = "../SpectatorCamera.qml"; var onSpectatorCameraScreen = false; - var shouldActivateButton = false; function onTabletButtonClicked() { - if (onSpectatorCameraScreen) { - // for toolbar-mode: go back to home screen, this will close the window. - tablet.gotoHomeScreen(); - } else { - shouldActivateButton = true; - tablet.loadQMLSource("../SpectatorCamera.qml"); - onSpectatorCameraScreen = true; - sendToQml({ method: 'updateSpectatorCameraCheckbox', params: !!camera }); - sendToQml({ method: 'updateMonitorShowsSwitch', params: monitorShowsCameraView }); - sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); - Menu.setIsOptionChecked("Disable Preview", false); + if (tablet) { + if (onSpectatorCameraScreen) { + // for toolbar-mode: go back to home screen, this will close the window. + tablet.gotoHomeScreen(); + } else { + tablet.loadQMLSource(SPECTATOR_CAMERA_QML_SOURCE); + sendToQml({ method: 'updateSpectatorCameraCheckbox', params: !!camera }); + sendToQml({ method: 'updateMonitorShowsSwitch', params: monitorShowsCameraView }); + sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); + Menu.setIsOptionChecked("Disable Preview", false); + } } } @@ -428,13 +435,12 @@ // Called when the TabletScriptingInterface::screenChanged() signal is emitted. // function onTabletScreenChanged(type, url) { - wireEventBridge(shouldActivateButton); + onSpectatorCameraScreen = (type === "QML" && url === SPECTATOR_CAMERA_QML_SOURCE); + wireEventBridge(onSpectatorCameraScreen); // for toolbar mode: change button to active when window is first openend, false otherwise. if (button) { - button.editProperties({ isActive: shouldActivateButton }); + button.editProperties({ isActive: onSpectatorCameraScreen }); } - shouldActivateButton = false; - onSpectatorCameraScreen = false; } // @@ -523,7 +529,12 @@ Window.domainChanged.disconnect(spectatorCameraOff); Window.geometryChanged.disconnect(resizeViewFinderOverlay); addOrRemoveButton(true, HMD.active); - tablet.screenChanged.disconnect(onTabletScreenChanged); + if (tablet) { + tablet.screenChanged.disconnect(onTabletScreenChanged); + if (onSpectatorCameraScreen) { + tablet.gotoHomeScreen(); + } + } HMD.displayModeChanged.disconnect(onHMDChanged); Controller.keyPressEvent.disconnect(keyPressEvent); controllerMapping.disable(); From 3e7b1b5696ef5590604334d278814449ec168ded Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 28 Jun 2017 12:44:34 -0700 Subject: [PATCH 0656/1049] Slightly update registration point --- scripts/system/spectatorCamera.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 72e062338d..cf4df65e54 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -116,7 +116,7 @@ "registrationPoint": { "x": 0.53, "y": 0.545, - "z": 0.2 + "z": 0.16 }, "rotation": cameraRotation, "position": cameraPosition, @@ -289,7 +289,7 @@ parentID: camera, alpha: 1, localRotation: { w: 1, x: 0, y: 0, z: 0 }, - localPosition: { x: 0, y: 0.13, z: 0.112 }, + localPosition: { x: 0, y: 0.13, z: 0.126 }, dimensions: viewFinderOverlayDim }); } From 39ae28bfcfed8548cc7f713f4cff2f9c7b968ac0 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 28 Jun 2017 12:54:40 -0700 Subject: [PATCH 0657/1049] CR feedback --- scripts/system/spectatorCamera.js | 63 +++++++++++++++---------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index cf4df65e54..0f2adb664f 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -66,8 +66,6 @@ // Function Name: spectatorCameraOn() // // Relevant Variables: - // isUpdateRenderWired: Bool storing whether or not the camera's update - // function is wired. // vFoV: The vertical field of view of the spectator camera // nearClipPlaneDistance: The near clip plane distance of the spectator camera (aka "camera") // farClipPlaneDistance: The far clip plane distance of the spectator camera @@ -76,6 +74,7 @@ // glassPaneWidth: The width of the glass pane above the spectator camera that holds the viewFinderOverlay // viewFinderOverlayDim: The x, y, and z dimensions of the viewFinderOverlay // cameraUpdateInterval: Used when setting Script.setInterval() + // CAMERA_UPDATE_INTERVAL_MS: Defines the time between calls to updateRenderFromCamera() // // Arguments: // None @@ -84,7 +83,6 @@ // Call this function to set up the spectator camera and // spawn the camera entity. // - var isUpdateRenderWired = false; var vFoV = 45.0; var nearClipPlaneDistance = 0.1; var farClipPlaneDistance = 100.0; @@ -96,6 +94,7 @@ var glassPaneWidth = 0.16; var viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: 0 }; var cameraUpdateInterval; + var CAMERA_UPDATE_INTERVAL_MS = 11; // Result of (1000 (ms/s)) / (90 (hz)) rounded down function spectatorCameraOn() { // Sets the special texture size based on the window it is displayed in, which doesn't include the menu bar spectatorFrameRenderConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); @@ -105,7 +104,6 @@ beginSpectatorFrameRenderConfig.farClipPlaneDistance = farClipPlaneDistance; cameraRotation = MyAvatar.orientation, cameraPosition = inFrontOf(1, Vec3.sum(MyAvatar.position, { x: 0, y: 0.3, z: 0 })); cameraUpdateInterval = Script.setInterval(updateRenderFromCamera, 11); // Update every 11ms (90.9hz) - isUpdateRenderWired = true; camera = Entities.addEntity({ "angularDamping": 1, "damping": 1, @@ -144,10 +142,7 @@ // function spectatorCameraOff() { spectatorFrameRenderConfig.enabled = beginSpectatorFrameRenderConfig.enabled = false; - if (isUpdateRenderWired) { - Script.clearInterval(cameraUpdateInterval); - isUpdateRenderWired = false; - } + cameraUpdateInterval = Script.clearInterval(cameraUpdateInterval); if (camera) { Entities.deleteEntity(camera); } @@ -238,24 +233,26 @@ // var hasEventBridge = false; function wireEventBridge(on) { - if (tablet) { - if (on) { - if (!hasEventBridge) { - tablet.fromQml.connect(fromQml); - hasEventBridge = true; - } - } else { - if (hasEventBridge) { - tablet.fromQml.disconnect(fromQml); - hasEventBridge = false; - } + if (!tablet) { + print("Warning in wireEventBridge(): 'tablet' undefined!"); + return; + } + if (on) { + if (!hasEventBridge) { + tablet.fromQml.connect(fromQml); + hasEventBridge = true; + } + } else { + if (hasEventBridge) { + tablet.fromQml.disconnect(fromQml); + hasEventBridge = false; } } } function setDisplay(showCameraView) { - // It would be fancy if (showCameraView && !isUpdateRenderWired) would show instructions, but that's out of scope for now. - var url = (showCameraView && isUpdateRenderWired) ? "resource://spectatorCameraFrame" : ""; + // It would be fancy if (showCameraView && !cameraUpdateInterval) would show instructions, but that's out of scope for now. + var url = (showCameraView && cameraUpdateInterval) ? "resource://spectatorCameraFrame" : ""; Window.setDisplayTexture(url); } const MONITOR_SHOWS_CAMERA_VIEW_DEFAULT = false; @@ -407,17 +404,19 @@ var SPECTATOR_CAMERA_QML_SOURCE = "../SpectatorCamera.qml"; var onSpectatorCameraScreen = false; function onTabletButtonClicked() { - if (tablet) { - if (onSpectatorCameraScreen) { - // for toolbar-mode: go back to home screen, this will close the window. - tablet.gotoHomeScreen(); - } else { - tablet.loadQMLSource(SPECTATOR_CAMERA_QML_SOURCE); - sendToQml({ method: 'updateSpectatorCameraCheckbox', params: !!camera }); - sendToQml({ method: 'updateMonitorShowsSwitch', params: monitorShowsCameraView }); - sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); - Menu.setIsOptionChecked("Disable Preview", false); - } + if (!tablet) { + print("Warning in onTabletButtonClicked(): 'tablet' undefined!"); + return; + } + if (onSpectatorCameraScreen) { + // for toolbar-mode: go back to home screen, this will close the window. + tablet.gotoHomeScreen(); + } else { + tablet.loadQMLSource(SPECTATOR_CAMERA_QML_SOURCE); + sendToQml({ method: 'updateSpectatorCameraCheckbox', params: !!camera }); + sendToQml({ method: 'updateMonitorShowsSwitch', params: monitorShowsCameraView }); + sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); + Menu.setIsOptionChecked("Disable Preview", false); } } From 86eb5b14ca977fe236d34f4d5a6df73c8a805b48 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 28 Jun 2017 13:18:34 -0700 Subject: [PATCH 0658/1049] disable the user activity logger in DS/AC/ac-client --- assignment-client/src/AssignmentClientApp.cpp | 6 +++++- domain-server/src/DomainServer.cpp | 8 ++++++-- tools/ac-client/src/ACClientApp.cpp | 4 ++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/AssignmentClientApp.cpp b/assignment-client/src/AssignmentClientApp.cpp index 7e9042e609..91554d915b 100644 --- a/assignment-client/src/AssignmentClientApp.cpp +++ b/assignment-client/src/AssignmentClientApp.cpp @@ -13,9 +13,10 @@ #include #include -#include #include +#include #include +#include #include "Assignment.h" #include "AssignmentClient.h" @@ -207,6 +208,9 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : DependencyManager::registerInheritance(); + // the ACs should not send any user activity events so disable the logger ASAP + UserActivityLogger::getInstance().disable(true); + if (numForks || minForks || maxForks) { AssignmentClientMonitor* monitor = new AssignmentClientMonitor(numForks, minForks, maxForks, requestAssignmentType, assignmentPool, diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 8e3d04897b..545484d79d 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -40,11 +40,12 @@ #include #include #include +#include +#include +#include #include "DomainServerNodeData.h" #include "NodeConnectionData.h" -#include -#include int const DomainServer::EXIT_CODE_REBOOT = 234923; @@ -75,6 +76,9 @@ DomainServer::DomainServer(int argc, char* argv[]) : { parseCommandLine(); + // the DS should not send any user activity events so disable the logger ASAP + UserActivityLogger::getInstance().disable(true); + DependencyManager::set(); DependencyManager::set(); diff --git a/tools/ac-client/src/ACClientApp.cpp b/tools/ac-client/src/ACClientApp.cpp index b81d092662..34b7d5b049 100644 --- a/tools/ac-client/src/ACClientApp.cpp +++ b/tools/ac-client/src/ACClientApp.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include "ACClientApp.h" @@ -42,6 +43,8 @@ ACClientApp::ACClientApp(int argc, char* argv[]) : const QCommandLineOption listenPortOption("listenPort", "listen port", QString::number(INVALID_PORT)); parser.addOption(listenPortOption); + // the AC client should not send any user activity events so disable the logger ASAP + UserActivityLogger::getInstance().disable(true); if (!parser.parse(QCoreApplication::arguments())) { qCritical() << parser.errorText() << endl; @@ -66,6 +69,7 @@ ACClientApp::ACClientApp(int argc, char* argv[]) : const_cast(&shared())->setEnabled(QtInfoMsg, false); const_cast(&shared())->setEnabled(QtWarningMsg, false); } + QString domainServerAddress = "127.0.0.1:40103"; if (parser.isSet(domainAddressOption)) { From 1bebe8aede48888d776693780cfc22175947d35e Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 28 Jun 2017 13:49:05 -0700 Subject: [PATCH 0659/1049] Whoops! Missed an if() --- scripts/system/spectatorCamera.js | 34 ++++++++++++++++--------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 0f2adb664f..92d45b9838 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -173,23 +173,25 @@ var buttonName = "SPECTATOR"; var showSpectatorInDesktop = true; function addOrRemoveButton(isShuttingDown, isHMDMode) { - if (tablet) { - if (!button) { - if ((isHMDMode || showSpectatorInDesktop) && !isShuttingDown) { - button = tablet.addButton({ - text: buttonName - }); - button.clicked.connect(onTabletButtonClicked); - } - } else if (button) { - if ((!showSpectatorInDesktop || isShuttingDown)) { - button.clicked.disconnect(onTabletButtonClicked); - tablet.removeButton(button); - button = false; - } - } else { - print("ERROR adding/removing Spectator button!"); + if (!tablet) { + print("Warning in addOrRemoveButton(): 'tablet' undefined!"); + return; + } + if (!button) { + if ((isHMDMode || showSpectatorInDesktop) && !isShuttingDown) { + button = tablet.addButton({ + text: buttonName + }); + button.clicked.connect(onTabletButtonClicked); } + } else if (button) { + if ((!showSpectatorInDesktop || isShuttingDown)) { + button.clicked.disconnect(onTabletButtonClicked); + tablet.removeButton(button); + button = false; + } + } else { + print("ERROR adding/removing Spectator button!"); } } From 88ed69a4a12ae021edc33b7dde633f8bbbd2ae43 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 29 Jun 2017 08:58:27 +1200 Subject: [PATCH 0660/1049] Code review --- libraries/controllers/src/controllers/InputDevice.h | 3 --- plugins/hifiSixense/src/SixenseManager.cpp | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/libraries/controllers/src/controllers/InputDevice.h b/libraries/controllers/src/controllers/InputDevice.h index 7315868bb4..ff665d912d 100644 --- a/libraries/controllers/src/controllers/InputDevice.h +++ b/libraries/controllers/src/controllers/InputDevice.h @@ -95,9 +95,6 @@ protected: ButtonPressedMap _buttonPressedMap; AxisStateMap _axisStateMap; PoseStateMap _poseStateMap; - -private: - static float _reticleMoveSpeed; }; } diff --git a/plugins/hifiSixense/src/SixenseManager.cpp b/plugins/hifiSixense/src/SixenseManager.cpp index 88f73786bd..c2c1cb2ab2 100644 --- a/plugins/hifiSixense/src/SixenseManager.cpp +++ b/plugins/hifiSixense/src/SixenseManager.cpp @@ -54,7 +54,7 @@ bool SixenseManager::_sixenseLoaded = false; #define BAIL_IF_NOT_ENABLED \ if (!_isEnabled) { \ return; \ - } + } #define BAIL_IF_NOT_LOADED \ if (!_sixenseLoaded) { \ From cf921447489d06aa82f183049519d63804c5e7f7 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 28 Jun 2017 14:13:09 -0700 Subject: [PATCH 0661/1049] fix for OAuth OPTIONS firing on XHR 302 --- domain-server/resources/web/js/tables.js | 42 ++++++++++++++++-------- domain-server/src/DomainServer.cpp | 29 ++++++++++------ 2 files changed, 47 insertions(+), 24 deletions(-) diff --git a/domain-server/resources/web/js/tables.js b/domain-server/resources/web/js/tables.js index 09f85a7047..600e5a5f8e 100644 --- a/domain-server/resources/web/js/tables.js +++ b/domain-server/resources/web/js/tables.js @@ -2,11 +2,11 @@ $(document).ready(function(){ // setup the underscore templates var nodeTemplate = _.template($('#nodes-template').html()); var queuedTemplate = _.template($('#queued-template').html()); - + // setup a function to grab the assignments function getNodesAndAssignments() { $.getJSON("nodes.json", function(json){ - + json.nodes.sort(function(a, b){ if (a.type === b.type) { if (a.uptime < b.uptime) { @@ -16,36 +16,50 @@ $(document).ready(function(){ } else { return 0; } - } - + } + if (a.type === "agent" && b.type !== "agent") { return 1; } else if (b.type === "agent" && a.type !== "agent") { return -1; } - + if (a.type > b.type) { return 1; } - + if (a.type < b.type) { return -1; - } + } }); - + $('#nodes-table tbody').html(nodeTemplate(json)); + }).fail(function(jqXHR, textStatus, errorThrown) { + // we assume a 401 means the DS has restarted + // and no longer has our OAuth produced uuid + // so just reload and re-auth + if (jqXHR.status == 401) { + location.reload(); + } }); - - $.getJSON("assignments.json", function(json){ + + $.getJSON("assignments.json", function(json){ $('#assignments-table tbody').html(queuedTemplate(json)); + }).fail(function(jqXHR, textStatus, errorThrown) { + // we assume a 401 means the DS has restarted + // and no longer has our OAuth produced uuid + // so just reload and re-auth + if (jqXHR.status == 401) { + location.reload(); + } }); } - + // do the first GET on page load getNodesAndAssignments(); // grab the new assignments JSON every two seconds var getNodesAndAssignmentsInterval = setInterval(getNodesAndAssignments, 2000); - + // hook the node delete to the X button $(document.body).on('click', '.glyphicon-remove', function(){ // fire off a delete for this node @@ -57,10 +71,10 @@ $(document).ready(function(){ } }); }); - + $(document.body).on('click', '#kill-all-btn', function() { var confirmed_kill = confirm("Are you sure?"); - + if (confirmed_kill == true) { $.ajax({ url: "/nodes/", diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 8e3d04897b..9303bed2b5 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -2091,22 +2091,31 @@ bool DomainServer::isAuthenticatedRequest(HTTPConnection* connection, const QUrl // the user does not have allowed username or role, return 401 return false; } else { - // re-direct this user to OAuth page + static const QByteArray REQUESTED_WITH_HEADER = "X-Requested-With"; + static const QString XML_REQUESTED_WITH = "XMLHttpRequest"; - // generate a random state UUID to use - QUuid stateUUID = QUuid::createUuid(); + if (connection->requestHeaders().value(REQUESTED_WITH_HEADER) == XML_REQUESTED_WITH) { + // unauthorized XHR requests get a 401 and not a 302, since there isn't an XHR + // path to OAuth authorize + connection->respond(HTTPConnection::StatusCode401, UNAUTHENTICATED_BODY); + } else { + // re-direct this user to OAuth page - // add it to the set so we can handle the callback from the OAuth provider - _webAuthenticationStateSet.insert(stateUUID); + // generate a random state UUID to use + QUuid stateUUID = QUuid::createUuid(); - QUrl authURL = oauthAuthorizationURL(stateUUID); + // add it to the set so we can handle the callback from the OAuth provider + _webAuthenticationStateSet.insert(stateUUID); - Headers redirectHeaders; + QUrl authURL = oauthAuthorizationURL(stateUUID); - redirectHeaders.insert("Location", authURL.toEncoded()); + Headers redirectHeaders; - connection->respond(HTTPConnection::StatusCode302, - QByteArray(), HTTPConnection::DefaultContentType, redirectHeaders); + redirectHeaders.insert("Location", authURL.toEncoded()); + + connection->respond(HTTPConnection::StatusCode302, + QByteArray(), HTTPConnection::DefaultContentType, redirectHeaders); + } // we don't know about this user yet, so they are not yet authenticated return false; From 48de8011b28c8241dd00626640871c62c6b00f98 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Wed, 28 Jun 2017 14:15:29 -0700 Subject: [PATCH 0662/1049] cr feedback --- interface/src/Application.cpp | 3 ++- interface/src/Application.h | 1 + interface/src/main.cpp | 6 ++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 72e14656f3..a36b9ace93 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1185,7 +1185,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // we just want to see if --scripts was set, we've already parsed it and done // the change in PathUtils. Rather than pass that in the constructor, lets just // look (this could be debated) - QDir defaultScriptsLocation(getCmdOption(argc, constArgv, "--scripts")); + QString scriptsSwitch = QString("--").append(SCRIPTS_SWITCH); + QDir defaultScriptsLocation(getCmdOption(argc, constArgv, scriptsSwitch.toStdString().c_str())); if (!defaultScriptsLocation.exists()) { scriptEngines->loadDefaultScripts(); scriptEngines->defaultScriptsLocationOverridden(true); diff --git a/interface/src/Application.h b/interface/src/Application.h index a7aded006b..c26b3b215e 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -95,6 +95,7 @@ static const UINT UWM_SHOW_APPLICATION = #endif static const QString RUNNING_MARKER_FILENAME = "Interface.running"; +static const QString SCRIPTS_SWITCH = "scripts"; class Application; #if defined(qApp) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index ac1b6d5010..ebe6ebc7b5 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -73,7 +73,7 @@ int main(int argc, const char* argv[]) { QCommandLineOption serverContentPathOption("serverContentPath", "Where to find server content", "serverContentPath"); QCommandLineOption allowMultipleInstancesOption("allowMultipleInstances", "Allow multiple instances to run"); QCommandLineOption overrideAppLocalDataPathOption("cache", "set test cache ", "dir"); - QCommandLineOption overrideScriptsPathOption("scripts", "set scripts ", "path"); + QCommandLineOption overrideScriptsPathOption(SCRIPTS_SWITCH, "set scripts ", "path"); parser.addOption(urlOption); parser.addOption(noUpdaterOption); parser.addOption(checkMinSpecOption); @@ -101,7 +101,9 @@ int main(int argc, const char* argv[]) { if (allowMultipleInstances) { instanceMightBeRunning = false; } - + // this needs to be done here in main, as the mechanism for setting the + // scripts directory appears not to work. See the bug report + // https://highfidelity.fogbugz.com/f/cases/5759/Issues-changing-scripts-directory-in-ScriptsEngine if (parser.isSet(overrideScriptsPathOption)) { QDir scriptsPath(parser.value(overrideScriptsPathOption)); if (scriptsPath.exists()) { From 794495c197e1e99a380117cc6cef104455819b6d Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 28 Jun 2017 14:18:14 -0700 Subject: [PATCH 0663/1049] make ResourceManager be owned by DependencyManager --- assignment-client/src/Agent.cpp | 7 ++-- .../src/entities/EntityServer.cpp | 2 +- .../src/scripts/EntityScriptServer.cpp | 7 ++-- interface/src/Application.cpp | 6 ++-- interface/src/assets/ATPAssetMigrator.cpp | 3 +- interface/src/main.cpp | 2 +- .../src/scripting/TestScriptingInterface.cpp | 2 +- .../src/EntityTreeRenderer.cpp | 2 +- libraries/entities/src/EntityEditFilters.cpp | 2 +- libraries/fbx/src/OBJReader.cpp | 4 +-- .../src/model-networking/TextureCache.cpp | 4 +-- libraries/networking/src/AtpReply.cpp | 2 +- libraries/networking/src/ResourceCache.cpp | 2 +- libraries/networking/src/ResourceManager.cpp | 24 ++++++------- libraries/networking/src/ResourceManager.h | 34 ++++++++++++------- .../src/ResourceScriptingInterface.cpp | 2 +- libraries/octree/src/Octree.cpp | 3 +- .../procedural/src/procedural/Procedural.cpp | 2 +- .../src/FileScriptingInterface.cpp | 2 +- libraries/script-engine/src/ScriptCache.cpp | 8 ++--- libraries/script-engine/src/ScriptEngine.cpp | 2 +- tests/render-perf/src/main.cpp | 7 ++-- tests/render-texture-load/src/main.cpp | 4 +-- 23 files changed, 68 insertions(+), 65 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 260a6d6825..f336f1dad5 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -62,8 +62,6 @@ Agent::Agent(ReceivedMessage& message) : _entityEditSender.setPacketsPerSecond(DEFAULT_ENTITY_PPS_PER_SCRIPT); DependencyManager::get()->setPacketSender(&_entityEditSender); - ResourceManager::init(); - DependencyManager::registerInheritance(); DependencyManager::set(); @@ -81,6 +79,7 @@ Agent::Agent(ReceivedMessage& message) : DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); @@ -199,7 +198,7 @@ void Agent::requestScript() { return; } - auto request = ResourceManager::createResourceRequest(this, scriptURL); + auto request = DependencyManager::get()->createResourceRequest(this, scriptURL); if (!request) { qWarning() << "Could not create ResourceRequest for Agent script at" << scriptURL.toString(); @@ -779,7 +778,7 @@ void Agent::aboutToFinish() { // our entity tree is going to go away so tell that to the EntityScriptingInterface DependencyManager::get()->setEntityTree(nullptr); - ResourceManager::cleanup(); + DependencyManager::get()->cleanup(); // cleanup the AudioInjectorManager (and any still running injectors) DependencyManager::destroy(); diff --git a/assignment-client/src/entities/EntityServer.cpp b/assignment-client/src/entities/EntityServer.cpp index dc0a2add3a..afcbcf4f1e 100644 --- a/assignment-client/src/entities/EntityServer.cpp +++ b/assignment-client/src/entities/EntityServer.cpp @@ -31,9 +31,9 @@ EntityServer::EntityServer(ReceivedMessage& message) : OctreeServer(message), _entitySimulation(NULL) { - ResourceManager::init(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver.registerListenerForTypes({ PacketType::EntityAdd, PacketType::EntityEdit, PacketType::EntityErase, PacketType::EntityPhysics }, diff --git a/assignment-client/src/scripts/EntityScriptServer.cpp b/assignment-client/src/scripts/EntityScriptServer.cpp index 1b226ab642..489478ff9a 100644 --- a/assignment-client/src/scripts/EntityScriptServer.cpp +++ b/assignment-client/src/scripts/EntityScriptServer.cpp @@ -54,7 +54,7 @@ EntityScriptServer::EntityScriptServer(ReceivedMessage& message) : ThreadedAssig DependencyManager::get()->setPacketSender(&_entityEditSender); - ResourceManager::init(); + DependencyManager::set(); DependencyManager::registerInheritance(); @@ -67,7 +67,6 @@ EntityScriptServer::EntityScriptServer(ReceivedMessage& message) : ThreadedAssig DependencyManager::set(); DependencyManager::set(ScriptEngine::ENTITY_SERVER_SCRIPT); - auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver.registerListenerForTypes({ PacketType::OctreeStats, PacketType::EntityData, PacketType::EntityErase }, this, "handleOctreePacket"); @@ -493,7 +492,7 @@ void EntityScriptServer::checkAndCallPreload(const EntityItemID& entityID, bool if (entity && (reload || notRunning || details.scriptText != entity->getServerScripts())) { QString scriptUrl = entity->getServerScripts(); if (!scriptUrl.isEmpty()) { - scriptUrl = ResourceManager::normalizeURL(scriptUrl); + scriptUrl = DependencyManager::get()->normalizeURL(scriptUrl); qCDebug(entity_script_server) << "Loading entity server script" << scriptUrl << "for" << entityID; _entitiesScriptEngine->loadEntityScript(entityID, scriptUrl, reload); } @@ -551,7 +550,7 @@ void EntityScriptServer::aboutToFinish() { // our entity tree is going to go away so tell that to the EntityScriptingInterface DependencyManager::get()->setEntityTree(nullptr); - ResourceManager::cleanup(); + DependencyManager::get()->cleanup(); // cleanup the AudioInjectorManager (and any still running injectors) DependencyManager::destroy(); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c6741ee7e4..118d99997a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -582,6 +582,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); return previousSessionCrashed; } @@ -776,7 +777,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(this, &Application::activeDisplayPluginChanged, reinterpret_cast(audioScriptingInterface.data()), &scripting::Audio::onContextChanged); - ResourceManager::init(); // Make sure we don't time out during slow operations at startup updateHeartbeat(); @@ -1880,7 +1880,7 @@ Application::~Application() { DependencyManager::destroy(); DependencyManager::destroy(); - ResourceManager::cleanup(); + DependencyManager::get()->cleanup(); // remove the NodeList from the DependencyManager DependencyManager::destroy(); @@ -5940,7 +5940,7 @@ void Application::addAssetToWorldFromURL(QString url) { addAssetToWorldInfo(filename, "Downloading model file " + filename + "."); - auto request = ResourceManager::createResourceRequest(nullptr, QUrl(url)); + auto request = DependencyManager::get()->createResourceRequest(nullptr, QUrl(url)); connect(request, &ResourceRequest::finished, this, &Application::addAssetToWorldFromURLRequestFinished); request->send(); } diff --git a/interface/src/assets/ATPAssetMigrator.cpp b/interface/src/assets/ATPAssetMigrator.cpp index e0e9d5a73a..667c2587b0 100644 --- a/interface/src/assets/ATPAssetMigrator.cpp +++ b/interface/src/assets/ATPAssetMigrator.cpp @@ -106,7 +106,8 @@ void ATPAssetMigrator::loadEntityServerFile() { jsonValue = entityObject; } else if (wantsToMigrateResource(migrationURL)) { - auto request = ResourceManager::createResourceRequest(this, migrationURL); + auto request = + DependencyManager::get()->createResourceRequest(this, migrationURL); if (request) { qCDebug(asset_migrator) << "Requesting" << migrationURL << "for ATP asset migration"; diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 67e248506f..88493f9944 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -106,7 +106,7 @@ int main(int argc, const char* argv[]) { // tell everyone to use the right cache location // // this handles data8 and prepared - ResourceManager::setCacheDir(cacheDir); + DependencyManager::get()->setCacheDir(cacheDir); // this does the ktx_cache PathUtils::getAppLocalDataPath(cacheDir); diff --git a/interface/src/scripting/TestScriptingInterface.cpp b/interface/src/scripting/TestScriptingInterface.cpp index b8892fae7e..84c742d0ab 100644 --- a/interface/src/scripting/TestScriptingInterface.cpp +++ b/interface/src/scripting/TestScriptingInterface.cpp @@ -62,7 +62,7 @@ bool TestScriptingInterface::loadTestScene(QString scene) { static const QString TEST_SCRIPTS_ROOT = TEST_ROOT + "scripts/"; static const QString TEST_SCENES_ROOT = TEST_ROOT + "scenes/"; return DependencyManager::get()->returnFromUiThread([scene]()->QVariant { - ResourceManager::setUrlPrefixOverride("atp:/", TEST_BINARY_ROOT + scene + ".atp/"); + DependencyManager::get()->setUrlPrefixOverride("atp:/", TEST_BINARY_ROOT + scene + ".atp/"); auto tree = qApp->getEntities()->getTree(); auto treeIsClient = tree->getIsClient(); // Force the tree to accept the load regardless of permissions diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index c02bde2244..1684c06512 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -853,7 +853,7 @@ void EntityTreeRenderer::checkAndCallPreload(const EntityItemID& entityID, bool entity->scriptHasUnloaded(); } if (shouldLoad) { - scriptUrl = ResourceManager::normalizeURL(scriptUrl); + scriptUrl = DependencyManager::get()->normalizeURL(scriptUrl); _entitiesScriptEngine->loadEntityScript(entityID, scriptUrl, reload); entity->scriptHasPreloaded(); } diff --git a/libraries/entities/src/EntityEditFilters.cpp b/libraries/entities/src/EntityEditFilters.cpp index d62495d95e..5359ebd31b 100644 --- a/libraries/entities/src/EntityEditFilters.cpp +++ b/libraries/entities/src/EntityEditFilters.cpp @@ -132,7 +132,7 @@ void EntityEditFilters::addFilter(EntityItemID entityID, QString filterURL) { _filterDataMap.insert(entityID, filterData); _lock.unlock(); - auto scriptRequest = ResourceManager::createResourceRequest(this, scriptURL); + auto scriptRequest = DependencyManager::get()->createResourceRequest(this, scriptURL); if (!scriptRequest) { qWarning() << "Could not create ResourceRequest for Entity Edit filter script at" << scriptURL.toString(); scriptRequestFinished(entityID); diff --git a/libraries/fbx/src/OBJReader.cpp b/libraries/fbx/src/OBJReader.cpp index 1445d14d84..417901b9ab 100644 --- a/libraries/fbx/src/OBJReader.cpp +++ b/libraries/fbx/src/OBJReader.cpp @@ -202,7 +202,7 @@ bool OBJReader::isValidTexture(const QByteArray &filename) { } QUrl candidateUrl = _url.resolved(QUrl(filename)); - return ResourceManager::resourceExists(candidateUrl); + return DependencyManager::get()->resourceExists(candidateUrl); } void OBJReader::parseMaterialLibrary(QIODevice* device) { @@ -267,7 +267,7 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) { } std::tuple requestData(QUrl& url) { - auto request = ResourceManager::createResourceRequest(nullptr, url); + auto request = DependencyManager::get()->createResourceRequest(nullptr, url); if (!request) { return std::make_tuple(false, QByteArray()); diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index ed1715219a..5c8f59f20f 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -384,7 +384,7 @@ void NetworkTexture::makeRequest() { // Add a fragment to the base url so we can identify the section of the ktx being requested when debugging // The actual requested url is _activeUrl and will not contain the fragment _url.setFragment("head"); - _ktxHeaderRequest = ResourceManager::createResourceRequest(this, _activeUrl); + _ktxHeaderRequest = DependencyManager::get()->createResourceRequest(this, _activeUrl); if (!_ktxHeaderRequest) { qCDebug(networking).noquote() << "Failed to get request for" << _url.toDisplayString(); @@ -454,7 +454,7 @@ void NetworkTexture::startMipRangeRequest(uint16_t low, uint16_t high) { bool isHighMipRequest = low == NULL_MIP_LEVEL && high == NULL_MIP_LEVEL; - _ktxMipRequest = ResourceManager::createResourceRequest(this, _activeUrl); + _ktxMipRequest = DependencyManager::get()->createResourceRequest(this, _activeUrl); if (!_ktxMipRequest) { qCWarning(networking).noquote() << "Failed to get request for" << _url.toDisplayString(); diff --git a/libraries/networking/src/AtpReply.cpp b/libraries/networking/src/AtpReply.cpp index 4440995ee0..6417478005 100644 --- a/libraries/networking/src/AtpReply.cpp +++ b/libraries/networking/src/AtpReply.cpp @@ -13,7 +13,7 @@ #include "AtpReply.h" AtpReply::AtpReply(const QUrl& url, QObject* parent) : - _resourceRequest(ResourceManager::createResourceRequest(parent, url)) { + _resourceRequest(DependencyManager::get()->createResourceRequest(parent, url)) { setOperation(QNetworkAccessManager::GetOperation); connect(_resourceRequest, &AssetResourceRequest::progress, this, &AtpReply::downloadProgress); diff --git a/libraries/networking/src/ResourceCache.cpp b/libraries/networking/src/ResourceCache.cpp index 88ea68780b..f07514cd85 100644 --- a/libraries/networking/src/ResourceCache.cpp +++ b/libraries/networking/src/ResourceCache.cpp @@ -672,7 +672,7 @@ void Resource::makeRequest() { PROFILE_ASYNC_BEGIN(resource, "Resource:" + getType(), QString::number(_requestID), { { "url", _url.toString() }, { "activeURL", _activeUrl.toString() } }); - _request = ResourceManager::createResourceRequest(this, _activeUrl); + _request = DependencyManager::get()->createResourceRequest(this, _activeUrl); if (!_request) { qCDebug(networking).noquote() << "Failed to get request for" << _url.toDisplayString(); diff --git a/libraries/networking/src/ResourceManager.cpp b/libraries/networking/src/ResourceManager.cpp index e4357ca507..e9fe2f1ec1 100644 --- a/libraries/networking/src/ResourceManager.cpp +++ b/libraries/networking/src/ResourceManager.cpp @@ -24,10 +24,16 @@ #include "NetworkAccessManager.h" #include "NetworkLogging.h" -QThread ResourceManager::_thread; -ResourceManager::PrefixMap ResourceManager::_prefixMap; -QMutex ResourceManager::_prefixMapLock; -QString ResourceManager::_cacheDir; + +ResourceManager::ResourceManager() { + _thread.setObjectName("Resource Manager Thread"); + + auto assetClient = DependencyManager::set(_cacheDir); + assetClient->moveToThread(&_thread); + QObject::connect(&_thread, &QThread::started, assetClient.data(), &AssetClient::init); + + _thread.start(); +} void ResourceManager::setUrlPrefixOverride(const QString& prefix, const QString& replacement) { QMutexLocker locker(&_prefixMapLock); @@ -75,16 +81,6 @@ QUrl ResourceManager::normalizeURL(const QUrl& originalUrl) { return url; } -void ResourceManager::init() { - _thread.setObjectName("Resource Manager Thread"); - - auto assetClient = DependencyManager::set(_cacheDir); - assetClient->moveToThread(&_thread); - QObject::connect(&_thread, &QThread::started, assetClient.data(), &AssetClient::init); - - _thread.start(); -} - void ResourceManager::cleanup() { // cleanup the AssetClient thread DependencyManager::destroy(); diff --git a/libraries/networking/src/ResourceManager.h b/libraries/networking/src/ResourceManager.h index 699573ddd6..4e7cd3d92d 100644 --- a/libraries/networking/src/ResourceManager.h +++ b/libraries/networking/src/ResourceManager.h @@ -14,7 +14,11 @@ #include +#include #include +#include + +#include #include "ResourceRequest.h" @@ -24,34 +28,38 @@ const QString URL_SCHEME_HTTPS = "https"; const QString URL_SCHEME_FTP = "ftp"; const QString URL_SCHEME_ATP = "atp"; -class ResourceManager { +class ResourceManager: public QObject, public Dependency { + Q_OBJECT + SINGLETON_DEPENDENCY + public: + ResourceManager(); - static void setUrlPrefixOverride(const QString& prefix, const QString& replacement); - static QString normalizeURL(const QString& urlString); - static QUrl normalizeURL(const QUrl& url); + void setUrlPrefixOverride(const QString& prefix, const QString& replacement); + QString normalizeURL(const QString& urlString); + QUrl normalizeURL(const QUrl& url); - static ResourceRequest* createResourceRequest(QObject* parent, const QUrl& url); + ResourceRequest* createResourceRequest(QObject* parent, const QUrl& url); - static void init(); - static void cleanup(); + void init(); + void cleanup(); // Blocking call to check if a resource exists. This function uses a QEventLoop internally // to return to the calling thread so that events can still be processed. - static bool resourceExists(const QUrl& url); + bool resourceExists(const QUrl& url); // adjust where we persist the cache - static void setCacheDir(const QString& cacheDir); + void setCacheDir(const QString& cacheDir); private: - static QThread _thread; + QThread _thread; using PrefixMap = std::map; - static PrefixMap _prefixMap; - static QMutex _prefixMapLock; + PrefixMap _prefixMap; + QMutex _prefixMapLock; - static QString _cacheDir; + QString _cacheDir; }; #endif diff --git a/libraries/networking/src/ResourceScriptingInterface.cpp b/libraries/networking/src/ResourceScriptingInterface.cpp index 38be49049c..3227d44de1 100644 --- a/libraries/networking/src/ResourceScriptingInterface.cpp +++ b/libraries/networking/src/ResourceScriptingInterface.cpp @@ -11,5 +11,5 @@ #include "ResourceManager.h" void ResourceScriptingInterface::overrideUrlPrefix(const QString& prefix, const QString& replacement) { - ResourceManager::setUrlPrefixOverride(prefix, replacement); + DependencyManager::get()->setUrlPrefixOverride(prefix, replacement); } diff --git a/libraries/octree/src/Octree.cpp b/libraries/octree/src/Octree.cpp index 180f25f106..2e93f3515f 100644 --- a/libraries/octree/src/Octree.cpp +++ b/libraries/octree/src/Octree.cpp @@ -1668,7 +1668,8 @@ bool Octree::readJSONFromGzippedFile(QString qFileName) { } bool Octree::readFromURL(const QString& urlString) { - auto request = std::unique_ptr(ResourceManager::createResourceRequest(this, urlString)); + auto request = + std::unique_ptr(DependencyManager::get()->createResourceRequest(this, urlString)); if (!request) { return false; diff --git a/libraries/procedural/src/procedural/Procedural.cpp b/libraries/procedural/src/procedural/Procedural.cpp index e4ce3c691a..c38e562672 100644 --- a/libraries/procedural/src/procedural/Procedural.cpp +++ b/libraries/procedural/src/procedural/Procedural.cpp @@ -103,7 +103,7 @@ bool Procedural::parseVersion(const QJsonValue& version) { } bool Procedural::parseShader(const QUrl& shaderPath) { - auto shaderUrl = ResourceManager::normalizeURL(shaderPath); + auto shaderUrl = DependencyManager::get()->normalizeURL(shaderPath); if (!shaderUrl.isValid()) { if (!shaderUrl.isEmpty()) { diff --git a/libraries/script-engine/src/FileScriptingInterface.cpp b/libraries/script-engine/src/FileScriptingInterface.cpp index 2f5cc2bc88..30d0a3a201 100644 --- a/libraries/script-engine/src/FileScriptingInterface.cpp +++ b/libraries/script-engine/src/FileScriptingInterface.cpp @@ -85,7 +85,7 @@ QString FileScriptingInterface::convertUrlToPath(QUrl url) { // this function is not in use void FileScriptingInterface::downloadZip(QString path, const QString link) { QUrl url = QUrl(link); - auto request = ResourceManager::createResourceRequest(nullptr, url); + auto request = DependencyManager::get()->createResourceRequest(nullptr, url); connect(request, &ResourceRequest::finished, this, [this, path]{ unzipFile(path, ""); // so intellisense isn't mad }); diff --git a/libraries/script-engine/src/ScriptCache.cpp b/libraries/script-engine/src/ScriptCache.cpp index 601ca6bc95..dba2db0458 100644 --- a/libraries/script-engine/src/ScriptCache.cpp +++ b/libraries/script-engine/src/ScriptCache.cpp @@ -57,7 +57,7 @@ void ScriptCache::clearATPScriptsFromCache() { } void ScriptCache::deleteScript(const QUrl& unnormalizedURL) { - QUrl url = ResourceManager::normalizeURL(unnormalizedURL); + QUrl url = DependencyManager::get()->normalizeURL(unnormalizedURL); Lock lock(_containerLock); if (_scriptCache.contains(url)) { qCDebug(scriptengine) << "Delete script from cache:" << url.toString(); @@ -70,7 +70,7 @@ void ScriptCache::getScriptContents(const QString& scriptOrURL, contentAvailable qCDebug(scriptengine) << "ScriptCache::getScriptContents() on thread [" << QThread::currentThread() << "] expected thread [" << thread() << "]"; #endif QUrl unnormalizedURL(scriptOrURL); - QUrl url = ResourceManager::normalizeURL(unnormalizedURL); + QUrl url = DependencyManager::get()->normalizeURL(unnormalizedURL); // attempt to determine if this is a URL to a script, or if this is actually a script itself (which is valid in the // entityScript use case) @@ -109,7 +109,7 @@ void ScriptCache::getScriptContents(const QString& scriptOrURL, contentAvailable #ifdef THREAD_DEBUGGING qCDebug(scriptengine) << "about to call: ResourceManager::createResourceRequest(this, url); on thread [" << QThread::currentThread() << "] expected thread [" << thread() << "]"; #endif - auto request = ResourceManager::createResourceRequest(nullptr, url); + auto request = DependencyManager::get()->createResourceRequest(nullptr, url); Q_ASSERT(request); request->setCacheEnabled(!forceDownload); connect(request, &ResourceRequest::finished, this, [=]{ scriptContentAvailable(maxRetries); }); @@ -166,7 +166,7 @@ void ScriptCache::scriptContentAvailable(int maxRetries) { qCDebug(scriptengine) << QString("Retrying script request [%1 / %2]: %3") .arg(attempt).arg(maxRetries).arg(url.toString()); - auto request = ResourceManager::createResourceRequest(nullptr, url); + auto request = DependencyManager::get()->createResourceRequest(nullptr, url); Q_ASSERT(request); // We've already made a request, so the cache must be disabled or it wasn't there, so enabling diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 48f8b07a4a..11bb044d72 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1762,7 +1762,7 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac QList urls; for (QString includeFile : includeFiles) { - QString file = ResourceManager::normalizeURL(includeFile); + QString file = DependencyManager::get()->normalizeURL(includeFile); QUrl thisURL; bool isStandardLibrary = false; if (file.startsWith("/~/")) { diff --git a/tests/render-perf/src/main.cpp b/tests/render-perf/src/main.cpp index 552dc3d270..50f92ec3b9 100644 --- a/tests/render-perf/src/main.cpp +++ b/tests/render-perf/src/main.cpp @@ -494,6 +494,7 @@ public: DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); } QTestWindow() { @@ -520,8 +521,6 @@ public: _entitySimulation = simpleSimulation; } - ResourceManager::init(); - setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); _size = QSize(800, 600); _renderThread._size = _size; @@ -575,7 +574,7 @@ public: DependencyManager::destroy(); DependencyManager::destroy(); DependencyManager::destroy(); - ResourceManager::cleanup(); + DependencyManager::get()->cleanup(); // remove the NodeList from the DependencyManager DependencyManager::destroy(); } @@ -998,7 +997,7 @@ private: QFileInfo atpPathInfo(atpPath); if (atpPathInfo.exists()) { QString atpUrl = QUrl::fromLocalFile(atpPath).toString(); - ResourceManager::setUrlPrefixOverride("atp:/", atpUrl + "/"); + DependencyManager::get()->setUrlPrefixOverride("atp:/", atpUrl + "/"); } _octree->clear(); _octree->getTree()->readFromURL(fileName); diff --git a/tests/render-texture-load/src/main.cpp b/tests/render-texture-load/src/main.cpp index f426cd8024..5920e04558 100644 --- a/tests/render-texture-load/src/main.cpp +++ b/tests/render-texture-load/src/main.cpp @@ -289,6 +289,7 @@ public: DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); } struct TextureLoad { @@ -329,7 +330,6 @@ public: installEventFilter(this); QThreadPool::globalInstance()->setMaxThreadCount(2); QThread::currentThread()->setPriority(QThread::HighestPriority); - ResourceManager::init(); setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); _size = QSize(800, 600); _renderThread._size = _size; @@ -369,7 +369,7 @@ public: DependencyManager::destroy(); DependencyManager::destroy(); DependencyManager::destroy(); - ResourceManager::cleanup(); + DependencyManager::get()->cleanup(); } protected: From 9f8a6c63cca316ab75a350d7640723b6a74378f6 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 28 Jun 2017 14:44:26 -0700 Subject: [PATCH 0664/1049] Fixup after merge --- scripts/system/spectatorCamera.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index d4d387b1b7..1fa2f78fcb 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -162,7 +162,7 @@ button.clicked.connect(onTabletButtonClicked); } } else if (button) { - if ((!showSpectatorInDesktop || isShuttingDown) && !isHMDMode) { + if (!showSpectatorInDesktop || isShuttingDown) { button.clicked.disconnect(onTabletButtonClicked); tablet.removeButton(button); button = false; From be0e1a75a4cf84f82a096379a4837546d200b90e Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 29 Jun 2017 10:03:58 +1200 Subject: [PATCH 0665/1049] User-friendly SDL2 controller name --- .../resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml | 2 +- .../resources/qml/hifi/tablet/TabletGeneralPreferences.qml | 2 +- plugins/hifiSdl2/src/SDL2Manager.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml index 605e2e79db..33a5e62b1f 100644 --- a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml +++ b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml @@ -17,7 +17,7 @@ PreferencesDialog { id: root objectName: "GeneralPreferencesDialog" title: "General Settings" - showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Sixense Controllers", "Perception Neuron", "Kinect"] + showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "Game Controller", "Sixense Controllers", "Perception Neuron", "Kinect"] property var settings: Settings { category: root.objectName property alias x: root.x diff --git a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml index 2558100d0f..005f09afe6 100644 --- a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml @@ -32,6 +32,6 @@ StackView { TabletPreferencesDialog { id: root objectName: "TabletGeneralPreferences" - showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "SDL2 Joystick", "Sixense Controllers", "Perception Neuron", "Kinect", "Vive Pucks Configuration"] + showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "Game Controller", "Sixense Controllers", "Perception Neuron", "Kinect", "Vive Pucks Configuration"] } } diff --git a/plugins/hifiSdl2/src/SDL2Manager.cpp b/plugins/hifiSdl2/src/SDL2Manager.cpp index 2f7d91846d..021cb4dfec 100644 --- a/plugins/hifiSdl2/src/SDL2Manager.cpp +++ b/plugins/hifiSdl2/src/SDL2Manager.cpp @@ -57,7 +57,7 @@ void SDL2Manager::init() { loadSettings(); auto preferences = DependencyManager::get(); - static const QString SDL2_PLUGIN { "SDL2 Joystick" }; + static const QString SDL2_PLUGIN { "Game Controller" }; { auto getter = [this]()->bool { return _isEnabled; }; auto setter = [this](bool value) { From 218b32e9fba14350f55eb56932e1bae0204619d9 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 28 Jun 2017 15:12:57 -0700 Subject: [PATCH 0666/1049] Fix cameraUpdateInterval --- scripts/system/spectatorCamera.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 1fa2f78fcb..5154322daa 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -123,7 +123,10 @@ // destroy the camera entity. function spectatorCameraOff() { spectatorFrameRenderConfig.enabled = beginSpectatorFrameRenderConfig.enabled = false; - cameraUpdateInterval = Script.clearInterval(cameraUpdateInterval); + if (cameraUpdateInterval) { + Script.clearInterval(cameraUpdateInterval); + cameraUpdateInterval = false; + } if (camera) { Entities.deleteEntity(camera); } From e6be838e79101cb3abc2e95fa150fc4b0e841930 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 28 Jun 2017 15:30:49 -0700 Subject: [PATCH 0667/1049] Update snapshot.js --- scripts/system/snapshot.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index c60e3a67f7..e033ba9f44 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -504,7 +504,14 @@ function takeSnapshot() { Window.takeSnapshot(false, includeAnimated, 1.91); }, SNAPSHOT_DELAY); }, FINISH_SOUND_DELAY); +UserActivityLogger.logAction("snapshot_taken", logDetails()); } + + function logDetails() { + return { + current_domain: location.href + }; + } function isDomainOpen(id, callback) { print("Checking open status of domain with ID:", id); From a7e4dc1473b7ef7efba024de1f1911611158ad56 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 28 Jun 2017 23:51:00 +0100 Subject: [PATCH 0668/1049] clean up code --- .../qml/hifi/tablet/OpenVrConfiguration.qml | 41 ++++++++++-------- plugins/openvr/src/ViveControllerManager.cpp | 42 +++++-------------- plugins/openvr/src/ViveControllerManager.h | 4 +- 3 files changed, 36 insertions(+), 51 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml index 3b3f23b1d8..96413534c3 100644 --- a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml +++ b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml @@ -649,34 +649,39 @@ Rectangle { to: 0 } + function logAction(action, status) { + console.log("calibrated from ui"); + var data = { + "num_pucks": status["puckCount"], + "puck_configuration": status["configuration"], + "head_puck": status["head_puck"], + "hand_puck": status["hand_pucks"] + } + UserActivityLogger.logAction(action, data); + } + function calibrationStatusInfo(status) { var calibrationScreen = stack.currentItem; + + if (!status["UI"]) { + calibratingScreen = screen.createObject(); + stack.push(calibratingScreen); + } + if (status["calibrated"]) { calibrationScreen.success(); - var data = { - "num_pucks": status["puckCount"], - "puck_configuration": status["configuration"], - "head_puck": status["head_puck"], - "hand_puck": status["hand_puck"] + + if (status["UI"]) { + logAction("mocap_ui_success", status); } - UserActivityLogger.logAction("mocap_ui_success", data); } else if (!status["calibrated"]) { - var uncalibrated = status["success"]; - if (!uncalibrated) { - calibrationScreen.failure(); - - var data = { - "num_pucks": status["puckCount"], - "puck_configuration": status["configuration"], - "head_puck": status["head_puck"], - "hand_puck": status["hand_puck"] - } + calibrationScreen.failure(); - UserActivityLogger.logAction("mocap_ui_fail", data); + if (status["UI"]) { + logAction("mocap_ui_failed", status); } } - updateCalibrationButton(); } diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index ba5fc7e288..ca211a9cfe 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -249,6 +249,7 @@ ViveControllerManager::InputDevice::InputDevice(vr::IVRSystem*& system) : contro _configStringMap[Config::FeetAndHips] = QString("FeetAndHips"); _configStringMap[Config::FeetHipsAndChest] = QString("FeetHipsAndChest"); _configStringMap[Config::FeetHipsAndShoulders] = QString("FeetHipsAndShoulders"); + _configStringMap[Config::FeetHipsChestAndShoulders] = QString("FeetHipsChestAndShoulders"); } void ViveControllerManager::InputDevice::update(float deltaTime, const controller::InputCalibrationData& inputCalibrationData) { @@ -325,6 +326,7 @@ void ViveControllerManager::InputDevice::calibrateFromUI(const controller::Input if (_calibrate) { uncalibrate(); calibrate(inputCalibrationData); + emitCalibrationStatus(); _calibrate = false; } } @@ -378,32 +380,17 @@ QJsonObject ViveControllerManager::InputDevice::configurationSettings() { return configurationSettings; } -void ViveControllerManager::InputDevice::emitCalibrationStatus(const bool success) { +void ViveControllerManager::InputDevice::emitCalibrationStatus() { auto inputConfiguration = DependencyManager::get(); QJsonObject status = QJsonObject(); - - if (_calibrated && success) { - status["calibrated"] = _calibrated; - status["configuration"] = configToString(_preferedConfig); - status["head_puck"] = (_headConfig == HeadConfig::Puck) ? true : false; - status["hand_pucks"] = (_handConfig == HandConfig::Pucks) ? true : false; - status["puckCount"] = (int)_validTrackedObjects.size(); - } else if (!_calibrated && !success) { - status["calibrated"] = _calibrated; - status["success"] = success; - status["success"] = (int)_validTrackedObjects.size(); - status["head_puck"] = (_headConfig == HeadConfig::Puck) ? true : false; - status["hand_pucks"] = (_handConfig == HandConfig::Pucks) ? true : false; - } else if (!_calibrated && success) { - status["calibrated"] = _calibrated; - status["success"] = success; - status["configuration"] = configToString(_preferedConfig); - status["puckCount"] = (int)_validTrackedObjects.size(); - status["head_puck"] = (_headConfig == HeadConfig::Puck) ? true : false; - status["hand_pucks"] = (_handConfig == HandConfig::Pucks) ? true : false; - } + status["calibrated"] = _calibrated; + status["configuration"] = configToString(_preferedConfig); + status["head_puck"] = (_headConfig == HeadConfig::Puck) ? true : false; + status["hand_pucks"] = (_handConfig == HandConfig::Pucks) ? true : false; + status["puckCount"] = (int)_validTrackedObjects.size(); + status["UI"] = _calibrate; - emit inputConfiguration->calibrationStatus(status); //inputConfiguration->calibrated(status); + emit inputConfiguration->calibrationStatus(status); } void ViveControllerManager::InputDevice::handleTrackedObject(uint32_t deviceIndex, const controller::InputCalibrationData& inputCalibrationData) { @@ -460,16 +447,14 @@ void ViveControllerManager::InputDevice::sendUserActivityData(QString activity) void ViveControllerManager::InputDevice::calibrateOrUncalibrate(const controller::InputCalibrationData& inputCalibration) { if (!_calibrated) { calibrate(inputCalibration); - if (_calibrated) { sendUserActivityData("mocap_button_success"); } else { sendUserActivityData("mocap_button_fail"); } - + emitCalibrationStatus(); } else { uncalibrate(); - emitCalibrationStatus(true); sendUserActivityData("mocap_button_uncalibrate"); } } @@ -482,7 +467,6 @@ void ViveControllerManager::InputDevice::calibrate(const controller::InputCalibr if (puckCount == 0) { uncalibrate(); - emitCalibrationStatus(false); return; } @@ -501,10 +485,8 @@ void ViveControllerManager::InputDevice::calibrate(const controller::InputCalibr if (!headConfigured || !handsConfigured || !bodyConfigured) { uncalibrate(); - emitCalibrationStatus(false); } else { _calibrated = true; - emitCalibrationStatus(true); qDebug() << "PuckCalibration: " << configToString(_config) << " Configuration Successful"; } } @@ -594,8 +576,6 @@ bool ViveControllerManager::InputDevice::configureBody(glm::mat4& defaultToRefer return true; } qDebug() << "Puck Calibration: " << configToString(_config) << " Config Failed: Could not meet the minimal # of pucks"; - uncalibrate(); - emitCalibrationStatus(false); return false; } diff --git a/plugins/openvr/src/ViveControllerManager.h b/plugins/openvr/src/ViveControllerManager.h index 19b485ad55..8397f8d804 100644 --- a/plugins/openvr/src/ViveControllerManager.h +++ b/plugins/openvr/src/ViveControllerManager.h @@ -107,7 +107,7 @@ private: void calibrateHead(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration); void calibrateFromHandController(const controller::InputCalibrationData& inputCalibrationData); void calibrateFromUI(const controller::InputCalibrationData& inputCalibrationData); - void emitCalibrationStatus(const bool success); + void emitCalibrationStatus(); void calibrateNextFrame(); @@ -140,7 +140,7 @@ private: FeetAndHips, FeetHipsAndChest, FeetHipsAndShoulders, - FeetHipsChestAndShoulders, + FeetHipsChestAndShoulders }; enum class HeadConfig { From 93679f7c3be1899fbe5ae534ff5fd50b3ad79bc1 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Thu, 29 Jun 2017 00:52:51 +0200 Subject: [PATCH 0669/1049] move the ResourceManager init back to where it was, to prevent problems --- assignment-client/src/Agent.cpp | 3 ++- assignment-client/src/entities/EntityServer.cpp | 2 +- tests/render-perf/src/main.cpp | 3 ++- tests/render-texture-load/src/main.cpp | 4 ++-- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index f336f1dad5..8aec5adb1f 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -62,6 +62,8 @@ Agent::Agent(ReceivedMessage& message) : _entityEditSender.setPacketsPerSecond(DEFAULT_ENTITY_PPS_PER_SCRIPT); DependencyManager::get()->setPacketSender(&_entityEditSender); + DependencyManager::set(); + DependencyManager::registerInheritance(); DependencyManager::set(); @@ -79,7 +81,6 @@ Agent::Agent(ReceivedMessage& message) : DependencyManager::set(); DependencyManager::set(); - DependencyManager::set(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); diff --git a/assignment-client/src/entities/EntityServer.cpp b/assignment-client/src/entities/EntityServer.cpp index afcbcf4f1e..ac686e2e0a 100644 --- a/assignment-client/src/entities/EntityServer.cpp +++ b/assignment-client/src/entities/EntityServer.cpp @@ -31,9 +31,9 @@ EntityServer::EntityServer(ReceivedMessage& message) : OctreeServer(message), _entitySimulation(NULL) { + DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); - DependencyManager::set(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver.registerListenerForTypes({ PacketType::EntityAdd, PacketType::EntityEdit, PacketType::EntityErase, PacketType::EntityPhysics }, diff --git a/tests/render-perf/src/main.cpp b/tests/render-perf/src/main.cpp index 50f92ec3b9..61608f12aa 100644 --- a/tests/render-perf/src/main.cpp +++ b/tests/render-perf/src/main.cpp @@ -494,7 +494,6 @@ public: DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); - DependencyManager::set(); } QTestWindow() { @@ -520,6 +519,8 @@ public: _octree->getTree()->setSimulation(simpleSimulation); _entitySimulation = simpleSimulation; } + + DependencyManager::set(); setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); _size = QSize(800, 600); diff --git a/tests/render-texture-load/src/main.cpp b/tests/render-texture-load/src/main.cpp index 5920e04558..d85fcd6a32 100644 --- a/tests/render-texture-load/src/main.cpp +++ b/tests/render-texture-load/src/main.cpp @@ -289,7 +289,6 @@ public: DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); - DependencyManager::set(); } struct TextureLoad { @@ -329,7 +328,8 @@ public: installEventFilter(this); QThreadPool::globalInstance()->setMaxThreadCount(2); - QThread::currentThread()->setPriority(QThread::HighestPriority); + QThread::currentThread()->setPriority(QThread::HighestPriority); + DependencyManager::set(); setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); _size = QSize(800, 600); _renderThread._size = _size; From d5289d357b9e67ed53ef884a0d51e35edb1b8c48 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Thu, 29 Jun 2017 01:01:59 +0200 Subject: [PATCH 0670/1049] I need to setup my code-editor, spaces. --- tests/render-perf/src/main.cpp | 2 +- tests/render-texture-load/src/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/render-perf/src/main.cpp b/tests/render-perf/src/main.cpp index 61608f12aa..9c4e3ae870 100644 --- a/tests/render-perf/src/main.cpp +++ b/tests/render-perf/src/main.cpp @@ -519,7 +519,7 @@ public: _octree->getTree()->setSimulation(simpleSimulation); _entitySimulation = simpleSimulation; } - + DependencyManager::set(); setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); diff --git a/tests/render-texture-load/src/main.cpp b/tests/render-texture-load/src/main.cpp index d85fcd6a32..67b80d9ba8 100644 --- a/tests/render-texture-load/src/main.cpp +++ b/tests/render-texture-load/src/main.cpp @@ -328,7 +328,7 @@ public: installEventFilter(this); QThreadPool::globalInstance()->setMaxThreadCount(2); - QThread::currentThread()->setPriority(QThread::HighestPriority); + QThread::currentThread()->setPriority(QThread::HighestPriority); DependencyManager::set(); setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); _size = QSize(800, 600); From 9d002d6f6b38dfadd8feaa88ad179a37a3652076 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 28 Jun 2017 11:00:05 -0700 Subject: [PATCH 0671/1049] move the location of Q_DECLARE_METATYPE(std::function) so that the server-script AC can see it --- libraries/shared/src/RegisteredMetaTypes.cpp | 2 ++ libraries/shared/src/RegisteredMetaTypes.h | 2 ++ libraries/ui/src/ui/OffscreenQmlSurface.cpp | 6 ------ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp index 70067b93f3..f793b78b39 100644 --- a/libraries/shared/src/RegisteredMetaTypes.cpp +++ b/libraries/shared/src/RegisteredMetaTypes.cpp @@ -34,6 +34,8 @@ int pickRayMetaTypeId = qRegisterMetaType(); int collisionMetaTypeId = qRegisterMetaType(); int qMapURLStringMetaTypeId = qRegisterMetaType>(); int socketErrorMetaTypeId = qRegisterMetaType(); +int voidLambdaType = qRegisterMetaType>(); +int variantLambdaType = qRegisterMetaType>(); void registerMetaTypes(QScriptEngine* engine) { qScriptRegisterMetaType(engine, mat4toScriptValue, mat4FromScriptValue); diff --git a/libraries/shared/src/RegisteredMetaTypes.h b/libraries/shared/src/RegisteredMetaTypes.h index 8a15f62eed..255a8115a1 100644 --- a/libraries/shared/src/RegisteredMetaTypes.h +++ b/libraries/shared/src/RegisteredMetaTypes.h @@ -33,6 +33,8 @@ Q_DECLARE_METATYPE(xColor) Q_DECLARE_METATYPE(QVector) Q_DECLARE_METATYPE(QVector) Q_DECLARE_METATYPE(AACube) +Q_DECLARE_METATYPE(std::function); +Q_DECLARE_METATYPE(std::function); void registerMetaTypes(QScriptEngine* engine); diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index f0006cb399..648bdad1bf 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -886,12 +886,6 @@ QQmlContext* OffscreenQmlSurface::getSurfaceContext() { return _qmlContext; } -Q_DECLARE_METATYPE(std::function); -auto VoidLambdaType = qRegisterMetaType>(); -Q_DECLARE_METATYPE(std::function); -auto VariantLambdaType = qRegisterMetaType>(); - - void OffscreenQmlSurface::executeOnUiThread(std::function function, bool blocking ) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "executeOnUiThread", blocking ? Qt::BlockingQueuedConnection : Qt::QueuedConnection, From 3fa7d026a77606c9e8c3dc0c97558a41edbfbe3e Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 28 Jun 2017 14:18:14 -0700 Subject: [PATCH 0672/1049] make ResourceManager be owned by DependencyManager --- assignment-client/src/Agent.cpp | 7 ++--- .../src/entities/EntityServer.cpp | 2 +- .../src/scripts/EntityScriptServer.cpp | 7 ++--- interface/src/Application.cpp | 6 ++-- interface/src/assets/ATPAssetMigrator.cpp | 3 +- .../src/scripting/TestScriptingInterface.cpp | 2 +- .../src/EntityTreeRenderer.cpp | 2 +- libraries/entities/src/EntityEditFilters.cpp | 2 +- libraries/fbx/src/OBJReader.cpp | 4 +-- .../src/model-networking/TextureCache.cpp | 4 +-- libraries/networking/src/AtpReply.cpp | 2 +- libraries/networking/src/ResourceCache.cpp | 2 +- libraries/networking/src/ResourceManager.cpp | 22 ++++++------- libraries/networking/src/ResourceManager.h | 31 ++++++++++++------- .../src/ResourceScriptingInterface.cpp | 2 +- libraries/octree/src/Octree.cpp | 3 +- .../procedural/src/procedural/Procedural.cpp | 2 +- .../src/FileScriptingInterface.cpp | 2 +- libraries/script-engine/src/ScriptCache.cpp | 8 ++--- libraries/script-engine/src/ScriptEngine.cpp | 2 +- tests/render-perf/src/main.cpp | 7 ++--- tests/render-texture-load/src/main.cpp | 4 +-- 22 files changed, 65 insertions(+), 61 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 260a6d6825..f336f1dad5 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -62,8 +62,6 @@ Agent::Agent(ReceivedMessage& message) : _entityEditSender.setPacketsPerSecond(DEFAULT_ENTITY_PPS_PER_SCRIPT); DependencyManager::get()->setPacketSender(&_entityEditSender); - ResourceManager::init(); - DependencyManager::registerInheritance(); DependencyManager::set(); @@ -81,6 +79,7 @@ Agent::Agent(ReceivedMessage& message) : DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); @@ -199,7 +198,7 @@ void Agent::requestScript() { return; } - auto request = ResourceManager::createResourceRequest(this, scriptURL); + auto request = DependencyManager::get()->createResourceRequest(this, scriptURL); if (!request) { qWarning() << "Could not create ResourceRequest for Agent script at" << scriptURL.toString(); @@ -779,7 +778,7 @@ void Agent::aboutToFinish() { // our entity tree is going to go away so tell that to the EntityScriptingInterface DependencyManager::get()->setEntityTree(nullptr); - ResourceManager::cleanup(); + DependencyManager::get()->cleanup(); // cleanup the AudioInjectorManager (and any still running injectors) DependencyManager::destroy(); diff --git a/assignment-client/src/entities/EntityServer.cpp b/assignment-client/src/entities/EntityServer.cpp index dc0a2add3a..afcbcf4f1e 100644 --- a/assignment-client/src/entities/EntityServer.cpp +++ b/assignment-client/src/entities/EntityServer.cpp @@ -31,9 +31,9 @@ EntityServer::EntityServer(ReceivedMessage& message) : OctreeServer(message), _entitySimulation(NULL) { - ResourceManager::init(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver.registerListenerForTypes({ PacketType::EntityAdd, PacketType::EntityEdit, PacketType::EntityErase, PacketType::EntityPhysics }, diff --git a/assignment-client/src/scripts/EntityScriptServer.cpp b/assignment-client/src/scripts/EntityScriptServer.cpp index 1b226ab642..489478ff9a 100644 --- a/assignment-client/src/scripts/EntityScriptServer.cpp +++ b/assignment-client/src/scripts/EntityScriptServer.cpp @@ -54,7 +54,7 @@ EntityScriptServer::EntityScriptServer(ReceivedMessage& message) : ThreadedAssig DependencyManager::get()->setPacketSender(&_entityEditSender); - ResourceManager::init(); + DependencyManager::set(); DependencyManager::registerInheritance(); @@ -67,7 +67,6 @@ EntityScriptServer::EntityScriptServer(ReceivedMessage& message) : ThreadedAssig DependencyManager::set(); DependencyManager::set(ScriptEngine::ENTITY_SERVER_SCRIPT); - auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver.registerListenerForTypes({ PacketType::OctreeStats, PacketType::EntityData, PacketType::EntityErase }, this, "handleOctreePacket"); @@ -493,7 +492,7 @@ void EntityScriptServer::checkAndCallPreload(const EntityItemID& entityID, bool if (entity && (reload || notRunning || details.scriptText != entity->getServerScripts())) { QString scriptUrl = entity->getServerScripts(); if (!scriptUrl.isEmpty()) { - scriptUrl = ResourceManager::normalizeURL(scriptUrl); + scriptUrl = DependencyManager::get()->normalizeURL(scriptUrl); qCDebug(entity_script_server) << "Loading entity server script" << scriptUrl << "for" << entityID; _entitiesScriptEngine->loadEntityScript(entityID, scriptUrl, reload); } @@ -551,7 +550,7 @@ void EntityScriptServer::aboutToFinish() { // our entity tree is going to go away so tell that to the EntityScriptingInterface DependencyManager::get()->setEntityTree(nullptr); - ResourceManager::cleanup(); + DependencyManager::get()->cleanup(); // cleanup the AudioInjectorManager (and any still running injectors) DependencyManager::destroy(); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c138230893..cfb8db42d7 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -574,6 +574,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); return previousSessionCrashed; } @@ -764,7 +765,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(this, &Application::activeDisplayPluginChanged, reinterpret_cast(audioScriptingInterface.data()), &scripting::Audio::onContextChanged); - ResourceManager::init(); // Make sure we don't time out during slow operations at startup updateHeartbeat(); @@ -1868,7 +1868,7 @@ Application::~Application() { DependencyManager::destroy(); DependencyManager::destroy(); - ResourceManager::cleanup(); + DependencyManager::get()->cleanup(); // remove the NodeList from the DependencyManager DependencyManager::destroy(); @@ -5925,7 +5925,7 @@ void Application::addAssetToWorldFromURL(QString url) { addAssetToWorldInfo(filename, "Downloading model file " + filename + "."); - auto request = ResourceManager::createResourceRequest(nullptr, QUrl(url)); + auto request = DependencyManager::get()->createResourceRequest(nullptr, QUrl(url)); connect(request, &ResourceRequest::finished, this, &Application::addAssetToWorldFromURLRequestFinished); request->send(); } diff --git a/interface/src/assets/ATPAssetMigrator.cpp b/interface/src/assets/ATPAssetMigrator.cpp index e0e9d5a73a..667c2587b0 100644 --- a/interface/src/assets/ATPAssetMigrator.cpp +++ b/interface/src/assets/ATPAssetMigrator.cpp @@ -106,7 +106,8 @@ void ATPAssetMigrator::loadEntityServerFile() { jsonValue = entityObject; } else if (wantsToMigrateResource(migrationURL)) { - auto request = ResourceManager::createResourceRequest(this, migrationURL); + auto request = + DependencyManager::get()->createResourceRequest(this, migrationURL); if (request) { qCDebug(asset_migrator) << "Requesting" << migrationURL << "for ATP asset migration"; diff --git a/interface/src/scripting/TestScriptingInterface.cpp b/interface/src/scripting/TestScriptingInterface.cpp index b8892fae7e..84c742d0ab 100644 --- a/interface/src/scripting/TestScriptingInterface.cpp +++ b/interface/src/scripting/TestScriptingInterface.cpp @@ -62,7 +62,7 @@ bool TestScriptingInterface::loadTestScene(QString scene) { static const QString TEST_SCRIPTS_ROOT = TEST_ROOT + "scripts/"; static const QString TEST_SCENES_ROOT = TEST_ROOT + "scenes/"; return DependencyManager::get()->returnFromUiThread([scene]()->QVariant { - ResourceManager::setUrlPrefixOverride("atp:/", TEST_BINARY_ROOT + scene + ".atp/"); + DependencyManager::get()->setUrlPrefixOverride("atp:/", TEST_BINARY_ROOT + scene + ".atp/"); auto tree = qApp->getEntities()->getTree(); auto treeIsClient = tree->getIsClient(); // Force the tree to accept the load regardless of permissions diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index ffaac3bf3e..42746d2046 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -880,7 +880,7 @@ void EntityTreeRenderer::checkAndCallPreload(const EntityItemID& entityID, bool entity->scriptHasUnloaded(); } if (shouldLoad) { - scriptUrl = ResourceManager::normalizeURL(scriptUrl); + scriptUrl = DependencyManager::get()->normalizeURL(scriptUrl); _entitiesScriptEngine->loadEntityScript(entityID, scriptUrl, reload); entity->scriptHasPreloaded(); } diff --git a/libraries/entities/src/EntityEditFilters.cpp b/libraries/entities/src/EntityEditFilters.cpp index d62495d95e..5359ebd31b 100644 --- a/libraries/entities/src/EntityEditFilters.cpp +++ b/libraries/entities/src/EntityEditFilters.cpp @@ -132,7 +132,7 @@ void EntityEditFilters::addFilter(EntityItemID entityID, QString filterURL) { _filterDataMap.insert(entityID, filterData); _lock.unlock(); - auto scriptRequest = ResourceManager::createResourceRequest(this, scriptURL); + auto scriptRequest = DependencyManager::get()->createResourceRequest(this, scriptURL); if (!scriptRequest) { qWarning() << "Could not create ResourceRequest for Entity Edit filter script at" << scriptURL.toString(); scriptRequestFinished(entityID); diff --git a/libraries/fbx/src/OBJReader.cpp b/libraries/fbx/src/OBJReader.cpp index 1445d14d84..417901b9ab 100644 --- a/libraries/fbx/src/OBJReader.cpp +++ b/libraries/fbx/src/OBJReader.cpp @@ -202,7 +202,7 @@ bool OBJReader::isValidTexture(const QByteArray &filename) { } QUrl candidateUrl = _url.resolved(QUrl(filename)); - return ResourceManager::resourceExists(candidateUrl); + return DependencyManager::get()->resourceExists(candidateUrl); } void OBJReader::parseMaterialLibrary(QIODevice* device) { @@ -267,7 +267,7 @@ void OBJReader::parseMaterialLibrary(QIODevice* device) { } std::tuple requestData(QUrl& url) { - auto request = ResourceManager::createResourceRequest(nullptr, url); + auto request = DependencyManager::get()->createResourceRequest(nullptr, url); if (!request) { return std::make_tuple(false, QByteArray()); diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index ed1715219a..5c8f59f20f 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -384,7 +384,7 @@ void NetworkTexture::makeRequest() { // Add a fragment to the base url so we can identify the section of the ktx being requested when debugging // The actual requested url is _activeUrl and will not contain the fragment _url.setFragment("head"); - _ktxHeaderRequest = ResourceManager::createResourceRequest(this, _activeUrl); + _ktxHeaderRequest = DependencyManager::get()->createResourceRequest(this, _activeUrl); if (!_ktxHeaderRequest) { qCDebug(networking).noquote() << "Failed to get request for" << _url.toDisplayString(); @@ -454,7 +454,7 @@ void NetworkTexture::startMipRangeRequest(uint16_t low, uint16_t high) { bool isHighMipRequest = low == NULL_MIP_LEVEL && high == NULL_MIP_LEVEL; - _ktxMipRequest = ResourceManager::createResourceRequest(this, _activeUrl); + _ktxMipRequest = DependencyManager::get()->createResourceRequest(this, _activeUrl); if (!_ktxMipRequest) { qCWarning(networking).noquote() << "Failed to get request for" << _url.toDisplayString(); diff --git a/libraries/networking/src/AtpReply.cpp b/libraries/networking/src/AtpReply.cpp index 4440995ee0..6417478005 100644 --- a/libraries/networking/src/AtpReply.cpp +++ b/libraries/networking/src/AtpReply.cpp @@ -13,7 +13,7 @@ #include "AtpReply.h" AtpReply::AtpReply(const QUrl& url, QObject* parent) : - _resourceRequest(ResourceManager::createResourceRequest(parent, url)) { + _resourceRequest(DependencyManager::get()->createResourceRequest(parent, url)) { setOperation(QNetworkAccessManager::GetOperation); connect(_resourceRequest, &AssetResourceRequest::progress, this, &AtpReply::downloadProgress); diff --git a/libraries/networking/src/ResourceCache.cpp b/libraries/networking/src/ResourceCache.cpp index 88ea68780b..f07514cd85 100644 --- a/libraries/networking/src/ResourceCache.cpp +++ b/libraries/networking/src/ResourceCache.cpp @@ -672,7 +672,7 @@ void Resource::makeRequest() { PROFILE_ASYNC_BEGIN(resource, "Resource:" + getType(), QString::number(_requestID), { { "url", _url.toString() }, { "activeURL", _activeUrl.toString() } }); - _request = ResourceManager::createResourceRequest(this, _activeUrl); + _request = DependencyManager::get()->createResourceRequest(this, _activeUrl); if (!_request) { qCDebug(networking).noquote() << "Failed to get request for" << _url.toDisplayString(); diff --git a/libraries/networking/src/ResourceManager.cpp b/libraries/networking/src/ResourceManager.cpp index e2c1cf2431..3ee66f89c1 100644 --- a/libraries/networking/src/ResourceManager.cpp +++ b/libraries/networking/src/ResourceManager.cpp @@ -24,10 +24,16 @@ #include "NetworkAccessManager.h" #include "NetworkLogging.h" -QThread ResourceManager::_thread; -ResourceManager::PrefixMap ResourceManager::_prefixMap; -QMutex ResourceManager::_prefixMapLock; +ResourceManager::ResourceManager() { + _thread.setObjectName("Resource Manager Thread"); + + auto assetClient = DependencyManager::set(); + assetClient->moveToThread(&_thread); + QObject::connect(&_thread, &QThread::started, assetClient.data(), &AssetClient::init); + + _thread.start(); +} void ResourceManager::setUrlPrefixOverride(const QString& prefix, const QString& replacement) { QMutexLocker locker(&_prefixMapLock); @@ -75,16 +81,6 @@ QUrl ResourceManager::normalizeURL(const QUrl& originalUrl) { return url; } -void ResourceManager::init() { - _thread.setObjectName("Resource Manager Thread"); - - auto assetClient = DependencyManager::set(); - assetClient->moveToThread(&_thread); - QObject::connect(&_thread, &QThread::started, assetClient.data(), &AssetClient::init); - - _thread.start(); -} - void ResourceManager::cleanup() { // cleanup the AssetClient thread DependencyManager::destroy(); diff --git a/libraries/networking/src/ResourceManager.h b/libraries/networking/src/ResourceManager.h index 41da892701..f7495e71e9 100644 --- a/libraries/networking/src/ResourceManager.h +++ b/libraries/networking/src/ResourceManager.h @@ -14,7 +14,11 @@ #include +#include #include +#include + +#include #include "ResourceRequest.h" @@ -24,29 +28,34 @@ const QString URL_SCHEME_HTTPS = "https"; const QString URL_SCHEME_FTP = "ftp"; const QString URL_SCHEME_ATP = "atp"; -class ResourceManager { +class ResourceManager: public QObject, public Dependency { + Q_OBJECT + SINGLETON_DEPENDENCY + public: + ResourceManager(); - static void setUrlPrefixOverride(const QString& prefix, const QString& replacement); - static QString normalizeURL(const QString& urlString); - static QUrl normalizeURL(const QUrl& url); + void setUrlPrefixOverride(const QString& prefix, const QString& replacement); + QString normalizeURL(const QString& urlString); + QUrl normalizeURL(const QUrl& url); - static ResourceRequest* createResourceRequest(QObject* parent, const QUrl& url); + ResourceRequest* createResourceRequest(QObject* parent, const QUrl& url); - static void init(); - static void cleanup(); + void init(); + void cleanup(); // Blocking call to check if a resource exists. This function uses a QEventLoop internally // to return to the calling thread so that events can still be processed. - static bool resourceExists(const QUrl& url); + bool resourceExists(const QUrl& url); private: - static QThread _thread; + QThread _thread; using PrefixMap = std::map; - static PrefixMap _prefixMap; - static QMutex _prefixMapLock; + PrefixMap _prefixMap; + QMutex _prefixMapLock; + }; #endif diff --git a/libraries/networking/src/ResourceScriptingInterface.cpp b/libraries/networking/src/ResourceScriptingInterface.cpp index 38be49049c..3227d44de1 100644 --- a/libraries/networking/src/ResourceScriptingInterface.cpp +++ b/libraries/networking/src/ResourceScriptingInterface.cpp @@ -11,5 +11,5 @@ #include "ResourceManager.h" void ResourceScriptingInterface::overrideUrlPrefix(const QString& prefix, const QString& replacement) { - ResourceManager::setUrlPrefixOverride(prefix, replacement); + DependencyManager::get()->setUrlPrefixOverride(prefix, replacement); } diff --git a/libraries/octree/src/Octree.cpp b/libraries/octree/src/Octree.cpp index 180f25f106..2e93f3515f 100644 --- a/libraries/octree/src/Octree.cpp +++ b/libraries/octree/src/Octree.cpp @@ -1668,7 +1668,8 @@ bool Octree::readJSONFromGzippedFile(QString qFileName) { } bool Octree::readFromURL(const QString& urlString) { - auto request = std::unique_ptr(ResourceManager::createResourceRequest(this, urlString)); + auto request = + std::unique_ptr(DependencyManager::get()->createResourceRequest(this, urlString)); if (!request) { return false; diff --git a/libraries/procedural/src/procedural/Procedural.cpp b/libraries/procedural/src/procedural/Procedural.cpp index e4ce3c691a..c38e562672 100644 --- a/libraries/procedural/src/procedural/Procedural.cpp +++ b/libraries/procedural/src/procedural/Procedural.cpp @@ -103,7 +103,7 @@ bool Procedural::parseVersion(const QJsonValue& version) { } bool Procedural::parseShader(const QUrl& shaderPath) { - auto shaderUrl = ResourceManager::normalizeURL(shaderPath); + auto shaderUrl = DependencyManager::get()->normalizeURL(shaderPath); if (!shaderUrl.isValid()) { if (!shaderUrl.isEmpty()) { diff --git a/libraries/script-engine/src/FileScriptingInterface.cpp b/libraries/script-engine/src/FileScriptingInterface.cpp index 2f5cc2bc88..30d0a3a201 100644 --- a/libraries/script-engine/src/FileScriptingInterface.cpp +++ b/libraries/script-engine/src/FileScriptingInterface.cpp @@ -85,7 +85,7 @@ QString FileScriptingInterface::convertUrlToPath(QUrl url) { // this function is not in use void FileScriptingInterface::downloadZip(QString path, const QString link) { QUrl url = QUrl(link); - auto request = ResourceManager::createResourceRequest(nullptr, url); + auto request = DependencyManager::get()->createResourceRequest(nullptr, url); connect(request, &ResourceRequest::finished, this, [this, path]{ unzipFile(path, ""); // so intellisense isn't mad }); diff --git a/libraries/script-engine/src/ScriptCache.cpp b/libraries/script-engine/src/ScriptCache.cpp index 601ca6bc95..dba2db0458 100644 --- a/libraries/script-engine/src/ScriptCache.cpp +++ b/libraries/script-engine/src/ScriptCache.cpp @@ -57,7 +57,7 @@ void ScriptCache::clearATPScriptsFromCache() { } void ScriptCache::deleteScript(const QUrl& unnormalizedURL) { - QUrl url = ResourceManager::normalizeURL(unnormalizedURL); + QUrl url = DependencyManager::get()->normalizeURL(unnormalizedURL); Lock lock(_containerLock); if (_scriptCache.contains(url)) { qCDebug(scriptengine) << "Delete script from cache:" << url.toString(); @@ -70,7 +70,7 @@ void ScriptCache::getScriptContents(const QString& scriptOrURL, contentAvailable qCDebug(scriptengine) << "ScriptCache::getScriptContents() on thread [" << QThread::currentThread() << "] expected thread [" << thread() << "]"; #endif QUrl unnormalizedURL(scriptOrURL); - QUrl url = ResourceManager::normalizeURL(unnormalizedURL); + QUrl url = DependencyManager::get()->normalizeURL(unnormalizedURL); // attempt to determine if this is a URL to a script, or if this is actually a script itself (which is valid in the // entityScript use case) @@ -109,7 +109,7 @@ void ScriptCache::getScriptContents(const QString& scriptOrURL, contentAvailable #ifdef THREAD_DEBUGGING qCDebug(scriptengine) << "about to call: ResourceManager::createResourceRequest(this, url); on thread [" << QThread::currentThread() << "] expected thread [" << thread() << "]"; #endif - auto request = ResourceManager::createResourceRequest(nullptr, url); + auto request = DependencyManager::get()->createResourceRequest(nullptr, url); Q_ASSERT(request); request->setCacheEnabled(!forceDownload); connect(request, &ResourceRequest::finished, this, [=]{ scriptContentAvailable(maxRetries); }); @@ -166,7 +166,7 @@ void ScriptCache::scriptContentAvailable(int maxRetries) { qCDebug(scriptengine) << QString("Retrying script request [%1 / %2]: %3") .arg(attempt).arg(maxRetries).arg(url.toString()); - auto request = ResourceManager::createResourceRequest(nullptr, url); + auto request = DependencyManager::get()->createResourceRequest(nullptr, url); Q_ASSERT(request); // We've already made a request, so the cache must be disabled or it wasn't there, so enabling diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index d9b41bb55d..59694cba6f 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1755,7 +1755,7 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac QList urls; for (QString includeFile : includeFiles) { - QString file = ResourceManager::normalizeURL(includeFile); + QString file = DependencyManager::get()->normalizeURL(includeFile); QUrl thisURL; bool isStandardLibrary = false; if (file.startsWith("/~/")) { diff --git a/tests/render-perf/src/main.cpp b/tests/render-perf/src/main.cpp index 52592cd202..c4543e354a 100644 --- a/tests/render-perf/src/main.cpp +++ b/tests/render-perf/src/main.cpp @@ -493,6 +493,7 @@ public: DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); } QTestWindow() { @@ -519,8 +520,6 @@ public: _entitySimulation = simpleSimulation; } - ResourceManager::init(); - setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); _size = QSize(800, 600); _renderThread._size = _size; @@ -574,7 +573,7 @@ public: DependencyManager::destroy(); DependencyManager::destroy(); DependencyManager::destroy(); - ResourceManager::cleanup(); + DependencyManager::get()->cleanup(); // remove the NodeList from the DependencyManager DependencyManager::destroy(); } @@ -997,7 +996,7 @@ private: QFileInfo atpPathInfo(atpPath); if (atpPathInfo.exists()) { QString atpUrl = QUrl::fromLocalFile(atpPath).toString(); - ResourceManager::setUrlPrefixOverride("atp:/", atpUrl + "/"); + DependencyManager::get()->setUrlPrefixOverride("atp:/", atpUrl + "/"); } _octree->clear(); _octree->getTree()->readFromURL(fileName); diff --git a/tests/render-texture-load/src/main.cpp b/tests/render-texture-load/src/main.cpp index f426cd8024..5920e04558 100644 --- a/tests/render-texture-load/src/main.cpp +++ b/tests/render-texture-load/src/main.cpp @@ -289,6 +289,7 @@ public: DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); } struct TextureLoad { @@ -329,7 +330,6 @@ public: installEventFilter(this); QThreadPool::globalInstance()->setMaxThreadCount(2); QThread::currentThread()->setPriority(QThread::HighestPriority); - ResourceManager::init(); setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); _size = QSize(800, 600); _renderThread._size = _size; @@ -369,7 +369,7 @@ public: DependencyManager::destroy(); DependencyManager::destroy(); DependencyManager::destroy(); - ResourceManager::cleanup(); + DependencyManager::get()->cleanup(); } protected: From f59a94d4011be0423ecfa089f93ea98eb9217fcb Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Thu, 29 Jun 2017 00:52:51 +0200 Subject: [PATCH 0673/1049] move the ResourceManager init back to where it was, to prevent problems --- assignment-client/src/Agent.cpp | 3 ++- assignment-client/src/entities/EntityServer.cpp | 2 +- tests/render-perf/src/main.cpp | 3 ++- tests/render-texture-load/src/main.cpp | 4 ++-- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index f336f1dad5..8aec5adb1f 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -62,6 +62,8 @@ Agent::Agent(ReceivedMessage& message) : _entityEditSender.setPacketsPerSecond(DEFAULT_ENTITY_PPS_PER_SCRIPT); DependencyManager::get()->setPacketSender(&_entityEditSender); + DependencyManager::set(); + DependencyManager::registerInheritance(); DependencyManager::set(); @@ -79,7 +81,6 @@ Agent::Agent(ReceivedMessage& message) : DependencyManager::set(); DependencyManager::set(); - DependencyManager::set(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); diff --git a/assignment-client/src/entities/EntityServer.cpp b/assignment-client/src/entities/EntityServer.cpp index afcbcf4f1e..ac686e2e0a 100644 --- a/assignment-client/src/entities/EntityServer.cpp +++ b/assignment-client/src/entities/EntityServer.cpp @@ -31,9 +31,9 @@ EntityServer::EntityServer(ReceivedMessage& message) : OctreeServer(message), _entitySimulation(NULL) { + DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); - DependencyManager::set(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver.registerListenerForTypes({ PacketType::EntityAdd, PacketType::EntityEdit, PacketType::EntityErase, PacketType::EntityPhysics }, diff --git a/tests/render-perf/src/main.cpp b/tests/render-perf/src/main.cpp index c4543e354a..0b7e68301a 100644 --- a/tests/render-perf/src/main.cpp +++ b/tests/render-perf/src/main.cpp @@ -493,7 +493,6 @@ public: DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); - DependencyManager::set(); } QTestWindow() { @@ -519,6 +518,8 @@ public: _octree->getTree()->setSimulation(simpleSimulation); _entitySimulation = simpleSimulation; } + + DependencyManager::set(); setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); _size = QSize(800, 600); diff --git a/tests/render-texture-load/src/main.cpp b/tests/render-texture-load/src/main.cpp index 5920e04558..d85fcd6a32 100644 --- a/tests/render-texture-load/src/main.cpp +++ b/tests/render-texture-load/src/main.cpp @@ -289,7 +289,6 @@ public: DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); - DependencyManager::set(); } struct TextureLoad { @@ -329,7 +328,8 @@ public: installEventFilter(this); QThreadPool::globalInstance()->setMaxThreadCount(2); - QThread::currentThread()->setPriority(QThread::HighestPriority); + QThread::currentThread()->setPriority(QThread::HighestPriority); + DependencyManager::set(); setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); _size = QSize(800, 600); _renderThread._size = _size; From 6c487ec0afce27d889bf5ed252a312bd37028e85 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Thu, 29 Jun 2017 01:01:59 +0200 Subject: [PATCH 0674/1049] I need to setup my code-editor, spaces. --- tests/render-perf/src/main.cpp | 2 +- tests/render-texture-load/src/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/render-perf/src/main.cpp b/tests/render-perf/src/main.cpp index 0b7e68301a..d47821ab1c 100644 --- a/tests/render-perf/src/main.cpp +++ b/tests/render-perf/src/main.cpp @@ -518,7 +518,7 @@ public: _octree->getTree()->setSimulation(simpleSimulation); _entitySimulation = simpleSimulation; } - + DependencyManager::set(); setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); diff --git a/tests/render-texture-load/src/main.cpp b/tests/render-texture-load/src/main.cpp index d85fcd6a32..67b80d9ba8 100644 --- a/tests/render-texture-load/src/main.cpp +++ b/tests/render-texture-load/src/main.cpp @@ -328,7 +328,7 @@ public: installEventFilter(this); QThreadPool::globalInstance()->setMaxThreadCount(2); - QThread::currentThread()->setPriority(QThread::HighestPriority); + QThread::currentThread()->setPriority(QThread::HighestPriority); DependencyManager::set(); setFlags(Qt::MSWindowsOwnDC | Qt::Window | Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowTitleHint); _size = QSize(800, 600); From a66e1148ba84abee7364339c979d742e101828b2 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 28 Jun 2017 19:20:18 -0700 Subject: [PATCH 0675/1049] Preliminary work on AC auto cleanup --- assignment-client/src/AssignmentClientApp.cpp | 22 +++++++++++++++++++ assignment-client/src/AssignmentClientApp.h | 1 + .../src/AssignmentClientMonitor.cpp | 4 ++++ server-console/src/modules/hf-process.js | 1 + 4 files changed, 28 insertions(+) diff --git a/assignment-client/src/AssignmentClientApp.cpp b/assignment-client/src/AssignmentClientApp.cpp index 7e9042e609..ed684dcb65 100644 --- a/assignment-client/src/AssignmentClientApp.cpp +++ b/assignment-client/src/AssignmentClientApp.cpp @@ -24,6 +24,12 @@ #include #include +VOID CALLBACK parentDiedCallback(PVOID lpParameter, BOOLEAN timerOrWaitFired) { + if (!timerOrWaitFired) { + qDebug() << "Parent process died, quitting"; + qApp->quit(); + } +} AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : QCoreApplication(argc, argv) @@ -87,6 +93,9 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : const QCommandLineOption logDirectoryOption(ASSIGNMENT_LOG_DIRECTORY, "directory to store logs", "log-directory"); parser.addOption(logDirectoryOption); + const QCommandLineOption parentPIDOption(ASSIGNMENT_PARENT_PID, "PID of the parent process", "parent-pid"); + parser.addOption(parentPIDOption); + if (!parser.parse(QCoreApplication::arguments())) { qCritical() << parser.errorText() << endl; parser.showHelp(); @@ -203,6 +212,19 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : } } + DWORD processID; + HANDLE procHandle; + HANDLE newHandle; + if (parser.isSet(parentPIDOption)) { + bool ok = false; + processID = parser.value(parentPIDOption).toInt(&ok); + + if (ok) { + procHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID); + RegisterWaitForSingleObject(&newHandle, procHandle, parentDiedCallback, NULL, INFINITE, WT_EXECUTEONLYONCE); + } + } + QThread::currentThread()->setObjectName("main thread"); DependencyManager::registerInheritance(); diff --git a/assignment-client/src/AssignmentClientApp.h b/assignment-client/src/AssignmentClientApp.h index 37d3b9cc1d..a7c8cdb54d 100644 --- a/assignment-client/src/AssignmentClientApp.h +++ b/assignment-client/src/AssignmentClientApp.h @@ -27,6 +27,7 @@ const QString ASSIGNMENT_MAX_FORKS_OPTION = "max"; const QString ASSIGNMENT_CLIENT_MONITOR_PORT_OPTION = "monitor-port"; const QString ASSIGNMENT_HTTP_STATUS_PORT = "http-status-port"; const QString ASSIGNMENT_LOG_DIRECTORY = "log-directory"; +const QString ASSIGNMENT_PARENT_PID = "parent-pid"; class AssignmentClientApp : public QCoreApplication { Q_OBJECT diff --git a/assignment-client/src/AssignmentClientMonitor.cpp b/assignment-client/src/AssignmentClientMonitor.cpp index 1ee876ceea..568a29c8b1 100644 --- a/assignment-client/src/AssignmentClientMonitor.cpp +++ b/assignment-client/src/AssignmentClientMonitor.cpp @@ -159,6 +159,10 @@ void AssignmentClientMonitor::spawnChildClient() { // for now they simply talk to us on localhost _childArguments.append("--" + ASSIGNMENT_CLIENT_MONITOR_PORT_OPTION); _childArguments.append(QString::number(DependencyManager::get()->getLocalSockAddr().getPort())); + + + _childArguments.append("--" + ASSIGNMENT_PARENT_PID); + _childArguments.append(QString::number(QCoreApplication::applicationPid())); QString nowString, stdoutFilenameTemp, stderrFilenameTemp, stdoutPathTemp, stderrPathTemp; diff --git a/server-console/src/modules/hf-process.js b/server-console/src/modules/hf-process.js index 20b8966148..3c1200fecc 100644 --- a/server-console/src/modules/hf-process.js +++ b/server-console/src/modules/hf-process.js @@ -168,6 +168,7 @@ Process.prototype = extend(Process.prototype, { detached: false, stdio: ['ignore', logStdout, logStderr] }); + log.debug("Spawned " + this.command + " with pid " + this.child.pid); } catch (e) { log.debug("Got error starting child process for " + this.name, e); this.child = null; From f7a3b3a4116498bd0f8b011be8ed4c80ccadc3c6 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Thu, 29 Jun 2017 15:55:47 +0200 Subject: [PATCH 0676/1049] Experimenting faster getters on Avatar for scripts --- libraries/animation/src/Rig.cpp | 19 ++++++++++++++----- .../src/avatars-renderer/Avatar.cpp | 16 ++++++++-------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 3d04b0b26f..3ea03bc5f9 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -404,8 +404,10 @@ void Rig::setJointRotation(int index, bool valid, const glm::quat& rotation, flo } bool Rig::getJointPositionInWorldFrame(int jointIndex, glm::vec3& position, glm::vec3 translation, glm::quat rotation) const { - if (isIndexValid(jointIndex)) { - position = (rotation * _internalPoseSet._absolutePoses[jointIndex].trans()) + translation; + // if (isIndexValid(jointIndex)) { + QReadLocker readLock(&_externalPoseSetLock); + if (jointIndex >= 0 && jointIndex < (int)_externalPoseSet._absolutePoses.size()) { + position = (rotation * _externalPoseSet._absolutePoses[jointIndex].trans()) + translation; return true; } else { return false; @@ -413,17 +415,24 @@ bool Rig::getJointPositionInWorldFrame(int jointIndex, glm::vec3& position, glm: } bool Rig::getJointPosition(int jointIndex, glm::vec3& position) const { +/* if (isIndexValid(jointIndex)) { position = _internalPoseSet._absolutePoses[jointIndex].trans(); return true; } else { return false; - } + }*/ + return getAbsoluteJointTranslationInRigFrame(jointIndex, position); } bool Rig::getJointRotationInWorldFrame(int jointIndex, glm::quat& result, const glm::quat& rotation) const { - if (isIndexValid(jointIndex)) { - result = rotation * _internalPoseSet._absolutePoses[jointIndex].rot(); + // if (isIndexValid(jointIndex)) { + // result = rotation * _internalPoseSet._absolutePoses[jointIndex].rot(); + // return true; + + QReadLocker readLock(&_externalPoseSetLock); + if (jointIndex >= 0 && jointIndex < (int)_externalPoseSet._absolutePoses.size()) { + result = rotation * _externalPoseSet._absolutePoses[jointIndex].rot(); return true; } else { return false; diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index a0a348388e..fbf2254248 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1008,12 +1008,12 @@ glm::vec3 Avatar::getAbsoluteJointTranslationInObjectFrame(int index) const { } int Avatar::getJointIndex(const QString& name) const { - if (QThread::currentThread() != thread()) { + /* if (QThread::currentThread() != thread()) { int result; QMetaObject::invokeMethod(const_cast(this), "getJointIndex", Qt::BlockingQueuedConnection, Q_RETURN_ARG(int, result), Q_ARG(const QString&, name)); return result; - } + } */ int result = getFauxJointIndex(name); if (result != -1) { return result; @@ -1022,34 +1022,34 @@ int Avatar::getJointIndex(const QString& name) const { } QStringList Avatar::getJointNames() const { - if (QThread::currentThread() != thread()) { +/* if (QThread::currentThread() != thread()) { QStringList result; QMetaObject::invokeMethod(const_cast(this), "getJointNames", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QStringList, result)); return result; - } + }*/ return _skeletonModel->isActive() ? _skeletonModel->getFBXGeometry().getJointNames() : QStringList(); } glm::vec3 Avatar::getJointPosition(int index) const { - if (QThread::currentThread() != thread()) { +/* if (QThread::currentThread() != thread()) { glm::vec3 position; QMetaObject::invokeMethod(const_cast(this), "getJointPosition", Qt::BlockingQueuedConnection, Q_RETURN_ARG(glm::vec3, position), Q_ARG(const int, index)); return position; - } + }*/ glm::vec3 position; _skeletonModel->getJointPositionInWorldFrame(index, position); return position; } glm::vec3 Avatar::getJointPosition(const QString& name) const { - if (QThread::currentThread() != thread()) { +/* if (QThread::currentThread() != thread()) { glm::vec3 position; QMetaObject::invokeMethod(const_cast(this), "getJointPosition", Qt::BlockingQueuedConnection, Q_RETURN_ARG(glm::vec3, position), Q_ARG(const QString&, name)); return position; - } + }*/ glm::vec3 position; _skeletonModel->getJointPositionInWorldFrame(getJointIndex(name), position); return position; From 6e5eff9407b9a26226de7729ca1474d0cf2f955d Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 29 Jun 2017 10:01:48 -0700 Subject: [PATCH 0677/1049] Fix snapshot connection errors --- scripts/system/snapshot.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index c60e3a67f7..7825490b2c 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -384,7 +384,6 @@ function onButtonClicked() { } else { fillImageDataFromPrevious(); tablet.gotoWebScreen(SNAPSHOT_REVIEW_URL); - tablet.webEventReceived.connect(onMessage); HMD.openTablet(); } } @@ -659,10 +658,15 @@ function maybeDeleteSnapshotStories() { storyIDsToMaybeDelete = []; } function onTabletScreenChanged(type, url) { + var wasInSnapshotReview = isInSnapshotReview; isInSnapshotReview = (type === "Web" && url === SNAPSHOT_REVIEW_URL); button.editProperties({ isActive: isInSnapshotReview }); - if (!isInSnapshotReview) { - tablet.webEventReceived.disconnect(onMessage); + if (isInSnapshotReview !== wasInSnapshotReview) { + if (isInSnapshotReview) { + tablet.webEventReceived.connect(onMessage); + } else { + tablet.webEventReceived.disconnect(onMessage); + } } } function onUsernameChanged() { From 5f123018a4109c0cf43458293fdf59bffdeab8bf Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Thu, 29 Jun 2017 10:38:33 -0700 Subject: [PATCH 0678/1049] Update DomainMetadata.cpp --- domain-server/src/DomainMetadata.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domain-server/src/DomainMetadata.cpp b/domain-server/src/DomainMetadata.cpp index c19cefa397..eee5673af3 100644 --- a/domain-server/src/DomainMetadata.cpp +++ b/domain-server/src/DomainMetadata.cpp @@ -171,7 +171,7 @@ void DomainMetadata::maybeUpdateUsers() { if (linkedData) { auto nodeData = static_cast(linkedData); - if (!nodeData->wasAssigned()) { + if (!nodeData->wasAssigned() && node->getType() == NodeType::Agent) { ++numConnected; if (nodeData->getUsername().isEmpty()) { From 76e39a3ebdc8b0865c4dc420ad71e186d91467b3 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 29 Jun 2017 10:54:44 -0700 Subject: [PATCH 0679/1049] Make code windows specific --- assignment-client/src/AssignmentClientApp.cpp | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/assignment-client/src/AssignmentClientApp.cpp b/assignment-client/src/AssignmentClientApp.cpp index ed684dcb65..bc03808c1e 100644 --- a/assignment-client/src/AssignmentClientApp.cpp +++ b/assignment-client/src/AssignmentClientApp.cpp @@ -24,13 +24,27 @@ #include #include +#ifdef WIN32 VOID CALLBACK parentDiedCallback(PVOID lpParameter, BOOLEAN timerOrWaitFired) { - if (!timerOrWaitFired) { + if (!timerOrWaitFired && qApp) { qDebug() << "Parent process died, quitting"; qApp->quit(); } } +void watchParentProcess(int parentPID) { + DWORD processID = parentPID; + HANDLE procHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID); + + HANDLE newHandle; + RegisterWaitForSingleObject(&newHandle, procHandle, parentDiedCallback, NULL, INFINITE, WT_EXECUTEONLYONCE); +} +#else +void watchParentProcess(int parentPID) { + qWarning() << "Parent PID option not implemented on this plateform"; +} +#endif // WIN32 + AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : QCoreApplication(argc, argv) { @@ -212,16 +226,12 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : } } - DWORD processID; - HANDLE procHandle; - HANDLE newHandle; if (parser.isSet(parentPIDOption)) { bool ok = false; - processID = parser.value(parentPIDOption).toInt(&ok); + int parentPID = parser.value(parentPIDOption).toInt(&ok); if (ok) { - procHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID); - RegisterWaitForSingleObject(&newHandle, procHandle, parentDiedCallback, NULL, INFINITE, WT_EXECUTEONLYONCE); + watchParentProcess(parentPID); } } From 02b712716b34ac4e1bf0e09f0691c256e0ba5cbc Mon Sep 17 00:00:00 2001 From: David Kelly Date: Thu, 29 Jun 2017 11:12:10 -0700 Subject: [PATCH 0680/1049] testing some rendering issues... --- interface/src/ui/ResourceImageItem.cpp | 35 ++++++++------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index 9051305a2e..b4a726dcef 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -32,6 +32,8 @@ void ResourceImageItem::setUrl(const QString& url) { void ResourceImageItem::setReady(bool ready) { if (ready != m_ready) { m_ready = ready; + update(); + /* if (m_ready) { // 10 HZ for now. Also this serves as a small // delay before getting the network texture, which @@ -40,7 +42,7 @@ void ResourceImageItem::setReady(bool ready) { } else { m_updateTimer.stop(); update(); - } + }*/ } } @@ -59,18 +61,18 @@ void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { } _window = resourceImageItem->window(); - _window->setClearBeforeRendering(true); if (_ready && !_url.isNull() && !_url.isEmpty() && (urlChanged || readyChanged || !_networkTexture)) { _networkTexture = DependencyManager::get()->getTexture(_url); } + resourceImageItem->forceActiveFocus(); if (_ready && _networkTexture && _networkTexture->isLoaded()) { if(_fboMutex.tryLock()) { qApp->getActiveDisplayPlugin()->copyTextureToQuickFramebuffer(_networkTexture, _copyFbo, &_fenceSync); _fboMutex.unlock(); } + } - glFlush(); } @@ -82,26 +84,11 @@ QOpenGLFramebufferObject* ResourceImageItemRenderer::createFramebufferObject(con } void ResourceImageItemRenderer::render() { - qDebug() << "initial error" << glGetError(); - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + static int colorInt = 0; + float red = (float)((colorInt++ % 20)/(float)20); + glClearColor(red, 0.0f, 0.0f, 0.5f + red/2.0f); glClear(GL_COLOR_BUFFER_BIT); - QOpenGLFunctions* f = QOpenGLContext::currentContext()->functions(); - QOpenGLExtraFunctions* extras = QOpenGLContext::currentContext()->extraFunctions(); - _fboMutex.lock(); - if (_fenceSync) { - extras->glWaitSync(_fenceSync, 0, GL_TIMEOUT_IGNORED); - qDebug() << "wait error" << glGetError(); - qDebug() << "waited on fence"; - } - if (_ready) { - QOpenGLFramebufferObject::blitFramebuffer(framebufferObject(), _copyFbo, GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT, GL_NEAREST); - /*f->glBindTexture(GL_TEXTURE_2D, _copyFbo->texture()); - qDebug() << "bind tex error" << f->glGetError() << "texture" << _copyFbo->texture(); - f->glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, _copyFbo->width(), _copyFbo->height());*/ - qDebug() << "copy error" << f->glGetError(); - } else { - framebufferObject()->release(); - } - _fboMutex.unlock(); - update(); + glFlush(); + _window->resetOpenGLState(); + update(); // schedule a call to render again on next frame (only do this when camera is on, in the future) } From 5c731636b1c12b2073b68ab38c5a14d487a52ae4 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 29 Jun 2017 11:44:05 -0700 Subject: [PATCH 0681/1049] Sandbox restarts crashed processes --- assignment-client/src/AssignmentClientApp.cpp | 35 +++++-------------- assignment-client/src/AssignmentClientApp.h | 1 - .../src/AssignmentClientMonitor.cpp | 4 +-- domain-server/src/DomainServer.cpp | 13 +++++++ libraries/shared/src/SharedUtil.cpp | 21 +++++++++++ libraries/shared/src/SharedUtil.h | 3 ++ server-console/src/main.js | 6 ++-- server-console/src/modules/hf-process.js | 8 +++++ 8 files changed, 58 insertions(+), 33 deletions(-) diff --git a/assignment-client/src/AssignmentClientApp.cpp b/assignment-client/src/AssignmentClientApp.cpp index bc03808c1e..bd656ceb09 100644 --- a/assignment-client/src/AssignmentClientApp.cpp +++ b/assignment-client/src/AssignmentClientApp.cpp @@ -9,8 +9,12 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include -#include +#include "AssignmentClientApp.h" + +#include +#include +#include +#include #include #include @@ -20,30 +24,6 @@ #include "Assignment.h" #include "AssignmentClient.h" #include "AssignmentClientMonitor.h" -#include "AssignmentClientApp.h" -#include -#include - -#ifdef WIN32 -VOID CALLBACK parentDiedCallback(PVOID lpParameter, BOOLEAN timerOrWaitFired) { - if (!timerOrWaitFired && qApp) { - qDebug() << "Parent process died, quitting"; - qApp->quit(); - } -} - -void watchParentProcess(int parentPID) { - DWORD processID = parentPID; - HANDLE procHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID); - - HANDLE newHandle; - RegisterWaitForSingleObject(&newHandle, procHandle, parentDiedCallback, NULL, INFINITE, WT_EXECUTEONLYONCE); -} -#else -void watchParentProcess(int parentPID) { - qWarning() << "Parent PID option not implemented on this plateform"; -} -#endif // WIN32 AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : QCoreApplication(argc, argv) @@ -107,7 +87,7 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : const QCommandLineOption logDirectoryOption(ASSIGNMENT_LOG_DIRECTORY, "directory to store logs", "log-directory"); parser.addOption(logDirectoryOption); - const QCommandLineOption parentPIDOption(ASSIGNMENT_PARENT_PID, "PID of the parent process", "parent-pid"); + const QCommandLineOption parentPIDOption(PARENT_PID_OPTION, "PID of the parent process", "parent-pid"); parser.addOption(parentPIDOption); if (!parser.parse(QCoreApplication::arguments())) { @@ -231,6 +211,7 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : int parentPID = parser.value(parentPIDOption).toInt(&ok); if (ok) { + qDebug() << "Parent process PID is" << parentPID; watchParentProcess(parentPID); } } diff --git a/assignment-client/src/AssignmentClientApp.h b/assignment-client/src/AssignmentClientApp.h index a7c8cdb54d..37d3b9cc1d 100644 --- a/assignment-client/src/AssignmentClientApp.h +++ b/assignment-client/src/AssignmentClientApp.h @@ -27,7 +27,6 @@ const QString ASSIGNMENT_MAX_FORKS_OPTION = "max"; const QString ASSIGNMENT_CLIENT_MONITOR_PORT_OPTION = "monitor-port"; const QString ASSIGNMENT_HTTP_STATUS_PORT = "http-status-port"; const QString ASSIGNMENT_LOG_DIRECTORY = "log-directory"; -const QString ASSIGNMENT_PARENT_PID = "parent-pid"; class AssignmentClientApp : public QCoreApplication { Q_OBJECT diff --git a/assignment-client/src/AssignmentClientMonitor.cpp b/assignment-client/src/AssignmentClientMonitor.cpp index 568a29c8b1..070034d54b 100644 --- a/assignment-client/src/AssignmentClientMonitor.cpp +++ b/assignment-client/src/AssignmentClientMonitor.cpp @@ -131,7 +131,6 @@ void AssignmentClientMonitor::aboutToQuit() { void AssignmentClientMonitor::spawnChildClient() { QProcess* assignmentClient = new QProcess(this); - // unparse the parts of the command-line that the child cares about QStringList _childArguments; if (_assignmentPool != "") { @@ -159,9 +158,8 @@ void AssignmentClientMonitor::spawnChildClient() { // for now they simply talk to us on localhost _childArguments.append("--" + ASSIGNMENT_CLIENT_MONITOR_PORT_OPTION); _childArguments.append(QString::number(DependencyManager::get()->getLocalSockAddr().getPort())); - - _childArguments.append("--" + ASSIGNMENT_PARENT_PID); + _childArguments.append("--" + PARENT_PID_OPTION); _childArguments.append(QString::number(QCoreApplication::applicationPid())); QString nowString, stdoutFilenameTemp, stderrFilenameTemp, stdoutPathTemp, stderrPathTemp; diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 8e3d04897b..095613a473 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -221,6 +221,8 @@ void DomainServer::parseCommandLine() { const QCommandLineOption masterConfigOption("master-config", "Deprecated config-file option"); parser.addOption(masterConfigOption); + const QCommandLineOption parentPIDOption(PARENT_PID_OPTION, "PID of the parent process", "parent-pid"); + parser.addOption(parentPIDOption); if (!parser.parse(QCoreApplication::arguments())) { qWarning() << parser.errorText() << endl; @@ -249,6 +251,17 @@ void DomainServer::parseCommandLine() { _overrideDomainID = true; qDebug() << "domain-server ID is" << _overridingDomainID; } + + + if (parser.isSet(parentPIDOption)) { + bool ok = false; + int parentPID = parser.value(parentPIDOption).toInt(&ok); + + if (ok) { + qDebug() << "Parent process PID is" << parentPID; + watchParentProcess(parentPID); + } + } } DomainServer::~DomainServer() { diff --git a/libraries/shared/src/SharedUtil.cpp b/libraries/shared/src/SharedUtil.cpp index a68d27e620..58b8aead45 100644 --- a/libraries/shared/src/SharedUtil.cpp +++ b/libraries/shared/src/SharedUtil.cpp @@ -1076,3 +1076,24 @@ void setMaxCores(uint8_t maxCores) { SetProcessAffinityMask(process, newProcessAffinity); #endif } + +#ifdef Q_OS_WIN +VOID CALLBACK parentDiedCallback(PVOID lpParameter, BOOLEAN timerOrWaitFired) { + if (!timerOrWaitFired && qApp) { + qDebug() << "Parent process died, quitting"; + qApp->quit(); + } +} + +void watchParentProcess(int parentPID) { + DWORD processID = parentPID; + HANDLE procHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID); + + HANDLE newHandle; + RegisterWaitForSingleObject(&newHandle, procHandle, parentDiedCallback, NULL, INFINITE, WT_EXECUTEONLYONCE); +} +#else +void watchParentProcess(int parentPID) { + qWarning() << "Parent PID option not implemented on this plateform"; +} +#endif // Q_OS_WIN \ No newline at end of file diff --git a/libraries/shared/src/SharedUtil.h b/libraries/shared/src/SharedUtil.h index 0f30842f47..681418a263 100644 --- a/libraries/shared/src/SharedUtil.h +++ b/libraries/shared/src/SharedUtil.h @@ -235,4 +235,7 @@ const QString& getInterfaceSharedMemoryName(); void setMaxCores(uint8_t maxCores); +const QString PARENT_PID_OPTION = "parent-pid"; +void watchParentProcess(int parentPID); + #endif // hifi_SharedUtil_h diff --git a/server-console/src/main.js b/server-console/src/main.js index 95fb0d81b2..9cbdc38f47 100644 --- a/server-console/src/main.js +++ b/server-console/src/main.js @@ -892,10 +892,12 @@ function onContentLoaded() { deleteOldFiles(logPath, DELETE_LOG_FILES_OLDER_THAN_X_SECONDS, LOG_FILE_REGEX); if (dsPath && acPath) { - domainServer = new Process('domain-server', dsPath, ["--get-temp-name"], logPath); + domainServer = new Process('domain-server', dsPath, ['--get-temp-name', + '--parent-pid', process.pid], logPath); acMonitor = new ACMonitorProcess('ac-monitor', acPath, ['-n7', '--log-directory', logPath, - '--http-status-port', httpStatusPort], httpStatusPort, logPath); + '--http-status-port', httpStatusPort, + '--parent-pid', process.pid], httpStatusPort, logPath); homeServer = new ProcessGroup('home', [domainServer, acMonitor]); logWindow = new LogWindow(acMonitor, domainServer); diff --git a/server-console/src/modules/hf-process.js b/server-console/src/modules/hf-process.js index 3c1200fecc..1de0630a0a 100644 --- a/server-console/src/modules/hf-process.js +++ b/server-console/src/modules/hf-process.js @@ -267,7 +267,15 @@ Process.prototype = extend(Process.prototype, { clearTimeout(this.stoppingTimeoutID); this.stoppingTimeoutID = null; } + // Grab current state berofe updating it. + var unexpectedShutdown = this.state != ProcessStates.STOPPING; this.updateState(ProcessStates.STOPPED); + + if (unexpectedShutdown) { + log.warn("Child stopped unexpectedly, restarting."); + this.start(); + return; + } } }); From 8ec20ef0423204f530f066cc8986d6c0a626ddab Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sun, 25 Jun 2017 20:04:49 -0700 Subject: [PATCH 0682/1049] Additional tracing of CPU cores --- interface/src/Application.cpp | 441 ++++++++++++++++++++++++---------- 1 file changed, 315 insertions(+), 126 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 75bcee0703..602495d165 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -2154,48 +2155,74 @@ void Application::paintGL() { return; } - auto displayPlugin = getActiveDisplayPlugin(); - // FIXME not needed anymore? - _offscreenContext->makeCurrent(); + DisplayPluginPointer displayPlugin; + { + PROFILE_RANGE(render, "/getActiveDisplayPlugin"); + displayPlugin = getActiveDisplayPlugin(); + } - // If a display plugin loses it's underlying support, it - // needs to be able to signal us to not use it - if (!displayPlugin->beginFrameRender(_frameCount)) { - _inPaint = false; - updateDisplayMode(); - return; + { + PROFILE_RANGE(render, "/offscreenMakeCurrent"); + // FIXME not needed anymore? + _offscreenContext->makeCurrent(); + } + + { + PROFILE_RANGE(render, "/pluginBeginFrameRender"); + // If a display plugin loses it's underlying support, it + // needs to be able to signal us to not use it + if (!displayPlugin->beginFrameRender(_frameCount)) { + _inPaint = false; + updateDisplayMode(); + return; + } } // update the avatar with a fresh HMD pose - getMyAvatar()->updateFromHMDSensorMatrix(getHMDSensorPose()); + { + PROFILE_RANGE(render, "/updateAvatar"); + getMyAvatar()->updateFromHMDSensorMatrix(getHMDSensorPose()); + } auto lodManager = DependencyManager::get(); + RenderArgs renderArgs; { - QMutexLocker viewLocker(&_viewMutex); - _viewFrustum.calculate(); - } - RenderArgs renderArgs(_gpuContext, getEntities(), lodManager->getOctreeSizeScale(), - lodManager->getBoundaryLevelAdjust(), RenderArgs::DEFAULT_RENDER_MODE, - RenderArgs::MONO, RenderArgs::RENDER_DEBUG_NONE); - { - QMutexLocker viewLocker(&_viewMutex); - renderArgs.setViewFrustum(_viewFrustum); + PROFILE_RANGE(render, "/buildFrustrumAndArgs"); + { + QMutexLocker viewLocker(&_viewMutex); + _viewFrustum.calculate(); + } + renderArgs = RenderArgs(_gpuContext, getEntities(), lodManager->getOctreeSizeScale(), + lodManager->getBoundaryLevelAdjust(), RenderArgs::DEFAULT_RENDER_MODE, + RenderArgs::MONO, RenderArgs::RENDER_DEBUG_NONE); + { + QMutexLocker viewLocker(&_viewMutex); + renderArgs.setViewFrustum(_viewFrustum); + } } - PerformanceWarning::setSuppressShortTimings(Menu::getInstance()->isOptionChecked(MenuOption::SuppressShortTimings)); - bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings); - PerformanceWarning warn(showWarnings, "Application::paintGL()"); - resizeGL(); - - _gpuContext->beginFrame(getHMDSensorPose()); - // Reset the gpu::Context Stages - // Back to the default framebuffer; - gpu::doInBatch(_gpuContext, [&](gpu::Batch& batch) { - batch.resetStages(); - }); + { + PROFILE_RANGE(render, "/resizeGL"); + PerformanceWarning::setSuppressShortTimings(Menu::getInstance()->isOptionChecked(MenuOption::SuppressShortTimings)); + bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings); + PerformanceWarning warn(showWarnings, "Application::paintGL()"); + resizeGL(); + } { + PROFILE_RANGE(render, "/gpuContextReset"); + _gpuContext->beginFrame(getHMDSensorPose()); + // Reset the gpu::Context Stages + // Back to the default framebuffer; + gpu::doInBatch(_gpuContext, [&](gpu::Batch& batch) { + batch.resetStages(); + }); + } + + + { + PROFILE_RANGE(render, "/renderOverlay"); PerformanceTimer perfTimer("renderOverlay"); // NOTE: There is no batch associated with this renderArgs // the ApplicationOverlay class assumes it's viewport is setup to be the device size @@ -2206,114 +2233,127 @@ void Application::paintGL() { glm::vec3 boomOffset; { - PerformanceTimer perfTimer("CameraUpdates"); + PROFILE_RANGE(render, "/updateCamera"); + { + PerformanceTimer perfTimer("CameraUpdates"); - auto myAvatar = getMyAvatar(); - boomOffset = myAvatar->getScale() * myAvatar->getBoomLength() * -IDENTITY_FORWARD; + auto myAvatar = getMyAvatar(); + boomOffset = myAvatar->getScale() * myAvatar->getBoomLength() * -IDENTITY_FORWARD; - if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON || _myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { - Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, myAvatar->getBoomLength() <= MyAvatar::ZOOM_MIN); - Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, !(myAvatar->getBoomLength() <= MyAvatar::ZOOM_MIN)); - cameraMenuChanged(); - } - - // The render mode is default or mirror if the camera is in mirror mode, assigned further below - renderArgs._renderMode = RenderArgs::DEFAULT_RENDER_MODE; - - // Always use the default eye position, not the actual head eye position. - // Using the latter will cause the camera to wobble with idle animations, - // or with changes from the face tracker - if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { - if (isHMDMode()) { - mat4 camMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix(); - _myCamera.setPosition(extractTranslation(camMat)); - _myCamera.setOrientation(glm::quat_cast(camMat)); - } else { - _myCamera.setPosition(myAvatar->getDefaultEyePosition()); - _myCamera.setOrientation(myAvatar->getMyHead()->getHeadOrientation()); + if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON || _myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { + Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, myAvatar->getBoomLength() <= MyAvatar::ZOOM_MIN); + Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, !(myAvatar->getBoomLength() <= MyAvatar::ZOOM_MIN)); + cameraMenuChanged(); } - } else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { - if (isHMDMode()) { - auto hmdWorldMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix(); - _myCamera.setOrientation(glm::normalize(glm::quat_cast(hmdWorldMat))); - _myCamera.setPosition(extractTranslation(hmdWorldMat) + - myAvatar->getOrientation() * boomOffset); - } else { - _myCamera.setOrientation(myAvatar->getHead()->getOrientation()); - if (Menu::getInstance()->isOptionChecked(MenuOption::CenterPlayerInView)) { - _myCamera.setPosition(myAvatar->getDefaultEyePosition() - + _myCamera.getOrientation() * boomOffset); - } else { - _myCamera.setPosition(myAvatar->getDefaultEyePosition() - + myAvatar->getOrientation() * boomOffset); - } - } - } else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { - if (isHMDMode()) { - auto mirrorBodyOrientation = myAvatar->getWorldAlignedOrientation() * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f)); - glm::quat hmdRotation = extractRotation(myAvatar->getHMDSensorMatrix()); - // Mirror HMD yaw and roll - glm::vec3 mirrorHmdEulers = glm::eulerAngles(hmdRotation); - mirrorHmdEulers.y = -mirrorHmdEulers.y; - mirrorHmdEulers.z = -mirrorHmdEulers.z; - glm::quat mirrorHmdRotation = glm::quat(mirrorHmdEulers); + // The render mode is default or mirror if the camera is in mirror mode, assigned further below + renderArgs._renderMode = RenderArgs::DEFAULT_RENDER_MODE; - glm::quat worldMirrorRotation = mirrorBodyOrientation * mirrorHmdRotation; - - _myCamera.setOrientation(worldMirrorRotation); - - glm::vec3 hmdOffset = extractTranslation(myAvatar->getHMDSensorMatrix()); - // Mirror HMD lateral offsets - hmdOffset.x = -hmdOffset.x; - - _myCamera.setPosition(myAvatar->getDefaultEyePosition() - + glm::vec3(0, _raiseMirror * myAvatar->getUniformScale(), 0) - + mirrorBodyOrientation * glm::vec3(0.0f, 0.0f, 1.0f) * MIRROR_FULLSCREEN_DISTANCE * _scaleMirror - + mirrorBodyOrientation * hmdOffset); - } else { - _myCamera.setOrientation(myAvatar->getWorldAlignedOrientation() - * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f))); - _myCamera.setPosition(myAvatar->getDefaultEyePosition() - + glm::vec3(0, _raiseMirror * myAvatar->getUniformScale(), 0) - + (myAvatar->getOrientation() * glm::quat(glm::vec3(0.0f, _rotateMirror, 0.0f))) * - glm::vec3(0.0f, 0.0f, -1.0f) * MIRROR_FULLSCREEN_DISTANCE * _scaleMirror); - } - renderArgs._renderMode = RenderArgs::MIRROR_RENDER_MODE; - } else if (_myCamera.getMode() == CAMERA_MODE_ENTITY) { - EntityItemPointer cameraEntity = _myCamera.getCameraEntityPointer(); - if (cameraEntity != nullptr) { + // Always use the default eye position, not the actual head eye position. + // Using the latter will cause the camera to wobble with idle animations, + // or with changes from the face tracker + if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { if (isHMDMode()) { - glm::quat hmdRotation = extractRotation(myAvatar->getHMDSensorMatrix()); - _myCamera.setOrientation(cameraEntity->getRotation() * hmdRotation); - glm::vec3 hmdOffset = extractTranslation(myAvatar->getHMDSensorMatrix()); - _myCamera.setPosition(cameraEntity->getPosition() + (hmdRotation * hmdOffset)); + mat4 camMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix(); + _myCamera.setPosition(extractTranslation(camMat)); + _myCamera.setOrientation(glm::quat_cast(camMat)); } else { - _myCamera.setOrientation(cameraEntity->getRotation()); - _myCamera.setPosition(cameraEntity->getPosition()); + _myCamera.setPosition(myAvatar->getDefaultEyePosition()); + _myCamera.setOrientation(myAvatar->getMyHead()->getHeadOrientation()); + } + } else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { + if (isHMDMode()) { + auto hmdWorldMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix(); + _myCamera.setOrientation(glm::normalize(glm::quat_cast(hmdWorldMat))); + _myCamera.setPosition(extractTranslation(hmdWorldMat) + + myAvatar->getOrientation() * boomOffset); + } else { + _myCamera.setOrientation(myAvatar->getHead()->getOrientation()); + if (Menu::getInstance()->isOptionChecked(MenuOption::CenterPlayerInView)) { + _myCamera.setPosition(myAvatar->getDefaultEyePosition() + + _myCamera.getOrientation() * boomOffset); + } else { + _myCamera.setPosition(myAvatar->getDefaultEyePosition() + + myAvatar->getOrientation() * boomOffset); + } + } + } else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { + if (isHMDMode()) { + auto mirrorBodyOrientation = myAvatar->getWorldAlignedOrientation() * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f)); + + glm::quat hmdRotation = extractRotation(myAvatar->getHMDSensorMatrix()); + // Mirror HMD yaw and roll + glm::vec3 mirrorHmdEulers = glm::eulerAngles(hmdRotation); + mirrorHmdEulers.y = -mirrorHmdEulers.y; + mirrorHmdEulers.z = -mirrorHmdEulers.z; + glm::quat mirrorHmdRotation = glm::quat(mirrorHmdEulers); + + glm::quat worldMirrorRotation = mirrorBodyOrientation * mirrorHmdRotation; + + _myCamera.setOrientation(worldMirrorRotation); + + glm::vec3 hmdOffset = extractTranslation(myAvatar->getHMDSensorMatrix()); + // Mirror HMD lateral offsets + hmdOffset.x = -hmdOffset.x; + + _myCamera.setPosition(myAvatar->getDefaultEyePosition() + + glm::vec3(0, _raiseMirror * myAvatar->getUniformScale(), 0) + + mirrorBodyOrientation * glm::vec3(0.0f, 0.0f, 1.0f) * MIRROR_FULLSCREEN_DISTANCE * _scaleMirror + + mirrorBodyOrientation * hmdOffset); + } else { + _myCamera.setOrientation(myAvatar->getWorldAlignedOrientation() + * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f))); + _myCamera.setPosition(myAvatar->getDefaultEyePosition() + + glm::vec3(0, _raiseMirror * myAvatar->getUniformScale(), 0) + + (myAvatar->getOrientation() * glm::quat(glm::vec3(0.0f, _rotateMirror, 0.0f))) * + glm::vec3(0.0f, 0.0f, -1.0f) * MIRROR_FULLSCREEN_DISTANCE * _scaleMirror); + } + renderArgs._renderMode = RenderArgs::MIRROR_RENDER_MODE; + } else if (_myCamera.getMode() == CAMERA_MODE_ENTITY) { + EntityItemPointer cameraEntity = _myCamera.getCameraEntityPointer(); + if (cameraEntity != nullptr) { + if (isHMDMode()) { + glm::quat hmdRotation = extractRotation(myAvatar->getHMDSensorMatrix()); + _myCamera.setOrientation(cameraEntity->getRotation() * hmdRotation); + glm::vec3 hmdOffset = extractTranslation(myAvatar->getHMDSensorMatrix()); + _myCamera.setPosition(cameraEntity->getPosition() + (hmdRotation * hmdOffset)); + } else { + _myCamera.setOrientation(cameraEntity->getRotation()); + _myCamera.setPosition(cameraEntity->getPosition()); + } } } - } - // Update camera position - if (!isHMDMode()) { - _myCamera.update(1.0f / _frameCounter.rate()); + // Update camera position + if (!isHMDMode()) { + _myCamera.update(1.0f / _frameCounter.rate()); + } } } - getApplicationCompositor().setFrameInfo(_frameCount, _myCamera.getTransform()); + { + PROFILE_RANGE(render, "/updateCompositor"); + getApplicationCompositor().setFrameInfo(_frameCount, _myCamera.getTransform()); + } - // Primary rendering pass - auto framebufferCache = DependencyManager::get(); - const QSize size = framebufferCache->getFrameBufferSize(); - // Final framebuffer that will be handled to the display-plugin - auto finalFramebuffer = framebufferCache->getFramebuffer(); + gpu::FramebufferPointer finalFramebuffer; + QSize finalFramebufferSize; + { + PROFILE_RANGE(render, "/getOutputFramebuffer"); + // Primary rendering pass + auto framebufferCache = DependencyManager::get(); + finalFramebufferSize = framebufferCache->getFrameBufferSize(); + // Final framebuffer that will be handled to the display-plugin + finalFramebuffer = framebufferCache->getFramebuffer(); + } { PROFILE_RANGE(render, "/mainRender"); PerformanceTimer perfTimer("mainRender"); renderArgs._boomOffset = boomOffset; + // FIXME is this ever going to be different from the size previously set in the render args + // in the overlay render? // Viewport is assigned to the size of the framebuffer - renderArgs._viewport = ivec4(0, 0, size.width(), size.height()); + renderArgs._viewport = ivec4(0, 0, finalFramebufferSize.width(), finalFramebufferSize.height()); if (displayPlugin->isStereo()) { // Stereo modes will typically have a larger projection matrix overall, // so we ask for the 'mono' projection matrix, which for stereo and HMD @@ -3613,6 +3653,133 @@ bool Application::shouldPaint(float nsecsElapsed) { #include #include #pragma comment(lib, "pdh.lib") +#pragma comment(lib, "ntdll.lib") + +extern "C" { + enum SYSTEM_INFORMATION_CLASS { + SystemBasicInformation = 0, + SystemProcessorPerformanceInformation = 8, + }; + + struct SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION { + LARGE_INTEGER IdleTime; + LARGE_INTEGER KernelTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER DpcTime; + LARGE_INTEGER InterruptTime; + ULONG InterruptCount; + }; + + struct SYSTEM_BASIC_INFORMATION { + ULONG Reserved; + ULONG TimerResolution; + ULONG PageSize; + ULONG NumberOfPhysicalPages; + ULONG LowestPhysicalPageNumber; + ULONG HighestPhysicalPageNumber; + ULONG AllocationGranularity; + ULONG_PTR MinimumUserModeAddress; + ULONG_PTR MaximumUserModeAddress; + ULONG_PTR ActiveProcessorsAffinityMask; + CCHAR NumberOfProcessors; + }; + + NTSYSCALLAPI NTSTATUS NTAPI NtQuerySystemInformation( + _In_ SYSTEM_INFORMATION_CLASS SystemInformationClass, + _Out_writes_bytes_opt_(SystemInformationLength) PVOID SystemInformation, + _In_ ULONG SystemInformationLength, + _Out_opt_ PULONG ReturnLength + ); + +} +template +NTSTATUS NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass, T& t) { + return NtQuerySystemInformation(SystemInformationClass, &t, (ULONG)sizeof(T), nullptr); +} + +template +NTSTATUS NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass, std::vector& t) { + return NtQuerySystemInformation(SystemInformationClass, t.data(), (ULONG)(sizeof(T) * t.size()), nullptr); +} + + +template +void updateValueAndDelta(std::pair& pair, T newValue) { + auto& value = pair.first; + auto& delta = pair.second; + delta = (value != 0) ? newValue - value : 0; + value = newValue; +} + +struct MyCpuInfo { + using ValueAndDelta = std::pair; + std::string name; + ValueAndDelta kernel { 0, 0 }; + ValueAndDelta user { 0, 0 }; + ValueAndDelta idle { 0, 0 }; + float kernelUsage { 0.0f }; + float userUsage { 0.0f }; + + void update(const SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION& cpuInfo) { + updateValueAndDelta(kernel, cpuInfo.KernelTime.QuadPart); + updateValueAndDelta(user, cpuInfo.UserTime.QuadPart); + updateValueAndDelta(idle, cpuInfo.IdleTime.QuadPart); + auto totalTime = kernel.second + user.second + idle.second; + if (totalTime != 0) { + kernelUsage = (FLOAT)kernel.second / totalTime; + userUsage = (FLOAT)user.second / totalTime; + } else { + kernelUsage = userUsage = 0.0f; + } + } +}; + +void updateCpuInformation() { + static std::once_flag once; + static SYSTEM_BASIC_INFORMATION systemInfo {}; + static SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION cpuTotals; + static std::vector cpuInfos; + static std::vector myCpuInfos; + static MyCpuInfo myCpuTotals; + std::call_once(once, [&] { + NtQuerySystemInformation( SystemBasicInformation, systemInfo); + cpuInfos.resize(systemInfo.NumberOfProcessors); + myCpuInfos.resize(systemInfo.NumberOfProcessors); + for (size_t i = 0; i < systemInfo.NumberOfProcessors; ++i) { + myCpuInfos[i].name = "cpu." + std::to_string(i); + } + myCpuTotals.name = "cpu.total"; + }); + NtQuerySystemInformation(SystemProcessorPerformanceInformation, cpuInfos); + + // Zero the CPU totals. + memset(&cpuTotals, 0, sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)); + for (size_t i = 0; i < systemInfo.NumberOfProcessors; ++i) { + auto& cpuInfo = cpuInfos[i]; + // KernelTime includes IdleTime. + cpuInfo.KernelTime.QuadPart -= cpuInfo.IdleTime.QuadPart; + + // Update totals + cpuTotals.IdleTime.QuadPart += cpuInfo.IdleTime.QuadPart; + cpuTotals.KernelTime.QuadPart += cpuInfo.KernelTime.QuadPart; + cpuTotals.UserTime.QuadPart += cpuInfo.UserTime.QuadPart; + + // Update friendly structure + auto& myCpuInfo = myCpuInfos[i]; + myCpuInfo.update(cpuInfo); + PROFILE_COUNTER(app, myCpuInfo.name.c_str(), { + { "kernel", myCpuInfo.kernelUsage }, + { "user", myCpuInfo.userUsage } + }); + } + + myCpuTotals.update(cpuTotals); + PROFILE_COUNTER(app, myCpuTotals.name.c_str(), { + { "kernel", myCpuTotals.kernelUsage }, + { "user", myCpuTotals.userUsage } + }); +} + static ULARGE_INTEGER lastCPU, lastSysCPU, lastUserCPU; static int numProcessors; @@ -3665,6 +3832,26 @@ void getCpuUsage(vec3& systemAndUser) { systemAndUser.z = (float)counterVal.doubleValue; } +void setupCpuMonitorThread() { + initCpuUsage(); + auto cpuMonitorThread = QThread::currentThread(); + + QTimer* timer = new QTimer(); + timer->setInterval(50); + QObject::connect(timer, &QTimer::timeout, [] { + updateCpuInformation(); + vec3 kernelUserAndSystem; + getCpuUsage(kernelUserAndSystem); + PROFILE_COUNTER(app, "cpuProcess", { { "system", kernelUserAndSystem.x }, { "user", kernelUserAndSystem.y } }); + PROFILE_COUNTER(app, "cpuSystem", { { "system", kernelUserAndSystem.z } }); + }); + QObject::connect(cpuMonitorThread, &QThread::finished, [=] { + timer->deleteLater(); + cpuMonitorThread->deleteLater(); + }); + timer->start(); +} + #endif @@ -3685,15 +3872,17 @@ void Application::idle(float nsecsElapsed) { } #ifdef Q_OS_WIN + // If tracing is enabled then monitor the CPU in a separate thread static std::once_flag once; - std::call_once(once, [] { - initCpuUsage(); + std::call_once(once, [&] { + if (trace_app().isDebugEnabled()) { + QThread* cpuMonitorThread = new QThread(qApp); + cpuMonitorThread->setObjectName("cpuMonitorThread"); + QObject::connect(cpuMonitorThread, &QThread::started, [this] { setupCpuMonitorThread(); }); + QObject::connect(qApp, &QCoreApplication::aboutToQuit, cpuMonitorThread, &QThread::quit); + cpuMonitorThread->start(); + } }); - - vec3 kernelUserAndSystem; - getCpuUsage(kernelUserAndSystem); - PROFILE_COUNTER(app, "cpuProcess", { { "system", kernelUserAndSystem.x }, { "user", kernelUserAndSystem.y } }); - PROFILE_COUNTER(app, "cpuSystem", { { "system", kernelUserAndSystem.z } }); #endif From bf0a8e0f91c6bfa5a98d894d4a8ef1e8f1552ee3 Mon Sep 17 00:00:00 2001 From: Menithal Date: Thu, 29 Jun 2017 23:18:52 +0300 Subject: [PATCH 0683/1049] Updated Comment --- interface/src/AvatarBookmarks.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/AvatarBookmarks.cpp b/interface/src/AvatarBookmarks.cpp index db83a82a1e..73192b0bef 100644 --- a/interface/src/AvatarBookmarks.cpp +++ b/interface/src/AvatarBookmarks.cpp @@ -85,7 +85,7 @@ void AvatarBookmarks::changeToBookmarkedAvatar() { const QMap bookmark = action->data().toMap(); // Not magic value. This is the current made version, and if it changes this interpreter should be updated to // handle the new one separately. - // This is where the avatar bookmark entry is parsed. If adding new Paradrims, make sure to have backward compat with previous + // This is where the avatar bookmark entry is parsed. If adding new Value, make sure to have backward compatability with previous if (bookmark.value(ENTRY_VERSION) == 3) { const QString& avatarUrl = bookmark.value(ENTRY_AVATAR_URL, "").toString(); myAvatar->useFullAvatarURL(avatarUrl); From ec7fe81b87f87958821b6497e08d92d32f45b318 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 29 Jun 2017 13:22:11 -0700 Subject: [PATCH 0684/1049] Sandbox doesn't restart Interface. --- server-console/src/main.js | 18 ++++++++++++------ server-console/src/modules/hf-process.js | 9 +++++---- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/server-console/src/main.js b/server-console/src/main.js index 9cbdc38f47..b99d1387b5 100644 --- a/server-console/src/main.js +++ b/server-console/src/main.js @@ -892,12 +892,18 @@ function onContentLoaded() { deleteOldFiles(logPath, DELETE_LOG_FILES_OLDER_THAN_X_SECONDS, LOG_FILE_REGEX); if (dsPath && acPath) { - domainServer = new Process('domain-server', dsPath, ['--get-temp-name', - '--parent-pid', process.pid], logPath); - acMonitor = new ACMonitorProcess('ac-monitor', acPath, ['-n7', - '--log-directory', logPath, - '--http-status-port', httpStatusPort, - '--parent-pid', process.pid], httpStatusPort, logPath); + var dsArguments = ['--get-temp-name', + '--parent-pid', process.pid]; + domainServer = new Process('domain-server', dsPath, dsArguments, + logPath, true); + + var acArguments = ['-n7', + '--log-directory', logPath, + '--http-status-port', httpStatusPort, + '--parent-pid', process.pid]; + acMonitor = new ACMonitorProcess('ac-monitor', acPath, acArguments, + httpStatusPort, logPath, true); + homeServer = new ProcessGroup('home', [domainServer, acMonitor]); logWindow = new LogWindow(acMonitor, domainServer); diff --git a/server-console/src/modules/hf-process.js b/server-console/src/modules/hf-process.js index 1de0630a0a..af728eeda7 100644 --- a/server-console/src/modules/hf-process.js +++ b/server-console/src/modules/hf-process.js @@ -102,7 +102,7 @@ ProcessGroup.prototype = extend(ProcessGroup.prototype, { }); var ID = 0; -function Process(name, command, commandArgs, logDirectory) { +function Process(name, command, commandArgs, logDirectory, restartOnCrash) { events.EventEmitter.call(this); this.id = ++ID; @@ -113,6 +113,7 @@ function Process(name, command, commandArgs, logDirectory) { this.logDirectory = logDirectory; this.logStdout = null; this.logStderr = null; + this.restartOnCrash = restartOnCrash; this.state = ProcessStates.STOPPED; }; @@ -271,7 +272,7 @@ Process.prototype = extend(Process.prototype, { var unexpectedShutdown = this.state != ProcessStates.STOPPING; this.updateState(ProcessStates.STOPPED); - if (unexpectedShutdown) { + if (unexpectedShutdown && this.restartOnCrash) { log.warn("Child stopped unexpectedly, restarting."); this.start(); return; @@ -282,8 +283,8 @@ Process.prototype = extend(Process.prototype, { // ACMonitorProcess is an extension of Process that keeps track of the AC Montior's // children status and log locations. const CHECK_AC_STATUS_INTERVAL = 1000; -function ACMonitorProcess(name, path, args, httpStatusPort, logPath) { - Process.call(this, name, path, args, logPath); +function ACMonitorProcess(name, path, args, httpStatusPort, logPath, restartOnCrash) { + Process.call(this, name, path, args, logPath, restartOnCrash); this.httpStatusPort = httpStatusPort; From 22099a14a867fa5235449c543b95ec71344f649d Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 29 Jun 2017 13:50:40 -0700 Subject: [PATCH 0685/1049] Go Home spawns interface detached --- server-console/src/main.js | 8 +++++--- server-console/src/modules/hf-process.js | 11 ++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/server-console/src/main.js b/server-console/src/main.js index b99d1387b5..efa04a8512 100644 --- a/server-console/src/main.js +++ b/server-console/src/main.js @@ -334,6 +334,7 @@ function startInterface(url) { // create a new Interface instance - Interface makes sure only one is running at a time var pInterface = new Process('interface', interfacePath, argArray); + pInterface.detached = true; pInterface.start(); } @@ -894,15 +895,16 @@ function onContentLoaded() { if (dsPath && acPath) { var dsArguments = ['--get-temp-name', '--parent-pid', process.pid]; - domainServer = new Process('domain-server', dsPath, dsArguments, - logPath, true); + domainServer = new Process('domain-server', dsPath, dsArguments, logPath); + domainServer.restartOnCrash = true; var acArguments = ['-n7', '--log-directory', logPath, '--http-status-port', httpStatusPort, '--parent-pid', process.pid]; acMonitor = new ACMonitorProcess('ac-monitor', acPath, acArguments, - httpStatusPort, logPath, true); + httpStatusPort, logPath); + acMonitor.restartOnCrash = true; homeServer = new ProcessGroup('home', [domainServer, acMonitor]); logWindow = new LogWindow(acMonitor, domainServer); diff --git a/server-console/src/modules/hf-process.js b/server-console/src/modules/hf-process.js index af728eeda7..b75835c06f 100644 --- a/server-console/src/modules/hf-process.js +++ b/server-console/src/modules/hf-process.js @@ -102,7 +102,7 @@ ProcessGroup.prototype = extend(ProcessGroup.prototype, { }); var ID = 0; -function Process(name, command, commandArgs, logDirectory, restartOnCrash) { +function Process(name, command, commandArgs, logDirectory) { events.EventEmitter.call(this); this.id = ++ID; @@ -113,7 +113,8 @@ function Process(name, command, commandArgs, logDirectory, restartOnCrash) { this.logDirectory = logDirectory; this.logStdout = null; this.logStderr = null; - this.restartOnCrash = restartOnCrash; + this.detached = false; + this.restartOnCrash = false; this.state = ProcessStates.STOPPED; }; @@ -166,7 +167,7 @@ Process.prototype = extend(Process.prototype, { try { this.child = childProcess.spawn(this.command, this.commandArgs, { - detached: false, + detached: this.detached, stdio: ['ignore', logStdout, logStderr] }); log.debug("Spawned " + this.command + " with pid " + this.child.pid); @@ -283,8 +284,8 @@ Process.prototype = extend(Process.prototype, { // ACMonitorProcess is an extension of Process that keeps track of the AC Montior's // children status and log locations. const CHECK_AC_STATUS_INTERVAL = 1000; -function ACMonitorProcess(name, path, args, httpStatusPort, logPath, restartOnCrash) { - Process.call(this, name, path, args, logPath, restartOnCrash); +function ACMonitorProcess(name, path, args, httpStatusPort, logPath) { + Process.call(this, name, path, args, logPath); this.httpStatusPort = httpStatusPort; From b52dd7b8224f63da59da86ed099af26d21cad5b0 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 29 Jun 2017 17:00:27 -0700 Subject: [PATCH 0686/1049] Don't use blocking connections on the main thread --- assignment-client/src/AssignmentClient.cpp | 3 +- .../src/avatars/ScriptableAvatar.cpp | 3 +- interface/src/Application.cpp | 45 +++++++++------ interface/src/Application.h | 4 +- interface/src/avatar/AvatarManager.cpp | 3 +- interface/src/avatar/MyAvatar.cpp | 9 +-- interface/src/scripting/Audio.cpp | 40 ++++++------- interface/src/scripting/Audio.h | 7 ++- interface/src/scripting/AudioDevices.cpp | 21 ++++--- interface/src/scripting/AudioDevices.h | 2 +- .../scripting/ClipboardScriptingInterface.cpp | 13 +++-- .../scripting/ClipboardScriptingInterface.h | 4 ++ .../src/scripting/MenuScriptingInterface.cpp | 11 ++-- .../scripting/WindowScriptingInterface.cpp | 7 ++- .../src/scripting/WindowScriptingInterface.h | 2 + interface/src/ui/JSConsole.cpp | 3 +- libraries/animation/src/AnimationCache.cpp | 13 +++-- libraries/audio-client/src/AudioClient.cpp | 19 ++++++- libraries/audio-client/src/AudioClient.h | 9 ++- libraries/audio/src/SoundCache.cpp | 9 ++- .../src/avatars-renderer/Avatar.cpp | 11 ++-- libraries/avatars/src/AvatarData.cpp | 31 +++++----- .../src/display-plugins/CompositorHelper.cpp | 6 +- .../src/EntityTreeRenderer.cpp | 5 +- .../entities/src/EntityScriptingInterface.cpp | 11 ++-- libraries/networking/src/NodeList.cpp | 3 +- libraries/networking/src/ResourceCache.cpp | 14 +++-- libraries/networking/src/udt/Socket.cpp | 3 +- .../src/plugins/InputConfiguration.cpp | 16 +++--- .../recording/src/recording/ClipCache.cpp | 4 +- libraries/render-utils/src/Model.cpp | 3 +- libraries/render/src/task/Config.cpp | 7 ++- .../src/AudioScriptingInterface.cpp | 4 +- .../src/RecordingScriptingInterface.cpp | 17 +++--- libraries/script-engine/src/ScriptEngine.cpp | 7 ++- libraries/script-engine/src/ScriptEngines.cpp | 3 +- libraries/shared/src/ThreadHelpers.h | 22 +++++++ libraries/shared/src/shared/QtHelpers.cpp | 57 +++++++++++++++++++ libraries/shared/src/shared/QtHelpers.h | 47 +++++++++++++++ libraries/ui/src/OffscreenUi.cpp | 15 ++--- libraries/ui/src/ui/Menu.cpp | 4 +- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 5 +- libraries/ui/src/ui/QmlWrapper.cpp | 6 +- .../ui/src/ui/TabletScriptingInterface.cpp | 15 ++--- .../ui/src/ui/ToolbarScriptingInterface.cpp | 12 ++-- 45 files changed, 377 insertions(+), 178 deletions(-) create mode 100644 libraries/shared/src/shared/QtHelpers.cpp create mode 100644 libraries/shared/src/shared/QtHelpers.h diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index abfc66ac55..2db1fba952 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -141,7 +142,7 @@ void AssignmentClient::stopAssignmentClient() { QThread* currentAssignmentThread = _currentAssignment->thread(); // ask the current assignment to stop - QMetaObject::invokeMethod(_currentAssignment, "stop", Qt::BlockingQueuedConnection); + hifi::qt::blockingInvokeMethod(_currentAssignment, "stop"); // ask the current assignment to delete itself on its thread _currentAssignment->deleteLater(); diff --git a/assignment-client/src/avatars/ScriptableAvatar.cpp b/assignment-client/src/avatars/ScriptableAvatar.cpp index 57456b00c3..4e2836119e 100644 --- a/assignment-client/src/avatars/ScriptableAvatar.cpp +++ b/assignment-client/src/avatars/ScriptableAvatar.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include #include "ScriptableAvatar.h" @@ -49,7 +50,7 @@ void ScriptableAvatar::stopAnimation() { AnimationDetails ScriptableAvatar::getAnimationDetails() { if (QThread::currentThread() != thread()) { AnimationDetails result; - QMetaObject::invokeMethod(this, "getAnimationDetails", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "getAnimationDetails", Q_RETURN_ARG(AnimationDetails, result)); return result; } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 75bcee0703..1a31877c1b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -48,6 +48,7 @@ #include +#include #include #include #include @@ -1208,15 +1209,26 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // Make sure we don't time out during slow operations at startup updateHeartbeat(); - int SAVE_SETTINGS_INTERVAL = 10 * MSECS_PER_SECOND; // Let's save every seconds for now - connect(&_settingsTimer, &QTimer::timeout, this, &Application::saveSettings); - connect(&_settingsThread, SIGNAL(started()), &_settingsTimer, SLOT(start())); - connect(&_settingsThread, SIGNAL(finished()), &_settingsTimer, SLOT(stop())); - _settingsTimer.moveToThread(&_settingsThread); - _settingsTimer.setSingleShot(false); - _settingsTimer.setInterval(SAVE_SETTINGS_INTERVAL); // 10s, Qt::CoarseTimer acceptable - _settingsThread.setPriority(QThread::LowestPriority); - _settingsThread.start(); + + QTimer* settingsTimer = new QTimer(); + moveToNewNamedThread(settingsTimer, "Settings Thread", [this, settingsTimer]{ + connect(qApp, &Application::beforeAboutToQuit, [this, settingsTimer]{ + // Disconnect the signal from the save settings + QObject::disconnect(settingsTimer, &QTimer::timeout, this, &Application::saveSettings); + // Stop the settings timer + settingsTimer->stop(); + // Delete it (this will trigger the thread destruction + settingsTimer->deleteLater(); + // Mark the settings thread as finished, so we know we can safely save in the main application + // shutdown code + _settingsGuard.trigger(); + }); + + int SAVE_SETTINGS_INTERVAL = 10 * MSECS_PER_SECOND; // Let's save every seconds for now + settingsTimer->setSingleShot(false); + settingsTimer->setInterval(SAVE_SETTINGS_INTERVAL); // 10s, Qt::CoarseTimer acceptable + QObject::connect(settingsTimer, &QTimer::timeout, this, &Application::saveSettings); + }, QThread::LowestPriority); if (Menu::getInstance()->isOptionChecked(MenuOption::FirstPerson)) { getMyAvatar()->setBoomLength(MyAvatar::ZOOM_MIN); // So that camera doesn't auto-switch to third person. @@ -1644,7 +1656,7 @@ QString Application::getUserAgent() { if (QThread::currentThread() != thread()) { QString userAgent; - QMetaObject::invokeMethod(this, "getUserAgent", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QString, userAgent)); + hifi::qt::blockingInvokeMethod(this, "getUserAgent", Q_RETURN_ARG(QString, userAgent)); return userAgent; } @@ -1802,11 +1814,13 @@ void Application::cleanupBeforeQuit() { locationUpdateTimer.stop(); identityPacketTimer.stop(); pingTimer.stop(); - QMetaObject::invokeMethod(&_settingsTimer, "stop", Qt::BlockingQueuedConnection); - // save state - _settingsThread.quit(); - saveSettings(); + // Wait for the settings thread to shut down, and save the settings one last time when it's safe + if (_settingsGuard.wait()) { + // save state + saveSettings(); + } + _window->saveGeometry(); // Destroy third party processes after scripts have finished using them. @@ -1830,8 +1844,7 @@ void Application::cleanupBeforeQuit() { // FIXME: something else is holding a reference to AudioClient, // so it must be explicitly synchronously stopped here - QMetaObject::invokeMethod(DependencyManager::get().data(), - "cleanupBeforeQuit", Qt::BlockingQueuedConnection); + QMetaObject::invokeMethod(DependencyManager::get().data(), "cleanupBeforeQuit", Qt::BlockingQueuedConnection); // destroy Audio so it and its threads have a chance to go down safely // this must happen after QML, as there are unexplained audio crashes originating in qtwebengine diff --git a/interface/src/Application.h b/interface/src/Application.h index c26b3b215e..28d95a280c 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -596,8 +597,7 @@ private: bool _notifiedPacketVersionMismatchThisDomain; - QThread _settingsThread; - QTimer _settingsTimer; + ConditionalGuard _settingsGuard; GLCanvas* _glWidget{ nullptr }; diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 20b3949bc6..abdcd48b42 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -25,6 +25,7 @@ #endif +#include #include #include #include @@ -482,7 +483,7 @@ RayToAvatarIntersectionResult AvatarManager::findRayIntersection(const PickRay& const QScriptValue& avatarIdsToDiscard) { RayToAvatarIntersectionResult result; if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(const_cast(this), "findRayIntersection", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "findRayIntersection", Q_RETURN_ARG(RayToAvatarIntersectionResult, result), Q_ARG(const PickRay&, ray), Q_ARG(const QScriptValue&, avatarIdsToInclude), diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index e5c4f4b972..404f8681f2 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -21,6 +21,7 @@ #include +#include #include #include #include @@ -897,7 +898,7 @@ void MyAvatar::restoreAnimation() { QStringList MyAvatar::getAnimationRoles() { if (QThread::currentThread() != thread()) { QStringList result; - QMetaObject::invokeMethod(this, "getAnimationRoles", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QStringList, result)); + hifi::qt::blockingInvokeMethod(this, "getAnimationRoles", Q_RETURN_ARG(QStringList, result)); return result; } return _skeletonModel->getRig().getAnimationRoles(); @@ -1368,7 +1369,7 @@ void MyAvatar::resetFullAvatarURL() { void MyAvatar::useFullAvatarURL(const QUrl& fullAvatarURL, const QString& modelName) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "useFullAvatarURL", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "useFullAvatarURL", Q_ARG(const QUrl&, fullAvatarURL), Q_ARG(const QString&, modelName)); return; @@ -1394,7 +1395,7 @@ void MyAvatar::useFullAvatarURL(const QUrl& fullAvatarURL, const QString& modelN void MyAvatar::setAttachmentData(const QVector& attachmentData) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "setAttachmentData", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "setAttachmentData", Q_ARG(const QVector, attachmentData)); return; } @@ -2358,7 +2359,7 @@ bool MyAvatar::safeLanding(const glm::vec3& position) { if (QThread::currentThread() != thread()) { bool result; - QMetaObject::invokeMethod(this, "safeLanding", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result), Q_ARG(const glm::vec3&, position)); + hifi::qt::blockingInvokeMethod(this, "safeLanding", Q_RETURN_ARG(bool, result), Q_ARG(const glm::vec3&, position)); return result; } glm::vec3 better; diff --git a/interface/src/scripting/Audio.cpp b/interface/src/scripting/Audio.cpp index 4576190413..8125f9a9f0 100644 --- a/interface/src/scripting/Audio.cpp +++ b/interface/src/scripting/Audio.cpp @@ -11,6 +11,8 @@ #include "Audio.h" +#include + #include "Application.h" #include "AudioClient.h" #include "ui/AvatarInputs.h" @@ -49,27 +51,22 @@ float Audio::loudnessToLevel(float loudness) { Audio::Audio() : _devices(_contextIsHMD) { auto client = DependencyManager::get().data(); connect(client, &AudioClient::muteToggled, this, &Audio::onMutedChanged); + connect(client, &AudioClient::noiseReductionChanged, this, &Audio::onNoiseReductionChanged); connect(client, &AudioClient::inputLoudnessChanged, this, &Audio::onInputLoudnessChanged); + connect(client, &AudioClient::inputVolumeChanged, this, &Audio::onInputVolumeChanged); connect(this, &Audio::contextChanged, &_devices, &AudioDevices::onContextChanged); - connect(&_devices._inputs, &AudioDeviceList::deviceChanged, this, &Audio::onInputChanged); enableNoiseReduction(enableNoiseReductionSetting.get()); } void Audio::setMuted(bool isMuted) { if (_isMuted != isMuted) { auto client = DependencyManager::get().data(); - QMetaObject::invokeMethod(client, "toggleMute", Qt::BlockingQueuedConnection); - - _isMuted = isMuted; - emit mutedChanged(_isMuted); + QMetaObject::invokeMethod(client, "toggleMute"); } } void Audio::onMutedChanged() { - auto client = DependencyManager::get().data(); - bool isMuted; - QMetaObject::invokeMethod(client, "isMuted", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, isMuted)); - + bool isMuted = DependencyManager::get()->isMuted(); if (_isMuted != isMuted) { _isMuted = isMuted; emit mutedChanged(_isMuted); @@ -79,11 +76,16 @@ void Audio::onMutedChanged() { void Audio::enableNoiseReduction(bool enable) { if (_enableNoiseReduction != enable) { auto client = DependencyManager::get().data(); - QMetaObject::invokeMethod(client, "setNoiseReduction", Qt::BlockingQueuedConnection, Q_ARG(bool, enable)); - + QMetaObject::invokeMethod(client, "setNoiseReduction", Q_ARG(bool, enable)); enableNoiseReductionSetting.set(enable); - _enableNoiseReduction = enable; - emit noiseReductionChanged(enable); + } +} + +void Audio::onNoiseReductionChanged() { + bool noiseReductionEnabled = DependencyManager::get()->isNoiseReductionEnabled(); + if (_enableNoiseReduction != noiseReductionEnabled) { + _enableNoiseReduction = noiseReductionEnabled; + emit noiseReductionChanged(_enableNoiseReduction); } } @@ -93,19 +95,11 @@ void Audio::setInputVolume(float volume) { if (_inputVolume != volume) { auto client = DependencyManager::get().data(); - QMetaObject::invokeMethod(client, "setInputVolume", Qt::BlockingQueuedConnection, Q_ARG(float, volume)); - - _inputVolume = volume; - emit inputVolumeChanged(_inputVolume); + QMetaObject::invokeMethod(client, "setInputVolume", Q_ARG(float, volume)); } } -// different audio input devices may have different volumes -void Audio::onInputChanged() { - auto client = DependencyManager::get().data(); - float volume; - QMetaObject::invokeMethod(client, "getInputVolume", Qt::BlockingQueuedConnection, Q_RETURN_ARG(float, volume)); - +void Audio::onInputVolumeChanged(float volume) { if (_inputVolume != volume) { _inputVolume = volume; emit inputVolumeChanged(_inputVolume); diff --git a/interface/src/scripting/Audio.h b/interface/src/scripting/Audio.h index 953727ede8..ca89521489 100644 --- a/interface/src/scripting/Audio.h +++ b/interface/src/scripting/Audio.h @@ -62,9 +62,12 @@ signals: void contextChanged(const QString& context); public slots: - void onMutedChanged(); void onContextChanged(); - void onInputChanged(); + +private slots: + void onMutedChanged(); + void onNoiseReductionChanged(); + void onInputVolumeChanged(float volume); void onInputLoudnessChanged(float loudness); protected: diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index b0ea8226e8..98b8a7c12c 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -11,6 +11,8 @@ #include +#include + #include "AudioDevices.h" #include "Application.h" @@ -71,22 +73,14 @@ bool AudioDeviceList::setData(const QModelIndex& index, const QVariant& value, i bool AudioDeviceList::setDevice(int row, bool fromUser) { bool success = false; auto& device = _devices[row]; + _userSelection = fromUser; // skip if already selected if (!device.selected) { auto client = DependencyManager::get(); - QMetaObject::invokeMethod(client.data(), "switchAudioDevice", Qt::BlockingQueuedConnection, - Q_RETURN_ARG(bool, success), + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", Q_ARG(QAudio::Mode, _mode), Q_ARG(const QAudioDeviceInfo&, device.info)); - - if (success) { - device.selected = true; - if (fromUser) { - emit deviceSelected(device.info, _selectedDevice); - } - emit deviceChanged(device.info); - } } emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, 0)); @@ -135,12 +129,12 @@ void AudioDeviceList::resetDevice(bool contextIsHMD, const QString& device) { } void AudioDeviceList::onDeviceChanged(const QAudioDeviceInfo& device) { + auto oldDevice = _selectedDevice; _selectedDevice = device; QModelIndex index; for (auto i = 0; i < _devices.size(); ++i) { AudioDevice& device = _devices[i]; - if (device.selected && device.info != _selectedDevice) { device.selected = false; } else if (device.info == _selectedDevice) { @@ -149,6 +143,11 @@ void AudioDeviceList::onDeviceChanged(const QAudioDeviceInfo& device) { } } + if (_userSelection) { + _userSelection = false; + emit deviceSelected(_selectedDevice, oldDevice); + } + emit deviceChanged(_selectedDevice); emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, 0)); } diff --git a/interface/src/scripting/AudioDevices.h b/interface/src/scripting/AudioDevices.h index cd47ab4191..8e82ddc4fb 100644 --- a/interface/src/scripting/AudioDevices.h +++ b/interface/src/scripting/AudioDevices.h @@ -58,7 +58,7 @@ private: static QHash _roles; static Qt::ItemFlags _flags; - + bool _userSelection { false }; QAudio::Mode _mode; QAudioDeviceInfo _selectedDevice; QList _devices; diff --git a/interface/src/scripting/ClipboardScriptingInterface.cpp b/interface/src/scripting/ClipboardScriptingInterface.cpp index b803080538..b443ba1ef0 100644 --- a/interface/src/scripting/ClipboardScriptingInterface.cpp +++ b/interface/src/scripting/ClipboardScriptingInterface.cpp @@ -8,9 +8,12 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include "Application.h" #include "ClipboardScriptingInterface.h" +#include + +#include "Application.h" + ClipboardScriptingInterface::ClipboardScriptingInterface() { } @@ -24,7 +27,7 @@ float ClipboardScriptingInterface::getClipboardContentsLargestDimension() { bool ClipboardScriptingInterface::exportEntities(const QString& filename, const QVector& entityIDs) { bool retVal; - QMetaObject::invokeMethod(qApp, "exportEntities", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(qApp, "exportEntities", Q_RETURN_ARG(bool, retVal), Q_ARG(const QString&, filename), Q_ARG(const QVector&, entityIDs)); @@ -33,7 +36,7 @@ bool ClipboardScriptingInterface::exportEntities(const QString& filename, const bool ClipboardScriptingInterface::exportEntities(const QString& filename, float x, float y, float z, float s) { bool retVal; - QMetaObject::invokeMethod(qApp, "exportEntities", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(qApp, "exportEntities", Q_RETURN_ARG(bool, retVal), Q_ARG(const QString&, filename), Q_ARG(float, x), @@ -45,7 +48,7 @@ bool ClipboardScriptingInterface::exportEntities(const QString& filename, float bool ClipboardScriptingInterface::importEntities(const QString& filename) { bool retVal; - QMetaObject::invokeMethod(qApp, "importEntities", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(qApp, "importEntities", Q_RETURN_ARG(bool, retVal), Q_ARG(const QString&, filename)); return retVal; @@ -53,7 +56,7 @@ bool ClipboardScriptingInterface::importEntities(const QString& filename) { QVector ClipboardScriptingInterface::pasteEntities(glm::vec3 position) { QVector retVal; - QMetaObject::invokeMethod(qApp, "pasteEntities", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(qApp, "pasteEntities", Q_RETURN_ARG(QVector, retVal), Q_ARG(float, position.x), Q_ARG(float, position.y), diff --git a/interface/src/scripting/ClipboardScriptingInterface.h b/interface/src/scripting/ClipboardScriptingInterface.h index 3c10475242..826732c777 100644 --- a/interface/src/scripting/ClipboardScriptingInterface.h +++ b/interface/src/scripting/ClipboardScriptingInterface.h @@ -13,6 +13,10 @@ #include +#include + +#include + /**jsdoc * @namespace Clipboard */ diff --git a/interface/src/scripting/MenuScriptingInterface.cpp b/interface/src/scripting/MenuScriptingInterface.cpp index 91fba1ce9e..b3829ecb3b 100644 --- a/interface/src/scripting/MenuScriptingInterface.cpp +++ b/interface/src/scripting/MenuScriptingInterface.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include "Menu.h" @@ -43,7 +44,7 @@ bool MenuScriptingInterface::menuExists(const QString& menu) { return Menu::getInstance()->menuExists(menu); } bool result; - QMetaObject::invokeMethod(Menu::getInstance(), "menuExists", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(Menu::getInstance(), "menuExists", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, menu)); return result; @@ -86,7 +87,7 @@ bool MenuScriptingInterface::menuItemExists(const QString& menu, const QString& return Menu::getInstance()->menuItemExists(menu, menuitem); } bool result; - QMetaObject::invokeMethod(Menu::getInstance(), "menuItemExists", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(Menu::getInstance(), "menuItemExists", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, menu), Q_ARG(const QString&, menuitem)); @@ -114,7 +115,7 @@ bool MenuScriptingInterface::isOptionChecked(const QString& menuOption) { return Menu::getInstance()->isOptionChecked(menuOption); } bool result; - QMetaObject::invokeMethod(Menu::getInstance(), "isOptionChecked", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(Menu::getInstance(), "isOptionChecked", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, menuOption)); return result; @@ -131,7 +132,7 @@ bool MenuScriptingInterface::isMenuEnabled(const QString& menuOption) { return Menu::getInstance()->isOptionChecked(menuOption); } bool result; - QMetaObject::invokeMethod(Menu::getInstance(), "isMenuEnabled", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(Menu::getInstance(), "isMenuEnabled", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, menuOption)); return result; @@ -157,7 +158,7 @@ bool MenuScriptingInterface::isInfoViewVisible(const QString& path) { } bool result; - QMetaObject::invokeMethod(Menu::getInstance(), "isInfoViewVisible", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(Menu::getInstance(), "isInfoViewVisible", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, path)); return result; } diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index 38f467f22b..a5d8544658 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -9,11 +9,14 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "WindowScriptingInterface.h" + #include #include #include #include +#include #include #include @@ -24,8 +27,6 @@ #include "Menu.h" #include "OffscreenUi.h" -#include "WindowScriptingInterface.h" - static const QString DESKTOP_LOCATION = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); static const QString LAST_BROWSE_LOCATION_SETTING = "LastBrowseLocation"; static const QString LAST_BROWSE_ASSETS_LOCATION_SETTING = "LastBrowseAssetsLocation"; @@ -316,7 +317,7 @@ bool WindowScriptingInterface::isPhysicsEnabled() { int WindowScriptingInterface::openMessageBox(QString title, QString text, int buttons, int defaultButton) { if (QThread::currentThread() != thread()) { int result; - QMetaObject::invokeMethod(this, "openMessageBox", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "openMessageBox", Q_RETURN_ARG(int, result), Q_ARG(QString, title), Q_ARG(QString, text), diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index 4fb4829636..f8ed20f42f 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -18,6 +18,8 @@ #include #include +#include + class CustomPromptResult { public: QVariant value; diff --git a/interface/src/ui/JSConsole.cpp b/interface/src/ui/JSConsole.cpp index 79314ce49a..4b03d1b575 100644 --- a/interface/src/ui/JSConsole.cpp +++ b/interface/src/ui/JSConsole.cpp @@ -15,6 +15,7 @@ #include #include +#include #include #include @@ -115,7 +116,7 @@ void JSConsole::executeCommand(const QString& command) { QScriptValue JSConsole::executeCommandInWatcher(const QString& command) { QScriptValue result; - QMetaObject::invokeMethod(_scriptEngine, "evaluate", Qt::ConnectionType::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(_scriptEngine, "evaluate", Q_RETURN_ARG(QScriptValue, result), Q_ARG(const QString&, command), Q_ARG(const QString&, _consoleFileName)); diff --git a/libraries/animation/src/AnimationCache.cpp b/libraries/animation/src/AnimationCache.cpp index 7d4c0f4e92..0bca721464 100644 --- a/libraries/animation/src/AnimationCache.cpp +++ b/libraries/animation/src/AnimationCache.cpp @@ -9,15 +9,18 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "AnimationCache.h" + #include #include -#include "AnimationCache.h" -#include "AnimationLogging.h" +#include #include #include #include +#include "AnimationLogging.h" + int animationPointerMetaTypeId = qRegisterMetaType(); AnimationCache::AnimationCache(QObject* parent) : @@ -31,7 +34,7 @@ AnimationCache::AnimationCache(QObject* parent) : AnimationPointer AnimationCache::getAnimation(const QUrl& url) { if (QThread::currentThread() != thread()) { AnimationPointer result; - QMetaObject::invokeMethod(this, "getAnimation", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "getAnimation", Q_RETURN_ARG(AnimationPointer, result), Q_ARG(const QUrl&, url)); return result; } @@ -97,7 +100,7 @@ bool Animation::isLoaded() const { QStringList Animation::getJointNames() const { if (QThread::currentThread() != thread()) { QStringList result; - QMetaObject::invokeMethod(const_cast(this), "getJointNames", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointNames", Q_RETURN_ARG(QStringList, result)); return result; } @@ -111,7 +114,7 @@ QStringList Animation::getJointNames() const { QVector Animation::getFrames() const { if (QThread::currentThread() != thread()) { QVector result; - QMetaObject::invokeMethod(const_cast(this), "getFrames", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getFrames", Q_RETURN_ARG(QVector, result)); return result; } diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 43af7afdef..01af69e3ad 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -1335,6 +1335,14 @@ void AudioClient::toggleMute() { emit muteToggled(); } +void AudioClient::setNoiseReduction(bool enable) { + if (_isNoiseGateEnabled != enable) { + _isNoiseGateEnabled = enable; + emit noiseReductionChanged(); + } +} + + void AudioClient::setIsStereoInput(bool isStereoInput) { if (isStereoInput != _isStereoInput) { _isStereoInput = isStereoInput; @@ -1446,6 +1454,8 @@ bool AudioClient::switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceIn _audioInput = new QAudioInput(inputDeviceInfo, _inputFormat, this); _numInputCallbackBytes = calculateNumberOfInputCallbackBytes(_inputFormat); _audioInput->setBufferSize(_numInputCallbackBytes); + // different audio input devices may have different volumes + emit inputVolumeChanged(_audioInput->volume()); // how do we want to handle input working, but output not working? int numFrameSamples = calculateNumberOfFrameSamples(_numInputCallbackBytes); @@ -1703,7 +1713,7 @@ float AudioClient::azimuthForSource(const glm::vec3& relativePosition) { // produce an oriented angle about the y-axis glm::vec3 direction = rotatedSourcePosition * (1.0f / fastSqrtf(rotatedSourcePositionLength2)); - float angle = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); // UNIT_NEG_Z is "forward" + float angle = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); // UNIT_NEG_Z is "forward" return (direction.x < 0.0f) ? -angle : angle; } else { @@ -1847,3 +1857,10 @@ void AudioClient::setAvatarBoundingBoxParameters(glm::vec3 corner, glm::vec3 sca void AudioClient::startThread() { moveToNewNamedThread(this, "Audio Thread", [this] { start(); }); } + +void AudioClient::setInputVolume(float volume) { + if (_audioInput && volume != _audioInput->volume()) { + _audioInput->setVolume(volume); + emit inputVolumeChanged(_audioInput->volume()); + } +} diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 54ce3aa6c2..62b99d2443 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -180,7 +180,8 @@ public slots: virtual void setIsStereoInput(bool stereo) override; - void setNoiseReduction(bool isNoiseGateEnabled) { _isNoiseGateEnabled = isNoiseGateEnabled; } + void setNoiseReduction(bool isNoiseGateEnabled); + bool isNoiseReductionEnabled() const { return _isNoiseGateEnabled; } void toggleLocalEcho() { _shouldEchoLocally = !_shouldEchoLocally; } void toggleServerEcho() { _shouldEchoToServer = !_shouldEchoToServer; } @@ -197,7 +198,7 @@ public slots: bool switchAudioDevice(QAudio::Mode mode, const QString& deviceName); float getInputVolume() const { return (_audioInput) ? (float)_audioInput->volume() : 0.0f; } - void setInputVolume(float volume) { if (_audioInput) _audioInput->setVolume(volume); } + void setInputVolume(float volume); void setReverb(bool reverb); void setReverbOptions(const AudioEffectOptions* options); @@ -207,7 +208,9 @@ public slots: void saveSettings(); signals: - bool muteToggled(); + void inputVolumeChanged(float volume); + void muteToggled(); + void noiseReductionChanged(); void mutedByMixer(); void inputReceived(const QByteArray& inputSamples); void inputLoudnessChanged(float loudness); diff --git a/libraries/audio/src/SoundCache.cpp b/libraries/audio/src/SoundCache.cpp index 1646540da6..dc20b9884d 100644 --- a/libraries/audio/src/SoundCache.cpp +++ b/libraries/audio/src/SoundCache.cpp @@ -9,10 +9,13 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include +#include "SoundCache.h" + +#include + +#include #include "AudioLogging.h" -#include "SoundCache.h" static const int SOUNDS_LOADING_PRIORITY { -7 }; // Make sure sounds load after the low rez texture mips @@ -29,7 +32,7 @@ SoundCache::SoundCache(QObject* parent) : SharedSoundPointer SoundCache::getSound(const QUrl& url) { if (QThread::currentThread() != thread()) { SharedSoundPointer result; - QMetaObject::invokeMethod(this, "getSound", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "getSound", Q_RETURN_ARG(SharedSoundPointer, result), Q_ARG(const QUrl&, url)); return result; } diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index a0a348388e..faebeafb29 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -1010,7 +1011,7 @@ glm::vec3 Avatar::getAbsoluteJointTranslationInObjectFrame(int index) const { int Avatar::getJointIndex(const QString& name) const { if (QThread::currentThread() != thread()) { int result; - QMetaObject::invokeMethod(const_cast(this), "getJointIndex", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointIndex", Q_RETURN_ARG(int, result), Q_ARG(const QString&, name)); return result; } @@ -1024,7 +1025,7 @@ int Avatar::getJointIndex(const QString& name) const { QStringList Avatar::getJointNames() const { if (QThread::currentThread() != thread()) { QStringList result; - QMetaObject::invokeMethod(const_cast(this), "getJointNames", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointNames", Q_RETURN_ARG(QStringList, result)); return result; } @@ -1034,7 +1035,7 @@ QStringList Avatar::getJointNames() const { glm::vec3 Avatar::getJointPosition(int index) const { if (QThread::currentThread() != thread()) { glm::vec3 position; - QMetaObject::invokeMethod(const_cast(this), "getJointPosition", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointPosition", Q_RETURN_ARG(glm::vec3, position), Q_ARG(const int, index)); return position; } @@ -1046,7 +1047,7 @@ glm::vec3 Avatar::getJointPosition(int index) const { glm::vec3 Avatar::getJointPosition(const QString& name) const { if (QThread::currentThread() != thread()) { glm::vec3 position; - QMetaObject::invokeMethod(const_cast(this), "getJointPosition", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointPosition", Q_RETURN_ARG(glm::vec3, position), Q_ARG(const QString&, name)); return position; } @@ -1105,7 +1106,7 @@ static std::shared_ptr allocateAttachmentModel(bool isSoft, const Rig& ri void Avatar::setAttachmentData(const QVector& attachmentData) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "setAttachmentData", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "setAttachmentData", Q_ARG(const QVector, attachmentData)); return; } diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 5023bd7ae5..5f63826a99 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -1227,7 +1228,7 @@ bool AvatarData::isJointDataValid(int index) const { } if (QThread::currentThread() != thread()) { bool result; - QMetaObject::invokeMethod(const_cast(this), "isJointDataValid", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "isJointDataValid", Q_RETURN_ARG(bool, result), Q_ARG(int, index)); return result; } @@ -1240,7 +1241,7 @@ glm::quat AvatarData::getJointRotation(int index) const { } if (QThread::currentThread() != thread()) { glm::quat result; - QMetaObject::invokeMethod(const_cast(this), "getJointRotation", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointRotation", Q_RETURN_ARG(glm::quat, result), Q_ARG(int, index)); return result; } @@ -1255,7 +1256,7 @@ glm::vec3 AvatarData::getJointTranslation(int index) const { } if (QThread::currentThread() != thread()) { glm::vec3 result; - QMetaObject::invokeMethod(const_cast(this), "getJointTranslation", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointTranslation", Q_RETURN_ARG(glm::vec3, result), Q_ARG(int, index)); return result; } @@ -1266,7 +1267,7 @@ glm::vec3 AvatarData::getJointTranslation(int index) const { glm::vec3 AvatarData::getJointTranslation(const QString& name) const { if (QThread::currentThread() != thread()) { glm::vec3 result; - QMetaObject::invokeMethod(const_cast(this), "getJointTranslation", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointTranslation", Q_RETURN_ARG(glm::vec3, result), Q_ARG(const QString&, name)); return result; } @@ -1344,7 +1345,7 @@ void AvatarData::clearJointData(const QString& name) { bool AvatarData::isJointDataValid(const QString& name) const { if (QThread::currentThread() != thread()) { bool result; - QMetaObject::invokeMethod(const_cast(this), "isJointDataValid", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "isJointDataValid", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, name)); return result; } @@ -1354,7 +1355,7 @@ bool AvatarData::isJointDataValid(const QString& name) const { glm::quat AvatarData::getJointRotation(const QString& name) const { if (QThread::currentThread() != thread()) { glm::quat result; - QMetaObject::invokeMethod(const_cast(this), "getJointRotation", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointRotation", Q_RETURN_ARG(glm::quat, result), Q_ARG(const QString&, name)); return result; } @@ -1364,8 +1365,7 @@ glm::quat AvatarData::getJointRotation(const QString& name) const { QVector AvatarData::getJointRotations() const { if (QThread::currentThread() != thread()) { QVector result; - QMetaObject::invokeMethod(const_cast(this), - "getJointRotations", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointRotations", Q_RETURN_ARG(QVector, result)); return result; } @@ -1380,8 +1380,7 @@ QVector AvatarData::getJointRotations() const { void AvatarData::setJointRotations(QVector jointRotations) { if (QThread::currentThread() != thread()) { QVector result; - QMetaObject::invokeMethod(const_cast(this), - "setJointRotations", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "setJointRotations", Q_ARG(QVector, jointRotations)); } QWriteLocker writeLock(&_jointDataLock); @@ -1398,8 +1397,7 @@ void AvatarData::setJointRotations(QVector jointRotations) { QVector AvatarData::getJointTranslations() const { if (QThread::currentThread() != thread()) { QVector result; - QMetaObject::invokeMethod(const_cast(this), - "getJointTranslations", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointTranslations", Q_RETURN_ARG(QVector, result)); return result; } @@ -1414,8 +1412,7 @@ QVector AvatarData::getJointTranslations() const { void AvatarData::setJointTranslations(QVector jointTranslations) { if (QThread::currentThread() != thread()) { QVector result; - QMetaObject::invokeMethod(const_cast(this), - "setJointTranslations", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "setJointTranslations", Q_ARG(QVector, jointTranslations)); } QWriteLocker writeLock(&_jointDataLock); @@ -1616,7 +1613,7 @@ void AvatarData::setDisplayName(const QString& displayName) { QVector AvatarData::getAttachmentData() const { if (QThread::currentThread() != thread()) { QVector result; - QMetaObject::invokeMethod(const_cast(this), "getAttachmentData", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getAttachmentData", Q_RETURN_ARG(QVector, result)); return result; } @@ -2339,7 +2336,7 @@ void AvatarData::clearAvatarEntity(const QUuid& entityID) { AvatarEntityMap AvatarData::getAvatarEntityData() const { AvatarEntityMap result; if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(const_cast(this), "getAvatarEntityData", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getAvatarEntityData", Q_RETURN_ARG(AvatarEntityMap, result)); return result; } @@ -2380,7 +2377,7 @@ void AvatarData::setAvatarEntityData(const AvatarEntityMap& avatarEntityData) { AvatarEntityIDs AvatarData::getAndClearRecentlyDetachedIDs() { AvatarEntityIDs result; if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(const_cast(this), "getAndClearRecentlyDetachedIDs", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getAndClearRecentlyDetachedIDs", Q_RETURN_ARG(AvatarEntityIDs, result)); return result; } diff --git a/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp b/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp index d8e0c59da7..92abec78fa 100644 --- a/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp +++ b/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp @@ -11,14 +11,16 @@ #include #include +#include + #include #include #include #include -#include #include #include +#include #include #include #include @@ -289,7 +291,7 @@ glm::vec2 CompositorHelper::getReticleMaximumPosition() const { void CompositorHelper::sendFakeMouseEvent() { if (qApp->thread() != QThread::currentThread()) { - QMetaObject::invokeMethod(this, "sendFakeMouseEvent", Qt::BlockingQueuedConnection); + hifi::qt::blockingInvokeMethod(this, "sendFakeMouseEvent"); return; } diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 1684c06512..fbf76df38e 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -380,7 +381,7 @@ ModelPointer EntityTreeRenderer::allocateModel(const QString& url, float loading // Only create and delete models on the thread that owns the EntityTreeRenderer if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "allocateModel", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "allocateModel", Q_RETURN_ARG(ModelPointer, model), Q_ARG(const QString&, url)); @@ -397,7 +398,7 @@ ModelPointer EntityTreeRenderer::allocateModel(const QString& url, float loading ModelPointer EntityTreeRenderer::updateModel(ModelPointer model, const QString& newUrl) { // Only create and delete models on the thread that owns the EntityTreeRenderer if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "updateModel", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "updateModel", Q_RETURN_ARG(ModelPointer, model), Q_ARG(ModelPointer, model), Q_ARG(const QString&, newUrl)); diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 7351d49dff..ae9f79f0f6 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -9,19 +9,20 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "EntityScriptingInterface.h" + #include #include -#include "EntityScriptingInterface.h" - #include #include -#include "EntityItemID.h" +#include #include #include #include +#include "EntityItemID.h" #include "EntitiesLogging.h" #include "EntityDynamicFactoryInterface.h" #include "EntityDynamicInterface.h" @@ -1488,7 +1489,7 @@ int EntityScriptingInterface::getJointIndex(const QUuid& entityID, const QString return -1; } int result; - QMetaObject::invokeMethod(_entityTree.get(), "getJointIndex", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(_entityTree.get(), "getJointIndex", Q_RETURN_ARG(int, result), Q_ARG(QUuid, entityID), Q_ARG(QString, name)); return result; } @@ -1498,7 +1499,7 @@ QStringList EntityScriptingInterface::getJointNames(const QUuid& entityID) { return QStringList(); } QStringList result; - QMetaObject::invokeMethod(_entityTree.get(), "getJointNames", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(_entityTree.get(), "getJointNames", Q_RETURN_ARG(QStringList, result), Q_ARG(QUuid, entityID)); return result; } diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index e8506e5263..82314d0cd1 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -232,7 +233,7 @@ void NodeList::processICEPingPacket(QSharedPointer message) { void NodeList::reset() { if (thread() != QThread::currentThread()) { - QMetaObject::invokeMethod(this, "reset", Qt::BlockingQueuedConnection); + hifi::qt::blockingInvokeMethod(this, "reset"); return; } diff --git a/libraries/networking/src/ResourceCache.cpp b/libraries/networking/src/ResourceCache.cpp index f07514cd85..0c91a581ce 100644 --- a/libraries/networking/src/ResourceCache.cpp +++ b/libraries/networking/src/ResourceCache.cpp @@ -9,22 +9,24 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "ResourceCache.h" + #include #include +#include #include #include #include -#include +#include +#include +#include #include "NetworkAccessManager.h" #include "NetworkLogging.h" #include "NodeList.h" -#include "ResourceCache.h" -#include -#include #define clamp(x, min, max) (((x) < (min)) ? (min) :\ (((x) > (max)) ? (max) :\ @@ -178,7 +180,7 @@ ScriptableResource* ResourceCache::prefetch(const QUrl& url, void* extra) { if (QThread::currentThread() != thread()) { // Must be called in thread to ensure getResource returns a valid pointer - QMetaObject::invokeMethod(this, "prefetch", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "prefetch", Q_RETURN_ARG(ScriptableResource*, result), Q_ARG(QUrl, url), Q_ARG(void*, extra)); return result; @@ -301,7 +303,7 @@ QVariantList ResourceCache::getResourceList() { QVariantList list; if (QThread::currentThread() != thread()) { // NOTE: invokeMethod does not allow a const QObject* - QMetaObject::invokeMethod(this, "getResourceList", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "getResourceList", Q_RETURN_ARG(QVariantList, list)); } else { auto resources = _resources.uniqueKeys(); diff --git a/libraries/networking/src/udt/Socket.cpp b/libraries/networking/src/udt/Socket.cpp index 357f8a64d8..89a6758366 100644 --- a/libraries/networking/src/udt/Socket.cpp +++ b/libraries/networking/src/udt/Socket.cpp @@ -17,6 +17,7 @@ #include +#include #include #include "../NetworkLogging.h" @@ -276,7 +277,7 @@ Connection* Socket::findOrCreateConnection(const HifiSockAddr& sockAddr) { void Socket::clearConnections() { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "clearConnections", Qt::BlockingQueuedConnection); + hifi::qt::blockingInvokeMethod(this, "clearConnections"); return; } diff --git a/libraries/plugins/src/plugins/InputConfiguration.cpp b/libraries/plugins/src/plugins/InputConfiguration.cpp index 04b1e3b370..8ce206988b 100644 --- a/libraries/plugins/src/plugins/InputConfiguration.cpp +++ b/libraries/plugins/src/plugins/InputConfiguration.cpp @@ -11,6 +11,8 @@ #include +#include + #include "DisplayPlugin.h" #include "InputPlugin.h" #include "PluginManager.h" @@ -21,7 +23,7 @@ InputConfiguration::InputConfiguration() { QStringList InputConfiguration::inputPlugins() { if (QThread::currentThread() != thread()) { QStringList result; - QMetaObject::invokeMethod(this, "inputPlugins", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "inputPlugins", Q_RETURN_ARG(QStringList, result)); return result; } @@ -42,7 +44,7 @@ QStringList InputConfiguration::inputPlugins() { QStringList InputConfiguration::activeInputPlugins() { if (QThread::currentThread() != thread()) { QStringList result; - QMetaObject::invokeMethod(this, "activeInputPlugins", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "activeInputPlugins", Q_RETURN_ARG(QStringList, result)); return result; } @@ -64,7 +66,7 @@ QStringList InputConfiguration::activeInputPlugins() { QString InputConfiguration::configurationLayout(QString pluginName) { if (QThread::currentThread() != thread()) { QString result; - QMetaObject::invokeMethod(this, "configurationLayout", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "configurationLayout", Q_RETURN_ARG(QString, result), Q_ARG(QString, pluginName)); return result; @@ -81,7 +83,7 @@ QString InputConfiguration::configurationLayout(QString pluginName) { void InputConfiguration::setConfigurationSettings(QJsonObject configurationSettings, QString pluginName) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "setConfigurationSettings", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "setConfigurationSettings", Q_ARG(QJsonObject, configurationSettings), Q_ARG(QString, pluginName)); return; @@ -97,7 +99,7 @@ void InputConfiguration::setConfigurationSettings(QJsonObject configurationSetti QJsonObject InputConfiguration::configurationSettings(QString pluginName) { if (QThread::currentThread() != thread()) { QJsonObject result; - QMetaObject::invokeMethod(this, "configurationSettings", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "configurationSettings", Q_RETURN_ARG(QJsonObject, result), Q_ARG(QString, pluginName)); return result; @@ -113,7 +115,7 @@ QJsonObject InputConfiguration::configurationSettings(QString pluginName) { void InputConfiguration::calibratePlugin(QString pluginName) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "calibratePlugin", Qt::BlockingQueuedConnection); + hifi::qt::blockingInvokeMethod(this, "calibratePlugin"); return; } @@ -128,7 +130,7 @@ void InputConfiguration::calibratePlugin(QString pluginName) { bool InputConfiguration::uncalibratePlugin(QString pluginName) { if (QThread::currentThread() != thread()) { bool result; - QMetaObject::invokeMethod(this, "uncalibratePlugin", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "uncalibratePlugin", Q_ARG(bool, result)); return result; } diff --git a/libraries/recording/src/recording/ClipCache.cpp b/libraries/recording/src/recording/ClipCache.cpp index 5c55c6bb1c..458979bf96 100644 --- a/libraries/recording/src/recording/ClipCache.cpp +++ b/libraries/recording/src/recording/ClipCache.cpp @@ -8,6 +8,8 @@ #include +#include + #include "ClipCache.h" #include "impl/PointerClip.h" #include "Logging.h" @@ -37,7 +39,7 @@ ClipCache::ClipCache(QObject* parent) : NetworkClipLoaderPointer ClipCache::getClipLoader(const QUrl& url) { if (QThread::currentThread() != thread()) { NetworkClipLoaderPointer result; - QMetaObject::invokeMethod(this, "getClipLoader", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "getClipLoader", Q_RETURN_ARG(NetworkClipLoaderPointer, result), Q_ARG(const QUrl&, url)); return result; } diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 67452c5d33..94b074d1e3 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -870,7 +871,7 @@ bool Model::getRelativeDefaultJointTranslation(int jointIndex, glm::vec3& transl QStringList Model::getJointNames() const { if (QThread::currentThread() != thread()) { QStringList result; - QMetaObject::invokeMethod(const_cast(this), "getJointNames", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(const_cast(this), "getJointNames", Q_RETURN_ARG(QStringList, result)); return result; } diff --git a/libraries/render/src/task/Config.cpp b/libraries/render/src/task/Config.cpp index 0e630311f6..d1edd8bda8 100644 --- a/libraries/render/src/task/Config.cpp +++ b/libraries/render/src/task/Config.cpp @@ -10,9 +10,12 @@ // #include "Config.h" -#include "Task.h" #include +#include + +#include "Task.h" + using namespace task; void JobConfig::setPresetList(const QJsonObject& object) { @@ -58,7 +61,7 @@ void TaskConfig::transferChildrenConfigs(QConfigPointer source) { void TaskConfig::refresh() { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "refresh", Qt::BlockingQueuedConnection); + hifi::qt::blockingInvokeMethod(this, "refresh"); return; } diff --git a/libraries/script-engine/src/AudioScriptingInterface.cpp b/libraries/script-engine/src/AudioScriptingInterface.cpp index ecaffaf35c..4023af375a 100644 --- a/libraries/script-engine/src/AudioScriptingInterface.cpp +++ b/libraries/script-engine/src/AudioScriptingInterface.cpp @@ -13,6 +13,8 @@ #include +#include + #include "ScriptAudioInjector.h" #include "ScriptEngineLogging.h" @@ -32,7 +34,7 @@ ScriptAudioInjector* AudioScriptingInterface::playSound(SharedSoundPointer sound if (QThread::currentThread() != thread()) { ScriptAudioInjector* injector = NULL; - QMetaObject::invokeMethod(this, "playSound", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "playSound", Q_RETURN_ARG(ScriptAudioInjector*, injector), Q_ARG(SharedSoundPointer, sound), Q_ARG(const AudioInjectorOptions&, injectorOptions)); diff --git a/libraries/script-engine/src/RecordingScriptingInterface.cpp b/libraries/script-engine/src/RecordingScriptingInterface.cpp index 7583f562e6..cd5b79b4a8 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.cpp +++ b/libraries/script-engine/src/RecordingScriptingInterface.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -98,7 +99,7 @@ void RecordingScriptingInterface::loadRecording(const QString& url, QScriptValue void RecordingScriptingInterface::startPlaying() { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "startPlaying", Qt::BlockingQueuedConnection); + hifi::qt::blockingInvokeMethod(this, "startPlaying"); return; } @@ -115,7 +116,7 @@ void RecordingScriptingInterface::setPlayerAudioOffset(float audioOffset) { void RecordingScriptingInterface::setPlayerTime(float time) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "setPlayerTime", Qt::BlockingQueuedConnection, Q_ARG(float, time)); + hifi::qt::blockingInvokeMethod(this, "setPlayerTime", Q_ARG(float, time)); return; } _player->seek(time); @@ -147,7 +148,7 @@ void RecordingScriptingInterface::setPlayerUseSkeletonModel(bool useSkeletonMode void RecordingScriptingInterface::pausePlayer() { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "pausePlayer", Qt::BlockingQueuedConnection); + hifi::qt::blockingInvokeMethod(this, "pausePlayer"); return; } _player->pause(); @@ -155,7 +156,7 @@ void RecordingScriptingInterface::pausePlayer() { void RecordingScriptingInterface::stopPlaying() { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "stopPlaying", Qt::BlockingQueuedConnection); + hifi::qt::blockingInvokeMethod(this, "stopPlaying"); return; } _player->stop(); @@ -176,7 +177,7 @@ void RecordingScriptingInterface::startRecording() { } if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "startRecording", Qt::BlockingQueuedConnection); + hifi::qt::blockingInvokeMethod(this, "startRecording"); return; } @@ -199,7 +200,7 @@ QString RecordingScriptingInterface::getDefaultRecordingSaveDirectory() { void RecordingScriptingInterface::saveRecording(const QString& filename) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "saveRecording", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "saveRecording", Q_ARG(QString, filename)); return; } @@ -220,7 +221,7 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr if (QThread::currentThread() != thread()) { bool result; - QMetaObject::invokeMethod(this, "saveRecordingToAsset", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "saveRecordingToAsset", Q_RETURN_ARG(bool, result), Q_ARG(QScriptValue, getClipAtpUrl)); return result; @@ -257,7 +258,7 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr void RecordingScriptingInterface::loadLastRecording() { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "loadLastRecording", Qt::BlockingQueuedConnection); + hifi::qt::blockingInvokeMethod(this, "loadLastRecording"); return; } diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 11bb044d72..52ce11c3cf 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -36,6 +36,7 @@ #include +#include #include #include #include @@ -436,12 +437,12 @@ void ScriptEngine::loadURL(const QUrl& scriptURL, bool reload) { _fileNameString = url.toString(); _isReloading = reload; - // Check that script has a supported file extension + // Check that script has a supported file extension if (!hasValidScriptSuffix(_fileNameString)) { scriptErrorMessage("File extension of file: " + _fileNameString + " is not a currently supported script type"); emit errorLoadingScript(_fileNameString); return; - } + } const auto maxRetries = 0; // for consistency with previous scriptCache->getScript() behavior auto scriptCache = DependencyManager::get(); @@ -964,7 +965,7 @@ QScriptValue ScriptEngine::evaluate(const QString& sourceCode, const QString& fi qCDebug(scriptengine) << "*** WARNING *** ScriptEngine::evaluate() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] " "sourceCode:" << sourceCode << " fileName:" << fileName << "lineNumber:" << lineNumber; #endif - QMetaObject::invokeMethod(this, "evaluate", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "evaluate", Q_RETURN_ARG(QScriptValue, result), Q_ARG(const QString&, sourceCode), Q_ARG(const QString&, fileName), diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index 72392ac376..254312fa45 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -12,6 +12,7 @@ #include +#include #include #include #include @@ -452,7 +453,7 @@ ScriptEngine* ScriptEngines::loadScript(const QUrl& scriptFilename, bool isUserL bool activateMainWindow, bool reload) { if (thread() != QThread::currentThread()) { ScriptEngine* result { nullptr }; - QMetaObject::invokeMethod(this, "loadScript", Qt::BlockingQueuedConnection, Q_RETURN_ARG(ScriptEngine*, result), + hifi::qt::blockingInvokeMethod(this, "loadScript", Q_RETURN_ARG(ScriptEngine*, result), Q_ARG(QUrl, scriptFilename), Q_ARG(bool, isUserLoaded), Q_ARG(bool, loadScriptFromEditor), diff --git a/libraries/shared/src/ThreadHelpers.h b/libraries/shared/src/ThreadHelpers.h index 6461fa5724..6e024f787a 100644 --- a/libraries/shared/src/ThreadHelpers.h +++ b/libraries/shared/src/ThreadHelpers.h @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -34,4 +35,25 @@ void withLock(QMutex& lock, F function) { void moveToNewNamedThread(QObject* object, const QString& name, std::function startCallback, QThread::Priority priority = QThread::InheritPriority); void moveToNewNamedThread(QObject* object, const QString& name, QThread::Priority priority = QThread::InheritPriority); +class ConditionalGuard { +public: + void trigger() { + QMutexLocker locker(&_mutex); + _triggered = true; + _condition.wakeAll(); + } + + bool wait(unsigned long time = ULONG_MAX) { + QMutexLocker locker(&_mutex); + if (!_triggered) { + _condition.wait(&_mutex, time); + } + return _triggered; + } +private: + QMutex _mutex; + QWaitCondition _condition; + bool _triggered { false }; +}; + #endif diff --git a/libraries/shared/src/shared/QtHelpers.cpp b/libraries/shared/src/shared/QtHelpers.cpp new file mode 100644 index 0000000000..3681136bf2 --- /dev/null +++ b/libraries/shared/src/shared/QtHelpers.cpp @@ -0,0 +1,57 @@ +// +// Created by Bradley Austin Davis on 2015/11/09 +// Copyright 2013-2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "QtHelpers.h" + +#include +#include +#include + +Q_LOGGING_CATEGORY(thread_safety, "hifi.thread_safety") + +namespace hifi { namespace qt { + +bool blockingInvokeMethod( + QObject *obj, const char *member, + QGenericReturnArgument ret, + QGenericArgument val0, + QGenericArgument val1, + QGenericArgument val2, + QGenericArgument val3, + QGenericArgument val4, + QGenericArgument val5, + QGenericArgument val6, + QGenericArgument val7, + QGenericArgument val8, + QGenericArgument val9) { + if (QThread::currentThread() == qApp->thread()) { + qCWarning(thread_safety, "BlockingQueuedConnection invoked on main thread!"); + } + return QMetaObject::invokeMethod(obj, member, + Qt::BlockingQueuedConnection, ret, val0, val1, val2, val3, val4, val5, val6, val7, val8, val9); +} + +bool blockingInvokeMethod( + QObject *obj, const char *member, + QGenericArgument val0, + QGenericArgument val1, + QGenericArgument val2, + QGenericArgument val3, + QGenericArgument val4, + QGenericArgument val5, + QGenericArgument val6, + QGenericArgument val7, + QGenericArgument val8, + QGenericArgument val9) { + qCWarning(thread_safety, "BlockingQueuedConnection invoked without return value!"); + return blockingInvokeMethod(obj, member, QGenericReturnArgument(), val0, val1, val2, val3, val4, val5, val6, val7, val8, val9); +} + + + +} } diff --git a/libraries/shared/src/shared/QtHelpers.h b/libraries/shared/src/shared/QtHelpers.h new file mode 100644 index 0000000000..7b5a15a069 --- /dev/null +++ b/libraries/shared/src/shared/QtHelpers.h @@ -0,0 +1,47 @@ +// +// Created by Bradley Austin Davis on 2017/06/29 +// Copyright 2013-2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#pragma once +#ifndef hifi_Shared_QtHelpers_h +#define hifi_Shared_QtHelpers_h + +#include + +namespace hifi { namespace qt { + +bool blockingInvokeMethod( + QObject *obj, const char *member, + QGenericReturnArgument ret, + QGenericArgument val0 = QGenericArgument(Q_NULLPTR), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()); + +bool blockingInvokeMethod( + QObject *obj, const char *member, + QGenericArgument val0 = QGenericArgument(Q_NULLPTR), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()); + +} } + + +#endif diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index 76a8a780b9..2bc5f89d00 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -15,6 +15,7 @@ #include #include +#include #include #include @@ -249,7 +250,7 @@ int OffscreenUi::waitForMessageBoxResult(QQuickItem* messageBox) { QMessageBox::StandardButton OffscreenUi::messageBox(Icon icon, const QString& title, const QString& text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { if (QThread::currentThread() != thread()) { QMessageBox::StandardButton result = QMessageBox::StandardButton::NoButton; - QMetaObject::invokeMethod(this, "messageBox", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "messageBox", Q_RETURN_ARG(QMessageBox::StandardButton, result), Q_ARG(Icon, icon), Q_ARG(QString, title), @@ -351,7 +352,7 @@ QVariant OffscreenUi::getCustomInfo(const Icon icon, const QString& title, const QVariant OffscreenUi::inputDialog(const Icon icon, const QString& title, const QString& label, const QVariant& current) { if (QThread::currentThread() != thread()) { QVariant result; - QMetaObject::invokeMethod(this, "inputDialog", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "inputDialog", Q_RETURN_ARG(QVariant, result), Q_ARG(Icon, icon), Q_ARG(QString, title), @@ -366,7 +367,7 @@ QVariant OffscreenUi::inputDialog(const Icon icon, const QString& title, const Q QVariant OffscreenUi::customInputDialog(const Icon icon, const QString& title, const QVariantMap& config) { if (QThread::currentThread() != thread()) { QVariant result; - QMetaObject::invokeMethod(this, "customInputDialog", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "customInputDialog", Q_RETURN_ARG(QVariant, result), Q_ARG(Icon, icon), Q_ARG(QString, title), @@ -640,7 +641,7 @@ QString OffscreenUi::fileDialog(const QVariantMap& properties) { QString OffscreenUi::fileOpenDialog(const QString& caption, const QString& dir, const QString& filter, QString* selectedFilter, QFileDialog::Options options) { if (QThread::currentThread() != thread()) { QString result; - QMetaObject::invokeMethod(this, "fileOpenDialog", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "fileOpenDialog", Q_RETURN_ARG(QString, result), Q_ARG(QString, caption), Q_ARG(QString, dir), @@ -662,7 +663,7 @@ QString OffscreenUi::fileOpenDialog(const QString& caption, const QString& dir, QString OffscreenUi::fileSaveDialog(const QString& caption, const QString& dir, const QString& filter, QString* selectedFilter, QFileDialog::Options options) { if (QThread::currentThread() != thread()) { QString result; - QMetaObject::invokeMethod(this, "fileSaveDialog", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "fileSaveDialog", Q_RETURN_ARG(QString, result), Q_ARG(QString, caption), Q_ARG(QString, dir), @@ -686,7 +687,7 @@ QString OffscreenUi::fileSaveDialog(const QString& caption, const QString& dir, QString OffscreenUi::existingDirectoryDialog(const QString& caption, const QString& dir, const QString& filter, QString* selectedFilter, QFileDialog::Options options) { if (QThread::currentThread() != thread()) { QString result; - QMetaObject::invokeMethod(this, "existingDirectoryDialog", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "existingDirectoryDialog", Q_RETURN_ARG(QString, result), Q_ARG(QString, caption), Q_ARG(QString, dir), @@ -773,7 +774,7 @@ QString OffscreenUi::assetOpenDialog(const QString& caption, const QString& dir, // ATP equivalent of fileOpenDialog(). if (QThread::currentThread() != thread()) { QString result; - QMetaObject::invokeMethod(this, "assetOpenDialog", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "assetOpenDialog", Q_RETURN_ARG(QString, result), Q_ARG(QString, caption), Q_ARG(QString, dir), diff --git a/libraries/ui/src/ui/Menu.cpp b/libraries/ui/src/ui/Menu.cpp index 7511448c38..7aa4bc5e17 100644 --- a/libraries/ui/src/ui/Menu.cpp +++ b/libraries/ui/src/ui/Menu.cpp @@ -13,12 +13,12 @@ #include #include +#include #include "../VrMenu.h" #include "../OffscreenUi.h" #include "Logging.h" - using namespace ui; static QList groups; @@ -246,7 +246,7 @@ void Menu::removeAction(MenuWrapper* menu, const QString& actionName) { void Menu::setIsOptionChecked(const QString& menuOption, bool isChecked) { if (thread() != QThread::currentThread()) { - QMetaObject::invokeMethod(this, "setIsOptionChecked", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "setIsOptionChecked", Q_ARG(const QString&, menuOption), Q_ARG(bool, isChecked)); return; diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index 648bdad1bf..573d873bab 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -25,6 +25,8 @@ #include #include +#include +#include #include #include #include @@ -34,7 +36,6 @@ #include #include #include -#include #include #include @@ -899,7 +900,7 @@ void OffscreenQmlSurface::executeOnUiThread(std::function function, bool QVariant OffscreenQmlSurface::returnFromUiThread(std::function function) { if (QThread::currentThread() != thread()) { QVariant result; - QMetaObject::invokeMethod(this, "returnFromUiThread", Qt::BlockingQueuedConnection, + hifi::qt::blockingInvokeMethod(this, "returnFromUiThread", Q_RETURN_ARG(QVariant, result), Q_ARG(std::function, function)); return result; diff --git a/libraries/ui/src/ui/QmlWrapper.cpp b/libraries/ui/src/ui/QmlWrapper.cpp index 518a05613a..d0f9a5e535 100644 --- a/libraries/ui/src/ui/QmlWrapper.cpp +++ b/libraries/ui/src/ui/QmlWrapper.cpp @@ -11,6 +11,8 @@ #include #include +#include + QmlWrapper::QmlWrapper(QObject* qmlObject, QObject* parent) : QObject(parent), _qmlObject(qmlObject) { Q_ASSERT(QThread::currentThread() == qApp->thread()); @@ -36,7 +38,7 @@ void QmlWrapper::writeProperties(QVariant propertyMap) { QVariant QmlWrapper::readProperty(const QString& propertyName) { if (QThread::currentThread() != thread()) { QVariant result; - QMetaObject::invokeMethod(this, "readProperty", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVariant, result), Q_ARG(QString, propertyName)); + hifi::qt::blockingInvokeMethod(this, "readProperty", Q_RETURN_ARG(QVariant, result), Q_ARG(QString, propertyName)); return result; } @@ -46,7 +48,7 @@ QVariant QmlWrapper::readProperty(const QString& propertyName) { QVariant QmlWrapper::readProperties(const QVariant& propertyList) { if (QThread::currentThread() != thread()) { QVariant result; - QMetaObject::invokeMethod(this, "readProperties", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, propertyList)); + hifi::qt::blockingInvokeMethod(this, "readProperties", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, propertyList)); return result; } diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index 1e426dd8f0..ade8c73df5 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -42,7 +43,7 @@ ToolbarProxy* TabletScriptingInterface::getSystemToolbarProxy() { TabletProxy* TabletScriptingInterface::getTablet(const QString& tabletId) { TabletProxy* tabletProxy = nullptr; if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "getTablet", Qt::BlockingQueuedConnection, Q_RETURN_ARG(TabletProxy*, tabletProxy), Q_ARG(QString, tabletId)); + hifi::qt::blockingInvokeMethod(this, "getTablet", Q_RETURN_ARG(TabletProxy*, tabletProxy), Q_ARG(QString, tabletId)); return tabletProxy; } @@ -292,7 +293,7 @@ void TabletProxy::initialScreen(const QVariant& url) { bool TabletProxy::isMessageDialogOpen() { if (QThread::currentThread() != thread()) { bool result = false; - QMetaObject::invokeMethod(this, "isMessageDialogOpen", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result)); + hifi::qt::blockingInvokeMethod(this, "isMessageDialogOpen", Q_RETURN_ARG(bool, result)); return result; } @@ -317,7 +318,7 @@ void TabletProxy::emitWebEvent(const QVariant& msg) { bool TabletProxy::isPathLoaded(const QVariant& path) { if (QThread::currentThread() != thread()) { bool result = false; - QMetaObject::invokeMethod(this, "isPathLoaded", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result), Q_ARG(QVariant, path)); + hifi::qt::blockingInvokeMethod(this, "isPathLoaded", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, path)); return result; } @@ -480,7 +481,7 @@ void TabletProxy::loadQMLSource(const QVariant& path) { bool TabletProxy::pushOntoStack(const QVariant& path) { if (QThread::currentThread() != thread()) { bool result = false; - QMetaObject::invokeMethod(this, "pushOntoStack", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result), Q_ARG(QVariant, path)); + hifi::qt::blockingInvokeMethod(this, "pushOntoStack", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, path)); return result; } @@ -606,7 +607,7 @@ void TabletProxy::gotoWebScreen(const QString& url, const QString& injectedJavaS TabletButtonProxy* TabletProxy::addButton(const QVariant& properties) { if (QThread::currentThread() != thread()) { TabletButtonProxy* result = nullptr; - QMetaObject::invokeMethod(this, "addButton", Qt::BlockingQueuedConnection, Q_RETURN_ARG(TabletButtonProxy*, result), Q_ARG(QVariant, properties)); + hifi::qt::blockingInvokeMethod(this, "addButton", Q_RETURN_ARG(TabletButtonProxy*, result), Q_ARG(QVariant, properties)); return result; } @@ -633,7 +634,7 @@ TabletButtonProxy* TabletProxy::addButton(const QVariant& properties) { bool TabletProxy::onHomeScreen() { if (QThread::currentThread() != thread()) { bool result = false; - QMetaObject::invokeMethod(this, "onHomeScreen", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result)); + hifi::qt::blockingInvokeMethod(this, "onHomeScreen", Q_RETURN_ARG(bool, result)); return result; } @@ -840,7 +841,7 @@ void TabletButtonProxy::setToolbarButtonProxy(QObject* toolbarButtonProxy) { QVariantMap TabletButtonProxy::getProperties() { if (QThread::currentThread() != thread()) { QVariantMap result; - QMetaObject::invokeMethod(this, "getProperties", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVariantMap, result)); + hifi::qt::blockingInvokeMethod(this, "getProperties", Q_RETURN_ARG(QVariantMap, result)); return result; } diff --git a/libraries/ui/src/ui/ToolbarScriptingInterface.cpp b/libraries/ui/src/ui/ToolbarScriptingInterface.cpp index 330c652cdc..adfc15cc83 100644 --- a/libraries/ui/src/ui/ToolbarScriptingInterface.cpp +++ b/libraries/ui/src/ui/ToolbarScriptingInterface.cpp @@ -12,6 +12,8 @@ #include #include #include + +#include #include "../OffscreenUi.h" QScriptValue toolbarToScriptValue(QScriptEngine* engine, ToolbarProxy* const &in) { @@ -68,7 +70,7 @@ ToolbarProxy::ToolbarProxy(QObject* qmlObject, QObject* parent) : QmlWrapper(qml ToolbarButtonProxy* ToolbarProxy::addButton(const QVariant& properties) { if (QThread::currentThread() != thread()) { ToolbarButtonProxy* result = nullptr; - QMetaObject::invokeMethod(this, "addButton", Qt::BlockingQueuedConnection, Q_RETURN_ARG(ToolbarButtonProxy*, result), Q_ARG(QVariant, properties)); + hifi::qt::blockingInvokeMethod(this, "addButton", Q_RETURN_ARG(ToolbarButtonProxy*, result), Q_ARG(QVariant, properties)); return result; } @@ -99,18 +101,14 @@ void ToolbarProxy::removeButton(const QVariant& name) { ToolbarProxy* ToolbarScriptingInterface::getToolbar(const QString& toolbarId) { if (QThread::currentThread() != thread()) { ToolbarProxy* result = nullptr; - QMetaObject::invokeMethod(this, "getToolbar", Qt::BlockingQueuedConnection, Q_RETURN_ARG(ToolbarProxy*, result), Q_ARG(QString, toolbarId)); + hifi::qt::blockingInvokeMethod(this, "getToolbar", Q_RETURN_ARG(ToolbarProxy*, result), Q_ARG(QString, toolbarId)); return result; } auto offscreenUi = DependencyManager::get(); auto desktop = offscreenUi->getDesktop(); - Qt::ConnectionType connectionType = Qt::AutoConnection; - if (QThread::currentThread() != desktop->thread()) { - connectionType = Qt::BlockingQueuedConnection; - } QVariant resultVar; - bool invokeResult = QMetaObject::invokeMethod(desktop, "getToolbar", connectionType, Q_RETURN_ARG(QVariant, resultVar), Q_ARG(QVariant, toolbarId)); + bool invokeResult = QMetaObject::invokeMethod(desktop, "getToolbar", Q_RETURN_ARG(QVariant, resultVar), Q_ARG(QVariant, toolbarId)); if (!invokeResult) { return nullptr; } From 5ff0bc409b8f0def2cc3084b87ae9628a473c94c Mon Sep 17 00:00:00 2001 From: NeetBhagat Date: Fri, 30 Jun 2017 15:40:38 +0530 Subject: [PATCH 0687/1049] solve the bug : Avatar scale value should be 3.0 ,if user has set scale value > 3.0 previously . --- interface/src/avatar/MyAvatar.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index e5c4f4b972..13a3c56e0f 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -67,6 +67,7 @@ const float MAX_WALKING_SPEED = 2.6f; // human walking speed const float MAX_BOOST_SPEED = 0.5f * MAX_WALKING_SPEED; // action motor gets additive boost below this speed const float MIN_AVATAR_SPEED = 0.05f; const float MIN_AVATAR_SPEED_SQUARED = MIN_AVATAR_SPEED * MIN_AVATAR_SPEED; // speed is set to zero below this +const float DEFAULT_MAX_AVATAR_SCALE = 3.0f; const float YAW_SPEED_DEFAULT = 120.0f; // degrees/sec const float PITCH_SPEED_DEFAULT = 90.0f; // degrees/sec @@ -1075,6 +1076,7 @@ void MyAvatar::loadData() { getHead()->setBasePitch(loadSetting(settings, "headPitch", 0.0f)); _targetScale = loadSetting(settings, "scale", 1.0f); + _targetScale = (_targetScale > DEFAULT_MAX_AVATAR_SCALE) ? DEFAULT_MAX_AVATAR_SCALE : _targetScale; setScale(glm::vec3(_targetScale)); _prefOverrideAnimGraphUrl.set(QUrl(settings.value("animGraphURL", "").toString())); From a3db9ae726efe37e4da4e7909a702ca107c37801 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Fri, 30 Jun 2017 15:40:42 +0100 Subject: [PATCH 0688/1049] Begin Rocket Hands branch --- scripts/developer/rockethands.js | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 scripts/developer/rockethands.js diff --git a/scripts/developer/rockethands.js b/scripts/developer/rockethands.js new file mode 100644 index 0000000000..b68d6cc9c6 --- /dev/null +++ b/scripts/developer/rockethands.js @@ -0,0 +1,35 @@ +"use strict"; + +// +// rockethands.js +// system +// +// Created by Cain Kilgore on 30/06/2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +(function() { + function logToConsole(message) { + console.log("[rockethands.js] " + message); + } + + logToConsole("Rockethands.js script is now active."); + + Script.setInterval(function() { + if(Controller.Hardware.Vive) { + var rightHand = Controller.getPoseValue(Controller.Hardware.Vive.RightHand).rotation.y; + + // logToConsole("Y VALUE: " + rightHand); + if(rightHand < -0.1 && rightHand > -0.4) { + logToConsole("Pointing down.. eye position: " + Camera.getOrientation().x + ", " + Camera.getOrientation().y + ", " + Camera.getOrientation().z + " - we have liftoff - I think!"); + MyAvatar.motorReferenceFrame = "world"; + // MyAvatar.motorVelocity = {x: Camera.getOrientation().x, y: Camera.getOrientation().y*3, z: Camera.getOrientation().z}; + MyAvatar.motorVelocity = Camera.getOrientation()*3; + MyAvatar.motorTimescale = 1.0; + } + } + }, 1000); +}()); From 8372d73fec32336f3b6dc20f06909f930601f320 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 30 Jun 2017 09:15:06 -0700 Subject: [PATCH 0689/1049] Additional thread safety --- gvr-interface/src/RenderingClient.cpp | 5 +- interface/src/Application.cpp | 2 +- .../src/scripting/HMDScriptingInterface.cpp | 32 ++-- .../src/scripting/HMDScriptingInterface.h | 8 +- .../src/scripting/TestScriptingInterface.cpp | 26 +-- interface/src/ui/overlays/Image3DOverlay.cpp | 2 + interface/src/ui/overlays/Overlay.h | 6 +- interface/src/ui/overlays/OverlayPanel.cpp | 3 + interface/src/ui/overlays/OverlayPanel.h | 3 + interface/src/ui/overlays/Overlays.cpp | 167 +++++++++++++---- interface/src/ui/overlays/Overlays.h | 41 +++-- interface/src/ui/overlays/PanelAttachable.cpp | 6 + interface/src/ui/overlays/PanelAttachable.h | 9 +- interface/src/ui/overlays/QmlOverlay.cpp | 50 +++--- interface/src/ui/overlays/QmlOverlay.h | 2 +- libraries/audio-client/src/AudioClient.cpp | 15 +- libraries/ui/src/QmlWebWindowClass.cpp | 59 +++--- libraries/ui/src/QmlWebWindowClass.h | 2 +- libraries/ui/src/QmlWindowClass.cpp | 170 +++++++++++------- libraries/ui/src/QmlWindowClass.h | 8 +- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 22 --- libraries/ui/src/ui/OffscreenQmlSurface.h | 4 - .../ui/src/ui/TabletScriptingInterface.cpp | 20 +-- 23 files changed, 413 insertions(+), 249 deletions(-) diff --git a/gvr-interface/src/RenderingClient.cpp b/gvr-interface/src/RenderingClient.cpp index b7c6f30a73..f04be5cb7f 100644 --- a/gvr-interface/src/RenderingClient.cpp +++ b/gvr-interface/src/RenderingClient.cpp @@ -63,10 +63,7 @@ void RenderingClient::sendAvatarPacket() { } void RenderingClient::cleanupBeforeQuit() { - - QMetaObject::invokeMethod(DependencyManager::get().data(), - "stop", Qt::BlockingQueuedConnection); - + DependencyManager::get()->cleanupBeforeQuit(); // destroy the AudioClient so it and its thread will safely go down DependencyManager::destroy(); } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 1a31877c1b..2b6c6033a2 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1844,7 +1844,7 @@ void Application::cleanupBeforeQuit() { // FIXME: something else is holding a reference to AudioClient, // so it must be explicitly synchronously stopped here - QMetaObject::invokeMethod(DependencyManager::get().data(), "cleanupBeforeQuit", Qt::BlockingQueuedConnection); + DependencyManager::get()->cleanupBeforeQuit(); // destroy Audio so it and its threads have a chance to go down safely // this must happen after QML, as there are unexplained audio crashes originating in qtwebengine diff --git a/interface/src/scripting/HMDScriptingInterface.cpp b/interface/src/scripting/HMDScriptingInterface.cpp index 883a6e758e..81a806b8ab 100644 --- a/interface/src/scripting/HMDScriptingInterface.cpp +++ b/interface/src/scripting/HMDScriptingInterface.cpp @@ -13,6 +13,7 @@ #include +#include #include #include #include @@ -152,22 +153,31 @@ QString HMDScriptingInterface::preferredAudioOutput() const { return qApp->getActiveDisplayPlugin()->getPreferredAudioOutDevice(); } -bool HMDScriptingInterface::setHandLasers(int hands, bool enabled, const glm::vec4& color, const glm::vec3& direction) const { +bool HMDScriptingInterface::setHandLasers(int hands, bool enabled, const glm::vec4& color, const glm::vec3& direction) { + if (QThread::currentThread() != thread()) { + bool result; + hifi::qt::blockingInvokeMethod(this, "setHandLasers", Q_RETURN_ARG(bool, result), + Q_ARG(int, hands), Q_ARG(bool, enabled), Q_ARG(glm::vec4, color), Q_ARG(glm::vec3, direction)); + return result; + } + auto offscreenUi = DependencyManager::get(); - offscreenUi->executeOnUiThread([offscreenUi, enabled] { - offscreenUi->getDesktop()->setProperty("hmdHandMouseActive", enabled); - }); + offscreenUi->getDesktop()->setProperty("hmdHandMouseActive", enabled); return qApp->getActiveDisplayPlugin()->setHandLaser(hands, enabled ? DisplayPlugin::HandLaserMode::Overlay : DisplayPlugin::HandLaserMode::None, color, direction); } -bool HMDScriptingInterface::setExtraLaser(const glm::vec3& worldStart, bool enabled, const glm::vec4& color, const glm::vec3& direction) const { - auto offscreenUi = DependencyManager::get(); - offscreenUi->executeOnUiThread([offscreenUi, enabled] { - offscreenUi->getDesktop()->setProperty("hmdHandMouseActive", enabled); - }); +bool HMDScriptingInterface::setExtraLaser(const glm::vec3& worldStart, bool enabled, const glm::vec4& color, const glm::vec3& direction) { + if (QThread::currentThread() != thread()) { + bool result; + hifi::qt::blockingInvokeMethod(this, "setExtraLaser", Q_RETURN_ARG(bool, result), + Q_ARG(glm::vec3, worldStart), Q_ARG(bool, enabled), Q_ARG(glm::vec4, color), Q_ARG(glm::vec3, direction)); + return result; + } + auto offscreenUi = DependencyManager::get(); + offscreenUi->getDesktop()->setProperty("hmdHandMouseActive", enabled); auto myAvatar = DependencyManager::get()->getMyAvatar(); auto sensorToWorld = myAvatar->getSensorToWorldMatrix(); @@ -179,11 +189,11 @@ bool HMDScriptingInterface::setExtraLaser(const glm::vec3& worldStart, bool enab color, sensorStart, sensorDirection); } -void HMDScriptingInterface::disableExtraLaser() const { +void HMDScriptingInterface::disableExtraLaser() { setExtraLaser(vec3(0), false, vec4(0), vec3(0)); } -void HMDScriptingInterface::disableHandLasers(int hands) const { +void HMDScriptingInterface::disableHandLasers(int hands) { setHandLasers(hands, false, vec4(0), vec3(0)); } diff --git a/interface/src/scripting/HMDScriptingInterface.h b/interface/src/scripting/HMDScriptingInterface.h index 4657e61d05..3ed7db0232 100644 --- a/interface/src/scripting/HMDScriptingInterface.h +++ b/interface/src/scripting/HMDScriptingInterface.h @@ -51,11 +51,11 @@ public: Q_INVOKABLE void requestHideHandControllers(); Q_INVOKABLE bool shouldShowHandControllers() const; - Q_INVOKABLE bool setHandLasers(int hands, bool enabled, const glm::vec4& color, const glm::vec3& direction) const; - Q_INVOKABLE void disableHandLasers(int hands) const; + Q_INVOKABLE bool setHandLasers(int hands, bool enabled, const glm::vec4& color, const glm::vec3& direction); + Q_INVOKABLE void disableHandLasers(int hands); - Q_INVOKABLE bool setExtraLaser(const glm::vec3& worldStart, bool enabled, const glm::vec4& color, const glm::vec3& direction) const; - Q_INVOKABLE void disableExtraLaser() const; + Q_INVOKABLE bool setExtraLaser(const glm::vec3& worldStart, bool enabled, const glm::vec4& color, const glm::vec3& direction); + Q_INVOKABLE void disableExtraLaser(); /// Suppress the activation of any on-screen keyboard so that a script operation will diff --git a/interface/src/scripting/TestScriptingInterface.cpp b/interface/src/scripting/TestScriptingInterface.cpp index 84c742d0ab..4d3e3b94a1 100644 --- a/interface/src/scripting/TestScriptingInterface.cpp +++ b/interface/src/scripting/TestScriptingInterface.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -57,20 +58,25 @@ void TestScriptingInterface::waitIdle() { } bool TestScriptingInterface::loadTestScene(QString scene) { + if (QThread::currentThread() != thread()) { + bool result; + hifi::qt::blockingInvokeMethod(this, "loadTestScene", Q_RETURN_ARG(bool, result), Q_ARG(QString, scene)); + return result; + } + static const QString TEST_ROOT = "https://raw.githubusercontent.com/highfidelity/hifi_tests/master/"; static const QString TEST_BINARY_ROOT = "https://hifi-public.s3.amazonaws.com/test_scene_data/"; static const QString TEST_SCRIPTS_ROOT = TEST_ROOT + "scripts/"; static const QString TEST_SCENES_ROOT = TEST_ROOT + "scenes/"; - return DependencyManager::get()->returnFromUiThread([scene]()->QVariant { - DependencyManager::get()->setUrlPrefixOverride("atp:/", TEST_BINARY_ROOT + scene + ".atp/"); - auto tree = qApp->getEntities()->getTree(); - auto treeIsClient = tree->getIsClient(); - // Force the tree to accept the load regardless of permissions - tree->setIsClient(false); - auto result = tree->readFromURL(TEST_SCENES_ROOT + scene + ".json"); - tree->setIsClient(treeIsClient); - return result; - }).toBool(); + + DependencyManager::get()->setUrlPrefixOverride("atp:/", TEST_BINARY_ROOT + scene + ".atp/"); + auto tree = qApp->getEntities()->getTree(); + auto treeIsClient = tree->getIsClient(); + // Force the tree to accept the load regardless of permissions + tree->setIsClient(false); + auto result = tree->readFromURL(TEST_SCENES_ROOT + scene + ".json"); + tree->setIsClient(treeIsClient); + return result; } bool TestScriptingInterface::startTracing(QString logrules) { diff --git a/interface/src/ui/overlays/Image3DOverlay.cpp b/interface/src/ui/overlays/Image3DOverlay.cpp index 3e0bb74bc4..c8c9c36a1d 100644 --- a/interface/src/ui/overlays/Image3DOverlay.cpp +++ b/interface/src/ui/overlays/Image3DOverlay.cpp @@ -45,11 +45,13 @@ Image3DOverlay::~Image3DOverlay() { } void Image3DOverlay::update(float deltatime) { +#if OVERLAY_PANELS if (usecTimestampNow() > _transformExpiry) { Transform transform = getTransform(); applyTransformTo(transform); setTransform(transform); } +#endif } void Image3DOverlay::render(RenderArgs* args) { diff --git a/interface/src/ui/overlays/Overlay.h b/interface/src/ui/overlays/Overlay.h index 4ad1b070b1..494c287676 100644 --- a/interface/src/ui/overlays/Overlay.h +++ b/interface/src/ui/overlays/Overlay.h @@ -84,9 +84,9 @@ public: void setColorPulse(float value) { _colorPulse = value; } void setAlphaPulse(float value) { _alphaPulse = value; } - virtual void setProperties(const QVariantMap& properties); - virtual Overlay* createClone() const = 0; - virtual QVariant getProperty(const QString& property); + Q_INVOKABLE virtual void setProperties(const QVariantMap& properties); + Q_INVOKABLE virtual Overlay* createClone() const = 0; + Q_INVOKABLE virtual QVariant getProperty(const QString& property); render::ItemID getRenderItemID() const { return _renderItemID; } void setRenderItemID(render::ItemID renderItemID) { _renderItemID = renderItemID; } diff --git a/interface/src/ui/overlays/OverlayPanel.cpp b/interface/src/ui/overlays/OverlayPanel.cpp index df2b91c4ef..06480109ce 100644 --- a/interface/src/ui/overlays/OverlayPanel.cpp +++ b/interface/src/ui/overlays/OverlayPanel.cpp @@ -11,6 +11,8 @@ #include "OverlayPanel.h" +#if OVERLAY_PANELS + #include #include #include @@ -185,3 +187,4 @@ void OverlayPanel::applyTransformTo(Transform& transform, bool force) { pointTransformAtCamera(transform, getOffsetRotation()); } } +#endif \ No newline at end of file diff --git a/interface/src/ui/overlays/OverlayPanel.h b/interface/src/ui/overlays/OverlayPanel.h index 5bffe3851e..cff2bc224d 100644 --- a/interface/src/ui/overlays/OverlayPanel.h +++ b/interface/src/ui/overlays/OverlayPanel.h @@ -22,6 +22,7 @@ #include "Billboardable.h" #include "Overlay.h" +#if OVERLAY_PANELS class PropertyBinding { public: PropertyBinding() {} @@ -80,4 +81,6 @@ private: QScriptEngine* _scriptEngine; }; +#endif + #endif // hifi_OverlayPanel_h diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index a9efd51a3e..c27800a5bb 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -14,6 +14,7 @@ #include +#include #include #include #include @@ -40,8 +41,6 @@ Q_LOGGING_CATEGORY(trace_render_overlays, "trace.render.overlays") void Overlays::cleanupAllOverlays() { { - QWriteLocker lock(&_lock); - QWriteLocker deleteLock(&_deleteLock); foreach(Overlay::Pointer overlay, _overlaysHUD) { _overlaysToDelete.push_back(overlay); } @@ -50,19 +49,22 @@ void Overlays::cleanupAllOverlays() { } _overlaysHUD.clear(); _overlaysWorld.clear(); +#if OVERLAY_PANELS _panels.clear(); +#endif } cleanupOverlaysToDelete(); } void Overlays::init() { +#if OVERLAY_PANELS _scriptEngine = new QScriptEngine(); +#endif } void Overlays::update(float deltatime) { { - QWriteLocker lock(&_lock); foreach(Overlay::Pointer thisOverlay, _overlaysHUD) { thisOverlay->update(deltatime); } @@ -80,8 +82,6 @@ void Overlays::cleanupOverlaysToDelete() { render::Transaction transaction; { - QWriteLocker lock(&_deleteLock); - do { Overlay::Pointer overlay = _overlaysToDelete.takeLast(); @@ -100,7 +100,6 @@ void Overlays::cleanupOverlaysToDelete() { void Overlays::renderHUD(RenderArgs* renderArgs) { PROFILE_RANGE(render_overlays, __FUNCTION__); - QReadLocker lock(&_lock); gpu::Batch& batch = *renderArgs->_batch; auto geometryCache = DependencyManager::get(); @@ -126,12 +125,10 @@ void Overlays::renderHUD(RenderArgs* renderArgs) { } void Overlays::disable() { - QWriteLocker lock(&_lock); _enabled = false; } void Overlays::enable() { - QWriteLocker lock(&_lock); _enabled = true; } @@ -146,6 +143,12 @@ Overlay::Pointer Overlays::getOverlay(OverlayID id) const { } OverlayID Overlays::addOverlay(const QString& type, const QVariant& properties) { + if (QThread::currentThread() != thread()) { + OverlayID result; + hifi::qt::blockingInvokeMethod(this, "addOverlay", Q_RETURN_ARG(OverlayID, result), Q_ARG(QString, type), Q_ARG(QVariant, properties)); + return result; + } + Overlay::Pointer thisOverlay = nullptr; if (type == ImageOverlay::TYPE) { @@ -185,8 +188,7 @@ OverlayID Overlays::addOverlay(const QString& type, const QVariant& properties) return UNKNOWN_OVERLAY_ID; } -OverlayID Overlays::addOverlay(Overlay::Pointer overlay) { - QWriteLocker lock(&_lock); +OverlayID Overlays::addOverlay(const Overlay::Pointer& overlay) { OverlayID thisID = OverlayID(QUuid::createUuid()); overlay->setOverlayID(thisID); overlay->setStackOrder(_stackOrder++); @@ -205,14 +207,22 @@ OverlayID Overlays::addOverlay(Overlay::Pointer overlay) { } OverlayID Overlays::cloneOverlay(OverlayID id) { + if (QThread::currentThread() != thread()) { + OverlayID result; + hifi::qt::blockingInvokeMethod(this, "cloneOverlay", Q_RETURN_ARG(OverlayID, result), Q_ARG(OverlayID, id)); + return result; + } + Overlay::Pointer thisOverlay = getOverlay(id); if (thisOverlay) { OverlayID cloneId = addOverlay(Overlay::Pointer(thisOverlay->createClone())); +#if OVERLAY_PANELS auto attachable = std::dynamic_pointer_cast(thisOverlay); if (attachable && attachable->getParentPanel()) { attachable->getParentPanel()->addChild(cloneId); } +#endif return cloneId; } @@ -220,21 +230,29 @@ OverlayID Overlays::cloneOverlay(OverlayID id) { } bool Overlays::editOverlay(OverlayID id, const QVariant& properties) { - QWriteLocker lock(&_lock); + if (QThread::currentThread() != thread()) { + bool result; + hifi::qt::blockingInvokeMethod(this, "editOverlay", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id), Q_ARG(QVariant, properties)); + return result; + } Overlay::Pointer thisOverlay = getOverlay(id); if (thisOverlay) { thisOverlay->setProperties(properties.toMap()); - return true; } return false; } bool Overlays::editOverlays(const QVariant& propertiesById) { + if (QThread::currentThread() != thread()) { + bool result; + hifi::qt::blockingInvokeMethod(this, "editOverlays", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, propertiesById)); + return result; + } + QVariantMap map = propertiesById.toMap(); bool success = true; - QWriteLocker lock(&_lock); for (const auto& key : map.keys()) { OverlayID id = OverlayID(key); Overlay::Pointer thisOverlay = getOverlay(id); @@ -249,10 +267,14 @@ bool Overlays::editOverlays(const QVariant& propertiesById) { } void Overlays::deleteOverlay(OverlayID id) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "deleteOverlay", Q_ARG(OverlayID, id)); + return; + } + Overlay::Pointer overlayToDelete; { - QWriteLocker lock(&_lock); if (_overlaysHUD.contains(id)) { overlayToDelete = _overlaysHUD.take(id); } else if (_overlaysWorld.contains(id)) { @@ -262,19 +284,25 @@ void Overlays::deleteOverlay(OverlayID id) { } } +#if OVERLAY_PANELS auto attachable = std::dynamic_pointer_cast(overlayToDelete); if (attachable && attachable->getParentPanel()) { attachable->getParentPanel()->removeChild(id); attachable->setParentPanel(nullptr); } +#endif - QWriteLocker lock(&_deleteLock); _overlaysToDelete.push_back(overlayToDelete); - emit overlayDeleted(id); } -QString Overlays::getOverlayType(OverlayID overlayId) const { +QString Overlays::getOverlayType(OverlayID overlayId) { + if (QThread::currentThread() != thread()) { + QString result; + hifi::qt::blockingInvokeMethod(this, "getOverlayType", Q_RETURN_ARG(QString, result), Q_ARG(OverlayID, overlayId)); + return result; + } + Overlay::Pointer overlay = getOverlay(overlayId); if (overlay) { return overlay->getType(); @@ -283,6 +311,12 @@ QString Overlays::getOverlayType(OverlayID overlayId) const { } QObject* Overlays::getOverlayObject(OverlayID id) { + if (QThread::currentThread() != thread()) { + QObject* result; + hifi::qt::blockingInvokeMethod(this, "getOverlayObject", Q_RETURN_ARG(QObject*, result), Q_ARG(OverlayID, id)); + return result; + } + Overlay::Pointer thisOverlay = getOverlay(id); if (thisOverlay) { return qobject_cast(&(*thisOverlay)); @@ -290,6 +324,7 @@ QObject* Overlays::getOverlayObject(OverlayID id) { return nullptr; } +#if OVERLAY_PANELS OverlayID Overlays::getParentPanel(OverlayID childId) const { Overlay::Pointer overlay = getOverlay(childId); auto attachable = std::dynamic_pointer_cast(overlay); @@ -330,10 +365,16 @@ void Overlays::setParentPanel(OverlayID childId, OverlayID panelId) { } } } +#endif OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { + if (QThread::currentThread() != thread()) { + OverlayID result; + hifi::qt::blockingInvokeMethod(this, "getOverlayAtPoint", Q_RETURN_ARG(OverlayID, result), Q_ARG(glm::vec2, point)); + return result; + } + glm::vec2 pointCopy = point; - QReadLocker lock(&_lock); if (!_enabled) { return UNKNOWN_OVERLAY_ID; } @@ -365,9 +406,14 @@ OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { } OverlayPropertyResult Overlays::getProperty(OverlayID id, const QString& property) { + if (QThread::currentThread() != thread()) { + OverlayPropertyResult result; + hifi::qt::blockingInvokeMethod(this, "getProperty", Q_RETURN_ARG(OverlayPropertyResult, result), Q_ARG(OverlayID, id), Q_ARG(QString, property)); + return result; + } + OverlayPropertyResult result; Overlay::Pointer thisOverlay = getOverlay(id); - QReadLocker lock(&_lock); if (thisOverlay && thisOverlay->supportsGetProperty()) { result.value = thisOverlay->getProperty(property); } @@ -405,7 +451,18 @@ RayToOverlayIntersectionResult Overlays::findRayIntersectionInternal(const PickR const QVector& overlaysToInclude, const QVector& overlaysToDiscard, bool visibleOnly, bool collidableOnly) { - QReadLocker lock(&_lock); + if (QThread::currentThread() != thread()) { + RayToOverlayIntersectionResult result; + hifi::qt::blockingInvokeMethod(this, "findRayIntersectionInternal", Q_RETURN_ARG(RayToOverlayIntersectionResult, result), + Q_ARG(PickRay, ray), + Q_ARG(bool, precisionPicking), + Q_ARG(QVector, overlaysToInclude), + Q_ARG(QVector, overlaysToDiscard), + Q_ARG(bool, visibleOnly), + Q_ARG(bool, collidableOnly)); + return result; + } + float bestDistance = std::numeric_limits::max(); bool bestIsFront = false; @@ -448,16 +505,6 @@ RayToOverlayIntersectionResult Overlays::findRayIntersectionInternal(const PickR return result; } -RayToOverlayIntersectionResult::RayToOverlayIntersectionResult() : - intersects(false), - overlayID(UNKNOWN_OVERLAY_ID), - distance(0), - face(), - intersection(), - extraInfo() -{ -} - QScriptValue RayToOverlayIntersectionResultToScriptValue(QScriptEngine* engine, const RayToOverlayIntersectionResult& value) { auto obj = engine->newObject(); obj.setProperty("intersects", value.intersects); @@ -531,7 +578,12 @@ void RayToOverlayIntersectionResultFromScriptValue(const QScriptValue& objectVar } bool Overlays::isLoaded(OverlayID id) { - QReadLocker lock(&_lock); + if (QThread::currentThread() != thread()) { + bool result; + hifi::qt::blockingInvokeMethod(this, "isLoaded", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id)); + return result; + } + Overlay::Pointer thisOverlay = getOverlay(id); if (!thisOverlay) { return false; // not found @@ -539,7 +591,13 @@ bool Overlays::isLoaded(OverlayID id) { return thisOverlay->isLoaded(); } -QSizeF Overlays::textSize(OverlayID id, const QString& text) const { +QSizeF Overlays::textSize(OverlayID id, const QString& text) { + if (QThread::currentThread() != thread()) { + QSizeF result; + hifi::qt::blockingInvokeMethod(this, "textSize", Q_RETURN_ARG(QSizeF, result), Q_ARG(OverlayID, id), Q_ARG(QString, text)); + return result; + } + Overlay::Pointer thisOverlay = _overlaysHUD[id]; if (thisOverlay) { if (auto textOverlay = std::dynamic_pointer_cast(thisOverlay)) { @@ -554,6 +612,7 @@ QSizeF Overlays::textSize(OverlayID id, const QString& text) const { return QSizeF(0.0f, 0.0f); } +#if OVERLAY_PANELS OverlayID Overlays::addPanel(OverlayPanel::Pointer panel) { QWriteLocker lock(&_lock); @@ -607,8 +666,15 @@ void Overlays::deletePanel(OverlayID panelId) { emit panelDeleted(panelId); } +#endif bool Overlays::isAddedOverlay(OverlayID id) { + if (QThread::currentThread() != thread()) { + bool result; + hifi::qt::blockingInvokeMethod(this, "isAddedOverlay", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id)); + return result; + } + return _overlaysHUD.contains(id) || _overlaysWorld.contains(id); } @@ -636,20 +702,43 @@ void Overlays::sendHoverLeaveOverlay(OverlayID id, PointerEvent event) { emit hoverLeaveOverlay(id, event); } -OverlayID Overlays::getKeyboardFocusOverlay() const { +OverlayID Overlays::getKeyboardFocusOverlay() { + if (QThread::currentThread() != thread()) { + OverlayID result; + hifi::qt::blockingInvokeMethod(this, "getKeyboardFocusOverlay", Q_RETURN_ARG(OverlayID, result)); + return result; + } + return qApp->getKeyboardFocusOverlay(); } void Overlays::setKeyboardFocusOverlay(OverlayID id) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setKeyboardFocusOverlay", Q_ARG(OverlayID, id)); + return; + } + qApp->setKeyboardFocusOverlay(id); } -float Overlays::width() const { +float Overlays::width() { + if (QThread::currentThread() != thread()) { + float result; + hifi::qt::blockingInvokeMethod(this, "width", Q_RETURN_ARG(float, result)); + return result; + } + auto offscreenUi = DependencyManager::get(); return offscreenUi->getWindow()->size().width(); } -float Overlays::height() const { +float Overlays::height() { + if (QThread::currentThread() != thread()) { + float result; + hifi::qt::blockingInvokeMethod(this, "height", Q_RETURN_ARG(float, result)); + return result; + } + auto offscreenUi = DependencyManager::get(); return offscreenUi->getWindow()->size().height(); } @@ -705,7 +794,6 @@ PointerEvent Overlays::calculatePointerEvent(Overlay::Pointer overlay, PickRay r auto thisOverlay = std::dynamic_pointer_cast(overlay); - QReadLocker lock(&_lock); auto position = thisOverlay->getPosition(); auto rotation = thisOverlay->getRotation(); auto dimensions = thisOverlay->getSize(); @@ -854,8 +942,13 @@ bool Overlays::mouseMoveEvent(QMouseEvent* event) { return false; } -QVector Overlays::findOverlays(const glm::vec3& center, float radius) const { +QVector Overlays::findOverlays(const glm::vec3& center, float radius) { QVector result; + if (QThread::currentThread() != thread()) { + hifi::qt::blockingInvokeMethod(this, "findOverlays", Q_RETURN_ARG(QVector, result), Q_ARG(glm::vec3, center), Q_ARG(float, radius)); + return result; + } + QMapIterator i(_overlaysWorld); int checked = 0; diff --git a/interface/src/ui/overlays/Overlays.h b/interface/src/ui/overlays/Overlays.h index a1d4be8376..d3fa70225e 100644 --- a/interface/src/ui/overlays/Overlays.h +++ b/interface/src/ui/overlays/Overlays.h @@ -25,8 +25,9 @@ #include #include "Overlay.h" -#include "OverlayPanel.h" + #include "PanelAttachable.h" +#include "OverlayPanel.h" class PickRay; @@ -41,6 +42,8 @@ Q_DECLARE_METATYPE(OverlayPropertyResult); QScriptValue OverlayPropertyResultToScriptValue(QScriptEngine* engine, const OverlayPropertyResult& value); void OverlayPropertyResultFromScriptValue(const QScriptValue& object, OverlayPropertyResult& value); +const OverlayID UNKNOWN_OVERLAY_ID = OverlayID(); + /**jsdoc * @typedef Overlays.RayToOverlayIntersectionResult * @property {bool} intersects True if the PickRay intersected with a 3D overlay. @@ -51,10 +54,9 @@ void OverlayPropertyResultFromScriptValue(const QScriptValue& object, OverlayPro */ class RayToOverlayIntersectionResult { public: - RayToOverlayIntersectionResult(); - bool intersects; - OverlayID overlayID; - float distance; + bool intersects { false }; + OverlayID overlayID { UNKNOWN_OVERLAY_ID }; + float distance { 0 }; BoxFace face; glm::vec3 surfaceNormal; glm::vec3 intersection; @@ -77,8 +79,6 @@ void RayToOverlayIntersectionResultFromScriptValue(const QScriptValue& object, R * @namespace Overlays */ -const OverlayID UNKNOWN_OVERLAY_ID = OverlayID(); - class Overlays : public QObject { Q_OBJECT @@ -94,11 +94,13 @@ public: void enable(); Overlay::Pointer getOverlay(OverlayID id) const; +#if OVERLAY_PANELS OverlayPanel::Pointer getPanel(OverlayID id) const { return _panels[id]; } +#endif /// adds an overlay that's already been created OverlayID addOverlay(Overlay* overlay) { return addOverlay(Overlay::Pointer(overlay)); } - OverlayID addOverlay(Overlay::Pointer overlay); + OverlayID addOverlay(const Overlay::Pointer& overlay); bool mousePressEvent(QMouseEvent* event); bool mouseDoublePressEvent(QMouseEvent* event); @@ -156,7 +158,7 @@ public slots: * @param {Overlays.OverlayID} overlayID The ID of the overlay to get the type of. * @return {string} The type of the overlay if found, otherwise the empty string. */ - QString getOverlayType(OverlayID overlayId) const; + QString getOverlayType(OverlayID overlayId); /**jsdoc * Get the overlay Script object. @@ -215,7 +217,7 @@ public slots: * @param {float} radius search radius * @return {Overlays.OverlayID[]} list of overlays withing the radius */ - QVector findOverlays(const glm::vec3& center, float radius) const; + QVector findOverlays(const glm::vec3& center, float radius); /**jsdoc * Check whether an overlay's assets have been loaded. For example, if the @@ -237,7 +239,7 @@ public slots: * @param {string} The string to measure. * @return {Vec2} The size of the text. */ - QSizeF textSize(OverlayID id, const QString& text) const; + QSizeF textSize(OverlayID id, const QString& text); /**jsdoc * Get the width of the virtual 2D HUD. @@ -245,7 +247,7 @@ public slots: * @function Overlays.width * @return {float} The width of the 2D HUD. */ - float width() const; + float width(); /**jsdoc * Get the height of the virtual 2D HUD. @@ -253,11 +255,12 @@ public slots: * @function Overlays.height * @return {float} The height of the 2D HUD. */ - float height() const; + float height(); /// return true if there is an overlay with that id else false bool isAddedOverlay(OverlayID id); +#if OVERLAY_PANELS OverlayID getParentPanel(OverlayID childId) const; void setParentPanel(OverlayID childId, OverlayID panelId); @@ -279,6 +282,8 @@ public slots: /// return true if there is a panel with that id else false bool isAddedPanel(OverlayID id) { return _panels.contains(id); } +#endif + void sendMousePressOnOverlay(OverlayID overlayID, const PointerEvent& event); void sendMouseReleaseOnOverlay(OverlayID overlayID, const PointerEvent& event); void sendMouseMoveOnOverlay(OverlayID overlayID, const PointerEvent& event); @@ -287,7 +292,7 @@ public slots: void sendHoverOverOverlay(OverlayID id, PointerEvent event); void sendHoverLeaveOverlay(OverlayID id, PointerEvent event); - OverlayID getKeyboardFocusOverlay() const; + OverlayID getKeyboardFocusOverlay(); void setKeyboardFocusOverlay(OverlayID id); signals: @@ -316,13 +321,15 @@ private: QMap _overlaysHUD; QMap _overlaysWorld; +#if OVERLAY_PANELS QMap _panels; +#endif QList _overlaysToDelete; unsigned int _stackOrder { 1 }; - QReadWriteLock _lock; - QReadWriteLock _deleteLock; +#if OVERLAY_PANELS QScriptEngine* _scriptEngine; +#endif bool _enabled = true; PointerEvent calculatePointerEvent(Overlay::Pointer overlay, PickRay ray, RayToOverlayIntersectionResult rayPickResult, @@ -331,7 +338,7 @@ private: OverlayID _currentClickingOnOverlayID { UNKNOWN_OVERLAY_ID }; OverlayID _currentHoverOverOverlayID { UNKNOWN_OVERLAY_ID }; - RayToOverlayIntersectionResult findRayIntersectionInternal(const PickRay& ray, bool precisionPicking, + Q_INVOKABLE RayToOverlayIntersectionResult findRayIntersectionInternal(const PickRay& ray, bool precisionPicking, const QVector& overlaysToInclude, const QVector& overlaysToDiscard, bool visibleOnly = false, bool collidableOnly = false); diff --git a/interface/src/ui/overlays/PanelAttachable.cpp b/interface/src/ui/overlays/PanelAttachable.cpp index 7f1c4e2e50..421155083c 100644 --- a/interface/src/ui/overlays/PanelAttachable.cpp +++ b/interface/src/ui/overlays/PanelAttachable.cpp @@ -16,11 +16,15 @@ #include "OverlayPanel.h" bool PanelAttachable::getParentVisible() const { +#if OVERLAY_PANELS if (getParentPanel()) { return getParentPanel()->getVisible() && getParentPanel()->getParentVisible(); } else { return true; } +#else + return true; +#endif } QVariant PanelAttachable::getProperty(const QString& property) { @@ -61,11 +65,13 @@ void PanelAttachable::applyTransformTo(Transform& transform, bool force) { if (force || usecTimestampNow() > _transformExpiry) { const quint64 TRANSFORM_UPDATE_PERIOD = 100000; // frequency is 10 Hz _transformExpiry = usecTimestampNow() + TRANSFORM_UPDATE_PERIOD; +#if OVERLAY_PANELS if (getParentPanel()) { getParentPanel()->applyTransformTo(transform, true); transform.postTranslate(getOffsetPosition()); transform.postRotate(getOffsetRotation()); transform.postScale(getOffsetScale()); } +#endif } } diff --git a/interface/src/ui/overlays/PanelAttachable.h b/interface/src/ui/overlays/PanelAttachable.h index 270addbfcf..4f37cd2258 100644 --- a/interface/src/ui/overlays/PanelAttachable.h +++ b/interface/src/ui/overlays/PanelAttachable.h @@ -30,6 +30,8 @@ #ifndef hifi_PanelAttachable_h #define hifi_PanelAttachable_h +#define OVERLAY_PANELS 0 + #include #include @@ -39,18 +41,21 @@ #include class OverlayPanel; - class PanelAttachable { public: // getters +#if OVERLAY_PANELS std::shared_ptr getParentPanel() const { return _parentPanel; } +#endif glm::vec3 getOffsetPosition() const { return _offset.getTranslation(); } glm::quat getOffsetRotation() const { return _offset.getRotation(); } glm::vec3 getOffsetScale() const { return _offset.getScale(); } bool getParentVisible() const; // setters +#if OVERLAY_PANELS void setParentPanel(std::shared_ptr panel) { _parentPanel = panel; } +#endif void setOffsetPosition(const glm::vec3& position) { _offset.setTranslation(position); } void setOffsetRotation(const glm::quat& rotation) { _offset.setRotation(rotation); } void setOffsetScale(float scale) { _offset.setScale(scale); } @@ -66,7 +71,9 @@ protected: quint64 _transformExpiry = 0; private: +#if OVERLAY_PANELS std::shared_ptr _parentPanel = nullptr; +#endif Transform _offset; }; diff --git a/interface/src/ui/overlays/QmlOverlay.cpp b/interface/src/ui/overlays/QmlOverlay.cpp index eb909de993..15e72cf1e3 100644 --- a/interface/src/ui/overlays/QmlOverlay.cpp +++ b/interface/src/ui/overlays/QmlOverlay.cpp @@ -32,21 +32,20 @@ QmlOverlay::QmlOverlay(const QUrl& url, const QmlOverlay* textOverlay) } void QmlOverlay::buildQmlElement(const QUrl& url) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "buildQmlElement", Q_ARG(QUrl, url)); + return; + } + auto offscreenUi = DependencyManager::get(); - offscreenUi->returnFromUiThread([=] { - offscreenUi->load(url, [=](QQmlContext* context, QObject* object) { - QQuickItem* rawPtr = dynamic_cast(object); - // Create a shared ptr with a custom deleter lambda, that calls deleteLater - _qmlElement = std::shared_ptr(rawPtr, [](QQuickItem* ptr) { - if (ptr) { - ptr->deleteLater(); - } - }); + offscreenUi->load(url, [=](QQmlContext* context, QObject* object) { + QQuickItem* rawPtr = dynamic_cast(object); + // Create a shared ptr with a custom deleter lambda, that calls deleteLater + _qmlElement = std::shared_ptr(rawPtr, [](QQuickItem* ptr) { + if (ptr) { + ptr->deleteLater(); + } }); - while (!_qmlElement) { - qApp->processEvents(); - } - return QVariant(); }); } @@ -55,20 +54,23 @@ QmlOverlay::~QmlOverlay() { } void QmlOverlay::setProperties(const QVariantMap& properties) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setProperties", Q_ARG(QVariantMap, properties)); + return; + } + Overlay2D::setProperties(properties); auto bounds = _bounds; std::weak_ptr weakQmlElement = _qmlElement; - DependencyManager::get()->executeOnUiThread([weakQmlElement, bounds, properties] { - // check to see if qmlElement still exists - auto qmlElement = weakQmlElement.lock(); - if (qmlElement) { - qmlElement->setX(bounds.left()); - qmlElement->setY(bounds.top()); - qmlElement->setWidth(bounds.width()); - qmlElement->setHeight(bounds.height()); - QMetaObject::invokeMethod(qmlElement.get(), "updatePropertiesFromScript", Qt::DirectConnection, Q_ARG(QVariant, properties)); - } - }); + // check to see if qmlElement still exists + auto qmlElement = weakQmlElement.lock(); + if (qmlElement) { + qmlElement->setX(bounds.left()); + qmlElement->setY(bounds.top()); + qmlElement->setWidth(bounds.width()); + qmlElement->setHeight(bounds.height()); + QMetaObject::invokeMethod(qmlElement.get(), "updatePropertiesFromScript", Qt::DirectConnection, Q_ARG(QVariant, properties)); + } } void QmlOverlay::render(RenderArgs* args) { diff --git a/interface/src/ui/overlays/QmlOverlay.h b/interface/src/ui/overlays/QmlOverlay.h index 736d3884b5..ced2b6fa1f 100644 --- a/interface/src/ui/overlays/QmlOverlay.h +++ b/interface/src/ui/overlays/QmlOverlay.h @@ -32,7 +32,7 @@ public: void render(RenderArgs* args) override; private: - void buildQmlElement(const QUrl& url); + Q_INVOKABLE void buildQmlElement(const QUrl& url); protected: std::shared_ptr _qmlElement; diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 01af69e3ad..c630fe09e4 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -259,10 +259,21 @@ void AudioClient::customDeleter() { void AudioClient::cleanupBeforeQuit() { // FIXME: this should be put in customDeleter, but there is still a reference to this when it is called, // so this must be explicitly, synchronously stopped + static ConditionalGuard guard; + if (QThread::currentThread() != thread()) { + // This will likely be called from the main thread, but we don't want to do blocking queued calls + // from the main thread, so we use a normal auto-connection invoke, and then use a conditional to wait + // for completion + // The effect is the same, yes, but we actually want to avoid the use of Qt::BlockingQueuedConnection + // in the code + QMetaObject::invokeMethod(this, "cleanupBeforeQuit"); + guard.wait(); + return; + } stop(); - _checkDevicesTimer->stop(); + guard.trigger(); } void AudioClient::handleMismatchAudioFormat(SharedNodePointer node, const QString& currentCodec, const QString& recievedCodec) { @@ -1859,7 +1870,7 @@ void AudioClient::startThread() { } void AudioClient::setInputVolume(float volume) { - if (_audioInput && volume != _audioInput->volume()) { + if (_audioInput && volume != (float)_audioInput->volume()) { _audioInput->setVolume(volume); emit inputVolumeChanged(_audioInput->volume()); } diff --git a/libraries/ui/src/QmlWebWindowClass.cpp b/libraries/ui/src/QmlWebWindowClass.cpp index 68bb872667..a370d7999b 100644 --- a/libraries/ui/src/QmlWebWindowClass.cpp +++ b/libraries/ui/src/QmlWebWindowClass.cpp @@ -13,6 +13,7 @@ #include #include +#include #include "OffscreenUi.h" static const char* const URL_PROPERTY = "source"; @@ -21,39 +22,51 @@ static const char* const SCRIPT_PROPERTY = "scriptUrl"; // Method called by Qt scripts to create a new web window in the overlay QScriptValue QmlWebWindowClass::constructor(QScriptContext* context, QScriptEngine* engine) { auto properties = parseArguments(context); - QmlWebWindowClass* retVal { nullptr }; auto offscreenUi = DependencyManager::get(); - offscreenUi->executeOnUiThread([&] { - retVal = new QmlWebWindowClass(); - retVal->initQml(properties); - }, true); + QmlWebWindowClass* retVal = new QmlWebWindowClass(); Q_ASSERT(retVal); + if (QThread::currentThread() != qApp->thread()) { + retVal->moveToThread(qApp->thread()); + QMetaObject::invokeMethod(retVal, "initQml", Q_ARG(QVariantMap, properties)); + } else { + retVal->initQml(properties); + } connect(engine, &QScriptEngine::destroyed, retVal, &QmlWindowClass::deleteLater); return engine->newQObject(retVal); } -QString QmlWebWindowClass::getURL() const { - QVariant result = DependencyManager::get()->returnFromUiThread([&]()->QVariant { - if (_qmlWindow.isNull()) { - return QVariant(); - } - return _qmlWindow->property(URL_PROPERTY); - }); - return result.toString(); +QString QmlWebWindowClass::getURL() { + if (QThread::currentThread() != thread()) { + QString result = false; + hifi::qt::blockingInvokeMethod(this, "getURL", Q_RETURN_ARG(QString, result)); + return result; + } + + if (_qmlWindow.isNull()) { + return QString(); + } + + return _qmlWindow->property(URL_PROPERTY).toString(); } void QmlWebWindowClass::setURL(const QString& urlString) { - DependencyManager::get()->executeOnUiThread([=] { - if (!_qmlWindow.isNull()) { - _qmlWindow->setProperty(URL_PROPERTY, urlString); - } - }); + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setURL", Q_ARG(QString, urlString)); + return; + } + + if (!_qmlWindow.isNull()) { + _qmlWindow->setProperty(URL_PROPERTY, urlString); + } } void QmlWebWindowClass::setScriptURL(const QString& script) { - DependencyManager::get()->executeOnUiThread([=] { - if (!_qmlWindow.isNull()) { - _qmlWindow->setProperty(SCRIPT_PROPERTY, script); - } - }); + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setScriptURL", Q_ARG(QString, script)); + return; + } + + if (!_qmlWindow.isNull()) { + _qmlWindow->setProperty(SCRIPT_PROPERTY, script); + } } diff --git a/libraries/ui/src/QmlWebWindowClass.h b/libraries/ui/src/QmlWebWindowClass.h index 15ebe74a4f..cdc07265cd 100644 --- a/libraries/ui/src/QmlWebWindowClass.h +++ b/libraries/ui/src/QmlWebWindowClass.h @@ -20,7 +20,7 @@ public: static QScriptValue constructor(QScriptContext* context, QScriptEngine* engine); public slots: - QString getURL() const; + QString getURL(); void setURL(const QString& url); void setScriptURL(const QString& script); diff --git a/libraries/ui/src/QmlWindowClass.cpp b/libraries/ui/src/QmlWindowClass.cpp index f5bb880957..e773ea0c5d 100644 --- a/libraries/ui/src/QmlWindowClass.cpp +++ b/libraries/ui/src/QmlWindowClass.cpp @@ -23,6 +23,7 @@ #include #include +#include #include "OffscreenUi.h" static const char* const SOURCE_PROPERTY = "source"; @@ -73,13 +74,15 @@ QVariantMap QmlWindowClass::parseArguments(QScriptContext* context) { // Method called by Qt scripts to create a new web window in the overlay QScriptValue QmlWindowClass::constructor(QScriptContext* context, QScriptEngine* engine) { auto properties = parseArguments(context); - QmlWindowClass* retVal { nullptr }; auto offscreenUi = DependencyManager::get(); - offscreenUi->executeOnUiThread([&] { - retVal = new QmlWindowClass(); - retVal->initQml(properties); - }, true); + QmlWindowClass* retVal = new QmlWindowClass(); Q_ASSERT(retVal); + if (QThread::currentThread() != qApp->thread()) { + retVal->moveToThread(qApp->thread()); + hifi::qt::blockingInvokeMethod(retVal, "initQml", Q_ARG(QVariantMap, properties)); + } else { + retVal->initQml(properties); + } connect(engine, &QScriptEngine::destroyed, retVal, &QmlWindowClass::deleteLater); return engine->newQObject(retVal); } @@ -214,49 +217,64 @@ QQuickItem* QmlWindowClass::asQuickItem() const { } void QmlWindowClass::setVisible(bool visible) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setVisible", Q_ARG(bool, visible)); + return; + } + QQuickItem* targetWindow = asQuickItem(); if (_toolWindow) { // For tool window tabs we special case visibility as a function call on the tab parent // The tool window itself has special logic based on whether any tabs are visible QMetaObject::invokeMethod(targetWindow, "showTabForUrl", Qt::QueuedConnection, Q_ARG(QVariant, _source), Q_ARG(QVariant, visible)); } else { - DependencyManager::get()->executeOnUiThread([=] { - targetWindow->setProperty(OFFSCREEN_VISIBILITY_PROPERTY, visible); - }); + targetWindow->setProperty(OFFSCREEN_VISIBILITY_PROPERTY, visible); } } -bool QmlWindowClass::isVisible() const { +bool QmlWindowClass::isVisible() { + if (QThread::currentThread() != thread()) { + bool result = false; + hifi::qt::blockingInvokeMethod(this, "isVisible", Q_RETURN_ARG(bool, result)); + return result; + } + // The tool window itself has special logic based on whether any tabs are enabled - return DependencyManager::get()->returnFromUiThread([&] { - if (_qmlWindow.isNull()) { - return QVariant::fromValue(false); - } - if (_toolWindow) { - return QVariant::fromValue(dynamic_cast(_qmlWindow.data())->isEnabled()); - } else { - return QVariant::fromValue(asQuickItem()->isVisible()); - } - }).toBool(); + if (_qmlWindow.isNull()) { + return false; + } + + if (_toolWindow) { + return dynamic_cast(_qmlWindow.data())->isEnabled(); + } + + return asQuickItem()->isVisible(); } -glm::vec2 QmlWindowClass::getPosition() const { - QVariant result = DependencyManager::get()->returnFromUiThread([&]()->QVariant { - if (_qmlWindow.isNull()) { - return QVariant(QPointF(0, 0)); - } - return asQuickItem()->position(); - }); - return toGlm(result.toPointF()); +glm::vec2 QmlWindowClass::getPosition() { + if (QThread::currentThread() != thread()) { + vec2 result; + hifi::qt::blockingInvokeMethod(this, "getPosition", Q_RETURN_ARG(vec2, result)); + return result; + } + + if (_qmlWindow.isNull()) { + return {}; + } + + return toGlm(asQuickItem()->position()); } void QmlWindowClass::setPosition(const glm::vec2& position) { - DependencyManager::get()->executeOnUiThread([=] { - if (!_qmlWindow.isNull()) { - asQuickItem()->setPosition(QPointF(position.x, position.y)); - } - }); + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setPosition", Q_ARG(vec2, position)); + return; + } + + if (!_qmlWindow.isNull()) { + asQuickItem()->setPosition(QPointF(position.x, position.y)); + } } void QmlWindowClass::setPosition(int x, int y) { @@ -268,23 +286,29 @@ glm::vec2 toGlm(const QSizeF& size) { return glm::vec2(size.width(), size.height()); } -glm::vec2 QmlWindowClass::getSize() const { - QVariant result = DependencyManager::get()->returnFromUiThread([&]()->QVariant { - if (_qmlWindow.isNull()) { - return QVariant(QSizeF(0, 0)); - } - QQuickItem* targetWindow = asQuickItem(); - return QSizeF(targetWindow->width(), targetWindow->height()); - }); - return toGlm(result.toSizeF()); +glm::vec2 QmlWindowClass::getSize() { + if (QThread::currentThread() != thread()) { + vec2 result; + hifi::qt::blockingInvokeMethod(this, "getSize", Q_RETURN_ARG(vec2, result)); + return result; + } + + if (_qmlWindow.isNull()) { + return {}; + } + QQuickItem* targetWindow = asQuickItem(); + return vec2(targetWindow->width(), targetWindow->height()); } void QmlWindowClass::setSize(const glm::vec2& size) { - DependencyManager::get()->executeOnUiThread([=] { - if (!_qmlWindow.isNull()) { - asQuickItem()->setSize(QSizeF(size.x, size.y)); - } - }); + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setSize", Q_ARG(vec2, size)); + return; + } + + if (!_qmlWindow.isNull()) { + asQuickItem()->setSize(QSizeF(size.x, size.y)); + } } void QmlWindowClass::setSize(int width, int height) { @@ -292,28 +316,33 @@ void QmlWindowClass::setSize(int width, int height) { } void QmlWindowClass::setTitle(const QString& title) { - DependencyManager::get()->executeOnUiThread([=] { - if (!_qmlWindow.isNull()) { - asQuickItem()->setProperty(TITLE_PROPERTY, title); - } - }); + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setTitle", Q_ARG(QString, title)); + return; + } + + if (!_qmlWindow.isNull()) { + asQuickItem()->setProperty(TITLE_PROPERTY, title); + } } void QmlWindowClass::close() { - if (_qmlWindow) { - if (_toolWindow) { - auto offscreenUi = DependencyManager::get(); - offscreenUi->executeOnUiThread([=] { - auto toolWindow = offscreenUi->getToolWindow(); - auto invokeResult = QMetaObject::invokeMethod(toolWindow, "removeTabForUrl", Qt::DirectConnection, - Q_ARG(QVariant, _source)); - Q_ASSERT(invokeResult); - }); - } else { - _qmlWindow->deleteLater(); - } - _qmlWindow = nullptr; + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "close"); + return; } + + if (_toolWindow) { + auto offscreenUi = DependencyManager::get(); + auto toolWindow = offscreenUi->getToolWindow(); + auto invokeResult = QMetaObject::invokeMethod(toolWindow, "removeTabForUrl", Qt::DirectConnection, + Q_ARG(QVariant, _source)); + Q_ASSERT(invokeResult); + return; + } else if (_qmlWindow) { + _qmlWindow->deleteLater(); + } + _qmlWindow = nullptr; } void QmlWindowClass::hasMoved(QVector2D position) { @@ -325,10 +354,13 @@ void QmlWindowClass::hasClosed() { } void QmlWindowClass::raise() { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "raise"); + return; + } + auto offscreenUi = DependencyManager::get(); - offscreenUi->executeOnUiThread([=] { - if (!_qmlWindow.isNull()) { - QMetaObject::invokeMethod(asQuickItem(), "raise", Qt::DirectConnection); - } - }); + if (_qmlWindow) { + QMetaObject::invokeMethod(asQuickItem(), "raise", Qt::DirectConnection); + } } diff --git a/libraries/ui/src/QmlWindowClass.h b/libraries/ui/src/QmlWindowClass.h index 4f604133a5..d3e1912d45 100644 --- a/libraries/ui/src/QmlWindowClass.h +++ b/libraries/ui/src/QmlWindowClass.h @@ -31,18 +31,18 @@ public: QmlWindowClass(); ~QmlWindowClass(); - virtual void initQml(QVariantMap properties); + Q_INVOKABLE virtual void initQml(QVariantMap properties); QQuickItem* asQuickItem() const; public slots: - bool isVisible() const; + bool isVisible(); void setVisible(bool visible); - glm::vec2 getPosition() const; + glm::vec2 getPosition(); void setPosition(const glm::vec2& position); void setPosition(int x, int y); - glm::vec2 getSize() const; + glm::vec2 getSize(); void setSize(const glm::vec2& size); void setSize(int width, int height); void setTitle(const QString& title); diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index 573d873bab..19cd37a6cb 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -887,28 +887,6 @@ QQmlContext* OffscreenQmlSurface::getSurfaceContext() { return _qmlContext; } -void OffscreenQmlSurface::executeOnUiThread(std::function function, bool blocking ) { - if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "executeOnUiThread", blocking ? Qt::BlockingQueuedConnection : Qt::QueuedConnection, - Q_ARG(std::function, function)); - return; - } - - function(); -} - -QVariant OffscreenQmlSurface::returnFromUiThread(std::function function) { - if (QThread::currentThread() != thread()) { - QVariant result; - hifi::qt::blockingInvokeMethod(this, "returnFromUiThread", - Q_RETURN_ARG(QVariant, result), - Q_ARG(std::function, function)); - return result; - } - - return function(); -} - void OffscreenQmlSurface::focusDestroyed(QObject *obj) { _currentFocusItem = nullptr; } diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.h b/libraries/ui/src/ui/OffscreenQmlSurface.h index ae81ae48b4..54f27e3b1f 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.h +++ b/libraries/ui/src/ui/OffscreenQmlSurface.h @@ -55,10 +55,6 @@ public: return load(QUrl(qmlSourceFile), f); } void clearCache(); - - Q_INVOKABLE void executeOnUiThread(std::function function, bool blocking = false); - Q_INVOKABLE QVariant returnFromUiThread(std::function function); - void setMaxFps(uint8_t maxFps) { _maxFps = maxFps; } // Optional values for event handling void setProxyWindow(QWindow* window); diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index ade8c73df5..0dbcfac25c 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -214,20 +214,18 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { // create new desktop window auto offscreenUi = DependencyManager::get(); - offscreenUi->executeOnUiThread([=] { - auto tabletRootWindow = new TabletRootWindow(); - tabletRootWindow->initQml(QVariantMap()); - auto quickItem = tabletRootWindow->asQuickItem(); - _desktopWindow = tabletRootWindow; - QMetaObject::invokeMethod(quickItem, "setShown", Q_ARG(const QVariant&, QVariant(false))); + auto tabletRootWindow = new TabletRootWindow(); + tabletRootWindow->initQml(QVariantMap()); + auto quickItem = tabletRootWindow->asQuickItem(); + _desktopWindow = tabletRootWindow; + QMetaObject::invokeMethod(quickItem, "setShown", Q_ARG(const QVariant&, QVariant(false))); - QObject::connect(quickItem, SIGNAL(windowClosed()), this, SLOT(desktopWindowClosed())); + QObject::connect(quickItem, SIGNAL(windowClosed()), this, SLOT(desktopWindowClosed())); - QObject::connect(tabletRootWindow, SIGNAL(webEventReceived(QVariant)), this, SLOT(emitWebEvent(QVariant)), Qt::DirectConnection); + QObject::connect(tabletRootWindow, SIGNAL(webEventReceived(QVariant)), this, SLOT(emitWebEvent(QVariant)), Qt::DirectConnection); - // forward qml surface events to interface js - connect(tabletRootWindow, &QmlWindowClass::fromQml, this, &TabletProxy::fromQml); - }); + // forward qml surface events to interface js + connect(tabletRootWindow, &QmlWindowClass::fromQml, this, &TabletProxy::fromQml); } else { _state = State::Home; removeButtonsFromToolbar(); From c7e4bf931b49e3dd04c8f4595572e8395efe1850 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Tue, 27 Jun 2017 19:23:59 -0700 Subject: [PATCH 0690/1049] WIP: first steps toward smoothing ik chains --- .../animation/src/AnimInverseKinematics.cpp | 109 +++++++++++------- .../animation/src/AnimInverseKinematics.h | 8 +- libraries/animation/src/AnimSkeleton.cpp | 14 +++ libraries/animation/src/AnimSkeleton.h | 1 + 4 files changed, 85 insertions(+), 47 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index d7076a443e..4ec10b9faf 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -23,18 +23,18 @@ #include "CubicHermiteSpline.h" #include "AnimUtil.h" -static void lookupJointChainInfo(AnimInverseKinematics::JointChainInfo* jointChainInfos, size_t numJointChainInfos, +static void lookupJointChainInfo(const std::vector& jointChainInfoVec, int indexA, int indexB, - AnimInverseKinematics::JointChainInfo** jointChainInfoA, - AnimInverseKinematics::JointChainInfo** jointChainInfoB) { + const AnimInverseKinematics::JointChainInfo** jointChainInfoA, + const AnimInverseKinematics::JointChainInfo** jointChainInfoB) { *jointChainInfoA = nullptr; *jointChainInfoB = nullptr; - for (size_t i = 0; i < numJointChainInfos; i++) { - if (jointChainInfos[i].jointIndex == indexA) { - *jointChainInfoA = jointChainInfos + i; + for (size_t i = 0; i < jointChainInfoVec.size(); i++) { + if (jointChainInfoVec[i].jointIndex == indexA) { + *jointChainInfoA = &jointChainInfoVec[i]; } - if (jointChainInfos[i].jointIndex == indexB) { - *jointChainInfoB = jointChainInfos + i; + if (jointChainInfoVec[i].jointIndex == indexB) { + *jointChainInfoB = &jointChainInfoVec[i]; } if (*jointChainInfoA && *jointChainInfoB) { break; @@ -234,6 +234,17 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< accumulator.clearAndClean(); } + // initialize jointChainInfoVecVec, this holds the results for one iteration of each ik chain. + JointChainInfo defaultJointChainInfo = { glm::quat(), glm::vec3(), 0.0f, -1, false }; + std::vector> jointChainInfoVecVec(targets.size()); + for (size_t i = 0; i < targets.size(); i++) { + int chainDepth = _skeleton->getChainDepth(targets[i].getIndex()); + jointChainInfoVecVec[i].reserve(chainDepth); + for (size_t j = 0; j < chainDepth; j++) { + jointChainInfoVecVec[i].push_back(defaultJointChainInfo); + } + } + float maxError = FLT_MAX; int numLoops = 0; const int MAX_IK_LOOPS = 16; @@ -244,11 +255,25 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< bool debug = context.getEnableDebugDrawIKChains() && numLoops == MAX_IK_LOOPS; // solve all targets - for (auto& target: targets) { - if (target.getType() == IKTarget::Type::Spline) { - solveTargetWithSpline(context, target, absolutePoses, debug); + for (size_t i = 0; i < targets.size(); i++) { + if (targets[i].getType() == IKTarget::Type::Spline) { + solveTargetWithSpline(context, targets[i], absolutePoses, debug, jointChainInfoVecVec[i]); } else { - solveTargetWithCCD(context, target, absolutePoses, debug); + solveTargetWithCCD(context, targets[i], absolutePoses, debug, jointChainInfoVecVec[i]); + } + } + + // TODO: do smooth interpolation of joint chains here, if necessary. + + // copy jointChainInfoVecs into accumulators + for (size_t i = 0; i < targets.size(); i++) { + const std::vector& jointChainInfoVec = jointChainInfoVecVec[i]; + for (size_t j = 0; j < jointChainInfoVec.size(); j++) { + const JointChainInfo& info = jointChainInfoVec[j]; + if (info.jointIndex >= 0) { + _rotationAccumulators[info.jointIndex].add(info.relRot, info.weight); + _translationAccumulators[info.jointIndex].add(info.relTrans, info.weight); + } } } @@ -310,7 +335,8 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< } } -void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, bool debug) { +void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, + bool debug, std::vector& jointChainInfoVec) const { size_t chainDepth = 0; IKTarget::Type targetType = target.getType(); @@ -338,9 +364,6 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const // the tip's parent-relative as we proceed up the chain glm::quat tipParentOrientation = absolutePoses[pivotIndex].rot(); - const size_t MAX_CHAIN_DEPTH = 30; - JointChainInfo jointChainInfos[MAX_CHAIN_DEPTH]; - // NOTE: if this code is removed, the head will remain rigid, causing the spine/hips to thrust forward backward // as the head is nodded. if (targetType == IKTarget::Type::HmdHead || @@ -368,7 +391,7 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const } glm::vec3 tipRelativeTranslation = _relativePoses[target.getIndex()].trans(); - jointChainInfos[chainDepth] = { tipRelativeRotation, tipRelativeTranslation, target.getWeight(), tipIndex, constrained }; + jointChainInfoVec[chainDepth] = { tipRelativeRotation, tipRelativeTranslation, target.getWeight(), tipIndex, constrained }; } // cache tip absolute position @@ -379,7 +402,7 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const // descend toward root, pivoting each joint to get tip closer to target position while (pivotIndex != _hipsIndex && pivotsParentIndex != -1) { - assert(chainDepth < MAX_CHAIN_DEPTH); + assert(chainDepth < jointChainInfoVec.size()); // compute the two lines that should be aligned glm::vec3 jointPosition = absolutePoses[pivotIndex].trans(); @@ -480,7 +503,7 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const } glm::vec3 newTrans = _relativePoses[pivotIndex].trans(); - jointChainInfos[chainDepth] = { newRot, newTrans, target.getWeight(), pivotIndex, constrained }; + jointChainInfoVec[chainDepth] = { newRot, newTrans, target.getWeight(), pivotIndex, constrained }; // keep track of tip's new transform as we descend towards root tipPosition = jointPosition + deltaRotation * (tipPosition - jointPosition); @@ -502,24 +525,25 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const int baseParentJointIndex = _skeleton->getParentIndex(baseJointIndex); AnimPose topPose, midPose, basePose; int topChainIndex = -1, baseChainIndex = -1; + const size_t MAX_CHAIN_DEPTH = 30; AnimPose postAbsPoses[MAX_CHAIN_DEPTH]; AnimPose accum = absolutePoses[_hipsIndex]; AnimPose baseParentPose = absolutePoses[_hipsIndex]; for (int i = (int)chainDepth - 1; i >= 0; i--) { - accum = accum * AnimPose(glm::vec3(1.0f), jointChainInfos[i].relRot, jointChainInfos[i].relTrans); + accum = accum * AnimPose(glm::vec3(1.0f), jointChainInfoVec[i].relRot, jointChainInfoVec[i].relTrans); postAbsPoses[i] = accum; - if (jointChainInfos[i].jointIndex == topJointIndex) { + if (jointChainInfoVec[i].jointIndex == topJointIndex) { topChainIndex = i; topPose = accum; } - if (jointChainInfos[i].jointIndex == midJointIndex) { + if (jointChainInfoVec[i].jointIndex == midJointIndex) { midPose = accum; } - if (jointChainInfos[i].jointIndex == baseJointIndex) { + if (jointChainInfoVec[i].jointIndex == baseJointIndex) { baseChainIndex = i; basePose = accum; } - if (jointChainInfos[i].jointIndex == baseParentJointIndex) { + if (jointChainInfoVec[i].jointIndex == baseParentJointIndex) { baseParentPose = accum; } } @@ -599,21 +623,16 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const } glm::quat newBaseRelRot = glm::inverse(baseParentPose.rot()) * poleRot * basePose.rot(); - jointChainInfos[baseChainIndex].relRot = newBaseRelRot; + jointChainInfoVec[baseChainIndex].relRot = newBaseRelRot; glm::quat newTopRelRot = glm::inverse(midPose.rot()) * glm::inverse(poleRot) * topPose.rot(); - jointChainInfos[topChainIndex].relRot = newTopRelRot; + jointChainInfoVec[topChainIndex].relRot = newTopRelRot; } } } - for (size_t i = 0; i < chainDepth; i++) { - _rotationAccumulators[jointChainInfos[i].jointIndex].add(jointChainInfos[i].relRot, jointChainInfos[i].weight); - _translationAccumulators[jointChainInfos[i].jointIndex].add(jointChainInfos[i].relTrans, jointChainInfos[i].weight); - } - if (debug) { - debugDrawIKChain(jointChainInfos, chainDepth, context); + debugDrawIKChain(jointChainInfoVec, context); } } @@ -697,10 +716,9 @@ const std::vector* AnimInverseKinematics return nullptr; } -void AnimInverseKinematics::solveTargetWithSpline(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, bool debug) { - - const size_t MAX_CHAIN_DEPTH = 30; - JointChainInfo jointChainInfos[MAX_CHAIN_DEPTH]; +// AJT: TODO: make this const someday +void AnimInverseKinematics::solveTargetWithSpline(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, + bool debug, std::vector& jointChainInfoVec) { const int baseIndex = _hipsIndex; @@ -783,19 +801,22 @@ void AnimInverseKinematics::solveTargetWithSpline(const AnimContext& context, co } } - jointChainInfos[i] = { relPose.rot(), relPose.trans(), target.getWeight(), splineJointInfo.jointIndex, constrained }; + jointChainInfoVec[i] = { relPose.rot(), relPose.trans(), target.getWeight(), splineJointInfo.jointIndex, constrained }; parentAbsPose = flexedAbsPose; } } + // AJT: REMOVE + /* for (size_t i = 0; i < splineJointInfoVec->size(); i++) { _rotationAccumulators[jointChainInfos[i].jointIndex].add(jointChainInfos[i].relRot, jointChainInfos[i].weight); _translationAccumulators[jointChainInfos[i].jointIndex].add(jointChainInfos[i].relTrans, jointChainInfos[i].weight); } + */ if (debug) { - debugDrawIKChain(jointChainInfos, splineJointInfoVec->size(), context); + debugDrawIKChain(jointChainInfoVec, context); } } @@ -1495,12 +1516,12 @@ void AnimInverseKinematics::debugDrawRelativePoses(const AnimContext& context) c } } -void AnimInverseKinematics::debugDrawIKChain(JointChainInfo* jointChainInfos, size_t numJointChainInfos, const AnimContext& context) const { +void AnimInverseKinematics::debugDrawIKChain(const std::vector& jointChainInfoVec, const AnimContext& context) const { AnimPoseVec poses = _relativePoses; // copy debug joint rotations into the relative poses - for (size_t i = 0; i < numJointChainInfos; i++) { - const JointChainInfo& info = jointChainInfos[i]; + for (size_t i = 0; i < jointChainInfoVec.size(); i++) { + const JointChainInfo& info = jointChainInfoVec[i]; poses[info.jointIndex].rot() = info.relRot; poses[info.jointIndex].trans() = info.relTrans; } @@ -1519,9 +1540,9 @@ void AnimInverseKinematics::debugDrawIKChain(JointChainInfo* jointChainInfos, si // draw each pose for (int i = 0; i < (int)poses.size(); i++) { int parentIndex = _skeleton->getParentIndex(i); - JointChainInfo* jointInfo = nullptr; - JointChainInfo* parentJointInfo = nullptr; - lookupJointChainInfo(jointChainInfos, numJointChainInfos, i, parentIndex, &jointInfo, &parentJointInfo); + const JointChainInfo* jointInfo = nullptr; + const JointChainInfo* parentJointInfo = nullptr; + lookupJointChainInfo(jointChainInfoVec, i, parentIndex, &jointInfo, &parentJointInfo); if (jointInfo && parentJointInfo) { // transform local axes into world space. diff --git a/libraries/animation/src/AnimInverseKinematics.h b/libraries/animation/src/AnimInverseKinematics.h index d473ae3698..152034b596 100644 --- a/libraries/animation/src/AnimInverseKinematics.h +++ b/libraries/animation/src/AnimInverseKinematics.h @@ -73,10 +73,12 @@ public: protected: void computeTargets(const AnimVariantMap& animVars, std::vector& targets, const AnimPoseVec& underPoses); void solve(const AnimContext& context, const std::vector& targets); - void solveTargetWithCCD(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, bool debug); - void solveTargetWithSpline(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, bool debug); + void solveTargetWithCCD(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, + bool debug, std::vector& jointChainInfoVec) const; + void solveTargetWithSpline(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, + bool debug, std::vector& jointChainInfoVec); virtual void setSkeletonInternal(AnimSkeleton::ConstPointer skeleton) override; - void debugDrawIKChain(JointChainInfo* jointChainInfos, size_t numJointChainInfos, const AnimContext& context) const; + void debugDrawIKChain(const std::vector& jointChainInfoVec, const AnimContext& context) const; void debugDrawRelativePoses(const AnimContext& context) const; void debugDrawConstraints(const AnimContext& context) const; void debugDrawSpineSplines(const AnimContext& context, const std::vector& targets) const; diff --git a/libraries/animation/src/AnimSkeleton.cpp b/libraries/animation/src/AnimSkeleton.cpp index 062e016660..804ffb0583 100644 --- a/libraries/animation/src/AnimSkeleton.cpp +++ b/libraries/animation/src/AnimSkeleton.cpp @@ -42,6 +42,20 @@ int AnimSkeleton::getNumJoints() const { return _jointsSize; } +int AnimSkeleton::getChainDepth(int jointIndex) const { + if (jointIndex >= 0) { + int chainDepth = 0; + int index = jointIndex; + do { + chainDepth++; + index = _joints[index].parentIndex; + } while (index != -1); + return chainDepth; + } else { + return 0; + } +} + const AnimPose& AnimSkeleton::getAbsoluteBindPose(int jointIndex) const { return _absoluteBindPoses[jointIndex]; } diff --git a/libraries/animation/src/AnimSkeleton.h b/libraries/animation/src/AnimSkeleton.h index 6315f2d62b..99c9a148f7 100644 --- a/libraries/animation/src/AnimSkeleton.h +++ b/libraries/animation/src/AnimSkeleton.h @@ -28,6 +28,7 @@ public: int nameToJointIndex(const QString& jointName) const; const QString& getJointName(int jointIndex) const; int getNumJoints() const; + int getChainDepth(int jointIndex) const; // absolute pose, not relative to parent const AnimPose& getAbsoluteBindPose(int jointIndex) const; From 75e1a4a1e6f389da13861b2b2854f6e0e948efb4 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 28 Jun 2017 13:31:15 -0700 Subject: [PATCH 0691/1049] Refactor of JointChainInfo data structure --- .../animation/src/AnimInverseKinematics.cpp | 103 +++++++++--------- .../animation/src/AnimInverseKinematics.h | 20 ++-- 2 files changed, 62 insertions(+), 61 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index 4ec10b9faf..ea87fab4c0 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -23,20 +23,21 @@ #include "CubicHermiteSpline.h" #include "AnimUtil.h" -static void lookupJointChainInfo(const std::vector& jointChainInfoVec, +static void lookupJointInfo(const AnimInverseKinematics::JointChainInfo& jointChainInfo, int indexA, int indexB, - const AnimInverseKinematics::JointChainInfo** jointChainInfoA, - const AnimInverseKinematics::JointChainInfo** jointChainInfoB) { - *jointChainInfoA = nullptr; - *jointChainInfoB = nullptr; - for (size_t i = 0; i < jointChainInfoVec.size(); i++) { - if (jointChainInfoVec[i].jointIndex == indexA) { - *jointChainInfoA = &jointChainInfoVec[i]; + const AnimInverseKinematics::JointInfo** jointInfoA, + const AnimInverseKinematics::JointInfo** jointInfoB) { + *jointInfoA = nullptr; + *jointInfoB = nullptr; + for (size_t i = 0; i < jointChainInfo.jointInfoVec.size(); i++) { + const AnimInverseKinematics::JointInfo* jointInfo = &jointChainInfo.jointInfoVec[i]; + if (jointInfo->jointIndex == indexA) { + *jointInfoA = jointInfo; } - if (jointChainInfoVec[i].jointIndex == indexB) { - *jointChainInfoB = &jointChainInfoVec[i]; + if (jointInfo->jointIndex == indexB) { + *jointInfoB = jointInfo; } - if (*jointChainInfoA && *jointChainInfoB) { + if (*jointInfoA && *jointInfoB) { break; } } @@ -234,14 +235,15 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< accumulator.clearAndClean(); } - // initialize jointChainInfoVecVec, this holds the results for one iteration of each ik chain. - JointChainInfo defaultJointChainInfo = { glm::quat(), glm::vec3(), 0.0f, -1, false }; - std::vector> jointChainInfoVecVec(targets.size()); + // initialize a new jointChainInfoVec, this will holds the results for solving each ik chain. + JointInfo defaultJointInfo = { glm::quat(), glm::vec3(), -1, false }; + JointChainInfoVec jointChainInfoVec(targets.size()); for (size_t i = 0; i < targets.size(); i++) { int chainDepth = _skeleton->getChainDepth(targets[i].getIndex()); - jointChainInfoVecVec[i].reserve(chainDepth); + jointChainInfoVec[i].jointInfoVec.reserve(chainDepth); + jointChainInfoVec[i].target = targets[i]; for (size_t j = 0; j < chainDepth; j++) { - jointChainInfoVecVec[i].push_back(defaultJointChainInfo); + jointChainInfoVec[i].jointInfoVec.push_back(defaultJointInfo); } } @@ -257,9 +259,9 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< // solve all targets for (size_t i = 0; i < targets.size(); i++) { if (targets[i].getType() == IKTarget::Type::Spline) { - solveTargetWithSpline(context, targets[i], absolutePoses, debug, jointChainInfoVecVec[i]); + solveTargetWithSpline(context, targets[i], absolutePoses, debug, jointChainInfoVec[i]); } else { - solveTargetWithCCD(context, targets[i], absolutePoses, debug, jointChainInfoVecVec[i]); + solveTargetWithCCD(context, targets[i], absolutePoses, debug, jointChainInfoVec[i]); } } @@ -267,12 +269,13 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< // copy jointChainInfoVecs into accumulators for (size_t i = 0; i < targets.size(); i++) { - const std::vector& jointChainInfoVec = jointChainInfoVecVec[i]; - for (size_t j = 0; j < jointChainInfoVec.size(); j++) { - const JointChainInfo& info = jointChainInfoVec[j]; + const std::vector& jointInfoVec = jointChainInfoVec[i].jointInfoVec; + float weight = jointChainInfoVec[i].target.getWeight(); + for (size_t j = 0; j < jointInfoVec.size(); j++) { + const JointInfo& info = jointInfoVec[j]; if (info.jointIndex >= 0) { - _rotationAccumulators[info.jointIndex].add(info.relRot, info.weight); - _translationAccumulators[info.jointIndex].add(info.relTrans, info.weight); + _rotationAccumulators[info.jointIndex].add(info.rot, weight); + _translationAccumulators[info.jointIndex].add(info.trans, weight); } } } @@ -336,7 +339,7 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< } void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, - bool debug, std::vector& jointChainInfoVec) const { + bool debug, JointChainInfo& jointChainInfoOut) const { size_t chainDepth = 0; IKTarget::Type targetType = target.getType(); @@ -391,7 +394,7 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const } glm::vec3 tipRelativeTranslation = _relativePoses[target.getIndex()].trans(); - jointChainInfoVec[chainDepth] = { tipRelativeRotation, tipRelativeTranslation, target.getWeight(), tipIndex, constrained }; + jointChainInfoOut.jointInfoVec[chainDepth] = { tipRelativeRotation, tipRelativeTranslation, tipIndex, constrained }; } // cache tip absolute position @@ -402,7 +405,7 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const // descend toward root, pivoting each joint to get tip closer to target position while (pivotIndex != _hipsIndex && pivotsParentIndex != -1) { - assert(chainDepth < jointChainInfoVec.size()); + assert(chainDepth < jointChainInfoOut.jointInfoVec.size()); // compute the two lines that should be aligned glm::vec3 jointPosition = absolutePoses[pivotIndex].trans(); @@ -503,7 +506,7 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const } glm::vec3 newTrans = _relativePoses[pivotIndex].trans(); - jointChainInfoVec[chainDepth] = { newRot, newTrans, target.getWeight(), pivotIndex, constrained }; + jointChainInfoOut.jointInfoVec[chainDepth] = { newRot, newTrans, pivotIndex, constrained }; // keep track of tip's new transform as we descend towards root tipPosition = jointPosition + deltaRotation * (tipPosition - jointPosition); @@ -530,20 +533,20 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const AnimPose accum = absolutePoses[_hipsIndex]; AnimPose baseParentPose = absolutePoses[_hipsIndex]; for (int i = (int)chainDepth - 1; i >= 0; i--) { - accum = accum * AnimPose(glm::vec3(1.0f), jointChainInfoVec[i].relRot, jointChainInfoVec[i].relTrans); + accum = accum * AnimPose(glm::vec3(1.0f), jointChainInfoOut.jointInfoVec[i].rot, jointChainInfoOut.jointInfoVec[i].trans); postAbsPoses[i] = accum; - if (jointChainInfoVec[i].jointIndex == topJointIndex) { + if (jointChainInfoOut.jointInfoVec[i].jointIndex == topJointIndex) { topChainIndex = i; topPose = accum; } - if (jointChainInfoVec[i].jointIndex == midJointIndex) { + if (jointChainInfoOut.jointInfoVec[i].jointIndex == midJointIndex) { midPose = accum; } - if (jointChainInfoVec[i].jointIndex == baseJointIndex) { + if (jointChainInfoOut.jointInfoVec[i].jointIndex == baseJointIndex) { baseChainIndex = i; basePose = accum; } - if (jointChainInfoVec[i].jointIndex == baseParentJointIndex) { + if (jointChainInfoOut.jointInfoVec[i].jointIndex == baseParentJointIndex) { baseParentPose = accum; } } @@ -623,16 +626,16 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const } glm::quat newBaseRelRot = glm::inverse(baseParentPose.rot()) * poleRot * basePose.rot(); - jointChainInfoVec[baseChainIndex].relRot = newBaseRelRot; + jointChainInfoOut.jointInfoVec[baseChainIndex].rot = newBaseRelRot; glm::quat newTopRelRot = glm::inverse(midPose.rot()) * glm::inverse(poleRot) * topPose.rot(); - jointChainInfoVec[topChainIndex].relRot = newTopRelRot; + jointChainInfoOut.jointInfoVec[topChainIndex].rot = newTopRelRot; } } } if (debug) { - debugDrawIKChain(jointChainInfoVec, context); + debugDrawIKChain(jointChainInfoOut, context); } } @@ -718,7 +721,7 @@ const std::vector* AnimInverseKinematics // AJT: TODO: make this const someday void AnimInverseKinematics::solveTargetWithSpline(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, - bool debug, std::vector& jointChainInfoVec) { + bool debug, JointChainInfo& jointChainInfoOut) { const int baseIndex = _hipsIndex; @@ -801,22 +804,14 @@ void AnimInverseKinematics::solveTargetWithSpline(const AnimContext& context, co } } - jointChainInfoVec[i] = { relPose.rot(), relPose.trans(), target.getWeight(), splineJointInfo.jointIndex, constrained }; + jointChainInfoOut.jointInfoVec[i] = { relPose.rot(), relPose.trans(), splineJointInfo.jointIndex, constrained }; parentAbsPose = flexedAbsPose; } } - // AJT: REMOVE - /* - for (size_t i = 0; i < splineJointInfoVec->size(); i++) { - _rotationAccumulators[jointChainInfos[i].jointIndex].add(jointChainInfos[i].relRot, jointChainInfos[i].weight); - _translationAccumulators[jointChainInfos[i].jointIndex].add(jointChainInfos[i].relTrans, jointChainInfos[i].weight); - } - */ - if (debug) { - debugDrawIKChain(jointChainInfoVec, context); + debugDrawIKChain(jointChainInfoOut, context); } } @@ -1516,14 +1511,14 @@ void AnimInverseKinematics::debugDrawRelativePoses(const AnimContext& context) c } } -void AnimInverseKinematics::debugDrawIKChain(const std::vector& jointChainInfoVec, const AnimContext& context) const { +void AnimInverseKinematics::debugDrawIKChain(const JointChainInfo& jointChainInfo, const AnimContext& context) const { AnimPoseVec poses = _relativePoses; // copy debug joint rotations into the relative poses - for (size_t i = 0; i < jointChainInfoVec.size(); i++) { - const JointChainInfo& info = jointChainInfoVec[i]; - poses[info.jointIndex].rot() = info.relRot; - poses[info.jointIndex].trans() = info.relTrans; + for (size_t i = 0; i < jointChainInfo.jointInfoVec.size(); i++) { + const JointInfo& info = jointChainInfo.jointInfoVec[i]; + poses[info.jointIndex].rot() = info.rot; + poses[info.jointIndex].trans() = info.trans; } // convert relative poses to absolute @@ -1540,9 +1535,9 @@ void AnimInverseKinematics::debugDrawIKChain(const std::vector& // draw each pose for (int i = 0; i < (int)poses.size(); i++) { int parentIndex = _skeleton->getParentIndex(i); - const JointChainInfo* jointInfo = nullptr; - const JointChainInfo* parentJointInfo = nullptr; - lookupJointChainInfo(jointChainInfoVec, i, parentIndex, &jointInfo, &parentJointInfo); + const JointInfo* jointInfo = nullptr; + const JointInfo* parentJointInfo = nullptr; + lookupJointInfo(jointChainInfo, i, parentIndex, &jointInfo, &parentJointInfo); if (jointInfo && parentJointInfo) { // transform local axes into world space. diff --git a/libraries/animation/src/AnimInverseKinematics.h b/libraries/animation/src/AnimInverseKinematics.h index 152034b596..38288aa288 100644 --- a/libraries/animation/src/AnimInverseKinematics.h +++ b/libraries/animation/src/AnimInverseKinematics.h @@ -26,14 +26,20 @@ class RotationConstraint; class AnimInverseKinematics : public AnimNode { public: - struct JointChainInfo { - glm::quat relRot; - glm::vec3 relTrans; - float weight; + struct JointInfo { + glm::quat rot; + glm::vec3 trans; int jointIndex; bool constrained; }; + struct JointChainInfo { + std::vector jointInfoVec; + IKTarget target; + }; + + using JointChainInfoVec = std::vector; + explicit AnimInverseKinematics(const QString& id); virtual ~AnimInverseKinematics() override; @@ -74,11 +80,11 @@ protected: void computeTargets(const AnimVariantMap& animVars, std::vector& targets, const AnimPoseVec& underPoses); void solve(const AnimContext& context, const std::vector& targets); void solveTargetWithCCD(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, - bool debug, std::vector& jointChainInfoVec) const; + bool debug, JointChainInfo& jointChainInfoOut) const; void solveTargetWithSpline(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, - bool debug, std::vector& jointChainInfoVec); + bool debug, JointChainInfo& jointChainInfoOut); virtual void setSkeletonInternal(AnimSkeleton::ConstPointer skeleton) override; - void debugDrawIKChain(const std::vector& jointChainInfoVec, const AnimContext& context) const; + void debugDrawIKChain(const JointChainInfo& jointChainInfo, const AnimContext& context) const; void debugDrawRelativePoses(const AnimContext& context) const; void debugDrawConstraints(const AnimContext& context) const; void debugDrawSpineSplines(const AnimContext& context, const std::vector& targets) const; From 8d89ea75f5af6c867abb48c7fb71e37f5e40c691 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 28 Jun 2017 17:41:08 -0700 Subject: [PATCH 0692/1049] Initial commit --- interface/src/SecondaryCamera.cpp | 18 ++++++++++++++++-- interface/src/SecondaryCamera.h | 2 ++ scripts/system/spectatorCamera.js | 3 ++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/interface/src/SecondaryCamera.cpp b/interface/src/SecondaryCamera.cpp index 1fbb75cdad..3adae61aaa 100644 --- a/interface/src/SecondaryCamera.cpp +++ b/interface/src/SecondaryCamera.cpp @@ -12,6 +12,7 @@ #include "SecondaryCamera.h" #include #include +#include using RenderArgsPointer = std::shared_ptr; @@ -40,6 +41,7 @@ void SecondaryCameraRenderTaskConfig::resetSizeSpectatorCamera(int width, int he } class BeginSecondaryCameraFrame { // Changes renderContext for our framebuffer and view. + QUuid _attachedEntityId{}; glm::vec3 _position{}; glm::quat _orientation{}; float _vFoV{}; @@ -54,8 +56,20 @@ public: void configure(const Config& config) { if (config.enabled || config.alwaysEnabled) { - _position = config.position; - _orientation = config.orientation; + _attachedEntityId = config.attachedEntityId; + if (_attachedEntityId != QUuid()) { + auto entityScriptingInterface = DependencyManager::get(); + EntityPropertyFlags entityPropertyFlags; + entityPropertyFlags += PROP_POSITION; + entityPropertyFlags += PROP_ROTATION; + EntityItemProperties entityProperties = entityScriptingInterface->getEntityProperties(config.attachedEntityId, entityPropertyFlags); + + _position = entityProperties.getPosition(); + _orientation = entityProperties.getRotation(); + } else { + _position = config.position; + _orientation = config.orientation; + } _vFoV = config.vFoV; _nearClipPlaneDistance = config.nearClipPlaneDistance; _farClipPlaneDistance = config.farClipPlaneDistance; diff --git a/interface/src/SecondaryCamera.h b/interface/src/SecondaryCamera.h index 5ad19c9614..15e6f41ad2 100644 --- a/interface/src/SecondaryCamera.h +++ b/interface/src/SecondaryCamera.h @@ -30,12 +30,14 @@ public: class BeginSecondaryCameraFrameConfig : public render::Task::Config { // Exposes secondary camera parameters to JavaScript. Q_OBJECT + Q_PROPERTY(QUuid attachedEntityId MEMBER attachedEntityId NOTIFY dirty) // entity whose properties define camera position and orientation Q_PROPERTY(glm::vec3 position MEMBER position NOTIFY dirty) // of viewpoint to render from Q_PROPERTY(glm::quat orientation MEMBER orientation NOTIFY dirty) // of viewpoint to render from Q_PROPERTY(float vFoV MEMBER vFoV NOTIFY dirty) // Secondary camera's vertical field of view. In degrees. Q_PROPERTY(float nearClipPlaneDistance MEMBER nearClipPlaneDistance NOTIFY dirty) // Secondary camera's near clip plane distance. In meters. Q_PROPERTY(float farClipPlaneDistance MEMBER farClipPlaneDistance NOTIFY dirty) // Secondary camera's far clip plane distance. In meters. public: + QUuid attachedEntityId{}; glm::vec3 position{}; glm::quat orientation{}; float vFoV{ 45.0f }; diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 5154322daa..5b6c826e88 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -93,7 +93,7 @@ beginSpectatorFrameRenderConfig.nearClipPlaneDistance = nearClipPlaneDistance; beginSpectatorFrameRenderConfig.farClipPlaneDistance = farClipPlaneDistance; cameraRotation = MyAvatar.orientation, cameraPosition = inFrontOf(1, Vec3.sum(MyAvatar.position, { x: 0, y: 0.3, z: 0 })); - cameraUpdateInterval = Script.setInterval(updateRenderFromCamera, 11); // Update every 11ms (90.9hz) + //cameraUpdateInterval = Script.setInterval(updateRenderFromCamera, 11); // Update every 11ms (90.9hz) camera = Entities.addEntity({ "angularDamping": 1, "damping": 1, @@ -112,6 +112,7 @@ "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":true}}" }, true); + beginSpectatorFrameRenderConfig.attachedEntityId = camera; updateOverlay(); setDisplay(monitorShowsCameraView); } From 5ceb80b3e7b9bafebb70ea47a759d0e0b7e9b7f8 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 29 Jun 2017 09:58:37 -0700 Subject: [PATCH 0693/1049] It's working! --- interface/src/SecondaryCamera.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/interface/src/SecondaryCamera.cpp b/interface/src/SecondaryCamera.cpp index 3adae61aaa..178286f614 100644 --- a/interface/src/SecondaryCamera.cpp +++ b/interface/src/SecondaryCamera.cpp @@ -57,19 +57,8 @@ public: void configure(const Config& config) { if (config.enabled || config.alwaysEnabled) { _attachedEntityId = config.attachedEntityId; - if (_attachedEntityId != QUuid()) { - auto entityScriptingInterface = DependencyManager::get(); - EntityPropertyFlags entityPropertyFlags; - entityPropertyFlags += PROP_POSITION; - entityPropertyFlags += PROP_ROTATION; - EntityItemProperties entityProperties = entityScriptingInterface->getEntityProperties(config.attachedEntityId, entityPropertyFlags); - - _position = entityProperties.getPosition(); - _orientation = entityProperties.getRotation(); - } else { - _position = config.position; - _orientation = config.orientation; - } + _position = config.position; + _orientation = config.orientation; _vFoV = config.vFoV; _nearClipPlaneDistance = config.nearClipPlaneDistance; _farClipPlaneDistance = config.farClipPlaneDistance; @@ -97,8 +86,19 @@ public: }); auto srcViewFrustum = args->getViewFrustum(); - srcViewFrustum.setPosition(_position); - srcViewFrustum.setOrientation(_orientation); + if (_attachedEntityId != QUuid()) { + auto entityScriptingInterface = DependencyManager::get(); + EntityPropertyFlags entityPropertyFlags; + entityPropertyFlags += PROP_POSITION; + entityPropertyFlags += PROP_ROTATION; + EntityItemProperties entityProperties = entityScriptingInterface->getEntityProperties(_attachedEntityId, entityPropertyFlags); + + srcViewFrustum.setPosition(entityProperties.getPosition()); + srcViewFrustum.setOrientation(entityProperties.getRotation()); + } else { + srcViewFrustum.setPosition(_position); + srcViewFrustum.setOrientation(_orientation); + } srcViewFrustum.setProjection(glm::perspective(glm::radians(_vFoV), ((float)args->_viewport.z / (float)args->_viewport.w), _nearClipPlaneDistance, _farClipPlaneDistance)); // Without calculating the bound planes, the secondary camera will use the same culling frustum as the main camera, // which is not what we want here. From 57692d263d741335cb4540c98028daf0b0489678 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 29 Jun 2017 09:59:52 -0700 Subject: [PATCH 0694/1049] Remove dead code --- scripts/system/spectatorCamera.js | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 5b6c826e88..fdb187bd9c 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -71,8 +71,6 @@ // -viewFinderOverlayDim: The x, y, and z dimensions of the viewFinderOverlay. // -camera: The camera model which is grabbable. // -viewFinderOverlay: The preview of what the spectator camera is viewing, placed inside the glass pane. - // -cameraUpdateInterval: Used when setting Script.setInterval() - // -CAMERA_UPDATE_INTERVAL_MS: Defines the time between calls to updateRenderFromCamera() var vFoV = 45.0; var nearClipPlaneDistance = 0.1; var farClipPlaneDistance = 100.0; @@ -83,8 +81,6 @@ // draws textures, but should be looked into at some point. Also the z dimension shouldn't affect // the overlay since it is an Image3DOverlay so it is set to 0. var viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: 0 }; - var cameraUpdateInterval; - var CAMERA_UPDATE_INTERVAL_MS = 11; // Result of (1000 (ms/s)) / (90 (hz)) rounded down function spectatorCameraOn() { // Sets the special texture size based on the window it is displayed in, which doesn't include the menu bar spectatorFrameRenderConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); @@ -93,7 +89,6 @@ beginSpectatorFrameRenderConfig.nearClipPlaneDistance = nearClipPlaneDistance; beginSpectatorFrameRenderConfig.farClipPlaneDistance = farClipPlaneDistance; cameraRotation = MyAvatar.orientation, cameraPosition = inFrontOf(1, Vec3.sum(MyAvatar.position, { x: 0, y: 0.3, z: 0 })); - //cameraUpdateInterval = Script.setInterval(updateRenderFromCamera, 11); // Update every 11ms (90.9hz) camera = Entities.addEntity({ "angularDamping": 1, "damping": 1, @@ -124,10 +119,7 @@ // destroy the camera entity. function spectatorCameraOff() { spectatorFrameRenderConfig.enabled = beginSpectatorFrameRenderConfig.enabled = false; - if (cameraUpdateInterval) { - Script.clearInterval(cameraUpdateInterval); - cameraUpdateInterval = false; - } + beginSpectatorFrameRenderConfig.attachedEntityId = false; if (camera) { Entities.deleteEntity(camera); } @@ -225,8 +217,8 @@ } function setDisplay(showCameraView) { - // It would be fancy if (showCameraView && !cameraUpdateInterval) would show instructions, but that's out of scope for now. - var url = (showCameraView && cameraUpdateInterval) ? "resource://spectatorCameraFrame" : ""; + // It would be fancy if (showCameraView) would show instructions, but that's out of scope for now. + var url = showCameraView ? "resource://spectatorCameraFrame" : ""; Window.setDisplayTexture(url); } const MONITOR_SHOWS_CAMERA_VIEW_DEFAULT = false; From f765b4136dc7645238ebe8ea8b59f208effdf638 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 29 Jun 2017 13:25:37 -0700 Subject: [PATCH 0695/1049] Cleanup --- interface/src/SecondaryCamera.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/interface/src/SecondaryCamera.cpp b/interface/src/SecondaryCamera.cpp index 178286f614..3f8c26c2e3 100644 --- a/interface/src/SecondaryCamera.cpp +++ b/interface/src/SecondaryCamera.cpp @@ -47,11 +47,16 @@ class BeginSecondaryCameraFrame { // Changes renderContext for our framebuffer float _vFoV{}; float _nearClipPlaneDistance{}; float _farClipPlaneDistance{}; + EntityPropertyFlags _attachedEntityPropertyFlags; + QSharedPointer _entityScriptingInterface; public: using Config = BeginSecondaryCameraFrameConfig; using JobModel = render::Job::ModelO; BeginSecondaryCameraFrame() { _cachedArgsPointer = std::make_shared(_cachedArgs); + _entityScriptingInterface = DependencyManager::get(); + _attachedEntityPropertyFlags += PROP_POSITION; + _attachedEntityPropertyFlags += PROP_ROTATION; } void configure(const Config& config) { @@ -87,12 +92,7 @@ public: auto srcViewFrustum = args->getViewFrustum(); if (_attachedEntityId != QUuid()) { - auto entityScriptingInterface = DependencyManager::get(); - EntityPropertyFlags entityPropertyFlags; - entityPropertyFlags += PROP_POSITION; - entityPropertyFlags += PROP_ROTATION; - EntityItemProperties entityProperties = entityScriptingInterface->getEntityProperties(_attachedEntityId, entityPropertyFlags); - + EntityItemProperties entityProperties = _entityScriptingInterface->getEntityProperties(_attachedEntityId, _attachedEntityPropertyFlags); srcViewFrustum.setPosition(entityProperties.getPosition()); srcViewFrustum.setOrientation(entityProperties.getRotation()); } else { From 82597ac4243df799eec18c095474f4501f9ef6d0 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Fri, 30 Jun 2017 10:22:05 -0700 Subject: [PATCH 0696/1049] Update snapshot.js --- scripts/system/snapshot.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index e033ba9f44..c2dc682a97 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -504,15 +504,9 @@ function takeSnapshot() { Window.takeSnapshot(false, includeAnimated, 1.91); }, SNAPSHOT_DELAY); }, FINISH_SOUND_DELAY); -UserActivityLogger.logAction("snapshot_taken", logDetails()); + UserActivityLogger.logAction("snaphshot_taken", { location: location.href }); } - function logDetails() { - return { - current_domain: location.href - }; - } - function isDomainOpen(id, callback) { print("Checking open status of domain with ID:", id); var status = false; From 9c37b28ba0b96430ec7f14019da18363ed4ccda6 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 30 Jun 2017 10:40:17 -0700 Subject: [PATCH 0697/1049] Remove tool window logic --- libraries/ui/src/QmlWebWindowClass.cpp | 2 +- libraries/ui/src/QmlWindowClass.cpp | 26 ++++++++++++++++++++------ libraries/ui/src/QmlWindowClass.h | 5 +++++ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/libraries/ui/src/QmlWebWindowClass.cpp b/libraries/ui/src/QmlWebWindowClass.cpp index a370d7999b..13fc9cc018 100644 --- a/libraries/ui/src/QmlWebWindowClass.cpp +++ b/libraries/ui/src/QmlWebWindowClass.cpp @@ -37,7 +37,7 @@ QScriptValue QmlWebWindowClass::constructor(QScriptContext* context, QScriptEngi QString QmlWebWindowClass::getURL() { if (QThread::currentThread() != thread()) { - QString result = false; + QString result; hifi::qt::blockingInvokeMethod(this, "getURL", Q_RETURN_ARG(QString, result)); return result; } diff --git a/libraries/ui/src/QmlWindowClass.cpp b/libraries/ui/src/QmlWindowClass.cpp index e773ea0c5d..8d93af15f5 100644 --- a/libraries/ui/src/QmlWindowClass.cpp +++ b/libraries/ui/src/QmlWindowClass.cpp @@ -93,9 +93,10 @@ QmlWindowClass::QmlWindowClass() { void QmlWindowClass::initQml(QVariantMap properties) { auto offscreenUi = DependencyManager::get(); - _toolWindow = properties.contains(TOOLWINDOW_PROPERTY) && properties[TOOLWINDOW_PROPERTY].toBool(); _source = properties[SOURCE_PROPERTY].toString(); +#if QML_TOOL_WINDOW + _toolWindow = properties.contains(TOOLWINDOW_PROPERTY) && properties[TOOLWINDOW_PROPERTY].toBool(); if (_toolWindow) { // Build the event bridge and wrapper on the main thread _qmlWindow = offscreenUi->getToolWindow(); @@ -106,6 +107,7 @@ void QmlWindowClass::initQml(QVariantMap properties) { Q_ARG(QVariant, QVariant::fromValue(properties))); Q_ASSERT(invokeResult); } else { +#endif // Build the event bridge and wrapper on the main thread offscreenUi->loadInNewContext(qmlSource(), [&](QQmlContext* context, QObject* object) { _qmlWindow = object; @@ -136,7 +138,9 @@ void QmlWindowClass::initQml(QVariantMap properties) { connect(_qmlWindow, SIGNAL(moved(QVector2D)), this, SLOT(hasMoved(QVector2D)), Qt::QueuedConnection); connect(_qmlWindow, SIGNAL(windowClosed()), this, SLOT(hasClosed()), Qt::QueuedConnection); }); +#if QML_TOOL_WINDOW } +#endif Q_ASSERT(_qmlWindow); Q_ASSERT(dynamic_cast(_qmlWindow.data())); } @@ -210,9 +214,11 @@ QmlWindowClass::~QmlWindowClass() { } QQuickItem* QmlWindowClass::asQuickItem() const { +#if QML_TOOL_WINDOW if (_toolWindow) { return DependencyManager::get()->getToolWindow(); } +#endif return _qmlWindow.isNull() ? nullptr : dynamic_cast(_qmlWindow.data()); } @@ -223,13 +229,15 @@ void QmlWindowClass::setVisible(bool visible) { } QQuickItem* targetWindow = asQuickItem(); +#if QML_TOOL_WINDOW if (_toolWindow) { // For tool window tabs we special case visibility as a function call on the tab parent // The tool window itself has special logic based on whether any tabs are visible QMetaObject::invokeMethod(targetWindow, "showTabForUrl", Qt::QueuedConnection, Q_ARG(QVariant, _source), Q_ARG(QVariant, visible)); - } else { - targetWindow->setProperty(OFFSCREEN_VISIBILITY_PROPERTY, visible); - } + return; + } +#endif + targetWindow->setProperty(OFFSCREEN_VISIBILITY_PROPERTY, visible); } bool QmlWindowClass::isVisible() { @@ -244,10 +252,12 @@ bool QmlWindowClass::isVisible() { return false; } +#if QML_TOOL_WINDOW if (_toolWindow) { return dynamic_cast(_qmlWindow.data())->isEnabled(); } - +#endif + return asQuickItem()->isVisible(); } @@ -332,6 +342,7 @@ void QmlWindowClass::close() { return; } +#if QML_TOOL_WINDOW if (_toolWindow) { auto offscreenUi = DependencyManager::get(); auto toolWindow = offscreenUi->getToolWindow(); @@ -339,7 +350,10 @@ void QmlWindowClass::close() { Q_ARG(QVariant, _source)); Q_ASSERT(invokeResult); return; - } else if (_qmlWindow) { + } +#endif + + if (_qmlWindow) { _qmlWindow->deleteLater(); } _qmlWindow = nullptr; diff --git a/libraries/ui/src/QmlWindowClass.h b/libraries/ui/src/QmlWindowClass.h index d3e1912d45..e01bc8f14b 100644 --- a/libraries/ui/src/QmlWindowClass.h +++ b/libraries/ui/src/QmlWindowClass.h @@ -19,6 +19,8 @@ class QScriptEngine; class QScriptContext; +#define QML_TOOL_WINDOW 0 + // FIXME refactor this class to be a QQuickItem derived type and eliminate the needless wrapping class QmlWindowClass : public QObject { Q_OBJECT @@ -85,9 +87,12 @@ protected: virtual QString qmlSource() const { return "QmlWindow.qml"; } +#if QML_TOOL_WINDOW // FIXME needs to be initialized in the ctor once we have support // for tool window panes in QML bool _toolWindow { false }; +#endif + QPointer _qmlWindow; QString _source; From 3e1aee4d8a6e9876f2ca0a08d4ff5d0b451d6448 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 30 Jun 2017 19:07:34 +0100 Subject: [PATCH 0698/1049] saving work --- plugins/openvr/src/ViveControllerManager.cpp | 13 +++++++++++++ plugins/openvr/src/ViveControllerManager.h | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index 648373ccc2..40e33a26dd 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include #include @@ -121,6 +123,13 @@ static QString deviceTrackingResultToString(vr::ETrackingResult trackingResult) return result; } +bool ViveControllerManager::isDesktopMode() { + if (_container) { + return !_container->getActiveDisplayPlugin()->isHmd(); + } + return false; +} + void ViveControllerManager::calibrate() { if (isSupported()) { _inputDevice->calibrateNextFrame(); @@ -218,6 +227,10 @@ void ViveControllerManager::pluginUpdate(float deltaTime, const controller::Inpu return; } + if (isDesktopMode()) { + qDebug() << "In desktop mode"; + } + auto userInputMapper = DependencyManager::get(); handleOpenVrEvents(); if (openVrQuitRequested()) { diff --git a/plugins/openvr/src/ViveControllerManager.h b/plugins/openvr/src/ViveControllerManager.h index 0b0406bb60..f1fcb8403e 100644 --- a/plugins/openvr/src/ViveControllerManager.h +++ b/plugins/openvr/src/ViveControllerManager.h @@ -189,7 +189,7 @@ private: }; void renderHand(const controller::Pose& pose, gpu::Batch& batch, int sign); - + bool isDesktopMode(); bool _registeredWithInputMapper { false }; bool _modelLoaded { false }; model::Geometry _modelGeometry; From a749fa19adb3deced0945199505382bfc5f5a67e Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 30 Jun 2017 19:14:22 +0100 Subject: [PATCH 0699/1049] made requested changes --- plugins/openvr/src/ViveControllerManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index ca211a9cfe..825d709b2a 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -374,8 +374,8 @@ QJsonObject ViveControllerManager::InputDevice::configurationSettings() { Locker locker(_lock); QJsonObject configurationSettings; configurationSettings["trackerConfiguration"] = configToString(_preferedConfig); - configurationSettings["HMDHead"] = (_headConfig == HeadConfig::HMD) ? true : false; - configurationSettings["handController"] = (_handConfig == HandConfig::HandController) ? true : false; + configurationSettings["HMDHead"] = (_headConfig == HeadConfig::HMD); + configurationSettings["handController"] = (_handConfig == HandConfig::HandController); configurationSettings["puckCount"] = (int)_validTrackedObjects.size(); return configurationSettings; } From f78903eead17a05e6e84dc3a6f38f5204cd29427 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 30 Jun 2017 11:31:48 -0700 Subject: [PATCH 0700/1049] Clarify setDisplayTexture cases, also fixing crash bug --- scripts/system/spectatorCamera.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 5154322daa..cd4b54730b 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -223,9 +223,19 @@ } } + // Function Name: setDisplay() + // + // Description: + // -There are two bool variables that determine what the "url" argument to "setDisplayTexture(url)" should be: + // Camera on/off switch, and the "Monitor Shows" on/off switch. + // This results in four possible cases for the argument. Those four cases are: + // 1. Camera is off; "Monitor Shows" is "HMD Preview": "url" is "" + // 2. Camera is off; "Monitor Shows" is "Camera View": "url" is "" + // 3. Camera is on; "Monitor Shows" is "HMD Preview": "url" is "" + // 4. Camera is on; "Monitor Shows" is "Camera View": "url" is "resource://spectatorCameraFrame" function setDisplay(showCameraView) { // It would be fancy if (showCameraView && !cameraUpdateInterval) would show instructions, but that's out of scope for now. - var url = (showCameraView && cameraUpdateInterval) ? "resource://spectatorCameraFrame" : ""; + var url = (camera && showCameraView && cameraUpdateInterval) ? "resource://spectatorCameraFrame" : ""; Window.setDisplayTexture(url); } const MONITOR_SHOWS_CAMERA_VIEW_DEFAULT = false; From 6fc82bb351626d901aa060009dafc67d25c15683 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 30 Jun 2017 11:34:54 -0700 Subject: [PATCH 0701/1049] Switch to preprocessor macro for blocking invokes to capture function information --- assignment-client/src/AssignmentClient.cpp | 2 +- .../src/avatars/ScriptableAvatar.cpp | 2 +- interface/src/Application.cpp | 2 +- interface/src/avatar/AvatarManager.cpp | 2 +- interface/src/avatar/MyAvatar.cpp | 8 ++--- .../scripting/ClipboardScriptingInterface.cpp | 8 ++--- .../src/scripting/HMDScriptingInterface.cpp | 4 +-- .../src/scripting/MenuScriptingInterface.cpp | 10 +++--- .../src/scripting/TestScriptingInterface.cpp | 2 +- .../scripting/WindowScriptingInterface.cpp | 2 +- interface/src/ui/JSConsole.cpp | 2 +- interface/src/ui/overlays/Overlays.cpp | 32 +++++++++---------- libraries/animation/src/AnimationCache.cpp | 6 ++-- libraries/audio/src/SoundCache.cpp | 2 +- .../src/avatars-renderer/Avatar.cpp | 10 +++--- libraries/avatars/src/AvatarData.cpp | 26 +++++++-------- .../src/display-plugins/CompositorHelper.cpp | 2 +- .../src/EntityTreeRenderer.cpp | 4 +-- .../entities/src/EntityScriptingInterface.cpp | 4 +-- libraries/networking/src/NodeList.cpp | 2 +- libraries/networking/src/ResourceCache.cpp | 4 +-- libraries/networking/src/udt/Socket.cpp | 2 +- .../src/plugins/InputConfiguration.cpp | 14 ++++---- .../recording/src/recording/ClipCache.cpp | 2 +- libraries/render-utils/src/Model.cpp | 2 +- libraries/render/src/task/Config.cpp | 2 +- .../src/AudioScriptingInterface.cpp | 2 +- .../src/RecordingScriptingInterface.cpp | 16 +++++----- libraries/script-engine/src/ScriptEngine.cpp | 2 +- libraries/script-engine/src/ScriptEngines.cpp | 2 +- libraries/shared/src/shared/QtHelpers.cpp | 7 ++-- libraries/shared/src/shared/QtHelpers.h | 5 +++ libraries/ui/src/OffscreenUi.cpp | 14 ++++---- libraries/ui/src/QmlWebWindowClass.cpp | 2 +- libraries/ui/src/QmlWindowClass.cpp | 10 +++--- libraries/ui/src/ui/Menu.cpp | 2 +- libraries/ui/src/ui/QmlWrapper.cpp | 4 +-- .../ui/src/ui/TabletScriptingInterface.cpp | 14 ++++---- .../ui/src/ui/ToolbarScriptingInterface.cpp | 4 +-- 39 files changed, 124 insertions(+), 118 deletions(-) diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 2db1fba952..efced972a0 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -142,7 +142,7 @@ void AssignmentClient::stopAssignmentClient() { QThread* currentAssignmentThread = _currentAssignment->thread(); // ask the current assignment to stop - hifi::qt::blockingInvokeMethod(_currentAssignment, "stop"); + BLOCKING_INVOKE_METHOD(_currentAssignment, "stop"); // ask the current assignment to delete itself on its thread _currentAssignment->deleteLater(); diff --git a/assignment-client/src/avatars/ScriptableAvatar.cpp b/assignment-client/src/avatars/ScriptableAvatar.cpp index 4e2836119e..6443e7bf4b 100644 --- a/assignment-client/src/avatars/ScriptableAvatar.cpp +++ b/assignment-client/src/avatars/ScriptableAvatar.cpp @@ -50,7 +50,7 @@ void ScriptableAvatar::stopAnimation() { AnimationDetails ScriptableAvatar::getAnimationDetails() { if (QThread::currentThread() != thread()) { AnimationDetails result; - hifi::qt::blockingInvokeMethod(this, "getAnimationDetails", + BLOCKING_INVOKE_METHOD(this, "getAnimationDetails", Q_RETURN_ARG(AnimationDetails, result)); return result; } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 2b6c6033a2..d5b6f06d45 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1656,7 +1656,7 @@ QString Application::getUserAgent() { if (QThread::currentThread() != thread()) { QString userAgent; - hifi::qt::blockingInvokeMethod(this, "getUserAgent", Q_RETURN_ARG(QString, userAgent)); + BLOCKING_INVOKE_METHOD(this, "getUserAgent", Q_RETURN_ARG(QString, userAgent)); return userAgent; } diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index abdcd48b42..c46d61cf68 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -483,7 +483,7 @@ RayToAvatarIntersectionResult AvatarManager::findRayIntersection(const PickRay& const QScriptValue& avatarIdsToDiscard) { RayToAvatarIntersectionResult result; if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(const_cast(this), "findRayIntersection", + BLOCKING_INVOKE_METHOD(const_cast(this), "findRayIntersection", Q_RETURN_ARG(RayToAvatarIntersectionResult, result), Q_ARG(const PickRay&, ray), Q_ARG(const QScriptValue&, avatarIdsToInclude), diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 404f8681f2..230ea7616a 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -898,7 +898,7 @@ void MyAvatar::restoreAnimation() { QStringList MyAvatar::getAnimationRoles() { if (QThread::currentThread() != thread()) { QStringList result; - hifi::qt::blockingInvokeMethod(this, "getAnimationRoles", Q_RETURN_ARG(QStringList, result)); + BLOCKING_INVOKE_METHOD(this, "getAnimationRoles", Q_RETURN_ARG(QStringList, result)); return result; } return _skeletonModel->getRig().getAnimationRoles(); @@ -1369,7 +1369,7 @@ void MyAvatar::resetFullAvatarURL() { void MyAvatar::useFullAvatarURL(const QUrl& fullAvatarURL, const QString& modelName) { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "useFullAvatarURL", + BLOCKING_INVOKE_METHOD(this, "useFullAvatarURL", Q_ARG(const QUrl&, fullAvatarURL), Q_ARG(const QString&, modelName)); return; @@ -1395,7 +1395,7 @@ void MyAvatar::useFullAvatarURL(const QUrl& fullAvatarURL, const QString& modelN void MyAvatar::setAttachmentData(const QVector& attachmentData) { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "setAttachmentData", + BLOCKING_INVOKE_METHOD(this, "setAttachmentData", Q_ARG(const QVector, attachmentData)); return; } @@ -2359,7 +2359,7 @@ bool MyAvatar::safeLanding(const glm::vec3& position) { if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(this, "safeLanding", Q_RETURN_ARG(bool, result), Q_ARG(const glm::vec3&, position)); + BLOCKING_INVOKE_METHOD(this, "safeLanding", Q_RETURN_ARG(bool, result), Q_ARG(const glm::vec3&, position)); return result; } glm::vec3 better; diff --git a/interface/src/scripting/ClipboardScriptingInterface.cpp b/interface/src/scripting/ClipboardScriptingInterface.cpp index b443ba1ef0..f8db061299 100644 --- a/interface/src/scripting/ClipboardScriptingInterface.cpp +++ b/interface/src/scripting/ClipboardScriptingInterface.cpp @@ -27,7 +27,7 @@ float ClipboardScriptingInterface::getClipboardContentsLargestDimension() { bool ClipboardScriptingInterface::exportEntities(const QString& filename, const QVector& entityIDs) { bool retVal; - hifi::qt::blockingInvokeMethod(qApp, "exportEntities", + BLOCKING_INVOKE_METHOD(qApp, "exportEntities", Q_RETURN_ARG(bool, retVal), Q_ARG(const QString&, filename), Q_ARG(const QVector&, entityIDs)); @@ -36,7 +36,7 @@ bool ClipboardScriptingInterface::exportEntities(const QString& filename, const bool ClipboardScriptingInterface::exportEntities(const QString& filename, float x, float y, float z, float s) { bool retVal; - hifi::qt::blockingInvokeMethod(qApp, "exportEntities", + BLOCKING_INVOKE_METHOD(qApp, "exportEntities", Q_RETURN_ARG(bool, retVal), Q_ARG(const QString&, filename), Q_ARG(float, x), @@ -48,7 +48,7 @@ bool ClipboardScriptingInterface::exportEntities(const QString& filename, float bool ClipboardScriptingInterface::importEntities(const QString& filename) { bool retVal; - hifi::qt::blockingInvokeMethod(qApp, "importEntities", + BLOCKING_INVOKE_METHOD(qApp, "importEntities", Q_RETURN_ARG(bool, retVal), Q_ARG(const QString&, filename)); return retVal; @@ -56,7 +56,7 @@ bool ClipboardScriptingInterface::importEntities(const QString& filename) { QVector ClipboardScriptingInterface::pasteEntities(glm::vec3 position) { QVector retVal; - hifi::qt::blockingInvokeMethod(qApp, "pasteEntities", + BLOCKING_INVOKE_METHOD(qApp, "pasteEntities", Q_RETURN_ARG(QVector, retVal), Q_ARG(float, position.x), Q_ARG(float, position.y), diff --git a/interface/src/scripting/HMDScriptingInterface.cpp b/interface/src/scripting/HMDScriptingInterface.cpp index 81a806b8ab..35f2e2aa86 100644 --- a/interface/src/scripting/HMDScriptingInterface.cpp +++ b/interface/src/scripting/HMDScriptingInterface.cpp @@ -156,7 +156,7 @@ QString HMDScriptingInterface::preferredAudioOutput() const { bool HMDScriptingInterface::setHandLasers(int hands, bool enabled, const glm::vec4& color, const glm::vec3& direction) { if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(this, "setHandLasers", Q_RETURN_ARG(bool, result), + BLOCKING_INVOKE_METHOD(this, "setHandLasers", Q_RETURN_ARG(bool, result), Q_ARG(int, hands), Q_ARG(bool, enabled), Q_ARG(glm::vec4, color), Q_ARG(glm::vec3, direction)); return result; } @@ -171,7 +171,7 @@ bool HMDScriptingInterface::setHandLasers(int hands, bool enabled, const glm::ve bool HMDScriptingInterface::setExtraLaser(const glm::vec3& worldStart, bool enabled, const glm::vec4& color, const glm::vec3& direction) { if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(this, "setExtraLaser", Q_RETURN_ARG(bool, result), + BLOCKING_INVOKE_METHOD(this, "setExtraLaser", Q_RETURN_ARG(bool, result), Q_ARG(glm::vec3, worldStart), Q_ARG(bool, enabled), Q_ARG(glm::vec4, color), Q_ARG(glm::vec3, direction)); return result; } diff --git a/interface/src/scripting/MenuScriptingInterface.cpp b/interface/src/scripting/MenuScriptingInterface.cpp index b3829ecb3b..d9372978e8 100644 --- a/interface/src/scripting/MenuScriptingInterface.cpp +++ b/interface/src/scripting/MenuScriptingInterface.cpp @@ -44,7 +44,7 @@ bool MenuScriptingInterface::menuExists(const QString& menu) { return Menu::getInstance()->menuExists(menu); } bool result; - hifi::qt::blockingInvokeMethod(Menu::getInstance(), "menuExists", + BLOCKING_INVOKE_METHOD(Menu::getInstance(), "menuExists", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, menu)); return result; @@ -87,7 +87,7 @@ bool MenuScriptingInterface::menuItemExists(const QString& menu, const QString& return Menu::getInstance()->menuItemExists(menu, menuitem); } bool result; - hifi::qt::blockingInvokeMethod(Menu::getInstance(), "menuItemExists", + BLOCKING_INVOKE_METHOD(Menu::getInstance(), "menuItemExists", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, menu), Q_ARG(const QString&, menuitem)); @@ -115,7 +115,7 @@ bool MenuScriptingInterface::isOptionChecked(const QString& menuOption) { return Menu::getInstance()->isOptionChecked(menuOption); } bool result; - hifi::qt::blockingInvokeMethod(Menu::getInstance(), "isOptionChecked", + BLOCKING_INVOKE_METHOD(Menu::getInstance(), "isOptionChecked", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, menuOption)); return result; @@ -132,7 +132,7 @@ bool MenuScriptingInterface::isMenuEnabled(const QString& menuOption) { return Menu::getInstance()->isOptionChecked(menuOption); } bool result; - hifi::qt::blockingInvokeMethod(Menu::getInstance(), "isMenuEnabled", + BLOCKING_INVOKE_METHOD(Menu::getInstance(), "isMenuEnabled", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, menuOption)); return result; @@ -158,7 +158,7 @@ bool MenuScriptingInterface::isInfoViewVisible(const QString& path) { } bool result; - hifi::qt::blockingInvokeMethod(Menu::getInstance(), "isInfoViewVisible", + BLOCKING_INVOKE_METHOD(Menu::getInstance(), "isInfoViewVisible", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, path)); return result; } diff --git a/interface/src/scripting/TestScriptingInterface.cpp b/interface/src/scripting/TestScriptingInterface.cpp index 4d3e3b94a1..d4b4ba1480 100644 --- a/interface/src/scripting/TestScriptingInterface.cpp +++ b/interface/src/scripting/TestScriptingInterface.cpp @@ -60,7 +60,7 @@ void TestScriptingInterface::waitIdle() { bool TestScriptingInterface::loadTestScene(QString scene) { if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(this, "loadTestScene", Q_RETURN_ARG(bool, result), Q_ARG(QString, scene)); + BLOCKING_INVOKE_METHOD(this, "loadTestScene", Q_RETURN_ARG(bool, result), Q_ARG(QString, scene)); return result; } diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index a5d8544658..84f4cbbbd8 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -317,7 +317,7 @@ bool WindowScriptingInterface::isPhysicsEnabled() { int WindowScriptingInterface::openMessageBox(QString title, QString text, int buttons, int defaultButton) { if (QThread::currentThread() != thread()) { int result; - hifi::qt::blockingInvokeMethod(this, "openMessageBox", + BLOCKING_INVOKE_METHOD(this, "openMessageBox", Q_RETURN_ARG(int, result), Q_ARG(QString, title), Q_ARG(QString, text), diff --git a/interface/src/ui/JSConsole.cpp b/interface/src/ui/JSConsole.cpp index 4b03d1b575..443f11fb23 100644 --- a/interface/src/ui/JSConsole.cpp +++ b/interface/src/ui/JSConsole.cpp @@ -116,7 +116,7 @@ void JSConsole::executeCommand(const QString& command) { QScriptValue JSConsole::executeCommandInWatcher(const QString& command) { QScriptValue result; - hifi::qt::blockingInvokeMethod(_scriptEngine, "evaluate", + BLOCKING_INVOKE_METHOD(_scriptEngine, "evaluate", Q_RETURN_ARG(QScriptValue, result), Q_ARG(const QString&, command), Q_ARG(const QString&, _consoleFileName)); diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index c27800a5bb..0c73f1fa70 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -145,7 +145,7 @@ Overlay::Pointer Overlays::getOverlay(OverlayID id) const { OverlayID Overlays::addOverlay(const QString& type, const QVariant& properties) { if (QThread::currentThread() != thread()) { OverlayID result; - hifi::qt::blockingInvokeMethod(this, "addOverlay", Q_RETURN_ARG(OverlayID, result), Q_ARG(QString, type), Q_ARG(QVariant, properties)); + BLOCKING_INVOKE_METHOD(this, "addOverlay", Q_RETURN_ARG(OverlayID, result), Q_ARG(QString, type), Q_ARG(QVariant, properties)); return result; } @@ -209,7 +209,7 @@ OverlayID Overlays::addOverlay(const Overlay::Pointer& overlay) { OverlayID Overlays::cloneOverlay(OverlayID id) { if (QThread::currentThread() != thread()) { OverlayID result; - hifi::qt::blockingInvokeMethod(this, "cloneOverlay", Q_RETURN_ARG(OverlayID, result), Q_ARG(OverlayID, id)); + BLOCKING_INVOKE_METHOD(this, "cloneOverlay", Q_RETURN_ARG(OverlayID, result), Q_ARG(OverlayID, id)); return result; } @@ -232,7 +232,7 @@ OverlayID Overlays::cloneOverlay(OverlayID id) { bool Overlays::editOverlay(OverlayID id, const QVariant& properties) { if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(this, "editOverlay", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id), Q_ARG(QVariant, properties)); + BLOCKING_INVOKE_METHOD(this, "editOverlay", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id), Q_ARG(QVariant, properties)); return result; } @@ -247,7 +247,7 @@ bool Overlays::editOverlay(OverlayID id, const QVariant& properties) { bool Overlays::editOverlays(const QVariant& propertiesById) { if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(this, "editOverlays", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, propertiesById)); + BLOCKING_INVOKE_METHOD(this, "editOverlays", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, propertiesById)); return result; } @@ -299,7 +299,7 @@ void Overlays::deleteOverlay(OverlayID id) { QString Overlays::getOverlayType(OverlayID overlayId) { if (QThread::currentThread() != thread()) { QString result; - hifi::qt::blockingInvokeMethod(this, "getOverlayType", Q_RETURN_ARG(QString, result), Q_ARG(OverlayID, overlayId)); + BLOCKING_INVOKE_METHOD(this, "getOverlayType", Q_RETURN_ARG(QString, result), Q_ARG(OverlayID, overlayId)); return result; } @@ -313,7 +313,7 @@ QString Overlays::getOverlayType(OverlayID overlayId) { QObject* Overlays::getOverlayObject(OverlayID id) { if (QThread::currentThread() != thread()) { QObject* result; - hifi::qt::blockingInvokeMethod(this, "getOverlayObject", Q_RETURN_ARG(QObject*, result), Q_ARG(OverlayID, id)); + BLOCKING_INVOKE_METHOD(this, "getOverlayObject", Q_RETURN_ARG(QObject*, result), Q_ARG(OverlayID, id)); return result; } @@ -370,7 +370,7 @@ void Overlays::setParentPanel(OverlayID childId, OverlayID panelId) { OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { if (QThread::currentThread() != thread()) { OverlayID result; - hifi::qt::blockingInvokeMethod(this, "getOverlayAtPoint", Q_RETURN_ARG(OverlayID, result), Q_ARG(glm::vec2, point)); + BLOCKING_INVOKE_METHOD(this, "getOverlayAtPoint", Q_RETURN_ARG(OverlayID, result), Q_ARG(glm::vec2, point)); return result; } @@ -408,7 +408,7 @@ OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { OverlayPropertyResult Overlays::getProperty(OverlayID id, const QString& property) { if (QThread::currentThread() != thread()) { OverlayPropertyResult result; - hifi::qt::blockingInvokeMethod(this, "getProperty", Q_RETURN_ARG(OverlayPropertyResult, result), Q_ARG(OverlayID, id), Q_ARG(QString, property)); + BLOCKING_INVOKE_METHOD(this, "getProperty", Q_RETURN_ARG(OverlayPropertyResult, result), Q_ARG(OverlayID, id), Q_ARG(QString, property)); return result; } @@ -453,7 +453,7 @@ RayToOverlayIntersectionResult Overlays::findRayIntersectionInternal(const PickR bool visibleOnly, bool collidableOnly) { if (QThread::currentThread() != thread()) { RayToOverlayIntersectionResult result; - hifi::qt::blockingInvokeMethod(this, "findRayIntersectionInternal", Q_RETURN_ARG(RayToOverlayIntersectionResult, result), + BLOCKING_INVOKE_METHOD(this, "findRayIntersectionInternal", Q_RETURN_ARG(RayToOverlayIntersectionResult, result), Q_ARG(PickRay, ray), Q_ARG(bool, precisionPicking), Q_ARG(QVector, overlaysToInclude), @@ -580,7 +580,7 @@ void RayToOverlayIntersectionResultFromScriptValue(const QScriptValue& objectVar bool Overlays::isLoaded(OverlayID id) { if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(this, "isLoaded", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id)); + BLOCKING_INVOKE_METHOD(this, "isLoaded", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id)); return result; } @@ -594,7 +594,7 @@ bool Overlays::isLoaded(OverlayID id) { QSizeF Overlays::textSize(OverlayID id, const QString& text) { if (QThread::currentThread() != thread()) { QSizeF result; - hifi::qt::blockingInvokeMethod(this, "textSize", Q_RETURN_ARG(QSizeF, result), Q_ARG(OverlayID, id), Q_ARG(QString, text)); + BLOCKING_INVOKE_METHOD(this, "textSize", Q_RETURN_ARG(QSizeF, result), Q_ARG(OverlayID, id), Q_ARG(QString, text)); return result; } @@ -671,7 +671,7 @@ void Overlays::deletePanel(OverlayID panelId) { bool Overlays::isAddedOverlay(OverlayID id) { if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(this, "isAddedOverlay", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id)); + BLOCKING_INVOKE_METHOD(this, "isAddedOverlay", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id)); return result; } @@ -705,7 +705,7 @@ void Overlays::sendHoverLeaveOverlay(OverlayID id, PointerEvent event) { OverlayID Overlays::getKeyboardFocusOverlay() { if (QThread::currentThread() != thread()) { OverlayID result; - hifi::qt::blockingInvokeMethod(this, "getKeyboardFocusOverlay", Q_RETURN_ARG(OverlayID, result)); + BLOCKING_INVOKE_METHOD(this, "getKeyboardFocusOverlay", Q_RETURN_ARG(OverlayID, result)); return result; } @@ -724,7 +724,7 @@ void Overlays::setKeyboardFocusOverlay(OverlayID id) { float Overlays::width() { if (QThread::currentThread() != thread()) { float result; - hifi::qt::blockingInvokeMethod(this, "width", Q_RETURN_ARG(float, result)); + BLOCKING_INVOKE_METHOD(this, "width", Q_RETURN_ARG(float, result)); return result; } @@ -735,7 +735,7 @@ float Overlays::width() { float Overlays::height() { if (QThread::currentThread() != thread()) { float result; - hifi::qt::blockingInvokeMethod(this, "height", Q_RETURN_ARG(float, result)); + BLOCKING_INVOKE_METHOD(this, "height", Q_RETURN_ARG(float, result)); return result; } @@ -945,7 +945,7 @@ bool Overlays::mouseMoveEvent(QMouseEvent* event) { QVector Overlays::findOverlays(const glm::vec3& center, float radius) { QVector result; if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "findOverlays", Q_RETURN_ARG(QVector, result), Q_ARG(glm::vec3, center), Q_ARG(float, radius)); + BLOCKING_INVOKE_METHOD(this, "findOverlays", Q_RETURN_ARG(QVector, result), Q_ARG(glm::vec3, center), Q_ARG(float, radius)); return result; } diff --git a/libraries/animation/src/AnimationCache.cpp b/libraries/animation/src/AnimationCache.cpp index 0bca721464..9aa315beb8 100644 --- a/libraries/animation/src/AnimationCache.cpp +++ b/libraries/animation/src/AnimationCache.cpp @@ -34,7 +34,7 @@ AnimationCache::AnimationCache(QObject* parent) : AnimationPointer AnimationCache::getAnimation(const QUrl& url) { if (QThread::currentThread() != thread()) { AnimationPointer result; - hifi::qt::blockingInvokeMethod(this, "getAnimation", + BLOCKING_INVOKE_METHOD(this, "getAnimation", Q_RETURN_ARG(AnimationPointer, result), Q_ARG(const QUrl&, url)); return result; } @@ -100,7 +100,7 @@ bool Animation::isLoaded() const { QStringList Animation::getJointNames() const { if (QThread::currentThread() != thread()) { QStringList result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointNames", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointNames", Q_RETURN_ARG(QStringList, result)); return result; } @@ -114,7 +114,7 @@ QStringList Animation::getJointNames() const { QVector Animation::getFrames() const { if (QThread::currentThread() != thread()) { QVector result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getFrames", + BLOCKING_INVOKE_METHOD(const_cast(this), "getFrames", Q_RETURN_ARG(QVector, result)); return result; } diff --git a/libraries/audio/src/SoundCache.cpp b/libraries/audio/src/SoundCache.cpp index dc20b9884d..162e833da2 100644 --- a/libraries/audio/src/SoundCache.cpp +++ b/libraries/audio/src/SoundCache.cpp @@ -32,7 +32,7 @@ SoundCache::SoundCache(QObject* parent) : SharedSoundPointer SoundCache::getSound(const QUrl& url) { if (QThread::currentThread() != thread()) { SharedSoundPointer result; - hifi::qt::blockingInvokeMethod(this, "getSound", + BLOCKING_INVOKE_METHOD(this, "getSound", Q_RETURN_ARG(SharedSoundPointer, result), Q_ARG(const QUrl&, url)); return result; } diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index faebeafb29..d303b2e66d 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1011,7 +1011,7 @@ glm::vec3 Avatar::getAbsoluteJointTranslationInObjectFrame(int index) const { int Avatar::getJointIndex(const QString& name) const { if (QThread::currentThread() != thread()) { int result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointIndex", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointIndex", Q_RETURN_ARG(int, result), Q_ARG(const QString&, name)); return result; } @@ -1025,7 +1025,7 @@ int Avatar::getJointIndex(const QString& name) const { QStringList Avatar::getJointNames() const { if (QThread::currentThread() != thread()) { QStringList result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointNames", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointNames", Q_RETURN_ARG(QStringList, result)); return result; } @@ -1035,7 +1035,7 @@ QStringList Avatar::getJointNames() const { glm::vec3 Avatar::getJointPosition(int index) const { if (QThread::currentThread() != thread()) { glm::vec3 position; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointPosition", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointPosition", Q_RETURN_ARG(glm::vec3, position), Q_ARG(const int, index)); return position; } @@ -1047,7 +1047,7 @@ glm::vec3 Avatar::getJointPosition(int index) const { glm::vec3 Avatar::getJointPosition(const QString& name) const { if (QThread::currentThread() != thread()) { glm::vec3 position; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointPosition", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointPosition", Q_RETURN_ARG(glm::vec3, position), Q_ARG(const QString&, name)); return position; } @@ -1106,7 +1106,7 @@ static std::shared_ptr allocateAttachmentModel(bool isSoft, const Rig& ri void Avatar::setAttachmentData(const QVector& attachmentData) { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "setAttachmentData", + BLOCKING_INVOKE_METHOD(this, "setAttachmentData", Q_ARG(const QVector, attachmentData)); return; } diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 5f63826a99..6eed23fb5b 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1228,7 +1228,7 @@ bool AvatarData::isJointDataValid(int index) const { } if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(const_cast(this), "isJointDataValid", + BLOCKING_INVOKE_METHOD(const_cast(this), "isJointDataValid", Q_RETURN_ARG(bool, result), Q_ARG(int, index)); return result; } @@ -1241,7 +1241,7 @@ glm::quat AvatarData::getJointRotation(int index) const { } if (QThread::currentThread() != thread()) { glm::quat result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointRotation", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointRotation", Q_RETURN_ARG(glm::quat, result), Q_ARG(int, index)); return result; } @@ -1256,7 +1256,7 @@ glm::vec3 AvatarData::getJointTranslation(int index) const { } if (QThread::currentThread() != thread()) { glm::vec3 result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointTranslation", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointTranslation", Q_RETURN_ARG(glm::vec3, result), Q_ARG(int, index)); return result; } @@ -1267,7 +1267,7 @@ glm::vec3 AvatarData::getJointTranslation(int index) const { glm::vec3 AvatarData::getJointTranslation(const QString& name) const { if (QThread::currentThread() != thread()) { glm::vec3 result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointTranslation", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointTranslation", Q_RETURN_ARG(glm::vec3, result), Q_ARG(const QString&, name)); return result; } @@ -1345,7 +1345,7 @@ void AvatarData::clearJointData(const QString& name) { bool AvatarData::isJointDataValid(const QString& name) const { if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(const_cast(this), "isJointDataValid", + BLOCKING_INVOKE_METHOD(const_cast(this), "isJointDataValid", Q_RETURN_ARG(bool, result), Q_ARG(const QString&, name)); return result; } @@ -1355,7 +1355,7 @@ bool AvatarData::isJointDataValid(const QString& name) const { glm::quat AvatarData::getJointRotation(const QString& name) const { if (QThread::currentThread() != thread()) { glm::quat result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointRotation", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointRotation", Q_RETURN_ARG(glm::quat, result), Q_ARG(const QString&, name)); return result; } @@ -1365,7 +1365,7 @@ glm::quat AvatarData::getJointRotation(const QString& name) const { QVector AvatarData::getJointRotations() const { if (QThread::currentThread() != thread()) { QVector result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointRotations", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointRotations", Q_RETURN_ARG(QVector, result)); return result; } @@ -1380,7 +1380,7 @@ QVector AvatarData::getJointRotations() const { void AvatarData::setJointRotations(QVector jointRotations) { if (QThread::currentThread() != thread()) { QVector result; - hifi::qt::blockingInvokeMethod(const_cast(this), "setJointRotations", + BLOCKING_INVOKE_METHOD(const_cast(this), "setJointRotations", Q_ARG(QVector, jointRotations)); } QWriteLocker writeLock(&_jointDataLock); @@ -1397,7 +1397,7 @@ void AvatarData::setJointRotations(QVector jointRotations) { QVector AvatarData::getJointTranslations() const { if (QThread::currentThread() != thread()) { QVector result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointTranslations", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointTranslations", Q_RETURN_ARG(QVector, result)); return result; } @@ -1412,7 +1412,7 @@ QVector AvatarData::getJointTranslations() const { void AvatarData::setJointTranslations(QVector jointTranslations) { if (QThread::currentThread() != thread()) { QVector result; - hifi::qt::blockingInvokeMethod(const_cast(this), "setJointTranslations", + BLOCKING_INVOKE_METHOD(const_cast(this), "setJointTranslations", Q_ARG(QVector, jointTranslations)); } QWriteLocker writeLock(&_jointDataLock); @@ -1613,7 +1613,7 @@ void AvatarData::setDisplayName(const QString& displayName) { QVector AvatarData::getAttachmentData() const { if (QThread::currentThread() != thread()) { QVector result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getAttachmentData", + BLOCKING_INVOKE_METHOD(const_cast(this), "getAttachmentData", Q_RETURN_ARG(QVector, result)); return result; } @@ -2336,7 +2336,7 @@ void AvatarData::clearAvatarEntity(const QUuid& entityID) { AvatarEntityMap AvatarData::getAvatarEntityData() const { AvatarEntityMap result; if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(const_cast(this), "getAvatarEntityData", + BLOCKING_INVOKE_METHOD(const_cast(this), "getAvatarEntityData", Q_RETURN_ARG(AvatarEntityMap, result)); return result; } @@ -2377,7 +2377,7 @@ void AvatarData::setAvatarEntityData(const AvatarEntityMap& avatarEntityData) { AvatarEntityIDs AvatarData::getAndClearRecentlyDetachedIDs() { AvatarEntityIDs result; if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(const_cast(this), "getAndClearRecentlyDetachedIDs", + BLOCKING_INVOKE_METHOD(const_cast(this), "getAndClearRecentlyDetachedIDs", Q_RETURN_ARG(AvatarEntityIDs, result)); return result; } diff --git a/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp b/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp index 92abec78fa..29b8aee08b 100644 --- a/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp +++ b/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp @@ -291,7 +291,7 @@ glm::vec2 CompositorHelper::getReticleMaximumPosition() const { void CompositorHelper::sendFakeMouseEvent() { if (qApp->thread() != QThread::currentThread()) { - hifi::qt::blockingInvokeMethod(this, "sendFakeMouseEvent"); + BLOCKING_INVOKE_METHOD(this, "sendFakeMouseEvent"); return; } diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index fbf76df38e..a8eca41077 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -381,7 +381,7 @@ ModelPointer EntityTreeRenderer::allocateModel(const QString& url, float loading // Only create and delete models on the thread that owns the EntityTreeRenderer if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "allocateModel", + BLOCKING_INVOKE_METHOD(this, "allocateModel", Q_RETURN_ARG(ModelPointer, model), Q_ARG(const QString&, url)); @@ -398,7 +398,7 @@ ModelPointer EntityTreeRenderer::allocateModel(const QString& url, float loading ModelPointer EntityTreeRenderer::updateModel(ModelPointer model, const QString& newUrl) { // Only create and delete models on the thread that owns the EntityTreeRenderer if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "updateModel", + BLOCKING_INVOKE_METHOD(this, "updateModel", Q_RETURN_ARG(ModelPointer, model), Q_ARG(ModelPointer, model), Q_ARG(const QString&, newUrl)); diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index ae9f79f0f6..f22631d363 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -1489,7 +1489,7 @@ int EntityScriptingInterface::getJointIndex(const QUuid& entityID, const QString return -1; } int result; - hifi::qt::blockingInvokeMethod(_entityTree.get(), "getJointIndex", + BLOCKING_INVOKE_METHOD(_entityTree.get(), "getJointIndex", Q_RETURN_ARG(int, result), Q_ARG(QUuid, entityID), Q_ARG(QString, name)); return result; } @@ -1499,7 +1499,7 @@ QStringList EntityScriptingInterface::getJointNames(const QUuid& entityID) { return QStringList(); } QStringList result; - hifi::qt::blockingInvokeMethod(_entityTree.get(), "getJointNames", + BLOCKING_INVOKE_METHOD(_entityTree.get(), "getJointNames", Q_RETURN_ARG(QStringList, result), Q_ARG(QUuid, entityID)); return result; } diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 82314d0cd1..262f0318b6 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -233,7 +233,7 @@ void NodeList::processICEPingPacket(QSharedPointer message) { void NodeList::reset() { if (thread() != QThread::currentThread()) { - hifi::qt::blockingInvokeMethod(this, "reset"); + QMetaObject::invokeMethod(this, "reset"); return; } diff --git a/libraries/networking/src/ResourceCache.cpp b/libraries/networking/src/ResourceCache.cpp index 0c91a581ce..43f0e9335d 100644 --- a/libraries/networking/src/ResourceCache.cpp +++ b/libraries/networking/src/ResourceCache.cpp @@ -180,7 +180,7 @@ ScriptableResource* ResourceCache::prefetch(const QUrl& url, void* extra) { if (QThread::currentThread() != thread()) { // Must be called in thread to ensure getResource returns a valid pointer - hifi::qt::blockingInvokeMethod(this, "prefetch", + BLOCKING_INVOKE_METHOD(this, "prefetch", Q_RETURN_ARG(ScriptableResource*, result), Q_ARG(QUrl, url), Q_ARG(void*, extra)); return result; @@ -303,7 +303,7 @@ QVariantList ResourceCache::getResourceList() { QVariantList list; if (QThread::currentThread() != thread()) { // NOTE: invokeMethod does not allow a const QObject* - hifi::qt::blockingInvokeMethod(this, "getResourceList", + BLOCKING_INVOKE_METHOD(this, "getResourceList", Q_RETURN_ARG(QVariantList, list)); } else { auto resources = _resources.uniqueKeys(); diff --git a/libraries/networking/src/udt/Socket.cpp b/libraries/networking/src/udt/Socket.cpp index 89a6758366..a3374a0f47 100644 --- a/libraries/networking/src/udt/Socket.cpp +++ b/libraries/networking/src/udt/Socket.cpp @@ -277,7 +277,7 @@ Connection* Socket::findOrCreateConnection(const HifiSockAddr& sockAddr) { void Socket::clearConnections() { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "clearConnections"); + BLOCKING_INVOKE_METHOD(this, "clearConnections"); return; } diff --git a/libraries/plugins/src/plugins/InputConfiguration.cpp b/libraries/plugins/src/plugins/InputConfiguration.cpp index 8ce206988b..9234ac6585 100644 --- a/libraries/plugins/src/plugins/InputConfiguration.cpp +++ b/libraries/plugins/src/plugins/InputConfiguration.cpp @@ -23,7 +23,7 @@ InputConfiguration::InputConfiguration() { QStringList InputConfiguration::inputPlugins() { if (QThread::currentThread() != thread()) { QStringList result; - hifi::qt::blockingInvokeMethod(this, "inputPlugins", + BLOCKING_INVOKE_METHOD(this, "inputPlugins", Q_RETURN_ARG(QStringList, result)); return result; } @@ -44,7 +44,7 @@ QStringList InputConfiguration::inputPlugins() { QStringList InputConfiguration::activeInputPlugins() { if (QThread::currentThread() != thread()) { QStringList result; - hifi::qt::blockingInvokeMethod(this, "activeInputPlugins", + BLOCKING_INVOKE_METHOD(this, "activeInputPlugins", Q_RETURN_ARG(QStringList, result)); return result; } @@ -66,7 +66,7 @@ QStringList InputConfiguration::activeInputPlugins() { QString InputConfiguration::configurationLayout(QString pluginName) { if (QThread::currentThread() != thread()) { QString result; - hifi::qt::blockingInvokeMethod(this, "configurationLayout", + BLOCKING_INVOKE_METHOD(this, "configurationLayout", Q_RETURN_ARG(QString, result), Q_ARG(QString, pluginName)); return result; @@ -83,7 +83,7 @@ QString InputConfiguration::configurationLayout(QString pluginName) { void InputConfiguration::setConfigurationSettings(QJsonObject configurationSettings, QString pluginName) { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "setConfigurationSettings", + BLOCKING_INVOKE_METHOD(this, "setConfigurationSettings", Q_ARG(QJsonObject, configurationSettings), Q_ARG(QString, pluginName)); return; @@ -99,7 +99,7 @@ void InputConfiguration::setConfigurationSettings(QJsonObject configurationSetti QJsonObject InputConfiguration::configurationSettings(QString pluginName) { if (QThread::currentThread() != thread()) { QJsonObject result; - hifi::qt::blockingInvokeMethod(this, "configurationSettings", + BLOCKING_INVOKE_METHOD(this, "configurationSettings", Q_RETURN_ARG(QJsonObject, result), Q_ARG(QString, pluginName)); return result; @@ -115,7 +115,7 @@ QJsonObject InputConfiguration::configurationSettings(QString pluginName) { void InputConfiguration::calibratePlugin(QString pluginName) { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "calibratePlugin"); + BLOCKING_INVOKE_METHOD(this, "calibratePlugin"); return; } @@ -130,7 +130,7 @@ void InputConfiguration::calibratePlugin(QString pluginName) { bool InputConfiguration::uncalibratePlugin(QString pluginName) { if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(this, "uncalibratePlugin", + BLOCKING_INVOKE_METHOD(this, "uncalibratePlugin", Q_ARG(bool, result)); return result; } diff --git a/libraries/recording/src/recording/ClipCache.cpp b/libraries/recording/src/recording/ClipCache.cpp index 458979bf96..0fbbf1bc8e 100644 --- a/libraries/recording/src/recording/ClipCache.cpp +++ b/libraries/recording/src/recording/ClipCache.cpp @@ -39,7 +39,7 @@ ClipCache::ClipCache(QObject* parent) : NetworkClipLoaderPointer ClipCache::getClipLoader(const QUrl& url) { if (QThread::currentThread() != thread()) { NetworkClipLoaderPointer result; - hifi::qt::blockingInvokeMethod(this, "getClipLoader", + BLOCKING_INVOKE_METHOD(this, "getClipLoader", Q_RETURN_ARG(NetworkClipLoaderPointer, result), Q_ARG(const QUrl&, url)); return result; } diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 94b074d1e3..45be09b701 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -871,7 +871,7 @@ bool Model::getRelativeDefaultJointTranslation(int jointIndex, glm::vec3& transl QStringList Model::getJointNames() const { if (QThread::currentThread() != thread()) { QStringList result; - hifi::qt::blockingInvokeMethod(const_cast(this), "getJointNames", + BLOCKING_INVOKE_METHOD(const_cast(this), "getJointNames", Q_RETURN_ARG(QStringList, result)); return result; } diff --git a/libraries/render/src/task/Config.cpp b/libraries/render/src/task/Config.cpp index d1edd8bda8..b378237c9c 100644 --- a/libraries/render/src/task/Config.cpp +++ b/libraries/render/src/task/Config.cpp @@ -61,7 +61,7 @@ void TaskConfig::transferChildrenConfigs(QConfigPointer source) { void TaskConfig::refresh() { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "refresh"); + BLOCKING_INVOKE_METHOD(this, "refresh"); return; } diff --git a/libraries/script-engine/src/AudioScriptingInterface.cpp b/libraries/script-engine/src/AudioScriptingInterface.cpp index 4023af375a..28bf5ed163 100644 --- a/libraries/script-engine/src/AudioScriptingInterface.cpp +++ b/libraries/script-engine/src/AudioScriptingInterface.cpp @@ -34,7 +34,7 @@ ScriptAudioInjector* AudioScriptingInterface::playSound(SharedSoundPointer sound if (QThread::currentThread() != thread()) { ScriptAudioInjector* injector = NULL; - hifi::qt::blockingInvokeMethod(this, "playSound", + BLOCKING_INVOKE_METHOD(this, "playSound", Q_RETURN_ARG(ScriptAudioInjector*, injector), Q_ARG(SharedSoundPointer, sound), Q_ARG(const AudioInjectorOptions&, injectorOptions)); diff --git a/libraries/script-engine/src/RecordingScriptingInterface.cpp b/libraries/script-engine/src/RecordingScriptingInterface.cpp index cd5b79b4a8..b51e9cd529 100644 --- a/libraries/script-engine/src/RecordingScriptingInterface.cpp +++ b/libraries/script-engine/src/RecordingScriptingInterface.cpp @@ -99,7 +99,7 @@ void RecordingScriptingInterface::loadRecording(const QString& url, QScriptValue void RecordingScriptingInterface::startPlaying() { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "startPlaying"); + BLOCKING_INVOKE_METHOD(this, "startPlaying"); return; } @@ -116,7 +116,7 @@ void RecordingScriptingInterface::setPlayerAudioOffset(float audioOffset) { void RecordingScriptingInterface::setPlayerTime(float time) { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "setPlayerTime", Q_ARG(float, time)); + BLOCKING_INVOKE_METHOD(this, "setPlayerTime", Q_ARG(float, time)); return; } _player->seek(time); @@ -148,7 +148,7 @@ void RecordingScriptingInterface::setPlayerUseSkeletonModel(bool useSkeletonMode void RecordingScriptingInterface::pausePlayer() { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "pausePlayer"); + BLOCKING_INVOKE_METHOD(this, "pausePlayer"); return; } _player->pause(); @@ -156,7 +156,7 @@ void RecordingScriptingInterface::pausePlayer() { void RecordingScriptingInterface::stopPlaying() { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "stopPlaying"); + BLOCKING_INVOKE_METHOD(this, "stopPlaying"); return; } _player->stop(); @@ -177,7 +177,7 @@ void RecordingScriptingInterface::startRecording() { } if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "startRecording"); + BLOCKING_INVOKE_METHOD(this, "startRecording"); return; } @@ -200,7 +200,7 @@ QString RecordingScriptingInterface::getDefaultRecordingSaveDirectory() { void RecordingScriptingInterface::saveRecording(const QString& filename) { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "saveRecording", + BLOCKING_INVOKE_METHOD(this, "saveRecording", Q_ARG(QString, filename)); return; } @@ -221,7 +221,7 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr if (QThread::currentThread() != thread()) { bool result; - hifi::qt::blockingInvokeMethod(this, "saveRecordingToAsset", + BLOCKING_INVOKE_METHOD(this, "saveRecordingToAsset", Q_RETURN_ARG(bool, result), Q_ARG(QScriptValue, getClipAtpUrl)); return result; @@ -258,7 +258,7 @@ bool RecordingScriptingInterface::saveRecordingToAsset(QScriptValue getClipAtpUr void RecordingScriptingInterface::loadLastRecording() { if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "loadLastRecording"); + BLOCKING_INVOKE_METHOD(this, "loadLastRecording"); return; } diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 52ce11c3cf..b51cb0ee3b 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -965,7 +965,7 @@ QScriptValue ScriptEngine::evaluate(const QString& sourceCode, const QString& fi qCDebug(scriptengine) << "*** WARNING *** ScriptEngine::evaluate() called on wrong thread [" << QThread::currentThread() << "], invoking on correct thread [" << thread() << "] " "sourceCode:" << sourceCode << " fileName:" << fileName << "lineNumber:" << lineNumber; #endif - hifi::qt::blockingInvokeMethod(this, "evaluate", + BLOCKING_INVOKE_METHOD(this, "evaluate", Q_RETURN_ARG(QScriptValue, result), Q_ARG(const QString&, sourceCode), Q_ARG(const QString&, fileName), diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index 254312fa45..57b04eeb82 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -453,7 +453,7 @@ ScriptEngine* ScriptEngines::loadScript(const QUrl& scriptFilename, bool isUserL bool activateMainWindow, bool reload) { if (thread() != QThread::currentThread()) { ScriptEngine* result { nullptr }; - hifi::qt::blockingInvokeMethod(this, "loadScript", Q_RETURN_ARG(ScriptEngine*, result), + BLOCKING_INVOKE_METHOD(this, "loadScript", Q_RETURN_ARG(ScriptEngine*, result), Q_ARG(QUrl, scriptFilename), Q_ARG(bool, isUserLoaded), Q_ARG(bool, loadScriptFromEditor), diff --git a/libraries/shared/src/shared/QtHelpers.cpp b/libraries/shared/src/shared/QtHelpers.cpp index 3681136bf2..1ce1c3e07c 100644 --- a/libraries/shared/src/shared/QtHelpers.cpp +++ b/libraries/shared/src/shared/QtHelpers.cpp @@ -17,6 +17,7 @@ Q_LOGGING_CATEGORY(thread_safety, "hifi.thread_safety") namespace hifi { namespace qt { bool blockingInvokeMethod( + const char* function, QObject *obj, const char *member, QGenericReturnArgument ret, QGenericArgument val0, @@ -30,13 +31,14 @@ bool blockingInvokeMethod( QGenericArgument val8, QGenericArgument val9) { if (QThread::currentThread() == qApp->thread()) { - qCWarning(thread_safety, "BlockingQueuedConnection invoked on main thread!"); + qCWarning(thread_safety) << "BlockingQueuedConnection invoked on main thread from " << function; } return QMetaObject::invokeMethod(obj, member, Qt::BlockingQueuedConnection, ret, val0, val1, val2, val3, val4, val5, val6, val7, val8, val9); } bool blockingInvokeMethod( + const char* function, QObject *obj, const char *member, QGenericArgument val0, QGenericArgument val1, @@ -48,8 +50,7 @@ bool blockingInvokeMethod( QGenericArgument val7, QGenericArgument val8, QGenericArgument val9) { - qCWarning(thread_safety, "BlockingQueuedConnection invoked without return value!"); - return blockingInvokeMethod(obj, member, QGenericReturnArgument(), val0, val1, val2, val3, val4, val5, val6, val7, val8, val9); + return blockingInvokeMethod(function, obj, member, QGenericReturnArgument(), val0, val1, val2, val3, val4, val5, val6, val7, val8, val9); } diff --git a/libraries/shared/src/shared/QtHelpers.h b/libraries/shared/src/shared/QtHelpers.h index 7b5a15a069..5da65a378f 100644 --- a/libraries/shared/src/shared/QtHelpers.h +++ b/libraries/shared/src/shared/QtHelpers.h @@ -12,9 +12,11 @@ #include + namespace hifi { namespace qt { bool blockingInvokeMethod( + const char* function, QObject *obj, const char *member, QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument(Q_NULLPTR), @@ -29,6 +31,7 @@ bool blockingInvokeMethod( QGenericArgument val9 = QGenericArgument()); bool blockingInvokeMethod( + const char* function, QObject *obj, const char *member, QGenericArgument val0 = QGenericArgument(Q_NULLPTR), QGenericArgument val1 = QGenericArgument(), @@ -43,5 +46,7 @@ bool blockingInvokeMethod( } } +#define BLOCKING_INVOKE_METHOD(obj, member, ...) \ + hifi::qt::blockingInvokeMethod(__FUNCTION__, obj, member, ##__VA_ARGS__) #endif diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index 2bc5f89d00..135729653e 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -250,7 +250,7 @@ int OffscreenUi::waitForMessageBoxResult(QQuickItem* messageBox) { QMessageBox::StandardButton OffscreenUi::messageBox(Icon icon, const QString& title, const QString& text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { if (QThread::currentThread() != thread()) { QMessageBox::StandardButton result = QMessageBox::StandardButton::NoButton; - hifi::qt::blockingInvokeMethod(this, "messageBox", + BLOCKING_INVOKE_METHOD(this, "messageBox", Q_RETURN_ARG(QMessageBox::StandardButton, result), Q_ARG(Icon, icon), Q_ARG(QString, title), @@ -352,7 +352,7 @@ QVariant OffscreenUi::getCustomInfo(const Icon icon, const QString& title, const QVariant OffscreenUi::inputDialog(const Icon icon, const QString& title, const QString& label, const QVariant& current) { if (QThread::currentThread() != thread()) { QVariant result; - hifi::qt::blockingInvokeMethod(this, "inputDialog", + BLOCKING_INVOKE_METHOD(this, "inputDialog", Q_RETURN_ARG(QVariant, result), Q_ARG(Icon, icon), Q_ARG(QString, title), @@ -367,7 +367,7 @@ QVariant OffscreenUi::inputDialog(const Icon icon, const QString& title, const Q QVariant OffscreenUi::customInputDialog(const Icon icon, const QString& title, const QVariantMap& config) { if (QThread::currentThread() != thread()) { QVariant result; - hifi::qt::blockingInvokeMethod(this, "customInputDialog", + BLOCKING_INVOKE_METHOD(this, "customInputDialog", Q_RETURN_ARG(QVariant, result), Q_ARG(Icon, icon), Q_ARG(QString, title), @@ -641,7 +641,7 @@ QString OffscreenUi::fileDialog(const QVariantMap& properties) { QString OffscreenUi::fileOpenDialog(const QString& caption, const QString& dir, const QString& filter, QString* selectedFilter, QFileDialog::Options options) { if (QThread::currentThread() != thread()) { QString result; - hifi::qt::blockingInvokeMethod(this, "fileOpenDialog", + BLOCKING_INVOKE_METHOD(this, "fileOpenDialog", Q_RETURN_ARG(QString, result), Q_ARG(QString, caption), Q_ARG(QString, dir), @@ -663,7 +663,7 @@ QString OffscreenUi::fileOpenDialog(const QString& caption, const QString& dir, QString OffscreenUi::fileSaveDialog(const QString& caption, const QString& dir, const QString& filter, QString* selectedFilter, QFileDialog::Options options) { if (QThread::currentThread() != thread()) { QString result; - hifi::qt::blockingInvokeMethod(this, "fileSaveDialog", + BLOCKING_INVOKE_METHOD(this, "fileSaveDialog", Q_RETURN_ARG(QString, result), Q_ARG(QString, caption), Q_ARG(QString, dir), @@ -687,7 +687,7 @@ QString OffscreenUi::fileSaveDialog(const QString& caption, const QString& dir, QString OffscreenUi::existingDirectoryDialog(const QString& caption, const QString& dir, const QString& filter, QString* selectedFilter, QFileDialog::Options options) { if (QThread::currentThread() != thread()) { QString result; - hifi::qt::blockingInvokeMethod(this, "existingDirectoryDialog", + BLOCKING_INVOKE_METHOD(this, "existingDirectoryDialog", Q_RETURN_ARG(QString, result), Q_ARG(QString, caption), Q_ARG(QString, dir), @@ -774,7 +774,7 @@ QString OffscreenUi::assetOpenDialog(const QString& caption, const QString& dir, // ATP equivalent of fileOpenDialog(). if (QThread::currentThread() != thread()) { QString result; - hifi::qt::blockingInvokeMethod(this, "assetOpenDialog", + BLOCKING_INVOKE_METHOD(this, "assetOpenDialog", Q_RETURN_ARG(QString, result), Q_ARG(QString, caption), Q_ARG(QString, dir), diff --git a/libraries/ui/src/QmlWebWindowClass.cpp b/libraries/ui/src/QmlWebWindowClass.cpp index 13fc9cc018..44a0af7787 100644 --- a/libraries/ui/src/QmlWebWindowClass.cpp +++ b/libraries/ui/src/QmlWebWindowClass.cpp @@ -38,7 +38,7 @@ QScriptValue QmlWebWindowClass::constructor(QScriptContext* context, QScriptEngi QString QmlWebWindowClass::getURL() { if (QThread::currentThread() != thread()) { QString result; - hifi::qt::blockingInvokeMethod(this, "getURL", Q_RETURN_ARG(QString, result)); + BLOCKING_INVOKE_METHOD(this, "getURL", Q_RETURN_ARG(QString, result)); return result; } diff --git a/libraries/ui/src/QmlWindowClass.cpp b/libraries/ui/src/QmlWindowClass.cpp index 8d93af15f5..14d8ec8985 100644 --- a/libraries/ui/src/QmlWindowClass.cpp +++ b/libraries/ui/src/QmlWindowClass.cpp @@ -79,7 +79,7 @@ QScriptValue QmlWindowClass::constructor(QScriptContext* context, QScriptEngine* Q_ASSERT(retVal); if (QThread::currentThread() != qApp->thread()) { retVal->moveToThread(qApp->thread()); - hifi::qt::blockingInvokeMethod(retVal, "initQml", Q_ARG(QVariantMap, properties)); + BLOCKING_INVOKE_METHOD(retVal, "initQml", Q_ARG(QVariantMap, properties)); } else { retVal->initQml(properties); } @@ -111,7 +111,7 @@ void QmlWindowClass::initQml(QVariantMap properties) { // Build the event bridge and wrapper on the main thread offscreenUi->loadInNewContext(qmlSource(), [&](QQmlContext* context, QObject* object) { _qmlWindow = object; - context->setContextProperty("eventBridge", this); + context->setContextProperty(EVENT_BRIDGE_PROPERTY, this); context->engine()->setObjectOwnership(this, QQmlEngine::CppOwnership); context->engine()->setObjectOwnership(object, QQmlEngine::CppOwnership); if (properties.contains(TITLE_PROPERTY)) { @@ -243,7 +243,7 @@ void QmlWindowClass::setVisible(bool visible) { bool QmlWindowClass::isVisible() { if (QThread::currentThread() != thread()) { bool result = false; - hifi::qt::blockingInvokeMethod(this, "isVisible", Q_RETURN_ARG(bool, result)); + BLOCKING_INVOKE_METHOD(this, "isVisible", Q_RETURN_ARG(bool, result)); return result; } @@ -264,7 +264,7 @@ bool QmlWindowClass::isVisible() { glm::vec2 QmlWindowClass::getPosition() { if (QThread::currentThread() != thread()) { vec2 result; - hifi::qt::blockingInvokeMethod(this, "getPosition", Q_RETURN_ARG(vec2, result)); + BLOCKING_INVOKE_METHOD(this, "getPosition", Q_RETURN_ARG(vec2, result)); return result; } @@ -299,7 +299,7 @@ glm::vec2 toGlm(const QSizeF& size) { glm::vec2 QmlWindowClass::getSize() { if (QThread::currentThread() != thread()) { vec2 result; - hifi::qt::blockingInvokeMethod(this, "getSize", Q_RETURN_ARG(vec2, result)); + BLOCKING_INVOKE_METHOD(this, "getSize", Q_RETURN_ARG(vec2, result)); return result; } diff --git a/libraries/ui/src/ui/Menu.cpp b/libraries/ui/src/ui/Menu.cpp index 7aa4bc5e17..4e61eba28f 100644 --- a/libraries/ui/src/ui/Menu.cpp +++ b/libraries/ui/src/ui/Menu.cpp @@ -246,7 +246,7 @@ void Menu::removeAction(MenuWrapper* menu, const QString& actionName) { void Menu::setIsOptionChecked(const QString& menuOption, bool isChecked) { if (thread() != QThread::currentThread()) { - hifi::qt::blockingInvokeMethod(this, "setIsOptionChecked", + BLOCKING_INVOKE_METHOD(this, "setIsOptionChecked", Q_ARG(const QString&, menuOption), Q_ARG(bool, isChecked)); return; diff --git a/libraries/ui/src/ui/QmlWrapper.cpp b/libraries/ui/src/ui/QmlWrapper.cpp index d0f9a5e535..3879e1bc8f 100644 --- a/libraries/ui/src/ui/QmlWrapper.cpp +++ b/libraries/ui/src/ui/QmlWrapper.cpp @@ -38,7 +38,7 @@ void QmlWrapper::writeProperties(QVariant propertyMap) { QVariant QmlWrapper::readProperty(const QString& propertyName) { if (QThread::currentThread() != thread()) { QVariant result; - hifi::qt::blockingInvokeMethod(this, "readProperty", Q_RETURN_ARG(QVariant, result), Q_ARG(QString, propertyName)); + BLOCKING_INVOKE_METHOD(this, "readProperty", Q_RETURN_ARG(QVariant, result), Q_ARG(QString, propertyName)); return result; } @@ -48,7 +48,7 @@ QVariant QmlWrapper::readProperty(const QString& propertyName) { QVariant QmlWrapper::readProperties(const QVariant& propertyList) { if (QThread::currentThread() != thread()) { QVariant result; - hifi::qt::blockingInvokeMethod(this, "readProperties", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, propertyList)); + BLOCKING_INVOKE_METHOD(this, "readProperties", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, propertyList)); return result; } diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index 0dbcfac25c..857cae15cc 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -43,7 +43,7 @@ ToolbarProxy* TabletScriptingInterface::getSystemToolbarProxy() { TabletProxy* TabletScriptingInterface::getTablet(const QString& tabletId) { TabletProxy* tabletProxy = nullptr; if (QThread::currentThread() != thread()) { - hifi::qt::blockingInvokeMethod(this, "getTablet", Q_RETURN_ARG(TabletProxy*, tabletProxy), Q_ARG(QString, tabletId)); + BLOCKING_INVOKE_METHOD(this, "getTablet", Q_RETURN_ARG(TabletProxy*, tabletProxy), Q_ARG(QString, tabletId)); return tabletProxy; } @@ -291,7 +291,7 @@ void TabletProxy::initialScreen(const QVariant& url) { bool TabletProxy::isMessageDialogOpen() { if (QThread::currentThread() != thread()) { bool result = false; - hifi::qt::blockingInvokeMethod(this, "isMessageDialogOpen", Q_RETURN_ARG(bool, result)); + BLOCKING_INVOKE_METHOD(this, "isMessageDialogOpen", Q_RETURN_ARG(bool, result)); return result; } @@ -316,7 +316,7 @@ void TabletProxy::emitWebEvent(const QVariant& msg) { bool TabletProxy::isPathLoaded(const QVariant& path) { if (QThread::currentThread() != thread()) { bool result = false; - hifi::qt::blockingInvokeMethod(this, "isPathLoaded", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, path)); + BLOCKING_INVOKE_METHOD(this, "isPathLoaded", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, path)); return result; } @@ -479,7 +479,7 @@ void TabletProxy::loadQMLSource(const QVariant& path) { bool TabletProxy::pushOntoStack(const QVariant& path) { if (QThread::currentThread() != thread()) { bool result = false; - hifi::qt::blockingInvokeMethod(this, "pushOntoStack", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, path)); + BLOCKING_INVOKE_METHOD(this, "pushOntoStack", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, path)); return result; } @@ -605,7 +605,7 @@ void TabletProxy::gotoWebScreen(const QString& url, const QString& injectedJavaS TabletButtonProxy* TabletProxy::addButton(const QVariant& properties) { if (QThread::currentThread() != thread()) { TabletButtonProxy* result = nullptr; - hifi::qt::blockingInvokeMethod(this, "addButton", Q_RETURN_ARG(TabletButtonProxy*, result), Q_ARG(QVariant, properties)); + BLOCKING_INVOKE_METHOD(this, "addButton", Q_RETURN_ARG(TabletButtonProxy*, result), Q_ARG(QVariant, properties)); return result; } @@ -632,7 +632,7 @@ TabletButtonProxy* TabletProxy::addButton(const QVariant& properties) { bool TabletProxy::onHomeScreen() { if (QThread::currentThread() != thread()) { bool result = false; - hifi::qt::blockingInvokeMethod(this, "onHomeScreen", Q_RETURN_ARG(bool, result)); + BLOCKING_INVOKE_METHOD(this, "onHomeScreen", Q_RETURN_ARG(bool, result)); return result; } @@ -839,7 +839,7 @@ void TabletButtonProxy::setToolbarButtonProxy(QObject* toolbarButtonProxy) { QVariantMap TabletButtonProxy::getProperties() { if (QThread::currentThread() != thread()) { QVariantMap result; - hifi::qt::blockingInvokeMethod(this, "getProperties", Q_RETURN_ARG(QVariantMap, result)); + BLOCKING_INVOKE_METHOD(this, "getProperties", Q_RETURN_ARG(QVariantMap, result)); return result; } diff --git a/libraries/ui/src/ui/ToolbarScriptingInterface.cpp b/libraries/ui/src/ui/ToolbarScriptingInterface.cpp index adfc15cc83..d01b538004 100644 --- a/libraries/ui/src/ui/ToolbarScriptingInterface.cpp +++ b/libraries/ui/src/ui/ToolbarScriptingInterface.cpp @@ -70,7 +70,7 @@ ToolbarProxy::ToolbarProxy(QObject* qmlObject, QObject* parent) : QmlWrapper(qml ToolbarButtonProxy* ToolbarProxy::addButton(const QVariant& properties) { if (QThread::currentThread() != thread()) { ToolbarButtonProxy* result = nullptr; - hifi::qt::blockingInvokeMethod(this, "addButton", Q_RETURN_ARG(ToolbarButtonProxy*, result), Q_ARG(QVariant, properties)); + BLOCKING_INVOKE_METHOD(this, "addButton", Q_RETURN_ARG(ToolbarButtonProxy*, result), Q_ARG(QVariant, properties)); return result; } @@ -101,7 +101,7 @@ void ToolbarProxy::removeButton(const QVariant& name) { ToolbarProxy* ToolbarScriptingInterface::getToolbar(const QString& toolbarId) { if (QThread::currentThread() != thread()) { ToolbarProxy* result = nullptr; - hifi::qt::blockingInvokeMethod(this, "getToolbar", Q_RETURN_ARG(ToolbarProxy*, result), Q_ARG(QString, toolbarId)); + BLOCKING_INVOKE_METHOD(this, "getToolbar", Q_RETURN_ARG(ToolbarProxy*, result), Q_ARG(QString, toolbarId)); return result; } From 3c9291062d7546d14693974ba99f841d0b778a02 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 30 Jun 2017 11:31:48 -0700 Subject: [PATCH 0702/1049] Clarify setDisplayTexture cases, also fixing crash bug --- scripts/system/spectatorCamera.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 5154322daa..4df168fde4 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -223,9 +223,19 @@ } } + // Function Name: setDisplay() + // + // Description: + // -There are two bool variables that determine what the "url" argument to "setDisplayTexture(url)" should be: + // Camera on/off switch, and the "Monitor Shows" on/off switch. + // This results in four possible cases for the argument. Those four cases are: + // 1. Camera is off; "Monitor Shows" is "HMD Preview": "url" is "" + // 2. Camera is off; "Monitor Shows" is "Camera View": "url" is "" + // 3. Camera is on; "Monitor Shows" is "HMD Preview": "url" is "" + // 4. Camera is on; "Monitor Shows" is "Camera View": "url" is "resource://spectatorCameraFrame" function setDisplay(showCameraView) { - // It would be fancy if (showCameraView && !cameraUpdateInterval) would show instructions, but that's out of scope for now. - var url = (showCameraView && cameraUpdateInterval) ? "resource://spectatorCameraFrame" : ""; + // It would be fancy if the app would show instructions when (url === ""), but that's out of scope for now. + var url = (camera && showCameraView && cameraUpdateInterval) ? "resource://spectatorCameraFrame" : ""; Window.setDisplayTexture(url); } const MONITOR_SHOWS_CAMERA_VIEW_DEFAULT = false; From 237872e4779ad9a6c0e3007e1b3e9dae3ca04c25 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 30 Jun 2017 12:47:01 -0700 Subject: [PATCH 0703/1049] sizes and order of IKTargetVarVec and IKTargetVec are now the same. Also, A change in how the bone name to bone index lookup occurs exposed a bug in Rig::computeAvatarBoundingCapsule(), basically it was not actually preforming IK, and the ik targets were in the wrong coordinate frame. So when IK was actually performed it would give bad results. This bug is now fixed. --- .../animation/src/AnimInverseKinematics.cpp | 56 +++++++------------ .../animation/src/AnimInverseKinematics.h | 4 -- libraries/animation/src/IKTarget.h | 2 +- libraries/animation/src/Rig.cpp | 18 +++--- 4 files changed, 32 insertions(+), 48 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index ea87fab4c0..5ea628d1f4 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -150,24 +150,26 @@ void AnimInverseKinematics::setTargetVars(const QString& jointName, const QStrin } void AnimInverseKinematics::computeTargets(const AnimVariantMap& animVars, std::vector& targets, const AnimPoseVec& underPoses) { - // build a list of valid targets from _targetVarVec and animVars - _maxTargetIndex = -1; + _hipsTargetIndex = -1; - bool removeUnfoundJoints = false; + + targets.reserve(_targetVarVec.size()); for (auto& targetVar : _targetVarVec) { + + // update targetVar jointIndex cache if (targetVar.jointIndex == -1) { - // this targetVar hasn't been validated yet... int jointIndex = _skeleton->nameToJointIndex(targetVar.jointName); if (jointIndex >= 0) { // this targetVar has a valid joint --> cache the indices targetVar.jointIndex = jointIndex; } else { qCWarning(animation) << "AnimInverseKinematics could not find jointName" << targetVar.jointName << "in skeleton"; - removeUnfoundJoints = true; } - } else { - IKTarget target; + } + + IKTarget target; + if (targetVar.jointIndex != -1) { target.setType(animVars.lookup(targetVar.typeVar, (int)IKTarget::Type::RotationAndPosition)); if (target.getType() != IKTarget::Type::Unknown) { AnimPose absPose = _skeleton->getAbsolutePose(targetVar.jointIndex, underPoses); @@ -189,35 +191,16 @@ void AnimInverseKinematics::computeTargets(const AnimVariantMap& animVars, std:: glm::vec3 poleReferenceVector = animVars.lookupRigToGeometryVector(targetVar.poleReferenceVectorVar, Vectors::UNIT_Z); target.setPoleReferenceVector(glm::normalize(poleReferenceVector)); - targets.push_back(target); - - if (targetVar.jointIndex > _maxTargetIndex) { - _maxTargetIndex = targetVar.jointIndex; - } - // record the index of the hips ik target. if (target.getIndex() == _hipsIndex) { - _hipsTargetIndex = (int)targets.size() - 1; + _hipsTargetIndex = (int)targets.size(); } } + } else { + target.setType((int)IKTarget::Type::Unknown); } - } - if (removeUnfoundJoints) { - int numVars = (int)_targetVarVec.size(); - int i = 0; - while (i < numVars) { - if (_targetVarVec[i].jointIndex == -1) { - if (numVars > 1) { - // swap i for last element - _targetVarVec[i] = _targetVarVec[numVars - 1]; - } - _targetVarVec.pop_back(); - --numVars; - } else { - ++i; - } - } + targets.push_back(target); } } @@ -258,10 +241,15 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< // solve all targets for (size_t i = 0; i < targets.size(); i++) { - if (targets[i].getType() == IKTarget::Type::Spline) { + switch (targets[i].getType()) { + case IKTarget::Type::Unknown: + break; + case IKTarget::Type::Spline: solveTargetWithSpline(context, targets[i], absolutePoses, debug, jointChainInfoVec[i]); - } else { + break; + default: solveTargetWithCCD(context, targets[i], absolutePoses, debug, jointChainInfoVec[i]); + break; } } @@ -317,7 +305,7 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< // finally set the relative rotation of each tip to agree with absolute target rotation for (auto& target: targets) { int tipIndex = target.getIndex(); - int parentIndex = _skeleton->getParentIndex(tipIndex); + int parentIndex = (tipIndex >= 0) ? _skeleton->getParentIndex(tipIndex) : -1; // update rotationOnly targets that don't lie on the ik chain of other ik targets. if (parentIndex != -1 && !_rotationAccumulators[tipIndex].isDirty() && target.getType() == IKTarget::Type::RotationOnly) { @@ -1430,8 +1418,6 @@ void AnimInverseKinematics::setSkeletonInternal(AnimSkeleton::ConstPointer skele targetVar.jointIndex = -1; } - _maxTargetIndex = -1; - for (auto& accumulator: _rotationAccumulators) { accumulator.clearAndClean(); } diff --git a/libraries/animation/src/AnimInverseKinematics.h b/libraries/animation/src/AnimInverseKinematics.h index 38288aa288..fb462cbf50 100644 --- a/libraries/animation/src/AnimInverseKinematics.h +++ b/libraries/animation/src/AnimInverseKinematics.h @@ -156,10 +156,6 @@ protected: int _leftHandIndex { -1 }; int _rightHandIndex { -1 }; - // _maxTargetIndex is tracked to help optimize the recalculation of absolute poses - // during the the cyclic coordinate descent algorithm - int _maxTargetIndex { 0 }; - float _maxErrorOnLastSolve { FLT_MAX }; bool _previousEnableDebugIKTargets { false }; SolutionSource _solutionSource { SolutionSource::RelaxToUnderPoses }; diff --git a/libraries/animation/src/IKTarget.h b/libraries/animation/src/IKTarget.h index 5567539659..a86ae0ca8b 100644 --- a/libraries/animation/src/IKTarget.h +++ b/libraries/animation/src/IKTarget.h @@ -57,7 +57,7 @@ private: bool _poleVectorEnabled { false }; int _index { -1 }; Type _type { Type::RotationAndPosition }; - float _weight; + float _weight { 0.0f }; float _flexCoefficients[MAX_FLEX_COEFFICIENTS]; size_t _numFlexCoefficients; }; diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 3d04b0b26f..7b11465062 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -1707,36 +1707,38 @@ void Rig::computeAvatarBoundingCapsule( AnimPose geometryToRig = _modelOffset * _geometryOffset; - AnimPose hips(glm::vec3(1), glm::quat(), glm::vec3()); + glm::vec3 hipsPosition(0.0f); int hipsIndex = indexOfJoint("Hips"); if (hipsIndex >= 0) { - hips = geometryToRig * _animSkeleton->getAbsoluteBindPose(hipsIndex); + hipsPosition = transformPoint(_geometryToRigTransform, _animSkeleton->getAbsoluteDefaultPose(hipsIndex).trans()); } AnimVariantMap animVars; + animVars.setRigToGeometryTransform(_rigToGeometryTransform); glm::quat handRotation = glm::angleAxis(PI, Vectors::UNIT_X); - animVars.set("leftHandPosition", hips.trans()); + animVars.set("leftHandPosition", hipsPosition); animVars.set("leftHandRotation", handRotation); animVars.set("leftHandType", (int)IKTarget::Type::RotationAndPosition); - animVars.set("rightHandPosition", hips.trans()); + animVars.set("rightHandPosition", hipsPosition); animVars.set("rightHandRotation", handRotation); animVars.set("rightHandType", (int)IKTarget::Type::RotationAndPosition); int rightFootIndex = indexOfJoint("RightFoot"); int leftFootIndex = indexOfJoint("LeftFoot"); if (rightFootIndex != -1 && leftFootIndex != -1) { - glm::vec3 foot = Vectors::ZERO; + glm::vec3 geomFootPosition = glm::vec3(0.0f, _animSkeleton->getAbsoluteDefaultPose(rightFootIndex).trans().y, 0.0f); + glm::vec3 footPosition = transformPoint(_geometryToRigTransform, geomFootPosition); glm::quat footRotation = glm::angleAxis(0.5f * PI, Vectors::UNIT_X); - animVars.set("leftFootPosition", foot); + animVars.set("leftFootPosition", footPosition); animVars.set("leftFootRotation", footRotation); animVars.set("leftFootType", (int)IKTarget::Type::RotationAndPosition); - animVars.set("rightFootPosition", foot); + animVars.set("rightFootPosition", footPosition); animVars.set("rightFootRotation", footRotation); animVars.set("rightFootType", (int)IKTarget::Type::RotationAndPosition); } // call overlay twice: once to verify AnimPoseVec joints and again to do the IK AnimNode::Triggers triggersOut; - AnimContext context(false, false, false, glm::mat4(), glm::mat4()); + AnimContext context(false, false, false, _geometryToRigTransform, _rigToGeometryTransform); float dt = 1.0f; // the value of this does not matter ikNode.overlay(animVars, context, dt, triggersOut, _animSkeleton->getRelativeBindPoses()); AnimPoseVec finalPoses = ikNode.overlay(animVars, context, dt, triggersOut, _animSkeleton->getRelativeBindPoses()); From 133af0b522d47372f37d80bff79adeda38945259 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Fri, 30 Jun 2017 12:55:11 -0700 Subject: [PATCH 0704/1049] jittery, still not working in tablet --- interface/src/ui/ResourceImageItem.cpp | 62 ++++++++++++++++--- interface/src/ui/ResourceImageItem.h | 5 ++ .../display-plugins/OpenGLDisplayPlugin.cpp | 1 + 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index b4a726dcef..396b81c7df 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -20,35 +20,46 @@ #include ResourceImageItem::ResourceImageItem(QQuickItem* parent) : QQuickFramebufferObject(parent) { - connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(update())); + connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(onUpdateTimer())); +} + +void ResourceImageItem::onUpdateTimer() { + qDebug() << "onUpdateTimer called"; + // turn timer off if not visible + if (!isVisible()) { + m_updateTimer.stop(); + } else { + update(); + } } void ResourceImageItem::setUrl(const QString& url) { if (url != m_url) { m_url = url; } + update(); } void ResourceImageItem::setReady(bool ready) { if (ready != m_ready) { m_ready = ready; - update(); - /* if (m_ready) { // 10 HZ for now. Also this serves as a small // delay before getting the network texture, which // helps a lot. TODO: find better way. + qDebug() << "setReady called"; m_updateTimer.start(100); } else { m_updateTimer.stop(); update(); - }*/ + } } } void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { ResourceImageItem* resourceImageItem = static_cast(item); + resourceImageItem->setFlag(QQuickItem::ItemHasContents); bool urlChanged = false; if( _url != resourceImageItem->getUrl()) { _url = resourceImageItem->getUrl(); @@ -65,7 +76,6 @@ void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { _networkTexture = DependencyManager::get()->getTexture(_url); } - resourceImageItem->forceActiveFocus(); if (_ready && _networkTexture && _networkTexture->isLoaded()) { if(_fboMutex.tryLock()) { qApp->getActiveDisplayPlugin()->copyTextureToQuickFramebuffer(_networkTexture, _copyFbo, &_fenceSync); @@ -73,6 +83,7 @@ void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { } } + glFlush(); } @@ -82,13 +93,46 @@ QOpenGLFramebufferObject* ResourceImageItemRenderer::createFramebufferObject(con _copyFbo = new QOpenGLFramebufferObject(size, format); return new QOpenGLFramebufferObject(size, format); } - +/* +// this is helpful to look for problems without the confusion of the framebufer stuff void ResourceImageItemRenderer::render() { + qDebug() << "rendering"; static int colorInt = 0; - float red = (float)((colorInt++ % 20)/(float)20); + float red = (float)((colorInt++ % 50)/(float)50); glClearColor(red, 0.0f, 0.0f, 0.5f + red/2.0f); glClear(GL_COLOR_BUFFER_BIT); glFlush(); - _window->resetOpenGLState(); - update(); // schedule a call to render again on next frame (only do this when camera is on, in the future) + update(); + //_window->resetOpenGLState(); + // we only want to call Renderer::update once per timer tick, and + // so waiting on the fenceSync and resetting it does that + auto f = QOpenGLContext::currentContext()->extraFunctions(); + if (_fenceSync) { + f->glWaitSync(_fenceSync, 0, GL_TIMEOUT_IGNORED); + f->glDeleteSync(_fenceSync); + _fenceSync = 0; + update(); + } +} +*/ +void ResourceImageItemRenderer::render() { + auto f = QOpenGLContext::currentContext()->extraFunctions(); + bool doUpdate = false; + if (_fenceSync) { + f->glWaitSync(_fenceSync, 0, GL_TIMEOUT_IGNORED); + f->glDeleteSync(_fenceSync); + _fenceSync = 0; + doUpdate = true; + } + if (_ready) { + _fboMutex.lock(); + _copyFbo->bind(); + QOpenGLFramebufferObject::blitFramebuffer(framebufferObject(), _copyFbo, GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT, GL_NEAREST); + _copyFbo->release(); + _fboMutex.unlock(); + if (doUpdate) { + update(); + } + } + glFlush(); } diff --git a/interface/src/ui/ResourceImageItem.h b/interface/src/ui/ResourceImageItem.h index 9b1d685ee1..c2cc857829 100644 --- a/interface/src/ui/ResourceImageItem.h +++ b/interface/src/ui/ResourceImageItem.h @@ -44,10 +44,15 @@ public: bool getReady() const { return m_ready; } void setReady(bool ready); QQuickFramebufferObject::Renderer* createRenderer() const override { return new ResourceImageItemRenderer; } + +public slots: + void onUpdateTimer(); + private: QString m_url; bool m_ready { false }; QTimer m_updateTimer; // TODO: something more clever + }; #endif // hifi_ResourceImageItem_h diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index e028fd14c1..a8a80af01e 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -847,6 +847,7 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, targetTexture, 0); qDebug() << "error" << glGetError(); + // TODO: perhaps maintain aspect ratio glBlitNamedFramebuffer(fbo[0], fbo[1], 0, 0, networkTexture->getWidth(), networkTexture->getHeight(), 0, 0, target->width(), target->height(), GL_COLOR_BUFFER_BIT, GL_NEAREST); qDebug() << "error" << glGetError(); From aba164b26e2e08ad6ea1a9e48b55d509c183f27a Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 30 Jun 2017 13:27:53 -0700 Subject: [PATCH 0705/1049] more clean up of Rig::computeAvatarBoundingCapsule --- libraries/animation/src/Rig.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 7b11465062..0dfeb43f3d 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -1704,9 +1704,6 @@ void Rig::computeAvatarBoundingCapsule( ikNode.setTargetVars("RightFoot", "rightFootPosition", "rightFootRotation", "rightFootType", "rightFootWeight", 1.0f, {}, QString(), QString(), QString()); - - AnimPose geometryToRig = _modelOffset * _geometryOffset; - glm::vec3 hipsPosition(0.0f); int hipsIndex = indexOfJoint("Hips"); if (hipsIndex >= 0) { @@ -1771,14 +1768,15 @@ void Rig::computeAvatarBoundingCapsule( // compute bounding shape parameters // NOTE: we assume that the longest side of totalExtents is the yAxis... - glm::vec3 diagonal = (geometryToRig * totalExtents.maximum) - (geometryToRig * totalExtents.minimum); + glm::vec3 diagonal = (transformPoint(_geometryToRigTransform, totalExtents.maximum) - + transformPoint(_geometryToRigTransform, totalExtents.minimum)); // ... and assume the radiusOut is half the RMS of the X and Z sides: radiusOut = 0.5f * sqrtf(0.5f * (diagonal.x * diagonal.x + diagonal.z * diagonal.z)); heightOut = diagonal.y - 2.0f * radiusOut; glm::vec3 rootPosition = finalPoses[geometry.rootJointIndex].trans(); - glm::vec3 rigCenter = (geometryToRig * (0.5f * (totalExtents.maximum + totalExtents.minimum))); - localOffsetOut = rigCenter - (geometryToRig * rootPosition); + glm::vec3 rigCenter = transformPoint(_geometryToRigTransform, (0.5f * (totalExtents.maximum + totalExtents.minimum))); + localOffsetOut = rigCenter - transformPoint(_geometryToRigTransform, rootPosition); } bool Rig::transitionHandPose(float deltaTime, float totalDuration, AnimPose& controlledHandPose, bool isLeftHand, From 9bd80ec2bf938a95c7035e3912efde38b220bfdc Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 30 Jun 2017 14:07:00 -0700 Subject: [PATCH 0706/1049] Improve naming and API --- interface/src/Application.cpp | 2 +- interface/src/SecondaryCamera.cpp | 40 ++++++++++++---------- interface/src/SecondaryCamera.h | 10 +++--- scripts/system/spectatorCamera.js | 56 +++++++++++-------------------- 4 files changed, 49 insertions(+), 59 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 75bcee0703..7437f2dd03 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1946,7 +1946,7 @@ void Application::initializeGL() { render::CullFunctor cullFunctor = LODManager::shouldRender; static const QString RENDER_FORWARD = "HIFI_RENDER_FORWARD"; bool isDeferred = !QProcessEnvironment::systemEnvironment().contains(RENDER_FORWARD); - _renderEngine->addJob("SecondaryCameraFrame", cullFunctor); + _renderEngine->addJob("SecondaryCameraJob", cullFunctor); _renderEngine->addJob("RenderMainView", cullFunctor, isDeferred); _renderEngine->load(); _renderEngine->registerScene(_main3DScene); diff --git a/interface/src/SecondaryCamera.cpp b/interface/src/SecondaryCamera.cpp index 3f8c26c2e3..f5e7cca8f6 100644 --- a/interface/src/SecondaryCamera.cpp +++ b/interface/src/SecondaryCamera.cpp @@ -9,6 +9,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include "Application.h" #include "SecondaryCamera.h" #include #include @@ -28,19 +29,7 @@ void MainRenderTask::build(JobModel& task, const render::Varying& inputs, render } } -void SecondaryCameraRenderTaskConfig::resetSize(int width, int height) { // FIXME: Add an arg here for "destinationFramebuffer" - bool wasEnabled = isEnabled(); - setEnabled(false); - auto textureCache = DependencyManager::get(); - textureCache->resetSpectatorCameraFramebuffer(width, height); // FIXME: Call the correct reset function based on the "destinationFramebuffer" arg - setEnabled(wasEnabled); -} - -void SecondaryCameraRenderTaskConfig::resetSizeSpectatorCamera(int width, int height) { // Carefully adjust the framebuffer / texture. - resetSize(width, height); -} - -class BeginSecondaryCameraFrame { // Changes renderContext for our framebuffer and view. +class SecondaryCameraJob { // Changes renderContext for our framebuffer and view. QUuid _attachedEntityId{}; glm::vec3 _position{}; glm::quat _orientation{}; @@ -50,9 +39,9 @@ class BeginSecondaryCameraFrame { // Changes renderContext for our framebuffer EntityPropertyFlags _attachedEntityPropertyFlags; QSharedPointer _entityScriptingInterface; public: - using Config = BeginSecondaryCameraFrameConfig; - using JobModel = render::Job::ModelO; - BeginSecondaryCameraFrame() { + using Config = SecondaryCameraJobConfig; + using JobModel = render::Job::ModelO; + SecondaryCameraJob() { _cachedArgsPointer = std::make_shared(_cachedArgs); _entityScriptingInterface = DependencyManager::get(); _attachedEntityPropertyFlags += PROP_POSITION; @@ -113,6 +102,23 @@ protected: RenderArgsPointer _cachedArgsPointer; }; +void SecondaryCameraJobConfig::enableSecondaryCameraRenderConfigs(bool enabled) { + qApp->getRenderEngine()->getConfiguration()->getConfig()->setEnabled(enabled); + setEnabled(enabled); +} + +void SecondaryCameraJobConfig::resetSizeSpectatorCamera(int width, int height) { // Carefully adjust the framebuffer / texture. + qApp->getRenderEngine()->getConfiguration()->getConfig()->resetSize(width, height); +} + +void SecondaryCameraRenderTaskConfig::resetSize(int width, int height) { // FIXME: Add an arg here for "destinationFramebuffer" + bool wasEnabled = isEnabled(); + setEnabled(false); + auto textureCache = DependencyManager::get(); + textureCache->resetSpectatorCameraFramebuffer(width, height); // FIXME: Call the correct reset function based on the "destinationFramebuffer" arg + setEnabled(wasEnabled); +} + class EndSecondaryCameraFrame { // Restores renderContext. public: using JobModel = render::Job::ModelI; @@ -133,7 +139,7 @@ public: }; void SecondaryCameraRenderTask::build(JobModel& task, const render::Varying& inputs, render::Varying& outputs, render::CullFunctor cullFunctor) { - const auto cachedArg = task.addJob("BeginSecondaryCamera"); + const auto cachedArg = task.addJob("SecondaryCamera"); const auto items = task.addJob("FetchCullSort", cullFunctor); assert(items.canCast()); task.addJob("RenderDeferredTask", items); diff --git a/interface/src/SecondaryCamera.h b/interface/src/SecondaryCamera.h index 15e6f41ad2..e06332f4e9 100644 --- a/interface/src/SecondaryCamera.h +++ b/interface/src/SecondaryCamera.h @@ -28,7 +28,7 @@ public: void build(JobModel& task, const render::Varying& inputs, render::Varying& outputs, render::CullFunctor cullFunctor, bool isDeferred = true); }; -class BeginSecondaryCameraFrameConfig : public render::Task::Config { // Exposes secondary camera parameters to JavaScript. +class SecondaryCameraJobConfig : public render::Task::Config { // Exposes secondary camera parameters to JavaScript. Q_OBJECT Q_PROPERTY(QUuid attachedEntityId MEMBER attachedEntityId NOTIFY dirty) // entity whose properties define camera position and orientation Q_PROPERTY(glm::vec3 position MEMBER position NOTIFY dirty) // of viewpoint to render from @@ -43,21 +43,21 @@ public: float vFoV{ 45.0f }; float nearClipPlaneDistance{ 0.1f }; float farClipPlaneDistance{ 100.0f }; - BeginSecondaryCameraFrameConfig() : render::Task::Config(false) {} + SecondaryCameraJobConfig() : render::Task::Config(false) {} signals: void dirty(); +public slots: + void enableSecondaryCameraRenderConfigs(bool enabled); + void resetSizeSpectatorCamera(int width, int height); }; class SecondaryCameraRenderTaskConfig : public render::Task::Config { Q_OBJECT public: SecondaryCameraRenderTaskConfig() : render::Task::Config(false) {} -private: void resetSize(int width, int height); signals: void dirty(); -public slots: - void resetSizeSpectatorCamera(int width, int height); }; class SecondaryCameraRenderTask { diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index fd09943212..00b774c483 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -28,33 +28,6 @@ Vec3.multiply(distance, Quat.getForward(orientation || MyAvatar.orientation))); } - // Function Name: updateRenderFromCamera() - // - // Description: - // -The update function for the spectator camera. Modifies the camera's position - // and orientation. - // - // Relevant Variables: - // -spectatorFrameRenderConfig: The render configuration of the spectator camera - // render job. It controls the rendered texture size of the spectator camera. - // -beginSpectatorFrameRenderConfig: The render configuration of the spectator camera - // render job. It controls the orientation and position of the secondary camera whose viewport is rendered to - // the texture. - // -viewFinderOverlay: The in-world overlay that displays the spectator camera's view. - // -camera: The in-world entity that corresponds to the spectator camera. - // -cameraIsDynamic: "false" for now while we figure out why dynamic, parented overlays - // drift with respect to their parent. - var spectatorFrameRenderConfig = Render.getConfig("SecondaryCameraFrame"); - var beginSpectatorFrameRenderConfig = Render.getConfig("BeginSecondaryCamera"); - var viewFinderOverlay = false; - var camera = false; - var cameraIsDynamic = false; - function updateRenderFromCamera() { - var cameraData = Entities.getEntityProperties(camera, ['position', 'rotation']); - beginSpectatorFrameRenderConfig.orientation = cameraData.rotation; - beginSpectatorFrameRenderConfig.position = cameraData.position; - } - // Function Name: spectatorCameraOn() // // Description: @@ -62,6 +35,13 @@ // spawn the camera entity. // // Relevant Variables: + // -spectatorCameraConfig: The render configuration of the spectator camera + // render job. It controls the orientation and position of the secondary camera whose viewport is rendered to + // the texture, as well as the rendered texture size. + // -viewFinderOverlay: The in-world overlay that displays the spectator camera's view. + // -camera: The in-world entity that corresponds to the spectator camera. + // -cameraIsDynamic: "false" for now while we figure out why dynamic, parented overlays + // drift with respect to their parent. // -vFoV: The vertical field of view of the spectator camera. // -nearClipPlaneDistance: The near clip plane distance of the spectator camera (aka "camera"). // -farClipPlaneDistance: The far clip plane distance of the spectator camera. @@ -71,6 +51,10 @@ // -viewFinderOverlayDim: The x, y, and z dimensions of the viewFinderOverlay. // -camera: The camera model which is grabbable. // -viewFinderOverlay: The preview of what the spectator camera is viewing, placed inside the glass pane. + var spectatorCameraConfig = Render.getConfig("SecondaryCamera"); + var viewFinderOverlay = false; + var camera = false; + var cameraIsDynamic = false; var vFoV = 45.0; var nearClipPlaneDistance = 0.1; var farClipPlaneDistance = 100.0; @@ -83,11 +67,11 @@ var viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: 0 }; function spectatorCameraOn() { // Sets the special texture size based on the window it is displayed in, which doesn't include the menu bar - spectatorFrameRenderConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); - spectatorFrameRenderConfig.enabled = beginSpectatorFrameRenderConfig.enabled = true; - beginSpectatorFrameRenderConfig.vFoV = vFoV; - beginSpectatorFrameRenderConfig.nearClipPlaneDistance = nearClipPlaneDistance; - beginSpectatorFrameRenderConfig.farClipPlaneDistance = farClipPlaneDistance; + spectatorCameraConfig.enableSecondaryCameraRenderConfigs(true); + spectatorCameraConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); + spectatorCameraConfig.vFoV = vFoV; + spectatorCameraConfig.nearClipPlaneDistance = nearClipPlaneDistance; + spectatorCameraConfig.farClipPlaneDistance = farClipPlaneDistance; cameraRotation = MyAvatar.orientation, cameraPosition = inFrontOf(1, Vec3.sum(MyAvatar.position, { x: 0, y: 0.3, z: 0 })); camera = Entities.addEntity({ "angularDamping": 1, @@ -107,7 +91,7 @@ "type": "Model", "userData": "{\"grabbableKey\":{\"grabbable\":true}}" }, true); - beginSpectatorFrameRenderConfig.attachedEntityId = camera; + spectatorCameraConfig.attachedEntityId = camera; updateOverlay(); setDisplay(monitorShowsCameraView); } @@ -118,8 +102,8 @@ // -Call this function to shut down the spectator camera and // destroy the camera entity. function spectatorCameraOff() { - spectatorFrameRenderConfig.enabled = beginSpectatorFrameRenderConfig.enabled = false; - beginSpectatorFrameRenderConfig.attachedEntityId = false; + spectatorCameraConfig.attachedEntityId = false; + spectatorCameraConfig.enableSecondaryCameraRenderConfigs(false); if (camera) { Entities.deleteEntity(camera); } @@ -292,7 +276,7 @@ viewFinderOverlayDim = { x: glassPaneWidth, y: -glassPaneWidth, z: 0 }; } updateOverlay(); - spectatorFrameRenderConfig.resetSizeSpectatorCamera(geometryChanged.width, geometryChanged.height); + spectatorCameraConfig.resetSizeSpectatorCamera(geometryChanged.width, geometryChanged.height); setDisplay(monitorShowsCameraView); } From 85601669e10780c3d9cf05690191049139783210 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 30 Jun 2017 14:09:49 -0700 Subject: [PATCH 0707/1049] Prevent thrashing by limiting to 10 restarts every 10 minutes --- server-console/src/modules/hf-process.js | 25 ++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/server-console/src/modules/hf-process.js b/server-console/src/modules/hf-process.js index b75835c06f..767befec7b 100644 --- a/server-console/src/modules/hf-process.js +++ b/server-console/src/modules/hf-process.js @@ -115,6 +115,8 @@ function Process(name, command, commandArgs, logDirectory) { this.logStderr = null; this.detached = false; this.restartOnCrash = false; + this.restartCount = 0; + this.firstRestartTimestamp = Date.now(); this.state = ProcessStates.STOPPED; }; @@ -269,14 +271,29 @@ Process.prototype = extend(Process.prototype, { clearTimeout(this.stoppingTimeoutID); this.stoppingTimeoutID = null; } - // Grab current state berofe updating it. + // Grab current state before updating it. var unexpectedShutdown = this.state != ProcessStates.STOPPING; this.updateState(ProcessStates.STOPPED); if (unexpectedShutdown && this.restartOnCrash) { - log.warn("Child stopped unexpectedly, restarting."); - this.start(); - return; + var MAX_RESTARTS = 10; + var MAX_RESTARTS_PERIOD = 10; // 10 min + var MSEC_PER_MIN = 1000 * 60; + var now = Date.now(); + var timeDiff = (now - this.firstRestartTimestamp) / MSEC_PER_MIN; + if (timeDiff > MAX_RESTARTS_PERIOD) { + this.firstRestartTimestamp = now; + this.restartCount = 0; + } + + if (this.restartCount < 10) { + this.restartCount++; + + log.warn("Child stopped unexpectedly, restarting."); + this.start(); + } else { + log.warn("Child stopped unexpectedly too many times, not restarting."); + } } } }); From 36dfff78e203d6d35d60b0f86db8fbf515c2eb72 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 30 Jun 2017 15:13:31 -0700 Subject: [PATCH 0708/1049] Emit qDebug() error when trying to change position or orientation while attachedEntityId is defined --- interface/src/SecondaryCamera.cpp | 20 +++++++++++++++++++- interface/src/SecondaryCamera.h | 8 ++++++-- scripts/system/spectatorCamera.js | 10 ++++++++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/interface/src/SecondaryCamera.cpp b/interface/src/SecondaryCamera.cpp index f5e7cca8f6..730733ad13 100644 --- a/interface/src/SecondaryCamera.cpp +++ b/interface/src/SecondaryCamera.cpp @@ -80,7 +80,7 @@ public: }); auto srcViewFrustum = args->getViewFrustum(); - if (_attachedEntityId != QUuid()) { + if (!_attachedEntityId.isNull()) { EntityItemProperties entityProperties = _entityScriptingInterface->getEntityProperties(_attachedEntityId, _attachedEntityPropertyFlags); srcViewFrustum.setPosition(entityProperties.getPosition()); srcViewFrustum.setOrientation(entityProperties.getRotation()); @@ -102,6 +102,24 @@ protected: RenderArgsPointer _cachedArgsPointer; }; +void SecondaryCameraJobConfig::setPosition(glm::vec3 pos) { + if (attachedEntityId.isNull()) { + position = pos; + emit dirty(); + } else { + qDebug() << "ERROR: Cannot set position of SecondaryCamera while attachedEntityId is set."; + } +} + +void SecondaryCameraJobConfig::setOrientation(glm::quat orient) { + if (attachedEntityId.isNull()) { + orientation = orient; + emit dirty(); + } else { + qDebug() << "ERROR: Cannot set orientation of SecondaryCamera while attachedEntityId is set."; + } +} + void SecondaryCameraJobConfig::enableSecondaryCameraRenderConfigs(bool enabled) { qApp->getRenderEngine()->getConfiguration()->getConfig()->setEnabled(enabled); setEnabled(enabled); diff --git a/interface/src/SecondaryCamera.h b/interface/src/SecondaryCamera.h index e06332f4e9..ac82290211 100644 --- a/interface/src/SecondaryCamera.h +++ b/interface/src/SecondaryCamera.h @@ -31,8 +31,8 @@ public: class SecondaryCameraJobConfig : public render::Task::Config { // Exposes secondary camera parameters to JavaScript. Q_OBJECT Q_PROPERTY(QUuid attachedEntityId MEMBER attachedEntityId NOTIFY dirty) // entity whose properties define camera position and orientation - Q_PROPERTY(glm::vec3 position MEMBER position NOTIFY dirty) // of viewpoint to render from - Q_PROPERTY(glm::quat orientation MEMBER orientation NOTIFY dirty) // of viewpoint to render from + Q_PROPERTY(glm::vec3 position READ getPosition WRITE setPosition) // of viewpoint to render from + Q_PROPERTY(glm::quat orientation READ getOrientation WRITE setOrientation) // of viewpoint to render from Q_PROPERTY(float vFoV MEMBER vFoV NOTIFY dirty) // Secondary camera's vertical field of view. In degrees. Q_PROPERTY(float nearClipPlaneDistance MEMBER nearClipPlaneDistance NOTIFY dirty) // Secondary camera's near clip plane distance. In meters. Q_PROPERTY(float farClipPlaneDistance MEMBER farClipPlaneDistance NOTIFY dirty) // Secondary camera's far clip plane distance. In meters. @@ -47,6 +47,10 @@ public: signals: void dirty(); public slots: + glm::vec3 getPosition() { return position; } + void setPosition(glm::vec3 pos); + glm::quat getOrientation() { return orientation; } + void setOrientation(glm::quat orient); void enableSecondaryCameraRenderConfigs(bool enabled); void resetSizeSpectatorCamera(int width, int height); }; diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 00b774c483..3c011cad99 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -36,8 +36,14 @@ // // Relevant Variables: // -spectatorCameraConfig: The render configuration of the spectator camera - // render job. It controls the orientation and position of the secondary camera whose viewport is rendered to - // the texture, as well as the rendered texture size. + // render job. It controls various attributes of the Secondary Camera, such as: + // -The entity ID to follow + // -Position + // -Orientation + // -Rendered texture size + // -Vertical field of view + // -Near clip plane distance + // -Far clip plane distance // -viewFinderOverlay: The in-world overlay that displays the spectator camera's view. // -camera: The in-world entity that corresponds to the spectator camera. // -cameraIsDynamic: "false" for now while we figure out why dynamic, parented overlays From 7851c8002fae08a44cb1c1f89f8b20cb8ee3b08a Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 30 Jun 2017 15:25:33 -0700 Subject: [PATCH 0709/1049] Remove unnecessary guard --- interface/src/SecondaryCamera.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/interface/src/SecondaryCamera.cpp b/interface/src/SecondaryCamera.cpp index 730733ad13..56b8b3ef85 100644 --- a/interface/src/SecondaryCamera.cpp +++ b/interface/src/SecondaryCamera.cpp @@ -49,14 +49,12 @@ public: } void configure(const Config& config) { - if (config.enabled || config.alwaysEnabled) { - _attachedEntityId = config.attachedEntityId; - _position = config.position; - _orientation = config.orientation; - _vFoV = config.vFoV; - _nearClipPlaneDistance = config.nearClipPlaneDistance; - _farClipPlaneDistance = config.farClipPlaneDistance; - } + _attachedEntityId = config.attachedEntityId; + _position = config.position; + _orientation = config.orientation; + _vFoV = config.vFoV; + _nearClipPlaneDistance = config.nearClipPlaneDistance; + _farClipPlaneDistance = config.farClipPlaneDistance; } void run(const render::RenderContextPointer& renderContext, RenderArgsPointer& cachedArgs) { From 577969481da2b54341cd59ead3705a9fbdd1103e Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 30 Jun 2017 23:43:12 +0100 Subject: [PATCH 0710/1049] head puck working --- interface/resources/controllers/vive.json | 22 ++++++++---------- interface/src/avatar/MyAvatar.cpp | 3 ++- plugins/openvr/src/OpenVrDisplayPlugin.cpp | 2 +- plugins/openvr/src/ViveControllerManager.cpp | 24 +++++++++++++++++++- plugins/openvr/src/ViveControllerManager.h | 3 +++ 5 files changed, 38 insertions(+), 16 deletions(-) diff --git a/interface/resources/controllers/vive.json b/interface/resources/controllers/vive.json index a0e9bd30d4..8f58ef3c98 100644 --- a/interface/resources/controllers/vive.json +++ b/interface/resources/controllers/vive.json @@ -34,36 +34,32 @@ { "from": "Vive.RSCenter", "to": "Standard.RightPrimaryThumb" }, { "from": "Vive.RightApplicationMenu", "to": "Standard.RightSecondaryThumb" }, - { "from": "Vive.LeftHand", "to": "Standard.LeftHand", "when": [ "Application.InHMD" ] }, - { "from": "Vive.RightHand", "to": "Standard.RightHand", "when": [ "Application.InHMD" ] }, + { "from": "Vive.LeftHand", "to": "Standard.LeftHand"}, + { "from": "Vive.RightHand", "to": "Standard.RightHand"}, { "from": "Vive.LeftFoot", "to" : "Standard.LeftFoot", - "filters" : [{"type" : "lowVelocity", "rotation" : 1.0, "translation": 1.0}], - "when": [ "Application.InHMD" ] + "filters" : [{"type" : "lowVelocity", "rotation" : 1.0, "translation": 1.0}] }, { "from": "Vive.RightFoot", "to" : "Standard.RightFoot", - "filters" : [{"type" : "lowVelocity", "rotation" : 1.0, "translation": 1.0}], - "when": [ "Application.InHMD" ] + "filters" : [{"type" : "lowVelocity", "rotation" : 1.0, "translation": 1.0}] }, { "from": "Vive.Hips", "to" : "Standard.Hips", - "filters" : [{"type" : "lowVelocity", "rotation" : 0.01, "translation": 0.01}], - "when": [ "Application.InHMD" ] + "filters" : [{"type" : "lowVelocity", "rotation" : 0.01, "translation": 0.01}] }, { "from": "Vive.Spine2", "to" : "Standard.Spine2", - "filters" : [{"type" : "lowVelocity", "rotation" : 0.01, "translation": 0.01}], - "when": [ "Application.InHMD" ] + "filters" : [{"type" : "lowVelocity", "rotation" : 0.01, "translation": 0.01}] }, - { "from": "Vive.Head", "to" : "Standard.Head", "when": [ "Application.InHMD" ] }, + { "from": "Vive.Head", "to" : "Standard.Head"}, - { "from": "Vive.RightArm", "to" : "Standard.RightArm", "when": [ "Application.InHMD" ] }, - { "from": "Vive.LeftArm", "to" : "Standard.LeftArm", "when": [ "Application.InHMD" ] } + { "from": "Vive.RightArm", "to" : "Standard.RightArm"}, + { "from": "Vive.LeftArm", "to" : "Standard.LeftArm"} ] } diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index e5c4f4b972..d676f473e0 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1620,7 +1620,8 @@ void MyAvatar::prepareForPhysicsSimulation() { _characterController.setParentVelocity(parentVelocity); _characterController.setPositionAndOrientation(getPosition(), getOrientation()); - if (qApp->isHMDMode()) { + auto headPose = getHeadControllerPoseInAvatarFrame(); + if (headPose.isValid()) { _follow.prePhysicsUpdate(*this, deriveBodyFromHMDSensor(), _bodySensorMatrix, hasDriveInput()); } else { _follow.deactivate(); diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index 7a73c91c7d..c2bb349146 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -525,7 +525,7 @@ void OpenVrDisplayPlugin::resetSensors() { _sensorResetMat = glm::inverse(cancelOutRollAndPitch(m)); } -static bool isBadPose(vr::HmdMatrix34_t* mat) { +/static bool isBadPose(vr::HmdMatrix34_t* mat) { if (mat->m[1][3] < -0.2f) { return true; } diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index 40e33a26dd..a0ad41615d 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -123,6 +123,22 @@ static QString deviceTrackingResultToString(vr::ETrackingResult trackingResult) return result; } +static glm::mat4 calculateResetMat() { + auto chaperone = vr::VRChaperone(); + if (chaperone) { + float const UI_RADIUS = 1.0f; + float const UI_HEIGHT = 1.6f; + float const UI_Z_OFFSET = 0.5; + + float xSize, zSize; + chaperone->GetPlayAreaSize(&xSize, &zSize); + glm::vec3 uiPos(0.0f, UI_HEIGHT, UI_RADIUS - (0.5f * zSize) - UI_Z_OFFSET); + + return glm::inverse(createMatFromQuatAndPos(glm::quat(), uiPos)); + } + return glm::mat4(); +} + bool ViveControllerManager::isDesktopMode() { if (_container) { return !_container->getActiveDisplayPlugin()->isHmd(); @@ -228,7 +244,13 @@ void ViveControllerManager::pluginUpdate(float deltaTime, const controller::Inpu } if (isDesktopMode()) { - qDebug() << "In desktop mode"; + if (!_resetMatCalculated) { + _resetMat = calculateResetMat(); + _resetMatCalculated = true; + } + + _system->GetDeviceToAbsoluteTrackingPose(vr::TrackingUniverseStanding, 0, _nextSimPoseData.vrPoses, vr::k_unMaxTrackedDeviceCount); + _nextSimPoseData.update(_resetMat); } auto userInputMapper = DependencyManager::get(); diff --git a/plugins/openvr/src/ViveControllerManager.h b/plugins/openvr/src/ViveControllerManager.h index f1fcb8403e..50ea8aef47 100644 --- a/plugins/openvr/src/ViveControllerManager.h +++ b/plugins/openvr/src/ViveControllerManager.h @@ -192,6 +192,9 @@ private: bool isDesktopMode(); bool _registeredWithInputMapper { false }; bool _modelLoaded { false }; + bool _resetMatCalculated { false }; + bool _pullInputData { false }; + glm::mat4 _resetMat { glm::mat4() }; model::Geometry _modelGeometry; gpu::TexturePointer _texture; From 455233dc161c88613a8acce96aae785be559dc44 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Fri, 30 Jun 2017 16:08:40 -0700 Subject: [PATCH 0711/1049] black background when camera is off --- interface/src/ui/ResourceImageItem.cpp | 5 ++++- interface/src/ui/ResourceImageItem.h | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index 396b81c7df..30275bdf14 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -17,7 +17,6 @@ #include #include -#include ResourceImageItem::ResourceImageItem(QQuickItem* parent) : QQuickFramebufferObject(parent) { connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(onUpdateTimer())); @@ -118,6 +117,10 @@ void ResourceImageItemRenderer::render() { void ResourceImageItemRenderer::render() { auto f = QOpenGLContext::currentContext()->extraFunctions(); bool doUpdate = false; + // black background + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT); + if (_fenceSync) { f->glWaitSync(_fenceSync, 0, GL_TIMEOUT_IGNORED); f->glDeleteSync(_fenceSync); diff --git a/interface/src/ui/ResourceImageItem.h b/interface/src/ui/ResourceImageItem.h index c2cc857829..b4faed7413 100644 --- a/interface/src/ui/ResourceImageItem.h +++ b/interface/src/ui/ResourceImageItem.h @@ -16,6 +16,8 @@ #include #include +#include + class ResourceImageItemRenderer : public QQuickFramebufferObject::Renderer { public: QOpenGLFramebufferObject* createFramebufferObject(const QSize& size) override; From 51792769b5fc737c255c74f2efc82364fe23dfd7 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Sat, 1 Jul 2017 00:48:36 +0100 Subject: [PATCH 0712/1049] finished vive in desktop mode --- .../qml/hifi/tablet/OpenVrConfiguration.qml | 57 ++++++++++++++++++- plugins/openvr/src/OpenVrDisplayPlugin.cpp | 2 +- plugins/openvr/src/OpenVrHelpers.h | 6 ++ plugins/openvr/src/ViveControllerManager.cpp | 12 +++- plugins/openvr/src/ViveControllerManager.h | 2 +- 5 files changed, 74 insertions(+), 5 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml index 96413534c3..49a73a6e38 100644 --- a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml +++ b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml @@ -642,6 +642,57 @@ Rectangle { } } + Separator { + id: advanceSeperator + width: parent.width + anchors.top: timeToCalibrate.bottom + anchors.topMargin: 10 + } + + RalewayBold { + id: advanceSettings + + text: "Advance Settings" + size: 12 + + color: hifi.colors.white + + anchors.top: advanceSeperator.bottom + anchors.topMargin: 10 + anchors.left: parent.left + anchors.leftMargin: leftMargin + } + + + HifiControls.CheckBox { + id: viveInDesktop + width: 15 + height: 15 + boxRadius: 7 + + anchors.top: advanceSettings.bottom + anchors.topMargin: 5 + anchors.left: openVrConfiguration.left + anchors.leftMargin: leftMargin + 10 + + onClicked: { + sendConfigurationSettings(); + } + } + + RalewayBold { + id: viveDesktopText + size: 10 + text: "Use vive devices in desktop mode" + color: hifi.colors.white + + anchors { + left: viveInDesktop.right + leftMargin: 5 + verticalCenter: viveInDesktop.verticalCenter + } + } + NumberAnimation { id: numberAnimation target: openVrConfiguration @@ -728,6 +779,7 @@ Rectangle { var HmdHead = settings["HMDHead"]; var viveController = settings["handController"]; + var desktopMode = settings["desktopMode"]; if (HmdHead) { headBox.checked = true; @@ -745,6 +797,8 @@ Rectangle { handBox.checked = false; } + viveInDesktop.checked = desktopMode; + initializeButtonState(); updateCalibrationText(); @@ -901,7 +955,8 @@ Rectangle { var settingsObject = { "bodyConfiguration": trackerConfiguration, "headConfiguration": headObject, - "handConfiguration": handObject + "handConfiguration": handObject, + "desktopMode": viveInDesktop.checked } return settingsObject; diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index c2bb349146..7a73c91c7d 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -525,7 +525,7 @@ void OpenVrDisplayPlugin::resetSensors() { _sensorResetMat = glm::inverse(cancelOutRollAndPitch(m)); } -/static bool isBadPose(vr::HmdMatrix34_t* mat) { +static bool isBadPose(vr::HmdMatrix34_t* mat) { if (mat->m[1][3] < -0.2f) { return true; } diff --git a/plugins/openvr/src/OpenVrHelpers.h b/plugins/openvr/src/OpenVrHelpers.h index f4253899a2..c54f2326c2 100644 --- a/plugins/openvr/src/OpenVrHelpers.h +++ b/plugins/openvr/src/OpenVrHelpers.h @@ -82,6 +82,12 @@ struct PoseData { angularVelocities[i] = transformVectorFast(resetMat, toGlm(vrPoses[i].vAngularVelocity)); } } + + void resetToInvalid() { + for (int i = 0; i < vr::k_unMaxTrackedDeviceCount; i++) { + vrPoses[i].bPoseIsValid = false; + } + } }; // FIXME remove once OpenVR header is updated diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index c1fcb78fa7..f14085f9a0 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -166,13 +166,19 @@ bool ViveControllerManager::isSupported() const { void ViveControllerManager::setConfigurationSettings(const QJsonObject configurationSettings) { if (isSupported()) { + if (configurationSettings.contains("desktopMode")) { + qDebug() << configurationSettings["desktopMode"].toBool(); + _desktopMode = configurationSettings["desktopMode"].toBool(); + } _inputDevice->configureCalibrationSettings(configurationSettings); } } QJsonObject ViveControllerManager::configurationSettings() { if (isSupported()) { - return _inputDevice->configurationSettings(); + QJsonObject configurationSettings = _inputDevice->configurationSettings(); + configurationSettings["desktopMode"] = _desktopMode; + return configurationSettings; } return QJsonObject(); @@ -243,7 +249,7 @@ void ViveControllerManager::pluginUpdate(float deltaTime, const controller::Inpu return; } - if (isDesktopMode()) { + if (isDesktopMode() && _desktopMode) { if (!_resetMatCalculated) { _resetMat = calculateResetMat(); _resetMatCalculated = true; @@ -251,6 +257,8 @@ void ViveControllerManager::pluginUpdate(float deltaTime, const controller::Inpu _system->GetDeviceToAbsoluteTrackingPose(vr::TrackingUniverseStanding, 0, _nextSimPoseData.vrPoses, vr::k_unMaxTrackedDeviceCount); _nextSimPoseData.update(_resetMat); + } else if (isDesktopMode()) { + _nextSimPoseData.resetToInvalid(); } auto userInputMapper = DependencyManager::get(); diff --git a/plugins/openvr/src/ViveControllerManager.h b/plugins/openvr/src/ViveControllerManager.h index 50cce6a2ce..275c064a04 100644 --- a/plugins/openvr/src/ViveControllerManager.h +++ b/plugins/openvr/src/ViveControllerManager.h @@ -194,7 +194,7 @@ private: bool _registeredWithInputMapper { false }; bool _modelLoaded { false }; bool _resetMatCalculated { false }; - bool _pullInputData { false }; + bool _desktopMode { false }; glm::mat4 _resetMat { glm::mat4() }; model::Geometry _modelGeometry; gpu::TexturePointer _texture; From 073eae39b2c4f2596be010471deb021be1ca89a9 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Fri, 30 Jun 2017 18:44:32 -0700 Subject: [PATCH 0713/1049] timer now resumes when visible again --- interface/resources/qml/hifi/SpectatorCamera.qml | 9 +++++++-- interface/src/ui/ResourceImageItem.cpp | 9 +-------- interface/src/ui/ResourceImageItem.h | 1 - 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/interface/resources/qml/hifi/SpectatorCamera.qml b/interface/resources/qml/hifi/SpectatorCamera.qml index 10182a3e7b..4540b0a6ea 100644 --- a/interface/resources/qml/hifi/SpectatorCamera.qml +++ b/interface/resources/qml/hifi/SpectatorCamera.qml @@ -39,7 +39,7 @@ Rectangle { letterboxMessage.visible = true; letterboxMessage.popupRadius = 0; } - + // // TITLE BAR START // @@ -221,13 +221,18 @@ Rectangle { Hifi.ResourceImageItem { id: spectatorCameraPreview; url: "resource://spectatorCameraFrame"; - ready: false; + ready: cameraToggleCheckBox.checked; mirrorVertically: true; height: 250; anchors.left: parent.left; anchors.top: cameraToggleCheckBox.bottom; anchors.topMargin: 20; anchors.right: parent.right; + onVisibleChanged: { + ready = cameraToggleCheckBox.checked; + update(); + } + } // "Monitor Shows" Switch Label Glyph diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index 30275bdf14..6f50e6713d 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -23,13 +23,7 @@ ResourceImageItem::ResourceImageItem(QQuickItem* parent) : QQuickFramebufferObje } void ResourceImageItem::onUpdateTimer() { - qDebug() << "onUpdateTimer called"; - // turn timer off if not visible - if (!isVisible()) { - m_updateTimer.stop(); - } else { - update(); - } + update(); } void ResourceImageItem::setUrl(const QString& url) { @@ -46,7 +40,6 @@ void ResourceImageItem::setReady(bool ready) { // 10 HZ for now. Also this serves as a small // delay before getting the network texture, which // helps a lot. TODO: find better way. - qDebug() << "setReady called"; m_updateTimer.start(100); } else { m_updateTimer.stop(); diff --git a/interface/src/ui/ResourceImageItem.h b/interface/src/ui/ResourceImageItem.h index b4faed7413..839324cbf1 100644 --- a/interface/src/ui/ResourceImageItem.h +++ b/interface/src/ui/ResourceImageItem.h @@ -38,7 +38,6 @@ class ResourceImageItem : public QQuickFramebufferObject { Q_OBJECT Q_PROPERTY(QString url READ getUrl WRITE setUrl) Q_PROPERTY(bool ready READ getReady WRITE setReady) - public: ResourceImageItem(QQuickItem* parent = Q_NULLPTR); QString getUrl() const { return m_url; } From e0120ebf3011a3d5cb477c437ba076d8e9d983b2 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Sun, 2 Jul 2017 03:20:07 +0100 Subject: [PATCH 0714/1049] Rocket Hands --- .../marketplace/rocketHands/rockethands.js | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 unpublishedScripts/marketplace/rocketHands/rockethands.js diff --git a/unpublishedScripts/marketplace/rocketHands/rockethands.js b/unpublishedScripts/marketplace/rocketHands/rockethands.js new file mode 100644 index 0000000000..678e51565d --- /dev/null +++ b/unpublishedScripts/marketplace/rocketHands/rockethands.js @@ -0,0 +1,43 @@ +"use strict"; + +/* + rockethands.js + system + + Created by Cain Kilgore on 30/06/2017 + Copyright 2017 High Fidelity, Inc. + + Distributed under the Apache License, Version 2.0. + See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +*/ + +(function() { + var isRocketing = false; + + Script.setInterval(function() { + if (Controller.Hardware.Vive) { + var rightHand = Controller.getPoseValue(Controller.Hardware.Vive.RightHand); + var getHip = MyAvatar.getJointPosition("Hips"); + var worldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, rightHand.translation)); + + if ((worldControllerPos.y > (getHip.y - 0.1)) && (worldControllerPos.y < (getHip.y + 0.1))) { + if (rightHand.rotation.y < 0.25 && rightHand.rotation.y > -0.25) { + isRocketing = true; + Controller.triggerHapticPulse(0.1, 120, 2); + MyAvatar.motorReferenceFrame = "world"; + var moveVector = Vec3.multiply(Quat.getFront(Camera.getOrientation()), 10); + if(!MyAvatar.isFlying()) { + moveVector = Vec3.sum(moveVector, {x: 0, y: 1, z: 0}); + } + MyAvatar.motorVelocity = moveVector; + MyAvatar.motorTimescale = 1.0; + } else { + if (isRocketing) { + MyAvatar.motorVelocity = 0; + isRocketing = false; + } + } + } + } + }, 100); +}()); \ No newline at end of file From a693a61ec891dd3f44fcd2f1d9e06eabb7353f04 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Sun, 2 Jul 2017 03:20:54 +0100 Subject: [PATCH 0715/1049] Cleanup --- scripts/developer/rockethands.js | 35 -------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 scripts/developer/rockethands.js diff --git a/scripts/developer/rockethands.js b/scripts/developer/rockethands.js deleted file mode 100644 index b68d6cc9c6..0000000000 --- a/scripts/developer/rockethands.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; - -// -// rockethands.js -// system -// -// Created by Cain Kilgore on 30/06/2017 -// Copyright 2017 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -(function() { - function logToConsole(message) { - console.log("[rockethands.js] " + message); - } - - logToConsole("Rockethands.js script is now active."); - - Script.setInterval(function() { - if(Controller.Hardware.Vive) { - var rightHand = Controller.getPoseValue(Controller.Hardware.Vive.RightHand).rotation.y; - - // logToConsole("Y VALUE: " + rightHand); - if(rightHand < -0.1 && rightHand > -0.4) { - logToConsole("Pointing down.. eye position: " + Camera.getOrientation().x + ", " + Camera.getOrientation().y + ", " + Camera.getOrientation().z + " - we have liftoff - I think!"); - MyAvatar.motorReferenceFrame = "world"; - // MyAvatar.motorVelocity = {x: Camera.getOrientation().x, y: Camera.getOrientation().y*3, z: Camera.getOrientation().z}; - MyAvatar.motorVelocity = Camera.getOrientation()*3; - MyAvatar.motorTimescale = 1.0; - } - } - }, 1000); -}()); From 44f0b8bd6043484d9aadb14e2e5c2171e1935f98 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Sun, 2 Jul 2017 11:41:33 +0100 Subject: [PATCH 0716/1049] Support for Oculus & Vive - cleaned up some code, using Script.connect instead of setInterval --- .../marketplace/rocketHands/rockethands.js | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/unpublishedScripts/marketplace/rocketHands/rockethands.js b/unpublishedScripts/marketplace/rocketHands/rockethands.js index 678e51565d..a4a4cf777c 100644 --- a/unpublishedScripts/marketplace/rocketHands/rockethands.js +++ b/unpublishedScripts/marketplace/rocketHands/rockethands.js @@ -13,15 +13,18 @@ (function() { var isRocketing = false; + MyAvatar.motorVelocity = 0; - Script.setInterval(function() { - if (Controller.Hardware.Vive) { - var rightHand = Controller.getPoseValue(Controller.Hardware.Vive.RightHand); - var getHip = MyAvatar.getJointPosition("Hips"); - var worldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, rightHand.translation)); - - if ((worldControllerPos.y > (getHip.y - 0.1)) && (worldControllerPos.y < (getHip.y + 0.1))) { - if (rightHand.rotation.y < 0.25 && rightHand.rotation.y > -0.25) { + function checkRocketting() { + if (Controller.Hardware.Vive || Controller.Hardware.OculusTouch) { + var leftHand = Controller.getPoseValue(Controller.Standard.LeftHand); + var rightHand = Controller.getPoseValue(Controller.Standard.RightHand); + var leftWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, leftHand.translation)); + var rightWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, rightHand.translation)); + var hipPosition = MyAvatar.getJointPosition("Hips"); + + if ((leftWorldControllerPos.y > (hipPosition.y - 0.1)) && (leftWorldControllerPos.y < (hipPosition.y + 0.1)) && rightWorldControllerPos.y > (hipPosition.y - 0.1) && (rightWorldControllerPos.y < (hipPosition.y + 0.1))) { + if (leftHand.rotation.y < 0.25 && leftHand.rotation.y > -0.25 && rightHand.rotation.y < 0.25 && rightHand.rotation.y > -0.25) { isRocketing = true; Controller.triggerHapticPulse(0.1, 120, 2); MyAvatar.motorReferenceFrame = "world"; @@ -31,13 +34,20 @@ } MyAvatar.motorVelocity = moveVector; MyAvatar.motorTimescale = 1.0; - } else { - if (isRocketing) { - MyAvatar.motorVelocity = 0; - isRocketing = false; - } - } + } else { + if (isRocketing) { + MyAvatar.motorVelocity = 0; + isRocketing = false; + } + } + } else { + if (isRocketing) { + MyAvatar.motorVelocity = 0; + isRocketing = false; + } } } - }, 100); + }; + + Script.update.connect(checkRocketting); }()); \ No newline at end of file From 5fbcd494be53abca97c18cfad02ceae3c3469c13 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Mon, 3 Jul 2017 16:46:58 +0100 Subject: [PATCH 0717/1049] made final requested changes --- plugins/openvr/src/ViveControllerManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index 825d709b2a..2f9aa4405a 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -385,8 +385,8 @@ void ViveControllerManager::InputDevice::emitCalibrationStatus() { QJsonObject status = QJsonObject(); status["calibrated"] = _calibrated; status["configuration"] = configToString(_preferedConfig); - status["head_puck"] = (_headConfig == HeadConfig::Puck) ? true : false; - status["hand_pucks"] = (_handConfig == HandConfig::Pucks) ? true : false; + status["head_puck"] = (_headConfig == HeadConfig::Puck); + status["hand_pucks"] = (_handConfig == HandConfig::Pucks); status["puckCount"] = (int)_validTrackedObjects.size(); status["UI"] = _calibrate; From 7d382d9da0bbd70dc3e726fff4ef52cc1e0af85d Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 3 Jul 2017 17:47:54 +0100 Subject: [PATCH 0718/1049] Fixed spelling, added is in HMD Check, removed Haptic Feedback as it wasn't part of the WL --- .../marketplace/rocketHands/rockethands.js | 56 ++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/unpublishedScripts/marketplace/rocketHands/rockethands.js b/unpublishedScripts/marketplace/rocketHands/rockethands.js index a4a4cf777c..0e8746add1 100644 --- a/unpublishedScripts/marketplace/rocketHands/rockethands.js +++ b/unpublishedScripts/marketplace/rocketHands/rockethands.js @@ -12,39 +12,45 @@ */ (function() { - var isRocketing = false; + var isRocketting = false; MyAvatar.motorVelocity = 0; function checkRocketting() { - if (Controller.Hardware.Vive || Controller.Hardware.OculusTouch) { - var leftHand = Controller.getPoseValue(Controller.Standard.LeftHand); - var rightHand = Controller.getPoseValue(Controller.Standard.RightHand); - var leftWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, leftHand.translation)); - var rightWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, rightHand.translation)); - var hipPosition = MyAvatar.getJointPosition("Hips"); - - if ((leftWorldControllerPos.y > (hipPosition.y - 0.1)) && (leftWorldControllerPos.y < (hipPosition.y + 0.1)) && rightWorldControllerPos.y > (hipPosition.y - 0.1) && (rightWorldControllerPos.y < (hipPosition.y + 0.1))) { - if (leftHand.rotation.y < 0.25 && leftHand.rotation.y > -0.25 && rightHand.rotation.y < 0.25 && rightHand.rotation.y > -0.25) { - isRocketing = true; - Controller.triggerHapticPulse(0.1, 120, 2); - MyAvatar.motorReferenceFrame = "world"; - var moveVector = Vec3.multiply(Quat.getFront(Camera.getOrientation()), 10); - if(!MyAvatar.isFlying()) { - moveVector = Vec3.sum(moveVector, {x: 0, y: 1, z: 0}); + if (HMD.active) { + if (Controller.Hardware.Vive || Controller.Hardware.OculusTouch) { + var leftHand = Controller.getPoseValue(Controller.Standard.LeftHand); + var rightHand = Controller.getPoseValue(Controller.Standard.RightHand); + var leftWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, leftHand.translation)); + var rightWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, rightHand.translation)); + var hipPosition = MyAvatar.getJointPosition("Hips"); + + if ((leftWorldControllerPos.y > (hipPosition.y - 0.1)) && (leftWorldControllerPos.y < (hipPosition.y + 0.1)) && rightWorldControllerPos.y > (hipPosition.y - 0.1) && (rightWorldControllerPos.y < (hipPosition.y + 0.1))) { + if (leftHand.rotation.y < 0.25 && leftHand.rotation.y > -0.25 && rightHand.rotation.y < 0.25 && rightHand.rotation.y > -0.25) { + isRocketting = true; + MyAvatar.motorReferenceFrame = "world"; + var moveVector = Vec3.multiply(Quat.getFront(Camera.getOrientation()), 10); + if(!MyAvatar.isFlying()) { + moveVector = Vec3.sum(moveVector, {x: 0, y: 1, z: 0}); + } + MyAvatar.motorVelocity = moveVector; + MyAvatar.motorTimescale = 1.0; + } else { + if (isRocketting) { + MyAvatar.motorVelocity = 0; + isRocketting = false; + } } - MyAvatar.motorVelocity = moveVector; - MyAvatar.motorTimescale = 1.0; } else { - if (isRocketing) { + if (isRocketting) { MyAvatar.motorVelocity = 0; - isRocketing = false; + isRocketting = false; } } - } else { - if (isRocketing) { - MyAvatar.motorVelocity = 0; - isRocketing = false; - } + } + } else { + if(isRocketting) { + MyAvatar.motorVelocity = 0; + isRocketting = false; } } }; From 2c53b5b372312ea7ec800a1d4721ec48a2b1c7d7 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 3 Jul 2017 19:09:54 +0100 Subject: [PATCH 0719/1049] QA Cleanup --- .../marketplace/rocketHands/rockethands.js | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/unpublishedScripts/marketplace/rocketHands/rockethands.js b/unpublishedScripts/marketplace/rocketHands/rockethands.js index 0e8746add1..f8a22be579 100644 --- a/unpublishedScripts/marketplace/rocketHands/rockethands.js +++ b/unpublishedScripts/marketplace/rocketHands/rockethands.js @@ -12,10 +12,9 @@ */ (function() { - var isRocketting = false; - MyAvatar.motorVelocity = 0; + var isRocketing = false; - function checkRocketting() { + function checkRocketing() { if (HMD.active) { if (Controller.Hardware.Vive || Controller.Hardware.OculusTouch) { var leftHand = Controller.getPoseValue(Controller.Standard.LeftHand); @@ -23,37 +22,36 @@ var leftWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, leftHand.translation)); var rightWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, rightHand.translation)); var hipPosition = MyAvatar.getJointPosition("Hips"); + var controllerHipThreshold = 0.1; + var controllerRotationThreshold = 0.25; - if ((leftWorldControllerPos.y > (hipPosition.y - 0.1)) && (leftWorldControllerPos.y < (hipPosition.y + 0.1)) && rightWorldControllerPos.y > (hipPosition.y - 0.1) && (rightWorldControllerPos.y < (hipPosition.y + 0.1))) { - if (leftHand.rotation.y < 0.25 && leftHand.rotation.y > -0.25 && rightHand.rotation.y < 0.25 && rightHand.rotation.y > -0.25) { - isRocketting = true; + if ((leftWorldControllerPos.y > (hipPosition.y - controllerHipThreshold)) && (leftWorldControllerPos.y < (hipPosition.y + controllerHipThreshold)) && rightWorldControllerPos.y > (hipPosition.y - controllerHipThreshold) && (rightWorldControllerPos.y < (hipPosition.y + controllerHipThreshold))) { + if (leftHand.rotation.y < controllerRotationThreshold && leftHand.rotation.y > -controllerRotationThreshold && rightHand.rotation.y < controllerRotationThreshold && rightHand.rotation.y > -controllerRotationThreshold) { + isRocketing = true; MyAvatar.motorReferenceFrame = "world"; var moveVector = Vec3.multiply(Quat.getFront(Camera.getOrientation()), 10); - if(!MyAvatar.isFlying()) { + if (!MyAvatar.isFlying()) { moveVector = Vec3.sum(moveVector, {x: 0, y: 1, z: 0}); } MyAvatar.motorVelocity = moveVector; MyAvatar.motorTimescale = 1.0; } else { - if (isRocketting) { - MyAvatar.motorVelocity = 0; - isRocketting = false; - } + checkCanStopRocketing(); } } else { - if (isRocketting) { - MyAvatar.motorVelocity = 0; - isRocketting = false; - } + checkCanStopRocketing(); } } } else { - if(isRocketting) { - MyAvatar.motorVelocity = 0; - isRocketting = false; - } + checkCanStopRocketing(); } }; - Script.update.connect(checkRocketting); + function checkCanStopRocketing() { + if(isRocketing) { + MyAvatar.motorVelocity = 0; + isRocketing = false; + } + } + Script.update.connect(checkRocketing); }()); \ No newline at end of file From 44624c5fab70acde0af6e94c95f2b2bcf5465e58 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 3 Jul 2017 19:11:57 +0100 Subject: [PATCH 0720/1049] space --- unpublishedScripts/marketplace/rocketHands/rockethands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unpublishedScripts/marketplace/rocketHands/rockethands.js b/unpublishedScripts/marketplace/rocketHands/rockethands.js index f8a22be579..e7d60d47a6 100644 --- a/unpublishedScripts/marketplace/rocketHands/rockethands.js +++ b/unpublishedScripts/marketplace/rocketHands/rockethands.js @@ -48,7 +48,7 @@ }; function checkCanStopRocketing() { - if(isRocketing) { + if (isRocketing) { MyAvatar.motorVelocity = 0; isRocketing = false; } From 5f600b4ea96b01efed573ec319f6a225988b5362 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 3 Jul 2017 19:31:41 +0100 Subject: [PATCH 0721/1049] Cleanup again --- .../marketplace/rocketHands/rockethands.js | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/unpublishedScripts/marketplace/rocketHands/rockethands.js b/unpublishedScripts/marketplace/rocketHands/rockethands.js index e7d60d47a6..da80a84432 100644 --- a/unpublishedScripts/marketplace/rocketHands/rockethands.js +++ b/unpublishedScripts/marketplace/rocketHands/rockethands.js @@ -22,28 +22,34 @@ var leftWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, leftHand.translation)); var rightWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, rightHand.translation)); var hipPosition = MyAvatar.getJointPosition("Hips"); - var controllerHipThreshold = 0.1; - var controllerRotationThreshold = 0.25; + var controllerHipThreshold = 0.1; // In Meters. Experimentally determined. Used to figure out if user's hands are "close enough" to their hips. + var controllerRotationThreshold = 0.25; // In Radians. Experimentally determined. Used to figure out if user's hands are within a rotation threshold. - if ((leftWorldControllerPos.y > (hipPosition.y - controllerHipThreshold)) && (leftWorldControllerPos.y < (hipPosition.y + controllerHipThreshold)) && rightWorldControllerPos.y > (hipPosition.y - controllerHipThreshold) && (rightWorldControllerPos.y < (hipPosition.y + controllerHipThreshold))) { - if (leftHand.rotation.y < controllerRotationThreshold && leftHand.rotation.y > -controllerRotationThreshold && rightHand.rotation.y < controllerRotationThreshold && rightHand.rotation.y > -controllerRotationThreshold) { - isRocketing = true; - MyAvatar.motorReferenceFrame = "world"; - var moveVector = Vec3.multiply(Quat.getFront(Camera.getOrientation()), 10); - if (!MyAvatar.isFlying()) { - moveVector = Vec3.sum(moveVector, {x: 0, y: 1, z: 0}); + if ((leftWorldControllerPos.y > (hipPosition.y - controllerHipThreshold)) && + (leftWorldControllerPos.y < (hipPosition.y + controllerHipThreshold)) && + (rightWorldControllerPos.y > (hipPosition.y - controllerHipThreshold)) && + (rightWorldControllerPos.y < (hipPosition.y + controllerHipThreshold))) { + if ((leftHand.rotation.y < controllerRotationThreshold) && + (leftHand.rotation.y > -controllerRotationThreshold) && + (rightHand.rotation.y < controllerRotationThreshold) && + (rightHand.rotation.y > -controllerRotationThreshold)) { + isRocketing = true; + MyAvatar.motorReferenceFrame = "world"; + var moveVector = Vec3.multiply(Quat.getFront(Camera.getOrientation()), 10); + if (!MyAvatar.isFlying()) { + moveVector = Vec3.sum(moveVector, {x: 0, y: 1, z: 0}); + } + MyAvatar.motorVelocity = moveVector; + MyAvatar.motorTimescale = 1.0; + } else { + checkCanStopRocketing(); } - MyAvatar.motorVelocity = moveVector; - MyAvatar.motorTimescale = 1.0; } else { checkCanStopRocketing(); } - } else { - checkCanStopRocketing(); } - } - } else { - checkCanStopRocketing(); + } else { + checkCanStopRocketing(); } }; From bfcddcf3b7ecaf1b95361ebd44b4831a18f40194 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 3 Jul 2017 19:53:29 +0100 Subject: [PATCH 0722/1049] Cleaned up the code, created a function to check if the hands are in the right position. --- .../marketplace/rocketHands/rockethands.js | 62 ++++++++++--------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/unpublishedScripts/marketplace/rocketHands/rockethands.js b/unpublishedScripts/marketplace/rocketHands/rockethands.js index da80a84432..d5dfe48ea0 100644 --- a/unpublishedScripts/marketplace/rocketHands/rockethands.js +++ b/unpublishedScripts/marketplace/rocketHands/rockethands.js @@ -17,39 +17,23 @@ function checkRocketing() { if (HMD.active) { if (Controller.Hardware.Vive || Controller.Hardware.OculusTouch) { - var leftHand = Controller.getPoseValue(Controller.Standard.LeftHand); - var rightHand = Controller.getPoseValue(Controller.Standard.RightHand); - var leftWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, leftHand.translation)); - var rightWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, rightHand.translation)); - var hipPosition = MyAvatar.getJointPosition("Hips"); - var controllerHipThreshold = 0.1; // In Meters. Experimentally determined. Used to figure out if user's hands are "close enough" to their hips. - var controllerRotationThreshold = 0.25; // In Radians. Experimentally determined. Used to figure out if user's hands are within a rotation threshold. - - if ((leftWorldControllerPos.y > (hipPosition.y - controllerHipThreshold)) && - (leftWorldControllerPos.y < (hipPosition.y + controllerHipThreshold)) && - (rightWorldControllerPos.y > (hipPosition.y - controllerHipThreshold)) && - (rightWorldControllerPos.y < (hipPosition.y + controllerHipThreshold))) { - if ((leftHand.rotation.y < controllerRotationThreshold) && - (leftHand.rotation.y > -controllerRotationThreshold) && - (rightHand.rotation.y < controllerRotationThreshold) && - (rightHand.rotation.y > -controllerRotationThreshold)) { - isRocketing = true; - MyAvatar.motorReferenceFrame = "world"; - var moveVector = Vec3.multiply(Quat.getFront(Camera.getOrientation()), 10); - if (!MyAvatar.isFlying()) { - moveVector = Vec3.sum(moveVector, {x: 0, y: 1, z: 0}); - } - MyAvatar.motorVelocity = moveVector; - MyAvatar.motorTimescale = 1.0; - } else { - checkCanStopRocketing(); - } - } else { - checkCanStopRocketing(); + if (canRocket()) { + isRocketing = true; + MyAvatar.motorReferenceFrame = "world"; + var moveVector = Vec3.multiply(Quat.getFront(Camera.getOrientation()), 10); + if (!MyAvatar.isFlying()) { + moveVector = Vec3.sum(moveVector, {x: 0, y: 1, z: 0}); } + MyAvatar.motorVelocity = moveVector; + MyAvatar.motorTimescale = 1.0; + } else { + checkCanStopRocketing(); } } else { checkCanStopRocketing(); + } + } else { + checkCanStopRocketing(); } }; @@ -59,5 +43,25 @@ isRocketing = false; } } + + function canRocket() { + var leftHand = Controller.getPoseValue(Controller.Standard.LeftHand); + var rightHand = Controller.getPoseValue(Controller.Standard.RightHand); + var leftWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, leftHand.translation)); + var rightWorldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, rightHand.translation)); + var hipPosition = MyAvatar.getJointPosition("Hips"); + var controllerHipThreshold = 0.1; // In Meters. Experimentally determined. Used to figure out if user's hands are "close enough" to their hips. + var controllerRotationThreshold = 0.25; // In Radians. Experimentally determined. Used to figure out if user's hands are within a rotation threshold. + + return ((leftWorldControllerPos.y > (hipPosition.y - controllerHipThreshold)) && + (leftWorldControllerPos.y < (hipPosition.y + controllerHipThreshold)) && + (rightWorldControllerPos.y > (hipPosition.y - controllerHipThreshold)) && + (rightWorldControllerPos.y < (hipPosition.y + controllerHipThreshold)) && + leftHand.rotation.y < controllerRotationThreshold && + leftHand.rotation.y > -controllerRotationThreshold && + rightHand.rotation.y < controllerRotationThreshold && + rightHand.rotation.y > -controllerRotationThreshold); + } + Script.update.connect(checkRocketing); }()); \ No newline at end of file From 1c5923914b4cf5bd99388e8a7a39fb459bd77a2d Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 3 Jul 2017 19:58:26 +0100 Subject: [PATCH 0723/1049] Combining three if statements into one! --- .../marketplace/rocketHands/rockethands.js | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/unpublishedScripts/marketplace/rocketHands/rockethands.js b/unpublishedScripts/marketplace/rocketHands/rockethands.js index d5dfe48ea0..1025dcb0aa 100644 --- a/unpublishedScripts/marketplace/rocketHands/rockethands.js +++ b/unpublishedScripts/marketplace/rocketHands/rockethands.js @@ -15,23 +15,15 @@ var isRocketing = false; function checkRocketing() { - if (HMD.active) { - if (Controller.Hardware.Vive || Controller.Hardware.OculusTouch) { - if (canRocket()) { - isRocketing = true; - MyAvatar.motorReferenceFrame = "world"; - var moveVector = Vec3.multiply(Quat.getFront(Camera.getOrientation()), 10); - if (!MyAvatar.isFlying()) { - moveVector = Vec3.sum(moveVector, {x: 0, y: 1, z: 0}); - } - MyAvatar.motorVelocity = moveVector; - MyAvatar.motorTimescale = 1.0; - } else { - checkCanStopRocketing(); - } - } else { - checkCanStopRocketing(); + if (HMD.active && (Controller.Hardware.Vive || Controller.Hardware.OculusTouch) && canRocket()) { + isRocketing = true; + MyAvatar.motorReferenceFrame = "world"; + var moveVector = Vec3.multiply(Quat.getFront(Camera.getOrientation()), 10); + if (!MyAvatar.isFlying()) { + moveVector = Vec3.sum(moveVector, {x: 0, y: 1, z: 0}); } + MyAvatar.motorVelocity = moveVector; + MyAvatar.motorTimescale = 1.0; } else { checkCanStopRocketing(); } From eddb7a349c18334c56a27f24d90d609ff258cb00 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 3 Jul 2017 20:01:01 +0100 Subject: [PATCH 0724/1049] Boilerplate --- unpublishedScripts/marketplace/rocketHands/rockethands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unpublishedScripts/marketplace/rocketHands/rockethands.js b/unpublishedScripts/marketplace/rocketHands/rockethands.js index 1025dcb0aa..672dcf2540 100644 --- a/unpublishedScripts/marketplace/rocketHands/rockethands.js +++ b/unpublishedScripts/marketplace/rocketHands/rockethands.js @@ -2,7 +2,7 @@ /* rockethands.js - system + unpublishedScripts/marketplace/rocketHands/rockethands.js Created by Cain Kilgore on 30/06/2017 Copyright 2017 High Fidelity, Inc. From 38baeabbe5bf4e4625da9c1242140acbe418a1da Mon Sep 17 00:00:00 2001 From: 1P-Cusack <1p-cusack@1stplayable.com> Date: Mon, 3 Jul 2017 13:52:06 -0400 Subject: [PATCH 0725/1049] Add View->Enter First Person Mode in HMD checkbox. When checked, changing to an HMD display will switch the user to first person mode. WL 21425. --- interface/src/Application.cpp | 6 ++++++ interface/src/Menu.cpp | 3 +++ interface/src/Menu.h | 1 + 3 files changed, 10 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 75bcee0703..99ff486d5d 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -6900,6 +6900,12 @@ void Application::updateDisplayMode() { // reset the avatar, to set head and hand palms back to a reasonable default pose. getMyAvatar()->reset(false); + // switch to first person if entering hmd and setting is checked + if (isHmd && menu->isOptionChecked(MenuOption::FirstPersonHMD)) { + menu->setIsOptionChecked(MenuOption::FirstPerson, true); + cameraMenuChanged(); + } + Q_ASSERT_X(_displayPlugin, "Application::updateDisplayMode", "could not find an activated display plugin"); } diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 7d4535c681..9bda575305 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -258,6 +258,9 @@ Menu::Menu() { // View > Overlays addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::Overlays, 0, true); + // View > Enter First Person Mode in HMD + addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::FirstPersonHMD, 0, false); + // Navigate menu ---------------------------------- MenuWrapper* navigateMenu = addMenu("Navigate"); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index cc8e67c8f7..1848a4add7 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -105,6 +105,7 @@ namespace MenuOption { const QString ExpandPhysicsSimulationTiming = "Expand /physics"; const QString ExpandUpdateTiming = "Expand /update"; const QString FirstPerson = "First Person"; + const QString FirstPersonHMD = "Enter First Person Mode in HMD"; const QString FivePointCalibration = "5 Point Calibration"; const QString FixGaze = "Fix Gaze (no saccade)"; const QString Forward = "Forward"; From 6c86c297cb64d1301e3df3a2e5c75104a3b2b51b Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 3 Jul 2017 12:40:52 -0700 Subject: [PATCH 0726/1049] Don't use a blocking connection for a high-frequency function like editOvleray --- interface/src/ui/overlays/Overlays.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index 0c73f1fa70..48d75bf6e1 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -231,9 +231,12 @@ OverlayID Overlays::cloneOverlay(OverlayID id) { bool Overlays::editOverlay(OverlayID id, const QVariant& properties) { if (QThread::currentThread() != thread()) { - bool result; - BLOCKING_INVOKE_METHOD(this, "editOverlay", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id), Q_ARG(QVariant, properties)); - return result; + // NOTE editOverlay can be called very frequently in scripts and can't afford to + // block waiting on the main thread. Additionally, no script actually + // examines the return value and does something useful with it, so use a non-blocking + // invoke and just always return true + QMetaObject::invokeMethod(this, "editOverlay", Q_ARG(OverlayID, id), Q_ARG(QVariant, properties)); + return true; } Overlay::Pointer thisOverlay = getOverlay(id); @@ -246,9 +249,9 @@ bool Overlays::editOverlay(OverlayID id, const QVariant& properties) { bool Overlays::editOverlays(const QVariant& propertiesById) { if (QThread::currentThread() != thread()) { - bool result; - BLOCKING_INVOKE_METHOD(this, "editOverlays", Q_RETURN_ARG(bool, result), Q_ARG(QVariant, propertiesById)); - return result; + // NOTE see comment on editOverlay for why this is not a blocking call + QMetaObject::invokeMethod(this, "editOverlays", Q_ARG(QVariant, propertiesById)); + return true; } QVariantMap map = propertiesById.toMap(); From 373bd0cc8a07d1b3e0afc036622fa84ed2034e4a Mon Sep 17 00:00:00 2001 From: David Kelly Date: Mon, 3 Jul 2017 14:23:23 -0700 Subject: [PATCH 0727/1049] aspect ratio preserved upon blitting, minor qml tweak, warnings fixed --- .../resources/qml/hifi/SpectatorCamera.qml | 2 +- .../display-plugins/OpenGLDisplayPlugin.cpp | 21 +++++++++++++++++-- .../src/display-plugins/OpenGLDisplayPlugin.h | 2 +- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/interface/resources/qml/hifi/SpectatorCamera.qml b/interface/resources/qml/hifi/SpectatorCamera.qml index 4540b0a6ea..e3572a544f 100644 --- a/interface/resources/qml/hifi/SpectatorCamera.qml +++ b/interface/resources/qml/hifi/SpectatorCamera.qml @@ -242,7 +242,7 @@ Rectangle { size: 32; color: hifi.colors.blueHighlight; anchors.top: spectatorCameraPreview.bottom; - anchors.topMargin: 12; + anchors.topMargin: 20; anchors.left: parent.left; } // "Monitor Shows" Switch Label diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index a8a80af01e..24fe40873e 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -841,14 +841,31 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne glBindFramebuffer(GL_FRAMEBUFFER, fbo[0]); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, sourceTexture, 0); qDebug() << "error" << glGetError(); + GLint texWidth, texHeight; + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &texWidth); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &texHeight); // setup destination fbo glBindFramebuffer(GL_FRAMEBUFFER, fbo[1]); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, targetTexture, 0); qDebug() << "error" << glGetError(); - // TODO: perhaps maintain aspect ratio - glBlitNamedFramebuffer(fbo[0], fbo[1], 0, 0, networkTexture->getWidth(), networkTexture->getHeight(), 0, 0, target->width(), target->height(), GL_COLOR_BUFFER_BIT, GL_NEAREST); + + // maintain aspect ratio, filling the width first if possible. If that makes the height too + // much, fill height instead. + GLint newX = 0; + GLint newY = 0; + float aspectRatio = (float)texHeight / (float)texWidth; + GLint newWidth = target->width(); + GLint newHeight = std::round(aspectRatio * (float) target->width()); + if (newHeight > target->height()) { + newHeight = target->height(); + newWidth = std::round((float)target->height() / aspectRatio); + newX = (target->width() - newWidth) / 2; + } else { + newY = (target->height() - newHeight) / 2; + } + glBlitNamedFramebuffer(fbo[0], fbo[1], 0, 0, texWidth, texHeight, newX, newY, newWidth, newHeight, GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT, GL_NEAREST); qDebug() << "error" << glGetError(); // don't delete the textures! diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h index dc2e251d65..237864ded6 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h @@ -79,7 +79,7 @@ public: // Three threads, one for rendering, one for texture transfers, one reserved for the GL driver int getRequiredThreadCount() const override { return 3; } - void copyTextureToQuickFramebuffer(NetworkTexturePointer source, QOpenGLFramebufferObject* target, GLsync* fenceSync); + void copyTextureToQuickFramebuffer(NetworkTexturePointer source, QOpenGLFramebufferObject* target, GLsync* fenceSync) override; protected: friend class PresentThread; From 97edbb7f374da3f9a41c39afecaaee627b1fb5db Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 3 Jul 2017 14:43:44 -0700 Subject: [PATCH 0728/1049] Restore mutex in overlay interface --- interface/src/ui/overlays/Overlays.cpp | 98 +++++++++++++++++++------- interface/src/ui/overlays/Overlays.h | 1 + 2 files changed, 74 insertions(+), 25 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index 0c73f1fa70..1495bc2d77 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -40,19 +40,23 @@ Q_LOGGING_CATEGORY(trace_render_overlays, "trace.render.overlays") void Overlays::cleanupAllOverlays() { + QMap overlaysHUD; + QMap overlaysWorld; { - foreach(Overlay::Pointer overlay, _overlaysHUD) { - _overlaysToDelete.push_back(overlay); - } - foreach(Overlay::Pointer overlay, _overlaysWorld) { - _overlaysToDelete.push_back(overlay); - } - _overlaysHUD.clear(); - _overlaysWorld.clear(); -#if OVERLAY_PANELS - _panels.clear(); -#endif + QMutexLocker locker(&_mutex); + overlaysHUD.swap(_overlaysHUD); + overlaysWorld.swap(_overlaysWorld); } + + foreach(Overlay::Pointer overlay, overlaysHUD) { + _overlaysToDelete.push_back(overlay); + } + foreach(Overlay::Pointer overlay, overlaysWorld) { + _overlaysToDelete.push_back(overlay); + } +#if OVERLAY_PANELS + _panels.clear(); +#endif cleanupOverlaysToDelete(); } @@ -63,14 +67,19 @@ void Overlays::init() { } void Overlays::update(float deltatime) { - + QMap overlaysHUD; + QMap overlaysWorld; { - foreach(Overlay::Pointer thisOverlay, _overlaysHUD) { - thisOverlay->update(deltatime); - } - foreach(Overlay::Pointer thisOverlay, _overlaysWorld) { - thisOverlay->update(deltatime); - } + QMutexLocker locker(&_mutex); + overlaysHUD = _overlaysHUD; + overlaysWorld = _overlaysWorld; + } + + foreach(const auto& thisOverlay, overlaysHUD) { + thisOverlay->update(deltatime); + } + foreach(const auto& thisOverlay, overlaysWorld) { + thisOverlay->update(deltatime); } cleanupOverlaysToDelete(); @@ -110,8 +119,14 @@ void Overlays::renderHUD(RenderArgs* renderArgs) { int height = size.y; mat4 legacyProjection = glm::ortho(0, width, height, 0, -1000, 1000); + QMap overlaysHUD; + { + QMutexLocker locker(&_mutex); + overlaysHUD = _overlaysHUD; + } - foreach(Overlay::Pointer thisOverlay, _overlaysHUD) { + + foreach(Overlay::Pointer thisOverlay, overlaysHUD) { // Reset all batch pipeline settings between overlay geometryCache->useSimpleDrawPipeline(batch); @@ -132,7 +147,10 @@ void Overlays::enable() { _enabled = true; } +// Note, can't be invoked by scripts, but can be called by the InterfaceParentFinder +// class on packet processing threads Overlay::Pointer Overlays::getOverlay(OverlayID id) const { + QMutexLocker locker(&_mutex); if (_overlaysHUD.contains(id)) { return _overlaysHUD[id]; } @@ -193,13 +211,17 @@ OverlayID Overlays::addOverlay(const Overlay::Pointer& overlay) { overlay->setOverlayID(thisID); overlay->setStackOrder(_stackOrder++); if (overlay->is3D()) { - _overlaysWorld[thisID] = overlay; + { + QMutexLocker locker(&_mutex); + _overlaysWorld[thisID] = overlay; + } render::ScenePointer scene = qApp->getMain3DScene(); render::Transaction transaction; overlay->addToScene(overlay, scene, transaction); scene->enqueueTransaction(transaction); } else { + QMutexLocker locker(&_mutex); _overlaysHUD[thisID] = overlay; } @@ -275,6 +297,7 @@ void Overlays::deleteOverlay(OverlayID id) { Overlay::Pointer overlayToDelete; { + QMutexLocker locker(&_mutex); if (_overlaysHUD.contains(id)) { overlayToDelete = _overlaysHUD.take(id); } else if (_overlaysWorld.contains(id)) { @@ -378,7 +401,13 @@ OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { if (!_enabled) { return UNKNOWN_OVERLAY_ID; } - QMapIterator i(_overlaysHUD); + + QMap overlaysHUD; + { + QMutexLocker locker(&_mutex); + overlaysHUD = _overlaysHUD; + } + QMapIterator i(overlaysHUD); const float LARGE_NEGATIVE_FLOAT = -9999999; glm::vec3 origin(pointCopy.x, pointCopy.y, LARGE_NEGATIVE_FLOAT); @@ -466,8 +495,14 @@ RayToOverlayIntersectionResult Overlays::findRayIntersectionInternal(const PickR float bestDistance = std::numeric_limits::max(); bool bestIsFront = false; + QMap overlaysWorld; + { + QMutexLocker locker(&_mutex); + overlaysWorld = _overlaysWorld; + } + RayToOverlayIntersectionResult result; - QMapIterator i(_overlaysWorld); + QMapIterator i(overlaysWorld); while (i.hasNext()) { i.next(); OverlayID thisID = i.key(); @@ -598,13 +633,20 @@ QSizeF Overlays::textSize(OverlayID id, const QString& text) { return result; } - Overlay::Pointer thisOverlay = _overlaysHUD[id]; + Overlay::Pointer thisOverlay; + { + QMutexLocker locker(&_mutex); + thisOverlay = _overlaysHUD[id]; + } if (thisOverlay) { if (auto textOverlay = std::dynamic_pointer_cast(thisOverlay)) { return textOverlay->textSize(text); } } else { - thisOverlay = _overlaysWorld[id]; + { + QMutexLocker locker(&_mutex); + thisOverlay = _overlaysWorld[id]; + } if (auto text3dOverlay = std::dynamic_pointer_cast(thisOverlay)) { return text3dOverlay->textSize(text); } @@ -675,6 +717,7 @@ bool Overlays::isAddedOverlay(OverlayID id) { return result; } + QMutexLocker locker(&_mutex); return _overlaysHUD.contains(id) || _overlaysWorld.contains(id); } @@ -949,8 +992,13 @@ QVector Overlays::findOverlays(const glm::vec3& center, float radius) { return result; } + QMap overlaysWorld; + { + QMutexLocker locker(&_mutex); + overlaysWorld = _overlaysWorld; + } - QMapIterator i(_overlaysWorld); + QMapIterator i(overlaysWorld); int checked = 0; while (i.hasNext()) { checked++; diff --git a/interface/src/ui/overlays/Overlays.h b/interface/src/ui/overlays/Overlays.h index d3fa70225e..bfb775b041 100644 --- a/interface/src/ui/overlays/Overlays.h +++ b/interface/src/ui/overlays/Overlays.h @@ -319,6 +319,7 @@ signals: private: void cleanupOverlaysToDelete(); + mutable QMutex _mutex; QMap _overlaysHUD; QMap _overlaysWorld; #if OVERLAY_PANELS From 99bf100ff82e6a3f190b353c5f1425c1e52abe39 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Mon, 3 Jul 2017 15:19:04 -0700 Subject: [PATCH 0729/1049] fix for jitter and not rendering in tablet --- interface/src/ui/ResourceImageItem.cpp | 72 ++++++++------------------ interface/src/ui/ResourceImageItem.h | 12 ++--- 2 files changed, 29 insertions(+), 55 deletions(-) diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index edb9549850..68ad50f2a1 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -18,34 +18,36 @@ #include -ResourceImageItem::ResourceImageItem(QQuickItem* parent) : QQuickFramebufferObject(parent) { - connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(onUpdateTimer())); -} - -void ResourceImageItem::onUpdateTimer() { - update(); -} - void ResourceImageItem::setUrl(const QString& url) { if (url != m_url) { m_url = url; + update(); } - update(); } void ResourceImageItem::setReady(bool ready) { if (ready != m_ready) { m_ready = ready; - if (m_ready) { - // 10 HZ for now. Also this serves as a small - // delay before getting the network texture, which - // helps a lot. TODO: find better way. - m_updateTimer.start(100); + update(); + } +} + +void ResourceImageItemRenderer::onUpdateTimer() { + if (_ready && _networkTexture && _networkTexture->isLoaded()) { + if(_fboMutex.tryLock()) { + invalidateFramebufferObject(); + qApp->getActiveDisplayPlugin()->copyTextureToQuickFramebuffer(_networkTexture, _copyFbo, &_fenceSync); + _fboMutex.unlock(); } else { - m_updateTimer.stop(); - update(); + qDebug() << "couldn't get a lock, using last frame"; } } + + update(); +} + +ResourceImageItemRenderer::ResourceImageItemRenderer() : QQuickFramebufferObject::Renderer() { + connect(&_updateTimer, SIGNAL(timeout()), this, SLOT(onUpdateTimer())); } void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { @@ -68,18 +70,11 @@ void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { _networkTexture = DependencyManager::get()->getTexture(_url); } - if (_ready && _networkTexture && _networkTexture->isLoaded()) { - if(_fboMutex.tryLock()) { - invalidateFramebufferObject(); - qApp->getActiveDisplayPlugin()->copyTextureToQuickFramebuffer(_networkTexture, _copyFbo, &_fenceSync); - _fboMutex.unlock(); - } else { - qDebug() << "couldn't get a lock, using last frame"; - } - + if (_ready && !_updateTimer.isActive()) { + _updateTimer.start(100); + } else if (!_ready && _updateTimer.isActive()) { + _updateTimer.stop(); } - glFlush(); - } QOpenGLFramebufferObject* ResourceImageItemRenderer::createFramebufferObject(const QSize& size) { @@ -90,28 +85,6 @@ QOpenGLFramebufferObject* ResourceImageItemRenderer::createFramebufferObject(con return new QOpenGLFramebufferObject(size, format); } -/* -// this is helpful to look for problems without the confusion of the framebufer stuff -void ResourceImageItemRenderer::render() { - qDebug() << "rendering"; - static int colorInt = 0; - float red = (float)((colorInt++ % 50)/(float)50); - glClearColor(red, 0.0f, 0.0f, 0.5f + red/2.0f); - glClear(GL_COLOR_BUFFER_BIT); - glFlush(); - update(); - //_window->resetOpenGLState(); - // we only want to call Renderer::update once per timer tick, and - // so waiting on the fenceSync and resetting it does that - auto f = QOpenGLContext::currentContext()->extraFunctions(); - if (_fenceSync) { - f->glWaitSync(_fenceSync, 0, GL_TIMEOUT_IGNORED); - f->glDeleteSync(_fenceSync); - _fenceSync = 0; - update(); - } -} -*/ void ResourceImageItemRenderer::render() { auto f = QOpenGLContext::currentContext()->extraFunctions(); bool doUpdate = false; @@ -136,4 +109,5 @@ void ResourceImageItemRenderer::render() { } } glFlush(); + _window->resetOpenGLState(); } diff --git a/interface/src/ui/ResourceImageItem.h b/interface/src/ui/ResourceImageItem.h index 839324cbf1..2fd106a828 100644 --- a/interface/src/ui/ResourceImageItem.h +++ b/interface/src/ui/ResourceImageItem.h @@ -18,8 +18,10 @@ #include -class ResourceImageItemRenderer : public QQuickFramebufferObject::Renderer { +class ResourceImageItemRenderer : public QObject, public QQuickFramebufferObject::Renderer { + Q_OBJECT public: + ResourceImageItemRenderer(); QOpenGLFramebufferObject* createFramebufferObject(const QSize& size) override; void synchronize(QQuickFramebufferObject* item) override; void render() override; @@ -32,6 +34,9 @@ private: QMutex _fboMutex; QOpenGLFramebufferObject* _copyFbo; GLsync _fenceSync { 0 }; + QTimer _updateTimer; +public slots: + void onUpdateTimer(); }; class ResourceImageItem : public QQuickFramebufferObject { @@ -39,20 +44,15 @@ class ResourceImageItem : public QQuickFramebufferObject { Q_PROPERTY(QString url READ getUrl WRITE setUrl) Q_PROPERTY(bool ready READ getReady WRITE setReady) public: - ResourceImageItem(QQuickItem* parent = Q_NULLPTR); QString getUrl() const { return m_url; } void setUrl(const QString& url); bool getReady() const { return m_ready; } void setReady(bool ready); QQuickFramebufferObject::Renderer* createRenderer() const override { return new ResourceImageItemRenderer; } -public slots: - void onUpdateTimer(); - private: QString m_url; bool m_ready { false }; - QTimer m_updateTimer; // TODO: something more clever }; From 2a3b4b3bfb206816cf278a71683aea277d3dd91e Mon Sep 17 00:00:00 2001 From: David Kelly Date: Mon, 3 Jul 2017 15:54:54 -0700 Subject: [PATCH 0730/1049] minor cleanup, and adjusted includes per austin's suggestion --- interface/src/ui/ResourceImageItem.cpp | 4 +--- interface/src/ui/ResourceImageItem.h | 2 ++ .../src/display-plugins/OpenGLDisplayPlugin.cpp | 9 ++------- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index 68ad50f2a1..fb0f10ac05 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -8,7 +8,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include "Application.h" +//#include "Application.h" #include "ResourceImageItem.h" #include @@ -16,7 +16,6 @@ #include #include -#include void ResourceImageItem::setUrl(const QString& url) { if (url != m_url) { @@ -42,7 +41,6 @@ void ResourceImageItemRenderer::onUpdateTimer() { qDebug() << "couldn't get a lock, using last frame"; } } - update(); } diff --git a/interface/src/ui/ResourceImageItem.h b/interface/src/ui/ResourceImageItem.h index 2fd106a828..2d6e2cf625 100644 --- a/interface/src/ui/ResourceImageItem.h +++ b/interface/src/ui/ResourceImageItem.h @@ -12,6 +12,8 @@ #ifndef hifi_ResourceImageItem_h #define hifi_ResourceImageItem_h +#include "Application.h" + #include #include #include diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index 24fe40873e..63df7fdda9 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -829,18 +829,16 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne GLuint sourceTexture = glBackend->getTextureID(networkTexture->getGPUTexture()); GLuint targetTexture = target->texture(); GLuint fbo[2] {0, 0}; - qDebug() << "initial" << glGetError(); + // need mipmaps for blitting texture glGenerateTextureMipmap(sourceTexture); // create 2 fbos (one for initial texture, second for scaled one) glCreateFramebuffers(2, fbo); - qDebug() << "error" << glGetError(); // setup source fbo glBindFramebuffer(GL_FRAMEBUFFER, fbo[0]); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, sourceTexture, 0); - qDebug() << "error" << glGetError(); GLint texWidth, texHeight; glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &texWidth); glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &texHeight); @@ -848,11 +846,10 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne // setup destination fbo glBindFramebuffer(GL_FRAMEBUFFER, fbo[1]); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, targetTexture, 0); - qDebug() << "error" << glGetError(); // maintain aspect ratio, filling the width first if possible. If that makes the height too - // much, fill height instead. + // much, fill height instead. TODO: only do this when texture changes GLint newX = 0; GLint newY = 0; float aspectRatio = (float)texHeight / (float)texWidth; @@ -866,11 +863,9 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne newY = (target->height() - newHeight) / 2; } glBlitNamedFramebuffer(fbo[0], fbo[1], 0, 0, texWidth, texHeight, newX, newY, newWidth, newHeight, GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT, GL_NEAREST); - qDebug() << "error" << glGetError(); // don't delete the textures! glDeleteFramebuffers(2, fbo); - qDebug() << "error" << glGetError(); *fenceSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); }); } From 36467983d8ac3cce3cce24a76da6592bda79fa94 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Mon, 3 Jul 2017 16:29:26 -0700 Subject: [PATCH 0731/1049] cr stuff --- interface/src/ui/ResourceImageItem.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index fb0f10ac05..9b5595c6ed 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -53,7 +53,7 @@ void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { resourceImageItem->setFlag(QQuickItem::ItemHasContents); bool urlChanged = false; - if( _url != resourceImageItem->getUrl()) { + if (_url != resourceImageItem->getUrl()) { _url = resourceImageItem->getUrl(); urlChanged = true; } @@ -67,9 +67,9 @@ void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { if (_ready && !_url.isNull() && !_url.isEmpty() && (urlChanged || readyChanged || !_networkTexture)) { _networkTexture = DependencyManager::get()->getTexture(_url); } - + static const int UPDATE_TIMER_DELAY_IN_MS = 100; // 100 ms = 10 hz for now if (_ready && !_updateTimer.isActive()) { - _updateTimer.start(100); + _updateTimer.start(UPDATE_TIMER_DELAY_IN_MS); } else if (!_ready && _updateTimer.isActive()) { _updateTimer.stop(); } From 2f6a37ee53fc5e1546a1592259d94d7d71d4ce21 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Mon, 3 Jul 2017 16:31:05 -0700 Subject: [PATCH 0732/1049] Removed interpolation of hand controllers --- libraries/animation/src/Rig.cpp | 79 +++------------------------------ libraries/animation/src/Rig.h | 9 ---- 2 files changed, 6 insertions(+), 82 deletions(-) diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 0dfeb43f3d..c505353174 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -1093,25 +1093,10 @@ void Rig::updateHands(bool leftHandEnabled, bool rightHandEnabled, bool hipsEnab const float ELBOW_POLE_VECTOR_BLEND_FACTOR = 0.95f; if (leftHandEnabled) { - if (!_isLeftHandControlled) { - _leftHandControlTimeRemaining = CONTROL_DURATION; - _isLeftHandControlled = true; - } glm::vec3 handPosition = leftHandPose.trans(); glm::quat handRotation = leftHandPose.rot(); - if (_leftHandControlTimeRemaining > 0.0f) { - // Move hand from non-controlled position to controlled position. - _leftHandControlTimeRemaining = std::max(_leftHandControlTimeRemaining - dt, 0.0f); - AnimPose handPose(Vectors::ONE, handRotation, handPosition); - if (transitionHandPose(_leftHandControlTimeRemaining, CONTROL_DURATION, handPose, - LEFT_HAND, TO_CONTROLLED, handPose)) { - handPosition = handPose.trans(); - handRotation = handPose.rot(); - } - } - if (!hipsEnabled) { // prevent the hand IK targets from intersecting the body capsule glm::vec3 displacement; @@ -1124,9 +1109,6 @@ void Rig::updateHands(bool leftHandEnabled, bool rightHandEnabled, bool hipsEnab _animVars.set("leftHandRotation", handRotation); _animVars.set("leftHandType", (int)IKTarget::Type::RotationAndPosition); - _lastLeftHandControlledPose = AnimPose(Vectors::ONE, handRotation, handPosition); - _isLeftHandControlled = true; - // compute pole vector int handJointIndex = _animSkeleton->nameToJointIndex("LeftHand"); int armJointIndex = _animSkeleton->nameToJointIndex("LeftArm"); @@ -1154,47 +1136,17 @@ void Rig::updateHands(bool leftHandEnabled, bool rightHandEnabled, bool hipsEnab _prevLeftHandPoleVectorValid = false; _animVars.set("leftHandPoleVectorEnabled", false); - if (_isLeftHandControlled) { - _leftHandRelaxTimeRemaining = RELAX_DURATION; - _isLeftHandControlled = false; - } + _animVars.unset("leftHandPosition"); + _animVars.unset("leftHandRotation"); + _animVars.set("leftHandType", (int)IKTarget::Type::HipsRelativeRotationAndPosition); - if (_leftHandRelaxTimeRemaining > 0.0f) { - // Move hand from controlled position to non-controlled position. - _leftHandRelaxTimeRemaining = std::max(_leftHandRelaxTimeRemaining - dt, 0.0f); - AnimPose handPose; - if (transitionHandPose(_leftHandRelaxTimeRemaining, RELAX_DURATION, _lastLeftHandControlledPose, - LEFT_HAND, FROM_CONTROLLED, handPose)) { - _animVars.set("leftHandPosition", handPose.trans()); - _animVars.set("leftHandRotation", handPose.rot()); - _animVars.set("leftHandType", (int)IKTarget::Type::RotationAndPosition); - } - } else { - _animVars.unset("leftHandPosition"); - _animVars.unset("leftHandRotation"); - _animVars.set("leftHandType", (int)IKTarget::Type::HipsRelativeRotationAndPosition); - } } if (rightHandEnabled) { - if (!_isRightHandControlled) { - _rightHandControlTimeRemaining = CONTROL_DURATION; - _isRightHandControlled = true; - } glm::vec3 handPosition = rightHandPose.trans(); glm::quat handRotation = rightHandPose.rot(); - if (_rightHandControlTimeRemaining > 0.0f) { - // Move hand from non-controlled position to controlled position. - _rightHandControlTimeRemaining = std::max(_rightHandControlTimeRemaining - dt, 0.0f); - AnimPose handPose(Vectors::ONE, handRotation, handPosition); - if (transitionHandPose(_rightHandControlTimeRemaining, CONTROL_DURATION, handPose, RIGHT_HAND, TO_CONTROLLED, handPose)) { - handPosition = handPose.trans(); - handRotation = handPose.rot(); - } - } - if (!hipsEnabled) { // prevent the hand IK targets from intersecting the body capsule glm::vec3 displacement; @@ -1207,9 +1159,6 @@ void Rig::updateHands(bool leftHandEnabled, bool rightHandEnabled, bool hipsEnab _animVars.set("rightHandRotation", handRotation); _animVars.set("rightHandType", (int)IKTarget::Type::RotationAndPosition); - _lastRightHandControlledPose = AnimPose(Vectors::ONE, handRotation, handPosition); - _isRightHandControlled = true; - // compute pole vector int handJointIndex = _animSkeleton->nameToJointIndex("RightHand"); int armJointIndex = _animSkeleton->nameToJointIndex("RightArm"); @@ -1237,25 +1186,9 @@ void Rig::updateHands(bool leftHandEnabled, bool rightHandEnabled, bool hipsEnab _prevRightHandPoleVectorValid = false; _animVars.set("rightHandPoleVectorEnabled", false); - if (_isRightHandControlled) { - _rightHandRelaxTimeRemaining = RELAX_DURATION; - _isRightHandControlled = false; - } - - if (_rightHandRelaxTimeRemaining > 0.0f) { - // Move hand from controlled position to non-controlled position. - _rightHandRelaxTimeRemaining = std::max(_rightHandRelaxTimeRemaining - dt, 0.0f); - AnimPose handPose; - if (transitionHandPose(_rightHandRelaxTimeRemaining, RELAX_DURATION, _lastRightHandControlledPose, RIGHT_HAND, FROM_CONTROLLED, handPose)) { - _animVars.set("rightHandPosition", handPose.trans()); - _animVars.set("rightHandRotation", handPose.rot()); - _animVars.set("rightHandType", (int)IKTarget::Type::RotationAndPosition); - } - } else { - _animVars.unset("rightHandPosition"); - _animVars.unset("rightHandRotation"); - _animVars.set("rightHandType", (int)IKTarget::Type::HipsRelativeRotationAndPosition); - } + _animVars.unset("rightHandPosition"); + _animVars.unset("rightHandRotation"); + _animVars.set("rightHandType", (int)IKTarget::Type::HipsRelativeRotationAndPosition); } } diff --git a/libraries/animation/src/Rig.h b/libraries/animation/src/Rig.h index c17a7b9c8f..ec13d98613 100644 --- a/libraries/animation/src/Rig.h +++ b/libraries/animation/src/Rig.h @@ -343,15 +343,6 @@ protected: bool transitionHandPose(float deltaTime, float totalDuration, AnimPose& controlledHandPose, bool isLeftHand, bool isToControlled, AnimPose& returnHandPose); - bool _isLeftHandControlled { false }; - bool _isRightHandControlled { false }; - float _leftHandControlTimeRemaining { 0.0f }; - float _rightHandControlTimeRemaining { 0.0f }; - float _leftHandRelaxTimeRemaining { 0.0f }; - float _rightHandRelaxTimeRemaining { 0.0f }; - AnimPose _lastLeftHandControlledPose; - AnimPose _lastRightHandControlledPose; - glm::vec3 _prevRightFootPoleVector { Vectors::UNIT_Z }; bool _prevRightFootPoleVectorValid { false }; From 7ed1382ac98b4ff0dc0479713126e3832c9b554a Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Mon, 3 Jul 2017 16:32:46 -0700 Subject: [PATCH 0733/1049] ik level interpolation of incoming targets --- .../animation/src/AnimInverseKinematics.cpp | 140 +++++++++++++----- .../animation/src/AnimInverseKinematics.h | 13 +- 2 files changed, 114 insertions(+), 39 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index 5ea628d1f4..dd13279786 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -23,6 +23,8 @@ #include "CubicHermiteSpline.h" #include "AnimUtil.h" +static const float JOINT_CHAIN_INTERP_TIME = 0.25f; + static void lookupJointInfo(const AnimInverseKinematics::JointChainInfo& jointChainInfo, int indexA, int indexB, const AnimInverseKinematics::JointInfo** jointInfoA, @@ -171,6 +173,7 @@ void AnimInverseKinematics::computeTargets(const AnimVariantMap& animVars, std:: IKTarget target; if (targetVar.jointIndex != -1) { target.setType(animVars.lookup(targetVar.typeVar, (int)IKTarget::Type::RotationAndPosition)); + target.setIndex(targetVar.jointIndex); if (target.getType() != IKTarget::Type::Unknown) { AnimPose absPose = _skeleton->getAbsolutePose(targetVar.jointIndex, underPoses); glm::quat rotation = animVars.lookupRigToGeometry(targetVar.rotationVar, absPose.rot()); @@ -178,7 +181,6 @@ void AnimInverseKinematics::computeTargets(const AnimVariantMap& animVars, std:: float weight = animVars.lookup(targetVar.weightVar, targetVar.weight); target.setPose(rotation, translation); - target.setIndex(targetVar.jointIndex); target.setWeight(weight); target.setFlexCoefficients(targetVar.numFlexCoefficients, targetVar.flexCoefficients); @@ -204,7 +206,7 @@ void AnimInverseKinematics::computeTargets(const AnimVariantMap& animVars, std:: } } -void AnimInverseKinematics::solve(const AnimContext& context, const std::vector& targets) { +void AnimInverseKinematics::solve(const AnimContext& context, const std::vector& targets, float dt, JointChainInfoVec& jointChainInfoVec) { // compute absolute poses that correspond to relative target poses AnimPoseVec absolutePoses; absolutePoses.resize(_relativePoses.size()); @@ -218,23 +220,10 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< accumulator.clearAndClean(); } - // initialize a new jointChainInfoVec, this will holds the results for solving each ik chain. - JointInfo defaultJointInfo = { glm::quat(), glm::vec3(), -1, false }; - JointChainInfoVec jointChainInfoVec(targets.size()); - for (size_t i = 0; i < targets.size(); i++) { - int chainDepth = _skeleton->getChainDepth(targets[i].getIndex()); - jointChainInfoVec[i].jointInfoVec.reserve(chainDepth); - jointChainInfoVec[i].target = targets[i]; - for (size_t j = 0; j < chainDepth; j++) { - jointChainInfoVec[i].jointInfoVec.push_back(defaultJointInfo); - } - } - - float maxError = FLT_MAX; + float maxError = 0.0f; int numLoops = 0; const int MAX_IK_LOOPS = 16; - const float MAX_ERROR_TOLERANCE = 0.1f; // cm - while (maxError > MAX_ERROR_TOLERANCE && numLoops < MAX_IK_LOOPS) { + while (numLoops < MAX_IK_LOOPS) { ++numLoops; bool debug = context.getEnableDebugDrawIKChains() && numLoops == MAX_IK_LOOPS; @@ -253,23 +242,45 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< } } - // TODO: do smooth interpolation of joint chains here, if necessary. + // on last iteration, interpolate jointChains, if necessary + if (numLoops == MAX_IK_LOOPS) { + for (size_t i = 0; i < _prevJointChainInfoVec.size(); i++) { + if (_prevJointChainInfoVec[i].timer > 0.0f) { + float alpha = (JOINT_CHAIN_INTERP_TIME - _prevJointChainInfoVec[i].timer) / JOINT_CHAIN_INTERP_TIME; + size_t chainSize = std::min(_prevJointChainInfoVec[i].jointInfoVec.size(), jointChainInfoVec[i].jointInfoVec.size()); + for (size_t j = 0; j < chainSize; j++) { + jointChainInfoVec[i].jointInfoVec[j].rot = safeMix(_prevJointChainInfoVec[i].jointInfoVec[j].rot, jointChainInfoVec[i].jointInfoVec[j].rot, alpha); + jointChainInfoVec[i].jointInfoVec[j].trans = lerp(_prevJointChainInfoVec[i].jointInfoVec[j].trans, jointChainInfoVec[i].jointInfoVec[j].trans, alpha); + } + } + } + } // copy jointChainInfoVecs into accumulators for (size_t i = 0; i < targets.size(); i++) { const std::vector& jointInfoVec = jointChainInfoVec[i].jointInfoVec; - float weight = jointChainInfoVec[i].target.getWeight(); - for (size_t j = 0; j < jointInfoVec.size(); j++) { - const JointInfo& info = jointInfoVec[j]; - if (info.jointIndex >= 0) { - _rotationAccumulators[info.jointIndex].add(info.rot, weight); - _translationAccumulators[info.jointIndex].add(info.trans, weight); + + // don't accumulate disabled or rotation only ik targets. + IKTarget::Type type = jointChainInfoVec[i].target.getType(); + if (type != IKTarget::Type::Unknown && type != IKTarget::Type::RotationOnly) { + float weight = jointChainInfoVec[i].target.getWeight(); + if (weight > 0.0f) { + for (size_t j = 0; j < jointInfoVec.size(); j++) { + const JointInfo& info = jointInfoVec[j]; + if (info.jointIndex >= 0) { + _rotationAccumulators[info.jointIndex].add(info.rot, weight); + _translationAccumulators[info.jointIndex].add(info.trans, weight); + } + } } } } // harvest accumulated rotations and apply the average for (int i = 0; i < (int)_relativePoses.size(); ++i) { + if (i == _hipsIndex) { + continue; // don't apply accumulators to hips + } if (_rotationAccumulators[i].size() > 0) { _relativePoses[i].rot() = _rotationAccumulators[i].getAverage(); _rotationAccumulators[i].clear(); @@ -324,6 +335,28 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< absolutePoses[tipIndex].rot() = targetRotation; } } + + for (size_t i = 0; i < jointChainInfoVec.size(); i++) { + _prevJointChainInfoVec[i].timer = _prevJointChainInfoVec[i].timer - dt; + if (_prevJointChainInfoVec[i].timer <= 0.0f) { + _prevJointChainInfoVec[i] = jointChainInfoVec[i]; + // store relative poses into unknown/rotation only joint chains. + // so we have something to interpolate from if this chain is activated. + IKTarget::Type type = _prevJointChainInfoVec[i].target.getType(); + if (type == IKTarget::Type::Unknown || type == IKTarget::Type::RotationOnly) { + for (size_t j = 0; j < _prevJointChainInfoVec[i].jointInfoVec.size(); j++) { + auto& info = _prevJointChainInfoVec[i].jointInfoVec[j]; + if (info.jointIndex >= 0) { + info.rot = _relativePoses[info.jointIndex].rot(); + info.trans = _relativePoses[info.jointIndex].trans(); + } else { + info.rot = Quaternions::IDENTITY; + info.trans = glm::vec3(0.0f); + } + } + } + } + } } void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, @@ -638,7 +671,7 @@ static CubicHermiteSplineFunctorWithArcLength computeSplineFromTipAndBase(const } // pre-compute information about each joint influeced by this spline IK target. -void AnimInverseKinematics::computeSplineJointInfosForIKTarget(const AnimContext& context, const IKTarget& target) { +void AnimInverseKinematics::computeAndCacheSplineJointInfosForIKTarget(const AnimContext& context, const IKTarget& target) const { std::vector splineJointInfoVec; // build spline between the default poses. @@ -691,13 +724,13 @@ void AnimInverseKinematics::computeSplineJointInfosForIKTarget(const AnimContext _splineJointInfoMap[target.getIndex()] = splineJointInfoVec; } -const std::vector* AnimInverseKinematics::findOrCreateSplineJointInfo(const AnimContext& context, const IKTarget& target) { +const std::vector* AnimInverseKinematics::findOrCreateSplineJointInfo(const AnimContext& context, const IKTarget& target) const { // find or create splineJointInfo for this target auto iter = _splineJointInfoMap.find(target.getIndex()); if (iter != _splineJointInfoMap.end()) { return &(iter->second); } else { - computeSplineJointInfosForIKTarget(context, target); + computeAndCacheSplineJointInfosForIKTarget(context, target); auto iter = _splineJointInfoMap.find(target.getIndex()); if (iter != _splineJointInfoMap.end()) { return &(iter->second); @@ -707,9 +740,8 @@ const std::vector* AnimInverseKinematics return nullptr; } -// AJT: TODO: make this const someday void AnimInverseKinematics::solveTargetWithSpline(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, - bool debug, JointChainInfo& jointChainInfoOut) { + bool debug, JointChainInfo& jointChainInfoOut) const { const int baseIndex = _hipsIndex; @@ -854,18 +886,57 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars _relativePoses = underPoses; } else { + JointChainInfoVec jointChainInfoVec(targets.size()); + { + PROFILE_RANGE_EX(simulation_animation, "ik/jointChainInfo", 0xffff00ff, 0); + + // initialize a new jointChainInfoVec, this will holds the results for solving each ik chain. + JointInfo defaultJointInfo = { glm::quat(), glm::vec3(), -1, false }; + for (size_t i = 0; i < targets.size(); i++) { + int chainDepth = _skeleton->getChainDepth(targets[i].getIndex()); + jointChainInfoVec[i].jointInfoVec.reserve(chainDepth); + jointChainInfoVec[i].target = targets[i]; + int index = targets[i].getIndex(); + for (size_t j = 0; j < chainDepth; j++) { + jointChainInfoVec[i].jointInfoVec.push_back(defaultJointInfo); + jointChainInfoVec[i].jointInfoVec[j].jointIndex = index; + index = _skeleton->getParentIndex(index); + } + } + + _prevJointChainInfoVec.resize(jointChainInfoVec.size()); + for (size_t i = 0; i < _prevJointChainInfoVec.size(); i++) { + if (_prevJointChainInfoVec[i].timer <= 0.0f && + (jointChainInfoVec[i].target.getType() != _prevJointChainInfoVec[i].target.getType() || + jointChainInfoVec[i].target.getPoleVectorEnabled() != _prevJointChainInfoVec[i].target.getPoleVectorEnabled())) { + _prevJointChainInfoVec[i].timer = JOINT_CHAIN_INTERP_TIME; + } + } + } + { PROFILE_RANGE_EX(simulation_animation, "ik/shiftHips", 0xffff00ff, 0); if (_hipsTargetIndex >= 0 && _hipsTargetIndex < (int)targets.size()) { // slam the hips to match the _hipsTarget + AnimPose absPose = targets[_hipsTargetIndex].getPose(); + int parentIndex = _skeleton->getParentIndex(targets[_hipsTargetIndex].getIndex()); - if (parentIndex != -1) { - _relativePoses[_hipsIndex] = _skeleton->getAbsolutePose(parentIndex, _relativePoses).inverse() * absPose; - } else { - _relativePoses[_hipsIndex] = absPose; + AnimPose parentAbsPose = _skeleton->getAbsolutePose(parentIndex, _relativePoses); + + // do smooth interpolation of hips here, if necessary. + if (_prevJointChainInfoVec[_hipsTargetIndex].timer > 0.0f) { + float alpha = (JOINT_CHAIN_INTERP_TIME - _prevJointChainInfoVec[_hipsTargetIndex].timer) / JOINT_CHAIN_INTERP_TIME; + + auto& info = _prevJointChainInfoVec[_hipsTargetIndex].jointInfoVec[0]; + AnimPose prevHipsRelPose(info.rot, info.trans); + AnimPose prevHipsAbsPose = parentAbsPose * prevHipsRelPose; + ::blend(1, &prevHipsAbsPose, &absPose, alpha, &absPose); } + + _relativePoses[_hipsIndex] = parentAbsPose.inverse() * absPose; + } else { // if there is no hips target, shift hips according to the _hipsOffset from the previous frame float offsetLength = glm::length(_hipsOffset); @@ -924,8 +995,9 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars { PROFILE_RANGE_EX(simulation_animation, "ik/ccd", 0xffff00ff, 0); + preconditionRelativePosesToAvoidLimbLock(context, targets); - solve(context, targets); + solve(context, targets, dt, jointChainInfoVec); } if (_hipsTargetIndex < 0) { diff --git a/libraries/animation/src/AnimInverseKinematics.h b/libraries/animation/src/AnimInverseKinematics.h index fb462cbf50..d5fc5a6a8c 100644 --- a/libraries/animation/src/AnimInverseKinematics.h +++ b/libraries/animation/src/AnimInverseKinematics.h @@ -36,6 +36,7 @@ public: struct JointChainInfo { std::vector jointInfoVec; IKTarget target; + float timer { 0.0f }; }; using JointChainInfoVec = std::vector; @@ -78,11 +79,11 @@ public: protected: void computeTargets(const AnimVariantMap& animVars, std::vector& targets, const AnimPoseVec& underPoses); - void solve(const AnimContext& context, const std::vector& targets); + void solve(const AnimContext& context, const std::vector& targets, float dt, JointChainInfoVec& jointChainInfoVec); void solveTargetWithCCD(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, bool debug, JointChainInfo& jointChainInfoOut) const; void solveTargetWithSpline(const AnimContext& context, const IKTarget& target, const AnimPoseVec& absolutePoses, - bool debug, JointChainInfo& jointChainInfoOut); + bool debug, JointChainInfo& jointChainInfoOut) const; virtual void setSkeletonInternal(AnimSkeleton::ConstPointer skeleton) override; void debugDrawIKChain(const JointChainInfo& jointChainInfo, const AnimContext& context) const; void debugDrawRelativePoses(const AnimContext& context) const; @@ -99,8 +100,8 @@ protected: AnimPose offsetPose; // local offset from the spline to the joint. }; - void computeSplineJointInfosForIKTarget(const AnimContext& context, const IKTarget& target); - const std::vector* findOrCreateSplineJointInfo(const AnimContext& context, const IKTarget& target); + void computeAndCacheSplineJointInfosForIKTarget(const AnimContext& context, const IKTarget& target) const; + const std::vector* findOrCreateSplineJointInfo(const AnimContext& context, const IKTarget& target) const; // for AnimDebugDraw rendering virtual const AnimPoseVec& getPosesInternal() const override { return _relativePoses; } @@ -144,7 +145,7 @@ protected: AnimPoseVec _relativePoses; // current relative poses AnimPoseVec _limitCenterPoses; // relative - std::map> _splineJointInfoMap; + mutable std::map> _splineJointInfoMap; // experimental data for moving hips during IK glm::vec3 _hipsOffset { Vectors::ZERO }; @@ -164,6 +165,8 @@ protected: AnimPose _uncontrolledLeftHandPose { AnimPose() }; AnimPose _uncontrolledRightHandPose { AnimPose() }; AnimPose _uncontrolledHipsPose { AnimPose() }; + + JointChainInfoVec _prevJointChainInfoVec; }; #endif // hifi_AnimInverseKinematics_h From e9a8c3f5e816620d168d14b8a166d056c6d3728e Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 4 Jul 2017 15:52:03 -0700 Subject: [PATCH 0734/1049] rename atp-get to atp-client. add ability to list atp file mappings and to upload new files --- tools/CMakeLists.txt | 4 +- tools/{atp-get => atp-client}/CMakeLists.txt | 2 +- .../src/ATPClientApp.cpp} | 201 +++++++++++++----- .../src/ATPClientApp.h} | 29 ++- tools/{atp-get => atp-client}/src/main.cpp | 6 +- 5 files changed, 179 insertions(+), 63 deletions(-) rename tools/{atp-get => atp-client}/CMakeLists.txt (77%) rename tools/{atp-get/src/ATPGetApp.cpp => atp-client/src/ATPClientApp.cpp} (52%) rename tools/{atp-get/src/ATPGetApp.h => atp-client/src/ATPClientApp.h} (64%) rename tools/{atp-get => atp-client}/src/main.cpp (89%) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 0561956709..5de44e8897 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -17,8 +17,8 @@ set_target_properties(ac-client PROPERTIES FOLDER "Tools") add_subdirectory(skeleton-dump) set_target_properties(skeleton-dump PROPERTIES FOLDER "Tools") -add_subdirectory(atp-get) -set_target_properties(atp-get PROPERTIES FOLDER "Tools") +add_subdirectory(atp-client) +set_target_properties(atp-client PROPERTIES FOLDER "Tools") add_subdirectory(oven) set_target_properties(oven PROPERTIES FOLDER "Tools") diff --git a/tools/atp-get/CMakeLists.txt b/tools/atp-client/CMakeLists.txt similarity index 77% rename from tools/atp-get/CMakeLists.txt rename to tools/atp-client/CMakeLists.txt index 75f92b787d..4cee30bcc3 100644 --- a/tools/atp-get/CMakeLists.txt +++ b/tools/atp-client/CMakeLists.txt @@ -1,4 +1,4 @@ -set(TARGET_NAME atp-get) +set(TARGET_NAME atp-client) setup_hifi_project(Core Widgets) setup_memory_debugger() link_hifi_libraries(shared networking) diff --git a/tools/atp-get/src/ATPGetApp.cpp b/tools/atp-client/src/ATPClientApp.cpp similarity index 52% rename from tools/atp-get/src/ATPGetApp.cpp rename to tools/atp-client/src/ATPClientApp.cpp index 4125582c21..ac69da7e96 100644 --- a/tools/atp-get/src/ATPGetApp.cpp +++ b/tools/atp-client/src/ATPClientApp.cpp @@ -1,6 +1,6 @@ // -// ATPGetApp.cpp -// tools/atp-get/src +// ATPClientApp.cpp +// tools/atp-client/src // // Created by Seth Alves on 2017-3-15 // Copyright 2017 High Fidelity, Inc. @@ -15,26 +15,36 @@ #include #include #include + #include #include #include #include #include +#include -#include "ATPGetApp.h" +#include "ATPClientApp.h" -ATPGetApp::ATPGetApp(int argc, char* argv[]) : +#define HIGH_FIDELITY_ATP_CLIENT_USER_AGENT "Mozilla/5.0 (HighFidelityATPClient)" + +ATPClientApp::ATPClientApp(int argc, char* argv[]) : QCoreApplication(argc, argv) { // parse command-line QCommandLineParser parser; - parser.setApplicationDescription("High Fidelity ATP-Get"); + parser.setApplicationDescription("High Fidelity ATP-Client"); const QCommandLineOption helpOption = parser.addHelpOption(); const QCommandLineOption verboseOutput("v", "verbose output"); parser.addOption(verboseOutput); + const QCommandLineOption uploadOption("T", "upload local file", "local-file-to-send"); + parser.addOption(uploadOption); + + const QCommandLineOption outputFilenameOption("o", "output filename", "output-file-name"); + parser.addOption(outputFilenameOption); + const QCommandLineOption domainAddressOption("d", "domain-server address", "127.0.0.1"); parser.addOption(domainAddressOption); @@ -70,67 +80,94 @@ ATPGetApp::ATPGetApp(int argc, char* argv[]) : } - QStringList filenames = parser.positionalArguments(); - if (filenames.empty() || filenames.size() > 2) { - qDebug() << "give remote url and optional local filename as arguments"; + QStringList posArgs = parser.positionalArguments(); + if (posArgs.size() != 1) { + qDebug() << "give remote url argument"; parser.showHelp(); Q_UNREACHABLE(); } - _url = QUrl(filenames[0]); + _url = QUrl(posArgs[0]); if (_url.scheme() != "atp") { qDebug() << "url should start with atp:"; parser.showHelp(); Q_UNREACHABLE(); } - if (filenames.size() == 2) { - _localOutputFile = filenames[1]; + int domainPort = 40103; + if (_url.port() != -1) { + domainPort = _url.port(); } - QString domainServerAddress = "127.0.0.1:40103"; + if (parser.isSet(outputFilenameOption)) { + _localOutputFile = parser.value(outputFilenameOption); + } + + if (parser.isSet(uploadOption)) { + _localUploadFile = parser.value(uploadOption); + } + + + if (parser.isSet(listenPortOption)) { + _listenPort = parser.value(listenPortOption).toInt(); + } + + QString domainServerAddress = QString("127.0.0.1") + ":" + QString::number(domainPort); if (parser.isSet(domainAddressOption)) { domainServerAddress = parser.value(domainAddressOption); + qDebug() << "domainServerAddress is " << domainServerAddress; + connectToDomain(domainServerAddress); + } else if (!_url.host().isEmpty()) { + QUrl domainURL; + domainURL.setScheme("hifi"); + domainURL.setHost(_url.host()); + connectToDomain(domainURL.toString()); + } else { + qDebug() << "domainServerAddress is default " << domainServerAddress; + connectToDomain(domainServerAddress); } +} + + +void ATPClientApp::connectToDomain(QString domainServerAddress) { if (_verbose) { qDebug() << "domain-server address is" << domainServerAddress; } - int listenPort = INVALID_PORT; - if (parser.isSet(listenPortOption)) { - listenPort = parser.value(listenPortOption).toInt(); - } + DependencyManager::set(); + auto accountManager = DependencyManager::get(); + QString username = accountManager->getAccountInfo().getUsername(); + qDebug() << "username is" << username; Setting::init(); DependencyManager::registerInheritance(); - DependencyManager::set([&]{ return QString("Mozilla/5.0 (HighFidelityATPGet)"); }); + DependencyManager::set([&]{ return QString(HIGH_FIDELITY_ATP_CLIENT_USER_AGENT); }); DependencyManager::set(); - DependencyManager::set(NodeType::Agent, listenPort); - + DependencyManager::set(NodeType::Agent, _listenPort); auto nodeList = DependencyManager::get(); nodeList->startThread(); // setup a timer for domain-server check ins - QTimer* domainCheckInTimer = new QTimer(nodeList.data()); - connect(domainCheckInTimer, &QTimer::timeout, nodeList.data(), &NodeList::sendDomainServerCheckIn); - domainCheckInTimer->start(DOMAIN_SERVER_CHECK_IN_MSECS); + _domainCheckInTimer = new QTimer(nodeList.data()); + connect(_domainCheckInTimer, &QTimer::timeout, nodeList.data(), &NodeList::sendDomainServerCheckIn); + _domainCheckInTimer->start(DOMAIN_SERVER_CHECK_IN_MSECS); const DomainHandler& domainHandler = nodeList->getDomainHandler(); connect(&domainHandler, SIGNAL(hostnameChanged(const QString&)), SLOT(domainChanged(const QString&))); // connect(&domainHandler, SIGNAL(resetting()), SLOT(resettingDomain())); // connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(clearDomainOctreeDetails())); - connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &ATPGetApp::domainConnectionRefused); + connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &ATPClientApp::domainConnectionRefused); - connect(nodeList.data(), &NodeList::nodeAdded, this, &ATPGetApp::nodeAdded); - connect(nodeList.data(), &NodeList::nodeKilled, this, &ATPGetApp::nodeKilled); - connect(nodeList.data(), &NodeList::nodeActivated, this, &ATPGetApp::nodeActivated); + connect(nodeList.data(), &NodeList::nodeAdded, this, &ATPClientApp::nodeAdded); + connect(nodeList.data(), &NodeList::nodeKilled, this, &ATPClientApp::nodeKilled); + connect(nodeList.data(), &NodeList::nodeActivated, this, &ATPClientApp::nodeActivated); // connect(nodeList.data(), &NodeList::uuidChanged, getMyAvatar(), &MyAvatar::setSessionUUID); - // connect(nodeList.data(), &NodeList::uuidChanged, this, &ATPGetApp::setSessionUUID); - connect(nodeList.data(), &NodeList::packetVersionMismatch, this, &ATPGetApp::notifyPacketVersionMismatch); + // connect(nodeList.data(), &NodeList::uuidChanged, this, &ATPClientApp::setSessionUUID); + connect(nodeList.data(), &NodeList::packetVersionMismatch, this, &ATPClientApp::notifyPacketVersionMismatch); nodeList->addSetOfNodeTypesToNodeInterestSet(NodeSet() << NodeType::AudioMixer << NodeType::AvatarMixer << NodeType::EntityServer << NodeType::AssetServer << NodeType::MessagesMixer); @@ -140,63 +177,131 @@ ATPGetApp::ATPGetApp(int argc, char* argv[]) : auto assetClient = DependencyManager::set(); assetClient->init(); - QTimer* doTimer = new QTimer(this); - doTimer->setSingleShot(true); - connect(doTimer, &QTimer::timeout, this, &ATPGetApp::timedOut); - doTimer->start(4000); + QTimer* _timeoutTimer = new QTimer(this); + _timeoutTimer->setSingleShot(true); + connect(_timeoutTimer, &QTimer::timeout, this, &ATPClientApp::timedOut); + _timeoutTimer->start(4000); } -ATPGetApp::~ATPGetApp() { +ATPClientApp::~ATPClientApp() { + delete _domainCheckInTimer; + delete _timeoutTimer; } -void ATPGetApp::domainConnectionRefused(const QString& reasonMessage, int reasonCodeInt, const QString& extraInfo) { +void ATPClientApp::domainConnectionRefused(const QString& reasonMessage, int reasonCodeInt, const QString& extraInfo) { qDebug() << "domainConnectionRefused"; } -void ATPGetApp::domainChanged(const QString& domainHostname) { +void ATPClientApp::domainChanged(const QString& domainHostname) { if (_verbose) { qDebug() << "domainChanged"; } } -void ATPGetApp::nodeAdded(SharedNodePointer node) { +void ATPClientApp::nodeAdded(SharedNodePointer node) { if (_verbose) { qDebug() << "node added: " << node->getType(); } } -void ATPGetApp::nodeActivated(SharedNodePointer node) { +void ATPClientApp::nodeActivated(SharedNodePointer node) { if (node->getType() == NodeType::AssetServer) { - lookup(); + auto path = _url.path(); + + if (_verbose) { + qDebug() << "path is " << path; + } + + qDebug() << "_localUploadFile =" << _localUploadFile; + + if (!_localUploadFile.isEmpty()) { + uploadAsset(); + } else if (path == "/") { + listAssets(); + } else { + lookupAsset(); + } } } -void ATPGetApp::nodeKilled(SharedNodePointer node) { +void ATPClientApp::nodeKilled(SharedNodePointer node) { qDebug() << "nodeKilled"; } -void ATPGetApp::timedOut() { +void ATPClientApp::timedOut() { finish(1); } -void ATPGetApp::notifyPacketVersionMismatch() { +void ATPClientApp::notifyPacketVersionMismatch() { if (_verbose) { qDebug() << "packet version mismatch"; } finish(1); } -void ATPGetApp::lookup() { - +void ATPClientApp::uploadAsset() { auto path = _url.path(); - qDebug() << "path is " << path; + if (path == "/") { + qDebug() << "cannot upload to path of /"; + QCoreApplication::exit(1); + } + auto upload = DependencyManager::get()->createUpload(_localUploadFile); + QObject::connect(upload, &AssetUpload::finished, this, [=](AssetUpload* upload, const QString& hash) mutable { + if (upload->getError() != AssetUpload::NoError) { + qDebug() << "upload failed: " << upload->getErrorString(); + } else { + setMapping(hash); + } + + upload->deleteLater(); + }); + + upload->start(); +} + +void ATPClientApp::setMapping(QString hash) { + auto path = _url.path(); + auto assetClient = DependencyManager::get(); + auto request = assetClient->createSetMappingRequest(path, hash); + + connect(request, &SetMappingRequest::finished, this, [=](SetMappingRequest* request) mutable { + if (request->getError() != SetMappingRequest::NoError) { + qDebug() << "upload succeeded, but couldn't set mapping: " << request->getErrorString(); + } + request->deleteLater(); + }); + + request->start(); +} + +void ATPClientApp::listAssets() { + auto request = DependencyManager::get()->createGetAllMappingsRequest(); + QObject::connect(request, &GetAllMappingsRequest::finished, this, [=](GetAllMappingsRequest* request) mutable { + auto result = request->getError(); + if (result == GetAllMappingsRequest::NotFound) { + qDebug() << "not found: " << request->getErrorString(); + } else if (result == GetAllMappingsRequest::NoError) { + auto mappings = request->getMappings(); + for (auto& kv : mappings ) { + qDebug() << kv.first << kv.second; + } + } else { + qDebug() << "error -- " << request->getError() << " -- " << request->getErrorString(); + } + request->deleteLater(); + }); + request->start(); +} + +void ATPClientApp::lookupAsset() { + auto path = _url.path(); auto request = DependencyManager::get()->createGetMappingRequest(path); QObject::connect(request, &GetMappingRequest::finished, this, [=](GetMappingRequest* request) mutable { auto result = request->getError(); if (result == GetMappingRequest::NotFound) { - qDebug() << "not found"; + qDebug() << "not found: " << request->getErrorString(); } else if (result == GetMappingRequest::NoError) { qDebug() << "found, hash is " << request->getHash(); download(request->getHash()); @@ -208,7 +313,7 @@ void ATPGetApp::lookup() { request->start(); } -void ATPGetApp::download(AssetHash hash) { +void ATPClientApp::download(AssetHash hash) { auto assetClient = DependencyManager::get(); auto assetRequest = new AssetRequest(hash); @@ -217,7 +322,7 @@ void ATPGetApp::download(AssetHash hash) { if (request->getError() == AssetRequest::Error::NoError) { QString data = QString::fromUtf8(request->getData()); - if (_localOutputFile == "") { + if (_localOutputFile == "" || _localOutputFile == "-") { QTextStream cout(stdout); cout << data; } else { @@ -238,7 +343,7 @@ void ATPGetApp::download(AssetHash hash) { assetRequest->start(); } -void ATPGetApp::finish(int exitCode) { +void ATPClientApp::finish(int exitCode) { auto nodeList = DependencyManager::get(); // send the domain a disconnect packet, force stoppage of domain-server check-ins diff --git a/tools/atp-get/src/ATPGetApp.h b/tools/atp-client/src/ATPClientApp.h similarity index 64% rename from tools/atp-get/src/ATPGetApp.h rename to tools/atp-client/src/ATPClientApp.h index 5507d2aa62..ce85d2700e 100644 --- a/tools/atp-get/src/ATPGetApp.h +++ b/tools/atp-client/src/ATPClientApp.h @@ -1,6 +1,6 @@ // -// ATPGetApp.h -// tools/atp-get/src +// ATPClientApp.h +// tools/atp-client/src // // Created by Seth Alves on 2017-3-15 // Copyright 2017 High Fidelity, Inc. @@ -10,8 +10,8 @@ // -#ifndef hifi_ATPGetApp_h -#define hifi_ATPGetApp_h +#ifndef hifi_ATPClientApp_h +#define hifi_ATPClientApp_h #include #include @@ -23,11 +23,11 @@ #include -class ATPGetApp : public QCoreApplication { +class ATPClientApp : public QCoreApplication { Q_OBJECT public: - ATPGetApp(int argc, char* argv[]); - ~ATPGetApp(); + ATPClientApp(int argc, char* argv[]); + ~ATPClientApp(); private slots: void domainConnectionRefused(const QString& reasonMessage, int reasonCodeInt, const QString& extraInfo); @@ -38,15 +38,26 @@ private slots: void notifyPacketVersionMismatch(); private: + void connectToDomain(QString domainServerAddress); + NodeList* _nodeList; void timedOut(); - void lookup(); + void uploadAsset(); + void setMapping(QString hash); + void lookupAsset(); + void listAssets(); void download(AssetHash hash); void finish(int exitCode); bool _verbose; QUrl _url; QString _localOutputFile; + QString _localUploadFile; + + int _listenPort { INVALID_PORT }; + + QTimer* _domainCheckInTimer { nullptr }; + QTimer* _timeoutTimer { nullptr }; }; -#endif // hifi_ATPGetApp_h +#endif // hifi_ATPClientApp_h diff --git a/tools/atp-get/src/main.cpp b/tools/atp-client/src/main.cpp similarity index 89% rename from tools/atp-get/src/main.cpp rename to tools/atp-client/src/main.cpp index bddf30c666..88119604cf 100644 --- a/tools/atp-get/src/main.cpp +++ b/tools/atp-client/src/main.cpp @@ -1,6 +1,6 @@ // // main.cpp -// tools/atp-get/src +// tools/atp-client/src // // Created by Seth Alves on 2017-3-15 // Copyright 2017 High Fidelity, Inc. @@ -15,7 +15,7 @@ #include -#include "ATPGetApp.h" +#include "ATPClientApp.h" using namespace std; @@ -25,7 +25,7 @@ int main(int argc, char * argv[]) { QCoreApplication::setOrganizationDomain(BuildInfo::ORGANIZATION_DOMAIN); QCoreApplication::setApplicationVersion(BuildInfo::VERSION); - ATPGetApp app(argc, argv); + ATPClientApp app(argc, argv); return app.exec(); } From a6af6015a4de2618aa9f1b791314e266ce2f1011 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 4 Jul 2017 17:00:25 -0700 Subject: [PATCH 0735/1049] add a way to login on command-line --- tools/atp-client/src/ATPClientApp.cpp | 45 ++++++++++++++++++++++----- tools/atp-client/src/ATPClientApp.h | 3 ++ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/tools/atp-client/src/ATPClientApp.cpp b/tools/atp-client/src/ATPClientApp.cpp index ac69da7e96..76bf706205 100644 --- a/tools/atp-client/src/ATPClientApp.cpp +++ b/tools/atp-client/src/ATPClientApp.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -42,15 +43,15 @@ ATPClientApp::ATPClientApp(int argc, char* argv[]) : const QCommandLineOption uploadOption("T", "upload local file", "local-file-to-send"); parser.addOption(uploadOption); + const QCommandLineOption authOption("u", "set usename and pass", "username:password"); + parser.addOption(authOption); + const QCommandLineOption outputFilenameOption("o", "output filename", "output-file-name"); parser.addOption(outputFilenameOption); const QCommandLineOption domainAddressOption("d", "domain-server address", "127.0.0.1"); parser.addOption(domainAddressOption); - const QCommandLineOption cacheSTUNOption("s", "cache stun-server response"); - parser.addOption(cacheSTUNOption); - const QCommandLineOption listenPortOption("listenPort", "listen port", QString::number(INVALID_PORT)); parser.addOption(listenPortOption); @@ -107,6 +108,18 @@ ATPClientApp::ATPClientApp(int argc, char* argv[]) : _localUploadFile = parser.value(uploadOption); } + if (parser.isSet(authOption)) { + QStringList pieces = parser.value(authOption).split(":"); + if (pieces.size() != 2) { + qDebug() << "-u should be followed by username:password"; + parser.showHelp(); + Q_UNREACHABLE(); + } + + _username = pieces[0]; + _password = pieces[1]; + } + if (parser.isSet(listenPortOption)) { _listenPort = parser.value(listenPortOption).toInt(); @@ -135,11 +148,6 @@ void ATPClientApp::connectToDomain(QString domainServerAddress) { qDebug() << "domain-server address is" << domainServerAddress; } - DependencyManager::set(); - auto accountManager = DependencyManager::get(); - QString username = accountManager->getAccountInfo().getUsername(); - qDebug() << "username is" << username; - Setting::init(); DependencyManager::registerInheritance(); @@ -177,6 +185,27 @@ void ATPClientApp::connectToDomain(QString domainServerAddress) { auto assetClient = DependencyManager::set(); assetClient->init(); + auto accountManager = DependencyManager::get(); + accountManager->setIsAgent(true); + accountManager->setAuthURL(NetworkingConstants::METAVERSE_SERVER_URL); + + if (_verbose) { + QString username = accountManager->getAccountInfo().getUsername(); + qDebug() << "cached username is" << username << ", isLoggedIn =" << accountManager->isLoggedIn(); + } + + if (!_username.isEmpty()) { + connect(accountManager.data(), &AccountManager::loginComplete, this, [&](){ + if (_verbose) { + qDebug() << "login successful"; + } + }); + connect(accountManager.data(), &AccountManager::loginFailed, this, [&](){ + qDebug() << "login failed."; + }); + accountManager->requestAccessToken(_username, _password); + } + QTimer* _timeoutTimer = new QTimer(this); _timeoutTimer->setSingleShot(true); connect(_timeoutTimer, &QTimer::timeout, this, &ATPClientApp::timedOut); diff --git a/tools/atp-client/src/ATPClientApp.h b/tools/atp-client/src/ATPClientApp.h index ce85d2700e..c2401e54af 100644 --- a/tools/atp-client/src/ATPClientApp.h +++ b/tools/atp-client/src/ATPClientApp.h @@ -56,6 +56,9 @@ private: int _listenPort { INVALID_PORT }; + QString _username; + QString _password; + QTimer* _domainCheckInTimer { nullptr }; QTimer* _timeoutTimer { nullptr }; }; From 1192e8649431872942b9bf34804218f25e2b0b9c Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 4 Jul 2017 17:11:53 -0700 Subject: [PATCH 0736/1049] add a way to login on command-line --- tools/ac-client/src/ACClientApp.cpp | 38 +++++++++++++++++++++++++++ tools/ac-client/src/ACClientApp.h | 3 +++ tools/atp-client/src/ATPClientApp.cpp | 5 ---- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/tools/ac-client/src/ACClientApp.cpp b/tools/ac-client/src/ACClientApp.cpp index b81d092662..0842a66346 100644 --- a/tools/ac-client/src/ACClientApp.cpp +++ b/tools/ac-client/src/ACClientApp.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -33,6 +34,9 @@ ACClientApp::ACClientApp(int argc, char* argv[]) : const QCommandLineOption verboseOutput("v", "verbose output"); parser.addOption(verboseOutput); + const QCommandLineOption authOption("u", "set usename and pass", "username:password"); + parser.addOption(authOption); + const QCommandLineOption domainAddressOption("d", "domain-server address", "127.0.0.1"); parser.addOption(domainAddressOption); @@ -81,6 +85,18 @@ ACClientApp::ACClientApp(int argc, char* argv[]) : listenPort = parser.value(listenPortOption).toInt(); } + if (parser.isSet(authOption)) { + QStringList pieces = parser.value(authOption).split(":"); + if (pieces.size() != 2) { + qDebug() << "-u should be followed by username:password"; + parser.showHelp(); + Q_UNREACHABLE(); + } + + _username = pieces[0]; + _password = pieces[1]; + } + Setting::init(); DependencyManager::registerInheritance(); @@ -117,6 +133,28 @@ ACClientApp::ACClientApp(int argc, char* argv[]) : DependencyManager::get()->handleLookupString(domainServerAddress, false); + auto accountManager = DependencyManager::get(); + accountManager->setIsAgent(true); + accountManager->setAuthURL(NetworkingConstants::METAVERSE_SERVER_URL); + + if (_verbose) { + QString username = accountManager->getAccountInfo().getUsername(); + qDebug() << "cached username is" << username << ", isLoggedIn =" << accountManager->isLoggedIn(); + } + + if (!_username.isEmpty()) { + connect(accountManager.data(), &AccountManager::loginComplete, this, [&](){ + if (_verbose) { + qDebug() << "login successful"; + } + }); + connect(accountManager.data(), &AccountManager::loginFailed, this, [&](){ + qDebug() << "login failed."; + }); + accountManager->requestAccessToken(_username, _password); + } + + QTimer* doTimer = new QTimer(this); doTimer->setSingleShot(true); connect(doTimer, &QTimer::timeout, this, &ACClientApp::timedOut); diff --git a/tools/ac-client/src/ACClientApp.h b/tools/ac-client/src/ACClientApp.h index 29d571688e..e295b17654 100644 --- a/tools/ac-client/src/ACClientApp.h +++ b/tools/ac-client/src/ACClientApp.h @@ -47,6 +47,9 @@ private: bool _sawAvatarMixer { false }; bool _sawAssetServer { false }; bool _sawMessagesMixer { false }; + + QString _username; + QString _password; }; #endif //hifi_ACClientApp_h diff --git a/tools/atp-client/src/ATPClientApp.cpp b/tools/atp-client/src/ATPClientApp.cpp index 76bf706205..cfa0cc81ad 100644 --- a/tools/atp-client/src/ATPClientApp.cpp +++ b/tools/atp-client/src/ATPClientApp.cpp @@ -55,7 +55,6 @@ ATPClientApp::ATPClientApp(int argc, char* argv[]) : const QCommandLineOption listenPortOption("listenPort", "listen port", QString::number(INVALID_PORT)); parser.addOption(listenPortOption); - if (!parser.parse(QCoreApplication::arguments())) { qCritical() << parser.errorText() << endl; parser.showHelp(); @@ -80,7 +79,6 @@ ATPClientApp::ATPClientApp(int argc, char* argv[]) : const_cast(&shared())->setEnabled(QtWarningMsg, false); } - QStringList posArgs = parser.positionalArguments(); if (posArgs.size() != 1) { qDebug() << "give remote url argument"; @@ -120,7 +118,6 @@ ATPClientApp::ATPClientApp(int argc, char* argv[]) : _password = pieces[1]; } - if (parser.isSet(listenPortOption)) { _listenPort = parser.value(listenPortOption).toInt(); } @@ -141,7 +138,6 @@ ATPClientApp::ATPClientApp(int argc, char* argv[]) : } } - void ATPClientApp::connectToDomain(QString domainServerAddress) { if (_verbose) { @@ -217,7 +213,6 @@ ATPClientApp::~ATPClientApp() { delete _timeoutTimer; } - void ATPClientApp::domainConnectionRefused(const QString& reasonMessage, int reasonCodeInt, const QString& extraInfo) { qDebug() << "domainConnectionRefused"; } From bdbfe25a5380233c19e5302f5645788a417fffa6 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 4 Jul 2017 17:46:35 -0700 Subject: [PATCH 0737/1049] remove some debug prints --- tools/atp-client/src/ATPClientApp.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/atp-client/src/ATPClientApp.cpp b/tools/atp-client/src/ATPClientApp.cpp index cfa0cc81ad..d859346ae2 100644 --- a/tools/atp-client/src/ATPClientApp.cpp +++ b/tools/atp-client/src/ATPClientApp.cpp @@ -125,7 +125,6 @@ ATPClientApp::ATPClientApp(int argc, char* argv[]) : QString domainServerAddress = QString("127.0.0.1") + ":" + QString::number(domainPort); if (parser.isSet(domainAddressOption)) { domainServerAddress = parser.value(domainAddressOption); - qDebug() << "domainServerAddress is " << domainServerAddress; connectToDomain(domainServerAddress); } else if (!_url.host().isEmpty()) { QUrl domainURL; @@ -133,7 +132,6 @@ ATPClientApp::ATPClientApp(int argc, char* argv[]) : domainURL.setHost(_url.host()); connectToDomain(domainURL.toString()); } else { - qDebug() << "domainServerAddress is default " << domainServerAddress; connectToDomain(domainServerAddress); } } From a05e9e12c15ab7b31ede11095d8cd577bd4bdf73 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 4 Jul 2017 17:59:56 -0700 Subject: [PATCH 0738/1049] remove some debug prints --- tools/atp-client/src/ATPClientApp.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/atp-client/src/ATPClientApp.cpp b/tools/atp-client/src/ATPClientApp.cpp index d859346ae2..5029bcd5b3 100644 --- a/tools/atp-client/src/ATPClientApp.cpp +++ b/tools/atp-client/src/ATPClientApp.cpp @@ -235,8 +235,6 @@ void ATPClientApp::nodeActivated(SharedNodePointer node) { qDebug() << "path is " << path; } - qDebug() << "_localUploadFile =" << _localUploadFile; - if (!_localUploadFile.isEmpty()) { uploadAsset(); } else if (path == "/") { From eb354a43339d1ad8b075240eb2ceeca559e5ca33 Mon Sep 17 00:00:00 2001 From: Mohammed Nafees Date: Wed, 5 Jul 2017 14:50:12 +0530 Subject: [PATCH 0739/1049] Cleanup menu shortcut keys --- interface/src/Application.cpp | 53 ----------------------------------- interface/src/Menu.cpp | 4 +-- scripts/system/edit.js | 9 ------ 3 files changed, 2 insertions(+), 64 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 377819c0a0..65003326aa 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3110,59 +3110,6 @@ void Application::keyPressEvent(QKeyEvent* event) { break; #endif - case Qt::Key_H: { - // whenever switching to/from full screen mirror from the keyboard, remember - // the state you were in before full screen mirror, and return to that. - auto previousMode = _myCamera.getMode(); - if (previousMode != CAMERA_MODE_MIRROR) { - switch (previousMode) { - case CAMERA_MODE_FIRST_PERSON: - _returnFromFullScreenMirrorTo = MenuOption::FirstPerson; - break; - case CAMERA_MODE_THIRD_PERSON: - _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson; - break; - - // FIXME - it's not clear that these modes make sense to return to... - case CAMERA_MODE_INDEPENDENT: - _returnFromFullScreenMirrorTo = MenuOption::IndependentMode; - break; - case CAMERA_MODE_ENTITY: - _returnFromFullScreenMirrorTo = MenuOption::CameraEntityMode; - break; - - default: - _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson; - break; - } - } - - bool isMirrorChecked = Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror); - Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, !isMirrorChecked); - if (isMirrorChecked) { - - // if we got here without coming in from a non-Full Screen mirror case, then our - // _returnFromFullScreenMirrorTo is unknown. In that case we'll go to the old - // behavior of returning to ThirdPerson - if (_returnFromFullScreenMirrorTo.isEmpty()) { - _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson; - } - Menu::getInstance()->setIsOptionChecked(_returnFromFullScreenMirrorTo, true); - } - cameraMenuChanged(); - break; - } - - case Qt::Key_P: { - if (!(isShifted || isMeta || isOption)) { - bool isFirstPersonChecked = Menu::getInstance()->isOptionChecked(MenuOption::FirstPerson); - Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, !isFirstPersonChecked); - Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, isFirstPersonChecked); - cameraMenuChanged(); - } - break; - } - case Qt::Key_Slash: Menu::getInstance()->triggerOption(MenuOption::Stats); break; diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index a746d72d91..4655951e10 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -223,7 +223,7 @@ Menu::Menu() { // View > First Person cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(viewMenu, - MenuOption::FirstPerson, 0, // QML Qt:: Key_P + MenuOption::FirstPerson, 0, true, qApp, SLOT(cameraMenuChanged()))); // View > Third Person @@ -233,7 +233,7 @@ Menu::Menu() { // View > Mirror cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(viewMenu, - MenuOption::FullscreenMirror, 0, // QML Qt::Key_H, + MenuOption::FullscreenMirror, 0, false, qApp, SLOT(cameraMenuChanged()))); // View > Independent [advanced] diff --git a/scripts/system/edit.js b/scripts/system/edit.js index a83d2159bb..acea42237b 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -1010,7 +1010,6 @@ function setupModelMenus() { Menu.addMenuItem({ menuName: "Edit", menuItemName: "Entity List...", - shortcutKey: "CTRL+META+L", afterItem: "Entities", grouping: "Advanced" }); @@ -1041,7 +1040,6 @@ function setupModelMenus() { Menu.addMenuItem({ menuName: "Edit", menuItemName: "Allow Selecting of Large Models", - shortcutKey: "CTRL+META+L", afterItem: GRABBABLE_ENTITIES_MENU_ITEM, isCheckable: true, isChecked: true, @@ -1050,7 +1048,6 @@ function setupModelMenus() { Menu.addMenuItem({ menuName: "Edit", menuItemName: "Allow Selecting of Small Models", - shortcutKey: "CTRL+META+S", afterItem: "Allow Selecting of Large Models", isCheckable: true, isChecked: true, @@ -1059,7 +1056,6 @@ function setupModelMenus() { Menu.addMenuItem({ menuName: "Edit", menuItemName: "Allow Selecting of Lights", - shortcutKey: "CTRL+SHIFT+META+L", afterItem: "Allow Selecting of Small Models", isCheckable: true, grouping: "Advanced" @@ -1067,14 +1063,12 @@ function setupModelMenus() { Menu.addMenuItem({ menuName: "Edit", menuItemName: "Select All Entities In Box", - shortcutKey: "CTRL+SHIFT+META+A", afterItem: "Allow Selecting of Lights", grouping: "Advanced" }); Menu.addMenuItem({ menuName: "Edit", menuItemName: "Select All Entities Touching Box", - shortcutKey: "CTRL+SHIFT+META+T", afterItem: "Select All Entities In Box", grouping: "Advanced" }); @@ -1082,21 +1076,18 @@ function setupModelMenus() { Menu.addMenuItem({ menuName: "Edit", menuItemName: "Export Entities", - shortcutKey: "CTRL+META+E", afterItem: "Entities", grouping: "Advanced" }); Menu.addMenuItem({ menuName: "Edit", menuItemName: "Import Entities", - shortcutKey: "CTRL+META+I", afterItem: "Export Entities", grouping: "Advanced" }); Menu.addMenuItem({ menuName: "Edit", menuItemName: "Import Entities from URL", - shortcutKey: "CTRL+META+U", afterItem: "Import Entities", grouping: "Advanced" }); From 1a24d4d8ec060f87ac29e8a3bf6d119bdb513ccd Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 5 Jul 2017 09:31:02 -0700 Subject: [PATCH 0740/1049] added safeLerp, shortest angle quat lerp with post normalize --- .../animation/src/AnimInverseKinematics.cpp | 17 +++++++---------- libraries/animation/src/AnimUtil.cpp | 2 +- libraries/animation/src/AnimUtil.h | 10 ++++++++++ 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index dd13279786..f0cd0dea98 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -491,9 +491,8 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const glm::quat twistPart; glm::vec3 axis = glm::normalize(deltaRotation * leverArm); swingTwistDecomposition(missingRotation, axis, swingPart, twistPart); - float dotSign = copysignf(1.0f, twistPart.w); const float LIMIT_LEAK_FRACTION = 0.1f; - deltaRotation = glm::normalize(glm::lerp(glm::quat(), dotSign * twistPart, LIMIT_LEAK_FRACTION)) * deltaRotation; + deltaRotation = safeLerp(glm::quat(), twistPart, LIMIT_LEAK_FRACTION); } } } @@ -502,9 +501,8 @@ void AnimInverseKinematics::solveTargetWithCCD(const AnimContext& context, const // An HmdHead target slaves the orientation of the end-effector by distributing rotation // deltas up the hierarchy. Its target position is enforced later (by shifting the hips). deltaRotation = target.getRotation() * glm::inverse(tipOrientation); - float dotSign = copysignf(1.0f, deltaRotation.w); const float ANGLE_DISTRIBUTION_FACTOR = 0.45f; - deltaRotation = glm::normalize(glm::lerp(glm::quat(), dotSign * deltaRotation, ANGLE_DISTRIBUTION_FACTOR)); + deltaRotation = safeLerp(glm::quat(), deltaRotation, ANGLE_DISTRIBUTION_FACTOR); } // compute joint's new parent-relative rotation after swing @@ -761,7 +759,7 @@ void AnimInverseKinematics::solveTargetWithSpline(const AnimContext& context, co // This prevents the rotation interpolation from rotating the wrong physical way (but correct mathematical way) // when the head is arched backwards very far. - glm::quat halfRot = glm::normalize(glm::lerp(basePose.rot(), tipPose.rot(), 0.5f)); + glm::quat halfRot = safeLerp(basePose.rot(), tipPose.rot(), 0.5f); if (glm::dot(halfRot * Vectors::UNIT_Z, basePose.rot() * Vectors::UNIT_Z) < 0.0f) { tipPose.rot() = -tipPose.rot(); } @@ -784,7 +782,7 @@ void AnimInverseKinematics::solveTargetWithSpline(const AnimContext& context, co if (target.getIndex() == _headIndex) { rotT = t * t; } - glm::quat twistRot = glm::normalize(glm::lerp(basePose.rot(), tipPose.rot(), rotT)); + glm::quat twistRot = safeLerp(basePose.rot(), tipPose.rot(), rotT); // compute the rotation by using the derivative of the spline as the y-axis, and the twistRot x-axis glm::vec3 y = glm::normalize(spline.d(t)); @@ -1682,7 +1680,7 @@ void AnimInverseKinematics::debugDrawConstraints(const AnimContext& context) con const int NUM_SWING_STEPS = 10; for (int i = 0; i < NUM_SWING_STEPS + 1; i++) { - glm::quat rot = glm::normalize(glm::lerp(minRot, maxRot, i * (1.0f / NUM_SWING_STEPS))); + glm::quat rot = safeLerp(minRot, maxRot, i * (1.0f / NUM_SWING_STEPS)); glm::vec3 axis = transformVectorFast(geomToWorldMatrix, parentAbsRot * rot * refRot * Vectors::UNIT_Y); DebugDraw::getInstance().drawRay(pos, pos + TWIST_LENGTH * axis, CYAN); } @@ -1700,7 +1698,7 @@ void AnimInverseKinematics::debugDrawConstraints(const AnimContext& context) con const int NUM_SWING_STEPS = 10; for (int i = 0; i < NUM_SWING_STEPS + 1; i++) { - glm::quat rot = glm::normalize(glm::lerp(minRot, maxRot, i * (1.0f / NUM_SWING_STEPS))); + glm::quat rot = safeLerp(minRot, maxRot, i * (1.0f / NUM_SWING_STEPS)); glm::vec3 axis = transformVectorFast(geomToWorldMatrix, parentAbsRot * rot * refRot * Vectors::UNIT_X); DebugDraw::getInstance().drawRay(pos, pos + TWIST_LENGTH * axis, CYAN); } @@ -1740,10 +1738,9 @@ void AnimInverseKinematics::blendToPoses(const AnimPoseVec& targetPoses, const A // relax toward poses int numJoints = (int)_relativePoses.size(); for (int i = 0; i < numJoints; ++i) { - float dotSign = copysignf(1.0f, glm::dot(_relativePoses[i].rot(), targetPoses[i].rot())); if (_rotationAccumulators[i].isDirty()) { // this joint is affected by IK --> blend toward the targetPoses rotation - _relativePoses[i].rot() = glm::normalize(glm::lerp(_relativePoses[i].rot(), dotSign * targetPoses[i].rot(), blendFactor)); + _relativePoses[i].rot() = safeLerp(_relativePoses[i].rot(), targetPoses[i].rot(), blendFactor); } else { // this joint is NOT affected by IK --> slam to underPoses rotation _relativePoses[i].rot() = underPoses[i].rot(); diff --git a/libraries/animation/src/AnimUtil.cpp b/libraries/animation/src/AnimUtil.cpp index a4659f1e76..bcf30642e8 100644 --- a/libraries/animation/src/AnimUtil.cpp +++ b/libraries/animation/src/AnimUtil.cpp @@ -28,7 +28,7 @@ void blend(size_t numPoses, const AnimPose* a, const AnimPose* b, float alpha, A } result[i].scale() = lerp(aPose.scale(), bPose.scale(), alpha); - result[i].rot() = glm::normalize(glm::lerp(aPose.rot(), q2, alpha)); + result[i].rot() = safeLerp(aPose.rot(), bPose.rot(), alpha); result[i].trans() = lerp(aPose.trans(), bPose.trans(), alpha); } } diff --git a/libraries/animation/src/AnimUtil.h b/libraries/animation/src/AnimUtil.h index 055fd630eb..d215fdc654 100644 --- a/libraries/animation/src/AnimUtil.h +++ b/libraries/animation/src/AnimUtil.h @@ -21,4 +21,14 @@ glm::quat averageQuats(size_t numQuats, const glm::quat* quats); float accumulateTime(float startFrame, float endFrame, float timeScale, float currentFrame, float dt, bool loopFlag, const QString& id, AnimNode::Triggers& triggersOut); +inline glm::quat safeLerp(const glm::quat& a, const glm::quat& b, float alpha) { + // adjust signs if necessary + glm::quat bTemp = b; + float dot = glm::dot(a, bTemp); + if (dot < 0.0f) { + bTemp = -bTemp; + } + return glm::normalize(glm::lerp(a, bTemp, alpha)); +} + #endif From 48b4b5f49c93dd6d331f934e264a529bdee67226 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Wed, 5 Jul 2017 18:39:09 +0200 Subject: [PATCH 0741/1049] Fixing the bug appearing on Nvidia 284.76 --- libraries/render-utils/src/local_lights_shading.slf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/render-utils/src/local_lights_shading.slf b/libraries/render-utils/src/local_lights_shading.slf index a4e28a9757..c6310cb079 100644 --- a/libraries/render-utils/src/local_lights_shading.slf +++ b/libraries/render-utils/src/local_lights_shading.slf @@ -34,6 +34,8 @@ in vec2 _texCoord0; out vec4 _fragColor; void main(void) { + _fragColor = vec4(0.0); + // Grab the fragment data from the uv vec2 texCoord = _texCoord0.st; From 691b59fffff8e92c79912fd4cc95844fe4e88e91 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 5 Jul 2017 18:26:58 +0100 Subject: [PATCH 0742/1049] remove debug statments --- plugins/openvr/src/ViveControllerManager.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index 1b2a7892d1..95a2ab7161 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -167,7 +167,6 @@ bool ViveControllerManager::isSupported() const { void ViveControllerManager::setConfigurationSettings(const QJsonObject configurationSettings) { if (isSupported()) { if (configurationSettings.contains("desktopMode")) { - qDebug() << configurationSettings["desktopMode"].toBool(); _desktopMode = configurationSettings["desktopMode"].toBool(); } _inputDevice->configureCalibrationSettings(configurationSettings); From 27a9880eff2fc7d9b4e24578ab0794bfddc8f033 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 5 Jul 2017 18:34:33 +0100 Subject: [PATCH 0743/1049] removed double add of head offset --- plugins/openvr/src/ViveControllerManager.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index 95a2ab7161..a1e6e929e1 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -760,10 +760,6 @@ glm::mat4 ViveControllerManager::InputDevice::calculateDefaultToReferenceForHead glm::mat4 finalHeadPuck = newHeadPuck * headPuckOffset; - glm::mat4 defaultHeadOffset = glm::inverse(inputCalibration.defaultCenterEyeMat) * inputCalibration.defaultHeadMat; - - glm::mat4 currentHead = finalHeadPuck * defaultHeadOffset; - // calculate the defaultToRefrenceXform glm::mat4 defaultToReferenceMat = currentHead * glm::inverse(inputCalibration.defaultHeadMat); return defaultToReferenceMat; From 06d512dab90f2444bc5d968ea5f6b21d4a665b53 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 5 Jul 2017 10:43:24 -0700 Subject: [PATCH 0744/1049] Warning fixes --- libraries/animation/src/AnimInverseKinematics.cpp | 2 +- libraries/animation/src/Rig.cpp | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index f0cd0dea98..7e13c13650 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -891,7 +891,7 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars // initialize a new jointChainInfoVec, this will holds the results for solving each ik chain. JointInfo defaultJointInfo = { glm::quat(), glm::vec3(), -1, false }; for (size_t i = 0; i < targets.size(); i++) { - int chainDepth = _skeleton->getChainDepth(targets[i].getIndex()); + size_t chainDepth = (size_t)_skeleton->getChainDepth(targets[i].getIndex()); jointChainInfoVec[i].jointInfoVec.reserve(chainDepth); jointChainInfoVec[i].target = targets[i]; int index = targets[i].getIndex(); diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index c505353174..9cc09addb3 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -1082,14 +1082,6 @@ void Rig::updateHands(bool leftHandEnabled, bool rightHandEnabled, bool hipsEnab const glm::vec3 bodyCapsuleEnd = bodyCapsuleCenter + glm::vec3(0, bodyCapsuleHalfHeight, 0); const float HAND_RADIUS = 0.05f; - - const float RELAX_DURATION = 0.6f; - const float CONTROL_DURATION = 0.4f; - const bool TO_CONTROLLED = true; - const bool FROM_CONTROLLED = false; - const bool LEFT_HAND = true; - const bool RIGHT_HAND = false; - const float ELBOW_POLE_VECTOR_BLEND_FACTOR = 0.95f; if (leftHandEnabled) { From e567cf019671c0b910852b6a4bd2a6e1d217043d Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 5 Jul 2017 19:04:34 +0100 Subject: [PATCH 0745/1049] made requested changes --- plugins/openvr/src/ViveControllerManager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index a1e6e929e1..acabd850ef 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -168,6 +168,9 @@ void ViveControllerManager::setConfigurationSettings(const QJsonObject configura if (isSupported()) { if (configurationSettings.contains("desktopMode")) { _desktopMode = configurationSettings["desktopMode"].toBool(); + if (!_desktopMode) { + _resetMatCalculated = false; + } } _inputDevice->configureCalibrationSettings(configurationSettings); } @@ -761,7 +764,7 @@ glm::mat4 ViveControllerManager::InputDevice::calculateDefaultToReferenceForHead glm::mat4 finalHeadPuck = newHeadPuck * headPuckOffset; // calculate the defaultToRefrenceXform - glm::mat4 defaultToReferenceMat = currentHead * glm::inverse(inputCalibration.defaultHeadMat); + glm::mat4 defaultToReferenceMat = finalHeadPuck * glm::inverse(inputCalibration.defaultHeadMat); return defaultToReferenceMat; } From 275f48b65aa77fe9a698c2a43cd6ef0f841ae3e8 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 5 Jul 2017 19:22:19 +0100 Subject: [PATCH 0746/1049] another requested change made --- plugins/openvr/src/ViveControllerManager.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index acabd850ef..3d4f4e0ce5 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -62,10 +62,10 @@ static const int SECOND_FOOT = 1; static const int HIP = 2; static const int CHEST = 3; -static float HEAD_PUCK_Y_OFFSET = -0.0254f; -static float HEAD_PUCK_Z_OFFSET = -0.152f; -static float HAND_PUCK_Y_OFFSET = -0.0508f; -static float HAND_PUCK_Z_OFFSET = 0.0254f; +static float HEAD_PUCK_Y_OFFSET = 0.0f; +static float HEAD_PUCK_Z_OFFSET = 0.0f; +static float HAND_PUCK_Y_OFFSET = 0.0f; +static float HAND_PUCK_Z_OFFSET = 0.0f; const char* ViveControllerManager::NAME { "OpenVR" }; @@ -763,8 +763,12 @@ glm::mat4 ViveControllerManager::InputDevice::calculateDefaultToReferenceForHead glm::mat4 finalHeadPuck = newHeadPuck * headPuckOffset; + glm::mat4 defaultHeadOffset = glm::inverse(inputCalibration.defaultCenterEyeMat) * inputCalibration.defaultHeadMat; + + glm::mat4 currentHead = finalHeadPuck * defaultHeadOffset; + // calculate the defaultToRefrenceXform - glm::mat4 defaultToReferenceMat = finalHeadPuck * glm::inverse(inputCalibration.defaultHeadMat); + glm::mat4 defaultToReferenceMat = currentHead * glm::inverse(inputCalibration.defaultHeadMat); return defaultToReferenceMat; } From ab340530b84ff70d8eef60db75e5b87991aa743c Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 5 Jul 2017 11:27:13 -0700 Subject: [PATCH 0747/1049] don't do a lot of processing during the mouse-move event handler --- scripts/system/controllers/grab.js | 35 +++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/scripts/system/controllers/grab.js b/scripts/system/controllers/grab.js index 14a86510c2..d46724184c 100644 --- a/scripts/system/controllers/grab.js +++ b/scripts/system/controllers/grab.js @@ -14,7 +14,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* global MyAvatar, Entities, Script, Camera, Vec3, Reticle, Overlays, getEntityCustomData, Messages, Quat, Controller */ +/* global MyAvatar, Entities, Script, Camera, Vec3, Reticle, Overlays, getEntityCustomData, Messages, Quat, Controller, + isInEditMode, HMD */ (function() { // BEGIN LOCAL_SCOPE @@ -22,6 +23,8 @@ Script.include("/~/system/libraries/utils.js"); var MAX_SOLID_ANGLE = 0.01; // objects that appear smaller than this can't be grabbed +var DELAY_FOR_30HZ = 33; // milliseconds + var ZERO_VEC3 = { x: 0, y: 0, @@ -46,7 +49,7 @@ var ACTION_TTL = 10; // seconds function getTag() { return "grab-" + MyAvatar.sessionUUID; } - + var DISTANCE_HOLDING_ACTION_TIMEFRAME = 0.1; // how quickly objects move to their new position var DISTANCE_HOLDING_UNITY_MASS = 1200; // The mass at which the distance holding action timeframe is unmodified var DISTANCE_HOLDING_UNITY_DISTANCE = 6; // The distance at which the distance holding action timeframe is unmodified @@ -411,10 +414,15 @@ Grabber.prototype.pressEvent = function(event) { }; Grabber.prototype.releaseEvent = function(event) { - if (event.isLeftButton!==true ||event.isRightButton===true || event.isMiddleButton===true) { + if (event.isLeftButton!==true || event.isRightButton===true || event.isMiddleButton===true) { return; } + if (this.moveEventTimer) { + Script.clearTimeout(this.moveEventTimer); + this.moveEventTimer = null; + } + if (this.isGrabbing) { // this.deactivateEntity(this.entityID); this.isGrabbing = false; @@ -440,11 +448,23 @@ Grabber.prototype.releaseEvent = function(event) { }; Grabber.prototype.moveEvent = function(event) { + // during the handling of the event, do as little as possible. We save the updated mouse position, + // and start a timer to react to the change. If more changes arrive before the timer fires, only + // the last update will be considered. This is done to avoid backing-up Qt's event queue. if (!this.isGrabbing) { return; } mouse.updateDrag(event); + var _this = this; + if (!this.moveEventTimer) { + this.moveEventTimer = Script.setTimeout(function() { + _this.moveEventProcess(); + } , DELAY_FOR_30HZ); + } +}; + +Grabber.prototype.moveEventProcess = function() { // see if something added/restored gravity var entityProperties = Entities.getEntityProperties(this.entityID); if (!entityProperties || !entityProperties.gravity) { @@ -489,7 +509,7 @@ Grabber.prototype.moveEvent = function(event) { } else { var newPointOnPlane; - + if (this.mode === "verticalCylinder") { // for this mode we recompute the plane based on current Camera var planeNormal = Quat.getForward(Camera.getOrientation()); @@ -505,7 +525,7 @@ Grabber.prototype.moveEvent = function(event) { }; } else { - + newPointOnPlane = mouseIntersectionWithPlane( this.pointOnPlane, this.planeNormal, mouse.current, this.maxDistance); var relativePosition = Vec3.subtract(newPointOnPlane, cameraPosition); @@ -538,6 +558,11 @@ Grabber.prototype.moveEvent = function(event) { } else { Entities.updateAction(this.entityID, this.actionID, actionArgs); } + + var _this = this; + this.moveEventTimer = Script.setTimeout(function() { + _this.moveEventProcess(); + }, DELAY_FOR_30HZ); }; Grabber.prototype.keyReleaseEvent = function(event) { From d9178786382067d9f6efa005da6207241d1bff1a Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 5 Jul 2017 11:29:09 -0700 Subject: [PATCH 0748/1049] fix whitespace --- scripts/system/controllers/grab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/controllers/grab.js b/scripts/system/controllers/grab.js index d46724184c..9f06aac3a6 100644 --- a/scripts/system/controllers/grab.js +++ b/scripts/system/controllers/grab.js @@ -460,7 +460,7 @@ Grabber.prototype.moveEvent = function(event) { if (!this.moveEventTimer) { this.moveEventTimer = Script.setTimeout(function() { _this.moveEventProcess(); - } , DELAY_FOR_30HZ); + }, DELAY_FOR_30HZ); } }; From 85813ac9087bc3e5efa7717707449c55be8e70fc Mon Sep 17 00:00:00 2001 From: David Kelly Date: Wed, 5 Jul 2017 11:29:34 -0700 Subject: [PATCH 0749/1049] render issue fixes --- interface/src/ui/ResourceImageItem.cpp | 26 ++++++++++++++++++++------ interface/src/ui/ResourceImageItem.h | 2 +- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index 9b5595c6ed..ac2e5384c7 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -32,13 +32,17 @@ void ResourceImageItem::setReady(bool ready) { } void ResourceImageItemRenderer::onUpdateTimer() { - if (_ready && _networkTexture && _networkTexture->isLoaded()) { - if(_fboMutex.tryLock()) { - invalidateFramebufferObject(); - qApp->getActiveDisplayPlugin()->copyTextureToQuickFramebuffer(_networkTexture, _copyFbo, &_fenceSync); - _fboMutex.unlock(); + if (_ready) { + if (_networkTexture && _networkTexture->isLoaded()) { + if(_fboMutex.tryLock()) { + invalidateFramebufferObject(); + qApp->getActiveDisplayPlugin()->copyTextureToQuickFramebuffer(_networkTexture, _copyFbo, &_fenceSync); + _fboMutex.unlock(); + } else { + qDebug() << "couldn't get a lock, using last frame"; + } } else { - qDebug() << "couldn't get a lock, using last frame"; + _networkTexture = DependencyManager::get()->getTexture(_url); } } update(); @@ -76,6 +80,9 @@ void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { } QOpenGLFramebufferObject* ResourceImageItemRenderer::createFramebufferObject(const QSize& size) { + if (_copyFbo) { + delete _copyFbo; + } QOpenGLFramebufferObjectFormat format; format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); _copyFbo = new QOpenGLFramebufferObject(size, format); @@ -100,7 +107,14 @@ void ResourceImageItemRenderer::render() { _fboMutex.lock(); _copyFbo->bind(); QOpenGLFramebufferObject::blitFramebuffer(framebufferObject(), _copyFbo, GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT, GL_NEAREST); + + // this clears the copyFbo texture + // so next frame starts fresh - helps + // when aspect ratio changes + _copyFbo->takeTexture(); + _copyFbo->bind(); _copyFbo->release(); + _fboMutex.unlock(); if (doUpdate) { update(); diff --git a/interface/src/ui/ResourceImageItem.h b/interface/src/ui/ResourceImageItem.h index 2d6e2cf625..39cae44ed0 100644 --- a/interface/src/ui/ResourceImageItem.h +++ b/interface/src/ui/ResourceImageItem.h @@ -34,7 +34,7 @@ private: NetworkTexturePointer _networkTexture; QQuickWindow* _window; QMutex _fboMutex; - QOpenGLFramebufferObject* _copyFbo; + QOpenGLFramebufferObject* _copyFbo { nullptr }; GLsync _fenceSync { 0 }; QTimer _updateTimer; public slots: From 07d098b95beb28d4b3993884113f47158fee785f Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 5 Jul 2017 19:45:52 +0100 Subject: [PATCH 0750/1049] coding standard fix --- plugins/openvr/src/ViveControllerManager.cpp | 19 +++++++------------ plugins/openvr/src/ViveControllerManager.h | 4 ++++ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index 3d4f4e0ce5..b0e7297879 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -62,11 +62,6 @@ static const int SECOND_FOOT = 1; static const int HIP = 2; static const int CHEST = 3; -static float HEAD_PUCK_Y_OFFSET = 0.0f; -static float HEAD_PUCK_Z_OFFSET = 0.0f; -static float HAND_PUCK_Y_OFFSET = 0.0f; -static float HAND_PUCK_Z_OFFSET = 0.0f; - const char* ViveControllerManager::NAME { "OpenVR" }; const std::map TRACKING_RESULT_TO_STRING = { @@ -389,8 +384,8 @@ void ViveControllerManager::InputDevice::configureCalibrationSettings(const QJso bool overrideHead = headObject["override"].toBool(); if (overrideHead) { _headConfig = HeadConfig::Puck; - HEAD_PUCK_Y_OFFSET = headObject["Y"].toDouble(); - HEAD_PUCK_Z_OFFSET = headObject["Z"].toDouble(); + _headPuckYOffset = headObject["Y"].toDouble(); + _headPuckZOffset = headObject["Z"].toDouble(); } else { _headConfig = HeadConfig::HMD; } @@ -399,8 +394,8 @@ void ViveControllerManager::InputDevice::configureCalibrationSettings(const QJso bool overrideHands = handsObject["override"].toBool(); if (overrideHands) { _handConfig = HandConfig::Pucks; - HAND_PUCK_Y_OFFSET = handsObject["Y"].toDouble(); - HAND_PUCK_Z_OFFSET = handsObject["Z"].toDouble(); + _handPuckYOffset = handsObject["Y"].toDouble(); + _handPuckZOffset = handsObject["Z"].toDouble(); } else { _handConfig = HandConfig::HandController; } @@ -759,7 +754,7 @@ glm::mat4 ViveControllerManager::InputDevice::calculateDefaultToReferenceForHead glm::vec4(zPrime, 0.0f), glm::vec4(headPuckTranslation, 1.0f)); glm::mat4 headPuckOffset = glm::mat4(glm::vec4(1.0f, 0.0f, 0.0f, 0.0f), glm::vec4(0.0f, 1.0f, 0.0f, 0.0f), - glm::vec4(0.0f, 0.0f, 1.0f, 0.0f), glm::vec4(0.0f, HEAD_PUCK_Y_OFFSET, HEAD_PUCK_Z_OFFSET, 1.0f)); + glm::vec4(0.0f, 0.0f, 1.0f, 0.0f), glm::vec4(0.0f, _headPuckYOffset, _headPuckZOffset, 1.0f)); glm::mat4 finalHeadPuck = newHeadPuck * headPuckOffset; @@ -959,7 +954,7 @@ void ViveControllerManager::InputDevice::calibrateLeftHand(glm::mat4& defaultToR glm::vec4(zPrime, 0.0f), glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)); - glm::vec3 translationOffset = glm::vec3(0.0f, HAND_PUCK_Y_OFFSET, HAND_PUCK_Z_OFFSET); + glm::vec3 translationOffset = glm::vec3(0.0f, _handPuckYOffset, _handPuckZOffset); glm::quat initialRotation = glmExtractRotation(handPoseAvatarMat); glm::quat finalRotation = glmExtractRotation(newHandMat); @@ -990,7 +985,7 @@ void ViveControllerManager::InputDevice::calibrateRightHand(glm::mat4& defaultTo - glm::vec3 translationOffset = glm::vec3(0.0f, HAND_PUCK_Y_OFFSET, HAND_PUCK_Z_OFFSET); + glm::vec3 translationOffset = glm::vec3(0.0f, _handPuckYOffset, _handPuckZOffset); glm::quat initialRotation = glmExtractRotation(handPoseAvatarMat); glm::quat finalRotation = glmExtractRotation(newHandMat); diff --git a/plugins/openvr/src/ViveControllerManager.h b/plugins/openvr/src/ViveControllerManager.h index 275c064a04..d94320dfb2 100644 --- a/plugins/openvr/src/ViveControllerManager.h +++ b/plugins/openvr/src/ViveControllerManager.h @@ -177,6 +177,10 @@ private: float _leftHapticDuration { 0.0f }; float _rightHapticStrength { 0.0f }; float _rightHapticDuration { 0.0f }; + float _headPuckYOffset { 0.0f }; + float _headPuckZOffset { 0.0f }; + float _handPuckYOffset { 0.0f }; + float _handPuckZOffset { 0.0f }; bool _triggersPressedHandled { false }; bool _calibrated { false }; bool _timeTilCalibrationSet { false }; From 6f2e7f5b835defe92501d60e6895206265321fe6 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 5 Jul 2017 12:39:15 -0700 Subject: [PATCH 0751/1049] Tweak the Snapshot 'Share' button to make its purpose more clear --- scripts/system/html/js/SnapshotReview.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/scripts/system/html/js/SnapshotReview.js b/scripts/system/html/js/SnapshotReview.js index a3d1923aa9..5ea1dd0963 100644 --- a/scripts/system/html/js/SnapshotReview.js +++ b/scripts/system/html/js/SnapshotReview.js @@ -20,7 +20,9 @@ var blastShareText = "Blast to my Connections", hifiShareText = "Share to Snaps Feed", hifiAlreadySharedText = "Already Shared to Snaps Feed", facebookShareText = "Share to Facebook", - twitterShareText = "Share to Twitter"; + twitterShareText = "Share to Twitter", + shareButtonLabelTextActive = "SHARE:", + shareButtonLabelTextInactive = "SHARE"; function fileExtensionMatches(filePath, extension) { return filePath.split('.').pop().toLowerCase() === extension; @@ -138,6 +140,8 @@ function selectImageToShare(selectedID, isSelected) { var imageContainer = document.getElementById(selectedID), image = document.getElementById(selectedID + 'img'), shareBar = document.getElementById(selectedID + "shareBar"), + showShareButtonsDots = document.getElementById(selectedID + "showShareButtonsDots"), + showShareButtonsLabel = document.getElementById(selectedID + "showShareButtonsLabel"), shareButtonsDiv = document.getElementById(selectedID + "shareButtonsDiv"), shareBarHelp = document.getElementById(selectedID + "shareBarHelp"), showShareButtonsButtonDiv = document.getElementById(selectedID + "showShareButtonsButtonDiv"), @@ -156,6 +160,9 @@ function selectImageToShare(selectedID, isSelected) { shareBar.style.backgroundColor = "rgba(0, 0, 0, 0.45)"; shareBar.style.pointerEvents = "initial"; + showShareButtonsDots.style.visibility = "hidden"; + showShareButtonsLabel.innerHTML = shareButtonLabelTextActive; + shareButtonsDiv.style.visibility = "visible"; shareBarHelp.style.visibility = "visible"; @@ -176,6 +183,9 @@ function selectImageToShare(selectedID, isSelected) { shareBar.style.backgroundColor = "rgba(0, 0, 0, 0.0)"; shareBar.style.pointerEvents = "none"; + showShareButtonsDots.style.visibility = "visible"; + showShareButtonsLabel.innerHTML = shareButtonLabelTextInactive; + shareButtonsDiv.style.visibility = "hidden"; shareBarHelp.style.visibility = "hidden"; } @@ -185,6 +195,7 @@ function createShareBar(parentID, isLoggedIn, canShare, isGif, blastButtonDisabl shareBarHelpID = parentID + "shareBarHelp", shareButtonsDivID = parentID + "shareButtonsDiv", showShareButtonsButtonDivID = parentID + "showShareButtonsButtonDiv", + showShareButtonsDotsID = parentID + "showShareButtonsDots", showShareButtonsLabelID = parentID + "showShareButtonsLabel", blastToConnectionsButtonID = parentID + "blastToConnectionsButton", shareWithEveryoneButtonID = parentID + "shareWithEveryoneButton", @@ -199,8 +210,8 @@ function createShareBar(parentID, isLoggedIn, canShare, isGif, blastButtonDisabl if (canShare) { shareBarInnerHTML = '' + '
' + - '' + - '' + + '' + + '' + '' + '
' + '' + @@ -217,7 +228,7 @@ function createShareBar(parentID, isLoggedIn, canShare, isGif, blastButtonDisabl document.getElementById(parentID + 'img').onclick = function () { selectImageToShare(parentID, true); }; } else { shareBarInnerHTML = '
' + - '' + + '' + '' + '' + '
' + @@ -230,7 +241,7 @@ function createShareBar(parentID, isLoggedIn, canShare, isGif, blastButtonDisabl } } else { shareBarInnerHTML = '
' + - '' + + '' + '' + '' + '
' + From 89c05244bf2e6ad8979be3991e34ff5717ad76ee Mon Sep 17 00:00:00 2001 From: David Kelly Date: Wed, 5 Jul 2017 13:24:31 -0700 Subject: [PATCH 0752/1049] remove unnecessary extra update() calls --- interface/src/ui/ResourceImageItem.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index ac2e5384c7..d7ad793bb8 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -92,16 +92,11 @@ QOpenGLFramebufferObject* ResourceImageItemRenderer::createFramebufferObject(con void ResourceImageItemRenderer::render() { auto f = QOpenGLContext::currentContext()->extraFunctions(); - bool doUpdate = false; - // black background - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT); if (_fenceSync) { f->glWaitSync(_fenceSync, 0, GL_TIMEOUT_IGNORED); f->glDeleteSync(_fenceSync); _fenceSync = 0; - doUpdate = true; } if (_ready) { _fboMutex.lock(); @@ -116,9 +111,6 @@ void ResourceImageItemRenderer::render() { _copyFbo->release(); _fboMutex.unlock(); - if (doUpdate) { - update(); - } } glFlush(); _window->resetOpenGLState(); From 7c55370f268333dac6252a152d9178742b6bba6e Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Wed, 5 Jul 2017 18:39:09 +0200 Subject: [PATCH 0753/1049] Fixing the bug appearing on Nvidia 284.76 --- libraries/render-utils/src/local_lights_shading.slf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/render-utils/src/local_lights_shading.slf b/libraries/render-utils/src/local_lights_shading.slf index a4e28a9757..c6310cb079 100644 --- a/libraries/render-utils/src/local_lights_shading.slf +++ b/libraries/render-utils/src/local_lights_shading.slf @@ -34,6 +34,8 @@ in vec2 _texCoord0; out vec4 _fragColor; void main(void) { + _fragColor = vec4(0.0); + // Grab the fragment data from the uv vec2 texCoord = _texCoord0.st; From 7b79e8c41ede7880ab879e47a300702d5b8351d2 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 5 Jul 2017 13:53:04 -0700 Subject: [PATCH 0754/1049] Update describe-settings.json --- domain-server/resources/describe-settings.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index bc67a31c02..d9d6abc840 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -50,11 +50,12 @@ { "label": "Places / Paths", "html_id": "places_paths", + "restart": false, "settings": [ { "name": "paths", "label": "Paths", - "help": "Clients can enter a path to reach an exact viewpoint in your domain.
Add rows to the table below to map a path to a viewpoint.
The index path ( / ) is where clients will enter if they do not enter an explicit path.", + "help": "Clients can enter a path to reach an exact viewpoint in your domain.
Add rows to the table below to map a path to a viewpoint.
The index path ( / ) is where clients will enter if they do not enter an explicit path.", "type": "table", "can_add_new_rows": true, "key": { From 1385ef80a7d961886c64e3a35091ef834b9a6df1 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 5 Jul 2017 13:56:40 -0700 Subject: [PATCH 0755/1049] Update DomainServerSettingsManager.cpp --- domain-server/src/DomainServerSettingsManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/domain-server/src/DomainServerSettingsManager.cpp b/domain-server/src/DomainServerSettingsManager.cpp index 9279648319..1bba9690c1 100644 --- a/domain-server/src/DomainServerSettingsManager.cpp +++ b/domain-server/src/DomainServerSettingsManager.cpp @@ -1198,6 +1198,7 @@ bool DomainServerSettingsManager::recurseJSONObjectAndOverwriteSettings(const QJ static const QString SECURITY_ROOT_KEY = "security"; static const QString AC_SUBNET_WHITELIST_KEY = "ac_subnet_whitelist"; static const QString BROADCASTING_KEY = "broadcasting"; + static const QString PATHS_ROOT_KEY = "Places / Paths"; auto& settingsVariant = _configMap.getConfig(); bool needRestart = false; @@ -1249,7 +1250,7 @@ bool DomainServerSettingsManager::recurseJSONObjectAndOverwriteSettings(const QJ if (!matchingDescriptionObject.isEmpty()) { updateSetting(rootKey, rootValue, *thisMap, matchingDescriptionObject); - if (rootKey != SECURITY_ROOT_KEY && rootKey != BROADCASTING_KEY) { + if (rootKey != SECURITY_ROOT_KEY && rootKey != BROADCASTING_KEY && rootKey != SETTINGS_PATHS_KEY ) { needRestart = true; } } else { From c069c13ebb29a2ff7fb2863194513770398f2cd6 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 5 Jul 2017 14:12:18 -0700 Subject: [PATCH 0756/1049] Update DomainServerSettingsManager.cpp --- domain-server/src/DomainServerSettingsManager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/domain-server/src/DomainServerSettingsManager.cpp b/domain-server/src/DomainServerSettingsManager.cpp index 1bba9690c1..e0054a5a00 100644 --- a/domain-server/src/DomainServerSettingsManager.cpp +++ b/domain-server/src/DomainServerSettingsManager.cpp @@ -1198,8 +1198,7 @@ bool DomainServerSettingsManager::recurseJSONObjectAndOverwriteSettings(const QJ static const QString SECURITY_ROOT_KEY = "security"; static const QString AC_SUBNET_WHITELIST_KEY = "ac_subnet_whitelist"; static const QString BROADCASTING_KEY = "broadcasting"; - static const QString PATHS_ROOT_KEY = "Places / Paths"; - + auto& settingsVariant = _configMap.getConfig(); bool needRestart = false; From 7f1bc07d042e96ec5abb01111ddc433fbe67172d Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 5 Jul 2017 14:08:58 -0700 Subject: [PATCH 0757/1049] Trying to fix overlay crashes again --- interface/src/ui/overlays/Overlays.cpp | 75 +++++-------------- .../src/model-networking/TextureCache.cpp | 6 +- libraries/script-engine/src/ScriptEngine.cpp | 2 +- 3 files changed, 22 insertions(+), 61 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index 1beee24fd5..399c730dbd 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -67,19 +67,14 @@ void Overlays::init() { } void Overlays::update(float deltatime) { - QMap overlaysHUD; - QMap overlaysWorld; { QMutexLocker locker(&_mutex); - overlaysHUD = _overlaysHUD; - overlaysWorld = _overlaysWorld; - } - - foreach(const auto& thisOverlay, overlaysHUD) { - thisOverlay->update(deltatime); - } - foreach(const auto& thisOverlay, overlaysWorld) { - thisOverlay->update(deltatime); + foreach(const auto& thisOverlay, _overlaysHUD) { + thisOverlay->update(deltatime); + } + foreach(const auto& thisOverlay, _overlaysWorld) { + thisOverlay->update(deltatime); + } } cleanupOverlaysToDelete(); @@ -119,14 +114,8 @@ void Overlays::renderHUD(RenderArgs* renderArgs) { int height = size.y; mat4 legacyProjection = glm::ortho(0, width, height, 0, -1000, 1000); - QMap overlaysHUD; - { - QMutexLocker locker(&_mutex); - overlaysHUD = _overlaysHUD; - } - - - foreach(Overlay::Pointer thisOverlay, overlaysHUD) { + QMutexLocker locker(&_mutex); + foreach(Overlay::Pointer thisOverlay, _overlaysHUD) { // Reset all batch pipeline settings between overlay geometryCache->useSimpleDrawPipeline(batch); @@ -400,36 +389,22 @@ OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { return result; } - glm::vec2 pointCopy = point; if (!_enabled) { return UNKNOWN_OVERLAY_ID; } - QMap overlaysHUD; - { - QMutexLocker locker(&_mutex); - overlaysHUD = _overlaysHUD; - } - QMapIterator i(overlaysHUD); - - const float LARGE_NEGATIVE_FLOAT = -9999999; - glm::vec3 origin(pointCopy.x, pointCopy.y, LARGE_NEGATIVE_FLOAT); - glm::vec3 direction(0, 0, 1); - glm::vec3 thisSurfaceNormal; + QMutexLocker locker(&_mutex); + QMapIterator i(_overlaysHUD); unsigned int bestStackOrder = 0; OverlayID bestOverlayID = UNKNOWN_OVERLAY_ID; - while (i.hasNext()) { i.next(); - OverlayID thisID = i.key(); - if (!i.value()->is3D()) { - auto thisOverlay = std::dynamic_pointer_cast(i.value()); - if (thisOverlay && thisOverlay->getVisible() && thisOverlay->isLoaded() && - thisOverlay->getBoundingRect().contains(pointCopy.x, pointCopy.y, false)) { - if (thisOverlay->getStackOrder() > bestStackOrder) { - bestOverlayID = thisID; - bestStackOrder = thisOverlay->getStackOrder(); - } + auto thisOverlay = std::dynamic_pointer_cast(i.value()); + if (thisOverlay && thisOverlay->getVisible() && thisOverlay->isLoaded() && + thisOverlay->getBoundingRect().contains(point.x, point.y, false)) { + if (thisOverlay->getStackOrder() > bestStackOrder) { + bestOverlayID = i.key(); + bestStackOrder = thisOverlay->getStackOrder(); } } } @@ -498,14 +473,9 @@ RayToOverlayIntersectionResult Overlays::findRayIntersectionInternal(const PickR float bestDistance = std::numeric_limits::max(); bool bestIsFront = false; - QMap overlaysWorld; - { - QMutexLocker locker(&_mutex); - overlaysWorld = _overlaysWorld; - } - + QMutexLocker locker(&_mutex); RayToOverlayIntersectionResult result; - QMapIterator i(overlaysWorld); + QMapIterator i(_overlaysWorld); while (i.hasNext()) { i.next(); OverlayID thisID = i.key(); @@ -995,13 +965,8 @@ QVector Overlays::findOverlays(const glm::vec3& center, float radius) { return result; } - QMap overlaysWorld; - { - QMutexLocker locker(&_mutex); - overlaysWorld = _overlaysWorld; - } - - QMapIterator i(overlaysWorld); + QMutexLocker locker(&_mutex); + QMapIterator i(_overlaysWorld); int checked = 0; while (i.hasNext()) { checked++; diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index 5c8f59f20f..20749cd567 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -198,11 +198,7 @@ gpu::TexturePointer TextureCache::getTextureByHash(const std::string& hash) { std::unique_lock lock(_texturesByHashesMutex); weakPointer = _texturesByHashes[hash]; } - auto result = weakPointer.lock(); - if (result) { - qCWarning(modelnetworking) << "QQQ Returning live texture for hash " << hash.c_str(); - } - return result; + return weakPointer.lock(); } gpu::TexturePointer TextureCache::cacheTextureByHash(const std::string& hash, const gpu::TexturePointer& texture) { diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index b51cb0ee3b..3a876a0e0a 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -1821,7 +1821,7 @@ void ScriptEngine::include(const QStringList& includeFiles, QScriptValue callbac clearExceptions(); } } else { - scriptWarningMessage("Script.include() skipping evaluation of previously included url:" + url.toString()); + scriptPrintedMessage("Script.include() skipping evaluation of previously included url:" + url.toString()); } } } From 872751bb1611d2b480bede9592e27efe3ec7dc50 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 5 Jul 2017 14:30:48 -0700 Subject: [PATCH 0758/1049] Update describe-settings.json --- domain-server/resources/describe-settings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index d9d6abc840..638c52a64d 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -50,12 +50,12 @@ { "label": "Places / Paths", "html_id": "places_paths", - "restart": false, + "restart": false, "settings": [ { "name": "paths", "label": "Paths", - "help": "Clients can enter a path to reach an exact viewpoint in your domain.
Add rows to the table below to map a path to a viewpoint.
The index path ( / ) is where clients will enter if they do not enter an explicit path.", + "help": "Clients can enter a path to reach an exact viewpoint in your domain.
Add rows to the table below to map a path to a viewpoint.
The index path ( / ) is where clients will enter if they do not enter an explicit path.", "type": "table", "can_add_new_rows": true, "key": { From 25773fcf5ab26ae25a7dc1367ea1d782c66ee230 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 5 Jul 2017 14:36:17 -0700 Subject: [PATCH 0759/1049] Update describe-settings.json --- domain-server/resources/describe-settings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index 638c52a64d..f42b56b56d 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -50,12 +50,12 @@ { "label": "Places / Paths", "html_id": "places_paths", - "restart": false, + "restart": false, "settings": [ { "name": "paths", "label": "Paths", - "help": "Clients can enter a path to reach an exact viewpoint in your domain.
Add rows to the table below to map a path to a viewpoint.
The index path ( / ) is where clients will enter if they do not enter an explicit path.", + "help": "Clients can enter a path to reach an exact viewpoint in your domain.
Add rows to the table below to map a path to a viewpoint.
The index path ( / ) is where clients will enter if they do not enter an explicit path.", "type": "table", "can_add_new_rows": true, "key": { From f824290a4cdc5ec34ce9a372afae7ff477989fa5 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 5 Jul 2017 14:38:06 -0700 Subject: [PATCH 0760/1049] Update describe-settings.json --- domain-server/resources/describe-settings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index f42b56b56d..638c52a64d 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -50,12 +50,12 @@ { "label": "Places / Paths", "html_id": "places_paths", - "restart": false, + "restart": false, "settings": [ { "name": "paths", "label": "Paths", - "help": "Clients can enter a path to reach an exact viewpoint in your domain.
Add rows to the table below to map a path to a viewpoint.
The index path ( / ) is where clients will enter if they do not enter an explicit path.", + "help": "Clients can enter a path to reach an exact viewpoint in your domain.
Add rows to the table below to map a path to a viewpoint.
The index path ( / ) is where clients will enter if they do not enter an explicit path.", "type": "table", "can_add_new_rows": true, "key": { From aea5779ed6cdbcf56a1383c59e00bd196cd715ca Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 5 Jul 2017 12:22:16 -0700 Subject: [PATCH 0761/1049] When a display texture isn't set, show preview instructions --- .../resources/qml/hifi/SpectatorCamera.qml | 49 +++++++++++++------ scripts/system/spectatorCamera.js | 2 +- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/interface/resources/qml/hifi/SpectatorCamera.qml b/interface/resources/qml/hifi/SpectatorCamera.qml index e3572a544f..514b6ffe57 100644 --- a/interface/resources/qml/hifi/SpectatorCamera.qml +++ b/interface/resources/qml/hifi/SpectatorCamera.qml @@ -217,39 +217,57 @@ Rectangle { } } - // Spectator Camera Preview - Hifi.ResourceImageItem { - id: spectatorCameraPreview; - url: "resource://spectatorCameraFrame"; - ready: cameraToggleCheckBox.checked; - mirrorVertically: true; - height: 250; + // Instructions or Preview + Item { + id: spectatorCameraImageContainer; anchors.left: parent.left; anchors.top: cameraToggleCheckBox.bottom; anchors.topMargin: 20; anchors.right: parent.right; - onVisibleChanged: { - ready = cameraToggleCheckBox.checked; - update(); + height: 250; + + // Instructions (visible when display texture isn't set) + Image { + id: spectatorCameraInstructions; + visible: !spectatorCameraPreview.visible; + anchors.fill: parent; + fillMode: Image.PreserveAspectFit; + horizontalAlignment: Image.AlignHCenter; + verticalAlignment: Image.AlignVCenter; + source: "http://1.bp.blogspot.com/-1GABEq__054/T03B00j_OII/AAAAAAAAAa8/jo55LcvEPHI/s1600/Winning.jpg"; + } + + // Spectator Camera Preview + Hifi.ResourceImageItem { + id: spectatorCameraPreview; + visible: false; + url: "resource://spectatorCameraFrame"; + ready: cameraToggleCheckBox.checked; + mirrorVertically: true; + anchors.fill: parent; + onVisibleChanged: { + ready = cameraToggleCheckBox.checked; + update(); + } } - } + // "Monitor Shows" Switch Label Glyph HiFiGlyphs { id: monitorShowsSwitchLabelGlyph; text: hifi.glyphs.screen; size: 32; color: hifi.colors.blueHighlight; - anchors.top: spectatorCameraPreview.bottom; - anchors.topMargin: 20; + anchors.top: spectatorCameraImageContainer.bottom; + anchors.topMargin: 13; anchors.left: parent.left; } // "Monitor Shows" Switch Label RalewayLight { id: monitorShowsSwitchLabel; text: "MONITOR SHOWS:"; - anchors.top: spectatorCameraPreview.bottom; + anchors.top: spectatorCameraImageContainer.bottom; anchors.topMargin: 20; anchors.left: monitorShowsSwitchLabelGlyph.right; anchors.leftMargin: 6; @@ -330,6 +348,9 @@ Rectangle { switchViewFromControllerCheckBox.enabled = false; } break; + case 'showPreviewTextureNotInstructions': + spectatorCameraPreview.visible = message.setting; + break; default: console.log('Unrecognized message from spectatorCamera.js:', JSON.stringify(message)); } diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 3c011cad99..b77ab1d8af 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -217,8 +217,8 @@ // 3. Camera is on; "Monitor Shows" is "HMD Preview": "url" is "" // 4. Camera is on; "Monitor Shows" is "Camera View": "url" is "resource://spectatorCameraFrame" function setDisplay(showCameraView) { - // It would be fancy if the app would show instructions when (url === ""), but that's out of scope for now. var url = (camera && showCameraView) ? "resource://spectatorCameraFrame" : ""; + sendToQml({ method: 'showPreviewTextureNotInstructions', setting: !!url }); Window.setDisplayTexture(url); } const MONITOR_SHOWS_CAMERA_VIEW_DEFAULT = false; From 0af53bb4a5a5b2676cc61d6176f5d44a2d7987f1 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 5 Jul 2017 13:53:39 -0700 Subject: [PATCH 0762/1049] Instructions and cool static :) --- interface/resources/images/static.gif | Bin 0 -> 920388 bytes .../resources/qml/hifi/SpectatorCamera.qml | 27 ++++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 interface/resources/images/static.gif diff --git a/interface/resources/images/static.gif b/interface/resources/images/static.gif new file mode 100644 index 0000000000000000000000000000000000000000..fbe46f48e618a4dd77c517ec3844991df5b65b92 GIT binary patch literal 920388 zcmeFacTiK`yYHWb1VTayp@p8%K}zUFzz|yKy%$68y(4G>p$bSB5HM5$kuD;l(gmb9 zQIQWw5fK#?6>MC;=bU@axp#hZf8!tLKlfyIc2?fcdiHv)_w3B<sEbzeMLn@QBhHLb~c4V zxp3h^WMpJuV4$a`r<0SDm6er|kr5t`S65e;larH>kicLtTwGiT1Of_$0sw$tK+x~~ z|J;T-g`4TwSnFt8=*i1qX@I{o{cdtFwLt5-N4fug);Jdz=I$Bj9fkJr_Vo|Z6nua0 zp&;7dOHz(UQI<= z3T^Ekg*I{zLCdS4<+0e`J9%{lmERBae{6zUu-``-5nev(R=WECk@NQ}O+mk?s4#U| z+1S`vnOFsx&pg>+J!LLz1UZJ;uqp~13o?qRZWGFaLF?D=<~#_vXT zod|FDsL%+T(9j^Qe;>ZSe}s2zXhdKnTE|*J<6n{ghv>hu{#U&B?TNTl~L^{;zP;P%nR<`2VkP1$9N0{|NtYqW=ijko^~k{|4sYsQ+tB z|5y9}A22V^|Kt@G9TD_z)8geR>mB4B>>Uyn`J0*C|H;hDQ{5*tBG^4j%RkuN*IU-t z-$z6CzZ(Ca=lAbt{o5A5Z7KVozWm>({-0C%KXUM2-2X?q|MyP+Cix?{e{ucA^+yE$ zNc`7be{ua0fj<)eb=O~9e?;Jq#DCrO7uO#V_#^ROcm2inM+E*z{MTK7as3g2KNA0S z*I!(JMBtCaf8F&L*B=r1Bk^B%{l)c11pY|;*Ij>c{Skpb690AAUtE7g;E%+A-SrpO z9})N?@n3iS#q~!7{z&}SU4L=?5rIDv|8>`2Tz^F1kHml7^%vJ45%?qVUw8e*^+yE$ zNc`7be{ua0fj<)eb=O~9e?;Jq#Q#rs!Tzh#!#m`6c}MK;Iu79Jub)4@e>*w;`sMS{ zr;i^F-@ki%@Miz@-mBf6?X8!a8~?1oSbP5L>FSe}<)y`i`MKGd>8Zz)6XTD@Mn{H+ z1_vHKxZi)T?{4p%p4;7BogM9Mt+!fkHa9iiXsEBNt*NG7ud1xLR$f+mwWPSHupmG0 zN^VZ}<*dw%^t4n;N-~*r>0(mig@pLH*qG?3$cXT;(2(GuzyNqO7E-ATNiNm64V@BPk&+ zCMqH24@FxHRtNm@k*#dM40xmY(2?5Fd&+a-f zq?s_}EjH!Q1{hPB0Ep75+X6+;hD_Om%!@<1hJ79P1i*=i+C3v0roIC%`jXd$UHSn9 zz&y`gWFhT*x$aHfsTXv#NZZUBT2hL*&WY&7gPww^bovfSCApJLJeOugn!BaVp1bxb zATPqyXnDu10DhMeH0ON=(N?_K*q^Z4LOheOl#ymUK5LcCOdF!Si1)6N0ojSSXF2)U zr%{}|J(eR_Q;O*frPAKAo9DPHd4b2Q-5P$Y)0ML=7?V_P#dOYa73)Zub1Muq1%LgECjN4?DE^sCZ*p!uX z&T2;$C`ieO7$CivG9jS+YIl3~2<1TsnVrKEk1RW01#MM@T#r%-Ehpk+w(|!Fi|~Md z+-PuBv(=R-8>qI4t-Y?pG%qFz_adplQK{s70#Rko)LMU(M=vY-oAJ4x?k~6~GdU}u zNRZFY>)eTYOoIbCJMQ`guOyOtZIsriZP>JE#{lb$GC4>xf;fIkQ8GjwJKnzV>sT;F zYvCgmebM3#n@;+>Ivk78=y&^Df})!q;!I)2Q#bWZbeOYPP;!HcZ}ZtnW$&ZOPpsi< z3QqTJx0?iAFT5xLlb(`o^{e!W$NI>yZ{PTpI4ZU?t1hVH+i#V;p2un3jZu2mch(g4 zk67BKau@qgC)-z2Aj^!=Gs)so%vkwPcPnR{Q&vhZeDbp72c57zMWiN9)NdgA7~KJS zx0rrPYi_2Nyv@@JD49vSa`7wh>=M;|G3W{t8Ah#3eng?km{9cLFb|_8J)>pG5O+=fTvN-(^gQ+y@DkOB+pW!8nEX!Ub6HeWaW~QyDyg?y#X`3 ztA5WU-KrnP*M3%jneU@8+yw5Eev@o-*)3bQhp?eel!V0z4_M**)#ZLif3w1}! zH!+{+8IEV%x^R;+S{rhwe((4M4qZ8zRKS>bui~8Jjpez?HABExcDj=Ex2uq>uI^{( znI0R7;FrOS$F~?D$1o0g(oixMWczf_lGB2vqiy_j4$3Jm$d=usrK$7?8u0_X!4?kJ zYn)d&7p{ZWOeOQX4hG@Cy42RK#`jIl3>~YL7Nw*T!=IQWh&%2CU2w<5gyfQDk^bp; zsR!90>%BHHrrFc}=*g%EJx?Iulg-zMRuTr{Wd~yrZr?Mlb#wAe^W|r9+r`i5W<#aB zDrG}I>NvW8fDywi7jz@LegX!hk{$501MWh>eDlhE4zt#2sOsa)V5Y0x$)Gg7RKU@Q zmQFhfwW2&)$s1($5lEVESp?H;EQ%TW<$PLFsqrL^0+n=}ff$6~4e2bk^WwX=j7D@= zhC*RC>Ge?0H&cx)>*+1e5JC7Gy4b8n?o%dj11t|(I27e&dtzM1@&JGN+!{^stg&@I zLjxl%QJkBbSjJMolCA&22gW<#&Uz7*r6VWD7D$iD9mhAUy1q*AZe+akz&7o36pl~% zCvJ2-A7C)#S$J|#&)(NvsiH`!GxBgh1mIfFjJyPVPh{pk@}YQZO#0)>+>Z{ng4#uEK&6pj-q8?AV|ZvWOikSh~S;38}39h?k;avw@QE22d|E4 zjD@XwX8Er9mss?Rc~7k7+ho&DG|TPV2&Y}SQqj-Dq}Fv^+ZT;KoLR;Y3%lxb-{zBf z_(>dl+;+f@YG2l8d))?8u%33}X*E@AtRO>aGpj1B?JjYoLFZ?9vCRg})gp@K0YxsL zPR)ls$U_m`>5ZdF@Ylu2liD*yoF#Op(evEg;uT3M!rB? zcWSl0_9Q2dleW{o>XfBL1KRSHe7f>wZPXkBc1 zUDt|al~)Ju`N%LOtbP;FJ`-;9t(kR#Fw5xW1p|v$TX=qRIHQlU>+OHd*gX<|In5zI zfya-Shk7^<*=z$Wa zl!iH`o+Y4ntV^>*zFE95?@xq^c91x)nMu_|5igGGH}VmSHe#-6Kh9`)JT?a#3&yO( z(SzM30|I&#;>ZU==N!2tC#N?QJM26^RGsv>>WTt%-I@|IU(r|3Os^QfN)u0SS8}=~ z8HG55W7fMca;Nf3w}^p2Qv1kTo^L(cOCWT^*V zR?FC|43`%1Me0CuXheaplG^KNc_LX+JFGF`r2C(o>X$B#v$3?SfMMS7%m$P)i-OWu74atxivZp})4B?G{9v`i zfVO?R2Ob@jn66D`G)(wK8=lf`vAt*PKZHcqitBa=k;m1lRvDw|vQCzvO-d?hhwL() z{EBhp#&mK-JxO}(;{1@;#~QWyMW;d!A-55UcQ>Gr4YQCH$WP^hJh10!%N^`_8&&Bo zTlO@d8C~JN5~m$WDh(%kA(|LE04oN;SPH-d0zT-lh~4MX%_kBv_^^fruxo_#VR9q01<`8#qpkKrgwf&p|~u21B_)MknM(al9#;>)m!JY2{m7sJ~cgn zBz!(bU98@&37cHst2K?d8s(V6;s|kux|?8Kb_CDVdV!U}YFec*%^MzPXqjtw+|=pu z?zDh{VfDgC_SRIOrB0d=X@Ou3Qm>$D&nr_83Qp9bOPg{V)SCX_( zK3wI9RT@o$&~0d{sR=lt0hAOsvt>t}_MDs03bt-luVoKpx8l8{vwkS!jny*bmb&^1 zmh*4dNaA%CmUX*n@#B+tZGG|T_#Dl{EpWm(W z-W9~I;=T0P{lD7%B0(xxU8*d?BQ5kyl_8BsSvTY$s8qGIEG!d9a}M9ds6Usl zPdu;53RGLBs}qI}u7L4)syFd+zkSkkbd@VwjbXWJ4b7YsrIj!jyE$q4_Qu68`U1<_ z$gOl2|GB1qR>^*V=KP?6&45fmy*~F`gG!xDWgcL8QH?+IMinSI)=0_P-G*+9`8c{A z@U;O&Ed8f2T2-7ISY{$>;Lp)_`NC)5BlHzxVARJj3!n%a$AB8hvfwdT?@?B0PVY3 zd$Pbv3IuvNMmt!EoMVb1APT%}*`^0c`Ow|32MJ^;_vpsQkx(&%5sfJ-LU>56Z`q2a zUVS8*Mmr;|UYRo?f(O}`rpmv-VXWj-{&XR7XB+zNljNn&coQN}1%?}EO}@1uNb{Ua zCyXa`15o@7yzYqO8?f$hh76yHx1F$c7+j81dvU zH%FF&k7AO}mr5kg3z0=uy66Z+E+TF%qBl^6&HExhXn|xWZpi9Crw;ur39bG)!bK+i+Z&9;MDS#>zv|+UH(`$V^DI^=$vURPmH}q z-mL&1COH${N8qoB$Xe^dW5*&AI)WSq#EbyGO)?}71P~6xP8A_SpQDV3^`kK&JRH0p z{`8JrdFF%qZq%y$uT0x+N#LQhRM1sWZE1h`CQVF|AYKXyLVy(vyzPXbrLC%= zFy<17P24UyN9Oe^0Jx@Rb$qjGc^2W44G$GQ z@_|Y=REzUKTE%{y(`R81mkt57dXVAe7|;#`w-TI&27F#+Vik&Uvc_H=fUvo9;iXss!Ax6beV^$1X+?Do2X#MyoioTmSHWGvwDj^C(ql|AeYQ*AbaC^JkPn#Fu={2n zkQ8pvPbl6??9DS+jCOP%8S$}MoIge-sgY}YRO#n@fdA)^cjBR9k7@Iwr5g*X z_0(nU3?T3@5^$d(cqzwY-dx4bN8bfLUC&rCAA1cz)jNXQ++=G1F$7qH)>H&dwfNX; zh`JC3N^ZElTPaJq_P{Qz>IGGj9~W*jFSQh=Z~N7BwcWUX*HrFWOCOx0{lt9wj%7Lw z4hnDTC-I%aGP%30Aj6-6vZw}*c|bnwbY_a+KjX}U!mYnf+|2@L{W)V=RiNr+w;VTR zve1BaHKIgq+RibNT&^DVxJ=#g)+_qp=@Y@AP8_dF`_t76wj@5E6cwNBtXfEZ+8RVZ zJOA>TxC_|Zd0{tj>Itou?9zMkWiA~k2?OEoex4YUM+MyO9|mi_XIU0Hel3vONJF1v z1J>bLbq8B!{kd2NZVb89!cr{24m!3DWnTOQusfd&XWWq&JVM~?HQz6vOw;Pk-No=-`f?;1>9 z<*?_0Pf-0*hr!W+c4hta1RUTetIfwR22zB*L$Vk+ zSE8(O=VAmokNpOUtJONAxEhSrW8VN4mhv)xbx$3jZ}E_=vx>Dv0Qjru+d0m0k-}FU z*~Pach6^FV0pO2H7nN8haA&S*2R5RuD|HZfBkUE8dZwB_y=22@HZV3OjgY0EM8Ep# z>uB&3f`Dtdz9oWw*+P>bSQF10_*$6{VGVeawnsBiWQtBdRW}=p z$*-q>VCi|%t*}YvMW}x^gfu?rJ$t((sH3b&D^Fqg3J3|P0QveL!EQECK74Ke7S!-aJy!b(DT#bitM_sy{DqZ1dz$ht+45N}$g z(Q|f;FupwW*Ey3zGgw|;qdx*@^p&0gjUaHe#yc3H`JgN^(Cdud`>kWE9;_RPPr2cM zr>VR^8klJc(bR&%A@vYJ2G|Og+hfb z%49=Or?U^5=u7rQvWpW70G4~I4ReG46qJ%$dJAn4&|G?&^4+uUz~8I7sCz*_sliFL zQN3jr|3sz7v=6Q3kNM9-vSPu!Us^x6O_LVkK?1DQIf?Ty{H3u|)2 z7X8YA`~w6M+dFh!)0Q4+h1Em{y?*FD1&_YMnWS9&Lxp(td)=1hmQ>L@?HXFSO$)-U ztnrJJ3v$wuDsExR_ui=3UnJ||4uK4r0@a8)Rc;l4(58ci&uN8~;3I;BdQM8U<+u67 z^zz0JG)>%jYah6{cDVUa0NTt`8!e}!4v&n%O`#2Vwb6L1bO@95hxZxP8~GVhNaQD> zYUI9g?%eAELmj~Y^5a7m3D4V?foS4H0Rs_43VYqQ|7i=~#X)^tyWF%4{hY1RI-e22 zIraK(PEBXdlaDEzp2;*khD4=1Ux#aTzWNPhwB;*5d&wsp?I4v=fwDxh|Du zx+Z--OEpZ`tJ*M12b7e7rXxLIc6eqvwc6o_sh`{>Y@E(1t&?!a!(~$@e`tF(Ty>-|4Jk?k zy&E%?4pYV;@vxrey!;EzcfHWwy_RULf3h92%OcfvKyq9kHU&8uru#myD7RxmGickn zha{^%zDXgCnXq^pc-inUkW^~hnMl_kv^S4MjHl4(ixDD3sIp(r&Ke)$YPT-GZxL^+ ze3LQPRmNOkND+}L+6s6qe)ik^T#pq9Fe`nov<)gvEAmDqq~)pH;5n)C;d$N^;i#*3 zv_1xxk(*T?VPx>x%Pc&_esK#v&q@?F>*Bp@=}%V`bQsQF?_yfkx4X2 zhb9Seq1#WG6zw(V1*CSa20pF~;Q}TY`QUO_TE1u8(%g42N@ZsUlO75}#x=;X9a*3l zXtH|O{T7J|3ti$(f*Kr4f z4jJh=c~6mN^YcjOI{=6i>)i6Uf~R4>mOk$;Oi-aAZC56K2)8khzm+8vWMnYr3D{OgO^NzGDyyK}faW7G8n+Cj4G?n%NJe3M0wVHI2@(?Wc{&$TXd#t#^qjv=i z5Zvc}gmDu$y*Yo0)6n#PxI-Xc_6<~aGx zXl_ zhJ?6b(d<_g1p&!apozQw8dvc zj?5xdWPbtSb((x#hRvTNBg`^>ra*)7)&jCm9-lFHsOhVxW4$yq1TwmTDV$0H)dOhi zr#wW$79Qm?DiI?y2z;*{lgsu4m~flEB&2r=Vzto7>0w#UDVt1S%H0J%q_=rZRdY#a zoC#)pk?fl6u0otTt#tU8@a?ngtPV~sI+jOAqYUqK@IY>Zrx>iCpoh3Ws?#th zvXNXQ(M?Yy3Qy-Ori+zh_q7|b#=2qiymmTmogW}FL`Sb!8yxBn3BpzwlEuO}vvevf zoFJzR!g>5K-XZDbgfWpM4?&YCwx(Z8ZHz>!=5?b$CobU<=W!`U!R)>2m!x~-RWCx3 zCP+v`&v+2#$>Gig;x(|#{}>E(kr!^8pD7gCW>XbO1rD@~;~?ztMopd-6NQ9FMPUp^ z?Xy5J6s(8xq~3?1kMhL;(VWm*QKM^$UenKd%%gT=la&ryZi)iPqun_SYt;Z=x+6O4 zg9X4{$475BR4D6Z*oLpA2eUQW!0@NaJ^Kqri=7;2vNb}X-#&s1GqF5ROyVMTKvpLd zz@nruiu;wOX`=1T^pO#%c}PwQgl$eyU9E(rIS>Ac7{mzk`_Km_Qw4_7xfZui>k~(} z^%9kv>@jEs^EZmpR7vB0h1JXIH~RHcSgFh{;R>$m$`kn7mpDyQj~cWzL;B0(E^d&} z!}l-KxCm1vWvfQ+Gl$O~Y<$0V%5=p4eH*0l#*X)Ad9Z5Mst}h~1|=b-NX>1oIj=&I z?t`kA=dnVAoqV1t{kkVj1*3uLo-rk7nVgJNCN`l8UT~eAb#92~)=|}fpK)z0#>c&{ zPyLhuaEOQUM}yAVU^Fr9+;d)$$O}zLY0iG-tvX?H7Q2=&43;jW8!{~&*X7k<5NLJ6 z_akJT-K}w_t6W!wY&e!cI`xUyd z6mak%ha;}CF3=4~EInrqqinak$RTQJN~NVWD*(dzDNK}~#L2$o;v0goGQo7DH9BPu z;LOLGaUPPt$(oP<;zVF@Kf_JdsCx|XBmJ5?m?3Fo8~eB>AdsCPrGy~^G`*He*KBCt z{az^1SlEP7>@(qQm@z-nUYxKV2iN`S{f}&gXZi~4Mo}(>nbW?ZxbXEWx(zuJW3P>N z;(c*$EbW2KZ7#)8xhpADWpMrrJ_f2ra(R*g5zj5pKkveITu;ofHLRvz8e~%)R*%Ul zs|fm)g$6AQv#ee*!;4XWnOSaxj;-N?jhd^)VLCrTIM7q;q*IvS%s_=Iy3a)a_5k%F z%sE<7ZYPB+p?6#cf)+9%m*CdX7)*2KLl%Zw}WXoXAVR7xso40l; zbU@-;Wic3Z0JLW4BvV~5LWWyFE*t5E$H6!&NavMl`CM-Do6wysT?QsXT9~dZZFtu9 zH$I4&+V9;6s*ym6lD;Y)fQR8LPHl`wj?$(NC^Z9yw;w~F$#52)dI^z&efSZwsN`~}-Uq3{be}x2 zwOtFsjAsEDgr1_;zyV8*I7gW32ZqEnMnYRfde+~tbc^VHq%w5459|V9GQ+^4kmSjr zM&;@YQSQ~p-g7nD#k*7;vk48#Ta+mSy*?9U@y5|hD*J$+*}A!saFZOrmkGlJ6TPue zOMTF{M6;v12yj_f(uVKRGTMojDGPI>J{%)!A5n0UMqA7rBv9i4t?3Z_7zb1h;<7T5@p~)C zNIzw=B@F}g{2~GN9&_V`)j?oE6NHT4>HFVHb54&BOIV~FkDIplWF{5V-ElExXdrV* z-D1>w#ax4=FP((8d#opy74Gh@DVA^@>eJMorBJ|2UFL-rE-Y2@hy$3!AQRjB?sRbiZuwyo732j zG{O)7`9UHO`(}jD$uOTOOl;sRsfPzDQ^*LVdcL zr&g?H`BEvOk#(lSsNjWmKYEVST6b{nQFCMNFKlStlvFu(0kzNUGQv6j-WZ!L-(H7; zPhH-p#0|XWt+^rl4kN|T9M(Bq=o7$EHOR8IjlnMzE53#m70Pzi=i_qN)07vp6RKv=kbxIhyA#KrCH}n#KMkk32(IgysZDk%61R~}+6}=VRcUrYPhfC)yxy*NLQe`$I3m-N|ZnBN$U)uH( z;;uEM%+M#cF}|B*drk}#-q7{yEX;19Sfw^Vae3-W00` zK+qoHTx!~_j7b6NYbZFSl{VnjP!636EEG#(&FY4=H@wb1g7a@|6&*0t%|Jl|DzXC= zHG}(0FRjoEXBi=k-HmM5GKvRCbX3)=(tXe3mwqcf0zNv5# zJJdUI?}4sPu+0Oond}pH`MF5E-9A*2lsUBldPxK8U7{bdOkn!_sbB#WHI&-jS|6o7 znwISGs1~Z>l>Z^2IhVfXi{Xw(751v*vvr$dS^CgZd|5i*9A$D znvQ~+hO(>?gSW>w#8h8%sj(^R(GB}t&2&(fKn^j127k1anAnpA5^p0_?{L{+Vdpd9 z8UeVmFrSC1`O06!%fSsCZ&}k`J=bc5zoK&M`*Mn7JZ=lxg+4Z08GjDVe8VBDSYmP| zC_LKk{la!9r_~LCfK1le>4<75^NRzoi+&?!bUbm9T{0z4Uv?UXP67r(EkRUU|Cd@- zlJ~VvG3T#!zP6`g`r?1saJ>Oo4EAWgaoz4{vYTV^=wu zxb^4)Kl!Jm-kD}4hiB|Q=~6xdTX1w%K~NEpc0&~eM7mAF*`SVA5F4dnMftTG^r z-YLE!GG1qRv9{?G_f{zSI zPRJdQyttVqc+(7tq3Mh(>fJ`>)WSA^gf&Ab&H?z&(~(v00#3|xCLfr=%3yKjJmJ(H z(Pdz~C1=jo$pMYxShrk`*o=nlhkq9>%OH`zyeVG~x91mzz1w2cz`-vJTDMHF;8z?s zm{$7Lg71>fPT#eq5+TyfE{(=~*Pz^@#DEuVcr}mkH)Gi?mnGZ6gT>7gmMt?beSv=$ z1gh`W_?g18Ot0N+1b!nJUl%=1V`fNDEW^RsZc}Mo;QF`8NGq`KvYsm^7yYk2M;5vM z0%7Sklw~T;{Kh9sCU~-qw3{F{&;Df6tyPT)bRo!SvLTn1CKXz{FZ z9_Pf=^ccukF?Ib5R7g6Sz3Q!V9seK9rPJleVe;V4 zB4VLC^ucJg_^{~s2k>yvxpgBR1%xVT?7N2#bHxMd!lkMy)9<+flg#!8ONiNhdB(`jhUHKA^l4>NNyOhuJ29v zz=k}S(T$Zp!O;_gR{?juJ}AJ#px>4*)Y3t);|-My=WXVr1D(#tL~XSGo7UFL_$jc4LfRmMOR@F zhgCEa!z^=Ff7$K<|4KWiC}8NW6Q@Qe^c*JN*sIYrqfn=iDN!hTMQ~VwPE5%7fET0E zs&HMXC7INnDlmBSQODC=D*asISYgL?d3hgE#t^z0)Wb|8>w6>yMK`Vhj?gnm#3Ad& zm+W$P9?|ifiY`V;kw8+dlY<+AgFK+9BKX~b41RYEdjFlzDQKbjX@KodfuaZ~_D$Mg zZBJkyV@rB==u$IR5>rFgcV+$69>C3qRL`DFRq`?t!OpJRAX(UiS^ym(?uS5VA6W zPlAei^56->hF8i2vw)znRmK)TjX<^N*P)QwDFD;y_qmUfQO#=@(1K@;FQDcPqtJL) z&J9)?UTf-w6n}2uImx5F4981_*1aiXhn3%KU;@ej7s5o!~o}ciNqqkW|!H zz{Am-R~)9U)l}28Co{KNi(b&JLUoARwHiGba2e!D37GIx<`HR7iZ|@J7K{e`=NN2395A+LK6G| zC@>Hvl~LmIu9LeuY>bMh{Uh%w#@sQSU^%0CD#l)AtbiWL;+kolJ60aPdR^a24X7J; zU(Or)3kfw;_N_uNu)Ei`|n)Z@tm+L^H(#*NNZ$HJu`-B<> zdi2Ro!UDgHRylay=O_&p9G9jUIuSu<))$}{2eEkphk&|Ivj(F>Iq+ro^DMZr(@ zqj=+zTbfH7q?Z2KwTexD(s_qZw3vn{oqba#YV%{&aC@Cm!Mi$yW3b##QtLx-nLH4D z;VB+2FkMuw9S+=+pQ0nzCzDcKe^~R{%jYQa$b3q|0tqUnsilhkFVc|_MjN6OuT#jv zlko4aw=!8dd8?o6(z%X8PgTR-Hd@I&9=FoZIznu((7{GN8)YOQHZBK9a@UubDRFsi zCA9z%EP)xiY)`oCj>PBzjU&lUc~R(g6I`13(j*%X=|h_H2ZWNb+IhYLPCPRZP~d`R zh}`5o2^QB^Y!1q2fPCQH6w`kGT6jc`AwW4JrrafNEk^#c1Pd=AB%I$=TV#l!7dhAH z9WCD>Tt=AS?Oz-%MQEYtJVY$^{?ON@RnwMyuU4YW+p)mBQBrY)xoLK-ZD&R7mQG zUtp{WHQK4kV=YSb6i|U$;ERT)+%9B=u_4T*jY%VU8CFaBE0*>?N`aivAj&LA5&v?; z<8yn&xH8j25vPb!LG_n(I^0k6XxPQvEkr>UhXdXMCaM|QD?dJFv*|Pc&<9;F`$!JD zUmlUTU^LGF+jnp-Xa7LZx-BEYf=K*n2dRE>=Oqx)W3M$WMWxzF2@7AkU~07a&} z_bF>YNW$x3*@TMYu+gY^RWpE+d-|mZD7=w- zzUUACI#2)2TM_t{AUOw1NiM(VpPG#hw5_lFA~$jexRbhi7WRt}SMO_F&n$1#DOxbW zTKMK&;LUn*T9g`1jJ<(mhDm@3{OVIl6f1d1B@X< zBoRMF#)RE@e(k6_nv`VtT^uQ}U4&6el~$X8c+TUM0>9ugt-9QqI;v$29Jk1_X{0wj z%tIsJndBw2nHaHJEVTYC+Og!FM6d0!iix7>gFa#^S+&CN&)>~8Cjcs0FACzPGv8^v z^Wz1ex?u{8qbiF9pp0@0IXwm$YZ{hyZ4`;4E_lz)5Fs$IYbAOm^QBe01Bfz2<-LNX zhC8TJ&*u&Ci}HG6qOi~?QS>m;Wrs#sA@>w5rY+Ndi^0#4y>HK5OS62C8|MLzQeSN- zI#mMN1e`o)i)V!oYz`skka*Vg1s?WhNWiCd3nXtCz9o?uzBmN3>69aT9tS6-w3Knq zRkuKj!nGLYXZU(P0%0Q(>C)HcM5N=jylq<*y`GgcIAA&|QnzTHiW0AR8453U(7YhqUp>&XQzn{KXG{7^J1>9l>nxN(;V!pZjm`o%Y4f`M zE})!1EC&PkinO(1T6HCkk|G1fvE2+evwl>g9lIbE1C_F ziHmd_rAHB?+D}UwMG(7*J8ISixm*tlvC8_$Btr)y3kHP9gF|7stt7oeK2?Mu;eN?0 z)4R!}r}++_m}!v(ey%x-^tB?8K6Q1dFL$oB)Ens5H_UK9JF?9+&i}mKXJ#aDrTXH4 zb`qgN*cwhJFv9YVru~|3mf~}asiG(R%3ILaFNl=%Nw0m zeYG~N=2!1go_q@{{(f@Q_%j|(v-Xjc@ZgO$Dlwl)t&!^*=B5DtHpi3^f&LphkdooK ziD+2C@5yKv`tEJpmBWk_Gdk((z$A&+pAfco4aJ1G9sUNJ5yxlx(4Nz5xJ;;ZrBFK~ zy@fW|=ryUYGfQxAi4A0O&RKytrQ^9=(>RFhbuU#aLSMxvYqQL;b#}_>Fb=y-mY0BO z*4{Is4d*rPMis0so*X%W&ZLOcO5GFw zG3%`V>G~Jaatt{rl+{WP&yepw=_-TpE`C)fpCQ9)Y8@t`5SbGfjG4&@D~LmQ%W0fl zsN$O`x~>V@>+@)qf}xBrR(-s2)+ZqQ@$qAJ?g;@|@PLXhD(DnB=D~rX4$=6AB!9%) zs6BIeZ?mPVOYL8U2x;Uao>|ZGkuAyBU1P((kN9i)e1SfVBF|-pukk=fn|_z^%nk^B zb^f|7Wc>ZHE;F%dRQc}aeZRL#6G$_2L>GiX{QaC!Bg{TRE#xNSP&}Qdo^AJ;C!!2n zUXME~2Simebj2iAf&vszTM@6NOr9WB}F78Uu}Y2nr7UeUR6cgK5ra#MiZ6wzho)&0Tqe zv=!5-t|3Nvnssv3fOD&mPaAzt5bkF5YVe)&p&SXI$B@=jt}kLIU*^<&zy*R~;u2o9 z8ZPxa5vhnnUh)cKuH)OMx1Cwtm|&u`CzEv4dWz%X$_kMU-%2<1CdbH&evto*#eqqW zLOV0dq*iR#KRO=sFKud>Kd{aaOz4IUwSgLJdH}1-SU5sf$e)Lj>eE+!$*Cq*&ue{d?^3{R^QcvN_IOxGR>hf&+= zuhZ1(#X>zCV0uN}ydKbDT8Zt=)7XuG;>HcMg1e7?_GUrEJ)Hrhfzj z!EsECKC?)+fv+EOBpWS@=Q-pP>^U`Xr*8d}%J@>ldYALjS^VvLM5S>Ii@_J&BXgQPt=gZJ#MU60c zOmOhxf-OiwMbCL$NVI#H^?AE&GM9qLbIrUz*!^(qGkt)?niaR4vH^G-NwzyW`}-0~Tlk&Ym1 z8K^-VJquE}Tzne}T_0va3>be)ztdvna?v2iWM{6LJkN+A=DX<1AKWfzKc!=wS?tMNB{m&Pp8b->EWBt5f32X+T9L!m{HN@zs z-J5SDMX|D4?IWim7;)zEPrnS0#+gx&C5sV#AuNad?Y?=Ee4Ubsl|Hn29JBcawMc$_Gc&-Z2iufJ4hd ztP%iZLW-Mv`YBcHlvZ(ATkr)7DHpsn#z&fbV)^6>$pACPiiQd4w75PGF42To!IsI? zf$Ow=F0Ado-eojx_r3G@tzu!i+51fS?WNCx^JRER^x;$X+AJLCrz}x>sO)6c7DDY* z3DU&oN%%Nn=9S4Y_bWpqF5uI)%pv(z7A$S;jd}YWK7D>~0?lz=X~p2#!6r^z&Op8E zUP-mWf4osEOIjM_dkK{pabl$CKaEI+mLt@yAynX#y@BhC8QhKZASWohjMFs!#sn~xvlbc}!aMVq6+ zj;5V4YLXd?Hr)tHg=jb-H5{$>7>o)iW_r&{J>V*g+5#v5Z!$kOz;C$QU}j2}RbtQs zse4+k&hv0uU)ZVm?D6h7N$s>38$4e)yyKBt1ORlU#jz-@%E9Kb#w3e8a3h)X67BF= zc?j##g9uG4H-RmA%CZiSy8Obv0{cg&;votr97qxKlD69vW;Q{CfN!=A)IGQp9>_W zKK^{Uu0k8Q#Lqv$*%3_sqO48Zz_7tJxW7iet~l6DyE>zl_xqP?KCu0B%H9*a+Fk6< zV=?tqeGsgiMUCBU(&btbFYQ=3`ytfnPF?bKHe|q$l`n~$to;IJ`{SP$C>l?#2F9d`s1DFl@t^Yb%042Wnrv7EFX8Mq3cxq}`rZlUkpYR2CBZAd zUcVZ!2}oqxBA^{<`-ShU4;hPBBgEa6#qHM11U)L2-6B>wj@l4j=8MbTLXH2uAO_`3i$7%;}@+D50N8#lTco$Bb677>O27z0L+ z4iV`V0Z{>qZj=%QjG+jEsGz7AKY4uKpV#Ny_vgN^>wxi?b-oFR*Q8a=#+|OTVo{&h z*~6^$5o{9?e^zpMtdNflhyVJm4!-d`>`7Z|^{`MKYuNo5+s~B_RG}=Nvz$*A8JaEf zw0m9xPav!?qG>UuAMd7oZ7}FlH%U%6=1#G%8XEmIM+^2 zrLL}gb&FNXm6!zYW?gAP{}BU1gLfL;W38!=MI#%1utI0~4{4y^QnZzCAn>Qjmn!y> zdU+~bBYEF2?I0}A_hIDvh-wJ1tzaVHb7-YeZ1;i<%__wx%2BagDw{@gxpGQPg*yJE z10nP1tbf}**GoJ*LKjVrdPb%R=LJJTOzGao$X6k$z5@e@!47sr=%`4cJ_s-|%m_m;bdRQbPzqpQ!I{JUe&Ps4F1WVGOQQ5o*G)Xx5ik$A+(US$%VCMxryBn%yEf3+gOS0ozCl316#dq#-9nR%vMC_!2nocFIf zAD=O~(QLe?WMb$)^reZ0@gM~0LARTU#~NX~jkKMvh6^5EqXB^G%L;8oSos%qyOX7p zcGi)JdVWD3HiI&z$4GH{8}GG(7kcR3zIv&-Gl}Q%V1b-R8Er^5FlY`K^>N`3KcLJw1$4%mzjm6Z4#kPGV z1Pj4Ob%ywNdT?BnIw&7CtFyhJvJvcZ zB~lsZ){B-Qt9X)>onFpQ z-&YMvHx4%`BZXacJiLQ-zE&pgy0(*mWS25mhGj- zWO|x3-{5M3Q=v*>^3Q1YFbe+zGpsW#hBz!=>@~wZL z!4koySr?K(Y%gx`yWCRwZ}9>UKBAw zR(k~?@mm2~N=VDTb&tRL8p@)srRo850;6+dhQ$>of*Of}>95(x?Jg0g@)F!c#U923 z!=d~x)gQ0SiA9EPm3Z!=qK8mFB?+HOrhgsa(2eNs5aV@sAB_MpLZi2plv&1?Ri8{U zAt|x0KsJ;L(D!&EUJF4>1g`w1J`+@qID|$KL3y7(fPxwUA^?N{Mka4}Dz@ZGX$`zW zu3>;!+fv09)4OLwgEoNw-L}~olD~#~X(KratBU~T7o_T)oa293dh-spTfGsauK@x# z(4ozZngHUC;;lM3_Z>|g%PHdq#rbstXY7CIVnW*L3lZvlNjiQxqKD{CMNH}fD%S}(B3Zv?HOt-h%l3U6zu`$|0loQrdko{oGKs z!R^Av7FrG|}(W0O4a=cZQq$)|2DeQvfW&#F1 zF=3uZl#MEYc*>9U+VB=q(JBv?&KC$)d0eQV*mi4sq{bMaU}v{?Yk5{8pP)T@t1y%p zcuBQ%TNdf?MrN4!npyLDx8Kdje|fKNRZJIfJ>Yu>)_#!*t9fMU>-BqTU>rT~v$^wcMZ#dUw6xUG zy|_068Qa+q;IE%#Fs^ZLaR!K=s~~rUuB^@6|BxXFlU)YOE8IS=P0Jj%=kEaYeyIq< z8gdMZ7wFsd@qU(;*#Koo=d_eRQn;LU>(qB621ZeRI1)l*k7oZQ7!ye844RuO6+Xc4DO;G;=Dakng`l@E) z*cc7-`j(*%45GI6Pn5T3rXJIYF^X{2ew*j{=>{l%KKSzP)ML%aW!IWQ^zUX9_8ekA z+V?ag>mKR%$V6SLx3TdkF$PR9Ick+^bYm&-cqhSK^=6vm8Z|WRzMPNx`zERSnB9Q~ z3{5{#wLIgGqK-!UdZNIdsZ{?djKZK~O7?UQyVB-5+TG5@Wn?818F6Q4h77KqbTa3w z7dGGaRQp5&D9mg3uI2?}1!MenA(JY8bQvctV^e=Xi~6kj6f{03ocJZ?jRj28>T9^v zpVW#dqh$WEHSXf*Mfk%<8%{%NT7Q|MR;yprAKoj~ky%0px3^AD-x=Ef?jkos1yvV3 zTK=VUHr;mmMEU^ue#@{x=K}=Ga56N!7PS1gNPmgQj_TSl9Z`LfaZao<(DCuvnjWRp zQyQtJ%t+I+Ed*0*r5k>nPu82W<1n-m9P%x(cu=70aPbQ&pJ!VQq&sF7cvAI@t!lgT z1Zi#xR2GT2VU0e9)TJ1vR-m|?M>k9N`5eDm<5gtaHI@9%T6tFf&9Bv~XvJdsIG9C# ztL4&SCbrf?=G$dk-14SO?IWRCeHRU!tR)4~MKt*@1V?ea1`2uUft)SDtLZ2)UG-=hjjY_;yB&l(FEeUDHhK)+)bBFy9B0RrbQEQ_`K=q@O}mYCo33&{6g4 zJUsErzf;Sm4A`Cd8FChlW{B0)vIe&Gq$P627I)y*KZ+w9mFepl>a)ml-K=e(Boj4S2iBNe(9`-&hRFaCs_Z8AYZAO-s zRo@~?a@Z`H-T-rm#b76+N_pDP4dsFTQwjyc0&_lv0brT#2}?C~!P4O&tWN;#HgX?^ zTG&7ZXbQ@+HltH7r;92L4a0hSWW@TdZD`gA%GxH#%lJ9Z%64HwvSi)e?v>0FWJ~%~ zR-h*L{7b%%=-Xm;1khe*reYLmPFd3`E)r3x%-L=aR8x5iLV-o|(rSlf3K-fyS)+8P z3H$zrj@5IsH#Bp0pFnoItFywYq=v3~xV8B4fW57htMn;g#1`K0Ok|HxqzrA7T@@Wm zU%AC9&5w5&v~Il+CarU`vaWfkv#^M)NBarn=s%jC)4V4QE03OXCjKUV5;VYM%@~KoAjRic?|4 zG4?^C3EcuYgJO-?OrNS%@0jn#G(1A~asHXjqB43Gyki5FQhP*5Tge@86pS_Ty?;r>l_cwnaUpxo2tlNXq~x zi|_(O%{-}vWvEluuko#LUOt&1O%a5@^QJ;O`NVGANZ?p?9l@@8sAVfecCCNO;!ny{ zD@+W2;2$~qIAxPx9z_)I@095*hv!JtP}514aene2y7fbW%fTM zPK4V{Twxn(dH6D|oMTbE(Zp%KPMo= zMQN`SfCgv(M8fdu5TN#u+WU>Y71g&UOiis5qJ@zKJnj}*g`~Bc5O(_ zOUv^kjmH`>;>-EP0vuP1#9`JK4mhdbF5gy6_3%Lu7Yc-Y^RclRB|UKX}68^_vtT59DAd*4+Cs{2JM$!0YTz&N9u z%OyVk{=KbfrB4yvqv=JUdy!rgR2ECMlx0Mh{UeqNk&mYR!kYnd`#;U%VhT9vA~~>p z2Ris31Y^3WSUH?usS5_Ho)*VZKMI2{?54|j07LrJyaljeJ;3QvGF~rDPP*+^$A9H_ z=|ZK>hd4;=PrCc@!$CadQ5D!=sQ%ZAs^m!;9xok4r`IFCulvA>|YL zU<9SoWJys<@pR@dmYl>!%qF)px|;ADKtxvBDMlF!seBGA)Xr`14J4pfzc?hj(S1(ZW-ta9!;sXy>xbo3UA zK8Z_{sl+|cR&i^;uZ&E)LgPqPrFL6c1ostTnXE;We@+E9Vuye+y>HkL%j~@)ufrBz zPqV87e!eAQidZ0|(g)KTDsiHxDD3UCQfZf1*e!1!JB}UeQ97_oi01gj+Mcl7O-sRY~Jg+fXl} zs?!2bY7#l|)FNb4q0C%qMaXeB_0z5CRL@B#yw&rH_6Lo!EG|>(Q%3CV(<OZe8q`rLuVKSKh#YO)pG+yipD%iK{@!0^mJZ~&;k*I0BQ^dtr-K9b(_l(SLd zGN5oM#zP)V&0<3+Et_pQJw>N^;R)Tqi3inKu~-U*`of-(55_4!C-8R87&3aiJthr9 zT6I4_-IY!^EKz|eBaJz#l`#G=3;hx;{MU0l9GcegTwpHzF0*p_O;5f^T>qt+44+%{ z+Z2SOhiVa=HPKgq7&_tmt5j`&y2i5R=Mq%|R6e5 zg5f2s)bYIp)6`M_6eIr&?~b4YiHQC$I)LdiEDfutPq9$+G9*6NvJeG#D5_pm1Iu>u zKm97CMJk=*X=Nj74F!ntTKCJ3R45}^*v7>|=Sm7KQOCc_I%>_+2z_j@I(8isL_HYV zo!-H&z7FM9ly68E)-S;jatHb>udsCJi#rvjsYIWiDy|7OK=dl;H)LTINF5<^iwTL! z#nsoHBib91_>HjiCnacXqW$k^I7R`b4i^HLnbgW`c{(M{GmVO?9E~0Rg0{I2WWwJ; z&qF0SzQBZDrUm&>KP}g~Dx`Bpm!hNLN!$bZYO%>@?- zJvHIG2X$$SQ${A(4w@@Af2c=!w%>6WrmR^~gnW=gkj1`3Ft{7&l=4Vcully9w6(6p zmqeV5GjBVBt{2q}mQ-^y0aiL;%_OTq@kY>v0Z%9l`A53j2djN;*3hyjS<`fv4vq<( z_lb7;wFS8n*u;x2NY^p=-&T25QZ4v$+KnP-oqo|j0cKMToDqvuY8{|TvORxK2^MzS zaIwj$mTjrNz%yq6bX=@*rbVI09U#d}#?@;QdIIHLo8bTGR?nFm*4i!}jL{s%2576WkbwPZ~f$y)+v(`b3ZMVntw5q_3wfV~_rX;)&Z$8`X2$*TG3Ot}W` z8$|TIdzo##T-HO@M~CVLN%vU_p@vHhlcP6$`q{@z$|Em;U;UyrHd2xQcm9fKGsxeJkLU=JQ)aE=C~{IdE&G8PwC*3au#aW zDokJ;lnpZm*mvYjxv3}(627)c(|kPtN_f~D5=Xs*FX{*ZP7I!E7uTK$t|%W|l}8GU z#S6&NjX$Y76NIffy)aG7kKQcu?2VWVOLG*2yfku5yXicHLEp-|r#`6 zp`iT3A)hVtvT~^qefRePj@<2QcJ#qtC-UyXD;Rwk5Ws6*&Pz{}EdRdzEgPb%VAmUsm;K*p-pA1lsx&WyD5ZR{lrHVZ(m21Y#P#6ZAgJ!zjdQ1b)ieL-{w@b!-Kct zL3OV!1C>_P!3ZRG(km)*W+CfDh{i^F!u2-&*X6ey6hnl};vpc(QF_+}zutRZ;dH;Z z#M84biL-Y7z=F)YW;ey~ez6(ps=1lOXf+Es-q{O_ny7z&F5AD&8QN z8$3dRaNe6q{`k?3`bpG$)_%x7j_5bS`)YB}(9cb*O^Xv&l+_OuQ^1LuO)Akq?!!m_ zP1mVUoi9Ip>uZ^{6%j1V5i+>>>??!mS_gBu1E2Wc(?%KGY5jZ_csFp=$e-6OecFprQjWVMk|>zJX`AVHn68EUp$9YyiPm~JM-|d zg#}eIQ~e8g^Itd^$tbOHb$0$}*dz66Uhpv6^2~p4SObfwtWyKU0j>w$O_Q*qb8cYK z2uj6FY*spicCx_?jfHg#*K0D;{nL#kToWcc4;uo@{x=`i9Lqr#T)MJMr55>Do*9xJ z8pca9k=il3{%{DlQFcW~JU5u@z7K9wv6q|NK!v z^ro-p7~xLHe35q7w>$zaR{yNHl5zHZjIzhG*B`UzA-xHL`WI|;C@cbho$LKorH}c} z7QFxdOV1l>(3p1-wwSx3G2pFuX3Jrxenm{2!w)f1bhy$zpWj`w@!RHh5M2GsjcPBm zQqF_M+TEdVEHUrqxB}ts2NcnZ95d_>G)d>#+^zhKAmki{YFg{ZCL(XyG+^&@ibrC`tYy1t^epRE%4 zr)y&dl@-z_4YW#e;7z|K<%GJdJPRHUndAIy#aiXllj0GNB1L){2w7Z}QSUNJy(OHV zz`1X9UBfh$s!O^oZjk}=U)evuHwfC>_a_=fUCywIfpqPD4~ds$ULN@n1wNd*lmor~ zkKezLPOW(PTQO*nHtU}8ET^ZwriaD1wzCO4v?kuP9sRcat&TP37yv+6W}1N-ZDR9{ zPJsF8GAstfV#<(kD82dzVN@)ydZW zSUgNu;7-2#J#}I23^clyeoYc>3;#L6VvISLoBy9ec}Iz!C7)VyMXf?Mh3m^v02VUq zp>W#s%Zs;8AM^Q0mIhO)=$$kug0vLfT067STJDMWqn6P~lX%#i?w|>|hT(0YW~w*H zWd$l4U_?V3C>*sWx?;vuCuWCIfS|&qE7=kImC`SPfK~;wI)14QS}a6hIzsO(`2-qh z=EUQ=qLwKfGZbC$*5aT0N0VKv$fraVPMdOt0y|w#Ll#GrjBB8Ty9?<+K$lbIZ7l`~ zJ9w!op@bI&p5*pODEU7iX4}}oB;BKhl<)y4c#W*Y6?1ZleY}MRsZ#i)UAmCyaho7J z&vw`+iSRu?zQm0Ry~1Dx5NOJ4o&};>i$mFPv>US(@sqzdTbsQizU6Ty zYKz+>KPY~pkoEpzW`u#z3t>s7`yxTm$jUP}Z3h?P)hhsoP#okE@7t zCKG4b2%yx*5K7x*3KAhAXrR4nDsWbaJGv_7mXLmIZklQ7NzU$%VXaz0IS*HO*rf?- z`h6AvigypbDlus9SByncOaU7fsu|(7{;45dH8aG9ZnmO9#7K^6;YlwVkx^2nOBA>(-P9~oSF%ngFv1zpNfQsvHg*j zrRJHwZ!9d^2e_E{LB=cTyer@7(DL)rcnfuX+K_r8cN=d>IO zikOdA5Uj3m(2JlwDiBmTbH4Ru=J#U56OkJ-;uS8^aR5WR-L%%JNpAGby7WWi7k)ZP z6*Jh&&`!Cn1IFD{v%MuJiN$Z{FYKhI8)p}p%V}i6U2#}RcV`}*O5e2Wea2co&}Lm- z`71RCuT;km^a=nrYgE#_qGb%c4KreJod>FXIcsiEC<-PoC3Z;D;J>Gl3Kn&QEw@gv zdZ}Uzo^Dpqyy9!H)r+uSZ8Ut>*3}gFsD0VmI(Jr97ZY(5s=fYVMW)FDZ3lzHs{p8J z0s-rj7D)>)7Bg3CWYOVJjV%s<@*Wq49NHwBEX-9RsL&L`PV-0F`d+j1ZT%57<*vn@ zEpkgX{65jT=(jjbKjB7l(g~g88o>KDquEevuIGPuO0uxkYUxWJ!#U^c6ggWM4Y>$d zbh^$;B{*@~961zdE_haQ%w1JlbW;rS9H133?{d4K5Pr6S=;~)KBgrVZ`qx&zUr5u_ zM}2znwLla-bE)+4C;kUX{)w;TbXl{$U7S8Lsp?c~-h028zD=ZwQxHn5m<~^zKVD^S&N7DXBB-G*)aPY|>GDzO954dCb9UPzyLs``=9V zCIkw~;u6o#CPRMNYa6=purRq>yuKg_0aaQz?~J076~lF542$Q<1fF9X$}EP@6!j(^ zg@&{n{B_!d-QZ3?VL864^)^r`db_~bz=r$W5RD@L${$n|#topGc+c6v+4FK~xI1zD ztW9|jW=rK68PVEwl6w(Wtk6tE3n$eb+tba_q`EdN=W7*kE+1w01e4IIebOxQ*#uF-e6lkc+uq&N1Kfw$Hfp z`>M0QMk(I^uQ^?kj#ChU`oQm#_-LdS=ksYDJPadWX{OEGXA-?-+tXrSZJ^Qx0u|&_Ko-@`2Xe zDflRqFqp}t=sr|!v#Tgu5w6I2!s86U1)xz^ZcY9b-}m`#G8Sha%L63Hn!TH9#+$z6 zWF7Olt#X9e4!(&5lo*Q*yx{YCGA@4sHB(#grqtAslsp z?mqn%hK$u}EXqzeA{1ICv7GOB*q9Vuw4JX#TgKA$yqs#b&5 z(yBn^>%5NjaznCRUYMaElFR5$(;&>!0HqL%E12@e!;14V)H$G*cbyU3ZyO zjQ5CsnjF-?5BZXK2~x*16yW`clrJ92!aC{A_0)ERafPCp(0FhfHYDf1nBXSuw68AZ zs|96c$Xgw-nvIZB4#MQ>7+OmgoZkZbeS~8*^|c~kt=``lkiIG%$sw;n3=uXCjKPlM ztyxvmnQFmOiZ8%f8u6tAno!R~nCN&+sPrX^g*=R}T@y2Ye>v_rES8~wX2qZekP?<<9GoT_M!|{M0Use!mW@F&aIfF}!z)1XJ<`_@<6nE1PM|6^1 z?Tn+PLL16(nZ|>)BHkn+ua@edyJYE#fKdx}WGM+njK$t6{4v5~*sm!_KI`wI-DsNh zG(^*Ng45?B`{yA;0B=1eC^$rv{NE+RRDl!q{Yh5%MKsq!?eH>m`vT(ea*ncfX|-Iz zbhOWT`n9M^hxlRMIg6&2a?L^k6*`0UQ62m}*->APf;H8Tz_`yDL$^xwnBc@?9Q0Zy z%z*(KCRzC2u1a^)Gi?YvI`lWjn~Y$^*(uqMNMM5W@3K_%s|)r;rmzW_lGJQ1$$(G- zDziwcf{#VMj-88~OUZyEDHLNF=l2gh|{@3rG`>VE@ol?+z@3E)~;Saj%P^bZP$I<)_nH zIiLJYn_CmOxW{;tLGvEyc9<~YDi1pF^PFU!?e?c>kFY?Gd6R+?XK2b73&qbpRr#cf zQ$9NNn@5#Hj>b`j{u}Ge4yb3cr*eT=xeiilM;p6YqW|%PrN-E!^^~8*r&6urF3YpF zB)Fz`v+DeiHb}UJQ7x7Gt>CckYKd%*KJapD4b}gh8>vNpDy%agtBLdEVi{_8YlerH zU%|;!lhe{Sx{0i7Cl^HGe0mvtdh#%h-WxFqoJWm8JD~~k!HlzIQq%H+57e3!;BdhM z)=5pXs7YPpZoE-^Rv0@bK))i10peTG73-^Cbr&)UV>y&!Yn!;}Yrncsq z2n9NE;;KAsEV}TAE|s2X&bQckDzYBJa8W)08hS8M8icSqYicaQo4s);<(XB?vn#-IE7+6ROq(bp!5MItY<35sOHb&y?sX@ zO}Ipil&1^Rh^ z*Vu-b&?$Wz_U7HF+fU7>}xv#wu289CbPGe8Qey&g^?eT0Q}ATzY}poV<^ z&KtD>$<73h1fa;{V!WT$b)9L8g&gjD_m1U@B2F@_oqlYoF|@;Rn>`CrPH1q{rP@!b zWN>$k52ZaR+Ko!`4FY0SRx)q7-z6kM$78L>wj?+)5BxubZ)TJ1keNj-8nAl=cOGu= z!lkREklJwQeIb!zlA-Vy{wvw6tZK^lWY1c)3f>*kA7FvYZ;5xttKY>$@ZufM(M~)u zBbqVM4>-z@eIglu`cRh9W<%!FK?j`tgjx%Rd)g|f6)sHvacjDf%~yxUGof0M+I1eu zud|bO{g2DJ5f-Ka^hu#_;5f^}w*|@(ViE1tX9VDjbZ7;&qD&8Vw>dqAg%y0iDe;A# z_*}vQARl6pv41d9H5K=YWNNDiD9UwGtObXGOTHHL-N*JYt@mJaoyzEG2L!IY#=`F`4V(4;e_qZ3ljXP z(jzG`jHq{%yWY;?!-u{ola~T5fh@K*^7nPm8A&^22KyCBUFOS_5I1Fi(I{@gt606r>i;ahht*^{uU>m^bEMvt-m-gC0EA25b6f=i>GP2AIQ!D$w&Dw+<)Z6GPJ#1unxQ|ZGRXWH&8-k z0CX9)|B-Dk8`>m1`z6|kmD0DuS|Q_p^+h(!Cs2;IHgY-HF#YNam&6laLqDxNp42mx z<=v48bi%|(b)814&Z+WiBxH|yxB7WqXv}k6mjz?%a-q!gw#D*-Yrv%54&7hlif=|L z-)|3hr|SyDxt1dsO}h1wl3wXz^qHxqw~GQfD_E8KHO&D*S}+g4B!3#*c%beUSEbj}T<#k+iiL+BM3Ar`g>+~i4>KjTlzl# z#QQ3BZ56adqE&DtoP}TK0qm`dYpP=lyZ#d_um&MHR}cx>C-I&O<^O)OA|6Q#0k!(? zVIuJh`&6!;`&mpOI3t*qEgde%<+8D4g-c>Po_glf%?U>4As1gzUZ!7Fgq@eUo=*r= z!+Mz&W_cnfiYy#=w&~sh_ti>^o_eEPtN5V((4$IC>C~5V<|MlpER_n+IW73wLe76sb#=N(@bGD3 zyCB5FJLKqyWbiF$nk{7huW9{fuX51n77UegD-oJa&>Kp)+N9W>f)_=zCEIp$^1p*G z5_26)H+i=`%Ss|&rWs3|@;v1yl;U;qfjo=boUI$-1n3v1iPjf3l4Q&&?RPX-TE$wp zW29LN#xI*b48ly;G`71Zdy)Z#M0kLNYVQ0-?`;Ogq^zAljJ>XDNHq=d#F(GOob|8$ znO?{`-thTXU$}>6^ewj~B{LI|LZ@crpKA|_q_Hji(z@AdpFD^3Etm2F`+aWn#4^*~ zrx4b4zl#hH+YIQz<4pi1M^J_ASx1a}Jr5iDhe@z6YRtzB_DHxHEF}a$Gr56UELWBV z2n82Rk&)Ovd{4H&HaTzc#fsGCyxS5T09Kmb)~LGhKe-^**dl|Jg1j-(a*Vw?`{PEG z&O{mOu*&L-zrBbWBXqS4NRYj=MoRRf@b#0w6LYviys)te5u~+m1e+N1(eI+$iVTlL zfY`Oh|KNM?2+rXLSI$10Q2NtYw)7Z~In7@+M<{gMaca5QZK_|WruMHU=fPn;pXL^b zHOU#7J;Ad|E<>ty5Kd3IfvHS1={Gsxb%)tU=7U-A=d#;)hq>{~I69qjnxhu;Mxje8($pf6a6IsqP&o8O6RQ)`Kadf6z|y z-s|gu6Jy{N4mVwC|30N6`2>#PVlk(S^X*-)^Pz(N4{I|Ds6IrtZo=?(-Fq<(7M@J4 zLKPWzQ|qm)`P|*i`X8&Uf!SUwJSN$6`T;?z!iY}JJHNz>!PFa7?7*9AaSb)>Emn*w z72z~0o~9J@7|Yc$FjPRrwE@{aFAlm#BaN8KDDJY$Z@@XdBWW#~Uy@E;Q_@1smT_xD zbmQ51OKgPr>AiokkAzz8JlFLAUdV3)2w80jIiFE( ze0pI=K)ZPAUUiS02RLLb*YZ!+;4RjsfS5D?jatm8y$9l+W=w?#?)W$fHczsO?D3gL z?H9|pOE@t!pjjy9k^e(UWo<{oczw9*lW3zHwLY=Kw2@n+sqyOGz$h{G6z3}vs62e+ zD)&iQf>tS_7bCay5`M9+?nP3zQ}>Fi9EaO;Q$5^*sz06#FRUu^k>juEyH=0-q0bwL z?p2m0U@qBPow46?%aE;(h&=Jj-*|6nm}xh{sC8jDhO!TF(WnTi4-mVd zvzc4zMZ-%~3~-AQGN*B8#Oo?7)Z@7=yq5U+kw70}-PYTRZfivvQ_0cXLOwY81qGEQ z(z=wP5Oz9bfO*i8%mnE@ljrGHnnX&Hw*(&{v(t}5u9jdYP)A|5ylg)*$8BTJ5k$e) zVZdGXL`ve1?0>K$A>Wk}Zs&n{^*Nsh0AY*~)CLb$rVA}YXV^Bb*s*y^Jzc}lp8bw_SAw=%Gvs=Tt6aTm2)zN;`q5eNv%=ttv49FSPLQ1kWa}g(2_^t6`UZPTmc0IS zM`cYa(CnZ{K;>cB%~mnVbBNqA=r2vz&C81f7N(e){OUSWC&)tpGQGVO1BS#!-{IY-GGUOkHwuT^V##_{k*w zuQ@!t(hH|;9oAIW#SfHSkR;Sl)-8w7ifVb%ktVp)*lo1XJ)E&a;qV-GZc{kRk`m%= zzFsv5x;-*{vXkc1&nRP%i0LKSd|8%rR{qX? z7pUh!`kU`6iJ5r@uQPZzH(ATo;J7>JEQ@xTrA8gJ;$PF8%!4;dW5*EnW?l|4qJny2 z5MZ4u;3gBpn5=+MjM5z3wm+PbK?Y!Ng@X-5yb4|r2u4)gthO3arf@9mnns6k$P*|p zjGM(&DfihxiBm<;qK+0zW%*h9!fmmhCmue@AEQnVl;zR+lG?xWj2+*;Gq4^BcEiPu zKAt1Twyx###m1qSwpyp>2Og7HtZQzKJALaX8b2exm(WssbSw(WnhM2!Hj>Y<8B3s> zpwrwhU3TO(ABPJMxmY&U7L{s*ON{_kO<5$i6Wv}Xw6$t5YIS!yNHs3Uv(#8{avPc` z>#O=p{#2FhLC?rPL%vs9@A%&Ld&#l&`U%JI%$rVOr>BqAEHzCkdCyAjdC9r?B#t9^ zHJdIdaR8!|)-Q($q5b=L4~0&+d08Jw6f19Oykm8lJV%t(^n171n1AGyMc7?@p&wUo zX>uJ>Jb^XETwhU5yK>*fT_u_sV2i)l*Y}KzM<8+Qf#0i?rPWCF?Z{*fE9btM5469@ zO_mAt3=~3e(Iw((-5>D{@MQ1%_jcH4T+Ne$#f*4J(t@AYWtO|X^b(#X-0sOQh<)`! z{3ut3#fNXu>)FXSuinEd`6D~^6v)Kq87G&WZteLkToHgjA-r2&y#gNlcy;3@NC4fD z=+pf`HKMo9B6_8|q(Ap?PmVhBwr(L4k7lwN@E7s9UncKx^L2QyHI+pCG|}K467eT& zIDqJaR?HhluR0v->^)=yWht2orI4c_e6z#)b?7;mZurdTtSCH=6ZFb~m^WO2G zSDzq9AEX7}gRhSU)pA~TqmF8|t#{cC_i>8%pGU9`ZMbkF#^$fue%@`hQTLi0;-89v z4H;yo4vSBBu6~fJW?udj7W^qf{)CkIQg{Y=6tX$dtfkRbm=f}AMoxtGE_DUNRgL9f zjOiupz|>3{0+46I>`%LK(2Xo3ra12z4gb^$kki=9){?zvj#v!{eT6oCbG$=5JKNk? z%ZPk3*~s8BZf#!J)NA%b)PT=CJb&Ho(}GPtKDT(^`5^x6{UYXKJ|X>1^Rsp$WX85Pg8;@86t7Gba!mJQ=T<|>2_S1b3aaw9k zE#%Gi4tP@z<&`efvA^lYB2t0GDm+fWf0~kWWY_8X5ys(R%EfgHXj+jHc54V_Fa-qi zRZyIo!bR4-Hk%Lgqq-=<-oa*4C<9e%y`1HbXoUvsV2md|reNP;+W8uz{+A>x_Wcv5m@nvse`vr5Q+fcx;uD{E zOrMOgWXk;A_6VY%p9P%&5d@Mv;CjM5WBW5))t?0qqEs3Ih}UEIufh=}73XSGxE4xn z=W!-=v=fPOtA@kPEqFm@>|r>C-6hHrQ@N3OB3gGD6K$#11WJ$;7p&dw9%2s$zY>T3 z8)m(oBeX@zUNiRv?(FC=S+zJnei->IGQkxzr;@Rh|MR&$?nUJ0Io-t%A zWX!O!lXLeS(dtNOKfOxOGLk~$%RP7*G|py&)MMtVe{AQ|4&+N7`KQ^NgX!l;L37fw2Z41Hd`Ja`}NA4fQ z-As6ForBUkXAF!X6!ZDs$~={Ee{WDBRiw2W6o3QpL+lL`of)+V3h1(k?r|FXWoHNh5~zxkyV^R>V3dP0juX_MioKLk2!Y{VfHAN6VfZ4SK_@c4qj z`@Pb$aoj24JV7CY)7Zx;j^?sCk*9)8P1M6C5c7mSJo66Mg>obpBiaF-H~e1+H+UtN=9Iu{*R&a@Q3=3p1t?T-j$UQb@ohlR{an{>PPFR>F1yLJig!e z>-Bm*RZS62K|-hE1`p&uz@do}nG|rX>#BXOM!sF=?@gE}t?8!1>fRjdfHv2AX&(#+ zh-H+RMDe_`dqen&3z77THt;;{3|~y)-#0;^zd&rZGRmy{E=Pk?vRmKI3+QGc?6a7Z zWFVU$vw;A=p`2TD#uiMltEWJX`%5RY(Ze&_<8ONW^HA+KuY{iH3rwH;v-J2+z%*?u zy?eR+ugz_ZQ{pM{3=MP={aL=e0q9Gek6g{~>AagGoP`r^QV$$ODFDgliX= z4af5v+6Mn-vV1H$Gf=|_>W76}B2|HRd1N@O1^#ysr1tsW=f%VuKWmMXW4 zTYyv6eHsp|jfOjhLrO^9d61-nBh8sEPyec+w{)=aE=i<;)vTM>=`-k3Ex0Un6b}NC zhSI1iaqSddE%8{En@ED2|6lpM_%x0Z(Ze~aC2I{ysp)wvM1;W>|ML@@_7QHjD&v&* zSkN+BOVx$vW+ph=0uevM^2O{k9t2lsn)%5V@zk$2c34&Y%IE0+nw-;MNZqgESZ$OB zGS!9Cu!b3o=W{}M{jv#9!-455f#*X_%~M`XWZfN3Q>QEuT9qQyR?PD(V@+RW?^L#{ z5hsIe&RlV&Sw!_TuCrn7#gj=;P@;}2IN%m<#ZtNZI}CF%QT@)=uXyk7=i(A)_6ZDg z?%a>0?#&1em%Ilk;&y9+cDo?(RR+8`cd0*Y6&?5-gq(Fl-jOr8CMo{)rd<~p@>~|= zr{aS!%ghGM;wb=uZg|H}`1cnKewMio{gQmXro=V&K-ugqXZDAQ-mN&$sp2=(T`*Al z8p#x>9y6v+jvZ}oy3vI#PM#}qijZ!{6?*K#%9q_2v!8x0N@Pb+CU(>Ps&|$-0uMhT zYAcZcRZ1J&Is40{j2XzCcJk9?-Z@kG9*U+KFl~>JS)`6tb^2BB>lKx3!=1?*fJl^AOksdh`kkiTp*u=k(8svKlqMEUxE%+AMB$&Ki0_uR`FZmtvNL{z&&V zS)GA@L*rN|tXk$UJaA`mQ}g-1aI?W`EJAI~#s2+rX*KR|$PV-A(n)4VKCXti%fI>i z?J&y-kGS@oOAHF}sa;Ni^7DIF*?oNwMZplk)+8xkG_^7_f#k>K3X-HJNq;ORg1oJ2 z3zJT)A9092uREmZ^ZoITKG+me-rz`}s&^$8`!0o#X_e}ZTGX_46(02+e1WNzr*$;v zvIE;^=02Jq6?JLI5g+}s1Ep8`@jz3z>HlFH8aJ$U@8X*t!n z57B}{|JiYTpHmLj#W*1tEGt-ffoAUGs41gKzl!A?V-|6q)gb;)OTrg@*>5~Q!&10# z7hgd}X2K|zCb5>wm-r1`9de*U|ElVhz8da(Hf{xb(s@c`QxO%x9r(9>V!C|m-wx5* zKYP-gPCgc|CsiYo|7~LrKmn9$yT({gBFqI=5+cu49cvYP^UI`S1E|^GjrHKYLD}tR z?Yp*25&*2{hBijuaKOM_xbpK;lZNakkF+1Lwh0D!@qD>RRbi=$ZW#Zt&z9G!nLy`Z zTVp@tP-b{8zYGdHb;4P3Z@0x7 zR#fh{6cZU5#NExWAe74kqoO8}zs_f>>apTDKbDG~9_;BaqzURdco=BFMI+y81yqX& z=W**fm3@*osM=mAXMV)L+z$AdIQhRmE)o17kckrvy-zrpO%uEHo$(6ddnWJCR?may zQbM*L>^gP7(|0d#x-oW}r)_{n&b4tzYqzC_%54~A;-17o5$W_7vUQ>va7RA^&QJmFC+dplC*RF?@hdg}i9v`r z#<|z_>Rh1)RqsA69MqVpl-2A8t4G2f=>M({i{y`QT(Vvr9k3j+TgJ|=Fb!|Sxw2!+ zU$0mS^A?R{GF%nI&;PUiI!C7nlMOg7@w#$xoB|LEU4}rfsNpWnhXQ(fO%Lrj3!p>n zOH$Hj6|F2iK@se3_2-RDFNeW=5AmGAJ$CSccWF0{hXS@90XGHopoeD_da{BGGxz2B z4hEr|mQ|NFT(_v}S(h1{D?Ze~vN)~Ewp#HmB>rNgH(o880fbY~Wsn00+;QjV_DRCp zM&M1d>RehJmmJj_C{SiL&$;cY_|5V_fu9PAM-|x^TOqHNUs4PZH9#}JcQZ>7MIiA` zzVxHqngp&qL<6XpSM}Ug*D$)hl~c=4Bo=@gr#-3W#+w7!W+UK}PPAC$4J+PNwx(V- zEHvCfP4R$BV~Xt3p#9y|KUt=NbOXxRa-_YWk953#FA-- zGH6Z)7<=bU8~hg`?yP69qhQ)AYUhFMai4uAPZK~M6|y<&FkiKhTx8-{H*)Le`9f*! z$Fh(*7UglXoJbQ)ncXywSD?R?n@dn@34Q1w9q^;qL4Hy0|Y{Y5doF>uk)%p%$dR{eZ|oIH z-<1KU-3@Tltk14#U*|*S#-Ko)u42bqRB~<=vFu;V&o(@-n{`W7Qf8rB*acZrAP;C*eEEs4y^h)jSp}*9+T=hpMby)$R*Aj4;|QTDgSwVh6k1Vf2J~FL#l@4o^oo$=Bt`+7Do#| zap1u8@=(_jES9MUm;sgn`uzqe-dE64q&4h`RO{Xw^gyWRNYMeqcQ(C;k;JWFVCdKy z9Ns4#=MIR^oUsn4+I1l;2|i`rK*k+TPO9k;qx?@}1#_l&0niE)lCYi42YwE!qnL~G zWjlMFzJ<4dBnG7nF3C`H3^~ynO;;O*>T{K%eTITLgLKw^gYH9>M8@o@9Rm63eupu+ z?MSDUxP&dl!<1D=(N<~y6sM>u?8)!fs+HC!JQlNOO0j|m79mNjcML`V`RNP82|q(>o?M2S&Wyl#oGxdLaIJ9NB+ zo$a!vh)|J#9)I-tE5b6Q^5rBYbC`Gy=mqrr#aNxOJ82fPeYaXE2}`flAKkHibG5nY z9}eYVLwEnky#Z@^J%*7z5nefpLbm%R(?HK?py!Z4KfTzqT*7eD?48OUkCryQC|dN? zDU`b9Wmos~fDv|eq21XTu=xfX%EtAAdRvh%23fL5oj7IP2GyH%WYm6CB zlap)-;vvT1RmTAhHFELA{>m^Z5YQ+ZgjnA3H#=_173dP-v1}bOP}t<$lp8~IA~)>^ z#-`#eT)3yJW8m0;+;pelA(u#0@^?f=jP%*s(q-em)yB&rQYJFQNuNF3K~IEt@0qYY z^fsxS&v934Xg`kK+<%39H=Z~wZ}^I18e4!?vpDyCUovLYI+{?qtn~dT{-&l>^0AL% zN>t?Mq;~a}XP%siJy{oT365mb6bZ)XJX#+0{m2Uz?HA9e%q-4p%cAhQ)AOoPQgT+a zvv&p0)2_+;8$ULlLm>+^%TzMO+^h$DJiW%cT7)eg_omuo+GE}0IHDNl*v!);8DN># zaM(L`JU^8yWZ59Dpu|J0$5!)MBw6?gawdnDX1I(ob>Ssh?8KL!!~Z7OhE?;Kr)-U= zh<_F+mbOv(;Q~Tf1YV7(7J6mXRW4~K5eeDKMuHIWUKVl5<`hY{RrWXoX|{CMd2QQf z*G2;t7n5b}=*pRQtfk~eyN#*1p)gLYu#>E&$IKgB!Iq)~{#!`J2)-_|FhxLaQ)Kfe zk4uVtZqRy$#_ykG>;pPxZ867VZYu zGXQnpP8jZkVuuDnVL7_H&fBx#E8p54vSBHq=MHUe2B`N@a_f-Hyp*Ie5WX(t$*qfg z+o*Cwz^L zZnt5=^D#2HEmcAq0e#KX07}1$1ee^Opd{;w4k%S?xrerAS~MD#@L&8qQD%L zFr4-9m9Q??CoVoF{Y{WbFuy|GYWJxT4Sng)nKe8kL2CgL2J|fXMlLb=zjGBl9lVWxm*hXa;nthBNsJ2eeu4eUnjAZaIPp71|3y;F>}S!8V=+}^smn!zoAK6b z84Cyx7cv!;23H~%2N%YPysuG|3YF)^Y=CGdvz)Cnj>_IT{}3|t5w%8gZ0-BR+KluDiCmBsR);gjIJweX|9W6qFJjMRzH(OS}`O(d=tLV9%s+&^7f1!txe+PI;vhF zP+4n!QF0<8Vy_(@<{8uGI?C*7f)b~^bxymg*x$;V10fsP4B~P4!;*OB-w7+}o|tML zH@t{oJo9VtRK$&x1Ct`uVF`Qm3c6Onm!jWR^K?X=9T^+TumsCD)=F**I= z1%BOKW8HdKrw-2_C?bX1BI_K#iod zCT&Bx{?}q4aHuH0^&U~*d)f7~nrK{LtP1%Wj3l1ga&sf^k+HVQ4|}EWP=ptbhYiWp z$6|Aar702>s$Y3}q{)at?qHAm1Wsf2^xCXDE34wp4-`LWDGK0o@$Ng;uDBDikf9LO z%aLxlvsKakeWO*XSo0YgPz1pU|7qadS_i*_Y6|^444sI;qdeT5{Xw18SM%b$;-~}- zE{F6?)lXb2OMzlDDq=|YKTDrBvI?d9KkG}5q0nB?j^7!luFaK=p|%4S%w8W8In`Dp zc_@D+qouH@Rv>Y~kNMs92-Q1-a>z2@#Yz-Lfb3s$lyhGFGyIgKB_28e_|bz1{f312 z0gwI*!fz%dSB;6B6tCB8Jk;z9M_Qnc>qP-tOq7>s-B*{X`u|FTPNPhIOX(LY^OsHyh} zfS5#U2KVIWE&@cb{cD?-7VVsZ=a!RxSy*})>P+fU!5F&e#jDC0P=z0s43Cx~rP#nZ zYbpe~D3??3u`stle@~xN2ZdCih0c#cUhH!f_of0CbV!E5_e}E5Ovq3lO!A%<_=xI- zD<0*yCbiKSUTGz`7f0X-x=(UcEImz_!P0dw+9~X{!b>%1rToKzgtQKaK+f380iBECS z_rwCa7(07eklANOuOT&>xq^rtOOiA(~@7P@!B6hY8+@u z-MB=2CmKr->H4#s4>k|61dXtC(%rFo4bLP=P>ohIkPxFo$E$=Y6{T%#M6Gp9Lq?C zw;wJRlVKd3kynFg-~xt$JK=AYqtgE1jDYI>=p%9bQ^~+Bh5bKL{Tl@)+9c4-w<%MGF}FSe^IW~hBq>dRSna$P9l$Qv z$o4=R#1gS21O2C~tI7iLmg6vbohod;eEofZ;XN!BdpN`@mi*NS#a6^rViT9%5dAlj zg`wx|C}+tI@!H3Vk&052N-rwG{;ji1T&UBQ*a<1hB1d-l9Y`QUO%3!|ugU`ty!i@d zEHZjkLA~U{$1yX_!I-%fIIM28qQpNyk8-(RI52BCgZ4}MS zz^2o39!Nk7?izyR*2g3YU<@JKFm1L}u~AW$@yx`0?me@!DhDRAn6GH{R+(1cvQv*X zs3ORcJq+FmHl$k>O&P{r{SFbbp>%Fk1$;zc9GwFGG*EgQe#*vbs|rYM@vxiqgO{^D zuKRI~F^vkBU`QJZsgjk_3zHpj5Ptv0YO`S?6@kqC}5DN`b}s znZ-ih*N>lES*X^96!7zRiQhkIy1eSm4V5x3%uv(Y+^3x;AXS8KgvpMBcKzP6Ny`#) z4-$DXH@780U|gIF7I$oWtu!y56HCdr(BgNJDtp*aQj)At_u4r{rz0tvAh(=={d`o+anufm-p;y{jdALlvU<4XK{!9 zI1fSKy+AC})O#hBbwzltYPJUoq?QCBQU--m~EG?2K< zYq7(*48|tZZp@;tNyZ)1XXOp`H_E`C;c3x36Q_a|14U9%!;3r?meyw-#BsyH*{hR( zWZewM`U|%M6px?Z6YQ?n0@06U?MHE<`0tNANt6Uj=*U7)Y_x{HOo-6CX_OnVdm3S^=Vbu#QQ>N5-Zow@?rT76D(uOfXka#1uz*`H2@ zkdJo08YZcP_@tkP!tNBp6wgKjlx%<6??3kla{+0hvXALX6NENnp!B?wN(Pi*@RXaB zXt9D7b=?CJURuexpN}su#CNb^)qr-;IqawXSy`?0dihT!)NjPIDy)ugW5Jp(=#KWP zV{2YpRL!N2%W#)gu{7!f_av$ul}~A}@=+_JpM0~Lga$l1sd;*WrGLfI1x%|rX8={( zo$AzEy}%L^>QOUb_cn$q0rNFod+yHRLC5iYVYrHyodG{qDZEro2qH~t>rHPHzsk3u zC268<&j(ayiz)>B!M^=coh?o(3y3IZMq%ypvpwbOCpKBs_#bBTQLgsGV$zeb#ed(a z{{XZ5O0HGMTw=4ak7{TCeHub~>EkKBW_EENw{5e?#jN*pp947zS=L%@P6Cs;Y4(cT z8k7Q7*`jL)827!8EY$cT(v@d5z-xPk@5vbZ{Ok)KFnUA#$C!n{6v^*nQoldBoTWtK zHv-l3c7Jm$E0ol2d~2jqmBy|~=ADCb7B1C}0DE#z7ZtJ4j(q)8F}&81!cpT^>GziJ ztsmdGj!g3gl-Nw^00yXe*k|BRP#T1NGGc0{II#tbVsOLVsaj+2d55GEPK^jDiE?fxfJeJdd0Rdrv_}J(^zramU zPGmEuREV*C#<=PF1Ht0Vcakv#@iATCj-f1QoVOL9k>IGD$4+v@G>7?a8w$d{Z7cSJ zN4=JFu6A!2;7R>EX_<%z3y}4%X6`@xP>r#bkag*~TaLtp)9@O_evqiRe`^1=s=Xq= zev1o17$T*U$lh@cEe$2S3Zii@gZP*BIgUyemYqSy{Q>g~%a~G$TVQb!nZk-vCaS{KrbM zbs#|sHTXZ@DT*s5QASL1`2J>^OYf6hwwQ6zN=_$J$uR0rPMZGLD!~knC~O1gcL+ps z)Ed?E>`gTcdv)I@xLCjC)Vi zT5UI=7*T!_f)lUvXcxOa)oLN8a#f3+7~|HyBohMsed1s5#1{Yp>qt+ld>WHjdDF%7 zG5&x|=vxbY0OImez9yxW_vR!2Y@5c%_g;ffBHe^LKPT*W#`XOvsZGotZ^>`a`}V-@5(>CLG2i|og#rPLfR?)RCD4|_ z7Y8tGl+YT@Ak%Hj)MfoKK7aY!Xr)rFBLAq7RX%b$c|5FabObC)p>EE2&RoA$&&yUPFY#Q=RsRU? z{&c|nh9;jku@AqAIU{|J_e*+Z7FdEmM-bM)|eAQN7s zw;DTM^D>+8P3qS`(s+c)Qq&QJ!MI0+SNt9@wA0_KzL|#|E7Svs!1XqPx;=2$V#-`BvDM_PSs|F)>xbHJyfAE>(tL^FF%ngeLjv3`@M6EkcWnqSJ(pmaxF z=YGZC|4~0qN593zUBFNAl;1(NEc7eJekfy`Thg`o_GM6yZ2l({^3FQvbngLI78tv> z!_4cDdRhKU-0mZ_c_AC_>bvnud746~5EC%vc!aG3cRmW+l0%Xc@qWRucuZ@zMLp&) z^73I9^Y86l7csxYyR;a%2$45lhjX*ox_&9NCw{9Dnb1HBmm?nUb;~@ZCsFXKcO$`r zsM_^G{Dto=*yQBut$~ym_jS7snQz)?K*hV%s?1UuX?TgJ_R?g-$~P8{l@urAt5rpQ z0eEBXyVYa$=!o5)6v(GJorm1O&n~fKb9*bP)UR#0@^l5P=&%@XA-$4~Nfo;#-IIpf zhP`UZ(AQJTL6M(?zfB&bOBYycC;0*F8(mX9?--Jc34{85V5w8~-I4Dt_C6hYONMFu z7lASNO8xNpI&ouGMcL$^G|A~Ph(x1&#^qAAPZr;hzorFEJ_Bj|paAQwA?utlCbX)u zWKJ_ZCAMZj?74c{i}Z-`IwP6&Be4eQ$68`?z46Q`wf`L)H?z=JA?57<;%r#uG$G+S zuf=kx;>kpnhX;!+TGb&#SBiBvC^b3DGzC@YSZrrV8bLo5ZRuv6cCEvDF9wuKK$j@j z%iO_ZmB8fadSflA48%mqma6^Tg=AOjnV&LM@B>_g?r_8+ z+}0gqI^v_C>8>5@b zlFAQ)3#>Goo|ufkSeJp+fU;`Jwj7dIs%$2jv~F80?J79BSZR zg=brE9WAU#2(P|G5R^(U%UEz%?U64z7|!F{4|VL@<&|l8_Ak(q`9dUCvv$wvCd(gK zC)rq}fLb$niqmGjG-zRH_TLuUBFD<%gPu+&nwuZjFAMw@~&nIeZ4 z!iE>yUuFVC4ujqutD&%$J=^_^_M!vl=DLSjjk*w$jECpg2Ii6Z0O;+?G<#&X8T3=Y z!{Nkt3fG^_szfrO-tV{Y>B?6;88T%3$ugUgJ27S^ssL(Vk0GajeSq$fgpWz-%V)W| zjxRh-eQ7~Q-*y}j{ZFARgHZ15qF}ZbtC!bbG39UEvPAj2s0>BnL1qgX(@6!=z{Y30 zIe3EZf_{o*B`iZ15EE1lj3Z7S|!0JTq%LRX4L{vOfx_hEDT(xpZ zd#GThWl?=0xd1d+uadX{EPwytwE=;QyFY6)@tRhB^ig)FC4*wJ<7UcFc`NADJ!td9 zO-eM0tG>Rb&LUQoF%r!9jqpY&`u_o{C&G>d0sneAsmD5$-6a|?>tWm~@Bpzl9YQp(4eQc&o`pS_Xb5BZ`D+Ks zCfub0HR1S-ddz#uvC03e)I_X$?*Tfg9k#~+2JN0CZ6B(#^G8gJo6JD4!7J0#Ek9v?GZDsR>@;47rr}_`a?e5NA%!|^i5$|C%EwN{2}1;qZteF5 zWs5EECl812UqaAxIUj!{#i)5?9dS}OhN)cdz=L5+4K~UIHe|OZZ^*m;d?IC1kS+zT zc8+)%PQQrw+~8ExrCk>q23@MM63yLywX8cxnUl#Vo@>DQNi$YuLq{Pm8An(n+}7<*bv{XU}jXxmf(T>!axF?h>?TjoTo;1$oIJ z(h;=r=nTk2ksl>xsVh4S>x+V0c=AAy4XdCFpX$!ZZRPUF%HFDLC~^fZvd3c#@6{zH z*S_B9`iG+D%Rzm^kCbfUH73P zS#KL2@MdLQ9z_rIg?(w|+{hQRyj8kl|5onmZjgsW*Ii}LIAsjIQDmr84Ds*uik-3G zxzq9Pa|UX?e-^e0VETU@ogY2A2cHnun_|UzQS0Y2B4~q5TUWksm>3!3Q~U$%N3$fJ zU#?}dDr@Q2H*?Vgu&>e-8^j^^H2-W*F@BOvQ>_}Y z{-mR5$w|BdD>3UaM*p`J&|+SBh2iOqU#ZTYh}DKr~REv;}_% zppEx3OtLOtZj;>)$Ynvc(7VopA#prWZd?k|v=Rd=V4;yIHTISKCM>d7m2Ok`pH3>N z6Y*Ddc>l?Y7KaT_r~~wt!fBqE9k*f0Wl20$^(DGlBtu4i=AlZ4%!L6Rw}TRcjx1+7 z(swf6+za^ejCWs~(zcQwtx&r<7k@E;f4?i)MTu7$U5=a2+~3Oorz`ViOO;NW_j@&;>6AznT6 z;`OlDub}vMWZCzCpjbhXa@ge?nZ!>H;IiM1_q*jpGV8Va2}%2LiTv@uCYV=25K~R) z5hUhpKM31^4g^(&)yDuw3NMm1R0@fgt-uM|Il9=S3LiDAq8JTV$RhgLre>KcfjQG2 zylMEfhNB@Leg2nys!mF}pQO;1+Yn&}8yJ+OYuLbsV*C+|>fdWsk!)xQ7-UbuooH1v zM;9}WGkTL^?~U>PLlh<~t4mm=uWZ$e7qs>F3jWv}`5{wqssqE!9SIjHr`>5`RkW$V zk$5`PDBUK|e+Ozs3~5X$IAdK={6?!Ck#a_G-M-qq%>hqGsu9~_Mzo>vP^`cG_;iKR z)Q?7m`Z_yJwXENdnT(31>*F8tvi#b`k zcXGV3_9MP)xVyfP*CxPIpBSuYHGu7$F}hUsnVl^fNjB-^GUXNjQEKy}`{Q1c`|;(L zMA@UBOZ8vPtKLPgvnxD(C!M|bTrl%8lV99wB~y$dVCRq&TSPlhwBqH_QVF9p7>iu^ z${>2I+@wreQ#dDwnhf{mT@9I;3o}w6i^AO**s{5tKGs}b!&7E;4#&{elHFplEQLME zsVGqdj)KqC;xx2w1LeoMkSNtMs$gCy{j9WI6ni?tyU1 z6iv>Oxj||!UgY;9tBfTp!+AQ8rOg|I47;>;75pJGHCmD{ji+LvL-a3}cyB)m$WS=J zARsSIe{U~bZ!3^XNeia3o*p8`=FNN-Th{6uysI*#XP)_7WVdvPhG%eVBUV|KMO=Fy z_wSDY|wX* zgEgqCI=GUD}caSshdE9l`HQn81$Z8RhEup zT)tN8Ybyq0c$|@q%jslEj$3qxz-bOD8RAgc^RANcjG@bV#6HMdu%wS;)C9*B93+hW z>DP!E0`Vn*xp`y}u<;mCwFi2(E~Bj*A(HwVNP#EMxKE!!S1U^HB&n(vNMps;Mc3@R z_uHT*=N@m-!diNG(^8h6wPwD7q()e$e=yY^T%X-XIUfutOZLvB#HgdO(_~&XYJ3;0 zaeikFqS4$)ka_=M_%uL@Axk||35v2{7#Z{9aE?}#v#0#^cKa{N3g4A+E=MO$)_Px5 zV8=`LeIqAz3ZHD0Gth4FS_Uk(f6%0ZJpEoWY|TEHF;*I4C9rjL?>B1 zW|EXxpPx~vUsf=_bnNg7xErsEH8yvH%=pCn1(QtO<3#CI65)A#y^YaWi`u;hd9hDY z3}+q8Vr7)Mzfmuup=_>4X!R38-c{q*2hQLj9={W}u_X*vu#|BI?I+4)ap@k$Fnk(IWBUX z5htr*M5NLx-6FpH&U~_tR-v9frB92XEH8+dp|DJ}jfCasTzGTqtI}N$h@=TJZNEX( zC#&SFdq(GLJ4{yDn4tw`m#C%_d!dXY@ytgb6#OKZHzwSfGdxJ~Nv-P-wo+no?rm1! zAQF@NFDA<8660@iZAP%yzb7yC2-NRQ+J(&BC~PHK$QhMMXm5^N(fwRHa{c8;2b`lj z@VTdmgXL@el%#L`aEC4fg=!VKIDiM$qYs;zAvrbW88sbMV<5f&a+M7baPZ|=%@FW(Ruog zOr4CHoR;M-9R$-~y~on=|Aw|h;>6@p%4=Hh&zZg-j%IxH^(A{N^z(n5csCrUsPADPFQmaW6mf1i0?o zZdfo&w&eE&zfl*z9_RE*xKCBSF+6Ol!vf$Ka4(N$mRL=pi<739x2+ny9{cWk3MX~+ zxUyM8Ui`4HRl^Y8^M6R7D&=bkSXJ`8mMFYgiOj(pB3)Ia}FkzgK13KZ|~P$-k!2A3$Lp51nsml`CN>%Mf?y?Iv;mf`Ap=S;>Y z(=4h0NuvC9k9oC5spI14@(v-F$K~d~x5JKGwNOav7p;CkE$8C;j?xkJ3l$>Iq~TYD z7Qc^X7O%1-`fn!5WUY=)LRQI5yf$DDa(q#zxMCq=ej~0vX5!mzWDNZ0sS!m{n(bRL z#UR1ND9An~$$ffsMtHnnd%}KNGjP-`nQ2B1SKRL|a07iC^K-o%zVsoQN1;y~x9wab z-KBy?wE=1qR_n_zFfOov{_486S_-6EU#9~X8Y}%Iz5U1ZaO_zNuS`vej$(Kx z)sG$k-~`4a5H@)z-3l&`P1keJGRnM%GO5{_C-bUXY;m-(o2MqWuJCdyU5=~&mgsl4 z)#yAW>#>Zc+wBm882>2e_}dP8pj%P8W&k!-7mlPQUIn1>0FytID=^seCa1NDE~^nb z1T2()#?QzCnuJh#Y_Sdkw@BO(;XXI{kx1X?g zVf8SOb3GuxmJOn)iXb7Jn@5x536Vg8l*5q=SoZGIB`iORYRDb@mlgF3wGRhhY?`ir zXVoHHtR$3sX#HM#1sANBj->I%i)J!)tX4qmt?_k86aEl_%EDw0JOoVfXet^VQ402Nn`-^s!0k1@j?a#ySW7JsZP*r?rl(9vb#QGQ(7o=OBC!zTYdoL}4MwWGN{bWS z1n?Q<-4f`hk>&HDaiqaD{D|rCd!~}9Q%|TP3%~JD=5Hx$rWA42_m&d6KvvxSXiwp3 zj_;hRBRaN~<3sN4rXtHK1(6n40xjS>BrV+&?)ca%$POWL>ztNEWqflGUC!J)Z=y2Q zf?-jad$GsbcOJK~@~}ZUfQ)Vjh$6YK-!M^_zLsx+Ff8OJu{}gu9t@~SG}Ppip2oI)ms0Sk0$Q6srMOS6>dEI2 zdWEx0TQom>KCNs-zf{lf{0vR3$iuVIz3^!kcVIO}y6&9!$WGS!SJ>J7z|W8${rVp9 z(~)Q>W_Nt2|(W_gWq$p`%oL9P&< zv(M^43Pf(jPA}Bc$qs4{Z?e&q*AdzLez}e(#Yj+Ym}Nfg%6|actXNd~t_sa(b$F=ff}5U<-cYR>r(M`E;p#F7v_@m^22y97yO`)L zdk++Xq}uZ`ds2*Vn-y^RvUm+y;Y%I?g1x zdx`5zs{uIeLlE_(HxXN$K|0%L4y-RwhM(=2;_oWO{=;a*LIVR4HT>LCE>&t|g)J)+GO$fn z08Z)GQf|S&41zcc;usoZP4&abS@I1ugg7;82czR*wM~^>+2u%eC@eo&QJ0LJ(oJmO zAFnRwjgzKwc!kHzKz(?{kH6|B^A)BzyQ-x4iDajRLM3F+>h-Heq^f2^_r}}CpGK?@ zO$3%+o6NMNdz44%Ey;X}bW71NO!W(tly<^4ExUFBCd0|Y;Zzi7->g+@euOEHFf`4r z>4Y_jY5V?qs+2m`8A}*y@Q)LA4*d23-uGroD26X?Q$LSL@b}CWKN|Mxr4D^3rgMFh ze+vFypPqk#0~i7s?L@z?B#LAUp@~@iSrBi{EWaM>q1YiQd+>TYBrUVtP4ejUq{{$k z%hqa7qN)I14LSR&$|_S?Vzp!;*myNC1M<69?%G0&>51Nx3=#-+*GE};txIlgi3^iH zSi18OjA{}YZ99D`X?0k-gJhRcVfQz3Y49=c5yQaCF09T_+lPf#b{EZ4kzwxJYvYWc z8`!w%;#ul0o?iRPPsM!&tq+V{(#i6i&eLBALw;q7FF-Gm7VYTe687`l^~Qm_tP0?# z#yZl}bWclEFvFt$twOIbZa%01+bp$VeDnH&7Z;hd6Yr&cMRh+)JKKYnTQF-a7xXn0 z6B49-tnuyTBB=mSE_a&%U($i_bURVzkZ#__CS(}T!4&LSeKD`@R9nzE{+Cf{`FX>oxeOiqfq z(%@jz4eCk(*e1J!lpC`&T~KyZu$9+ft~nZ-o#B6SE&1J(|Ipw4m!i*3#;^> zgQhAU?1;hsr)pA;rDM3UAwJD4X5wkZ(g%#;AC=3ODlCoUPQ|=a%ClFOFC>L${Ndg# zmAKRX(LMfw_E0!Sc$L%7Exr)l?uVy8bq+LBnLrii4?UoYFT>*_e(rxw3Ap28ouCkJ z;mZY!P596gdkLc-*%;6Eb#8bE{sQf30{9Cic#*UD)k6951_k;P1cGa?#<6>1jugeW zC9{?ACIF~?9yQ(ql)JIN-3o!&N}9Y!PH@RE&G_|vhR$$lxyt*$u<);r^|zJ}tKjB& zyBk{F!ahzkw2}`Fst)wm4JJWwv6WE2N@aO>lxRPCrrOzSD8^I^%8F-A1-u(tOm*dN z-aZ0eSLz>gp?Yhyi~$$0MJTTVNNh-{U{o-iQAX#KD%d6w0?^M*Y(%?K{C?ys1P(g? zfx3I6wLZjh{}p58eiF7WFDOXngm3EjN}xFdh~^urApi&}kAUZ>*632%1`L>OCBu)- zo)bn|g`f`8Jw17zWhl-a$G8)(_?km}xZXOZffWB4Ruij=|vLd!iYK+8|Wzx2Cx+q1p<2N&N?szrHnye&N6xxgyUU+ zCDk;VwNsIuF?}>eNL~|?amA71qs3_AonxG;4}}r$C9-R-9*aM)U_kaOT?MgPY}l>G zAc#uhO(Qx2<*0Ux`$OFN1B^m{1DM~OWH7ld4((ij5m^DS#s zfSY^(%n-(H2!k;(GoNQjakq_{^mNp@3#3>sOULjiHE*Sxl-2cT* z%L|OuorRr>PX^ul6!_cnp;DiH&31s-^2Uw|%+oQE03G1@;o>yjusuOVkT4#z~lDU<0OXj$O8ah?AT8e~af;|vOt4|;DK-o&V6kP#Ft$te3@ zkU@q?IE9a?fJq}W zdg@cTd_^2W>fTmTe-)!M)q@BFt>X81*&MVNfI z5OMQ{6=*Ip;Yy8Zh|n(u#bHk=U2oT4yH0G@7e9$J20ty4oxc}z;;qAE9k+RB4+t~H zg-yj(o!j?oCPJ<<^MBu-v3npQ5^r=#l6=xu6fO_y>-nHy7t~=>)LyU zDCu6V>)O{Uv#vct2x+KmkC2sA>U&9rRML`$um9lv!~1d0`+d&q^?C|+EEU*GdnpBR z@em~+eX$>dT0C)b3f))HLz9i48^-;_g#5|~4CHTdJ!Owm9VT`FrlLCj34gQU91<2U zOhY6~^Ub=-sN8Zo<~m+DKo~D?EFsHV2^-l@Ozy^6s6{)>=dT4v9lAn!Tj5fMpz@}G zvu)l<^@eDE8hy23#HCdCTW}ULIS7>E$YY`bdnDEuM!@7Wtc|KO|27b!z+JrRxDK;da zA3;+u3a(cV^Yd$CizS9gN>v{Au?^7xaIwadYwoW|+!YncDdJ{TG7T`Ulefl{Ie9tMQ3-DSpc@tkz4UY4lj}7l)LqGE&?;BNQ$CzRX7}F|$NyVuw=;QZg zO-8*KQ_nb7!2BC@Z-E8;6`1Yjzf438Pu0ZGW0-0I?s0;@oYYtW5T}CTUp5$-of1<39MYz?=L^WM@Demb9 znjOvAsnqPEqdZ;eWVMAu2DUP(5ek^K2Mn9ukutY16Is6sg|#YhPPDS@S&2R4s(Nf* zf`IWkT^w8YjGblIPXuY#{`OX&W#+|mGgtWvd8;^T%hlbcQQ?O)u=a3rwg(d!K zNdHNH{x@GNbsGJ_2Y?`pbj*scQ>bvuGLzfZeIpV#vp01En@t;UHHTAwot3>kQ2Dz#v{WP|{mO|4)g3Zp z*VSN~yiu*e{!qHg;(52eqbW+XiPzNt9~bc}*7z$a&$(mb^grCW(gYckWhHtz(4Yf} z-9MpHf9k6zv@{j1lCHuW!da3s(I~v#x6PW5KWGl7sUah5lT3CVd|W(HIOQcvMM7Gn zVeH>=ozRT1oq4abz0e@8%M17FgfER*Hip85YtIYQo7O=axU701cv=pW(R?C$hD2wh zPnB9t0sf*JTFE~u8fiY)_K;^!OWE{7C%f-IiY<=K<`83K48A9F*AsuVOgh#L^Nism z2q2yTe_|5pb~c;v)nf=3EF@*Y}DS?^%eDby>9juUWlI{KW#J!5yr z#Z>edJ@M@6N9B60Jlg)TOI|;TP7&?qT&#tn_EC|Iz83uTsV5?)LxVzDLNF}%dnp4? zDPb>I2diN57AqN6%@4W&>3;a&$Cz(r(EV;57=QU=;b4*$3&;H0uTxP@W&)oBMsCbM z3obJFr44JCaAA2fO*J~ZO@{k{GZZ@D=i#g0r2XU)Urh4AdhQZiW!D~#5r4X`xk<3_ zAF_O2^u3B^cbzghT(hom(M-k^QnTu0(*NuF300gNgZ-?&akXh75ehtDm1#qKg^FEm zn+RcnIj?8^0;nIk*J4tkndJkHqm-OU>e?pN$yA{D_*Iw;y;?5lO91@e(!vwR*i9zu zK2DS$q5bt<9cS?);msqTS|`X{dUJ!3bv0K)atzHd#>=7p4_PT6lH+`?ztMg3KBY_Y z`6Tp}B1=Z2wzdnaul^k*@pSCB$@@CY>ZleD9%+2tIZbzhl|xdOj_~^pP|I#WuyD%r z31`#{{_0x{-hiB0$^F^0jgJwO=zI5%MLJ0|r=ALJw0MzUmGj;K+U`CbL+Fa9U0v)S zh$^@(;j9%qRG=~nb>^Xu+GI|7$RnxGFb8oPDo^Y0lw~k`QF0t5A**w$iWO_!bx@<^ zI}(AU?N?7@hE3r@ndgXU>VY7B_tmS*15Gg~c%H@Mcj%Y&xthzR$OpX<$FedTU5o#Y zjG2RhEbBKb5po<`Y3>de1GRTTLtUO;jE4_BOwn*se2Cu%?lUF64bFsC)bHn6a^>g$ zeIJfw9rNq#YeT=1WBt#9bGD)2Rhp-7Y#Ht-ErO{BnJkchHeXo_=DJJ;?I zXecv#_GC0ZLoP_ea#+Sc0yMdT*x`rWZ@cPPCzvqGtzF6E8t>q@sV(7NEb%KsT}e7}j|a{ylGPTyU7htTDE5FQ-Ie)R&)G&n$4;PR{wf_{5S8FuS~9DMZo z#$7&eT^^OW^5yqgR@y-@aiFlPFl$gL=FzaT9oqkN*-y|*ou3FHhZH<;kV+O7r>pDn z1LhLl70DcD_`{uBX2fpK=asNUIo&GgaI(3Jgs`Xtsiyhgdp=?wWg2k*NsG?S4U6@h zyjT=IV7joq)fk{}K!!M(1Ujc}Hi_-S$gZ(dXFVr2qc)ZuIUUuOjkWm{!B!NR_YZC5k@cz&4of!h+u% zxwXRT>w#^t{7I9T26M(L2Yyq0oM9ucStrkYPdase)8P7_rqL6uvB~!wxOvw778SR2 zwW+I1^E?qQ8=8*w4z=a14HWnX^1H_h33m+e>16BrL9c*I1z%{H8ECV)cFjMuTBFm_ zJn-j-(m_hNt1r2uZGM+BOHLbAs~IH4Q_tk&(xos54MT!mCCr)HT$cx|#^RULl!6 z8?B0ff`}lz0;mvaQGMFq&>-)HvHW~L@hxbbOq;r|KMAIHrW17is|^n8nh|WP@zFUK z^mOrh{Hl?0ns3#i(tg}G}tJxT0Af{&s>81{A4|ARZEveCpDQ(vUV9l zQ!DEI8U<&P-Dk34D}r%N$x{0;#<|Ho+3YYOnwq@UBv+=`b7DpFWR0(43mqcd zh>N+@@5A&0o}C?~@!G7U>1oN%(VHqx6LK3zcB7imUkrPtfyJiAXP%xPGmNLhjnY+I zRof9Ty#YGHDYqOoBhO+%&t0}kgtaLN(ITly3>vs>$}Zo&51yHPi_4%`?q+*#9Sont z>3%qFd*;yDXqdA%SH?^B7+YaoPk2cklKR*B#KnO1ZYGiVPw-6v3s*VTJA|itSOkTe zLgf#QS|;c!(;|j#gH4J@?B&Qk#8ofOh=vRggWiZ7Uh!VVbEZMQb!C^t)IODLGnf=6{@{00;M+?uNf4E&VnRVB z9PyN6-_Anl;ECsX*S2p-JUcxxh{(#>+OzgKL==ux_>&F{QiiAB=@pOU*v&V6x=e1U zPCzpafVq(TtwLU38P!*!tN>31Yu<2rZ4u~wG{VG!cfgS@fe=U38(NA(>8zrfq_gH0 zaI;CGoCG$+evMijlhb7oe$<<(w7PA2uB*7bc7S%tYCiunbsqEEW=qzMiQFlE4j{rU9ptfqlMa8)MRUE+JrN2~Z*-QwI*umFAq!vg~RS0L5a2WHj%K zTTr<_(75>1&|@5Xv99iy`2QKilG;ogm{llPE2>rb-N zow-71Z=IrSLT(utNmW7}gq+*fh1%4bC)zFW0S*Kyf%T?qU*NjSMfi=TtJURjaYNS` zK9wGLCakuIb4FoBLMc|l*&k#t-&-^UZ*Gyh=wBqF&ayrpFD|VlTXYt=?yNG!|0(szyU#Cz(^!(VA%l+95-}qKPVd9MYNZF1tj< z$x1TV93O=>6^uVVR0EwC>f=}Q<8Owq7#r?) zo_vgW9rz2!WhJ%5`C1zSVq3hLWH1!5p}rCFi!Rr%;1_A!qWE!=iL$%r1b@E{0ZCml zZWeX0N?Zc(+3++*OTSOAnCUjn|p|EVmB?+`I)9h@xv`_ z4NL@ZukS2{kz3~bi+b%2NeuHz-qDyA#-k!lj;UeqvD%x1A6HIfvLKq}bem-J-lX^+ zIVodrUYth)+^>$+MZDNJ$BmlFHPx;zkb0wL0@r^wPHoPIhC9hRD4>ge+u^|chIz+! z3LMU`GMU7q3yX+J7bnl_KYUe?P~8@ycMD+s2ZRaaj-ZR2dJUzF!u>tqeyetDQpy*! zcZT}aX&X)f8Oy9V!fker4&+&+#mN9^@;yD>2cGk}+*Xi=m^~@T%!a={@rX?u_fh%D ztIKK=-;db)ZsEkUs#nC?z}D)Ag) z!2B7{T2d%}SPy1d`Qcl8%Y9yE`K1j_DZyt~Zn0g}Hkp88@p#Hy(uUhSgT!{_8YB?| z8V>w2+AR&W(FPuSlq>q3rgcm@uT;qou1SoWg<%Hc_%5!-vH$FrIf`dIxTE2*%qpOL z-&g$+5pjOo-sWCT6@2a^l1BS{mPd(G(_jB?47slR>Ia=^koIzak*vjw#pZ8DS}4ga zx>bt_S>CVxM;%semL0X{ocOjW7_<1oLuZ%^7U14D4<}$C} zLzev1fpAR0@!Ujwp_jc6kUAaT8SLZr-E*(_a!TYIJgl1&Tk;mrV#0%{(xemno zhbE6lf$3}vhh5wO{`HTrOnMHyzi~m=hD|ItbDT(N^KVQBKf;X$kB6x}l*JGy|C_ff z6){)FcX9TA$Vlh_XGlB#dAAwdhJ_M#F~ge|p;~)3bJ&0*+SwtHHv1s(QEx*Mv^J3$ zD*JJGB8`bcbK^r20^q$+Ht)yka_G-J#Ffo4D62V~3eA+0hD4D7Mk_)o8qt5LtTqHMbwp^fE*_((jHt1J zWVDmR+dlw=*RYt^nxj74T1A#^jmVKeb9J)FZpi?HjUMBMPvED1Ovj<81N5p#BK}|@ zx(u1I-B_V9O>)71#anKAL(39qX)}b2nN8)3PDQ9CkW`3FMiJ=#s9NGA{|CenVYvzK zy0;1MtlMo_7i~XDHJC}>m|19gn@ItX+sgOs+G$<>MJB8qFXs_u?=BLD+Q)YW%M~p? z8KYi&7^DEwH^SNVhoY?NV(s=&PNONh(+|(a3X7?sLhD5yEJn!xFOyImMx0v#c)lnVVoG_GdKhiK` z_k&pN#?8`Ca5(dfTn|4E4|)J{pw=C%0ITsqk#)C~G#5``@)Zh<`(HbyHW-2hrI4p* zOU9?Ata_z{LHFPcTLlK>!TzAs7b%?I7_M>T!G3YSndvPPY>wt%ioNz|CyOm7n zm>PvZpJNM6Gevxg=lebUU$RkcK|Rp6p@UaeQ~h!xv`0C?$?H?CWc%!^aC4DO4#evZ z@QqsBYs%r;yv02-L?%mcWK84?>+htTl%L#*9#>lu@X4<_C}tGZvhj__2D0H zeNG_iw#Byar48ew!oy9}aSCreZ|Mc5f^s3<{~ke~=tvVQE+zAbxR^F+)T+6O?{}$e z`%dPE!oXxl1eAR>Jbj^>m$|9{s+LuK$OH<_qmmQ*$!MiQJRrve8Erl#6M6FH5YU7? zUKhl%@@E|E*z*>^;(z_HnB&es5f`Y8h>UymGwR}ZC_M2}3qR7P-fL;PwNa(B3Dnd{ z&VGl{^8Wp3ltb?9SE~;5PT=tm24wARZUHkU3wUDHFxZceW<~%r;p=BXIwJf>0&;%* zkv;syFrMAM6GBFh%}OwA5-@Q<<7(_{&o_{^MADz8&NLPDPvRflBDTOf4T}>0EauJw zA}TEw)7;7b!e#`@jtk4#P3_E{Jd2Gm(dnPA8NknbBjAYqXX65ICzb-F|fJ5TM zFe69@cW8pDt=mIrm@#xwluG(P0|xwGqxbc3QYL@Z+f38-*_4aIMs5>%jRW~CN%`PCWnf7JiFR%_9=%4; zXdySfvjUyGz!nN;Po|s*3PHD>$MCF&JgHwPo;Xiz<68Y9p5Qlz1nF;=+DJHCj-Qh5 zz6vo4LFuYHZS14m3vNXhAQLQ6G8&Ws(72v*1FvfCnFdZ+I;TNg$j+ymJIrh3`P@_f z7djc2e>h|%<-l!XkmEdT$Rxh8Wygadt|)cI;CD!xg<7TnyUpDyzNITMp(y&z%mu}h zzee~~xY6EM)5eXHFCYX^K(bng_Yn8vP-~9%WSP6f`Yzas+Yw^l8nYI+9n=XIe)vJw z5|J8b4fN0V`Pw4Zh&;SR-hE^InYt5v(y8vlF*{uIO`ng>UI0m`Bx)D;VVB{^oeT=B z>*76yD9;xD_qW6_JVtH1a4|esfh>3uNK7rUq=NGAJplq0v5Xib;Arrv%tvGj^nCiF za}$3aj`~dy4L3zF?j*&%NVFxrv4!)Cf`H$S@+J=r1&=0$7dEhELS zrm6;ydvZFTiX)5*tbFdNF5W6zTqeRHQJcGg)MogJ z-se9X&(>mYjF8BVG5%56|0lh%&~`wBYDgchH9NZrxzLaO=fRGsrhIz#u39+VP8-N zi>llV0fR9MuL`(`SNL^8R&CDP=nJt*)%-Nc8n(MU1E`LlE`i3kc{YOw1XSZ(F2D&2 zr-&v2o0;u*$Y6S-w|+*%6|=#Cl_Pbo)a^j?@oeH?T&5dzsJ)!3e48**Qp_)fwZv`i znxKqGyX2x|frS@Ru12wjXd=nmp z!O?o_ryn=F-7`vR&lS;rC9NyKCS_-4v}VyRt4#hanS5ANX?)2>;Cbb&!2)iMeNpJ# ziu|Om`A+OqUo_889IA=!!O1S^cMV6$FRvE#S3PU?vYEeYC2gQ)JmWpV@>aO}WzXd$ zKTx^foojR4m)D6|;yj;!Aj*kuWEClfV(=apn+6etie5&1%EUP z;b#|KFE$unPMm(ww*Vk`w}()&WWlskJCEwFo~veSQ_P-k>MY}4ab9oxgMGp8ed)1k z!UA!e;>R>~ulY3Rl|5<1$JY_E^G-t?1Yk^-BNJ2;CtSu!Ea zw7Rt$0&<8~%YGYmW+Sn#VM6n?r`n4y-v{a~KipjYNXBX{eV%fg%|g8NxAysZC2G`@ zPS=-X-uw$0T?+Xmv~+aujQ@oax%;$Cw)Q8Ey%~gFKhVFaqJBn}93GNNQI-q}#N`z? z@~DoRi^(^}W3-h?Z=JAHfXqvt>hwun=STQyo>k5_@q-#=c&Xd|`C?GG6u@ZK{sT22 zN)@+26OiVOH0|D0-jS@HgKW%=x#$bW_=%d4zNgwOa25NX&7M-dFa1su<~x(`BDh@J zFN-X9cfbhPVh^;cpk*RiaGtx zalp5n4|lVU&=9t{CDqfG@_xJu{4MZIO^z8@k96?0T28^?WQX)f>OK1uEkak*jD@_P zF>kE18VHz_I5vy??%PHe6$1*o4&TDwW!j~@@UT=P*Hl8I>)2D=1HBZ2u2Gluu8qGK zkRBImt8Iol+%+gK4FqVs49k3<&8`Z|j@bqM6GHBn)uwmx5ziQY+~Yyz`!1n{*RfzCtiNU9 zT4bnS9nYz|AJGUb;}nm^EfTK)?|^g z-?=z40yPV`>-YG5oXrBUQ)VAEva`6m7{i=01l?HAqMFT91->tXNR|}EL4gV(xX@Qn z!8ex;5wz-;xI(pdX&&6Bz=AgVv~nqbUiIRZ+3 z^#ZHQOb)2CLNyfCNi%0D9cX%#?JA2JtoN-~^kZICC*vGlRe$%MobI7IyVx&Kkfu*l zaXA~5n<*w;>x9y8xXf%TuO3vbH!<&rv2{7%o{e{Y*K>5xKaM?6)@n@fvt<+ke%M z0Q~XeXu2dX-?4~t%{sB~B`i0AuPqB?di3-5jUy4q?8$;q%C*`(UB9Dn^lKZkjDT^h zjYmu>H|ATyXFuV(YqqH5f!pV^Sr*kD6&;bPrsFF%i=XtMuVox&t4L*jm*Za2&ccMxEk%80E$i99d__3FI!qnyWH}`VN zng2RoEy~ZQi>5~-OxdlR~4a$h*#Hixbx%k=j!5;_`&rkZiu!yj`Q#6S1x z#X~K|LUnEqK`!RubdZ745hlxi$IFFbrKdEZRjcRj*NJj_d47Q9ZO@@K+6;lzPRq5Ed^u{U1{uBXA|pj=K#5krRc>4h()3Uq4#B`~t__)o zV~PVwCf(V;RIRlhBd-}hU=qV?wo`p^{2JssZsE%Sxifx5o;ai?F2Zs3$uCCQKzua> z6$+PmIcGdAVJTr56(90k1oNeb1tBzE9vi`%wV5e^(I0~BGYU~RPa*uV5$T#rwj6iN z+u^%%r!*^kh1({1mO*N2<$wN@N!3kQ@1U47J>6G|TB=rSh#UC>0I? z^vb`Gd~2cPx&|t*SZp&PwiX=PC46`cSr3p~hR3g#p617sd`0cqO;X&2>=sqqjyHv_ zdaq4h)bm^k{4!lDfX@uU7Y=^Qr3r3X4di4FTCo$@zEsl zY>)TbP63UUIU|Hra>^8nrp~cywg~(Y)o_kPFQqfg?8m^5(f=;lX3pRjIF;yx8<#@+ zAFe|qxV6O2Zke)IY{Kdo9j5-kWAQT^N4V1VDS@bz@|GE9Z)*{x@k~SG<1UEj+4<~jYGWj#ZqC~*r;3>nfu(0#aAIZ48-l=mj;t1T zMW?f6L$0uE;UsMf5*6su`l6+O&cn}y0Wy*Hmwu@-aK6(N7Re?0i~1|>rdalU#WpEx zflzmGik%$!q70GxC0iV5-LDcTzG>P<->nI6`;N?8wu1mGkTMhXe;^~H}AF4+APATxg86vri7y7`-J2KsFAA6g1+p0tQ zd!)fOHO^2cwBfx7$Mjcue<}%R`ec_NW{>h`%-~nQi{8z@LS? zWg^VZlsX``(&~x(U~Q<<@>>zloc7n#KjAxHIO_MeGk^ZuePB-`EaquD81;+CnFK`; zV5uS}Lr!tBGmOM|MJw)5+n=;CTyR!fEUYrW&iN#slWI%{-H;kU;dZXez274mrGWT9 z)ln#~VoAdH4Lz0yntkwL!xy(sK6$m?!}@*RHX!~@CjCBfpyKXrygOdCVH|SKepR4m z)ArJ=ANZRMcm4VC3sLr%1%P!sSG6m$mWqmS-A@#c@CMN9!1dJuCQ-&M4E1x@NdU|- zD2d?+HE%hk9A!?fPE$Dwkt?VYav5R4oDX5|>%AV!#Vyk}|MN^CXYmDSc%&gQubh~?~=eLhe%Rvaz!W0BVbv65^(-#O|&w*Nx({svd% zOTr5+t$#+p(q^gi4siMFd+@zTbY1E`H&6h2uJ?6V#obYWVCnbpPW|RX=ePy(V7T?m z-Si|+i8pwBb5Qe9(@Tt8G;Zs&R`-9Ge>H)*{pUoV{yZ0|UgLiOW3J=@_P0h`_K-=OOUtGuYq&V4%C_4`dhGH|GR%1RASh7)| z30UQc^)VHV8IEGh(Z5w4$3AvPY91|5NW*o44+J@mslhRTz&UQFaKpzOdDt*zb||AO z*D%|A#Gz8mT{t?QlrG}bCYWC7o_p8StXb*B?(@-af2wLN_$IU2b-t9$)Ch})3;yc% zy@3L8e}8)SNMza;P7)EZd7-yjb=TBu(n&BD%@fZ&_Q$f#lE8Ap4W)eJnWbWa;L}}h zMvNP&iOxF9j$eD-ab1-cFz6=DTJh(F0&7!fU|Oi0zpYek^SfQ^_ZhAM3hPX@pvB6s z#H(5zH+WEvtzVpt55yw43VFyQ%?U&K`5?%**}`w@&@~ZYjfe9cX>~Afd3&W500Rf3 z5O+zhhT)-QcURTo4sx!z#cIg$Sl+=Ia%^@2O>4J1^0WpFxvqg{4Gk0UZ{<%w0PEgR z;;&efM}4{Tm&H5oP~lIV4O`EgO}g{0lOhRSdL^Jy$n91S^ffTGFsX(WOkQ%w7`C0 zZ^#j9d+vZNraRv1gMZ!|pzU&9o4lfcE?1M|RJWmmnFR`1^hye8oN8#@{ThUNHH~%= z+|1*yUKL9Ka6_Fbo?$0Woe86ji|=OI+I844ljU#CyG-=80kYx{83@tq208HRUZH zXa;X#z5_OvO?hXbpX8aiEhLEu5$xqueZ~JSY+7(Y9N8~gc-g<6Sap8V2gCuYD$BsD z`s5`JDH{y&ffqJyj18eOoH>#;mqXW*L3bMJ{fj{EE`qGz*m)DEiQ)dd{5%q~nV)Sr z%FEdjUgfZMH<1jO|IpWsFzKRlq_F3Krq_kVTS%_q{8r-c#s3Kg&TnC$sI)&V?_BIK z)Ih;h`dpZxm$LJYV?EF6q_xDm1kuLSFqSbGTfPB^D}0*kfrY>kEa!og>jkC|d6zId z_7crYJoJNg=MPmmH9c8%P^I}|yTD)}Q3x@~5Y=+~hvA(DuR@5nxLuR2wi~|mamXgo&6CSQI(2rE0DJ&i{ci z-6n$Y8dNiszM|>d>z@)I4{e4dyugth|L zH4Gkb7a%kR!EIh`5B>L7R+hZv;_iCJmIOL@TM*0aFltr%6Py-ZY(TPvVCp;ub5MM5 z4ZqvFeL~wgG!SlfbYDoEQ2uChT-EC$=faksX@rUGoJt z^?2)MShjUSS45DDqa~%tH3jqn+oUX)<9eh!wAW(0IhNg~N16b@9j+p#+EH#Wu)Y=h z;~A?*%031BL$qVj`ku)%^2XDZ`dySr#g{N8{If(gg_os8rviz(O5AFQ+;DwEip8_- z;_~WjPzm%sM8-+Ki`o%5b@7Lt3znro+wI0y<{VUD>9XAq^w2S*BkiEIV?20H#}FB_ z-AWz;4P+OQUdRM?@okxUOQ*jsD;Q;YJ+deJ6LCGyDys8t^-q#Q^v5A^S4)^KW6mlnTP2@Lv8}M4NYuD%F-=+UY-2&Nlp>#F+1xi92jT4>n;Vb@_PW@ zN#H;ViJnMU!?4ATg86GKNJ8L$N4>V|I)-9TH%LcIK_d_r);G3<+jH&f5?F!Z1Pbb9iU;q8*^{@JTpwvb* z9TQo;kOn2OC9M*_DSm* z8NOqTN${e#oUya9SmxfPS6rf+qhsttk-QnMUNZ`TJBzBLT#X(MGqXaWz@K%0zB4y{ z0xiyk@8j;?)Gg?=k9p2GP+|`nYR!K0o(uo{s+m19(w^JUlrRJgY)V=f%HfJm=c#@| z8(s`@aU`{}1bP%fRs!?-u9Ymv6xZ zBM74pNvTzq>`%Dps#A&ZG{+bPSQV=r;~~c^<~YXxVAN!^?csI_j~wy__IeqR4o2np z1ab}t&0+#FEIpJ(kCG$aCylGEetC$HtN6|e7!_dIN$E7VG|NTFSdja%u3~x5D$i)L zoHq&P|IkvJUzvA%1;i4+FC>Qt#m>Cucx7WoInUmGPNyz@V#MLg5LoYdMw#N?6qIg* z6V5YYVA#w4B@H!#M*7lkke@;1%<)HwDOwY16`Ix`qy-vK4+oY&$E%-5yZ(Rc1ge*g z6=8(hv4(|gmG*QY-XDR6>HnCj=w+}8|5Ok=mvru!_ZN^vD6z$qMaR`wi@uJ(2a$_m zng_TQjnBgLpTW(CMaBrR4?Ze^Bm?KyY;vw2$=EVPpGZZ2Ro@?q*Z_T5P!=H%7Nkwlv;#7|>3b9;)JBt#?DSOW+n{TglKONAD7 z8&F*2JF-vCpz}fedVreMYtE-T5(z^>ar`V_`V?HiYB=B=>@#kh-A(T=q#TX#1VHbPy8BH3nGX~?7C#XoP>(V3Nj`$yoLs< z`o)em-+j0!exki3c@9*jVd?PYoWMJtx~0nU;*XPgs$88ci8otXX9^#Q7h8JxHRWg7 zY@PTVnyh~G`Bi)q>%nM}icf0CG}pkid540@(!v#GzYl*W!`e;FrTS12iHf1Vw!x6m zdC})CF zfM?D1qHG;qpR(N`YNv*HYU(7O7}6_x=S)?mh>}17T6CG`WO39m&>kjr<)_?F9qwoH z1^T2O*m6Q2^7;&@P7~JQa3X^_Ez>S`0_&olYTTWu-<^toWGAR;(zozIQHIxONd&Zf zw7R+XckU#?w(yUb_3CGgRJ+-0lkNcHGJ&Dze|E3RlXMTfgFJ`A%sR4*Ar#Rvb3FDi zcKWcqW7)#|4>9Hs2*mtqmO+MQNduD@Q$cbwlDDO(xv-BXrRSEVrihDX$lctC_+ zWo+Tv6`RfC;aE4eR0O~|FBdOHPo^V{3tq9k8FHv2vQYFIOgOTwWMl?^{o*pDf}Lt@ zIM#7(ZkoQAXn`$+m?^UPaZk=G<-+nS+A|QDjdpFt8MY#^Id7xdgq&aNr9sT+f-+Lh z$7*te{cbEPR>V*1)_s*(O5X1vd-80Y(lnC`lWFU@cXr(>hC z^t`_yzu)^}vn0tvt~q3C5n9F1Px)>x$9kXAJKLevs)Md@|?8q!guSDzQEq0ZV988YtgLGfNf`T4JxX(?oo^*(l4PvF$*VNu9 z0L1=-jXc&6#}O$`mntxR8Nlt<5O=92bc_JQe_(r>q(W{kQ$cSB zuL1NS9ShPAGnJ&r`D1Qdg8r z*LYI3m%+N>&!*&Xc`07eBk#oo^}gCzp8Ju6bvR-Md-+F(@H2PCDedJ9NiK0gk@xzc z63jyl*a}7vj-=h$~Ghq_Ngong-G_KTy67c8*qe+oz|ChMEsJw zFld=Wd&?bMU$L>cp^Ny8_$_vD6CrP*5|41y_k-mW4I6J|+xh zC!b3QK}c&5e{du9m5WSN1j_eU;}~rWxXZj@OB_q+mHP7#q5z zBl=v$>8^HO3*pZB?08CSv*k?tiImlXzn%eSf`1w7AI6Q2w)AJ3i%X(7Xr;v~U0Sy_ z8e*MkVp9IyWU(}cm@_fU*FQn~2=Vs`yiYaVh5?`e_sEoREdJ)7^Bgh+X)*m$Td_QC zPFc%37r*&gKt@J{^D-ci;Z+evfpBb(!VF!xmyZsdX%|HOfMNv4#Ow0Pz|^`FFG7)p z+#7QSe3AW-8!oy_SLevthJ@u9VP%ZWKZqNldojb3c=c>6Zwb#Zxiv0>yVp5)O^m-s zfE{*CdFwGC`4smY&KmGN#XsFeRuOYdjeStKz6?h<_o7m}dgdg?aS5>3SpUy-5 zzQH)JK7S%eE*dcYbA$j${w`X`r`1c+I}*80Yp1Zw*Db`~z{~uH8)b&&l)kC>!qnCU z6(_a-o>5gcK*g&V?f-*Zf&L^|z$Lb4kbQcqf^>oX zug~5K9b7-JeVsY}HGO#W!Ar-_DJy{Ji9c~Qb|`Gz(-xV7rc&`iA2b5uFvfLua?*C@ z9fTeGj;jVwTY&ANN}Ol7IzVZgvt7lUsxOvyF@hK0TUcnK13r_1 zp>GsfATJuAPnAByCmPA|hC|+Y1!&}ahb&LaZ_o!T<@@HVohao^A4#G>nOnlJaOw8kQ#$mE6_MJ`^sHk!x(~0T=#+b2mhFqA!>@pqttT_s{y9 z%~UMft;QFXN9`J}X$8%csx7vfVPv!%(`~QnM;=J?jBr~>HDv1c?u^dng;1;?`fChh z)K0hz-*mlS$EICz!?@;^An&_tLU!fm-qH72M)W9%a&gX^q{#b&f*w~Nh@>m9UNqt! z!E~whe{O)UP|GsKC(Kv7MN-?%9x-ayHWYfIi}Ip4PZmS~dA7d>8XF;t0jUz7b32dn zfhPvA-KjPCECUI~eAJ9a^=$6q;m-J2wvMG}-xp4!f`w=^sjfH=nkB_iMJfTuftc?m zM$@#SfCQB?vw4w*WL}E+X_i_aqds^*I6XNiA1&R^5ng)Xe!MfM9d+~$TI6(gOzZlr zKXpR!K~inV?4&R^&3~1gB9djEGVS_fPOz&zsK#&N@vHFo@^fE4^qM_1B{y07&&+?) z9JP$eq(>-?;clx{`}Mq}m{RM$>kq4~f52+_^;Y^XN(a_|u;ER1&v|Su<6iS2uoJmU zL`+t*dck?LhAH6+iAA;6sSdch>}0XC3R4%Gtf{U$U%E5F+EKb*O)E7n3P+pc4dUR@ z*j*)u1?Y@h8Rtx4n`xzcPnCWwVeX+*EC>8!bOm^QB%Sqi`k*@3T)BFi1nl&0(T9qZ zM|J({I@L*wy+B2Vov}obqrOCK-siYF!|v{|5(s$pwq)|79Yq6&E>^!-B0CQ8c1qyK zzMy~yigm5J_yeb%)g$q){;x#-b~LdTt@~(Q0i?8@|bg+*q|S)=}bJ*T%{t#>3!G4tFJNc zNzQ9(G5c=EooL&Tl-eTxgtSj4%NuJGxmCr5?!rN#CCwwUmdq1P;JjO*MLH(nE>MQ^ z)V1wjaOW=FG=PuGhJx6mmpibA;nVjRMng0y%lQ`Yi&IDCMBkYc0>bjHqa32VQl2U4 zoL{p^Z`f9K(jQ3*JQ4@;vibk=fW6frzYZ243=Vv(8zc-4t|Eujmxi*LuebE~9;#{0_lxqD zr&O^==s+^PxZi3|Xl{vfPO3i`V7t`IQjIUpI4|%QbTpx5b6S?5=DbtqUTX1fU}}Vb zI*?N&L{=#XO4g2~@9l64TIR*=7xwLGtIsP6R7}R+$+w+dBP@nO8J)-4$dv^2?_B__xD!xT>#Qbv6q=-XsiLzNMf6wlT~4EK7a_41G;_z zyU&NLgzv~r=bd*RG99VNFxK_q#xe(Pq}H9XSiNC6b;@J?)R8j}2nR=XJsJiR`HV`7 zzh+%2BHw3Y8~v84RFb2xCA!Khp~V2izS82l0GUI!`8RrPk)_YW#QtaRJ)@fV`gZ>b zBq4zi5^5+y=p91u7;5N*A{|M9Ae{iA+CuLTstAbmqR5XT2#QJNI8QQ&8g~H!DpH{7U3Y$r(3qRXL65w}~8lSzqI--CtMB z!pN0Vd(3=a#VE;L0QQZ~vqfQ}*svfT_c5DTvY$6^N{n=10V|ek%Qn5tD6q5mLKC@>q%zkEW#< zTe=QYUg9~d;HW!F+o3X5Cy7bK>$3Xm`kM*KR{qH?%auU_Op7XoUsITmqV#{e0W6{- zrmVf^-{gyT=u~+gu;gs$312iI6DzbWUj{nK9jV zzgSokaqAUPVW5w0O`_lQ&v@MmucX%<_evQeXY}^Bs&id&rr(3(5hYxAlF6x$O&i;( zd8Ah}0(bE?*Rv#Xi0{u49G|Mg1d4^Kc+@Uit##@e4C`L;OKY#pUrw-#rj8P@8=i>wtl^lsp7j61|~o2?t_?=t}PyA2O8NKocg2WgmG7J)c+-Zl~(pF zYod@dIm+^Y{t&IBBUb)qcdo^X-UBqduF=n_r@SRqv0vh)RS8$|q=aj8NpUY^sKIS9 z?4CGPK-)%tCS5)4usl+Q-Y{G7r5VUDl3s$TP0tc<0xM{Z1!wfR^3D7!(Of=(X}VB{+(DpWbHAR zO$tHBzUWg0*WIj8hyFIf&hWr?90ttZS7}~k;nyZBk$i50m*mf6FNrMS5l4;IKIE+9Szt^+4h^$L!@Y*A8G_KDGCWeFAw{MmKrs zM`hEMn+tsgC*A<|C+wd`jE=^uV-cjGZJhVg9d$-t}NoPAT+ zSjjBmLh|n1gE)PATt{<-%w@$KcJY-vTou5n24@aiLE=55f657@w%lVw+NWulRdwc^ z&qsr{m>cg-YhW`gEi3MlTo+q zc&@!P_boS1`v+&QNt?3hLp+M^GBCecY*EycXUQ?c>%dHnn2zS((_@wX z;(5tQsQaf4<8&T-j3nK$72xR8dO;V{zrYrCRRJt}d4u&ZJe{KP>WJ_pps33?ALw*x zO-7fJAv`Sl#!N-wb_=oBMbJP6ODb7bIXAU{tY_pXBu-Qv2UyVz8cfLxrYXT zQL`Ztm(?aebu^x9Ml@a%v2vmSF(`!@)Mzm+5_2$bp(D9R+zgmCerI3>B;GJHk0l0| z&;nKp`?ZD^NDC7=I9Afq@!o(6(kOE}**&}xI6<5kdllj<_&~fOC6Lo4?yi}5jrq(} z`NKTB49UZToLC;LRsAvIR?jUHj{fjmY=H4r2cMY&zSi!`4BgK;RXlS0BkQd(Hn&@i zI@@-=E)J)Q^WQCnndks@dgAJMBjpEhUgu0ci4*+u0cvh@uhf_svQ3po4jQRDL+z4w z5`dY0%>o~D&Z){*-afX!9}$x4#Zo$_el;&P%AO4ucocn;$!GPGxzta0rt)I0 z>n8FN;%uEOLi9XAJvTAKZDHvhx@M5Bcu870PpQwnCt)KKqWIxg4#rWd@*PxT85+jD z+*stAap&D(%VDy)Hs7?{y^+;)F-+l`3rwr!Y-y<}ZJ~{g-)>5rPWDQo@5C=^1SD6& zfzvBy?2WT?uMzfdnH3mJ$_}lv=Tn)yQyyBb79ywBWv;RY2?mWk5nVjUZR7P1P8MAe z4Nm-w4z8-t;9q^&^Q6>m(cyB7&d&YLnvX@E>749KUzUPpK>0ob?Cdzf$|&>rH_JE- z{T=bi{Ts=5oKq$wM&!+S)SaV@-ACA?Otd$lYfUE6{U$;WOz@@Pco_?cWZMg2$qy%A zu~v&!U~h#HYE1eUZ&cCkLRbP07K$>L+ltx{-UT|3bmFu1Pnx#$k{#tpDJfA8LZ30I z%U`=H{EF=fX8jY_z8fu07%N!CK68vE#UgN^!&*F(J}731A-7Z%0Z5pJRAyWxjND3{ zbu3-SVRc*fpUgZ?zirK2y7FejB<}@NjiAofl{Z#Nhc){QW*buuR&HX)gzufW^3Hre zXl%u8NnFNi{uh<;5jrRd4>&9C<(X_0r@hD&PJ5hepwFCrbWK%WL4Vs_)-YA5@^t2Y+Pn#qoFcHf?$2KopxVXk{5D=i@* zEy@4*QJgY$ql2rpurg(1?)q13lONrEO-{KYoDaY}A1%dtZQV{34s!AB_8RC-5loKw zrLM*6M_y(29nkb%c;LU6*;K5MmuN22L1eH@_{RhAJ_@oAu$sV2LHsUzDKW!yYX99WU9>pGweO2VLM2_W6ZIt|ACy& zSAD}z{~NY=v}t$A87XcR^tn5e z6D^Yex!gZ{#B?i(|EA`&b)cs^2-oIXH~Om&`|?g5M;Q~EqnDxJ@zaqKF( z*8z$f+D8Kn+-B03$bB##59lmeEPN%`n9*?R9VO~Gm(=f&m}6gIJNRplL&jF5r_&M}uwq-W$`jPqM|Wu=h^D*3#O)yqNs~5* zjPU026Ke!X9Spbk+f!wE$s|&gl?HEuhIxvmgt4i12e-Ptpf!(nYPiY%=OnC6g1A+z zqeApUmie7sdn4}enXD-mNvdm{6G5(6^C469HD8m{04M>f)c9CzPt<5I`T=QE%+GsMs(aAN_QCu3>{^-G(Vzj{KNC+IH^OZALmaDh0BR&e&{W6f# z)346gNR#6kynuc?g;lsXZGY%29legMtxl6&au+H8w8@EyC!6_NG7Sqks3av_IDyDE z4a8(=HxcO~SNCR7Y)R1P2R!Rp6`~ANjMOm<2fbw!@~h478J1n2NRdKpc0bfMad!01 zbEJK?Cta@MqbPR1RUJHn>m6nFOTL$KKiumTX7##{+&Z?ASk^a1yr`*@3iZopnv8yx zlnVaGbxC`zu(d?fGz1*Ez>RK%nfQXYXV4r)#8X1%9XVT{lDsFzC%tSE-iyJqgr#U% z1};fxy!MSWH*bNmd;tN?Rk@*zl&@|9IAAu+0<3~O2KwO4b0$)0VC=!hYiG-C6$0mW zU$UoSY3)ZJP9>4(*UglD9?nO3xqc9lP{~$PQMhp*sPTKeoDzCj_;obT8~h zwtebM`>~jr#DNzQZue~HN5LYXGJa^~%N0R$>jvq}22Q4*NY?!z!em*P;fp)`Vn4T; zPqbtUGSNX1{o~{Xfc_HCgOZjM6OrRj4wz+zi_cFXOf&H(4XK)%r9&j~B4f}`LWx3Z z4)<~h+gd&}T{~19{t?K;yiis6E!oI=Y>F=kznd+&1WTOnVDSrY?CO>o=Y|=N2+SKF z4dNd3K6Ze&nwKJ%`KYkq##mDz60uxA<5S{gBEjv(;w+K?M6Muc7>Z+DeYJnrM=As? z6>Hr1^$C=2KLh9LP15c8TnL*r_FTKwAq?0Ib20~&1Pud19kQa%A`IS<3R1_(>C6O4 z)>ZXziQZ(J(IOz;Zg$mI*IA}b6*KZMksB|YBO9es*fu{Hf5Ox|bxa@dui})UYAU5C z>8Pj;ewmsU*dY6t0y2+tYM>CbV@g01+GEoR-q{HWmhPQ;`o zGLKCC@MBno<2*Kpiq%Jh0fkU51>BBp$YE5iRh@__ z)M{NBW-m&J!!Od9$hU}s-l_Zp2B*OGc*i}L2285V41yi zV;3^B#?X?j%P91QPEE`5w7C7soWoX|wKKqM`#f27UN^q|_@1LNhl)&BE|?Vb+|eu~ z%J*D>(!(}~sddRI=9@PA)~uC?!l@1`sC6=mOnS|n{@^p4EDG;I)>#%@IN(e#&Ic8Q zad83n&b6L4C`1@QSe+)Q#o-pAp^9767tGUcUr7f8iQ>sas?(qh%(UJyH&d>}@>T89 zkyB02>)n-@N2Xp6ABnz+k!E4Z>0EvbW5Z8>sYt89hJ_c}XWR25Ywq>g)OOgBcA$X3 zQEkzyChkv)o|nMRf8M0I0zV961FQ?$y+i9>iqFViwE7pu;g3Q!ET>8ND}wn=8L z`evhwAHBH3FT@$;hKcSVD+T>psC>cI5Uo)Fd!mgg8JKMYwen&FZ|1F6{nD>Y%6F|c zh3y@$0G1jx7N5OMiLxXoRU6!3HF1L6L`+Ce{4R(A$}@)F^5$Mw742@QgRx*b`W&2s z;1}G`vEwArt9^F0jPISCnq4=dW(mAVAdtUh$9*wG(ZBpQH?`!=#DjLYMsw8hw6%bQd3!f;aT`%l7H(G? z@1KJ;a*Cn>;A7+&Gv>2#AI0NJ!5i0mZDrMHz&9|8)x~bv|Sa>}WEk7(a@=KsJwdQ*p7e?2Qf3KqzSJG+9v9rICIZ$%!!Q;C_ zhtK2**@j2~%{a)%S#eAb6uzw=AF}#25nEOkeVPbA=$yg#ZFj62I`5!Y2qr!hQMS@G z54vBX;R!WLbf8r|ump<8E+jRGa>kJ&{TZ_BeDIzwa0gxQa|0}9$MgXY)DZ-Qp{$Tp zkR!##geVD{7KljpJPL&zmZbkFDR+KU`{JIebFsdDoki24u|JkgP}4y=T8Vo>f07HL z?#360R|W;xB3rl}coW;3>Z)LvDV+4ln(Eu!JyE`pAQSE`)8?u*JISt3!a*h zr!J8&X?I{|^KNE`57obn6LVsN?QptAQd}It4zaApR3P>_dx|kM)I5xrNq6E{1QSU$ zmvPoO7CjbV5rU2))aYyhZvDP+9)FXAe~iRtq9hFJSz$PIinSG? z?CDqSV?BydB59mbqg-JBz?z*{zCwFQk{rB`gTLnVD{gUzHL2xJ;g&gFkPF2iNyIS| z%7XoL2ap)eW2i)Jx;CBj>e1l+l0$3=~qwV+O72tI~0f`0nunq*Y(5ng}pXA9DO zLu|F2fmmlJF5DTzc<=5;6^m(C(&y-(fT-FYpKp!dX<||tuDD`IM}sD9SpzC?%b;}t zQ^z1C{-k6}p_5pqB5e>f+^0eVPk(Ns=z{P_hdbBO(#R@| zGML>y$MFu~g&3Uki2T5~-)B|phAuTnlzeLohx*~Lc`w(RFAVTI9`1|dqe7bogO3fm z%8nG!MqtH}*_%-4KmgATyp=Z)a}x|z)MBF)`^MmkYVRN(kXbI2h`LPY@S+HzcP_NZ zK%X|i$`@S@WS?hXc(t48aw1S*)DITjn)x$T`s#@bENZ!jVUV>Yg!*E5yk$bcy7cEq zhcmw9y(h~g#enV?U^fb!V+xj{62ccL5T<$L3iT|y^LXj#N!b|h>%*2V1ZlHDJ2`EM zmqCYjN>1AadDXy<6sft(F^d(VF1H>t8;UGnp!&!3u}gq$O|y`pYb!Ps)ND#owVprd;fOt_q2K!dmMz z|7qaOV&z_(L2j~nk*|GM4|wqtY{<;rF$iwHW4Bz$@vM|vB_+rbFP&Zop6ii3?y5$3 zUT@Z)mD_BS=x_os(4ZDs8iBC)t`?+MwlSm72sQr&{Um_+#N?!ii3e8 z*Eml$Fw$w{lvNM74lKibi_cEII>~M>Gnbg>%M)pINh);Bx!T`b(Ge0yMIEHih9vT_ z=GV!zL!-8+*}+@K8(LhH&{(fY1M^~&*Sr_+?8Ltt*Y_7YOnVXpIcf@{PIzr9R#(6; z!6nTBPvL|S4pAx%hvR(y*B)1lNoVj|oU&Vh>8~O;? zikHcYMkGqQ)L-^FDE2iy%rYao4#w+StjO+6ftlt?MTR80kcDQ&z>aT4!*hU z;*gWr<6Y17*O27HCpfxd7(0$awGrcL5JxFBd#SYKQ3BQ1qPMI~trlqf0(mzXi|KWQ zlzT;P#+lTVzIH%)szQ%UCw!oKeMWgm3C4!c-!f)_T)JTqRHR}V71u%^FrpPc(v%yW zAWUEZfeu+^S(|Nf2-QSQfPl1e^+CmeQC$ei|4w6vKlRk0hNqMACWU}H##eSId6Mb+@b?`P=37ycTS7~XL{b6P^a8BdXv-v zd%FuO9lSAPYj~k0yucg#_HP2+oBF?&#&n*OU4w~Sq=fTdEW!5exJUI%>lRb_M@r**n@miMF zs>8xW#Yzo!B7)GDvaYpiw5Xd%4VO zFXvvVaRGg*a{(DXp!jR6oyUz{@9aQ9ACCp_zZ5^ z=oO|F#c^K<>Xj?Kv`UGTf zpYv23m=xm0kc|(^?0MFPlO?mRg(1iNPF8L3A4Hh5IM+l+ch~uof@EcM(~LkxJhEcw z1R4xRstAK`n_1b&o5+4o6tJS{78MaL7W)v77y8ay zGe8tt`rMqI71e4}BcY1l>4je9kOOe_zRBBk?0;8ABwSUFaET$cB1^UfaNFXt654xEy{dEYN~WYkt# zvD$nE@9V2N`_sA*iaSG2utg7t1~wg-MuSxzb2w^1A-cnLnitRPuRQu*-a2bs6qxRV zx{$a77YkHAd~{TBf|2sdy;{@wV$@?Bys9mB>f9y_N*$K)s}>r|f05apYs+^0PFU#2 zYi*5#JZK1vI{UV!WZD^dq5~PFHZM{Lj95rm0p}!lAy>>(lV|v+fpiw!nY}^tcpS&` zkCA!o1_hi@?mM=XY16{@k6NL6EY8)NWt7bhS|)-(oiJF*sEHIe0%-cxsx(k0><2VwS)3a$pCr;za zW@T9*-%H~XD8JXBE{h@1>ud)Ob9YJ8?zoKUZ%am^Q4+(!Z4#n_QYlBOmj@xzkPc^y zd2_zQaDY?g&vMs~ThQS}j-9%f`Y8}95#Lck{URh~m5S)D(VA#pf~VwWb0aK-*c2SSgtx#}*{Q;xIxp_U!M z*w6A4HKo6G)7!1@Tt5%~wZd!ddqdRx;jPRhy0_vHAfo7L$bl0#AJyiojK&Vlg0_=H zd;2CO+3n{h;>VpwHjUllzk5e*)EsD-3k)hkR8Yu?L88Zosam*6D*n`oF*5> zvm;#CA4w!l1l`QysCO11Xb*{r>$)#WJT?~Si4YUcHXZ~7tZGAL-J><)Uo9E*@5JAl zP=1PCic?I4Yp>pZF%~@+rIoB~6?8m-*TG!{s`g5OFnz;6iO#=kOhOY9s|OVXy_vuwq5x?h1v1{cQ>f2* z&eDAL6Mv}89Wsdi4aGQo@<;{YRAm>2sc{gya9%?l?t?$~klcTZH_A|Epk%e~`}e2m zsYpX6KyHouXj6^;P8DK)8Vvq9`Wlbsc{Q90p4VM~spFZK4RPGlQs1XFuioRdAXswz znpJvCy{N>qqr1IlnvexMti$@$c-O;e9h>TwC7-@qQu?U;Vj7m4(|}uewgfxR%FAge zmI)Y~%R)cSD83k%(Z}Nz2x+93#R3>mAfv^nB!VD(N`}-Rn8Y04aGEHM1NCz7zh7tS zWqW>rh9@>;seWCT5F&nN$jGcw{I#_Ty^aS)6tFvr28zdg)?_hvq0Jk#aWeOPm) z(zGd;6Tc2hmWZO;E#r2W#m(|7n=Db0$tY`)4UKf78CvTqX6{U1nnZHXMdP>mI$#Ks zfSB_&n)`)Jm?{wd!@uk5wE}U6yV|?f=XKy$%x9qV`4L6Tc-sDpd-t>FnmcTEpGF;# zOwwAS6y~>iEoR*xlVE$abb;;WeHsuIAEFYTjv?+;Ik9$npKSvr?Ok*W={#e_WZr&o zZ6GL>D}!`HHYIh14Z`}VNj6-;zYb#pQ!lfy;v{w*PC(jW^);6T1~Fp7gM%2jhGE5i z#|>R`6R>(oOD&QPs&+@vL7>CIuIQzB(q+MScN=d2S8;D)|5$B=R|pkYP=ujMoUL6P zy&i)c1*VU4n*T|@>RVHL&r)1$rHYEr>`AAGW!~ikhh%{amZhs+S9}6XyifKJH&x4x z47({&Nbiz1kpRDBT*+Klx%^!M3=k2INSBZV%xNwBr0q89^=MGi8?XHzaY zN`21d-n(^p`_h&$xyy$i%adY?O7S<7127ge8M z#aBNTKGghVd#A?V!0-KVmdDO$BgbR&g3LF};uV#c?2!9|atx!^XztE4-+p9^o(-Ip z$$BEAdzr5S_)$|_R!|i3z2Dr-nVXQ8?D*HXLHDpz zkx}oZSIaXpJ#PM9%kQ$P7G$DI^30$bFVNN08A&>=qCS~QuIQMQ+Qa-;)H|Srd#6f~Q{lRdepDeT3f$lrtHzx-J6sKQpU^y{&y}t-MaT}Vly@wqX#_H- zr2l{jO_Vk+ePnU`20EO605tNMH!wMWw5>jFWRUu3Jw^u2wTas}sFjw<_DWWBSM}h# zrssW+Vtg1Q)RoF7X8?vP&Sdc=IbKW-BtckMhq!B6X8o5zeM(;W^6`N=ce zW_65o%o*9St^C;FQ+_!rB9NA!5jfbNzOAREBbxqxgK#AJ>%>_bud29*ZSQl+3$FQs*DU>KMtGR`+zFOW4z95 zlruck(vS}5t0Jk`0t>}x!C|;!l`)N}IB^T%3Vxnsx^$tkVKg0vlXkyAKOg&j=bWkk zco3qp&=S&P)~4gkKU2=+dGe!p{I^;rJ2{t_{if#Rs7chhRuk)!pEKS=?&iqoKC-x@ zg1`gQb|2~$BrX!`SmrsUvm^raZFYsL2W#U2?ZwZj^d#=j5}Ztv9)^`BHth=_qD99$ zLl=swPRqm6$!O8g5N2Qi#3tE3GwxP|z4ViP$RaHjS1-)kQ77sT&_@O@J62)^=Le{U!} zTIoLyRLL(QOgWxRRaQ~LDgV3Y!-o2YD|JnxC}dhhlygKxsNsJezIjj-B`zW=BpPet zq^AF`mj9dRzqk6|?J0++h+=riLq`#(si=Z;#_8y);&fFsJ^q*W|0()En%hSB2L&Yj ze>GRrRoD8j=KqW6znbeS{|m(b0_H!c|Ld6kkM;k5!2JFG&5Ifn75X2i#otev5=sf9 zgwvuAnW_Bm%>4ay10tfr$TY*CF!BkC@`<1TedYgN`G4KN|J>_CTO8U_`QN_$pS%9= zQ~Cd7;lH{6Kk5EIJN>(nKZ5%g*I!(JMBtCaf8F&L*B=r1Bk^B%{l)c11pY|;*Ij>c z{Skpb690AAUtE7g;E%+A-SrpO9})N?@n3iS#q~!7{z&}SU4L=?5rIDv|8>`2Tz^F1 zkHml7^%vJ45%?qVUw8e*^+yE$Nc`7be{ua0fj<)eb=O~9e?;Jq#DCrO7uO#V_#^RO zcm2inM+E*z{MTK7as3g2KNA0S*I!(JMBtCaf8F&L*B=r1Bk^B%{l)c11pY|;e{~n@ zf6w%wgda}th&!Ce0Xq2o>*tT}-}b+L`MkIL>Eq6a_wU}mdHrhp<%_M&=Ns#5&z?S6 zeY~=~w7BqSer|SV`r(87_wG(jPTUzE8yy)Q8oYh$=D>~X{e9PZd#-kOb$0yIex>d5 zrPh|_rpAW)y4sqH)fcKNE6$gnD=RH2E-GXcm zTx<+2Ix3PH5gryA5*!qGB7oxW=SwE}9QXF}^l*1`bvfqjE!eJ~>2$-1(bT}F28yErsuz&(^_;O=nfB@(Le()tT3Yn2qOLbD<%o`rsjh;r8 zju#vzm6DF~G%tOVJlgLXKBw>OTw;p!^4>!V1`Sd!=$vUI`U-h*+G1P@0e%2E>CB14 zthx+<>kJzJqgcUdAsJSz2?&6>)HjGAh=k=dm|H*jzX3)LPbIM=Dg_We@(B!%V&YycVTF>ta>^vBn~ zo_}`8Y`6GW?dE(eb(YJTRe1PDJcXm=K=kSAm;~W1EY$)X4%#L_xMnzz=|>XQ*zqD7 zU@xnrYbu;I(kVp-Kc_k9=?N4-8*jNY0*URe4h-yasXxzlXVapd`5nHx)L6{s%AI$V zGKh%HN1jE~VpY?MK%F5v@(~M+r=ve*&&Gz1FJ)Ov=t^)be7KrDz|FvkFulsN zg6Ug|Xgj8n!QBl^uW4>hnjCObHudp?DjxcH?vo-yn;325D*uhp``Qj>yb%=FREQ&r zJQU)k-(n6O+DyVQy;Rd4s z;-^x5-7lW9ZZz!)v0Bby)|Ja_J1Z)w^|Wyz&%;5R3_k%nsj zI;rZjW-(^1^N78J*QobtD@o`;&?l!1k&@U4C>{j{NQz^BcGTL0G$?j6hCIaG6Iu!5oKyP*vUut(!&Umo4@7{QsD`|9Xf(Z))%{LRv#yr8@HJrY_>MztS+@sh`(OqPID^2CHdfOF>E*DU+m8XjEAbH)~~Kd zk5ZW(z%%znYBW6y%=TAnPn#RA`J}Iw)d%xR$gaD31<&`T&($KMXSG4u$EFDaq-zMF zp3_#QkeIYeC$w@@e~4Q}&A5eEgeUW$k?m*{SeRU)mPXq&on8yx|6<;4n5wx3M7Ipw zb?uE?JbB<=rUaU9FrMoWe-&(Pg*OY?3 z|Fq&kn2)E7Tv9&;>g^RNa7+H+MQB{}b)moob_79&zsB6r)gvz@W`FR#P6Z;CjG^34 z{0DuKCgce_5#$C72uUV&7!mwqBa61vLI^_N@f*270i()7Z(Ypd$)>;lQ5=ZFG0?O& z)-)dyKjqjqWK|^5ixuBIA#6@cPSSqa;ZM6OYfT?nFEY6v90oUYGA=V{Nvn)4AL8rl z@`*a0RIVt&qQtsV!hP#%zWeHHgwN!X7=CXM)F~nSJGqkcy?;X{580>I!zx%`)zsYk zAj4@M$J8s=!ya{HDB2}CNBq>DHlxOv*zI;-9aZ0Nno8!-sC$Zf`oge)YUg$Dxv||B zQj*w%I&0U^XDTlsTtz%&4%#d~8jKgq3%U%mJ8$eh(ZN+fV?$(-nB0$>ovY&k>4Lk& zHg=4lw%kEn0wjD@3lVJ3Q_FBmW?_b_a)UE%IN7KO=z4R3iFO1m&@zSDn1G#Z}$SErCWm8+$_j>LAmlK#rLU~7A=F7rj3opvckV+16*D<`X z_|y)eb*$nsS+U>F!@C_jfP-kWO)t+3)QggQ7fk27S0+T0!}Ar~aI$>A1io;@8urh` zQ$p{n!l$c+^d$VWiB61iPwNmeXmFfYhI>TRqPFxRXR=%ml&%;ba)E&!emowP4&Gbm z6-HSk&SydrEQ<SDtafs0I0 za;~De=@BP#i+fNzS}_mAlDyoMDoaX@wjPZzaZ!)+Hd)^1kfHH`Y7XfAzJB0g%=!h_ zsbnZ(PVr{p2*5erOeZE8o~ZnJjkWE=5a-&?S0-)VnbyLm#8ia4x^m#T{fp=j49ntCm# zO4yBLKj$hwEW!F(@feLq`0t!8Qw2wl*X7$+sPKiBu`~(|sl zlHO&#%+$np(Oc+K<2Z5k2igtyR=ha~IImaN14uqi%@e@$Nv@BQ^8VMEI4rFzGQQ-?jPc*~KKRV&(Ko!~)fHsS*^5nj zK)vV2Z4E!30cU3w;LuSX0i?m+Top;-^1c`-Be1XW-9)XAu4%Yc&H1Q&`jcI4 zZ4XhKRC{AdWsYE!2Pk9*UskB9zP6J+O4>zvBs>-03to7Y&U8JuLn0dXA&N&@N=Sf( z>kDePbWkkWSoouKrYOQWaOWJfpOo!3{r0$z6|;?G(t#AU>5aKTNf*~~&eaPRNQZ-c zn{szr!M)dyM-}f8>i6q=Sh!z#pPcc$e&686$E!tfoFEGnDV4fhkuZtZGdasPwvZ>w zAvY1Y6Qf!Mef3sS<=U!H688c+<&7L0NM^Hnjs&mPo~WYg%cmXh zBw=4WBi43QLZW0BqLIgDz=b6VKQhryL0qr3GTY-w9ZG%?DSMu(msQNR zHRk$kM_YKvt1AV@91or4C0NlhYyr5HYrY#yQV$}n+s7e^MG{-dP=#&{>6aWII{?cu zcN#VN$6lHp@#u~-Sc+NDbO*sscPQ*8oTforAbcAToqHum%+9or0kcj=35?+28At@UMNbim@v_63{TrvP?y%kM5Pe@5 z6H9h|(P<@|md)d0d1Z#3jm{nl);g#xO17;b>Z>XLVDM)9#ulQWioC?{FRVjw>83c) zY~#_>yAo$rxz5!~Zcw?EYXyU*rLR#!Qq;f*b+(cQxq2CJilFIYs$86;MJJGPmUs?SCd3sQ@)dfm{{Om zk?Lju2Z$lAs#Wv>V|MU1&^TyFqxBfSgoB=AvuNZaC9V>R(H!iwFEy@?lSP(GHX776 zo&VLyUBrmhM;37x7FwDl&&hK-EHb8JgGeAIdI34TLpDVu)v^Vv(iX7NE?;pOV6aWI z?+|4n=I<_=1YmQF>3}5`U>{U)n>KUmDaV$`6wr^{X)rL~p{%5owng(yew0Q6tX;#Z zNJoAYVBv}a-0xI8dTE}UATyOgK-0kKi6gF>ikH z&^07_40#YiWUDcSdhanNnJ$h6)}Bi+8!H2vWNfmqx!GbY-@oG6;740IPswk=T7q~1 z4V;)t?1@<(EC1|7l48PWhCh+xT!S7pK8 zMd!FPKb;aQqQsCMcb7^Us-`d;YP_?LuBLcfIHPQ`lv`L>W;+X`plLrw;bMh6>>KRQ zuCeL(2AWM58eBQ;p2Av6;K8lNP&o((aZBzIdR znJ=2Zw+PM$veCtO-4r6QV@4UOqQ+{~r-EKc)CH`CNA_s_d=7S4ue2_{c)(dxtw4#$ z+KINuRy7RCREz|qW+R)8%_kc#o=y-by{0{x6e6f*k_KdKX-Aq96NAO|d`(h-Az?5v zv*EMR(K*m&Bh)PsL=ers?)y)-i+%4t_Rh&}z zVz=BBrleUU;12?J!N2y9me()znIdHx^gez8L$y%u$C|t79*>!?XA(<|9`Foc& zT4I&G)l|&)nqFw+Oh*&?yx%e(TjhqD?KHvTk)7>6x zXr=|RA%&Uj+LZf)e?YIlHDYYyR5B*|!*s#77Ee7M1TdsysZ+jjFC6NclU=D=8=sZ9 zr$OVz5UWtWPvdcD9X_@Rqo;BHP39-B@JDDy7FWZJMb-yeu)f}JP8|t6JC8wL%nC5c zgq(fbFndhyYjV5C+LgKvl00u}Fgov@h0w?jKYUcr=cOgu26}`?VT9+>cp&uTDF~+K zEb|xk!ra3QeKt#?&}mfLdP;fBwnloY;ylW_UfQ4Y(a1rLgPzr~@Or2zbEkMnlEn(? ziXU2myV5{UH)D1UqL&=xD+PN_1l&b)RHD&dAC>YdPTQk&(@O+B`6z6{eTgfU5$?4^>L%vS_fd zb00}Aq!bITw8%J=dN;|tudBdjvUIQS4q@}*FDn~IN9xYE!ExA)S)G(kVu$(K#iO0B zp{QOr&@k zxEqSHRY-nrFUE4!2PjrJjjj%fX?>o?q5B~wT`w8s6KgazWv{f=i*2gLVV zm$#YHCi#TvVVr0wRI(NN(oFe5Vfp2lGai2CMXwzowz)>}5Q8_^mnn^HY>+&fQhXGM z%MT5qqM9!(dmK?84+5t>S9~+L92@{%PB^=bjWm`vAQ7(M)RF4$G=F-9bOq_$49#si zrIm7=E!~05RkQ48KU6Th^<52oE#aWBX1G%-!BySJ7F*d|2}ym)l7b2*dXJgY{VxWC zncYOr8gqtMLSu7a3#=`Ltn8fe%H+4_GqK#|3m*6BQf*}T(H2 zyHqt##?)ZVOab3pD&WEt*f^ik2q*t6^_GYVXpoy_eFC!95^be1aL1TEms!AG_^pL+3;oXI17gyLU}S>Qtm#QfMqA>fdv3!XDEg* zK4HXKGldmWz5<2ZEQs|rTjKSUq+1%w{`IImcFjm$eKAPMGW3|`i| z^3>>jSe{nj8n>(qcT-K`K`|t@&?JFnt*1~<}Df?ia`asuAxI(S7e$f#;)Uidn za)B|%eY3@N5Zr^qjV)Xf+1z}SdYU@t@P5+%<_q7)`7KU&RZ7>;XIm^xo{Q*poymoF zH=48SpT1~xNmZtqt=AU$MwRfvpRJ%O2tCbl;~Na)3$l5%Wm$B~F1WCdU}Zy6{+t7? z5QJYOZz+mCS9`%Se!Ql_OEZJ`g4*Qf8_Dwn>i<=A#d0IiIvp0-b^(4~hCd1Bd9D5n zH`0^P=(8sCoNAnaMgNYq@!a`j7{nvps4ujfvu_PjK4)^3(fawL+r_Vs1$R~zL#CdZ zYub?qgGuOh{x~bf(Sv+BsA!?w{!S_%LT<5REKD+jjt%>Y0-_FYilDBTxz>&jfyBOp zx2If>M;1RWIyD=bssD|ZZGn7TnKd3FFfVP)-1|^KGRrCMJy);Dsq?VQMo#Ufo6%E+ zgiW2){0~1W%ShD1?F@*?C=la-L%!ZJe|YW|3*Wb07)K3gdK4+RR-)m^8=AvlDX+iG zIUBs*cU1mi%e4{gSDIBd>q9a5cU`c_6yQJJMZKlBil{NRfN;*YEq2O>(dg z)^@jK?S$E+<4t7>v_uL)0oSO%7>*emkKAy1IYF5CGyH5gA(K|uO!_Du*auRFA5tyA zGP#78FNs2q2ic}Wg_&kd0?P#>f&LPu9ueP092_4mckEuc=T^j}2tH$8v3?QpjcosB zgv5qrx-33PZP~G84Z%+!?}qIJp+iE~Tk)@LEoJI*Q)WVBE+K3zpLhSmn)0DL8=J$* z6%N9#MW}E`_ad3Gmm+csK01Krifv@X5w(*=xe9CB_V%xam*h3y%C$|7d?IE3h`VmG zZRL_PU@`mk<0I64o6hV>cRL~qWPMp226oHz`!Is@4ZGwY96t);4JYhaB;f8B2}*ju zceuQP&dE4_E7L77)<&F@W3UP>8+&Pz%W}h*J#cdR0aSsD=4-iSpEE3;&FGlyes~um z`s@q%@cN%(G8yu%Lp^ibf4NaTK@}uqDuF6VXjkyo5dR19KNvdif2#i|j(_gJz1+)n zU3=YYUf0Op>EhZWdnH|~5V}@r`Ciw$xMue1+PkbIN!JV^D^ZeFAxdd4-~NU7FYog> zujhF^0r2N8?i{MxK8IX5Gsd99)}O5*;zyNjagDrpE#FLy7kD@I9`4=RikFKuz1rDC z!~O*%)nB;wk&2)KyK$->t|HXRQ}{-hEZ}d168N-WN0Z_oEPB9@S@Z@j{85>^O1f=a z8$tYU0m5Fm;b4sb@RX}#4OjE~w|M;y6Q;TXp$^sDy{+WAdG%zLG~qWGgZ`0A)0UTcTq7$J1R>VT z{p15%978kT^WzZKmeTUSb{Y~ch9?B*-}S}~0l^Y!L54W+>=*#kWVV+wep8!anLTOq zlOOU7$xc56Qkyhn@zP)m|FN3Sik9{zud6G(K*uV%=YC(nh5>ET3*s+-(HZasl%K~_ z?dR=NJj55YHi}U!#^&8h#E7wW`@w`qu!L}H7E8?9g06S0RBa^-+*1bwPdd?7?iLyH zwesXoRS7*XOt^6*YmF05paW~a0%51AEwsDG#UDrA^G#S*J;UR8{>BIh*Ee1XQwX5W zC{;~NWco2-n^Gqln%GifLCl1Tif&ie=U}{pDc4{&D?N+%ZuTcWea!W5xp%6(CvU43 zjIT|bKTKNI)f1G#uy|J34vxdmU40^C4`R;2!uX`6AZ9g9}l%g`Q-*V|$ zh(alyw!WX9Pbb@-rQYdy3~s&fk)6ndzY5@^QdBA379vlm%9Ao3k?>c2C-4SV$S0!d zGwW{J;G?t4k3Fo?-}guSqJrgG!TtrMC}Jh!p9UTshu_Pt$x^!Mprw9~H3LJIyc;z? z=*YIe$lWQrA;K6r|5i_3gv`9JwLlyGYX%7N#K{tupf9^g)8g z+shK!Mp%9CYgi4|8Zk*ML5M>HCwhe?Y}w5xD|;=N_!%`)T*AZ|W;_yKmmY+Y_}Yq? z>53*joG-IylO1J@d7GQrb%gG;He`>&xrimlqK&20u_G`-E|)6amz8Xoq@!Pg6lm*C zOlvewldzAD z6lEx&bp@OhGc`-EzyoUh1A6j|F};2U&<<_B#}(XlI6?9`%D*In& z^YReXC7N@wWfFB4;6s0vDgE?7@q$}T$-GK~wG1qk0!Lt*!HK!%EAMGpu{K7)MfNS_ zx9Ea4LC>n?;~zCapexQduQpwNv~GN;z3nB+Tg5^BO|^m3RZU%BZGESovt97cN#~Fw zvZQ0rqj1tgr!139W&tYFvedG2kfLplY&E!S!hVz8Tno^Ar2enEADuHVyF8v%XrGrE zo7pCR5VK`!5_^`HvBA!WBa#ci)J2wKohpgx!OkGBi)>ImzBeQJ^GrC*k7TI5*)Ayc z1W2KP9CV!DT2ZkN>HBqoIcnU<`Gc6ox63hb)(xj*P05z+k$LjYB_YNq6pz+KDHFku z!D5k99B(XdxG$j%&pa>37X84J$GVC;KY?veU~LY*grHy^Wq2`WC1`jhY>;SUtP0`Cet6?Wga1C~a!|pN8A6mUz~3 zCf4OoUzGlW%qxl40Z^W;+v+}8VwrZ@bl~z1qOvN}aP1>hfUO1W$m=bg$$F^ds`IaZ z-;R&?Egrr>gAoqd@aONcjr-!7O<|sE7jwye28GYy=^`eQg`eJ0~Vs`iGe1S@_$CC*$ zzR8fV{IyOw=7GV~@s|?V=Teo=V_{}Sn4}XQQy^Vv&WPwLFuMatA&%rN)b6E!kHd|_ zgPh12Xvy2g)*}7-z-z>?6}#f8u04K7~)x>@RA*t(Bj!Q@PYmyXpXb_O%YTpHYjSC(0Z+*Af@J(SAw|*T?IDi(2JD z>_5VO+nQQZrF|;z9y7Wj`RB4%+>sO1V2ziH&!#TJ0D6v0GFv5>={_GwW&;P1C&q2F zy#-7zK=&_kx!T2|Wk6Yq`lPMlClF_-#Om?M@~GUkoJ7`{(F;1C-`%eXbl3_dX7YG* zvwjSo7vUt!VyWxuNNHHTkQCO)ge#o$h_hv5FB3qzYf}kEYkJmGM~sm-y)v~X2mcvy zp~-c+4AW@N7IfS$#yEv=1-`gl0RoZiU) zz8v=5b3D=BDw#AQTw@2+tnV`Fqb}lvl*U^phb6|bU?G3W=|@+h8<|W*LPP2q0!YML z2@%B0nI@atPvgUq&&5I$29Y>sYCs4_yzaQ8M04f$%+fq&5a~5zwRNy&?e|yeh@YRW zwQNu3ngwi<*MJF(fER2n;6#5R!_fo`?FZS6-oLF3gbGKn|6)VUX4^E#@@uDs-@$q5CZs=Oci4(LGeVux-U=h~IG%UQ6`fjvJetJs698@hpe(Io_zd=lc z9RatP*b}gIZHbd-@|dYxR$Ntn;*00Mhz)|lft-x-pbFq)&t#Q1%%vpiB{20ku2yi} z#C!m*7*`FmUf1(hsueLQ@32TN`BWKh|Mt_=-#L?CbgEiSlC0;Rjzvm~SgNf4w%oPH z@PYt`jZQ5`d4WWjND^i^b6rq$EWuBGSaa6;I0{`CQYjY1Wf^D(Fk#;m6B%JM*VaW< zXco0Z>-Q7-UqO5mA4I=tz>|I5wm6yHHd{@A$eh~5zmaw~QU5FQ-^T?h_*m#R$-f7a zmRQi=9nR`kRL(vdRs=SCWlAp_d!M;3TI3?=m*F55rRR`;c5%AXqgoHksdPK)hxryr9N0d0fB91TMqO7=$90 zKN@iJW=xoYZ*hCyWv2E-sNL02?$6ZLB&!TSPDB0ll&Ap8cf$Ji2xFYIi;>0dAL|BW zpK=vDU~tiX%{2he-*L(C86+iWvwsA(A?qOw-TuTxF*;KMGVEVUOUVb=&XBX0hA;JN zC`Zn%9^4p&y>0K?#Qs#{Qc*;ZrnN?ErmaW($X1;6Rzz&1>*SGwfZAb;X1hk(UU+RA z{y{|eU0DfNy5VQo9gz(=(;%1xygJ+|tI7l-^aTcG$x&@2Z(_k;J47j#!oL}cQbh0f z)o3Hl6Ea~6w`Kk7jLGc51yG)a?x)fcc;2UA?y7EB*KPe;wytD8I-Lcw>kReihi9XBILRU7bBg;mI6GV?!&IFh zQ)xub)~8!aR~n$!MU18rd;)LUOL=xsP}2_ZOajBGopa2%w<_jR2eI_CBA*LGvd-PA z0yud;(aP*V&}X&)RlpU*fmv9)w%}$&QA4(XahRiHp?{)%#du~{BPX3 zib5%0LJ9^r&fPm_{eXP#oesPgJu!XAOE@A%`#@RUBM~RsQ6gjrcTCgpg_sOtJog2B z8uKV5MR({>F|l5Z@56s`haY@+yUUpNpBLZ@Du{D;t?DAr%@WOx)JH?3(rR8i5>-<_ z--sE<+M}yv=UgF(eW5WkF>Zj@8O4WHd+Nl4;UjU@Id*{=r&b8yHToM}@{t znkZCC+(x9~s06hN#6Bn+hI|zoO*xFq0esTm%QrnbgJXit*TqDq1?xH<0%Ty6gzw=y z`)e2M#t{ZQF<(I^CNE~)sfT}VvKn+NgtVe1$Pu6OO`ZpUC2X`0IeY=T%6=(Am4?3x z`5nnB6vQgXCCfVKys)gvFFex7Dssw9zfcQ{|FA}tt+rD#nQ=_p2n)|ua^gV#xxBOM z!q}*c&>fh{zH)8*0vdIeN9yyv#qYviG`>D%$5|^>Y>^y9@Y1pQNEc%2Bk#&;67Xgg)U$MP6iA1D^4x)o><%KqYIu)NE87j_0(O_Q6y$>(!~d z#j5ew0Tb(Nox9u82z9QFXmOtB32dNd%~p7Sf06LAZ~y`})$p3aI-kUq{gXW+t7cQ_q|?aT^FWnv~q z$GW~q|KtD8KLr0O*@At#l5(Vip~z4W(+R(788PS0pWX%=GVjy?54!@-SO|*d6un${ z`x(5Uj=8nE?6$)oI$zCM`Z$e#-a&l)rBMl&KsrBO7TFi3_0Qxs9MW?2)ZEBJ*udxJ zEX8%R1E%nKi5RyVl1obe@#u7+xQ)|l!qg{IADll0$DZD_J$V9Tez^5V1<-_6%#L~f z2z3R#*+pEX((;IsuFr(I>);(n!niAibIw-YPeik^mAS{cbl2_BZO(-FF?Sh}7+J*J z99qtDI&MNR^R_IXy6l!tW289D2q1zE^f)t2*WXr=2-V}hd7M9VB^H7Mf(^l%rw%9} z%8?L<4e~o$S0IBP1o`>k$Yi55QuR1a*3N^iC*;5elh4IH1r`k>8M3mIj zT#4LL_WLn%*Dd3)m~dSWM2SSWf|T90*e#qBCHH+vF8uiSI26Sx4wi_HQ`&|Him3sH zqM+mrv`9oBO*WWc-AYq1S#a9vH2xYKh2tYeY=TJFPB7W81#d_GXZT;+{=}!qL|%F4 z-aZ*(4dsmdF~B=Qx_)o$ftn;YY&Q7~9Duw4f)ujPVYHJa3C!8eeJg7K9yp*8NTTVf zy^)Bs{1)#tAj?7gfey5=x=Bz=ks)p{*ZU3r@q{inYKAP2A76)SMY83wYL0+iI>9PR zph)lad;D5~>PsPI7pU+uuvX7OU`(jV#00#)<0NM+Va0JVhz*jE0&Om>dBw{G$VBAp z1w0>g%3>{qjOLgOhKXjA%LKKb&nJoN^bp|0hi1yEdsImMo+kxLJ9TD`RthxgA2!jYoQJE)0tAA#e&p3En zt^~h#@ik`G;0eb~u;8XI+vF@>zDB8;Z%db>&O&E+C;<_e5vb54TVBXG|AvV6-(}uO zGxY~jNxW+V()mgUuWQBZOyR=?=${Yft-QEhfn;y+z_6pjT}qF`kuHLeQ(|MTc@F8p zOE3YvPr=l4o#P^^a2yi+0U6QDmuCmaPX_|{WlWh>Wr504=WG*Puf5@kv>?w6$lG1h zIEBBH_lz9LvQvwfUIr2^A&~_?(owg9f}k3&5%eee&Bk+1Xut3;AP-Sh0kg}oKQ1Ri z)b#V^(Ht?`nK~DtPsfVb#M`8u`7#24m)*^|98p=<@)XptxSDXw=`vcDU*5Oe&k z%^X#tn%XaBe;sH$qx1#lfam-J1-Jht9g7A`6Wj#9HO%@qII4`1y!emK4qqY5;htj5 z$~l3lx-uc8&=_#t#cBm1Y{u3Tv+kC%F0ww%+u1q_6_LNv{vuUf~zaY#zr!Y6?--Or836`9MyjFDr6G41u|Eb!YR)5QsFY_jZKANWQ349RZ zc99`bQFTVWF=_uD0Qq?|4%EEsD_nb_skb5L(d1y%r>d|HY6ZgTly*&;sb!E#$5jgx z-jsrm3hg-{jnS*n!6VRNVE|Hrg=pq|h8%rjhr#T{I2j!~wWxO5s{~yn4dWnl5#0B! zXKQ(EiH_E&tau0Zq`k@%1@Jb1`APz`Crlom@DmH%qtPcr6GCRZd=%cR!QUsDC8c|q zC=Ygk-sTUw-nk5}??Y8zzm|qEION+NWcKc=R=S@-gRPkwQ2tg@{0b_Q5Z5gin@Trd z5#|9rVmM>Q>*VWb6GeR{=1QI?t0d_5knJ>bQ1fPc<_i@D@n;G;7qU) zu^;lg+9}i5q^)3$FwUabKwqrtU=B=WDcQb%4HzSzoartbRet`L5jXtcRCl@1tJ^dL zXCbcC{LP4Yq*4mkAqqs?o;LnZjl(UO2zUvro>z7@PoUxQ(m@KGvks<8#LG}OARHFX zRi=4fEAd>!miMa!jyU#@RPbuzjffxAtO^QSs$Gq@PwbG=t2?Hb5d+e@O^Li7&PiO# z@B**C8PRQ7DEhjYmOtOT9b>KfgjqbcQ2(*`*&1r7@tT>SEc7J!x%zcKJY4dseBr95 zxZ~aq!FJnSE`vq%blN?Fan_hX8|HYW#i%iCRuY~P4pza5CZ58m;flnZ4i|1vDEBTC zq<2>*{m+LYa!)ZjRNa|fh^z?Rb`Ne)#fn|$(evCuS!tV~kD1+e3ZOKfQCLWP5|mJR zyNY)Bbv)zp-pDobj6AvsXJ6|&a8)wMg|H_K-;M@@`M1HA`-B@ICCOe(P{8t}TH@-C zZ-w42T+Gf=TaQ;st6L5J&IkpRW`opE7=rcJw*?c3Ojyi~H&Jzs&!nUC&udAo3gYjQ zEb&-_vR{L^+&K+DErw`u_FK;ZW_pg=fHYco+|4jieg7wt(|zTU24YdD<@unL2EPgK z-2ihIgnNI7ju~f-&k=)jX6y>HCU&8}OgOruabieGsnlW|X}gdSw)mQNAq+^K9GX z=3rlYKESWvsLM{nM61khW#ed!LxZ+ZiOMDk3 z;8$Bbu~0WN^4ufAtKmL-b!)!gF^88Q16L9)z-P}&IGflSCpC;>SYDF^-~;S#_E>H| zYOe;&ES3~@zV7rw={6WhHC=ghX+AhdIw(>yTMf*4uJX|HML>+x>(VtRc7;%cNFYfs)Um`G7r0WH6~%nCv|bdU-czUMZ6~wN551@zZ5y2LUsRki#K`a zZw27DRn%H1(EmpFr{M0dj3->)5C1#ejsIJ^hRch^8Q%RF4-qH7hN}B+nSv`mJ~&tX z`NxwZ-%l;DDJ|0%cd%*ZF)K|1U9KHU@ax-|SZd1!nS)Z!zbZQza5z_WWgj2Mf9``f zIqV3UVu3vM%IFsf>Cw6aV1u+=M7}iLBZiMxI&syV`veS>2cKYAUr;ss zqD&vntQFxyP?KyQbH|%X*A~Qwjz9wdbo}DY?=+FmspGMy(ZlR^z+}nfG;eH@$=<3- zTX_>4n{H{M)%Xaly>4K*?xPToDJYEc#0i9_3QR)YztgqTFnbVM*?52uHupuzxG6~JuX2%(W4alP170k(D+UVOlVGbE1u2`D+t?g5>Dm6)(+g#J3Sk?) zr!6oozUsZceZx4Z$x8e}WdsbmUgjFEDPnnA%dg6lmAAUKl%7C}EP&tRw?9I3K=P$jP`vFHw>DlU7P^S`|2jdatqT##Hf`Q=-EW@F{B!A>ET z$3%9#g9xw(&7r-Sa>?Aw(8m=(9#==H6ytGJMh&5x`>z%$W_aM|<+*gC;SJT5$*$*Yns$*f)zNO%p*TcG*V(48bs8PV*gkJipbHYtqRD{#gA-s;>)e zu|ZOF;VVemt)R2G75L!@Pna^JU|6Ov5nP~T{n;ZAO;5J(DJ+vAUWn&-m_6dK3wAEa z9$!xmwiNlbz)*{}D&G<7Q8oTfl8ncY0Fyunx0Dba&UW26UJ175?Kn}ild`?D?J}CT zp3-RMDPP2v?=p%Bk{(~8>4*$z?>vtmaIbLZc%fQFa=lUzO3qxeZ zq=w0rjRX_8!GtxD8qOv0<3cAw1Ij!Hnq4N213v#z8AhadL<~}+XEt+e!N3skSEczq zSdrN(9A`QM6Kv;Rg4i`5pUwmw`Bo&EBssdGSZ>*)q7=ZK&c~;KxYWmELnuXEQ#@lQ zhzui5udH0m&A>L!X0R$uhFAI4U@|7mo9u-*6mDXAGIa4=_w?;w;cV+B5`{K`E`Y}! zw>Ec`1r)qiU+B4YPCXF_lDS7Pu`st9r}Aii%x@R=RVv9sx2$RFjks;^VzTG3E&w&~ z^u$ykFN*_&$?Ns5Q)p*D$3Cg-xorG-Xy{r=wad;&@nRHWh1YgnV8QI>p4+P}$qetO zdiW9Tnh~Dsw*06}-mPhrP<@;j^$rd^KZhEkJ}-_qHqoMp2>cKn+4`avmC zH=Y16(0Y&+@h0WAq$BYa8Dp8{FU%l83A*L;QSSE%)@U=E30d3Soh~JRkJK5v3aFOY zfIXOWa&`EmU*KSuO;wv?3MD(mE1{|d@m)NZsSHu&cII~}2NoHr>-`3l4GP&$WW%2)jGj$GLr`yGi?aG-Z< zv0N>iQmwkKYy+{DW>stJ^7<+7Nw+GPyLr4jH`qh_jSYgf^W8O0eXe_wcCZsaf8CO8 zWJ-NH2puhb#6NK|J!pvfFKt~t^|sEfWsgVx8auo0AOusWF2UB@WHHMrz*G>rZN7WB zm~G-657HF8#|C*(8%Q<;B`)n?5y1BE9KkIoLXoLw?)%f`{@T1=CkEagxw79{To$q= zievJUA_pAE+-uzNwQ9LFNlAkdNnEZ7d6l^$O|?U*cp>~6zDG7T9x*eVt14SjrE>#=-(8GfFgAiNaEm!+w2_;vB{i(6*)ZN&H zyNh*4Cq@~!dS-PTk|9e8wfOkY=H45s#z4`orq6;+cn6BO_^`xvivWJ49gda*iL{Lr znj}$^<54XF_-GCiSx!FMV=!9o*|j%KNwheI944<$uuN`sf6#iO{ZfF~G{U62sND7I zL8h>)$aPdd^~_bn3!|Te6DCU+f5@X}}(*ZAr zEm+=mAg>36sZ0ufE*wrw5Q-IX)fd!z3J(1{7fQP`eeGnlLKbMhj!R=aC)<@WZFd9< ztH;#b?!M<~A>(RrgD>o5@qfC-F@}|(k~YELG3pA#i`r4rIKDB?HD=L^!~;t=Z#Ep{ z4$?fHP1@n=myw3=a}rOzFhCfdB@$`-!Vycovo8P{20NHNGU~!I$1{;tbkl3W?$1A{ zZrxUuNjyMXpaI6~wkO#Fw%=Cg{p1Ex%UeC}PC7}aHCJ#K>7KN!zjxZ>jQ_bM zr4>QUUPbP}$P!+d{x&_l_OdkqNiw})EtfO1n}r9|woPPP-pm>-PZ zuXdk~<|1`HNRUp*$#dHqtm*Pin0&&J4}>cB7;oC>8jMg)!h#Pzu2w|l>HgEikp~9{PnhVc1VJ-u~NHZ-Kk_>@=pBVRA_AH z8mDm!nI&m*Qxyot4|)5hP&A`1n46W8PSoZ2WDB@<>io%f|BR}@WD3Tfq0qZ7$$(7F z#Ipox*Lt59!c3-Vo0k#l9~)-T_}K2G8Brld(QlJ#s<6>}O33runAk(5O5CLwJdZ5lLk)Ahy*gd z7UJcmQqH`0U4LO@d*^1EZ=HVRnC9AP5vfsXF4(an%7euxXME!88IgMq>0Y-)3|ZN7 z@#6bK4;SYhEkjQSiW=!E(b=c2Tl{im)HmP2<814HO)u(@p9k&3bvI+j)@Oklykp7fcs9`z5CxaKxfu;9kiUyDg9_y|0DR{7rM2B*(RfTrY2XX zXpOR;ay@|m>XUN!T{@A*bNCf(nT}bgu2hL-c=*q>w|F^W&v_Fj5CLHaTJ7%qP%p%| z_JIZsAyK!#>!&otjgK_&gF$B_(o%K=f*{34%!TU4B}PgigR7I**A=7D+K&>N*`b~2 z$kTBHtp#c8U6$_wiv%z&@GTBoHfzznzp)~wsfmi$?#g*Zm|_66&<_T48C~Z61tep> zxmufrZ+=%A#s&F=uQ|c`M+ISnJ99M8vwDpgD^rjG4pk`ZgvFMzM}UL^i8c6LNF`RAX+Jv5$7OUWDfSx6b>A`J9?Akb z3=OsJNpXzp_l^^WaXgh!)fz;zp(<%&ev0P_fx8X_JaHVUqsh`|#(LPg(|C+0bt^gM zT%T)tRAfPbHbMG^^4cXXE$K#-<5BsRJ$92C{ z+mAK}kQ?T}V_p2IL(()&)vqRS|f zGi4%o8q*8_4q%C}SvzAFzVy36efUkDq=FgswH3=Mv)1ZiSM<#I)_6`*rG(~TRHFZ_ z%!D>y>J48@Jpf7nJ!Cb;OGUaG*6@8g!tgGeQfj(>Q&3cJr8;dh>H zi)d{99KqS%f0>t}jsYi%EcG(p=+!F9=4G~tMjDTG903hu(uh4paJllZS5~ps+CVBb zZQ^4(M3$U7Txi}hgFS(h8#IM+MO{%5-I=I-%ySF+6FBA)*Bp}ZGF#CP_!>mBPH&L7 zmy*hu-~%InbS<~T+)%=4500ezKILHcyaz_np@b!iyLC>|jmN$F{*{81Y>P_u@vKFW zcvx}KvRc{*7E2{K8Dc7zZTOtK%&)Fdx-}cS99$~ylIijj5>W*#?4vDHkP1&I0r zpF&_esN=y-r`T;sZG0Luo{L$v${2U7>Lw51cBoD&toMV1$<5S)YDYNK`KJvnMf zL@(oPtI}#4KjG8!s3#4B{i@&r!i8#?R<`TTwVYhrEv>v%nzxn1>SsloU>7qX$@DQw zYL6?=L7zBoZPR=M@t65aQA;(?`BEx;tn*8iTC=UP8<6|Mg3qjHho%AC^4!Rgz4j#% zUaa3#U%c;-o;-UL9%-=Qc(Y*bP6bcjgbQ+RuyIgBY6fSusBZhb-cDqH<|AzX4T?SC zH;{dSq0||4*+aJbhOlDl;TW^xYD1^sc-l$_ZTXy{kcU~={aON+H>2U(ON+0tBE+f0 z?b+1Jr}YPK1L{(RUWewSnp!20Lsq49(Un>HNe#w+!pnfo9T(4g*CL9QJ7t?WSxHnr z{w2b`01$gC)9QUG>f-E;W@j_nsa@Db4iU39lu75vC|P@q{FBw_y!eyqyhqMY+lj`3 z$uf8?jOhhfPqHpG!JtgfGxutk5m;hA`+&lCTO!%oAK+v2!-5lG)4Bl%&JNhx ztDx5wBaiz1t@?O$7yU31f5_I6TyXl^M%Z}J3zqh?iju<@w`Lv5;!0jw7ZoX3w~suS0L3O{ zAG-R=zN0~QoHitub>WJA~ktTgqiY_QQ!xrZmxtTS4hrV>d+(AZIzb<{de+ zlWK+j({0lN=WqkM?u|vrN~(jc*$Jn>%m5*To?|Fe`yUsl5(Yo>FB-3$;6t_|2O`ds zdC`BLC_^a^yAc0uXCk>{gjp@sUzsg0hXeg643Kr^jDWL}H5%>T#HJ zhReUC(Zd0qhFBu-fX@@>w9w`y9v^gRnDeF3+bqXozrcsT=^WpOG7hj{&&#UfyjR!_ z)h#QjzhP3^bGq0EUFS3$m{o>VUyYPw$<}3Uz@vp)&Z+Ikl_x4?!?B>Ga<)x`T5Eg0!tFrUY4-HEu@FfZ{jp)@Hd zG03;kXUg(^P|vKCSV#t{ddTp!2`sJ(Dp<>%#5{i~@cJ`og-OPDuc ziEo)Cl?an-=ar4US3zh&aeqn=RwL&=LO{f4!oVvD$*Oj(v1<=S*CP+mk-xWG`~ z#ZQ_J;P_TEdL;CQ>vhv^pO1-$9e|`n-J}^{=o)h{@>FljFH?i!2_5Yagfrrvgn3YI zmn8ZWPXCnbk9eH0Y0W$bf$C_3GzR>Pi`Stumi@lfHZEL`STYJn4OW2yin&)uIk@E! z#IXhkGwlB3xsQ1vO**GbVeO56-HDic%`!h~y!=uebW^ss`c55iqdI5qcXHz%+Tdli z_1ElfS8%3dy1Es_9T3!ZCj3@^jMzb4y<@fPK_aWmbBCIA1Ij)T6~+!k$j&f3T395U={(8Y$|5@4G|rerN=IKM19S<1T`HBbf_FX^lj@TwT!B^^VV1doe~E=zVzIf z)&UiV4)l)cFMRgWzW^mBJGv+RXULgsOJ8Pt(JSta8sfA*FjHtiOQrun*;!4Jk`JBi z5Q#-6O&N)i*SetsJKW0A2g6@|(nJ*zh4B@;x5S#n`#gmQ#4m@;gE$YiZWEQoz?N!1 zy$Cj24mmoH{}MUwt>~H?pS>lTkNS-i*+w^TCD!H};FD)37HV*poGDB$ zKV;-^;zh6E_`Kp`nL*my6{t_9;d(($c>176sx~NB$FwPz!^^GUqFWko&AyjDl8-~9 zg^!~Db6i~&Ybho*K=05mzT^Wr6*krZf%oh| z+^Wl|@TWuDrz`YiZao^oux3g=Y&lE?&D@%G{M^rfC6Ci_)-OX{4}H(En=Lw3NGZEl zB`TwS^RD_#Q&*Z?C zvDqcM@QyNjQ7+%qZm)X+corLEsZHRhJ@pl#`A-n|7Sm8)h^l{xx2U?;@K{F~mUXxB z;SP}1ikkxJtX*f_>u ztD?}}cfdXhkc~*AG>9n&$t;Zb)BuvwusYoaL8T7*tBF=!OM)`#-&siWY86CdB7p)H z$}6I(kR^PZOiwA~CV{DmPCPN{bqbr+vNL*8WQq1u18EX5&H&)^O~)Gzk~S6N zc-7@#d89U8A=4(mniGCU1A;iLcyiip33S?=DZtMFIF^b*V=%KOOm2hP@Vwp^e`HNA zytOg|$pR{9nY(Lf`xniY+hz*UTIBXS6kRbMRq6C!02nBH=2tg><5Y(Um*aA?#)|O` zK%JwQ`=>^56c}HW8;?(_Frdk&cZaG9MRqWJA_YI#(9`LoHmGzUTQX;%_lIr?)fjAV z3`Jj)eLn~G7fZJJn9rwv;yo|VEmin)H84RbW91ZDv{R1$lWM+^ub3dnKT+kV-!CYJ zNiI6(%&K?T29%pjyISNMmV072Q#vQw<3tQkDzK*ogO%`g199H(~OSwGs}Mnc5ZOyt%2 zlutCoJa_B89Geh?NcljJFAORkJ+S!(OPe3;sDtGylwyp@ zH`J&y7_cpzcJH|X*uF-^^Kq3sx+-{f@_1?9u1A*P)jYMOW1wGZ@&@LgbhY3f*6;5X z&8v5kd?6pv@;PHEvyVHizKb{=Oxo$<*`$eslWE3KU>wD6uG&FREs^-iRX>zjelMxN zgz@ZZGC{OYJBOMAK56+_*t!9BX1FS6i}k1^Ip67cl@c8K;OW$6D(`Z`hhHdq5)FYAbs*h=@WBQ#usuIZ zSoU#3;<4e;(eIr4;-y{@_OX>+L6iyuK53I4Qg%=J0h8-P5#S*T-S6adJfcAyBDJ*F zEO}C=7mJ#*o!LT9frAwu=u+v@bl_9pyo)8^9>O`#Na1mUa2sppy|dRWvRw-jkVaZ; zis76^^paT?Y(zn^aVm4T8Mh6-NPncfRDCa=h``X032g4Z(}i=jV*Ietxdj5OH?N_6 z-cRZNthLlZqW@DiXivwn=ZXD%COcKRUyPwbe6AoX$OZj@)7RB0=x?>1nCg zUP|Ebz)32VpiDcEKHkU$@g^jD(4hgLcQ_l4>#tC2I@n03Xng^4&BHkCl)*%gF^=KN z&sU*KesRUm^FkSitqcvUUk&*)EB>3LN+)(Qbs33@ zc7#`-=1vA=#tn2{_&M=w+;&MXa~Q$^QDq85XuFkOzP4gB)Tr+#UhjFp!)kEcjia=?tw_q{;(+!VM5N z8KzF4PMCAZCn>?VG+rWum`SD%j zQUiGIT;no|lAwKajhHqxc2n)+NBH4OaiaiZ1uAes^j>^C5|)q<*jcz_C_a-|@-$%N z%ukM6s5|SHIakdd_Iy(7zn>K9(d1Xu@U}DmZ%%Qj&;+0%!GmXVVOx>=*@(&&2wYc2 zwSfKKnA(#oTdGw;Sf4E`-Ojar?z_tH7n=G>)SO
!Keg&^UebT}S{)K9$yt+`a>!`w`%Mx+v>PLGvcXUDYmPvGWW7ol@BVAul_P~$WB5P^rqx&likn-me$l>RSC@elsQysLAdjb+Dv`Uk53#VAqd=fu$kFxPjrP%?+4oD|TWbl>TPGmE=WMriTy zK96TEB^%&gh5B5T()<^;?&|Bc6_tL}EI%+_gBu9u2e|cfAjjyhHCW^s`2OQN;Vhw# z{`_~UUBqW4g)!2db^9Fx=3Zzrf4DLPq@i@$diCN39B>)O8U>JKYR z6YH?w{8V#I z<-AGrHm~qw##Z{%wB5=ROZdS-&&IT$iT6F|^05Ba#`6nKl@1eyWg%xIZcKSnZVBYP zD7^TV-$ywZ`bf#6+tT=a)W{oqwuCNNWjG2Dag>Dho08nbjvc!zIGGCD?tECYl*y$7qRPeH@1wRywiHUjzqoHwVMi}LwCRPQvD znCs!G^&d?>A8G8>2kxxkk~(&2ri?>7_0a0?Cc9@9INOpqpUD*TtA^4m;waC3e^#a* zHmU9J;AC7Bvw<5;x^hbAOQNH0o!29&N(OLqoK;I6oiv3zCj{L-Aa@-!ai2auVg8_l z#!l&trLaNTL$P;|*HSEh?k^`cUP_ka2WP@u|tulejk`N?4 zzw12@ahs*xmt%{?zeNQ3Q;dy|cZI|jJ^K+tJ9+D3-NJ+cCBMQGzZt9aneU_b1iIpl zhdy0;>0NzYZd;06G)c$xf#%$*(!w!)weMoiRop+@^oN_f^`+aWseMqL-}06{e!oEM zB91kxM}Im9%(VAu;7kpUe)ZE~VzdT|ycEU$x_ZD7r;=uR^k-BEi&A@b?N+~QJ-7Z) zJt2LVqrT<+bHk-#tpWvJ?IccS+S4}mbHtj0cPZ>kz$~}-eV_v8I~zD!&LbK2YZ+!wG_{yQS|VPl^vjom6YmL-|3rV)>d ze%VboZSgk1GWL&`yiVX=yd?gm!m8)o8F&Gx&(Zxgct71=Hg(IQ8+!}S@hCs|N&WbM z&STojJB&I6Zwmmom+Rr$l+zq5)6P2pa!3)w?3d4Wf4`@+ERa#SGUWW{^pNdP@go`g z$L?b{vg2b$!GwV;Un58w5!gM+wc&QT=pzOw`URBLZxmri7m(i~DadjadP8F=(S;+m z5uB`=_g8+(?m_mLdz60C9M!yMBWQ`U7-q}Tg?)v!cQpNjY^MABWv^n@3TQC){<0*p z^860h=_tCTgJ>}q?T6jH?b@fB^(xn*ZM*CkXjgwUQpo)IqB!E&1kaY#g*pC{Fp0+s z10YN;@!J!$iy;H74?wKb%!g$MIgy>=R*E<3Cjh#kKzt9|s8TW3&>82mpu8k>v4(jK z)i|-vAtl0(xEdQ)QpzBl(PlcEGJG^%C50Wa8 zmZ4xpXahumRGc*#z_T*sxqCn~=%a}4($Hf;2S%r!IinYiuV5>wVK1F4?f7eX_D56r zmTN@GS9!?D6Y~eF&(iL6q4~+(T!H{}UiiB)sJ0MHv*0`5&IfGdN|k~zdko42r{58h z+EUjmkmoH!s$WSQnNU{CoUFqrLj;@6&AET@;~}V6zPsU^^q*^TnW_EwN|N29c@Rz9 zI7AJ0<*n_Cu^vFg*NYdJ&E8C=Y}w3y>zwXjUoI*4cT5S6Easht3(@o>`Ben~isGR@uxt+^B5j zGlw_{Jw~h1u3Yjq!iCo?#aIHr92LwZ?VSRU;5Hwntvgq9qb5$9xSym@l4_-RbuX4q z2gJVch!7G*_IwRQKU}*pq6uxQxs~lwG~8miHUH2p=+!l%d;#}$BIvO_+SN$T2sLDX z22sms*FK6JI-o%;b-kc|zPeZ0{1wu3h+-~mBF!blp&cDVSgkk`t~HexL4 zh=(iz#BM+A7bC2Sy+*$+O;>T7gs_C`Zpt^lY7W8JL)1>rqHm~)8zoR;_VNPi913K^ z&)4RK#{)DPrBp&tB8T2r%u^GI9ODtIuuD>(UN0Z&tXa7oc=EUbg;P(2vT42QK1PRb z6Dsl28uWC{Q}oT5A&yh^+VdIjS z&$PXybs>Sfg#D04>+IiZqKTmudz==?#af{~J?}mtyVkN>?fue!C|420^9N`Szs-f+ zBZ@Zj11e_!eU4Dzr0Tp|QgZROv}5dv0tTZEPUE(ghTjt_cIXc~rk-)%a_tN-)Dqax zfHP@d!!Hjh`TAi}?|b^BfSC-dZ=I zaA5g9*G}WwNAZ%SoPLh=g`+eQ%3?ri zAN@?UDfrt?zzRBLd{=Wg*sXyi&2_S~!_J5;*c+l-XjI>Ze zUb`ftE;z$m4@`P0!>@H<0Dth40!6ZBBwOf23#{Rpn%I=bwNSDN(MEHa{QQ(gHk{<$ zU~X_zaei`3dDz~VFn$P?EN!WIvp-<9<_JZ&51RRQjefP3{hs*rz0<+lBnz|>zRSa#p?$Zt!J4b6)W4oq z-ACeFAWN%u%_n~OvE*^#M-ms?IJQbSxYiQ_T^VWjI66qQ@DkFkN;m$DFlsiqt{e%8 zj|W*<_sC!C=#x|SQ{hO${nN&ogpU=qqW@DS=r89Q@=&0{BBJ~5f9Sn>Z<{qR9w?hj zoD@ixN%|))Sch>gmZ4{(|J{J`wYIg^1KgXmY>my^v3+ zM)`jO0LaODz>MovNtPW4si;#pA!M2qX8b)$ds;O}J_M^t+`NQX+Lac(r;9|C$H9d* z&vFcVG|MdVr&KaniYdEE+mOAxK2#`Xvqciu?4!lHlpyn;kh&LNYAm(D292u0F)m34 zII+S6EqN^Txy^FzW?UZTE+*O3>Zu^Y&C>E;tP%S1;q=q~p9~i6u39_j`S#^^jD3dq zOJBwAd{#j}S?rF|Rea+pPfDC2aK|i@$u{TTVS6X@BCbllt1Nr)2NI0DPJZOftz&_W zCje!0k)%V-_joa27MT2wa+@#U;UaagqWyA|4xLx=c|^w`iu1Y8%tY3KBw{g*i%$h z0f0+He|~2sKjaUR6#V?PE&Hza@pUJkW5btOd7PX~qtSK=3X@%n zY|3?65L`*pOhObSN)&yDI@B2rU-G$7V9lnf`o)Oz-VlJxiTtkB0Mogx+AZAd&Gxh) zbo9kn-+apO2r|L^zBDf%^T_Uhd18kwottc)22DapGVJlP+b~dAiwb)G*00WbqewSoJiN6ADV4+)T;@{{vIfw&wI zoE0&&a4F>jz{2TY-pN5p&7rC46j(AO6b!vo0g6uLIViYvl}VNEIdyOBzvFbiX*Rk#%nBTWBO|q zwc+ZkL!e;kWL)tP{;oab(%0;}DMqq2ff_YtIS^56Lj2a3M9~7*fUg$rtZ0xe$&{vg z-Bh#WAXpd#(k0kA`kdpxYqL==BjBK8ZENS&WrRRon~6AcY)|Zb0_0YXI=rC-Z+7m zR}v*mjXuxDz?p$;RAGC!T4U8^$JI*ilJY_}8ojJ1wh*wMS)jiM9?O!%OmmOfNk)5IGhD z-73__{s?eOz<98;j8UN5gP|wssW$hsRE;@%>yoCV&Wc1SZo&YW0}tbNi;QvIkk6Jg zb-XrAKSxwaQy&0h5g@1_q2%=ak&8asK5O>MU|ZN9CP-q1;4jtW2gDO{gZknie}wCf z%UMV4>9hyA=T_8WUtW4Knl1P;!?EJOSK|o*)6O(%iCn+z+X6#(X1?j%QSq-D%_kmrh`VxWsRleJoI~Gkcqp2`q+L83(;st9K#MdwDZLR4y zC%J7vCAR&ZCOX-8uTkg**MSqAbKq0~#w&oD8y9u2FrSnC-QsWM1J(PKb`iP_la^7h zOh|@*=Dfha!aK@5moC@a^F{S3)4S{vFpusrWpTbIUE~3kX?+`h-bTDi9lpc& zX{_zw#Y*a_*b4vLFVWkNv_x5V=H+RSd<}yyvUu;hiy)*4)7BL;h`^2KFWym4mThYv zOKj$mZq`JcEz@2e>8TH@$v~iJAXPtzo&BSU?@rvlXA2(7_(ace>_1J6Yd7?Aeqh*MdESe6*O{~TO+ zqf+YDR>8<#(o>kI7Ho*#Wnc*zz{D?yda}EZeJ4m-2S|`p-gs!VsJI` zt|e#61Mbc_xyR&x|E%6!yAU4l2D_7l+c=ks0<=S_npXuk2~^? zHZ)rO3auT~N$7?QLt(2GZ@KxysGLcKnbl2RuV~RyX*?@ikQ6t*FW(8OYQ>#wjoRGt zw4p0OD#9!H*fbej?8yah_S)laa~X|`Q}A1d+S_%fqF>3&wE17(huSJUtsA*}IqKOd zF*zXtzjJ}J1L|gw#sbb4x$^cB>)Vjo`Q)}Jd^z8@|DvznK(tA)aMV}V->d@@e>E%0 zmwChzWumr^&aJ=KjyZ94X3wS3NQAo`m~XG10Wg-o;#{8Wem_~2-+(A)-&uo=^-%nz41{&Wz z)-Kam>C<_6U8RZ51EZef?S$QaI5zDM%^~Ku%**Y#K~>YQHb#!sNa$oWji{|Dn)Gdx z61B)&W+g<>L)%qD;{U2YbFC7#TFbxiEEJ1>QkjfuPhvaAh*v4gO|A9D{dq4k2Ux(`LT#4ehdVl2q7N7ZdTQxG`t1rtoniT~Oms$)_8+|CE z2msG#WD1|O;eT7f9hBiSY;*Cn2eO{i3l!nXqD4YzOHB3rt{*xWZ$79I(ECR{`u+3& z<*X3zRXrH7>WLS4P;3^SYFJ8pZLJAT_2Yf&{uGE6%iB$RYLc)CIYi-aJuHn+z9;%1 zxVV7#WJhUX)F+OV(64cMJ{d^>J`=8(H9K5^e#V#d+UW<$vYzeKmaKPHxc%t0DfdCi zTp95b%QmT{4aq^J0w#di$8fuNzXFdFCD>pBg7A~m!zW_x^C_Tn?1Du zNtIOB@VKg4syuixq`RXyfhAw8Q4X+x&?HiVXoa?>iptvgbqKDajH6PL;qka^c6OD9 z`H#_VpP+)i)UwnHqLdA$H@$_ZZXtyL<}z96q9PVUj`cGmbl`p+dxf5yit4a9E$yBl z#n7feXJqAEr4nSZ+YUs6u9^H}WpMZf(2ci0o6^n=+}%twUlkcOAa~^xOineh%scoZ zLxPCd?*Qp(sd{0X<8kfbF_hfTDxUhaL*iLE*qn~RDc>`x=hG`C#8(Q>s&*);mfKcO zA1{!v(Bk5dQ5-3kLJ>N2Rqp+%NVKgOWODfc6-aJgWz=lusOza1jIu;m9zvxs7MNBj z#UKUGy+Alil}8R$&G}sO8Gd$_ypV}cC``#@cOu0~&k3{tP!O#Aqp^?cY_ zcK7;u|kZ-RXOxfN0&;9W^)kI|B{oAPiPCrBtMfpa_K z{~y@3@|@w`m~Tj3hCvtE;9(Q@t5W8vlguFOr?Y}%22epjnreDIVoLP%jZUKTF#k(e zqfzC{k^$puAQ7Q5Yb~bU6>V=f;s6YojA97fs~7lG;Z;^t)GyQXlpvWn_O+Pv=8|?} zP}hZ|EuXy!>-WG% zk9_s9JoJAxUo%c^8yM%ZZW8qj7&gm!a%P`zo%(f-+bna(*BYL2YAYtyR%;U-R^zQC zfxn-b`9)ke^OvL!G)4l)SI}33c)vO*u6{sA!!zA za-y^n6E90FH*~4`5-R5S*T=z#CDF+v@avkp8jy>bV0}SA;&QPq{UcvB*X@o?DrZLY zm=>+L7%!v4IO8bk{zuBd^SiOOg7a{qv(U5H5*Z=*SP&1Dg?1&3N87i-hp_y@=&gvzz< zGk&S7#+c*s$`FOzEJ*9*0TGH7J*C^Ul8Sz6WHoxE@sn1$`X>T#-WBQQwZQ$G(o;$n zs3yCVb&ceQ^t-=jGlHJ|$FyIZG+_-ZQ4B2w(xoNv?V>ym_fL5rF9_S!Q}9 zE6Ri#Y+BCFN^SO6hOZc!f{uQaRx-Lp68rx+?nb8(57iN37w%{4oln+>Yz z(8%)G;V@XIg}dgK61t6>&x{vH40f0jC|~XcI<6$Fb8vAptXr3_g6lp8NgNGH*-Kd$ z@E7bok))uwavG0Il!XHqhKroTf3EaxPmU=RjPj|(8;s6SRe*3lxzS&?CR_bEw;tfG zo&43eL(+yAoua2(oJh2fMb-#q3~OR`(S1?x_1{_9lj}(0K)Oi}Lu^^?##m;m%be!X z0i64!?1>PGkW9;v1P9m*^nXkuV*9l;PJ3YwPeniA0~SwP^(+?D^>KR@llgS#*Q_S) z=GVpcX#TwNiBs|M$)n#9{{JZ$892uU!#br^qbFu>&~NqG{OlNPUATL{eR5gs?^ybU zyVYOM-I95A8@58h8@71|y;4{Hx5Iw;`Zx}m(}zx8RSEJXOz!=DnWfzl-qfGs9uWl%D+=V<%i6ae>>H+q1c2hc zJ7w`Vy#KJ?n+NJ$aeV3OJM4ZVzvFTfiu%mRVBWg=ab_o}UH2`6V<2vRshx%2ONAUy z?ve0WGZ9W{P5az-lxr3Sc`%2U9F=6L`RC_@3k2>hIiHO#xK6Au{+_~=YvISW#0M(u zo_ucm>TaopsRV7H&xZcCXXuE2!RNQZixC~l5YvCy6Ey$gm!EgaMME>;XwLUkrZ@+|YDT%{`I`9_@=3R^)>2e@jdCO}HXh0rz zDnw}ylsdG4l3U~Bckkc(;ExPBf3NYI?)y&%J2Sxd{hQd(%2aBu zWttse;}NzScm(Gwb>`W(rR*bo<$}W|S<0VNhni!-goMezdZ432(+6*N2j|w0zJY=k zB>^~dz6;#&8xZ>m=4No*=~bSZOyCI#2H$8kDrg@42It;PL#%}w7m*}MDzOPk4Pt5c zz;=QY!(0OwE+&M?uAxxd%#!QMFz2XE)oD`=dvZ8{fA%XCONll39A;FB5;RYFOX~ zT<~ZZ4;ri&%w-Ga`V_I-#x!6u+GA;{fbi|U)EEM`;c4@ZEYE;tD$FW!L9zu>4S@UZ z$27e`8is~Qv8R$ABK+tAd-ow}2|eSze#uk!+Hvh`{POkS%)N`*Bw%MfkCz0fUg!!j z<@&JY{LhsQV{k=w@GWN)`hd0f+7Ws)wRvVwX|n$S1i1E7e%%Ua#>iEqf!)9AuFrnL zYZlH4jY^Ug4r^g~CDf_(+Mn3|8$^nj5F0R1px2z2hp%(NUTMpQB{5WF_(tggicH!}OVfU&I*=!Nj_9nve^G;{>$>KMXSV z25-=SB5ALxbU9k;Z+BnDCT&8)5~)YKUo-SPX8-!bnp5#9xaX_)7eK-x3VyO+eH!9m zf+Su8iP42vu|I^0p}64=+>4?9Z|m_F)p)#T z7H%~`%0J~)V<8#zGrbiC7UmD(cUh_EQkI3qrAG0dzDmXxfap{1PSWcp0Z3>}Ht8P` zH@i8iVm*^saDpdNMwPK4VIAJCg85hwgE%HVr*n= zm098T)`-B!l`)%{$1!Ab zu)H!k_iHV$x~L}w-FwLkBbD_!U$0>B&Qaao8AD?y*JgwW==STuB%cciRvr6q3&o)- zB)#C%-g0MMj>z}!B;CTI9Vqv5KiFBrRT{BTRH6Sf@nON|H&Z#IK8~JhNxXQ$*N{6e zK7&9It?&odYL&@qm-^M-0P31%>Y|bt4(l&}ecF+(Y?9K41`V9x`+Rj_5;*`3PO9Z# z^ednOIEWSE9q2O%Aoa8=pYJmb`|Y}bAulh}wwgp$Yw*<^Fv+P!^P`hsT#a-&^|wI9 zKd+{US#xw?AD3IPCu_pZoKqg1mAL24dnJ-9c63d;^2xUZ_@TGOe&|IFNo-s;!epzr zB!lAS=buW|_&lHzI?QYSB2O%I?VCv)6py5qi zje+ZvXE$?3?(0>$?>*N$l5YBAYe;-O5b}XiD0RZ z;oC1P?w6?@Jbc#)YKc8D88j{ zcPr}IAYDAsAuUlhR#=w}@*BE-mjrw+LiBw%YLAh+)fM`J&lpC?;8CZ=fQO4$tYUW0 zTm4{m7sYZQ=8rHRxd^6$u0K>BL^=ty@!=m@E|B@LG=pyteOanDj^120a~_{3le>N< zm6MP9KwN$fb=4;FOr(-#nqh}>0NDZ2^K~J_AHzW}XGkGz$5llWo?frwa)9HI$zShD zg5Kur{+$boaCqi^m-q=vxK2T^b{Dm4HH~4J?#`18OEi``)ho+^ePH;YR`6S}u-3$b zxX$o%*`^^Pn2-p?CpO2jNmp%M749CI{3oOPiC^1sobm3X8sMbRLnEw^2Y$! zCk}lWiNF%TVmm=p(}s^VT#BSKvY{NFPo>=Rmz-f3DmJ^1VSG7+-XGg@rUDyVZ*tsO z_?+wQqav#5_ffv=0z%6Nlw$Yy*8-*OyrT2-_sv1|y>~%1YYanfB z213Apy%UD31(fZR8HZ<(6fu9KNYM)u(@zTmGVv`G4)hU<_;0HY5&_#EC=tv&y z;2~X2d+gB4UbLU*cXEugX}U7#a+wqo_lbSMXeXHIUJRd~-cCqBaZHe=v^GT4G9>;z zVb!3{fwqD*(=C}l{#0^S&@|JOUZ@O$G^PS=;HuNEYVWYIjB?i1*TbU>nIL@3ZBJE!KkifW`IE< z2i~+gk9%WG+1W5KgYJI5&#y5i>rF+dg}|0@cPB;|aZLL43b<~7AFd>r^vl7zM)L-` z@Q~~~+;6H#fwV_91qky4D3PGA#i`p03Q+4-Ju?O=PiHVQ;BLi`XLq?}MH~6*r%BCf zi?yv@EejqRN8Ggldhv@8bf$N<3SH?&`u!+}-gb=Z)>&023it?c>SW;)r|eg3`?kMy zJ=f>GY+#{3wwuD`TZl|e@4iuJXP)+3O1fXvMNuHUqyQmHRcbN@Oxdm`M0SyBncgqI z?@I-F6xylb^8J-9W-Yy`qUT65?a(g7!L7%%wc?OTL#LEf6S@Rc`06o%x-*OcdGa!y8o zkTLA8QIG}oWj6V95YrX|&ivQq;Vq3OlWb0-t0er6jE#&T7o+6-WhizWTqzln-J=k7 zN8ggvdWV{uB7@6naH8zBh-IIUJ^N)5yGc10av_q)NPJyjmR>fgP$>j7LQImvP-@Pr zoDmIY@v_+holtxNnvwyzyzV&ebz%I_TNanl@2ks-S4X*cJTSIl9FxC4j=?E_3LH3W zaT8)z%0(j~C(T%)CNDFkhiN5}q*PN+7f^;C?ZNCv+2zmuqfuLH=CDd) zru6N%D(hEZriG%qz}M`0o47@K*hfpD(jXY?pjbi=q`sy&9`5dg-)@j??(JP1EX$zu zO0K8Ozpi{qbnvTG0l4H}l!*LjaXz7+d*pEsdhSb*ci#g?M{i-1VSUM2D}WMF7TBla zU5_DOuV_%9P(aogXM<|d;t|%`PIx<{j-e7O`{B0E*JVGf%u-n8CHw#I4H^Je??ag0 zh`W`rulLy5D4A7h?`?Y^)B6L)_(^(}$0P4til0qQh!M2ZbAKJXx)%48{u@FV77$TMk+D&fdfQ8tLOW!W}0>1Fg zG%WNNIk~p;F=Feb1NDZA-;ir^DNbX$4>pFW{6xiGJtQxkZJ2*-{J~~&lD3)TK&kdO zYe%A?dxxL4t@GM)-Xxqjw`kON^e?S0;?XK)52rmTexIaT7#67GL;36)eN0Ry1OEIF z_|(QO<_p4~f4w*w%Zp0?sWu?Mwdw{V619>%mOb48bJ2rHsCZgKkQ*z%@!xzblHBN3 zxyi-exU9+FA9BTLPe>>|R~Zp(>u26x;PCBRCERa>YogyrA;dpl=U>xOor}SDQcq=C zWulPa;aJ=Ro2K>60>SP5lKUkQn&w`4-JtU}F?EloCtsk{Zwh_M0l_Vi@@*?i>M|C$vIqkdCQ_aT$Mv8z`#S=u+0E>gWFgs064V& z`T08|p4ns}DrzU9?r@ZyXDL_MgeqDoqUIl%O6FT=m%T2ns8uR}=sa;ivqUiIoBeNpH3UYrUs3B zW(P2(sJkAqD7Dg2*)w8SG|e}{x!OAv1vN}kI+QDdQd&jP0HZ7c4N3`lF!4r0u{;I< z?4gZTH6k;}{w8vIi;$^EFR|1%W>3Od+CU9oH4WIZ{V5X^Az6Mok?}0Gv(8u(LG=5i_9vLvoxbbN5x)eI-IT?fmM?+Um|%a|Cx0@}5 z{uX4|_S*Py+eA0~SB=1bm)D=x~|>_X`cvmD0{6`p)nx{)Y^; z;t_-#f6wd2f!UGX{ZMU#JZDmlLo%l+yT^=4hbLtt>q6q(_bM@a+^CqDDU`X;D}VRiz};!gfnFaUCPr_$crC zM&j}m2v*sZhH}cz{gBR-EU&pxm2#yp%<`7j+Xv@!2v64GZUVfqdf;g4BihN2JHfPT z3A5YEfZ@Au;}^UnLsK8;47)AINT)TWf!0)m{)iD9 z|0$cGD_15HZF@84Q$|ni+w(dY;*UFsUq1+v3i{?&9$}0k#y&%^?Kh8ZGo`Ljl*z@) zQU;??AA(!vSG>ic$^CZfZ7z)(haMM$Z|RB(iH)36iq=gWJ7z_T=M=PZO|V0pnI*c# z_i?pHr2EAsRRD_+F7NROnnlRI+i62p=_G==eU#0CTH&Z7dC&* z4{4nK&|QS%bpO#YZ)>;g`DQoR@f4qf_0;zIk8)90)g z(%uzh3Ai3wOmz$!u8W;&Nb(Ibmi@!3x(POf^8Avak2``mdv0^AC*grtTE${}jr2>* zsbnJQQTU{S>@YeDgQFCPOB+FowvF78@>WMC6nb!g4`?{!Qm`OG>-dd!UQ z%g61pCLphuUV{Wt=q(Um!rstVZBXtNV`(#xT`9O5AStQOs#=4vnpWUQ(a+BP$_+*? zaP#;mtFQ8Jvi#@u_fVWH&#$&QDWN z6evI5&XptX*1OjUerA@=&ROT!w?q^2>V=jgEx|Fl4&NQCMt32>t+x+_WsLtKAx`l3 zL8O7Pv0}Pgx+T(k%dzFLA28x5>u$(F1WGjg4$uZ`So%fH$-S%zYy)BbckbtgK~QPo z8hrw%aZbdv52_)4E_!f{g#D40?5hm9c?BDntjz6L1Y{Z(E%QvMV!>3%PbYIm zPOJd47ZCsZo$nTN-eo-;gec5vjO_yJfKRy=;F z)yRTiD`4V~gM$xeC(u7+y&e*J=4(pQ_|||C>)SFlk~ahNjodLIviHr59dZkqy8Rr~ z#kp=LXY4tdmt=LPH_v0!RtpLZlW#LypFiHau^B}JWqE4;_V&Xfas7~d9eQKYu@B0F zdYu!$l_k9;pD##GBvjnsnYPC;{fhNh6df8+n3P`*WF`AdXKS9Pj)P4lIq$Bed}yfL zYrGB4Ty;Y_9$6mI1;KqllK0V{?W{5Di`uVnhXrqLZhU3mQaw$u8GGqln!x8VdBQz2 zI8VffN%nOB8LmN75kqh zyElS76{rK&jdWYes#&j0YH9V1hLAte0vG`a)vbA6oOunsMwM@#8?z zS_79cbPn66S=|}nAYll@w{zwlbs`P-2Pm9qigg}kV1Tc~Wjg=gH zO<55?%1pslGzRs(2!KE)GR#bC)P~*OgSN5mfb1g2yHHaLVJn>UGYw%AJgca{F%q1NJKBBDq@{n;_N>IcpEf-z;0a%N`WPcbTc`H@QyfERxo zHzdGhH!r}Uq&{azWxd~Q^rY%_OFJQ zR@>dQtzRdoe;kXMAFJefB0*C%tBG(1yr-Q-gq|z-^%e8_xSZdO4r3ea8}QB^c}KRI zp-U~iTFk$+V4KpRl8fmkF%vR~%C>eflLG$}0%WMjaL>=1YYo+Qd##YWLXI6N*HFGP zU4;d~rUZBrhl5%WuV1%^p#Uo>Dr_F=w|fk72Z*|<$&li(pI)Dqek(RDUTR^C!^1eO zMMq24x@Jg!Uw?RQoYqRdB$M!O7gagc*^Wo@cts7a2YM=M>^EL2VlqvvE#(nvMsjUE z&tV;eCZF489iMGFQAMxM^^&hM!^H1G2luh=cTi4!U_X+89*r(Aj;8_#d!G{Pc%Z}z z4*wV5sVr!;f!3kOMLLuk^VWRLlW$@OminsMvFuCfuE^CCqg0qH_UO$nyj=&@m264p z-hQ7oZ1mHc2&o@F-(G`-jbR%Y?E<5SRW%%m0p4S*qGlk61mTd%NJgSM`8Y-` zKZ)nR3OeU;kj_PrS%8Kxyy;gw`1e>5`)lx(4O5DpGr|{vD|_|^Yo{|*ro@*}UJQEq z$4m9Y?fh7RLEKPz3?#Q7e>oM01 z?GVEM;&(!2z#ySzVfi~txsquO_?_3!9VO?sqSON_h4WT2?KabJM28!MFS16$Ph>5? zwq_C&qoH4;oPVD?mFer8K<;h?a|qG=QGoZ)cPfrpqQ}t!Nz3$uDjfiZ!~KAu4s!h5 z)2>wO)5;r|E#!grj9jU5wC2+%VNN~T{zp%m)u&1%Y&$KeO_8C4Lh+DEOA_?=0q$y` z*H2W#wjkTxYwhLpf2h@N0py|1q`HQATG&T3WwCq>k=|?6UgapK&=XokEtmhUIV2Ct zH~2i{c}-RwvHU>SE54C8vS=AU!jB@s0Jnh=S~)geno@CV^e z9WznCKI$v+XnQ`LyoFvDdgC7BB$GEq-Ogbo$#>59;x8d7OXbRqDvb_s_Qg(;s;s4G z56$Pb$a6$*da)Ml72cShEsr@P;Pi7$M$hNut9A8P;u2%dpyxi}@@@T1-$HtR`)$SB z+Bbg-u{ls7B{U8;r^};`+0qWg`Xhxn9Z~kxCuzAFL2Bp0hnQ7}JRq}^XcaQb_X|I^ zg_Hg+_FCCh0s>MZBIp>SYlH|$jFc7-0ef^K zsf0nP2nLvl`s3yO6Q1XKuJfGhI_GoWY&i-m&82^>ad+n0&TT`maSZbE9Se6ujk^*Q z|Czsi1dohmp=&)iqD*$|N2+Q3q_JF3fh035HObxZp}rv~0u04_faQ)k--A2r zqULPH_QkSH!toU$182iUh;vnParnpZJ3Y2wX~Cu90LZmt&0qsL(Fg zPEY)zyUpv|lm({uQLjgz@vo_1<@-!Gy%cb zlw`M{cTj$fz9CD?_(EZrdhF*Oi^$uhCa;pmsZt1TA-RAs6Mil;Ht&9>px*C2R;k$n zYNdo)q2i|+m_M#PF&ytX>4^=0b}$!AzqzrCBqu##*UyUU5qWVe%Wf_qdB6iDG2%a& zIuYP*vd{1lrn3ehcXjLU`tDAg(r)X0{D0vW!zE48Db0Vc*i)>vKmB0)^Mu>;%_{o* z(|_Lld|=!Hn3-5x`>a2Lz<9$>a-(>s)qOtrmr+>-bsT!PcZ20;wNFbKXlgjvs2-Be zF{fm4ZAaA*19bB%hzs0onk75LBB4kpaku5sY>9 ziLs*{zATir+#?5QwAJYvI8|YrYw;1WxfPPGV&C}o_@9+)gx{Y&v~C+;5o^$+3Qf%F zpZTCQVC!(%aR6)Ov>Q6GC2(3;zF<1Owb{WJop5fqC)%mtM?7Tqk8f(5*`z~XoS78I zJTuwokp!lwmq@dimh_vtt{+MFS zD)mF^;7t%fihATy2N(f)NdDhEQb~NuJdAqC+dwXWiGUYLT37QbKEIObh^+5$etuhn zmyofECR2*+L?VVTbQ>ijl#GSYcU*Vo}mF|y}Ua4-VmxTDO!k(?7f5SeY-j)vk z=f$)|U95a9(53uM%X<>kNCy#u4p@r6o2^j0+2IkExQf35B;Er+J4-F+yIWdKsHasE z$XChH1YII@#Ncg{3r=Im>_o}Ryq}>@7EUbJv?7cILU0uQYVR^t>{;@(fq^s7DipPorJz~kVx9Sc6K2s?}zYdj{?=_+g0DWwX z$KrnOn1qz}o`4$hL1$5I(Q$^awEmy|@#7|X;R%OBkpk6{vjUx6519F@^ z|9bfZeNl>#TN01T=~C=e`qz4o3gy#8oV)VyJVVDA^FBGj{zs03gzs7iB2+K{i44f= zT1UHu9IWIc5c5xBB<@^68Te+h1;(o* zz7>;BVuT9uZ|x-HcDmB-I?|1;bPfIP84;=uHB0JmB3@e!Q|rlE79X&QNqovCdP_(>Y>@`m@;#f=+5-O^<(Su$T9alcl63-8CuY z_|Hev^9X3@KI&>d?R!pnJNXATaiFh3^3!KdJUfl&@>Z^&AphH#{P}*qdvIi+Vn;Mq z^yf=`dfcl{@iNr#T`H%+=B4S@sE>%qbNp9D=&V+474u%nOLtxKNKHN8`&cGd`n7T@ z+|I3Z_uhK*7)>r`5#mc2zkXGxP44}$OkZf*L+Oc}*+PNB89Zim^wsPtQt@Gj}%MVS$ zctkkgd=Y6VsGyErJD&tp*BpRAvWALN(GZjUTIes?v+lP!Ay$kOCUv`7$;=(jmiU_RjEqz?jCC-&;?E@tFsEkp?DIxd+&!ZUiARF~ zQoX=n2V!G#c($tHZl0>l4mRd1MB?SoOj$ynad`nfztI%VS~n(rUWL;=n@8MgF%;3W zi~5yIp0FXYAQ)do(`bxx-0xO`k^R!2@Eck(j`(B_l<~iG47Wid6J8cWmvC2+u^S5eofeQ!D|cQl-zir&PM#@Qqa~nJ812$_7IYw-$zd2V+feF+Dx^>4uV3NX&o_7gBKIqxixQ?6m8~4qE{`xtu*blrfAXUe5 z_lr%)g7au9-3IQ4pg>wmbP*TYYQpba4p?M3d(JHFq@Wqg!VLzJm;>sKjby5icbFN4 zD(ai&P3I!s7Ck}Vy3Rl&x-gmX3J<7`{B=c5bMpmKymZOAX%a(}m6>h^PqMeaKYdGhUCwB-GwHn`+V)Pe?9Vb5ug z>az?kNX4i7xdmqogf(KUF{p=Xp-Ky(tv1#ln57$Q(k&Z{kO-# zGj=JBUP6+_THg;r_vzgt>qdO7flelItj|iEF`~b~eS*UiahaQ!#;+YO^pmrPCg5OS zXQRi=54{y^)oWuEFu3=Uv))7sQNy^s5&KvjgQh7<)ydf>Nf-$84>2NJ*D_s-vywonCpv-dgZRY4+J*!DT2y=W~I~aOMU_*B;D~xUdLqj{Bpqj8W zCM%xmNWYGnJTG{9fvgy3b`&H~w4iDLf$FZV%yKp61KC43L-B(D6;6I5j@g3+LPXS?dIhf~C2v^*e2Ivq3dB_Ceatg_vmT%T7F;aS0O0mr% z4wZSAA=|l3q7%#S+e<93Obc@AE}BH^u^+759v>;U@WHq{Tp49|A{}ZRG>^I^WY}`p zEq+7jjA$73YlyQknHQvX=4y}{= zPiJ&KE@kLFL*m-<#P{TW8_nSV$f9!7-ICfrogl(H|mTQZqP;^`P@k#qoxxMly|y$^&sGyo9x`? z;G3p?P%;$b!}~C#X=yJz=mLc1mnoLeCb`Zl!(ipD%dLy1y%DQQLzc;qOr*2mrHG6_ z`yFcWQs;vCwBSHFORKW0Cb{upqEBJS;XRniZF>jGH$#e|IJAfYX8bP35yhA?B_-G8 zYG%n7m!*61^XB1aPD`XT1?h_oXa_GNx>%Bl?vH$ZuzAnfS6HZ2TS=K8$UJL z8f%(EO4M&IkE=>!hDi1`rDGgNE@vl3*0XLk>4}svOie`}03neM^)dTJCN#J!GC8)a zFqyCXoqP8}30b?2HEw_`(OkWUeTpL>7sp0=eM;2Fm}Iu(El$oEH-eij4Uf#2iHA*) zIGQFnqRHEPkprsu0;rnhAFDQr zW!myLf1PCPG zXmwZ8NFVbolRf?$pIb&LjXS7QJyetpn!36F#15-oHp^*Ek-o{G*e3JhWN!xNr`$40 zwu@^}C-G#VP9+i*%j&=B**QRdfq5o=-l$i%B@Cf|cn8-jIM$NR%|9~zmy{a!7)#q`j= zg@ZHAjM#En75C==sSo5q$g`JADr}MwCTRV_ebf9PutIb4=WbS9hu~CUaU`!$r+uJk*Qk@Wq?!CcL2MD*R}*B2wG3^Y+IYXcIt!2>6y44G0=VTK1Z^} zE_rY1Sa!UysT2~yKLrSe&vuvf^t^81`YL_B@3;b)Px2do>PbA=_M@}*V4gU)5l?v zMNCeQA14bMtYcSOC9jc0 zj*ni%4+!xUX%QuoDg8#V{pG4P7Bhb(4Eg#L9DA=>>)X`m!4gweN`PPas2pOCh2dip z>{x1C>BBW0ZV>R;0en-vq>-X=~F3i7U?l7N4ZWVUMi{GC4d941dOir9r$y5fXWmkWg-T{Q&W#D zthE~Rgf_KX#EZq?(4GmrJ^j9x1~{y!QG;BA^dmgfWlqW{*|B2Ja&0)?KVW>wpvXFu zY00F!wG7Mcr{Po(6Nu44!rJ!K86Ad;Kk*&!j^fqk7x6G-hia=@TJTN0@((BmV*FgDSy{G9PFqA~l68I^-V~OaAArjcIVBuDraYWX^6)S#xOI7(xmq{vKiOOWUO(aR98^t$w5qDg z^I{?&M2V}e3^vZoHH(wz9t;Pzfx3hi@?BvW5LrD=hkO`m@^dhG(@t__dnA6>BR3kB z`)Nse%qrLr^3wJB0$1rZg_^{QlG}2W3CeBCQPta}ECsstG2&m&$m%#df&T@oR>b;n z`71Y5N$kE26cWLi=w;>{1c8vriyO)5_rEWTW9?C zczsZ?Pycd)xxHE+CjYY&am}XK;jlis$=|m;UvxBIyFgWOPGN5!KPm4%lEC{ZBY&v% z*ulzt9Df!abzx}y^MK1Xzlcoi_SxhDMb=dd9~EYM3e$hi`uzsVw36!_#eV$Cgx^+9 z@{}Twkg8s?$sYwxkLGGY8LH`>3y&-Pg30OMvqOn&;&#QCLB*&;O|2hpuR_lZ5;t^Z z0Ax^sjH|+@8_a1ouj(U_VsbLZL6EQf+D*P$sG#BFhmn9n3Hdx0C@fL0vx4$ws-v&m zaOq$`Ji+W(J#{s=>!pgW4>^+f%j)r#g;6#60H2a};N2sN`B?h*2kL*zOS(d!k_8i2 zy%t~}hE&Ix>`zD;ap1{*vDa(*e}Xq9>1P+BlHqh~N1o)%h3wz@+_m?pE=5v5YrwFL z>^GF28+Jt}X|w$ZNfhJ3@!vbwMdVrzz-C1G61;A?1_8uo?-)Oxz~oaePm$^~jL{~8 zXScrSG`8$51Y-h+ziu^MxKQ=le~=HhYahCR({hl+~@wJ<~t`V5v|`{}c>- z8g|}>nGKB&>o$46%h5EkwDDba<$|N~)!FXWlwq&}hOOD!>-}X6A%A%V_1l;0OE#+K1fB8G7JV)G_7}!}KsO%%v z$s_D&=Tfh?Df5d{UEf^uC?xR4`M~`z`vy5xh~(+gG=|zJ#d*y}37jIZmm0rV#r=70 z^MP8*x|BjLevj)%nQpUblw&|Q z@!*HX50+IoJb5n3Q9A{C@bZEDh4$m@T&t2lq9$)e{!qK(@=0^n2-rRuK^Keoi0#&- z#O3CjEZe>I^GICa-m_~K_y>mnq3}bEYw$u&j3V_+GK*gA*6tH=zUuZlX01=aISwGp z|AHK8&M4beYX?K{F1v3EMl`1Ruo)B{wHCP58_=YGWx4zsjCyH>AV45#L1r>oN>GJ@ z{#4DWpz-ni|lK2)p0!R}iUj#}eeIV-dy62=c6L$bJQX$g{fYN?x`?nJucbZ4C z!az+`Eowo-9vpB0Om-d|!&H%nmuO*$OMh*7*&eXS@v$SDfMc4Z!NHwq-|@QOdm^0P z%>*h_<8aps0{izxn3A$owP$j^MZe(C&4b4MjSx${&Nf+=yn&C(GN<&=R7i@C#}Ul% zoi>q}4E%ZeDsI_{OKym5+BJI7y^twzKs4p;(C{feqabfJ_?p8GU{Ss6y%V33^Yx|>|Hwf{151a2i26_GG*A52qv!Re2GEan&s4I|{GYb*f6B1&p4c>ut5~;$ zGOgE|J~+jHWO=JYMnjqAiync}`QPyvz9IkyrOz{Dv*Rezj@N6R!27i$3fneWr zXe^ttWfyqeBtNyaC68XUHs-O*f6m5yR@oFY?>$4huQ)l|tMe>zJ>WFfDjui;8Qhe2 z+TLDa(usvsti9B4G_{Bfx6+?7iYse_fq`{nF60?=T%<*j5Y1vMBAzUxXuRW?4)_;9 zo1$u_in9pA_T(S%D)P)6s_j<&$XR-L)wL%~mR9`M(Wch|T~kv6Jc#V)-Q5a{tl~TZ z`GRt+FaS%jb+xBu2thE|^qfaXOtkUY1j@-sQz*AM(;eCcONb7?QG895>5c; zo$@TzfqKl$dWpHL%LEDGUP`}rzOd#=kujGseDXue&?o^C5G5)=M9l#ER(wV*0A{f8 zD{B*xUM>N!s`Tr@*A1E3(!{TkBd8*J;=&>tSrFz7!0~QsHyDl2e5?n^z|my9 zg672hCth><*N<69-u%TA>elW^K;GJ^xkAGYH2e6oOTmZW5$m#w)=LnrFj*XP))*e}& zU1Zh{nmfXBgbF7Ha7q*#UXldzu3d_s)aT&m35 zm?48-8^wn49i~G9!RIY?pf}>Us=a)ec!WkY(VwRCbZXvEt*c~C z_^kcvusoL+kZ#f%as)5;AzA~Og@lfGV^x-(*cnBhd$+cMndgy;SKDUfO^WAQzfUQk zmCsLdX!dAK$WvofirO%ZNIZy5=nv?A*6EL5dh*dA9^PntN?x)`fYaNWTuT@u0QTPQ zB`yNf2~bSNG)!UI|2UWd|0ijyP!_|DuxSTev#4}P*F6&NL-FG)CXvq1t34mBhj}_e zzoJ5{adVFUd@C*e6H}Yh66Q7(J`6-z)h{Qi})uV-hBv3G2x1-yUG_1UQ~Xg zjRZ{pkYEQ~p|rmGIdnFd};SDT4#GRdyEJ zGJ8gRy)XL*tlH8-;=b~7X>>?e44sX97FWp3{hm3kbX?UnV@ib5dxJP8aXCZ}nwySK zV)-a_jnT0_4j{n0PR=oe1o^F5WakT_!8m?wNedfsS ze5zp{)r1cE?P@kQ1aLH0P?ROh*QawkfL|367+tO*U--J3Yh3_*z-W*oLk2+-vqhZB zhg6*Et~lpPhoIyrF;4=aEaV~HXqJMou9zoZ>%)*Eq_v|;v82PD+gkRhN%ZH2n;oHG zhsU>!#`8UXxjIHtcPen32PMV z64XSXi65-t2_2)GRF_M_6}&-U0Hl8d6AduVcpQQU>mp2*D-}-5ABl6I)KdE}IibzpwhlVQ#4c(0s<&Y4nweNY#)?zA&GdrX| z-!VNkrN49npk~x`MckjRe zrElv`L9g;04YV9}6X9OB7B3cUXCJdeWu0Dk&JNpNdeQVl5fM>Fw*TeAV$ab|CU8u; z;r2BK@)3EdZA${Ajl9+q7A_+b=i&evTwK4PB@ib}{(M>Gv@02Ku&WZ5I6Seza+Cr= z!y5VPvawJw*wT=V_*Nu>C5s|OJV?X;z)+ukYPju5ea;6|dD#$#2N%}6>+q&YJ zcATN{Wwj=14(=_a>xWz!u*gUKUjpFm(nv;omh&qujoIN#hUvlQ<)f_mp|h;w*3JrCV-^&KcM3)$gLA z2dz^R%?mwq`N+LnzqScCw)vSaYCa@vg_h4Ygp1eQ2vevfF4d)yA`pfgMm_+|ObqW( zRWR$K`Fgh|5X@)*xs5yi#47mN@h1F-uYTle!n+d!k~Y#VjTK@AZfVS*+W*6+t?pD3 zENkv_h%H@_(#mlEsl$$oE)7nZ1^(mP<3YWaFn%tJWYZvDyHau@jso&;Yroa>@wYIVBTA>@`*W6Z4<(D){Z+r14UIPO zdXS_;8oWHY>)51`oVC3N^D(&Ep4zzOTszC*z5h-BT%(h=;UnSYilhzI$w6?}2kpyZ zS&Qbb5{ua*=fuZ&EzSR^YB+vdlt<58@o>IbtI(zuKBeZE#%fQ$6h-Par zY+G*P)b^9pl-IyHQa=6^I|^-)QEYQbD-zxx)JMU=@%nu!oDuecXpHhmZ1B`uW)$sg zuGEE+S>71BvjxMs+6Q`(n>*486=NEpZZ1HHQBQmCT+d>ct6+e;ft%KzdV1tTBS zqvD9?Xq|49^(%MO9MD_mEO<#(TW+F6l1U`V8xKV?!Ny|)xFY=7zn&r7WOXT4960tD zGrue{C1w3m9lsMT$nEk>tR~k;c?Dz7k2yZI1_;O&$FTuWsFe`geHE6u4YP<)@&nD}rD!h0FBUONyC!a(k|Q>{5mYFH#EgUh7yOVxZMzW4YhX`0Ty*_~4#b2)>+~<%$*FD02%!N!>=i*;F2?`t zDdPxtlJByw-W8&S_pBI#jtEC2UHPgw*vpq)i>xIUvS~tjY5e}GnaR$wPIKx8^BFaNNKO01ZA(YaSAzMvIlR}H93leyWfcRMM) z`&0r+w%9*7e%Fweg0{@U5E9&0?55RelG?N-7~(l7eFaM+d+=wD;mux~&06;rT9* zxAQG^DHdm<>KjZvzUNlV?-ULVnBaRjlZky>Nl*aRQ)feH+6`Ls4*tFfNZmS!N(Ufvuq&JN0WMgVwn~*^cwVDc0&o7a40^(KdB_~CwtaPNn?I$zD`Y% zh2=4|^vC^Tt^U&ceOBM|13XkBc<~%7!Dt+W{;WR;MoYuVc(Zl;VJ|66e@D@Lq0{K< z1|-%p*a%!B%g!W7k1*xzx*@aCXg=#MqaIhQuE`lC_VXrg)wS*lF63J*=OEB7?Q-K@ zmy@+KvrS>xb7>gs5h#in&z52GiSs? z_3P6D?!*2A;XTksPs{lJp@DshE8_skiPi~TyIYxYy)f8$5yBj3$yMpVG^+{w<=iYa zFIi6)6_&(&ibH-o+4%}l5+zr8)l}j7t2DU^exd1?ROkUsP$q%vKe7toh0^xsu`2U| zXWzoN{pnkV-sTKh9IZQbg8gFXThXclt3z!kKnX4K4b9WFpLY&+UX*MRz!~#QMt>*Yo_1 zs-1$a+$wOuf_Q0-Mr0q~9_J{ zRCp{}L|-%aD7oG-Ci$@Goyc8>-Dvt))7nZ+emDth*gr8E5veZVrDliu6P=g6kXl#A zq?Ue$v6vZV&(-B8_HC3rHCAhYOo`8AHb$oO`D7cB>ppP{v@pSJG7Zbk`=%x>VvsQI z2sO21F^`;RmHfqrNpaJRP-dfrrwrO9ZYIGyfnDc1GI^_EUu0lRcyE?TK0D4P>vxYY z+8Nh1KppZeE+wZ~u3Ol7a>t14tePMirxcg!2;tACdB`oqOWm5XXCAGveQ{=qFuN1r zp>%8G>9O1SKf57c>Qn7Zi>21skN{HPCllx6DlP{W$bGWYgNvW*mHbAtZ;sS^yGto` zL(di~zcQzIWH%7@TXUT*haGvBZY#w2Ag|=8qCMM1_G9vW@Il{jl`<~ zZt)*&&#MI#-@ox2V)@o|{5gI(W1X3&Uhsjdtg3HA=v^q19L(x;v8s=+NeZScy-~qC zX{PcZu?dEAY0;>5m>ayh8KV0+8llJSl|y1bG%N?YKx~XTBfML*ghPfIF<|}dZDF&G zePI8$g<=x2vp4(uAC>9^Jm9bQLRP~!j@j_*{n}H0h4J(eLDRrY%hwyt9U&t2$0{vt zE-m1Qmh+p;4?>{*@#nvGGr#J~Dqi>M*1e=v#H>;X-)WA{%8!#CS< zQ_A|IW`F!eI!*fg>zYr%#Up~4c*#g~b=0b}LZuG$={LZm4QU5LergRXA!>w9-ej7P zI)s6^v7DzbKx4bA{?n6;Q)!LxjNzvgTF_eAj6WLBwlaHV^LW_%;@cj??0A)Iz@;;$ zU@v~YBn6Nj%2@=mn>B(qhi~8ff_G%*0zfds+cyH5QkU3vV?VaFDn%XN>S>O7{dwbc zqp@*lHB|J*v*oDFO*A|#kVhqmxvLvx!`T&!II!&Dd|r7K3Sf95R=lRM+8n5Q{~!WU z?@9!abb~RMrUCXTNvFRf(m*t+RGwUgH_IlBE3u851MPwJE87z?@7!-L zCJgMVq2Pbo4_4b&bNt=*^ux!BDvd( zZx;?i!%MwxQ)?0}Iag+iAx>=cfwPeh55y(c0vHqj6kaBxq6czW&Ndq(jb#b*2p0(@IOMblr3e9IoD$wLETQz72E7s z*9jLJ+lyJ;W|bT_xaq(N;6=8r?Sc5-#I9QtA3%vtKlX!fB%|p@E%6L3OXFoFVD}akuMsyZt<2VjW}KhRc__<%h86d&IipeRJK#zB z6#;K?p0ed>702Atl@9eB*)mH>0>MqJkGKO8Ibbn7Kl%tm&ESJzhv#ON^@>5I7 zyVwH-JyD%iJu}UlV504LL5XUIj??qLal$HRr<-llweKwJSFB z`Ug<#^eHDMBog$i@k^ZzwD)kKYvUvHslB>}Ry=o8XGp_Q`I@$Eb|Ku6V!;0(-*=Mz z)=%vlVF=RcX;I|zz|ZQ9#`_TIS0{eB#`R-|vBKeOc&5Y+6w8sEDqd&Ywx>%bT_hVy zTHD-`Vhb~}65}+neFS2>+!-UScBSrH%tlsN*iH43Q(vNZB$WhgGS6Fgk*X35(4+aK z2DD@j7x9-yg4aX@#j|R5W+O`6QzN7^)CUS^l9*S^!Pzwiead%DWiWU)8sRSGK~DRm z3D#PUzeZO2H78{l{*gewGo!}0nMW-6YG^CJjRW~Gi((FVX%bH@|hMIuj0ggKbjkB}h;zB$lGEwj zGXx>uE?j6qjh!SFnwzl%kh6-C41_nA%*35dv10$fq`Jee47nO1Lz}_;@Uo8?@S(ZQ zcIii+Mq^=dF}}-4$B@B7_U91bT@t))5qRuredieoaK$f4c7(v&*$O)>4MEeHtwjV- zT)3H-49ULalz!*&d{L^M`Y@Swv957Nt_QkfmO#D#n+|<-7_CRS0W4Dxn0Vio8)vE7v&iefzqb60!IgHE@aF=y=`59@+pn{HYOMNqT9aGr<6{3JzP&BlbCWtb#W!SbztZwe{>*FeP&yW86R~R3 z-VeJNWG-^;;S1&%Cg2s^_&ju%*4SJvOa_sxLg-{SbmWuWM6%p;&=iJ(5!Qmr=sN`2 zq*Bo_6tktBOCZAn0j)_SkXY=tK*+y+0i|hy>dVyyQQ{Wt9F7CEml=<#GXY0Y2 z3psJc?3agOM#3MZF1ov2D2l2T4zNRm2MRdz9e@avPJQ5xYtL(YQhI)Q0d*7>e91nUl73^;vQ@s{rEOO7(AYnxGHr`0R&5Qr#Ud zWvaLC-?Iyq$eiUumr%hUrNdo1=GCPvss@+Rlf*3eQv^6t`|IK7N*&74Og}}U_L&gZ z4=n^^)fC-mZH5%0iBLJYPZ6M=1Qu%i2;Y*LP3Oan7?vfgm}(|DB}Ik1uP!{QJNY=% zk5k$&3|$zT(*{rhnQpt&coR*uk9d;l2mp|zYV<4!h(Mh(hv-M-G|{(6F1|_IdR#xV zR{}}YgL4Q{82~TvOcEfLLErE&G323N3x?*2d8GH2n|*VqrMw0VzRN;2f1`!Pn55pd1u*A`qlnOW2nK&A|(uf2}Q(N3x}k0i}f={>tbHzY(h7oa`)b3@beF`T{u zdj|RPSDH+z#wyP`{=S&AB9SV6EZ&Ab_?bFIS4fqCs-@BC0C;f>ms32FjDj zjSzPom%7~9eHex1#p;T~vaQG!6Ln9P8D$*~UtBR~UO zpMdT>ly!5I&{SX(lGCidFaQS4f&#=kt{>J=R2~mjz11*GcW#Ecu6Dm*|2P`^y*gL^ zC#RK9U5)tyChJ}*NmY)xPhbvuem3(V74OJ{W3TmbKKnLvFX*<1%`%X`2)APcxyU4h zQ7vY~a=}Lp+EO7D=0|hcjY~gy2XestErW0a!VE^sGBsu)AZ2iQBj&W@ux8X+HOglP zaS1-sNb4XMfk=K%@Ar({W5XO>&z&($gW^(uU=FQ5^Q}_`wueoSGT+}ES1WYt)}2_)w3GgWq%x|WtNRGrxwrOs!pH0tjksbx?n8e{>?!0 zQS(qZ{+1)QC|79=1bG`rCOkO^4Dd%t0*9`3x00#(+&$j$bW5fgGCS>BH~GgJ1^W60 zw3w1V8#8_}!(<1^)L-KAnsvbzwXT7{Af*&!Yfr+N}@vQGf6a3{Hr^P zb6g0Q;0hm^f*L(6%|`4~y3qW?Lp6+ zFY{SoiEHI|&Fmfy<Zl5FwbB`<1&UJ&w>h3mnPS54P zc}88`eY`knI-hA(w+#vRN5a{jiPv9j-McGd{%91Oh0p$AepK!Fg4cx^2sXU3(cY!D_F_(FFya9KHZ z0H`PHO`wDw&JbJEhIo>*RxmD#ynQ@pRLyvuszDK-dqgILT6ghG08EUVv+O`az%*c8 z^mm-eWe;Kv@ivjZJ91)RXFD|pLljsR?BcKOj=$CQBWy~`43O?48|HTIczq3}S~t%Y z<5|ruP`zYuJf!S9TY4P>U4aefgRoxuY+1A(IFpNflJkp;q`AM|__Jvo8R2MeIFb22 z0w>FZ#~}wKPL<>${-gflB03b2ZaEGi%|hXa@B`nVL44>|c=C7;e&opVG@CLacaU{< z5UXozwwz;3VCu|N?3p)Qj51t%N56Zt&)Luf0cw7fkvMI(!32)ovZVFK^K07GW~re+ z3GZLCrM-0o$-g!gR5v~@eBE@Zaa{!qg^mFPl@jcCg?30gOBgttYT3V&K9`*IvQtJO^4h=3I`UF{SfPRFlI<>HKp}l2>ll}{R zQ%M%oBU!mOs@%AZdq9RL08CjlC7u>l%%<0(xq3S2Ujg?0D*2ag6gDvUQX~02+z#2C zb4JPf@~QpaBeUb@zA8V9iLZY$1S;s5%njbl3z!nQq?ff$#Ix9|7ukGeVJYib*Q%*U zp{&NEQuZ<`SCbz2v;1Bq!b#!q)=(%n42d1u3yu67zi^>}{9lx%xRG)JmR)vn_Y)%n1d=&Xxlm z*4wc?)nRpEEV-B#J`J1`6g2xxBs~blAhJwk^jnX}I;(Qy%n{Y0=5n^IPx4fDwtr9^ zI;1#`PYJ;C%1GZm&t7^&-rWVU*5|8Sl^<$fdoycStEdYpB)P+xX|-% z4kI{SL_y#)yya9E>vM6IVob6La_Xe*=gV8O_e&wvXg&AUUpoJ~xf-B=zsg9(8I7QK z9M3k8a$ie;WYl_|&pI7qeLZun_)RgkQ@cjZtq;<6x05DGHZ9N~c*rRCqtDkrJ~MM- zmtWdpDUHB_T+HN(EDDY0yQV-*jwb&SOqJxd2wq#~3vgE+o_qRNCyo>o*&J1h6S zGidVeS*~`k{rze2G?wx&CrKe-B^@jSfQtO)EO&Uk#=Ln)O?jz`f51R(l4<&ROv(sr zWi=+k(&|#~*_kGuY+1~dH39u$yC`;6#N4`$k<1im(Lg;c!;h7OW19o@d)Gli-4}lr zUtlttrPuq{h5X8O5iE7g>zZ&IvS4of+EvnQR2UJwk(64 zY_n#?boh6Xy5@NhTv~q-vCUfUU43S>%K=M9DH>iZcZ?!seFp;l`)_-73FwM`d!zo11ID|jBbHKKoY?8MfyHg`_Pc*)djHvW`r)? zBM>Kgt-x@5+H@s{=Z2-8($KE1@kyCfAZ%)l`hat@Em#4F>+V;k!Gh1h&$5dQB%$gx z-!+b<5KwT?0V2C>}AvZl$(rs2v+gWg%sQJE-0O zzpzxeC4zh&$#}O}Kr%Sp{gKW=iW}px;dpy(OYBnK^lMpRNk_~d%GFaBH7^Amf+NJ* zlfMY{iz;9r_q7hhT~ut7xS7TlE5xOq0m6O#lYEkTxCIVh(rD=o7_-6CQ}ee>Ra(CK2p@L0jTIteJ37C) zhdpJY6~@SqHxT0Fulf3Lz67b>_lHnE2h;&_FYevi+~SGLt;&?B|Go~=pzCM*K={JX z@R={7#c1A&5s60CsDXdQfI|xXhM=?Jn$quq{p0p$eOxc^Q*!WHe`91KX8na$@A8R3 zpvcK~33sW~5Jkf|p*?#>oZ6$t#EQN5Xl#nwEjoTl z1TkxmqK#R*C`zYYTG~*Q4z=3SYQLzqI{o|u_ndp~IrsBCpXdF&UK?sFzlP6S&v^_* zwo3TNla#rnP+HhvpWoEj6is8c{jn+6I<^qonqHj8~7|zLxXX!8Bdh0+f^ z-}L79j9GVc#8*_?OY&J$k0izvThOPrHV|g8d zyJD%LAP(;q?0;51B?lpoveo@(^UXOTPAWcy`U6Ryr8C8S_Xf)qnswEQh_`_@LUwNF zXt}Q`ubu^R_PfI5hreKaO#3zfJpu07?;uP(i8dVZZpN|pS6bpE*Mh~Nz;d2-NtvbG zZGJ8+@GGKB<|UKds4HY3_T4;0rsU~!!ZC&U?HtmV^qLOqZqaLP;PHFWP}Vy79RS51 zYR$olDgwS-kbnG|_p#%f_k(8osdOy~E+qQ;elbEX_=RfWm&;9%!m8+7k6-Q{DBeQ0 zQj)n6Wa|!%tO-`;V%S7v>VWpDxelRbfT$Tax#GScAZ4zp6)tOSlc)RCIWbA*SEL@^ zE1`l=^ljr4B8Hpev;albtWQC3*eJ_kGwh&XkcdF0nr*fLk1AL%gHjNd<3_E-cW=~= z5fh^oxcpwZ*;PG_r~#B#x}ApqWb|pzH8e6b z80i0mu`I9~W`a%g5xlKBJ6A=Lco)p*=uQQ=^(#W5u3}KEKz)Eig$>}RhSD(iV4tl zkVH<$_FUpAmOp3QQRusNNsTY+;t9Y=M!mOs&uI-@M&CQEG7vU0pk5XmZ)Kc(dC z#;%s(B}d(U(5(<&?(Zs+$IaukB~}9n~f}9}kFU4+RYhBplF8?t{NpWb zrB2yVMq8PoH*ZOK-%>-Bf9zRO>A&Rg^!)b3NTr!z+vsCy`5KNvulFcY5U+MDvBnEnkM;bRZmjJ!k(aC4su{ zbu2;sdu6=4zJi?f(Ex|j&gle!sxIw8&Gr+xMCAh)l4;@^5#>LIK%%lBWKgRI>oL-- zrYz4}v@P8%>HT)Y+pB++R)(Nf90PsxLjAU*PaueEI2!5*LDO?=RVFUYgY zEWm&dHLeNhqie7zEcA_giXZtf9dh)r7owgC4w6k4i70+S8)CYh&3m4BoMoWRQGO@C z@rB#jn`22=ML#ReMV^}rtMS9!(OQ5~Xz~S_uB0%et*uzVR)~}nx;I$SQK0k%#{nKC z2h0^?%G`rv_S+ei;i45e*_YXy_%j!g%Zc%}I-}ao;Y6#lpP#SFs@!DAi-7MO!Ra7W zUZ7wYd>Nagk$vBKt>b0_;c<{q6cr?{dFj_Q2MpZ}>xfv{Dx&(xY8F!%%717ad_NPJ zB_=u_aVQQ&0r~r~=hs2{lf_*G7;SSOEl_qRa@^N+@CX-AUSW=22#QtM>$h0`(|~3B zX(}9fr!DPG+3kCWP?z%|Alwa8rN^zU)jK0~nsbKtJL-M)^OdqvVgKqQ1bAILbCQjJ zu3mi@S-P&}Sq`faIiqnNeYHTrUsMllR>C>wVoJSklzq4D`dgco4F+)!RKy?$_=pw_ zCQ41ds=snU8%m042n!b_{Jr}As)P^q)q|X3xh5;=QD5u_QgOVikc<5@W1CE|(>tGN z5&9@MKOW+z;mm`tH9HTMm7|H>^RKpp{nd}3{3;#9g}NySvC1Q=_c_$KWPz(rYtZ#> zPm!et0+*2bvvntN8bVG?5kLbk`;01so)n!b&HIM!k*MKG`^u%h9LSjvWpRo1kqTfb zMDk3Hu5JDy;ro%0cH^D78*IoEh`GfpGw4riPO6yh0}2$<)8)q&b3%8VwSnSR|K|qd z$~2GYSKFnC_KOPmub>><~KqE{??UM>+81sbHo%Y<} zojhr?g8!0h*@wkrh_cParzcD9&Vg74s)D&KDg`&6%h*#PrcfU~Hdb3^R)|Z40CUoo zCftGef2v@Y-Epw}DH6^Z0i~+>kOedQ5eWUQ)OQ;)9bm^`KQ{BRUe^wluZmRsbP>xq zJjteU09`@8NGi)u=DyocVu|^y=UcztmmiCYjHgc&lawve+zK{jc0o_wq!w}UC95Wv zn;J#Up*jD|zPc=O*>cL!9!Yy`Ahj~u2DTV&VpzaCrlzU03ra_Y zgG4t+Ap7IG$_DB=M{g_!WIgeLTLnemF_RbZgaty8`dFS>GG{SEr!SHxYFk+TmU2GS zf3Wu?8?#fe8?2^MHK?lq8JOKRyoHOMNSoi z_4o0uu^P&BMf?wtRw=09LuH1=W-9Dlg|bR3Wd3UHpqA{Pbm_qCuqR2uht`0K4uZo& zHFVsOYEKv}a$@ExeRk9|{}`R-QCwW7#Y{_BXhf(k5ngzqH0ksakbh-ay#~yHv=!}O zY+Jq3&CZ)ss5x(L;yY(E#`uurpMT>nm?hO$@j)**sDxm0ca!3U2=}L%ZjN9g5*}ar zJgU7o?62`D&@=Q~fK|GHDg3c6QMo?Rh6OYj+gl)g2I9E+P-V!uM40z}d$3}C+JhC^ zGXK_89Mjz`QT|UdDrm-M$G-D~ywBfRkiie4JjhCQAzvrzRzMkgf=kesKi~i9gfwjg`wKvk z>0vCUl}}CO@2Mlwm#Q4NTc6iOBWl_Bx90J|vk&>_ZL>VyUXdo%}k%~jn;`>RpL-W8GVWPamyFesCd*_TczHi&X z(e)(>*i?Lw5%WHJb)?rjhS0*y-(2)X0kBOzG>b6IpR~_qA&~)RTl@G0Ey&JwvI0RA zFRtEFuCsT0k)*Hk)N|4H#eY>%S_zmdhQ#XAQ%&0)LT~wPUinvEV|_`u@3*IZRx~)B zU#Qdg*;*LBtxd#gqddkA@jj7z;$27MqercRXKS9!!S0CjN9LS;t&jcUCrs75B;42=pS=%WdRF+Skf`gypoo6%zyTiijo?^WVP);%j2GtQRjVSidsG&D(AfqP1%@TUrvMKgsfi+1qa!^ zkRN_I&D0B`Ep0s(xtO~x12O>|s!rsr>Np%xnYMBqBHJ^yrv-(>(#SL3sX+O&U}4RT zH*E;^6oTmGODv_GmI!+Cm+&U}UN##fG&om;seY_<-wQ7SEi=Vu-U{0E=?re23p+JY| zo@9kNF_R*nSJwt+-$V6&_K0E*YadR?G_g*rfH0YV=9s2dN6oSqcEwJF08e}geJNE2 z1*4om`@S@x0_6X;uFG2zwYE+lv%xH3A?Ig^Gt7+b4Hm{rvTQ@z^P->%?x+}?$V2n* zG7AeGmL8zTp!H7T*UA($#&UK2y~%@>lH9bYm&XS^n)2yTCh3J5<(Ci0A`^7BK3{}a zxN1yLk_kR&A`jCbEzJVL09+V4jB289aT1^U(l-9mYf4h#rhNWt=}Ve)7?N7MQB^VZ z5>vl$SxtoYX9n5Co$0~><($GA_!)IP$NN1q;w%&Gf1}=Isxt2*tTz6;0@CAvOy18% zPk1Io||k$( zy@}-4DI&b+oiA_k$#gWVhFd+n2s;;iqj+&+$x47{&@V4Xl+ZxrBOc<4lwH?2l*R;Y z>Rsf=!+VMUC8b`)g2emFmCqDAe1z>AmwMw&K@7PIOw^LWM&2Ae91QSD5t|NjEIE%> z+lK&sMr}eGG7}vaPJ`AL`RX~6)XFhUxsDp57=7OP9Vb^Vnxl}DZ1L%17ehF-Xx#?^ zQdq93L*jcOQ^ZCyR8*7n`5-5;|1m~HC;`E`)jQ@OYI`fWvbtIvMRLZmUi@Xf<&ZLk zAm5ywpG8*sJNDnaPs_T^K~qZ-E$>H(>!_K~91UZr(pKdkI>ZL(R$O9CDn<;<}m((R-%v zK#jaw#yg$~L+6qtN!Xw;0rsnE$Ds>N;J^YgGppd@&o3CIAZjrmkMfY*2{E$fP?RPp zMrIi^0};aCK=#bYT@);1Jd(&UF+egx^k)0!LvI>1I|Pt8{2dS5>bmj^TkGcq4x4QM zr_5c|b|qKpDKcspEJg2;fKZg)?K32UTn6psy^ISdTrZm@>I}m1+(MKO%bc$<9x#C% za;@X6+f>lX{etUp+)zs(g;(QW?UtxwG=6(72>T5D>wxxoD7ii<;#mvzHuky_fII15x7Xr z`sP#M-Y?CNoIJ!4&!aPWQxs=xXk}+)+B>sEeZVw*1wH-OwS0kPoI}4dX~R9{?m?<8 zxmAMGGb-BxFdx8JPX%}l3XlZ1>)`sO7CAhSD9W;v)Dw^~Rb!_XdDzdgt=Q<{s%^?q z*_tC_C9Xa20ZwGT!RTboB8L>wd_q-d!I;8EMx{CmQ~+0T5v3M@np)L36hIlLXKr9O zE7kMzoE4lKnGzl0MO}6YWJROdF=a^ku_95O7~ zP0(;5`K%+ldBPC5$rhu_laxtIS|i)(5HCo+acOs-85h<15^gpLzY#edn@Bp121|YR zg7VQ5R*sU3grfTERH1;pfmC=KD`YhHh_tT#i%}IaB=v=*>R|g#bBIehurH|H=)?%K zkL-bii2Dc@YXK;|UB9_UZDWEN;Y6bYS7y#Acx~Fb;)t965#$sBG(oWXofrOY+iQ$m zQc%Jy1t>V)&{P8MG71#bC1+294RJWHe@OqsI55m*6cjf8;7zsNqV_mfvF9-iYAh__B)9(0ne-0-5K1gOaMUFL+?X;@N}j zEz}rC5y1>!Z#Pd3=e3jgkFplc3k`2A2pN_2$C_e=YN#{Bx(aJ;`zK>}R6yDgc{b)zLV*ce{9z^k2F1DD< zIOc5^55aM8(MO-k9Y;A+%kK>A>YV1_=69^M9SQdFt>c}!H+rRwZwOSaXg>%M(kE36 zXbVJ#B{g5x< zG1J%5arUAFYgml3q)uvqri%$&01pi%6X#W+2ir>I2QgN%m5wxcr=@#j!0$>6th+RG z1gf?gAyD`o?~uW=J$Gsb9ZiMg_*oe73GbVxyo3oFI%KIuJjIa=@B8KFc={&f3PFqR zHynrGg_@@{yp_sJT+DWqsxd(Wh6zi}380MSVL@NtyYi+ls&q4+(^}*oEx1$^zMP0q zYDvCYoAay-W3vFp)gJ(Tai3rx3OK0A2ZtCO8>7^DyW?r-~y7UG$Xz+3PaEn zAXS-Uo`K=z##&`kw#2u)n)>h*wMAo6nZnM(z+~L-pxNe7jwmYs?)HD4dO0G@=8H`h zEr$eIybkkI744OJ!P+vPB7vJ@N91YT(EWJlGdT;nTrSdncK62eqB~wqW!g@wGLkCi zEz9n_l^8pTgBFN=duuEt8%g!Bo4mt{gjL5U>k!jNZR|bv)mO!?*${sDeS1GD=~T*b zNsFhKTSf5bf02n6hQ{qpd=p{^&MyYmMH3q`7P2g3KZ}vz#dYn^NI`GB+43*4Oum2C zZI~PmmDGq~7u`6C=nMoPK3he}W)zXk_zTbU~JsI$fFj*%Y61aZP}hzH=Z#Xp{O z!llw0$F!7>HGmB}n#L7)pxx@kzV0_neuxIx=wAKe6*#rkQ)_O#bUg(o-un}wXw?mR{#C2}+7R9*5C4 z`ZjCYOvTY|@XvOGnkaEneIw72)0TTcLopxuY1HFC$qst9;YoV7zi5PX&&<(}%HP$Z z(Fn)%w(9ws_hw-QXj(3usr&|!l z-JHPf`lRTZ2!$uDWj8#!A$f9M#SU4#66GB{`o)wnIm2=9R80rye$bSPl!v+Y^!LT| z%;kHcPHhc^DdE;dClA^Xmh>gN%pWIr28WccL~hHz{%9sTQH-rG7C~&C$gkjEww680 zta}Q$P;1tMJJ?ttv~juW;H=q8y=>v9*GtFiU!ELtR@fMLjEq`*b+4Sa>k8RO!a>>6`KXi`B4 zUbdArl^O4qOr=Jh?4+tp_UFshnxug#Qb51q7b>ZqGpR|Q?M;f1$3)Af25*x&XcopF zt7WG(I8yhi5^I(MTcm8T`e#|6Nf*U{aD7BKHpqoy2YpXp=9g{c_Ec&+{sr>0r<934 zc>4C+=sMVruXu6(Sp%^T={q-vazsBjw(uKLrE`rL=^^ZUE{-)JdWOrKI3p`iq5G+(Mmi@s zOE6MfSOL8ywu@y+ddh>=-|?8|#>l3RI`F*htdVxHmPW5l2>xF2x3oO!1+T4-zrK%h z`!s|Smcn22H$zF~|DoDXtl+=F+JpzH8YQ0$<%Z7(kX`o?|*^+s7ptcmD$oYx}vh5gMAF|SN_{v^jpjDnp<{hVKV!Gg@sveBmov>Vck zMQ_UCFmtHSPS5E_)Q+eZqtn>P3t{h=!J&lsk@D$f|X&7 z*KYxN5{nKCN^P-t z2G{Q~AcsE}Stp1PK^b1Ryy6QEdto9%V$VvGImrk>zd0E+)9!cHC)eF0;zN5zq8lq{^2+o^oSqh5a#NYf^co? zt_xn26Zo^!ZShzop)~UPYu2C~bvp|^fRGb;8d1p{3M27)W|+A(j-~1YUaD4dPg_3;@q<#47ermXr2qQP#^r&h+{iQ@mE5!vx9Iy^g{}SyfiLBTDXypkRw)r`dBEL1rF!)nOaryl9sn^s* z;^bL?ITqhCiGxvP-NhP~!(Fr<9fKa+mP!t~{DrI`#G!~-L`RAW09Cq46dpTqH;sO! z)BhEQoF?l!we+t{Uu;gNil>{ymE6+)(K*CV`ECjRGh}l4pqayByh?*zXmFUyF;(6% z`xbfh6(pK>SFG`f6gYqpOT1*$dR0^0Nk!R|6zW*GMEI$= zzj_Tcu4mHlKKKkbXM(_vxkQ|~wOI^l&|t}p|DG#tt-5oyAP~mKZ9|F9#6$@nj&l8{ zl28`+r$#Jn^n5T*LQuwr@)>46CHX&x!Dj!0s1RtPv?rQA>_Uku@Ugw0KoGiIa};TB z?n{G@=DIGonnsS?STmVN6+gE#gLx#C4w zGDOYj@SII-ppWw8r`xSgXWWKA@Pks<0F8S3V!_K9tUz0@t3O=%$>5>ftz<9p;^d(J zz34`LxpKaAnvB}@*pS7KG8J{S9E-iKElF;nx@PIvfg-&n#&B|e;LjFoCyX+s6qSr= z_rj|h-Yy=-M6F&wYl(@;1S@vSKB4gZ8syg9E$i~sG{TFk6Ds?=h5MFdOl9Eh)^x`v z@oSt0Ew3trw#4}Z`lx5<507r0)+D|!@kAfg8Hun;TOkW3Cq?SA(OJ4$G1$XQc=#)6 zy&bBLOj_30Vo!3HB7X3eY-$4Xx(^i}RxYGPCdB;W^r!Hg4j`=84e_cfa??97bkxj8 z+}?%Sly$oHFkM9->>MC{h1{SbqN5YmpcHmfqNO8@PS;UBEcqd$?Dmsh)Qu@o5tmL$ zPw*&Pbb`CrDKBE_e7g(}a&`7fGfXg(v~%RDwvTT%C= zs`w)`vzsfupW&V&erN45>+=a;g#u-`V{m16A@u1oo-M&Yz zIohJ>`6#7=eBdme4yR}@6byVO+zqZ2Rd%R6jvZ1;(h9O3&thrOTIi}H<;2X)cUK?E z&S{2fAAip!bSCvmgh^_oNlujP(Ao8#r9Ix*=Uk>EoV_xbgeH7E4Lk#&3Ksj?iYkpv zQqA(Opd->cy}OJCn{lWCWlJNi0Wi1Y$UXcm+~A?wWlC%L$^*ZhlOfScg~4+xp0f6DtXqR70K4# z9@c_qtO5Fys_usZOG@%Ft&=kR&s|C%dr)B_^pLEg#Z2R8fGvgeC`C2(M@6k66?65j z=(_3ClRvNFC{Gn73I?sL%B7?40Ze#{xQUC9diDe|XI!NtWIINy5 z_?VE|vn?#-sj&hT6)fUy_sH2@Q)*rl_bno2ZZzFw7r;axKi=n76!D#(NL6B2rw1f3SS zGx~@6M3rpgbzKuA@`f<1?l5);Vj|d(*e6XtdddbW@7lFIyFHWjXFuoq=ChuF9wkl( zWvZHhj*=K!ouOnf%&e)8(dg^sb_&2vvYc?`#rJW~00RHQS9Yam2c$u+Q>igyfa`ip zIe`b(S1zVBP!u1Y&+^Dqs5v|-FF-wY2RPQ;_$v$QONAH(r+>9^IL~cwCcvGza_vs0 z(rs!-7?YIHc1JP)t~{6Hj0$sQOP$TF?CW(;2{1Fz6eT&}nC#`P87?y>x2quUI|u&zidQSEP}3FqHQZhd+uB-&`GgSvs%Uy@ z(>z!9m*i%l%pAYSG%3OC|C#WnF+w0Oo$T)R+v*tmwY))TvRJ?II@#PPqvX@0Wn|H5X3-(`!uql^BfiWz5!OPWgF zXG)diNxu=L2*_;@Gwz5LZYV)NNtj~6tuDINWvv4n*-OHoMpI%uq+Z^qjR`X-vx}-~ zQ@fTQXwW|e?YDlB-*Veg?v6~G5;Nx}H;cf0)FWjN_J1oT0ZB7`uQHXqGEWAagfdSh zQK&glX+bNh{nT+Ut+ux($m$2;V3#i3PWBHU?qi)#IeI$O#HkO(gmL9UD+zUOG^yx`r*6^(M!gg`64c z9jVN^F^4kxlwY~YBWurP5bhbqF8##(={sGhFY^3*-uR)PxLR$AJ(wwZk^hTX`Bcnl z9L0&KIb)EoaY}BUN7S%C6B&6+e@zxLPwx!)yd<;5!K2j0_R8j)lI{YjDzO>f?+iaB zGMs2a9kG}^f3%;ihDR5#r4{& z(|btv(rWCgy8qAPnaWseH^lYjVgSeM<9&zHIOjwwAYxfdpwYuyHcW<A*G54m#_P~;PAPb06T=I-Ynd0^R( zfH34_vmqCx62jL>)d34Eu=Q*@vtd=Y@>8fM{&5s3d0YD(c$a!tsB=Evw$1B*29?jsk)XRfoztkV5EHkF9=`sy~TdtD3 zq_TC&(-Le@c>u(_8hp%%GiKG*?hO63yox}kX=y-_ZdKZAW`)Wi%W&-B3eLNI?J(`q z{o#u3r}~X5Die7x!7Sp{wzFyAa35QnrB_Nwt>KR__#icQeBIMDm6SIg>XG4@dP{}L z%e4ul7t-sOiIiF8Xcsz3|L%i;4j-GxRSFWXdWEE6kn#2mIj*Uj0@dH{gLe@&fhH8XQp=POE1hp@ED;@>abpxu+R_Yo#;Ojti>%@`m_it| z#eq&C7_acAs%w1GM?EmkgehzqD4TaNp6v`BfAzDxG{j#-Yx6m=6_s>-Bs6 z$*oA!&${8~z^)V>!~av4fg(M!2l9r&s*_fWX$|3kehRd%s@$;p8|H(Qgj%U8P_IqG4=jF0Ug0h~+A(!?#EWhChV7jy! zwVeBg4!Q$JonLOJoLpZD&CC={a=uFamuauQd~%}|q`!PqM55axE5JPU5zGIcTv|sr zYJ7%AhoP;r$$CY`3JYi0>lQ=_h7iArt-+r+-%b6WRz`#2D+e=d^+esLVsmfsJN)8| zA&+zVNskj$U?K|qxg zKl*x0KJ$KhGi5;*z4|7qVJ3!~-dtgiMa4&#WoKnEW) z{ongCjXn7m%7IgTo{%Fm=&w_kd+p3kb4eO6T~LTrum`Vb%|dwA-=I3Je2OAaV(h=B z?&bN^=U&UFtt&$u=RRP2_86J)>`T<|T?w~8Z}+C92ky|lzaqrVt@{-@Gohb{rWcCe z$Ugi*Si_6_79S|{Xyrmi?fo`A==0Xwz6z#K_|Jzx=mpVwB%<*e$8YZD!j(joLAl&m zIz(h0e$+B_-bi|B4NbhJ{Uj|!)W;!D8-Bl9HGMv`hwH&}`bND4HY8!s46Ja_C-CbP zgp?yCzF7GHGX<_)d1f&pBhB0vN zot~ck9lGv@T7-DMz~5tcA~nc25X#`XN4D4lfJ<7Y(W9QT3?OtVCtL%kBwd8*2MQN_8e!33b2#U(TjXBFcu335UiO5?r*3ruOITip`D+Kl~ivW)W{^n z48W0ukUPzp;^ziLBe+C`-?7y!V(#Xqt)Mvn3=u5<&H%`}dP+(6=1n;-4*H`w*|ySr z7gd)yEPe9vz*oN4DzW1yS@c4gGAKQz^pFyx1r+C}<_(IlzP}I9;IkFG*xwnsoB=)$ z#6a;_35}GymqopMJ_-q`y}Mlfsr-`(Ec6usmUCv%QWdOYpQ7VnRFP7WT3F7W6&u3K z^>1v+;cJl7S+a(CPA!WpY%8tw+Eb49x#@V_FA-PS4bpYnF|Nq|_H0MIt#OcDN{*gPGucc=uqk5VG` zWZMhbuMdm_yAahrNK6lS2k-M(_G)ln{floOIRZRhpCzhSS{f-^uWBBA&K8|iI2%97 zDC6*ex7sSS5g%_SAJe?;Qt_K|xMFP!Tv=L%&pX*%8wD-75(jWuaxS_$f`JZ{=Vih< zX1kNJKz#%2v|W`v0|(vfh6zct&rhkR3>9%p+OyIH6;tZxe9TBq@ALJyN>bCPTHU+j zeo6fq7O-jHfG8&-7T_s6Gdhz7Ug>ugreV^H94+qQI^8K=eog-9eNRu*NYbJ}BQUU= zlu5P{3(h)D-iHikrm|wwiXW_WzoGG5E6d;rsEW^qxqxJ+Id0+^+==(Y(9er)gP?_J zU;fIBLW@;yt&7PD)uao)Ly7omJZM%j1Cpj^q5je*zMDe+qG|q0|DgpNa~U1Q){0T) z#AeFbCb_giAHK}dLoMwE|2Lw@_Zg2QqW0d^p_56g-X`5h6SClwE@)b!-DXOJfa%2y z(`0#BStio>?+sg&5I8;fVhwbB&C6pGGUydQH$G!OZGP z6qhF>|CbHizHh}~Mp9|q{1*!K6?*HX!A&PmX#I@-F8iKw?TfbL!43EJ5TLJn9GIRF zFT78oLtL4%l2R@Tq=D?n6oS8HG@43fBh(%YkprQAY4#9(wbu0d| zLkNchRRRkfp1TNJ>q=Lt*e8x(2EDuP;D_gq3cU7gIK3;X?JMzKib;X@3Laz@ASp>H z!!sqvO5R05S7&Tzr5D|qASCYAku@S_QwMl;DT%rK5FbM&%tqGc)^$AEDiO97Ejj&N zx<1V?xmT8i3)@zGSHzuul*gzjc%;el5TAukXv>k5Wz|Ioon{Yet|EfyK>W`y??s zIK^@DKyRqzs)F~}rn&YAg?Pl(qXHI3OQo9Ta#%_I_E6UK5NhHy4yx=@Ydm3=PZYY2 z<`O^om1ZvQoO(JNTyamcnBBz*Q4;`5yB+2J{*3ThfC;kL#mRFOAJV=1MQ4@zZpwx^ zMy%?i9|QQRRtXj`nhmz_cnG& z-+>(7p;%EzxAF|`x#v6+_pAs;!=NHut7%FxX*=D8dCY7zM?1DorP{&d4b|VdGk@kW zX6B(2VG4CaWiDQ;yCd0b$fqQJI$uJE7gxTmC~eYQ{qmLsX1E4V4Um`Fz0E}E4)M(B zWcj6Vpvf`Z2yS+*jus~i*c-#y;e#6Pt)lIPCbPPgutyS+33Y#d2O4&nK?N^}CBM@L zIz5!u*30BxXBuM+7X<`}CkjK3HOr+mAj2BlLwDmV#|%|EBhzZR)%}&!z>wQ$M|E`@ zYCBQp1t96B*Vz07_2f_+e8 zH3f4TMAP4N5{JMqi3f(?^ehVPB-UoHN2v_!RkgQpN~T|ff1Kprz~`KEl})QQ5399X zw3LqC70}o0K===Vah&)ndDv`IgA0{IA?BGZn_ntXfS!jdTA)Z^nj20$e`=M?_bTYC zXSW*37yP{DN)5Qfo;jFQTKPa5$-~8`Pf{5FNu!-(U2y7>h1AA56q(*a`eNUIN=bOR zrt7X>BUp`5+F1?4H1w$7aS@DM^`2ac!P-5kEa|y3Hbf4*G}!(n5P6$J**5d$NxKq% z+>aXh@;0-i+%Swz%!3h)7vKV(a`dAmZjGIA`LBT{|JyEFI4r#S2y=*!_5RMt5#TdT zv|~~sHhNS!2M(Jz4sYz7R`rqBYap5B$P0Q@nqBYz43J1C>HT{XN18wiZ6qAKaHS9Y95EZte+*wcKhgzs~eS1S>GYBU;r65II47j5#H z?({b7IN#JS7uWj~jpj&`bXl8@s^pSzifxbR0K-cAV-F&)iriDf%U^Jcv?#yHHTuU^ zf+if$|CQXKIIYcbijZy<(0<;Y&)XZj0L|jthGS9Gq~Yfg>c5lyooU=Xrt2FzilMZS zE>d-$`=e;HeA9+YlOe4;a1H}?8blb7j)~SR_6t9ZTfXK^dcH5e(kfvw-}+N*eD-Jh z@~)*!#rI|`=U=h=?|-H}JC}u@`c-OX+iiXI9M=VXmzRaR1qOlN@mVO#dM~vq;YlSJ zt2Be}a$r@)3pILi!z_38qmy5S%Ch(4=wiwQE-vKwJ;L<*^_&%hK?~e5u|qRH zk9a(KR-iOz;y>jqU5SOE{9gT-2wUrxscPVMlZOc9e8Y-h`^;jrd?lU7I2c@Cixk=i z1-!LxQow-EIiKPLRbb3+8Y(_{(QiO=CGT8K-wVq*XG8!i4}BHq1FoNVZ3`Zd=@s7j zR_a{=W(WVTffDD7xhE&1VF(G5iA%0Gk;vRRtgZfoZ}FHf^}jF2js{y7IJk5Zh}+Jn zsvzF$`RD9+W_qmSI>gI>>TJd)}Fhyy4xEx<0(BQPGZAfvFp5__>k&W0dY;A$%8 zfw9GNv4x}yaOi;s{UJ2b=qn((!-vQ4+hLL63m|v4j<|rjoW21q#ykrX69q<~hZ1kI zg`{L*_t8N%$fK23=VyDyN(^qvbBwSuzhO3iSJ$aQdFuivgWEd+RnNsPEcm#Nqa8V{ z2L}OZCRDZ?aaPeq8H4@=J>?a1yb;GCTm!`J%I|7{v=aD4nlPK%f`r1*Ha$gqwm)~U zbAPu%?z~$o(%hg2K5&D3av|<;HXp#u@!Sh_^jy_xd~T5`Xj;UM&)P9r{-*t2GXVf2 zHWbh2&$xwZ%JWb`Y`C-apbCIAcN)YaYfh2!Nq=N=Bs)XMNJ)Q_(;CBxfwHbsgI*6H zy1ts>r{ZF5u%~_r!!&7fl`PvVJZ-B%SB3OHq>kj}8S5TxU$RM}x|4lX-R0f{cpzDn zgOJrEn^Fyc{vLM^58)a`f>Mi47&{7?e$Wz%vDLZ_nzDd4GtYuJM7j%t{QNC`#0gs5 zLc!1L-S2~ohYQ;|FoM@3HO_PYmT_&D2^nz6DeB>%xkE$2z)s*LbvZwWPJ8}7IH!Y& zihx35%<&lHF+Py@VVj_Q`E6M@7tZ@%?bkXrpEe$AiT60h@L;hi?|1(gKTt9s$--P=cv|pPr++Vz#Ee{Z}8_bN@QAFt>)9PY>(88TcxOMvA97xx~ zhFG{(kzYZ2T0LsH@K_=$4N3^pN2%QEvAXkK2^{Dc>>x8%bV=Hg!K37NSCI36^w5@fPZTE}U6TP(CO802w*i1GrmoA`PFFe z19YH6r=TfC$c6(3n&J30WAdFU~7*GfW$L7}l2p|CJ0I(zGSQH8^yGTpYJ@rEZfhJ)v;!g;iN;Xfqh z@WU*0r7+dK!1CL<#(#on4RTSJeo;YI@wfPbzfKWG#o_TBwXVTQ5)9bTBDZawnDfuV zcb=R*`M`>fwRkaX=)h|@DFY6&tSHi098;)Ik(TQ|nOt!61zOHM<_o=Z#@*4@CMLY} zRuPL(unpB!7mjtnlXKIQu9KSw^LaiaLA+R^2OGT_ld4BlUJ4b>nepfD4B*@^*`d;) zlw;39iU$Q!7noMJ@xtMK@O+lo&N(T)A5aY5D3&b*5>qNBL09(tD;)$K5h6olmeFE* z&vf&&cC)<4jz22pzH5>%|24z|xMGcWBH&_a8U z*q@FPT*66#s@#9JcpsFgM)rkBD+(ghF0VYc8-&0%dbzmgPQZPnZ=2o^tl@N27F;*7 zv?R+KRe8X^5ZhMI92Ayf=BA@ z$F059wBawH_%p$_Wep^P?2#{B^8J}OIKl_S0nSHF60hYUL6#TDE)88DKIjXbC*M!# zj48B~dU>+)oe)tXk0U}bGUk@JGgo>9^`P8AnC2;rmOq3Q!f-tZtx)*yIxV)@>1eUe zgTS^1fuJ*4@C!FaLw)XFbhbtlK%9ifnqe)Y@*Gc)4Lq#0_`*c@suNxTwk@xE#lVIN zngQu+%2^HsdpvOD+H}DtE0r7-CZJUMRZKJNWHPstoTx33&`VQkysQ5p@WoA1Vqr#JJJON484d*M-Vj>=^`K^Vxx)J0kQj+&HX&jzMsAKde?rJ zANDtAWhIlD<7&U_nB>FEb)M5cX>#+u)kp>V`b#Yhr><(U*Al!CKt%=WYz1fLVC0Y) z3sgEwbX7=mu08rwXU{$sp;-Y^wH%tb0s9v2$Jc^8G0*xd+y3_^OYn?ZnTF;~VB|x_ zg=xv-h(f>QdghBidef312foBvy_W3R*PObiH9wuzI{-0XZ$+r9HcWKR4AocIl0i43 z>as@W?HSe5R(kv@0W8b;Btl%Ak=ltP1}P-am-P!&0!I{|@2n%}2iV}3?)`5pUNd|A z4jTn8B9wjQ?rd9;VTi&00w!j_$zBohQoL4vNas?rW+seFw!k zXzY&*Hx>E^Bs)wFN1E>dgWs=y@X>hzy9`Mg=>l`wzGd^?80);8%5SDJa2D3F+2|s~ zR+%AnZ(MWvi)TInJFNoP4=x|jG=ejrzhlpSf$Q1q#CKLyW+b38boeyd6guo_Xs&9@Uv^>u>3GHVi60gC#xa~~{ zj$Wq`TvX7Bmn6n2Py*DQPY?dqk!+4HyGWc1sew9t0b0aw&-Whwue_)%SG^a&_v;tr zSG+y084=>`{Th0?PU>3LaN^Pev&Yf{B7kU$<>VzNB}hQo5Z+-=j%0u-NQZC%+>_Pjy2& zY7@QXTzqc&nSE!WJF?CW!14b~aAB)7>!kzru3m2MlQfANSWNHCRh1Y0})#Ys@QW z0z{^F`GevS930%v{c;1{ZJf6tS&B#(L9qd`y2rj-T>bk)%Zb8K3dF9@%DffO|4Z3Maa*}kKK zdkV>K`tsa3oh(;xXOS-Rp3Km;;=e5I_=8krB@fk>&EAPrbtHfg^4CN$fOE#GQ}mUa zT&xKCvBlM5`>zEqy9pqBEACSeS}uzF;gQnv`Oj8Z)!PtT?L|6)CF=w3`b$=V9+@Y2 z;ow;@%9{-PkhF#(X(cn>B3G__B$Rk=T(Qk_d!>>~U^V`#uTdc~`~eLtsvrG)yID%k zk=GCB=kkyQJmROzBd8GSv(IhJ7%?byEB_Lc^iF9WzIAjHWsl=LQ zdE{9*fKKvh(s}ku?D$-4Q2QFoF9p=35w3GI+?C+yHg|%zf6sv^hh56PD|B_l<Ei2eNe zWQPB75&&u_BzWT)8KsII%&}Fpd#wZd;t;90F=H`7c0;`@p(28$$u*9Gdqmj5m?`T5 zQ}d@|$5cPyo%<08pAuio*rtO9U0$Un2!wW@1V{Xq&(7u{RRTPje5Y;x_Ic=79s`4P}pS=JEDan!rgBTHK2_*~B|Q+OnI8 z)!;RArNsh*CnpFRiL6`)W!j53Cn7%=VrJ1d+?V4PagW3ry2EJa(b!ReQmClwXQbpV zY3g`N$!v>UIi>h(QE$v;I%#C5iW{vuR zuVrkcrvT6Xfl<`YKQkI{5{_)`qX7-nUGcssJF-=32J4ZliOFXZ?zPR zUb=>{Mw;j*e#)3wpmF5WPsrg{ADrs`SyS`_fLrUFoKoA%yWfp8XGc!dyuZm_!{2Cg zcJ}lq{WlX3+BNT$p*qP2LYXfcl!-_saJ5k08~Q=j)VGgGoYEtyl0XmlE)&rpPp;EV zv;Py@%7g^?sPx=27!!H5>viQV`M^w3t>%A<9e#-H-s1XO!VzBFl;5H&(d$fRYm}|Lf zB$TH*rqrqHx^wXmne&bWd`G6hFK(2LpR7&B%ys6*T}!gNAN-)xB{LUB0bE8{A=lMFq`SO;tIm8`2&!S($dj2Jeo291J{Xxek=#?!L5%IScAbAKlri z>r|ZGG`77n>E2wC%{xi+7=*qOM=;K+j6OVIeQWMFTsRyvpKh(K2|jwkbR?=%6Ewhm zN!h2nyp-bjsYYLHgVx4Bc4&%3sw{Jno39VpkbBgyjoY#cUm_DtDt%A20L{rI;o+4 zRvvgR5N&x*mMN+Ki5?@I7sk)b7P0fdKgO?bV>dIxDE;2uv9DY&=RlyWTEq`BGhn2h z&Vr0_Hoffx`I%>|;ato4;u|j6jsKlpglicZH^;UgHX_b*7>TO1TQS1g2V?4=*4Ir* zb~kUeKKhI18oMY87_SP+#WoK5z)j{$!N-@R z-|8Fa7Nng7WjAWHB9PkIYYvhK+wcI{q;E@tZN`@s7vIF%O;|k~J`AT{QNY&vm@C++ zr!*o^=>%j1_Gv5MST`WaXPkz*(;024=KVgi;GJ=m=U%z`Os9?c;k~wr&zgdgAj9`R z!2hJuu%~JQSn6u;A+P!H=Ny!=X;sUDO<$8_EEPSO%nKYmi!`8b6+L|$Zos#K!m7mJ zL?w1$EXSc(@^W*t6`LTRYRXwf_&tszHSQ%3sSDM9-wQZ}wLO0T#BuK2Y!?NqylbP) z9b&C>h^*7YGFA(R&;7AvG4qK$w@$Nq@6mC}Vq&pGO1%^mydh-t;IgjHE>Jg#c9^CS zs3N!}_L-i-&^SIE31{mZGED77`|q_;ftha$+{74>@Rp3)z^LoNVqV9svhwCkIwG8~ z<OHWd)T=z#=gVP^#*6m0>@qWm|M&Edy*)AMu z_(5jsvB)Le>Zdq8@~P6iVa7bKI|yTS*dAygfq9+s`M86wB=zUt@^+ zJWO!yApt6U~3gZoSqh66a#x|m?A=+ol#+5m6-u4hPQXx$e$`yh=UOz$*P zNn~=fTs4+usG-x3zd(&Hf={jW_nu2+s(tW8xnk7ImTDC{CCmHtWL8Xee)6kPT9KzP z_HfM`<+up242xfj=Es{RffmGP<`PRxRdZn?gGEutIM`rMO@*h9ytHFm0~a@&Q1Fcd zRl^jMB&ZZe@2e&DQT$APb%2parMeJ9u)(qG1elosF%$%kz3!Xl| zLbw9(GgEX9OvdyV!a#+oI1P8|3C@$=tDfnza3?Ns6rnDx21&71bIJe-^L6>>7JlSo(`epSB9`tXJ`Xy$9=Ms9daVQf_Q`L01~Gb9 zOlGoKYDq<6uu|5FXfP49g05B2<&%z#8fJp;2(tj{@rh+#oWGpxK-^*#`FXAUt-r)s zu!`nWAQlx>yq%{I41{b*Vl;Qw7!AE4!w}bL7aK*?+QI&yv%~%Pc_qb&R*lUBD(8=X zs%r%z;A7|dYTP)ABEz1JUY^lJC$NF2r12NayqU9)*(+jCjQolgp}aRWPDxyxGdXLMUThHi3R{&^uKseNolu z()qPrWR*f#MT&P_icDO1H}k8U>f^H*KgC6~oFj*3qqx^HDHedsp3id6!C-^1K1%g|xSlix;mxmteb>Y+Jcf-RYcsb(m2ha{62h0{Oe;HgFFi zrD)uZ$fC14tFL14ZN$2Z@Ft0r9STd^XoPyT8zkXt0h5V8bMu=Z#~((V2BeaLY`+SM z^aR`FPNw;o@&lY0So{5>?A6<)ikS-U!zPmNA>VnWQwY?WrQ0S3Q*cx&i`mNL#TXEZ zm#I6ifpaQLhmQfwCIhQ!*B{!|By&!B?rjP=!ij6J5(%1=SQ%PQlp}J=gSE2c$Y5I zs{)3<#2U}S5FchESc(n?&pG_Ao%ao#39>f%Fo&vptL-h1P+i0SV8Pfi=e8@+JbdG_ zGm#~&>bRs?zWi5g8JyniW#y~A-IKm2L(xfoHBQ?`ZHCgBtYxYkwyqq!Kj1ZxmoET@ z7v|+bJJXrYHGB*bW+VS%G411GM)sz0sc~|nO@YfOox9DeE@jiFM!PWwb+J$?KFLiBMTZ{ERS1HAQd zE*ds?8>*3ye}H*xxQ}D3t&>;mX)hgb+))FhUW{%`Fg4gGl7fv14ho6TjnT(ZyhA;G zbPxCcbyyjP{SQgxX?>jGzfNHP)uvHsxDQrcNk!2MucnSw*Hlu~Qq|GYRKPk?BC(c~ z5Ui>eRuzvwd{fm`(>i=%|7*h;AP@KS!o7WU9gI!?tIfl2`Z)i{NUE-~a&&aGQnZ>< zXt$K6CU&*)8g%=>=Wb@>=P0hamY;Ne`n_HrRy6S9!!Ze2neS5`6&AZ`06SD_rd>b z|NgVrhqgGhrSiXh`9Hh<@2UKMvh&~E|DRO`2Tz^F1kHml7^%vJ45%?qVUw8e*^+yE$Nc`7be{ua0fj<)e zb=O~9e?;Jq#DCrO7uO#V_#^ROcm2inM+E*z{MTK7as3g2KNA0S*I!(JMBtCaf8F&L z*B=r1Bk^B%{l)c11pY|;*Ij>c{Skpb690AAUtE7g;E%+A-SrpO9})N?@n3iS#q~!7 z{z&}SU4L=?5rIDv|6kpO{O^?>J|Tz8JE9NQaexkf|MTnTkMG~Ue)+urX>WJuWk;ko<3Q5y!>eC;o^gZ`MLYE_hzQ2CMU+n?v9QO4>9iCzBPDr zp#Mf+Z%=nuXGi<>wrj0dTbi318|v$7YpUs2swyikmzR}ZDk&~1EXdEhn46QGm6?&A zmYR~Bl$b!fa6UfnT4sgox>+})15x;P(m za&)jK+1c7yTUlC|o0*yz8xai&M-BA#09_qzElmw|HB}Y7vXY{Lyqv6zw3MWTI8F>J zDk3Z-D8SFh%frpZiQz!Av$3LBkO(+43<_ZagANzNe1|}x02WXH4mVeD9teOPFzz#d zLclK)2^hMb>QQSSW)jKtiY0_A@V)7!OSOp)Ha+`AGc>Hf1(kDdj&Cg2T$_V^veBNn z>`Jq>Kjt1|4xIPlL}7egNNBrg7XZv}Aqq|PDI~E(0l8K}w$&DHr@}+|tm#Cii_zws z#a1@KdDSjFM8~u+i&&pBfdAATAPiIBk1h&7Of%zuAvMZ_{ZY(-`QRM?6gH+_mp|FYrRn%Wsj0hjasrS?)dNY)jukeg17RStFF!!qFDQ_cbTBV-L`kz zB_|v0bMlgxzJS`%XaYoP1wbh*c_RhHX*lo>RU)CAea*mQCz_73Imq$Lg_FW(Kpp1*0&kW-3!am@o&7s12Wsie=ZfIOKhg54*&Qeqe z5a67teSz z+Z)UAI-Xmbg>6OIPZy+?y7)=*as1ZA2AHATFoR-jfc3?jS!T9LPcqVT48nJj@vbfS(-P`FHRCz6$kI{I2gRkH^7$d zcFLVJq6lNwbbcoE9>k-)fGe*pFY`YZx{*08=9z;d_hppjgE~4+UIRSK%JEi-EjlCppTBEzc=s3ZI z?7v<75Z%X}qsJ=3D{CLTx;OZv?!d})tTUHelY~@5*~|ZEUgmg7Y!)wlCCkq_e4%s) z_Zp#mL{oR>2zZj9*YknxC#KN1+$TdL$}=Ry92|Xv&p_;%zrgecto??V+SHu6SDJtc zCm5(>s9(sm-js(vM!e0Cp&?+U3`Z9Xmw5q7kR8*CX(iH;I50)iPaG+-ImF(Zl`InB%6rkL9V0Q2|c^PtyciYkEPVeRmef-?IP zE_|t4bW$UaGlvpgukyxiKvO4*tI5!CO1$PxqY;2aGxCX8bIhQ09z_L%IVHB$B~GYw z6wisPzB5`v(+~^i?Xj3p;YrWQ3i*hLUCWf{gPGcKycJfLueLZ!s=jQaf;iU#vwlD# zF70`VHtQ&aJ4)Sa3$wbH*SGw_@V9RIZ3 zsh^>vqlYE3$RE_A&7<^ky3-P^>67N15_kutK0OK6hk)}|-grqh=xD}p22~B40F^u6 zB>T>zj8Vz28KL(^f8q$XnByTS+7;Ht7gvt1|6SKe`yGKD(BZ6}vEMv_`K;nw#d%8Q)tXk>fSO@aUeu}sGh;^15AtfSD_ z431B8$`W27ya7La(tE5^JMG!th?mjib)e~VSrfbBsvTgRUfQjvD{%BOVZsPRra8;G zj~|o(m<9EqIY|rf@zOy`77jE`n|sc?vZMdw{91%;S%XGZ_w2}XPjJl=<>eb~8|Kpz z5zem8-}Y-j%m8G1{c_$?V)gWecbj19YvZORos8Qj9G!Xlcg2t5kJQCg4@!KJ2g)Bo z%lemM6R>vH|4`IUKXZ~@vni^0G?q-qF(K9h~im7xQm66P*kEY_P+3f@7Nv zvYc$swR_oGVGoHD{ph(_>9AM=N_oTwAJ{47UTY@0dziyo)cLzAN zcbhN261;DaJZ9TQ(_@aQ30T(HlsKEV3I*#wSxV-9W`t7bx~~h4V%6U9-`A8wZeYUl1;j0(|8w_n9LCcyZZpjE{L>pYhZI;+rU=(Vqqv`BT)1xU-hhC{tKr*R-D z$?G5yLQ)6$X(km#I}P|jIe58*=lIWzs#JPe`xaq%!UPghIBFjR4x~jOq9BV)!ii|m z=>qOhiJ%;20p|AjCW78aaU_ScZR;^wIUwX#g5bw%l+llQ5aOK1*c``_>D)4|?Wfv! zf{xQEK)cqKub;E0M7%0ItB&|`nD9|OoX14-Y&$9537>bGm}EI$K zCO<%m9-cF_-I4RaN3eTCIhkbK$pX9WX?&>~@e=Amo5mC-(P}>Sa1iEvzMka+=w!Ec z6bx}K4d!0}3xUZ~X{K3UeMh7M!E=+$VV=hy*zab-r#Fc5QLlqdmrE?dCrK zg+Q;EjIQJ_X_y&^B>Er{A_Cg^Ud!M9<* zymm2oaS9ROTmK3QktT*5<~iVym-hvQe`fo5SK=SMidm${2xsb*EiNR(`8Hb5SVPj7 zlPk$yOn67vak9{e$;@s}KPcw#XEec|bnJOS>P;DmgX(1iTYP4Iilf60>&dd9U{07% zr~gKS?qXx07ZrYV9DBULHRc;=O2!1#rDDA&M#LtJjTaDz=aXq@n>l^<9lnnCxLr`* zQxnrLPoW)6o%5HpQyU}^V%)J%(Y6jvieHHw2v96I2c0uJQ*VVHx%jJ4>9vp6mospd zFy8|-I}}a!*|F>#FNC(IpZ1S5%hMCi0)1xhoM68Ub(sD1)waa~cY?ip!>TYP?px7i zJN(N%JerSLJ>jJ8u&{IhCqQTZ^vGS^E3NqRVFq%JD=-!DDArIXW$>$*OE+qL^N#8@ zhn6vX;|=Y|2-7iT6iBK z;xLS8yrT*}sZcBJ1dZXmUXq&Lt@!!7FP!Yy(1T$8B9Yfg2=2jq?}ob<=HA4+Th5gy zVq+V)ELqi{Z;(#NMCCNDJTG77OnVk(&U*GTE_VQj!OP!+Bz;Xs6Ia{NrOFg%Cp%q{Us@}9#ik^G=((fcgsN1YGl z1kS56Y6RnkQ66oyIOzG#^?H%}V_2Ehg1%NMcJ7P&+9OrVVe+GP$KhgrUlY>yL#T!; zO3{au!~oX9wMl(gww26?BZe-3x(ivU4^J+C1ado*_}h>9!CaPIARIKukAz>9@a^FO zjD-vR>c>J?R&;b8oFkgl?sT|Ypoy>6<Lje~uXC^AW;tI-1$v zETa~{$b~`u18-wX8WSOIjui)`JeK4`6=p6Zb{TNJ7QfzBa?L8|d~c3GCA1I0M@U zL+_hFOBpbmu$G@YQv1}5$odY1AG5)RJZh<)gidmH*RjO6a4nR4eC6)GN{At-Y70rs z*CyPU7;c}xRZj5FFJR|dYZOV<2KAow-Gd-EPAMiszeK@y9eB9KPC!3L9pkkXa5qkI zgCUx^3$PJuMj-T4$eY+AoYPqm2i4oX*iu3h%OkcdWAo5`KNxq9H7O{5`FcSThv^8y zswq<=wZF~HoSAX@XZLkdXK%T&uK;wkjh7arnPSIKlClcm2<$GV-^P?mSUZ>My8s6t zkkH|bWOGi8XC}0+UcH2cQstKZm7#OPtIJbN4G=fya3nu}X=B?ly~N9<_ednd>*8Zt zN6L5Gq0~x(Udj(;Xqi5mVaUK8eo+#i9gi28ez#CT!O-rZxzd;B+6*YYekq05@ zt7>!pqs4f(wIC42%A}LIgxrrfY1kW z4o~JiV_EkI-6uVUc&egYal9_uNKo6mF^4P3w%xARDufWpoGd9q$pglAkEP<-t%&zd zJiIaNl5UY#2<~IKpF)m&BN1O3czdX(uxaq>fvsF@?V zd7xJ#AaI_W?G2Jd6A~3GPOQ9nNx{yvC)y+xnnp>O{~2?wg?(wyB){J?#F`CA5_Vk# zQ4W)5JuKUd>RE3!pT8-D3}TVUx36f=hr#7_6b>UqMy~+XO_lO=|NB3szGMd&qb%e`$So~uUWdK~LopZm)Y>>IFi^|w z>Y-`vp$}*Gha$EW;C=Rl#hZ^h6mr-fAE~|uS?Ln{9LIVg=&DztpkI=lw6pZ|0!Z)M zHEL_IR)9jxduzz=Yta>7I*QH7g7AQcJcniW^m9Jo8@RH6c$XS*^Gr1FOCL3p$cX z5y|d9?v3I>C?Tj2dE*${!#Ljn=T#m~2FSqIzyIWk_-Uvc?(r!73JJa1oc7SOBi?1T z3c=ttQA3Q-YmX0$LCDuDhoP!49;ut`OgkZ{Hy6|r;$a%lVm3E{esxt1kn2o5i={$v zdThvEZVu=e2mxPys0VkSUs4)S!5F5_F*7?elQUM zCn`H`7{X$mV7KN#kQ<8b@^F`pE;mq6xq-8k#-p>wS(2Zc zzos(Z+c_I=D_c*d?wHW6cFf9v^Jeu|sHo6c+x)<&=0d~P5es#`pK-s@ARa0aSE#D{@r?K&P@l$2TWep8$a&)#Ut}WaiPv_oAjtk zpY-PMc`|SzLb+?Zot)kYvqk?{*3Z@Cva4zn;0KQ1T(Ga7DGKk5q&iGwh51@(c%&Jj zPUpLI%oocnm~#^rKhDNEHZ!9iak=t-Zjk%PV~4hZaB`~ca{GOmD~}$1 zwhnA{C4lA&@(DW$Ksto+%G_AwsFlwr!y?UtvScZYe7p#gOKaCzio8{r8=&hBhj0zC2)j647QG~MjZOZVQ8p#KB?Nx z2c6x;`({c?LBBXBNv-XoDZoJ&BOTDCksNNN1M0GbjMBji=5CV%o+#l0(+js7#Av5Q zb(DJW_Dyd%oW^QJRhK-hl0AtgvcWY1Z~|CzU;wFkoDjlQrRDJB7G&-s66Cr2?+YjlV-T>!|rtsZqa zH6sR2Y09_{P4_sH@#0JeVEu+YbXRHJw*SR;nagRzD!!LfcvE46>&^Sd{iOUL5$|<2 z);nHABfPo{y+!bvt3=u4QqnZXio@&oL&&2$>;P-3c4r15eZ^#2RjYFp48J7{zZhsB zvnmTDcZL;*w=dIea5zS&JgyBx%0mhf11-bzzIk7r)^)QMms<{F&Wf-UH`M^lZ~ESl zDAmPbmPWxnmkpK+htoA&6Nyqxa75FS>BFse zC932~9zkkMY7UIWbltn{4VUdV>b`81d#S`;T$ki`Q$FX2Jb|iC#EOAdlUAf`Yv}TF zJZde5+>UPV)3XLw2{Mkk+7dJXQUou_Uf`Ja-1(z@8Y;tq3nD1osLVS9yb%f}pJ zVPb;-IEn3J?$?wHAH(m+x5aMx3MKe7A^L$S1p`Sw;_1=8?``)Y=6LS? z)B9@{Rr#ny`H8u{e@utdbjC?03^$ncYgkvmq_IVSB7gjx-Z}aKxN9{2G~ZgYRqhLeV0L`mEtp@w-XUyw$%Q zj2$A|Ewth@G^p@aZ1!1iJ`(OQ`QpfArqX&DZMs>kN=lD?(McucdxespEdzMra8O5Q zSMfQ_{O2x-SV3Di?VR+lK}lLoG%d@5d{X8cVkd@sf7mM{z(Z?J%?z1m+plE6VT7+J zmvKaj_*tImCOs^)S12SXc1Xc2d?F<^qL^K{b|N3+xp!MvWSruKZN4jW& z{U1OMSdK}#?_3BEs5EM9YRpe52M2V7GlRp^jcDAT;Q=|wfWpg=WZwk#@RiXy=Ns+{ z39VPYi&?m#`EH2|VI?}>yjS{NudjOi9h^hk-aJ%Q(p^s2;j%>>!6r|U4<1Ib@w%D8NP+?QXWsrzV964qkaE-5cJ8JJ&2 zu6@27GJ2ysheQv20rY*I$}2A1QbM+zAC}n9q&X9?$F8odDf}!5mI^wTwU~Jp1A%KP zs|y338yeYW0!I=9*8s?!Ue1aJ%AyY(nc+)lf+fM`YuQ9cDr`z<<&A7uvVhdXQN5RPfr?naC z|wFK2b8A)}HJxG~o{!WxRL*1!|o zB8EKa`BXv1t8^7CGz&nX=iS!cO#$OiYo>mA$MPK*uJ66OSdgRmYwRr=?cIXnUr$x+ zRpbFKYy^l(b;a;dGq|3Kc-7uNpzs5T>1lOfGVA-zG#4pmqtt7? z*kN<9Gy)D)$|JnmPwo|A`F@+uW<@IfHd`YhJ2zo|_7}mz$vQ3D>~f?T*}>C#LK?wF zDdXGCH%MUOA(UCpX3Tk?P$ynhm~>5q4jRyK5VHSZYuOeM)eaPvDC9zv<}HW0U$i+A zAv|gCs{lr&s-e0;V&m_1QPXU5E=up}LCx520!QonMC>%8h79@u2iy!FC$ql$J;8gG znOkbq*?fbmEeH{lI`-UqfzX&=g5)4jE_O;e42vJ;S7v_+5FsDG)iwT>3QBX>JSs#6 zhtIX|khxsZlAS=LTSzeO`u&q7M2 zBd90?DH`}NC;K#I)}JK3^`<^VCf9XDIL;WTkQ0s=zo;&$Y@Dk16wWTOI;5#IHh8y< zC(u?i*!DxveHkm8lgw)dJD8Tx7cmr2ogyNQZL@?mNUGYEP%FC9hQM4r9WtEt=2bkb zh0BJd4iT5WIc2)S#4;XYD0d)c8!nE>_Qufskh83u0bcv+HVF=P#~lpk@##}VG?b2| z@??^#DJn@|b)jvwf5Gm7^=p(Sz%(mXV2eV?VVv^TQoB!U3t4G2VUN2ec}@X}3MToM z9N1)~im?LLj1Rxd4==G*lVJxIp+c2nfVK+lycz%?y$ou3EyQ`_#C%5UlV4rf!yhojMQR>{oMe;)X zyw-IID|nDv%xO;2LG%4@=;z^LNYPi>Ro*E7QM^aa?A(y`)-EzG2ZA&Hl4_tfBzSuGJDdXcL-I^=qM%3cq)FzaBFLB>J?=ao|h1DMb#R-4pI6r zC<6Y6@vw@V`RL1J!(y?Mj5tp*61Z(j2g=f}PYgSEkJbe=9OXdS_g4Ayyj45{7<)Caop$|J&M@?op64l-!ZH;}wp zOs$=1cr}}jO$(Z}Qel93=u6L8Z3m0`p3Z5rCSh1vff`0F&CG`PEeGrU6UAKdfu3C= zpqzJGx0}d{6g#cW&3{CAT=!^v+O-h_oW@BnZ7jF!T$wOpo`5q=S|{uX6Q9H}Tm$pO9X`IasBeLh~LG|^4=V2kt}Vce(eih}L|iS9vP zBg+T+uh;mwSh%muX^UipLtsLHt#8U~9Ht)8xyarfiXiVeru8DIV(63eh=Me=*RqFC zbH#NgSvYx~X(TYgwL*T*vNXt!uhU=euR4yVO`30t_SUKul7~xEB@P^55hXk<75JqKFvEr&aV-JDFR`A(QO)$XWiRxUVMIVNo$vK9% zuLc_>oVl`%@ZG-Zh6^tPcxR-0XWOZBVj4$A%*wDDr+5i6P2xng;NCNuDhKGRI{S4jmyt5Bb8@7TI67`9N`i6rtR=#Mdu55t zHro=Bv3eL=T54%raF&Ke5tw+sDvW4ydFHYweRk)pyS}~)|Kg7f4?c&fQUCNHAF1W| z!0c%rFtrX$Nbun2x~T#*M@c0G6y5E+O=>VkPLkZ4JId5~1A(91w%k}!XQVfHC%~{d zi70-9?LgxFt*G~dcpk)ln8Pl}xZu4Ic0)$qFnb^O+7=yj<*6M-Z>Gdd#3e6WJJbt7ZcyyYS9fRlAbj zE`7IqvAQV!0V#F?b!7=lyeg35C3a*AlbkloSx@tWB=8M<2p|l*Zs(jJ)jm|kHq_jg zmS*Gb_h}a?1=x@%FfY(WV_4Eb%2wX0Y@j|!vP^WeugD;t8QYI*T%p0(&j1X z%()8LDG#eou%b{)wS{vqQ``_oAJTxW3HBr5Un;O~DknHgI#?Wa9R3E=_9W5Xu3Dvfi*m$^YvAZRDk8Wc}%ietWtTIht}9qxMsg1OH6pe z%6s@XBV`0;c<=r8dOef&CF|jCE?TRA-i>tcgIS_~$oHLzTNRViW5vMy{R^fa5N|?> zk1{aeTJ;M>aKlI>4*{iw&ZoH*WX(Y;ZSBHU6g(S<=^2q0-mZnZeL~Si~YHoe3zOFrZr;#>M zz4{BYC!_WX7)w8kvK5899Gy9Hcoz7=KKHS!JI#}0H~^lwDUjaR?fAJg)1r;Rc(PRI zs=4Mx3r-VS$A=)<-5_V`1vxB+9=ac_)SvB0ct0O-c~&Ji*$9l48W``{JB>`TyhN5`!FYzs?_a*;4ZAn#RU7?Z3`Lz6bDsy*s@gvpIitIVZ zIEK3fG#=eFaBcl0Hf~i7dd|w!c9ZKc{ek#PbKPMPcI^2B0nVtbuz+e1QkZ2n6G=OR zQmB816BoiQRwdo%;EbdvYrx z*=)p+cW>QfC1%GY!TJ0-D<>`27h8M^vh}YvPTz{rBi>D4^=6t$yYd>61)db+w(`)_ z#mhZJgr^JeyO|7jtFClt2_pp-%+JtL_>il;B*<9%_2)&yw@aS}<}&JR&U)Q>i3l<| z3%BZ<4|e`X7oER+E?4~{d>qgw*Nn@=^pYRjX(%1Z$~t2T*M1`2x%}D{BThgz8iH1x zAw&UM1LUiS_x`@yMt+}K$fWJ5!Dlb+8@6>czex4RZ$sfQ0H|a7rk+}L-_Ku1{W6af z87+KX&ic&`Tqd#%^$zrN@*t+x+JqCh6>^!Y?`$dMq=6UU^VUX-ga8?n_?ONqvVIn} zHzW(6A)Vmr25A#CeH((0^@ha{OG?zA2_Q<J3tLb@SE1uJ*k5d6@4|kkj)f^k7K@q+*-+^eO1Z!}ezaTf zF#v5m9w02c%5I+bMU24>6QxpqQit4bg#|#&uh#lzv?&Q_n`|!0Kg~DuD|g~!3KVKH zpw5u0eYe;Ovs!aEIlrzwOASkED|1LP_2FfDXnN9O2Pw_z;XDY}mU-urSZF<01bTUO zMLwnkxoM62M%UQr94V>W=+;^jp_wF zZqCc2?eR*60C!S9+(ug*CoISsiq+`cy?lwxxD;p9xdQUQ9VQPo{&y2`v}3v!5Kds! zf3KVi+^7k%F50*VuF@23O zl4V}HXk2k$*;hAD-?;tHYWam;4As8oHu$xYfN$>h+N>@Xq?QPFr5w#rv|oI;3R&oe z0_Nq1y6oP}(h)XnhH(~^IvaHnySM%~Fj3`YF8XUCEK`lVMI(7jXg0t1 z(alBbF+!|aH~VdMZAUEJd4Rh=PYII04@V`~SX+}Y9EQI(rwf9i8%NTl@<{~lhC8Z0 z()boxyc;Rhe|&pV6}v9*>r2mu)=(K+lEL?1`76yw;A9pb8_Gdz)N4{5Oa>s~^u0%H z>#KcZ`J$k*itrTp1@BoBixWO#abH)XJx_mT!b?CN#wUn;WIt6>q-!BZ82xT&bxnF& zw{{KJN9hZuij;8%&p??~WUpx~402!3V`sYw!i7@tLh*D$dVal6IU1+G=&}8h06&f< zEIzNc?GR?ADF7<<3zuL6k4mFL98$`a!pe6HqWbTu=qwQ3>zd^Rp45N7%_9J|EbT~A zG=u9q{ZjH3yuI=fNs9ZB#1e8glO^?YK*djvhpBd+hJ4Lt+dtfnon-@le|lPrKSCD+ zc+JF2gWh>T@$qvfQ`<+6cYaJvl>D5B!Z~iVH%LHd*dkG)152xNt4&XnS4$sSnJmAw zP>R8EzC8SNvGhV3zlsd|o!L<5cTM3*=`h9cTrJ@2_gwCGxJja5%AHHqb53WB`L+Sl zp_=8q%ac|+``_gCrEijmj6QXfs7}&I+n0E{KSl;5E}Nbfm@iwn!t#G#^<-#yD52IB ze1DbZV8#+ullQ-M@a4HFapLBj2PgPQtRe0mxlc(^Q9AYXJ-KB4ZW8@F+>F0MJepHr zw{Ye{r!L7x{K-oXF-;lA$4U=DEbIXdImx<|(0&KwP#@I2rUid90UpbM)%fDX1J&yL=~E}xD)A;)HrtrPo`BXulXwN)bKEs!I)fy$e&yFZx34V zO5?;exXH#SI~ztoIXRNrPN$36qMfdE*8+%|fEqS$ z*k6~|F{$nYmj;|U1G0;S; zf$u%B#Au0$>8J7el9mh2CQbaXo*5I}G!+Cs4&lc>b1JXv?>3zS1*rc9T%lx);Vnk3 zhbZ>ANM*IEgkX(_c6`qS@c5F9V!z>M$qGuO0x}iBQ;=sCSa?!ac1)BrJ)AjHlGM-_ z2Y83qv&UpZY!m*2D3AZ>!8qQdU-UH4Q|ozhKUt_axyMDa4BZ^+e<%%H{BfeWy4R$F zG}B!82aN+UT5qbqtC*mvsN|{4T9rxph0>S2`|Ps8J0NE3{@mEye@0ZPc9N!^i6l3W zlaYf*O{%!maW;wk&}g@tH#3X5rnODGo3SSgx5%EqKX{m!#b&XW6rqwzl^a*#0jIM( zsYO+PDfC4+CU7Y!+_)z+>|5SY$b75+t&J!-uv=%(?ejS=6MTD7!xdq(dls2UY`TX^ zrAw}Fuj||p`g}9+?{wVDe&wZ^3A+{(d!HVQiW`z*tf}rfIThWMf38|qQ&iMwtF>ZT zNQoycxq?$awK8vS4<**8vuJn5G2sUCIVpEcm!<=FBe_+s=5k*IG8D*4PkGz~VcqWL zJl)U;e8bG=C-7PY+hL}*{J2|2$f-~@QIftP?VoF}QL}@sltf?>;@SpF~GSMP58l1SeHX1i6|qpRex7r4l#RrA*aO#;S-lx$H#in zoGBXt6=zCSNnOs=+lV@YStfZ zBA~_}zGF3c3PX>!NH@b%jqMYHUOod8UH3>FjM`eni71KVi<>Z(u!G(!3EPRKNZ_+; zEs{?Map@Q@;lvO6-)yEWY48#BPRb`N$b6O>=5fL#i}#*(Hpb-jV*=lOlPLCI5}u zN99AGqcv{FL`@6H(CAcuYo=l88#7%P6gp`0Vg$7K*@JTr?;0MY?)OY7KWE%bJ;>1h zl`8gR+S^tibOf)VuBM8YUbM~Yc~Rw(;QJwd z=0h14miwbKrGf#%+EfS@cd#qVzh@FJfnH`QG&7mswcMEXKD_!gkvy{ z|95j?3=`DdDx(&|K>@ejdVeN6M+Ph_!oN~B$M?Y z2jdyH!(X*qX?EaJ1IFbImN*0t+FBvEisKjBqu=b~;bbH&H>btg`O5#YglTeJ5^f|; z()?a|W$D@yL=DPCEc1g|7r^~4PpEzZhA*8YwD69ET){T}0oz&2ks3iO(uc0;bKz;w zcv=)Ae$ZvAN7F5ChJ8YnDP;PUTt9@9Xme1>elhE?CdEgp5~&px7GhUIQ{K@{xMV`< zOkh49TfPbP$7CVtpe4Ez8rTb#JFk2VP@yPBPyGurA%SeEBL%}^<$9p z2mTbnFwkyyhDsG}34gwUI{PzS*9#f4)#V753jT>N(`$LcDax^>-G{T#C6P&hwo&NK z(X{bN^n|sFj;S9RQmDQ0G3_1!EOWao+M@ohSNux@2Wlman;VvIxc*&Q6RpYw7zuc! zKZk!$t#iRFh?Gm8m-%d4dCFU0O%TFfE-0H)y0q-G2#Uu~1d;oRAZ^`!_Pu4bdHeB6 z*2@jE(%M(N>ab>egLqLE(N}>sg*$Cb9JPd>TKKEND`PS#A8aT*ne-OYbnK@3c_a@d zB#=2gAr_RMCSTP;I|bA>t9uaWY>h4Ji%fd+t@k;-GiQ;Vh+Dx)LUF0lGBouzHbiwo z`oIK0wnIg;ijD6n`;}h6!Y9=ZMN?}n#~H}cwJ5Fd73G=i)qdm5#l0G67BqF5ve<08 z_gKh=Xdgp~iUDp&(tT&v^1R4Agfe`CLZH!QwzgH9oFuWw+Pr83LpXpiMY zNKx6`8`yVwd{qwVk=2yu9rgBZSz(jRk@EL935QU@uGgHjbZw|Lck!pPvn|qujlq6P zEP#2Sr2kt}#QfOTMnwYaUXaN^-rw_!J+eL%c^+BkKDOjs#ITcEVa)>@*9aWUYMyFwABDeq6e64S;$Hw0E5zVgXEPLbRjZ##l&(1Nfq&uGuEOI^4*Z%k zZ(J&P*vN4jL zC(82^pbYw*$ej1z;^AS$Gd`z)*N$u`&nhiZ%;0X98s`QA!-h2W=uFBud4c)h{6=%# zK!L||axQ5!@C%jlSl2nF^~t+0yb|S@?*nT=JKR!klYva_W{dTHqU)+J>PO?KnH)@< z)zZpGzMpReJw=d%vY?{V>9+n&La?A2k^h`=^aaAzr)qP=mCW4bGyf?pv^PgCtx>jFk z;@n`?Eje^qy$@4Ub zqOq*vSe7<|VskP>`}#oBgc6tomx}m|r{8_R_Bj-My3iOoe26^CwLS5wez4zB53Pb$ zrXqN*RaF--WSd4}$I~UwBe<3c&I;l?$e$k~I6j+(K2tw4!!ALZBBH&w3778C1OnK!ls(>PU zL@zgsi@%N_D<|dasIGbb+5wxG>^_b!w;~h-xIx<{y5or{G7WjvpFy`Lcub`B+h5%x z6SzMlb50XU@-rOU;9DksWBJ=G+l(h7hgT+df==R_841?-N96;r9Cd)H*iN*YBv)BE zH!@2;F_e{`prbO2B9gGu7J*qMwn2>=(O&a(i3S27!@&tYyR_@Kvt)Gf7eKz>S9cI| zuf?MBt8dYSE!P5J3%R8Hck#`h_>Hff8(3i%PFCl8Z){UJ#}j_K-4)9G-ygIUG7!(Y zv~s(6?pAS?DB>|g`ddwj9+zpe(plfjP{6n`TsoxanQ-<`T^}EzvItiz8svs=)P(u> z)o%1F427i56E7KVzfdXIQagPKv3g4gVq|m*>O349JshP9bJlX0Cb!q^9^U&X%rY5# zCuUxMtfrgE2^DvIrFaF|PDk*w=S41S;)KG~lDHak{;?z#u#fBR6e+S1XEYq;qV!i8 z%w2PENVGfCb;q6y4+wwowjt}gkZ+2z-G8m4nbyqKX6IMMN7f}=uw$nRW?j+66qdvn z7L19I>@K1(!YLH)V)IPS%O#B^?}q_CR+lR|%sWc~;!;P8d>k+3Ls?Wu@JS>JE%{5N zri-APxFx)8h6vWP5;mW338Lk4nq*talpQC2{&$8j2NSLE9-+pm^zrrKMqh#4m+U4! zA;;`E$w0R5i9}*>`|&wd&_=n zy+C4KzwcbPh|iw}O%1b~^$c%!jpYk0SCskSZ8ze;ciwb?g*KlyTD5RjSo8%!!7p>z+V&9IspB4D5V@%%@{? zg05EDHGF(n6pL5=J9o0O81d(tL^hn?@`JqWB!Jrcra9#*C+s-oktJlFTtSL}UkJA1hO zM1A2OrD9>VbJR_{~o5xaf+{pC|`FN zT}=FrTVMC)x%6+VBr_$awC%@6RhUo_+x_xy0J`v3HArfwgkKQD4vo5x48u{AyuwVE z7a4FxA+C-z3YU+#{cF45K(8RgUVKc$nyrbcB50i7+ok#IcLxe8Lt#4R$ucgv#)SIj zH*%dmob*rjm=0|pHS=!zjFh~l;jQCinBq*9Vb$w=yr9lUb}Qhv0B&scIT+L3roqg?#PCC%|)BQIvu z*C&nmBaRInz9=OTk6Gb`pR9UBzMr;*p2+p5t}|dB!OGH#fck3 zd_^UtFgf!u`<~v5o(Z!v*_3RNw$6N{AbwGBUkLSy23Gpkd9x{Yf8foi7(7-ilC!1d z<6XfMQ?3uXIl!mCirijZ=ulJ!7HN@}c-J{XXPIL-ihthEig3|wt zrn};s>jlM>&|8ft^T(#x`7%rr@tVEfmNRjqVfq$WmRIu_Hc)*h_6B+I<9B2$H`meH z(}ehAK0X&HQh7}gT%`&So z6^XT-(WeS~bhv#W1m&ftq`v;zb5R(lz$nc`>CWlXj31nCXlIrgldaF5mb(N@i5W<% z0O_Oc*+c0$(4O&eqX7m{;g!uHA&83o5VQK|nk?h`U_Aqn{Zb^Mj-05~tOYl9T>b}M zsm{(>z1U<-@V)G-w1YDVnzU} z?pr<%1tN=Xj@yN;%YfmQfW?}1R;rw1)wVQw=6%+vY2op9S^pzv_N&!^3D<&n%_TQM z6qw5%`lO!uCfKARlIcyZ;xY*?#oB+!>3BDG7McsMosVj{J?c4#Z`<%0KXial(RSk{ zIlbWMvvzNs{8!>ujQz#@^0c)HZ?zF_-BZKLMFxcYes4b6UT}%3;}nfN^{Y z6^R(8E9CY<|eW4wj9zp(ye7xC7$K&6nxrIy1pi>Ez%%};^53Vq5t`LnUwyq{i zzypXO(uguh5?kG?U4%@ez|=LRjN%mw_4>w+e~jC-pLF}T%e(db3`+r~BE9vjDcpLC zfRQ+p!?6eE0>GT^_TYR9XHh~l!IfYk}1md+@^HbRT~gw`MlxRg$k(!X6t?+ zyt$RASFrWuH52aI4H2V)uIfPO&WbU{>eRA1_fz@w3T2YbQ)9&JgFaXI353cCD%>sL zxtInwZD;7>gw`_>)C+XUQXXYlbxcNq4I4RpaBVhQmh+9k`c9v$FFpTxJhiWl z&cV@EnGh}MSVcvfV>a~9ERXU&?5q^lFncNgC`3rt;$$vF&-4${bOQ}IEpHPPi4JKj zWgH0JlU*+R2a@&gwUz@5T87m4JQiqD7O_?uC0y4(83}oP>lEU_{c6l{iaFhrY(inLzG;i*{q4_~wDyjn7;!S)4sYp(yKubr&nQmaGA&=p-gNEZH>POX% zTJ3U>17;HMBWOwstpABdv1QqKL>##uxlZQlUVwxvM_l#BqJq^Nk=OKwr6>P)QQH$s zw9b(`?CJBRJ^yOiQ(QowUx?YKCklOCv0f4T-3}gXYh;nTC&X}#*2QCT^YTei>oQ#0 zVA#nA$|0CB^XSTtGE*$8ciC>-Uc4>cl z@DX2{fW51xg4Eg!M7Vz%{n7iL_{^4K;V}$;^a522S_QN4ZPNjG{UMQEY3BO+I-09L zxUd99Q997oslWA;Wx9ESPa77lH{$tTp>;KFhpk=0x`^nci8WDCbOf;9RXq_SjmxU&!z#s#D7#A&<;*$<@>|s_NHWYxk?aMNS={R}-U|?3?Q3nvu;Q@WAn@az6n@(2V!7%2EO!0LA zF1DrsGFi`bBSg5cm$BUMhQNW}5$2QvRuxgQ-`jkmf_sKQZMGRscFswX?iSX45)pXM zdj$?K82TBqmHt{ltSVSV@0sLSNgNx-P!#e)t#tFm4K#2H(?aI~9Nr`Y7CkRHPwtsP zG0RQF#X5Xq62;meT*EPH04=v;zN5JDPI3gJxLydxwsiZ)cG)L_m8dZ$r5vpAQ&23h zg8Cqy@~Ak}@nb*evW|iFSED?#BFhje;}!$DZ015h^n;yuq{Xaa?hJNl* zaR7y46AwYtrOSs>$wE2YqQowfQed(l38;&sgGPQObNdg`QX@8e)DNGs8Hgpj*~yX0 z5!VmTGx}>-CL)$^#oumXF_dN@aPLb5@RC~=fwURmuB1zNoG>hzfki6qhHcEqp;7HnA9EVBp7{c?@lN$=@Dn9y)pX`v*aH+V4h-GUn{ZYI7>NV9=)f=8D&w z*Iy7oVuSi*#+FrOGkci2MDwebFd?U`i?BM;Mh$>ZIdl6Y4iE z)^E9xliBMJpFOKfbz1BBU-HVwOCLOii|<;WA#TX6y4ut6Is|o?Xg_CgINgg`X*f(K z316ks(1&@ir~Z&BWsdmGpYWFowkcZUaNSkw)a>tg0|tnYcPRL4^ho2%v<0&}#6loG zAS;qD=~Ns2YD^5t!p7AHE-;VnC0-#aISt+YVfTZc8mD}_yT|e%F^bH-nB6xZ@d9VD zADz%`Eu3Muo=OXurBzn#4(w#kxhMbt69^w^bSucFKq9u2;Z{6t-ploQSMT%q!7aJc zxv4?xacycL&%Wv%cY?KJp=H;=SKS9WKBARl-NO*JTaG^04JF7<&9=V{cWvozB9;-} z-@UYr#&v`()mD(oC65Hlbss(Q$#Pw#RX@2=V15%EJhL*7y*6o(ediBv@iUk6!8tLA z%CTtR>aTF9HGWT&R-8k>KscWx1KLBiFu$M3@Q+S6%l8&YpW}G`uJ)#%kO`#^%Nx%S z-mxN2&oIwrSt^-D5h$reLcVY)OJFb#ozMi%BLMjfQSoIZk$!(jcb&!m9g;jXnstyA z`HKPL*AW%l!5%@5=!mbn7%Q3^=<3}O;f zddbOv)5(Il`zE~6v81<_gP%6}0U+jrC@u?!HPnr7mubHLQrBFe@vp^hdM;_^0QRlt zm!Mv*mY@6(FSUNNnaL8&&`oqgj|P-+-?~ZA=AlW+ga7$23HM(aq%eo$P@c{jE&7uX zKY=pud6;FK|M;L+l3W(oQS02+Nf|9!V9jM#CF2|w!>Le2;K+MQ7GjttC0rOBlPl%X zRWvbSD_-x`3)Cb)-fK)>^20EPcSNV{@XK~@i?m=Gp>5{ejXfy|18brIS4I|E$`d;q-bwcoV>uTT}Q^bTw z&zNIcHi&!5Xt?PocA9QAF{?hCGidHWXrxDeB)W~E^#E-|GWfXIeZw$CfF zeOAv)_(1p2AHsw#ZRQ1+)sg3?InX%u!+w? z4N#qUhVHgJhdjTPBv7i-?E=>FnoK(}{A<#CXP7veJCk zrkXB$J!U^IzE)MfTMFEreg$q-vY$>{{3w2UoPM0B%yg1e6JdDeXNt9lUR{OATZJ^- zm;6p~4Pm^#bS+us;4#;@2GwautsF6NbI5WS5<~{>a5vdDqU1uCKwnkP7I-BnX4eDY z0FfhsmLP?Ob%Z~$<;nf)Aov|Zr*%D@-nl$hno!Cm#vl^^?rS12U;MBw`*T0j)CDo# za&bH~BiW-tRBSSS7m0Y{*yZn_VYxWnA{N3e(0)JV*<;dCNKTJ?bg6~ZGZ zGY!7GPA*W&x~JU?JFP=eWIIbaZYpvpS*@jaP zyWwP%gq#OhvK;n&gURJ9{;LEYvs-Z0BoX8QBx_#LB@iV-<5?2XcLP$cKD#Ve+F4y` zcX0%GQ6{Ww3-fsx>$Sl|f5p+nE0Yqi_nC}+p<^N=e4Xu&(!a!yE2a65)MCaePtz0) zz9^v>rHk*YT$_K~5luVL*2S6LE*x~+5~SW*l=`GCT%KpMgP)yyfK>Q&xL=YoWoMiHl0g?;S1*n z^$p1nuz8JWJ&Eqem!!e2VZ&wK)21REsPe((Qu56vC%Ij=cbNt9uO&0yBQe8T61(bp zRD5qz50_Ii_nyvvkeH;)VpT>3CZfvgcNyYDp`|aoTuQG<3p<>j-a0Nwn?R7J^0UfM zx|Z6OVZh&FhbF*sbkqm$UL?&cs`M=-(4{K<`A`##Mk%raNSA6gx)PXbMRp$JFdKxn z`-#G%MBYr-KT=)vlH}6P1?Okzu_N(Q`kA1cT-HFLPW0nnhWD+wIKONsVM`lFBdk7Y zO)PYRmp3ZU{&Q{I8~u`N;KX;2_jGyLC7yXuw{1nA|H7Yqs=HqM2VlL-?e&k~*w12X zz;29}oS!Rf-N%MDE{^dc^<>&nuxH~IV zu9^El61;EzZsWZt`0>dAXa>x!q9^?mYePf~x)7BJ@ylbSpP#X5&44Wi#0G7WZVYb= zg#y)!4|cq=S3MHm=B8*rP7n=DV8nO5H>ej0Ri8{$81Sf34tR2JtgFxYmF&r)*qbM9 z&QguyDia)qmM!|WK_(Wi( zU@wbBGh&aRGVkNij9^c&k;ki`*RRij?|(NoO>KOiuISL47WY0$B(x|}04e5oPsC65 z{S+AgoNmwha#oQc?A&$oG&wR4(%$fFjHFsRg-@F3@V}XG_g9O`D&TOl!`1>O<fMk@Y8Is@>#r4O7v47C(TJ6iD zg^91?SwEFwBp|s@h)1z2L2*w9#0Au9=_1cJ2UgTzkEz#J*rk!=2iEEVLQR)BWGA!M z#*3$U-SwD85GL)N^J7Nl20%+AG@+nLcK*GBe4fH`eHdDl!t!H&cl`{}a`ym=-B0oIv+LN=K!?0020jDjC0>2LVD(s}t z$d!;l;3$;+2+k&(BEE1Et3JV|u?e?|5~E?ot=dmRA<5(-g_vTwR-m8f-k0ILj*lPRE8eLlkOhd_%r9!auJf1$adyd)TXrSb;!@%dsV(n(RO>dkD5;5WeEvQ&5oK zS}%i^)i+=fWAOC+ANe=~9k;G8zW&~T@s{OP?a@u2RB7eiiv4Apj&KAb_c9^UK(reW z;mT{16!Kq@aAg;z{pcjiY26?4d`t2Jkd_p!2!s3G%Ta=TQahkS*V2oJW@-dD;Y;I+ z6h{h;?8m!+K=?u(NrZkou-t_KI((sh3LZA4*pUSkpneL!T}|7*ekm7mP)k= zrPckDcc>8t`O*V)Pf--i^s}gGwc)>ZsCwY&mEtVlRKWMUO_o+bf|k^frcv;VPcFvo(3-NT{SScRRWyL<33tEbr#QIB ztM9i9F&)jx7ma<_NU!_KqVng-{!cPRS;uS>(=C+f6WtRORQs$+S-OQf`s@|P&c5GX z7vU8@fY;viy^LwPoqhXiQleLb<-;E|#J!{Wt992a#2i?^r~defd5pD*ICIbIvrI6> zkt1(O_*uwm?4rJMr{=96lT?xz=FPNt^8Rf<$Mn$E1RmRzBKpyLG?>}FWP^UyzIvO> zm&RCC{4gXD@RU9DF@?c)y7Nu_q4Nk>`NBf=dusnj=l--G7AoB6pK-us9SfL>%FwCr zR)eBJ8}2PeG62e<g}cpA^P#E@=+}0mN=o4y5ORWZTWGKL?CDSx#W#X1sv~-cYZOw-)%&rUC+YJop16s~b_FGr^iZn@0$~6BDx; z%%FHp&_GLJWqO~6Ztdix>?DKg<(25MT3uI`98P1cKzc#gEnMBq*=i5cJG(mcAdkVMKWll9@ZQ+8tF z7gx}u2Eh|BfOCIUdu5|RQ0}0WT~{xO;9SiZY-{*hxLEBDq5$qhy0Jwgmezg1bmd<-_o`!>pFRW&a16;I=)uh7np64A8EK{>3sCD;7bAj(v{n^+Is9p z77eR@2&*u_c&VG6-|c2D6mhc*EusUuMxJ>=!`5@9krGbDRa#l&b(b_qL6oS%+mD20!_?xPJw(zCE@3UNDFkb4Eh!(~71cb4VBUOqDTYZfUB6nTy$olEPV?=E2>KPtey-f=5LE+gKK}W^T z5}*~!j;mz_?~uaDJ1BPk)gE_VvEHzfE79m*iI6s@XJ)qTd?ZEy9kQisKHBEl${C@% zWzp*8sG3-M3vGdtHAbBf+JXL`W-J^cQLWa6!`P&}SO$EO%H=48go5+CL?PuOhP(;4 zfb$L+(V`7KSQ`CEdrRdqYhhQ19ZX!0ZSFiRB}_XA+~8s?sW@$U;mt)Z>jM(kVg5n$ zqtkBR3h7fpL$^sj@+?@c^gqYgvF>daL|E4;(YT=YcG*NU<}BIhnm`~qz^nW2+^9|+UUvMQ zm7PqIu`2h0C2H7uKefFs%cv77Q>d1T-xc#ZxA@YU5xw1U(n)H&Sue`+u@s07_5X!<3W+Q(Ef1K)$B$(GkKACXb9aZ za=U%)+1rmniO?hS7y)B42(&w*QcBNtXQ2dNyASQ;0%u7LRKfdLtIb+d)mNMpn zzr1k8XsW<%U0C934q{7O$b$7-Hq&5wX(mH9+c2;w=lJ1@+gibPYqxk1h)l}w;n-34 z5p?@IF{Jrjp*|75X((=fB*)#l#&L`gO&(@$?LJvU+ce+$9 zuhb5<$<5!D*dxE${Rcxq9MzSYd0C-qJ~c z7c9VggxHy5h%BV_4|jYOi!aU z#n4LQb0Kag?$>y}k|&0dKsX|BnqgUUD%@1uxUHig487w%LG&v$j? zK3dyTQj?|6$;Q2Th@0|jZ{dr3Jm!LOaTfQZeGEEmjGVOepsY0Y9^$?3xZkH&q;+J# z2hm_kNek0o=>vhH`~qvC>nP~JLe>~{S~Js+_?%AlYIWmX%jdP+AJZaLlvu65(e)_E zIn?Iu>d?5|aLL*le8n>Z);Q&p3ay ztRXq=nHLGTec5sMI$sL?bFQhZWuP^xcZc9#3oX-RUgp;BK#OdJj;3TU z%`$Z}S>jZ^@}6Gbw$GAz4E;larK4RS7~$?T$$tAB^KEH4H816D`2aKzr;NZ0{qOld zgw~?+z)B~VlKwMt<~ZyE3-vzbF&2+SBqF(EUL^bHs!fRUD<6G#`(eJSrBJDrZMaZF zEf@JIp`ZM;ck=>iSF57v@#5N9{D)MNt!*2_ASYc&SJj*{CR%c{^)xq!am{8p9of9| zRmGX1meTB2<;%XLA8Aa_aL;D*GhgcDg}v`}tk}owv04__HTRw1Jr*w-ah*2lBnIzkYyE6C{6On9Z8Ll-pNmtiQ2l**RgS^ZI zy#{#=OBM~GD2n_}F_qSac>tiTAB=Q+3U|){t`j847yeKlXe2X(@Pux1piXySJPy86 zkJx9wkhE-46Qp|lPG)!s$A+%U7;nL<>`e7_1k~KsL9G&Er=U5qi`xoYPvae-r!?=1 zRrOLmB82%dPZdn@xHtc#cu$km0cjJYKE>VD5-BETXZLCS_8%;xV!@sAdN?wLXs#VYi&1Qi8e{esm#p#N(DXtyBfu)4Mc z*jg{*l%4zlnz%Zx&WmJLPoQ~6kqs4BPf6DEKMgtmN{^nqO0#dl5D&jj!$_EQ7X$I# zlozzA6~0rFix6^5KjEd|Y(927p3W2Wc0=BE!)%AtezS*>PZ(ChOhpe^zI210z&Nuv zp+nXNM6A`>9&DOKJDD%)9ckmOO4PFuVYY_03+iuAlO*YTJILETah9F z)`kRm-9`^lXg+6~5ptdW>!dgz-YfHm-ROX7XMBoIuW*hY4EYR6fL=(Y?J74vHC4?s z1fjX-wy>Ho#++H4T>hQKRaybEa`yFbw;!6CiL?tp<(pCjXNXrAYndS{$#vrB7<}UJ z##OmlmNcrJ%oYieCS7xC-%$qD3fC^m&mMxq*lUrItl4?-1+*g2CqXgqN=yT`6klg7Yzb%2?9(p(ao#tyNfuqoVl}66B(Sul zc3C7TBL`>w61XJd$WZz{#xuInG}rCKFRN-kP;V3t4Mk5zVD8YCUbpbQfFlUsK=<$% z?(T9vH1O|Mg-_)lb;!H5%kQfI)iGdobA)OyA|~{U${Gy+_!Q}E8F7D0i|IyUNwS5anX+C+St9u=f9QpL+7)Ftm`Vxf9jjA>IKzIu52GOoR!le!yf@e{@f|49Z8wy8Vm@J4?&cBn*1aW@$Y!$F!)f^_o7fa{l zg6KkJAQMH+F?xxc^pW`-AIn*iEgNZLl5D9iG!iwLvA*AbXneBq;#rk4O`#p98aWIa z`FSwi=%#2WU$&X`?ovi(Kmb|`!S3SJ)IEuPC#aB8k}cBtB`!c95ZV!bJzCzW>j#gn zH!0YX=T&W|qT?3vMa25lD&J=1uk#6gf7)RKr=eTyr9nH&NAi0sp%w=;`&ujK z6>ezN*O&mhC}+vESw|&p{V{oGKC27Hr&9#_e)a86xyE&aLIb);Z(%6=@#4#y0iub+giVkT_8=H6D(op9$@DUGA(U# zA*(h?)kVinb{fM|2r$N@MB2HxIa4~(t~M}q7;x*0!%x3b(KII8Xd_dA{EfxbgrrMZ zgK_3oGwg{@zJt=IWYBu^cMiaLqlupD>MJR{5 zH;$#WdLn;pxmKzQ_zZRF(ZUprYs`W2khxenAIVD`F>i}KC@D@F>_%+T?G7h(!73s6 zIVFuk4X@n7Ite9>FRtf07sfTB{lY;u<`9p2I-)wE49rIPPY(uJi3oLiE!S>6cp3Z@ zZDG)lP${vyPAj3^4M1_q`!*zX&rq%BmBzK!FxqIEe65ppqLO}Be%7FEG zT6{9RyA-uU4Zk9ElSof<=*uxpf8DE2I&#cGr;nSVTS}@!I}$gr^V{~Yz@Fb2sTU1!ukCui$q4S$3E7mNi5ehk z%0sC2|BK7}Upno;D%slIERa2ftml6lI*J4yysl-S9qQUrR^y7lp2yk~z@BRp>K#6L zvtbmfc5Y519p#uTw-S@KI>;BB3o3+RPuJ;^ePXvnp)Si;#|pX5zjO^rdEa+|S}Wf& zIT7pxt;#A?>#W2bcXU&7y9e;_Dmr1cy?Qs;gH8DjXyZs^1{YnfzL7%`8~Ofj2dBY$ zR4Bs*3;&A0pi{XTOWb`+bY8OgCwq7aR{gPowS$3nQ$^zzHLNc6{ix+GyVssfh^3-;?lP@mPgwe@}OdeH2raepM-Q`1P&@E$!@yMdJ#QaRW*X0BC z0aw`6_JGw}Nkkp=At9r&fDqtXjMRcL>^#Nw-GCPdhsHaEYkaibSb0VS`oqJ#91#o$fik(C zPW5V)<4zI*H;gvCOBuqS8g0<1IovrChTe7vkMSwbVMe@KohJ4MnmvG~0kU16Orcc7gKBF)xuG%$UEirCoIF zck72{I1%Ph%m8)OJqanrTZcGx&MolrMe7!kxwe9}&s-)cZZJO^FypPd$dU|P%O^NkK}Zzz#+cwRvn)lN^YF}W#+Vam3{i_ zhqWD;oKZcFQ@DE5fFDqSGu%!Zh8YVRJK_g_7+9 zPb^Ppy6!kIBr@Eyl*>8k{69nY;Scp6#{vA7b9WAR9G!i4&R%C`l+M|E%V?aLnGurK zIcM)ZLT84Mm5}Pp?Cc~JLXt{SN&5NqM|>aO_xtmDzn^bhy@KCQLTRJBKPy9O|DAZ( zo`ucd;QYW79k>a?D?-eP(@2OIEkqe2%@A`phG8}GEI$~7)5vl0Ui)yA^u6Oc6v zu@7FawEhucG%lQY8a)RXavgj3mLh5@w_Xy!-^^<7WX5l2BTI;&)TJ-XBc5Z(8BxHo z@YH|*q2wwxzsMdeD3(B(io2)&>mU_dIsV$0uauSV?E7*MnLq&e=kcGhD@6gQMf5ne z?)J!UKjW(h7@63*eyb7eW7 zd$6n)%)Dw-Spwe{~BWW&`##iyLbs8FBPh}16i4zIRVFHS^bAH9S%}N$!m_-By7B( z8Z*;$MxHxPMOWEpKzCWxY@mTM*t6I;-uDx>2X;^kh+<6nr+Ag@dh6X+1B*Y#V`RTR z(15tZg}#){#OFvaqnj&tM`IH5xOX@ty2PuwEc9uwX(5c z7f+yzran89FK&yYkfV1c;~!B=iv#=@)sB?e&2PGCa6@X=`Puof5nt8}6~* z+t^r34+p%wVpp!`R9*2~K@aPo!+tr$UzO?+#R$Pls;&H@d7CIn-bBgX@%Hi{U7Jg7 zOcE~|l8w|Y1xR$0GN&#JLT#T|VgoeikpNg;Gk3d`EMLQ|#DoAYm1;y}_?$js4L!S@R+MtdQLjqy zsl%)lwp4eeOZI|99cgD`*Sx}QHGbE^+4m!qRdMDJ{y7_2{jDn7c=PhhP0xXBke3uP zK@Og987>Lpc*@hKN*XQMEl@EOtU_4-5@_Oy*M-rn`~|v3lUQ%On>Ys~o`UlsU)%{L zJnl{c(m{6RBSohiN5Z&eI29bGW$0JbE?5$Fi2#?MqzNB2@DZr2RV8Y?hOUbZGjBA{ zu`asX*5ackQ`j7Ux_5)inA@x>3OlpW#T-bqKUP}TOd44E01ZSj`2m?|p5m)&x6iYm z{qK;Ks9nzZ>P5!q^RR@t2cL>Z*3XcWj%W_>xjQglD+$S) zr#AfM_RX<2`f>cs?g+@0&`HG3z%9@1KOJf&IgGV;H&{W zxN7_^ySTP^+Lvgj+@ahMBGU$pww{-|FM;PeSv(|9c7Ia3I800lqv-B$GVrH&>_Y76 zoncqlweu|$0N2W9?KTp}uoan4uf0HZZzU87c>hbM7HXZpD_AKgT)Uo$)*;R3eEMAF z;*WXpU8P!D|JGX250%8$Q52ta?qwJ1@$eGAhj?}y=>ymVF&Gejtp-&385{&e0eB2C zP>0xPJDCeUbNr)utO3LSia-?HS&9up3V7at??gO|>4EZ52iUyAyv16+E6g-8o4V^e z99v(LH>{vfqA_=e;<#d<6#BO{_9W*dH+lJ+gZl3>LgF}`6GIY=z`23(>X4URO~u!@ z?nW);NZbCLu@UggGRJ6TySA9b&}-TBUQ?U5YI{RONEU=XOq$?@0L0kCsh(Eg&ZD8=@3A2 zv{!rXje7@Z3RK+Ll<+aLvpXh8blr)YX;(kmEe?^aCbMa0a(_P@VI%o6dW>ukSTz?L zph4R&g*wTrq)ox;HEF_WfOz5+N>TC}zNr&#$tS-5GX1@zKA^$K$2dP`Cc> zb0gdnc`rcGNsPVV-U;GU##&YY0F!Ge&4m`q;;HVMiTKnw5p-r3J4*fciGTJ78G2uk zAo=+`Klj`$YJ~ah8h_v)c&t;l>2z7>$c2k*GJ;K#0F~;G7Io_u?E24Lx}hXQSa<%) z4&$C=cxt2f)Jyi7V>j-+idfK1Q^&FF6%Q%a_RXQiDRvcB6}R>(_P+2WIH13kl(*(# z*|pV9`~(%p1wN3Dp!ARLk&Fx)@+ekW_9SysuW3xEP;^O5@To!p#D}n=>!zo*Pbgs~ zEfcE7f*oz{brTHl0Y%9dBqk#%J$0E+xqVl=sn~eITg)&jw*AEY5`CEpe&p$M6CyNc zx2NcCfel>2^Khv7so^k0yG5SD^++f5zjjF)RCDR948&3{2AmNjM^>@nJZzLl2nmCH z6{?a!+Ty9-iu(jKGsn#z@4?|I6xDBR03#>MoQEZK@!De@Zt12 zf!e(Oh^`MCDDJ`WUx&shAB_(IE5FY-efvIN9ouAZyNV~BEA&dYeVOEUHy);5>OaK@ zf7|)9C?+%GQJBQ}0sLdD4?NsY?g*0v9S`TKc@zM5l32Joc6jPF!r7;rt~{;ga7 z8LM$zfdib^a;~2aGMWl5#bokZ-z86F(E=sv0{XY3MZ}(d5&9C9$Xfn%Vf)$oX@#ln zKSl0ww(HC2k82_CR?BrG2A`S0ThQzytd%-YICW>miNfBjr0nd_g4XZ9LHHIsqvqOI z$ScEqAU8AGaW$qS_A*jplVzd`Z09%q1Kt-CR8WfoSIhm;SE-JnCd+E?(mL0ZxXJH7 zn#E1GTbXM3a+=-$B|E|;n$F2Z)7ctYH!;u1?G-yp%4K^QfIYjrU+B_wRko?-eWGck%nTkZ+I7m92tr!0>Lj^sNgCsWAa70kj*w(p+9{vVrzf1KJ4xi$n2}$rXR{^eh$?ZqL>3_GAcX2g0F_iZsh{^Q;jXshCD<@^@nU29{P7-XXZ zIV{4%Fq^?~er&CR+(7|tGH@Y#V_nhKuyDm&_52t2IMxYx{`T1EX6IrztHRkY7Eb7-ixyNc)BrJGdZy`7igtD%kc0={KDL`*LoAK5Nj36{orFzZeqt9(uIA1S*< z2k)%eokJ=R0O)SHHz9rBI+%c`$QP4=UwuBRNy`#JxYHPx{fsvU>t8vvQUZE_;SVvhV=vPwB&YgWEu^c8i8J_z$HdwPI*BF z|Ak5DEKXy&EacjmnXQwTt9zCd6m&s$HmD*>xh;w;H5!)J?$Lw@mBy`1R?yN-%7YpG zH>1}@q1KHHDy>UXF>^EGALH6i^=`&9A418fW(W}=b(n7D@z1~BO~vguRI`b}8w5?^ z*eq_qlq_Ud`OW*=FnKMWsdE01F~O&t%^h&*Hv(s8>;i4{r!+Qk!vCY7okzLM&j#+7LMa?9M3pvI4G_6q$wV zPi8&3T#K~ZjiCA`?Kb_^*nqEr|30sZW$o$$k?TpIP@*F_%Mzz2|d_D8}oafq!B(FJnni-~v zeEmqKj_Kve00{Yco()eHksf-Ev}&zyO^lRRw}h#@fqK&BMhjIGbLOQ2941q6 zlNj}0n(XV9M?89NW+>N7IVDe_qJVmdV*scvvR&8v2medzf{(Pin4i>Z$z|QdeIu(b z7GU&{!s`MtUhs1<1A%XiF(b>BGOc;8fhx@2KlAYtS+U{DYv&SJ<$8?+?e8ibpl4#DlLvEO z-3EX@X*H#C1R?}gM@WPfyKG5>u)%}&7{G;anBZJ4YWhE;366ff|Na}ZW31{tr6Kh& zj$~u(FzZ~loX-9i5fi-fQlg9H6nHX4Hq*3S^75I)1nDw1gArrSvcWhOaJiXdx0x)p z=$I3TkT2C&5pIEdfUUXmd5-_Vii*lQcP(}k8+f%kw7xlFMISt6u<($xkY0T$S(@x+ z*(zBmC%4AcysR;I)~&1&o`;EEM7%=a9Q;>7X}ez#gR{0fNm#zxVO@1h0?KJrEIOC;F$KQ>>DTvO zY5O~pB+_HDB-YWAV;p9}L-bDel{n{eykx{kYLMyU@6L~HabGrs0$kNNf zoqQ*K!%A9v%l9+Gv#J|Vd%>qN?BtJ~6uF*^DoKw;k}cInMhIWP{q$cUb@KE}7Qkfd z%;Z&0^5nyML-IYqjpJ7PP~{hi0fe)6abVGSIh9_+dMZFx;uBBXN%P!aPryzetcc^f^2E1?DcgU8jX5#ada*hF?(Jmq0*s*S?ymrwn z@K&f)pJ{!jUG9Fltv|+xH$#08$SV#N#xh;TTSC_&Khb@HzR{ln#5MQKq~=uHeDmDC zFrNe(A`)do-_M4o$Dh$)8d|$}N|NuZc(`}p&nCzs)xV5tQ$eoxM>kvDIHO#{)N`MC ze{a4A3ymZkPx^aeYvq>&5Nm#K)UHKVkinYd6a)Lsb@ch?fYdZwov2-}xw&48Rk2D( z9Gpi*XN{}D0k01M`B=U`^(*TwT`eN%L&?i)JM+@bNpcrL=&u{$2&#}2j)l+^T*}ZL zw9xwCiMTv#XR#*o5YEFP@UY$kwA{;kVN=CRQcSt^-O`G3NHZt7H?IqK&%*j@Db87B zGWEc$4_S)9(3jr$P=dc~$Ht&4Cqz@GEL^@pifmNqP)RAAuQvt=@fT#zo9XJlCd zD_>zPRC{vL3)-kcuumW;@VKgEFJ!AXNVg@w8Iz{>#$1bIE%}_N8nySY$Zbs%=Tb0+ zY1bT!tG614qX4FeQ8RvF%g9HuCfxu->otXQ<0rm7cU?|ydcs*)zVR zUpe=jW?wlyh#)_;>6DZ6(tfhvArvEjymDI1p-7$3uxBc~+$!09{qNTO{6~e6nxD)P zVo;y2cup%`OJ6%;&}`Q05-1d^70-`i-h1G1e&6SrQ3V0j3o1KIhjz!j%m7`{mkdGL zkiSA;^tx{3_=$hyzI;VS$Kg3_?}WFe$hAuM1}VUIN;L*=4-R&TaZl{=c~5QjvEo3Q znUdBJN#;(*tMo4iS@WNHFUtj*y)q>1H_-5PAJ;477i-}A*-Ap6SOn~~<2Y~9gHh6~ zWvXPI29}q2?e*zxRyzNu6y6Z)md>*#q0cnUxWYHbim6~g)?*3uB*TaG07|D1aj>LM=O#PXr*~ez?wlyiY0@^;DOS4^}YqjX1Qte%XT_ZJI zC2Y@=ql^QM@azvB!Q~^R2YcTxYIiDr_4P9DsA?NU>#aDkm>F!rG zi83aBA8_q0Jc){X-#CuUEbj|96`~Dv7SXd-t{P33fAOm58inU}`PCdp#@%X80@GyN z47FCPWOlnio0{tnbqBk1t>ORaj}Cb#5{+2A659Hk8O;+aWLeR#EZr@=s3U$y-=_#B z#NZxj(8XoI(7Iwlq$Q2XC3|wYUf#g;uBK<}P>8%W#a(M-NUNMnyPWNXsdj^Xf zZ(D>!C8v079IW5ygw~M|McQ#f>ttDMRaQcv3w&V)7{*z6q#y`gb*EFXvzauEgM$FM zZ%+R$55Yy0#x`dsV2~9*Mb?@kmlPR)k zbo%N$9mmHSD$J6`13(T?Q9O_*b|ZJgz#dALblF*Mm9ed=*#lMW@%^PwyDzFsxVKp0^w1wrInnE68@x&2tr`IimWt4H`-WL{W4$fA~OrP@g}V zO}dYa?%=8dS=Bl4&?@l~+yZq|<%A&!E2NT@~|mfA^)8hf+BFF7$I*)8Sq|7kHc9MF^bm%@h3??@q?10;gy(%WCe! zC|Sd~oLE~2LLBuUlMa!^hxQrrMu>#b#B55cX4z4W?5}0BavvcB`E`4(MCNp2l(PVy$28Xl6(QWfap1EWYj@w~>jBN3!1L*}w1r<80)>c=;!^Hp* zoK!zHLC!ujQ?SMnk+#*`nroZt#F6Uxrk=p5CK|HtR9c&3HMCi<1cL4-#X)vd`l47Rth)66mMrYTy}fQKK^ZWk|QOPhl*6~-bjUb z+tHwZm-H)sWCn$bC5`};G?LP@WO06A04S7@Yz(i3XN-=7VTY9s9zq?w$YhGgY>Q6> z!)n|8Io7NYf>i3n)rz=0<~{I zYH7gwLTwQ_Q648E>7@X7*M`KfS}F1ZRo>C|2zQvIZi#~p?A;%Wjb--A(-m>J_tMrM zGS40(6sv0q)~=kFa%Umw%RFJk?YECBRPsB7zdG7DJBTkt7*lWFjmBL~Oz~&!C)#PrSlBCPUM5RPjTn02e4me!J$Ym3qPhK0VNBFF$mr_r%%u*)o8? z?UfQ-S!JuVuKtdBzdxAkF8_{n&fcX5RV(;>QaNJ{(ht1cofR{21@QS(R!TPmqIt|S z=kIcuq;YEW?gZx=Aj(F@`DdtL(_;Ghobf#De6_4me7#^+g-QM%l&zv%R!R+7aebVY zxPqCxzV}KnU~&aeDY+YECcqGGg97r`SI?>?4?fsBw3Ms;0Lb}R^%(jqMqMy2)y~9= z*C@PG+f)LHXorG)a?d2+qP0ly1$K-cvR_^f!=R$-zmVF6FV+mT@g8DzOLm{&y#Nt* z&JR?}cb~LPEM#bUpTM8n=w8i_G<&|CjXD}o=O~+RJF1jODbuJg%pUbHAzdoU6o1-| z1Ogv%d@&9j%FC-`!)+}I_rFE=Mt~X%zruWZvFLMByR#P$k>ImjKmo^!+GD4RiR>tk zhBx>X2_J71n-lq$`Vyj?R@r$LU;l?u_d{IA95W=3n0iA=+<UYTuzJM3;TFmxcBFI&r_8_MeH^>E!H@zJ-7IFEfzL@_m zs*^{4Hyu}X;%XJ}*|3Y=iTrc_ZKp96!o_&7k^JYlGH@p&NH`xY$Vi=s#s?a}>69MZ zjZAC)vmMYu3weGx*k|;zv`3MZ7O}h~MFNKVtnnX8>@6&#mR)^B%;9r|-}yYhGWRQ> z+`khqh|Hy29GhnbZlpE(B%f;fdWvc)LGjT9lHuKUCb;(GbFP8&qQ{o0(OV>-BAyN& zExjPs%aFj32Q7>(AnsF|U_y9dAc#*I! zeO(}#-(a@$4fosMktg2wIa#+euF9R`JKnWXjg*4eYHmo~IeKw(L%%NI2U!7HwWvm}+b~$P$4* zzC$OeQEaH!Y=8n3TmDHn#QY8D1+uu%mUKp668#Y&%it7P7 zpa(&k;JkcO!%tJ3Kp}4~a28JiurFI??jVA0bx{^eU?6x9?vr9mZ*=E9HZa60ry) zRa)nZ$x@1XrW3>#DkDvEV-sBKCdwRC)XqF=svLlkH*u%k*q%Y4#^+!UZ zZQmulDIBfi;&Ha2HqQx8GpM@^qf%a&_UHwCAF$TVp?o3~K9HE@h8bX!g{1O+ekc0v zMgQu2%Lp`h-3C~e>Wed%45a-1I7B@ia}pQx9eidCuOF}&&P&3>+iZyY&z41L-_OJj?ed4zEEYvl+}Vnt1SK_z0mX+gcc4<3^=0= z0G_X$BAWXFCh6}BDZT@5PN{pE*yz8xVLWb zLvE=stirgh14ZzLmq%`a)T*E*(L;N5axrAZddOSKbRVb<4O9dI(Cb3 z2alwrJs@@AV;*Hi6pfs}*PfSDYH7RTfq}RTDC>=NBGeW7)-#Q>eKFZl)4U~l8V%eZ zGM6WnW1AT(JU}CIVGY{RTr=>^TlZYNv_fOa6wISm99h}g7SjdH56EK8SnU!l$ zY_kFGfi|g0pnZk&1Y_=IZJ|oC9D$K6SYd){p#GX}AVeWEmK zE0)Zr!6-)>tekYrtVnG)5!b?y=*VedKVjtJ4S48paD0CeZ7o0E>mso^m=~ zfmTf%&l|Ak&P7Xe+1qiw4;QTA>-Arntdq8XnFKbP)XR-djbO#UvC}{%&#Y|?6(il7sK&0&#xiZMzU`HV3McBkT|R9Ss}scv zJ)9ktb-yi{RQ<|vei~_K5|@mpy&#hb?xho@6@m?vkj1kAx!RLHf)DZauU(I459epE zp&Y?S{eXcn5f@xAGr(7qP`eu!yn_rrEnWN9JW{zgv>4&N+mNy%@ngZjbSh)@aPimB zMa;506!+y>E#ih{5-$=UcN)|+1k}~l`{TuBpm))rXw0wo?F&TjzM=(?hFVc!rW8>` zzi}NLz5SLuA7<6SaIwF5y2hf^I8G$pQ5mu43VWV zVT-eKrgsF_-+K?dc34BQCn}M3Wo%yLJR6`y4OwV{xCi;cyW=Lv-|ZM@8b$20vYnsK z#;25Yo3kp;MOdR)1Eo!^eUv6BVz~W#t_&I z&Bi{v_+Qd|fK>~!TR{DAT;dD!b;xV7X}2} zX4;yNe3GC~^GnUsk|xHJGPnlVsA~y;CO+$0*(il{&?v?#=JE;RIrDo{lC{LMv4)Ks z)Tsz>MPRgNO>Gl(4Zn!9AfKD#KmJGx3^I&b6F$Y7--d*-zbSoeqV{V57CUNn z$b+d$J&<3Le-A!MlKgB{0Q()_VG2g-H={6a@fF=w>u)|D%|l8K-EM8emGv@D0~h0Z zIe{+({%QO@^gGIvzq)^|`Z5CfVrmpj&b)!L9xR!^BxR2gmN&imwkM!_hc_9AbI9*=ge{ajD2sJTi#MPb-4P95P+gmhK~ z*Xl*!l>kbL)VDfbAVUM=Iv zd1{^UvB$Qydp@IZ$603bH#A&rkpMqaq*a8Je0_fVyasdSMo*q}?puS8CvuG?QxXWw{J>3(v!J&g-> zLl?k$j>mvb8A@gqLZmbA_I~(=#+4e5hd7@KEH^BVY4`?0z58nahxoWWQChsLFfuy_ z{@v54)mLzTMlc)u{m+)BtO{wFZZ4OM3lM({8pgTtv>hFFQUmVD-w+~9<=%<9lK3al z86nPdGvd3rtgr04Nq3K>+OY&1c5D81=aF-cd3SS(+1nq6qXZ9Y?gt7i299RKh>nn}fD-K>K=9$HM1(AhQs&or$D#vVUAsyxzcEyf$9{>%hG`ZSyX z_GS2PsTv@f34B)D^}lJNG$?Y_@70{aDk@K(i>UX(JC@z+WnDwO-3HGKsd5!!^v+`T2={zWEc)^QQ<=o#55x<-pxwx38=+H#EGh{+)I_&>6UEy$ ziXXugDd;x-WlktCN*3RHv58H2PvvQs~f3TfJ-x; zfyR&5c#FMm$ykm*fkl6kB(x^)W^iY3r{{u(yV=F1)YLx2f;{fX7w#~Km9Z8VVnz$( znp)Bl+49ZSdbth$FiK)1L3JpZ)$P5Ml3M0CzwJ`u4w$W^{+p~LdQPpDtWC1>zSdXJFqugA%s9tCTWLJ-Q|i~CKmLZ8&aE^N_ghIskL%I8zf5t*F!VJ+NRI~0P(!Y@?$I5ZJ{Mh z8Ca9hQVDu#TJ~+uljw@n0}MnjMk3!c*v>%#G~C^q0|_9v_pa{%wf}*d-3k1zvBL8G zH~+~}V;ojT{c`~vSz!I@R_Xt1d(U`t!$W_3g!j2Bd1B)yzLyW1dM)rbkW_89i z@JsXqv$1l`_hKB8Xv+L+jt{9npwMLmV4q`=U7o2>dES%@Aw#>$bHLH>UhDSZ8~?;m z71YuKXmpf$R@lZFs|2IKEMnv34ssa7Jpo95PY_5OfbEk`y?pF%mZdg)f;P1C$>T?s z!47~Nvna4l55e-p4X?Cevz2V2k6lMh^zyrL7RH0$!RU8(*+I%1I`qEyqxcnc@D~z% z^@><0B3wmOaK+r+WcdV>M_Amk@m4+!zupc2hI^53!~3Ps7}TH(@HyNO3(tGH6}J}J zkGk+0t{U6KpVrK;OX+FnV8+?%Xu2n6kVpCy}e{I<|~0dpeCTd zvTSS1DP8%)0P!!B@Vm4Ov{+ap8OkWAKqq(mL1Vr zW^fmWqAW^rybHeQ1kAOV5Yv@K6e5$?7DaW4cyr8Nzx%P)8pRSYt#aejYZWPnj%lQb z&~q2^I=Er$IydAE#MkFt620q#N0-)%%Eub7piQ9!&7(Xla|&+?-ykiY)+;mpw^^xcIEa_d&u0Q{+fl$_yfdr7*dD7rOpPgF z1?gu)Sm09jvRT)9=)lyo7lM6ezOSfy3>ry=hN?X{MXSCAW&hi&ce0_SLSCuG z&E@ScU#Zc$swJ|)t<-I|XQ>7zDVddtD7{M!ZZ<*hPoS=J+=FcyOfn4S3?$Qk6kKG! z_~rYWA=kVZz8>q?k}PfGD{br+#^yyl9``h`-wtwX@Ey&Ics8!foFfE^UR{-My#m#p8t&4O9--UJkizw>!iJFB9Pfe#yh zpP>yw>N-)o5P;TlMgRWzhY zq3N7g1E~L=NiFYuIcIV9NmwBB#E&cQ)D~JtrBKD4PK+x!xzlVyyoeMNXA7ZymPOo~ z1F=pUD{v`p)AxFLsGWD8=b6mo&Y)<$JEi6SN;cMA)y7xGo6zNM+D>DGYx#tLv^YD2 ztSnca;AJIvsh%r;R!d9s;tu{&@5&11#f&);)am=L-;Mv_QU#+QD7yORBw7yG#u~!N zpd(v`y&kvA#CLz!<-hsjJ56DSHFt`htl;+)Uho)isS9@q`NdmSteD;{;9m+uM^}|x zTx~ZY-%oJ@-IUCd_%q4lV-&pB;Ref(26ZeQHP#)ya(>~OSTq5bL2G4V-h_<^8eL^O z3}Yl{*afY61TEx7ZuY5enhWai4L|+1&5OlEC-Id*p|!EpC=cE*I4{@embQhTwRE#$RE|sVIuG~wdqn?{;yVIDX`c<>L zU9-Q1rKti-b@furs@_gEKJ6Z5vxf|2ksFD$d%tOKis>Xh(YQZV!I@b%OaM+Ha!oe5 zO8fQZwB}2lv}4+LiUk&&oOQaSOYktHMv|=UUMQeMuF>Z>U3NczfuM}zDY#WDtQcF` z9i=vtQd6+ln|B~`k*RdjOV?oXLl}0-M>4mu!YpHtc!f}t! zgrIw=G3A$%Vl7dCRvX@Sw|00cIJGj>EgG+`$_8Y@Pqab^+cZ*Wfl(GJ9%d-@Ph#$j zKd#oUxK2=o)y98yW^KymceQ2>4L>>G+Nzc%$#Iy_50j8$cI;D1LkpAQ5&;~Yd3anq zvG(~eEg`z9`#WAR@zqcmRbWdK$KOsU^2(j{$IY(+ZjQE?w?7WY$7bMTEmd^`Lh0x6 zhLVAF+18P;qO7DS08&~`iHyBDTXM4>y4TsVTzRi3S2nK^36ESbHgumzdsN6 zV7Fq#eFw?b*Gg2j3gBG3+?ljfdz@`}`YXJ^lV(sywn$Dd?-rTZ9z7)KeB!v^aQsnD zEWJOjtS|i%HtE5E`0idVg&g}#yLG;m`_4XI(kr%sEJbUMeOd@lSS^?dEhbEZ_`idY zK+B`8*2m+3;2VO&hn)*BW_!iyfpe{9=F)~Upr3z=MptNBL`3^AAi`HyDEqFIW_CXs zEEX*v$N|+|1;hmqOYpJD2J{zK45LlB6_`?6C3OE+YU%IMhs}cPe<%u?G}oySsY-TD z-eKt-;|;vtNphdkd-PIZZr2K?z8rFjrgF?{>NX6=cux7^KtAS0H+khCew2`{)bFFZ z_x-@LZi;%*Dwxk0S6AKcW=JG&0y@^}qB&(q4gxtSQ)1;F0|CcLGlIiBGPlrYB2i<} zTZk?>8wcMz+`U}^J>&l+HNW%av}nzGd%aw)9@U_O(WVW2U!4tZHXwH9e8DtuY1)4H zL^D>Gux-}TJWy5_s;!9yRe2^BeT#M1R#Mcqzp{8@55>D)l+abg)Afn|DkRo`ZJIh& z*rI=?T}Ys(B|*3^h1tc*jzw(DwOsO5(5QNr*@ctLMz;2Jz(P+62{?#FfUXjZUb&7v za%(@fh@}j0B-js|a3sfRtMO<{q>YYH{lUr{#>=sGJ1u4r|3nfj>tbxeS6hi+#Ka?B z4R0@#izvCdR!iANOT#S=yD1vzVDL7n8%BAt88&oq<<7CvLH52XQeld=+aeg$ITKAm zYXpvqo@>&CWrLiP8?vEi8~D@>n&+u$7qd(7Q~jvkoW9{Ae9!v6DjRc9VuTN5{@Gg+a4ryB5HBAk4wc1D}b5Y zSDk6krB&LC2{pBi$mAtSY|@8RB(j;thDtj=+Hn@pPJ!UTVJ^b>LUUkRpHMPjja9f{ z;o>dL0BMfgUl+fy6xRXH_>+?bKr!3}KoB{GQkUuLN}JPl-YfEvs+6awaW@VS!}4q?S{C0u$y%Sw(XY`3 z1aM8MEFnTiJ0k7LA|P4hf*Ugf$*S@`>RkqB7{bf9H5>QU?w&89f|LP4&VaMOS6=PO zw5QqHCPRjS^SUAV-LF7|<+OxGZY0$vY!K2cn{F!QM8?K~tDdnmoZ*L4Km{XTL ztFzAoN`ce5K0kiFID~Rh#1PLkpnkzB$B-e+~ z2n_l>p9^~VynHueJG<(j`myd2<5Y#IgN?1k?hv~I{l^WEMA-De&A0~*J-K?TTFT28 zc?(Qz2&efcC@rJ_HPo?;#ic+s1Le#Gi956pb{gkG*{=PGEwC^x`8#7TP8W=hH~mH@ zDkx`S5$|`QdWG8d*#oj0Cj^94j8n&$v9TT36w7BGcblA)FwBmQZ#u+qr{APsLz#PP zrFhraJZJ#~G%6B@0n*cB>-UlO3{E#ME5KA+ONUbz{VKw`$MSnM@AG<~3gefwS{7Ib*O zbfI-%7$P^ouCz<|^KP2)yMaE(B-tT3-}@)YZn;l~ZY2 zYaF_SzpMRD%~$vMsl&V5D-~x2d;_x{SI?e?Qx${ZEY`oL2Z{&^lIn)C+O4_TM zlvc(wjY3*xw2Ta&S|l^@KEPVudB8fF{fY=1%-Qde-1`D?j$5+D-`g25%`ALdPYqBQ zI$=h_Y1ZOcZG$I9>a35IS$slg%Y?7BeX4H`E+y1tu>K1Psh>?+Y{BF>GfERRRUHXm-qUBH%?t(c+EhrF)SY2 zJQ8^%DP5}D!1`#H`MWZi|3@s}qklpn$fA5>bDK>)Q0yvB%Iq(=BAff79dBx;yJ_=9 zBOhm9j>)e?Fk94z%$@tGNBvPI|Kir`*%9gB*n97BtPrw8 z=p2qs9eboY_N)++{wSsS1d5-n28vxb{nCv^#o*k9Ebh;G6G;?t3I)h69lJjuVhjBvH8z$n z83af@&wf1hhZa!;=p9GPg~oWhT1g?g?wG{ zNF=z`J8QoYm~gXRsq*1aXSwIDlO*)vRUmj)Df~Qy6?2uxImHVU4oUL6OwROU6Xm*W znSL$M(J9_i80X6!=oe{b8s!P_UogiS2qv@wh|C~S4qG#@hw*JvNUoQF11zPhB_RsH z8M2$R`ZL2TjvIYN^*yiNcmW8>qu(w$?;6)t_-=-a zEH)a-j0O+sVIg9L08&+LBvpokFQZHLd-X6@Ni^|cFpr`8W36?7w$ToVw;A=eD`&5C ztY(NkAUz(I{8Ues1jEbSYdM*Nv^Nsd3&f{LTgY6~pI0N_pMjbM6(0hYk=lj zs?QQ$$LCRb&JO~v$l8-mVwsH(oh353W^r{)-iMT0N^hFd6XM*D-XyeO9HZyeFgP zbhUc-h^G4QoR~l3$|C1PQ;Q4uZQ4{{dN{Ean&{%lXM{bkhNkC&>yz7!P5jlw#^6Xb zh`HRkoa|{?@GX+FI&q`J0>cqTp-Q+?hCMLzvY=|7pRQW2m`BNLXkpga12Yvz)8qLO z+P@>^IfQ=xI=axZ>CA?V#Vav$5pRyKOMz;jH9eSFd!slJ@L4S5oA_IVI_pl$kpL8` zeZ4fIn(iYN=QSCw7=8BkC%H|7zp3Y6#ove8BEan+L{a4OJa$oK?gn;R%>Ei2F&^*&psA z!uiCyW_sQ=C;YFoj#Q-fqi!s`>T?I`y04heYD{_iS*Wj}hr#uHr~GP=@|%FPYMmpt zISXfoVx+9Fw@BC1UVxG0DCvt-Z>t>$bIK$5rU1gc)(ap;lovAIQ&~>&xS9x!mc!f@ zibNGe%x)q0OhVO&zEL2nBCyWTP=#re_*(yfp+aTwBfx$r?63BbuQ3z(KjvZd56#C1L zKR)xpY_AxZUBl+@ZbVX&O>03EnfhWg!&?(Z2k0>|11RFek#Xe9_CVfjMp6}Wzq~Vd zufPmtsFK=PDRpk^&@>J}PdaP~;xVtHqOZydwuWREr z@AhKr*P}Y*Q6K5ga(8Zv!wA*ua0!$3q<~~ui$t+z6xJ-zs&+=So#jsghjsorbiMRm zq`;ueFz3-j4v8xIIL1w!H>0YV(7$R}bf^xjoBDwQ`%30@nWv8uGQ47#vpkhCoRShq z2#*Ue?)6SnyD(JImNE-g)2Df@tV=@Do_>5o5-iO(V%v>3gmx_RBO;|D#N<=^UKNZf z?kMFFwT4x@aA%4orA^Er=86tQU7RL?$YPmAObys*BQi4Hv2g0~VpoHV1e>RWCQcf7 zKQI@NhlFY3y4`rv74n{zBs8=CRa#@p=^)$tQCTuQ(EZ;Kri z1&Qu#t3DZ|-2<5Ep>0x913PUEdJ78A{iLR(W+l|{V_pXzB#kc5ReShH$KmJZ@8WHm zJwn7{dG?J5%ofxwN46oT)NGm5l|p&8MV)nX8B!So9(U8+X&y+^`Q2UQgt06I@MDJp zBQ*BeYq>Tb^<_XEGj0Q^PatLt^ z*ZcHN)pskKLR{ja8N3qy5ff${+4Y<0(?`xs5G+6=102KjZztabKM;Gq2Y$de* z1&kipZ!Qy2DF8!Nj>)YZrNI@3pX~_`I$GKoKwBQBbC|5%d3r+>__qjyCxF^+C2nB& zQRg3z?_(Su6}o58bTxA>vc~qy@chESM-SiYfTgnZ&~`MEmVUVzB@5I|sX)fu7pT`_ zf5fK#Kgsqn_59+unQ||yUfK}On8_^mq`b>WK2@q|s5HZGHSs^rcmax`#e58t^7(Q?_~n^w{IaEt63*o(RapH6P-F88xt)o znfksTILq*&#-ukJ;XEg-iaJj5-pjoynZ4a46E=sD5wcTv*-6(IB@mST#Sj<#h8Mnl zEb8@#3JyxBmk=-JC$8Uz2uh#Qv)wFPYlCUHG?cQD7lzJ(_nNqBv0_|gC4&^qaUY0>)#bz1$&xl!V!P!g2w*USS8r_nv|Yj~Ro3b8Us6|*Q){k%Z!nLi3&+*eeF3ubhkChwXB{m1hreBz-ad5_llC}aN?+hYjj zi-r2Bl;%GD%GP;QAB)?6rHuZN;U7DZJoNglE zM~=nT zC2`{@QODLJzCy0-;eYogFZcZ^x%6`DA$uV%r}lf(H(p4i22@ic; zJ?S8xM(CFwn0oy=)KA<`u}fa~bEX+slSX!hM)uo2rtZbjF>p4%6)e@GY;15^x@^)^e`Ni#_}cw`|`y(8}}8)9M`a@r+fP= zLlHzA*Mi!Xnhu*$GPKJt$PRzo*?q?kimmgC_c5q@fU28Sa-oSDA-TT9NGd%bASg~f zXGmiK@%!y@mb2Q|)w6p6fvGd>NF}$Bt&C+Q=)ArC%Txmj*6$=E+cG+T3C~R)joI!{ zwP>OS=miZ0=9wBngCLUB=wxTTor0etV9d0zEYia-%^2R8l+}5#7T$S{sEQi7eeo+ z0(|kp<7L>;@qHdjbcz8VH@BhiLl@}XBFpe`E_=gJ!5ZkU4G`6oF1SU$)fjf8iDbCN zO0FS4h&4;tx4%j7AZr+_Xu|DFa8^!vmKeOyNXm!{JVkqUnYfQgb}x5D{|^R{Wm|G!yCmZQEmWh@dB#RI41+xB+Zm!rKll%TR z%#SxbbD<7|a;msXs%S)Nj4Z-O39TRl--D$MET1vaM2%d4!!Y@23E)*kZF&6>lRezX$ z+|@&-&XeM1ryud&C$kQyy4|O?(G|u?7b@cy#a^JCcZmM|UDat#h%9#Z;%4IuqD31+ z@xo<{S8Dj*DCiIVq#OLT+q2FGKG;j7yJM1Uy}vABub@yX(kiH>g1N(rjE zKJNRO?>yH7R(^U@Ts>5wl{Lq)Y-c%l1JCC-$I9n)!#Lv1qX%ih8{Hu)S#Qw1$`fT3 z=v!ZpRQYT~K3=dufE#8vIR@0Z9*g-LXyzBE-UaiE#LTHXq{e7-!EDZYuT18VfO;pQ z_6sN9vp*}h)1Zy&_lijO-p^_ykuZBGwZ>R&!u`;Za4l zLwmOAMcA#NtBmpMutaQq6L(|0N4)XPwk$mu6n4i=uH)EO{_r=#_Sfa~>f$E!X_8^| z<9Q>2EjWpM+ToE)?TP|U&^4c-Vz)0?UM-JN1|W;6+g}5OjVZ+YJcW3Jg%!{*C&ls( zB7%7CQG0VVQ|#p$s@KSNSE4N*TJ=AZo9<2gw|h>SP`uHtM(pwOw%}BERjB3z#8#$D=$3bED|^|6%g#HSW3i ziJnH?n2-sZ;%n|4(&MP++Ggz{(}HB>;4Z9vV)e|WSq|ZTy@g5G>xi%v;OhGfL})GW z;KZu)gJ&n=+@A*uthlNqn;0lsoTLBzWwg!yF^VLt3}RdBBi%noh=PJ6?$&7O{b+xb zIo`YUO{UMmnWj8+R-eafKgxB|TCat(Ow8PTtunCd)cXX3c9N`Aq_TYln}~SZd3T4` z(2}3;GKaD&7Ws_)6SAkzz|dw7p1(N%HB0u6*~JX<^#J;n&2iZFOAbhHp-fFk%35`Q zc8W%Q{%o13FC$G=4>3NEw4b$nUCA!sAsjoG@mN070xO%F3qhSzp`j+IFVRX_LkO*Nqx zw@u)m1Omcb_Apcbi~ca?$8})r=Sg8-t6d7Ez$Z01y>opVp#S$SD|;e{+>v&*F6&1p zz2Izt^FG~@QYw1C(L3&<@^3d;6laZg82L$hm>;P1`QY2Hg6_5gMG_p-HzWdF4TvN$ za$TfkGVtE73ej~thN0pMJaC*P__%ukeXtz>^xY7X&9GA7vE@^eV_~~9-@|Rm4Y<6R zZCzm2?N3zxr(3iV>_A86OjYB8O$8cE9woq7i^m`Oxyw3{MvFs5_t}(KZ=}1*xg^SG zUWCr=-@5oMFow%!=0QQqY(dn1K?)@*hVfMI`C#a0oj*UG$b%eCPf(lnVE)aVL@ba~ zy>PWBJc(({hhAR9x5A)~(BlJP&^V85`KnPn-B6j8y?x3n4gPrnWAYBMq;`d+@hL1@ zSg_sN-T{cD!=AKDf9cA;D~WqFEMYN<%LSW^8Nsu-s_4R3ZHWL!HGCk!`ok=)nvW#@ z4fXRetmZ3Es%^{hJmG(K(;@cI*BjJ#lhBZEuPmo)=f88ed{(=H)f=|!(Y=Bw?Iqv! z&20|W>~M2-QPF*I{*zqKShtF$P4W9zu(A(lX9ne(&EYLRS1Pr$W8$DNpBHO3 zvL8?u_j=*yxMMiJ$+fgn=Y0{t1eALgq=dX+!RI-5nL*BF3;J{E7bEG6RMCRjGqEtd zVu8+$HQ$Pt$zl+dwd4I{C#FVU=Y-wgqIsn-jye$(I`(7sV)+A~>EC!) z8JliJgm_YsXZnl*69jKaQ<3iUl*?v!g>Ax=dL7*-10V{{hs$29 zto+PnntVbU30VUPY6(BP!}gzf`-R!Jc;{2sO4<6x?CvQ6)qJq$!dCHr13U$t{x@T! z@_pF4r*PN=QFZQ>3ti!WTlS(2D0@wod(Syh!I%SL-~WfpSgb;r>A z=*nCF_|5jq3yx80jej(`jx|<^&y9QrA|SQ>N_T3Us?h0o{L>Li;%Z)W02XoUuXbO+ z5rVxQb|t#+e;==R*TSl<(4+8K5yqy-Om16R_G6cH@H_ZIC+gA_j6`hh1D5-_X3_APoV+MylMe`}@UAuH--MFv~t z9G}D00FL_RZjpk@mSAMt(fHSC=Z^~CO2puxeKlURwOH+KkK^RlTOTUlD?JJ8`LABa z{3yv}TK+S+-ern*Z}f*6E}Yq%;PMVOtdfO`$jJ&iVNQE@h^d6U;IEO#Hb$I#&^7op z9#$mBRekL9!ac~?K*-jKZq&a96909h#A__b=D(iuzBfN}Wd}ha*ZPe`Mn_D}SlW%h zig>t_QRam=CJ}EGJt%(66MW}Zmen$L!1Z9IzR#-lUGb&hULR1vRh8PtbHY}ICnu(P zH!ctXG|PFzafA&thE74v+o?%_u3s0|k_;~r42Y(Z0&!5euQzbF=O(AnvnyT&w2fb0 zLU>VA!&~gTZL%MN@0={AWG;nWQw|&VyGU&r_r;(L6r0mNMFD$h;;4hWyX|;cvVFt? zMCpslv(_*!6+IPO%RDp&gohlqXH6`Yj_2Ao`D)G`q!HNfm4LC|)ATJ*{1O6%f}vR| zipMo{@p2?l9+@uDFk4Wg73jGuL=bZMx)r?r4Q*=wNVk=X!NA znuXdv10w3=uYr1jj`6h1tXkWV4AR^C+Q>df+_xNq&J&#qO^MmbpM83O3IX5PG>dqy$;Tx^m54ZmlSyvOz4IE7BT zO=hu}p6jLZDM?G^T=%v!1!}8{CO|P9^^o{)I}@UBHM2Qdm~+;zZ9cPG*1u#j=i&|2 z+9S9T8W{ zC*E^b><;JW2)27ix=3*e30=RBkTwZ3$eG_#vna)Di}ZSNts0XrAgPr;H0OYZ9UF!7 z!$*sA5}maOeUX!+NWb<6_z5on%21DBYciC z8-K%aS`7x*rB-s7rpD3+@!>pMx%NQ~0Jb30PQ~%NH@1J;)PlWpeNfr(y~DIorS8Ja z(+V6!sJ(LW=#I+P!P@tBufC$xB~IO!cKn1kO>w?>CdSv%;K5`!DtYgvZ5NN;DtNiE zj^7?7`63^I8amtN^qRA(Uq0L0teF$|5W;P;`z>JK2j_1qzl=k~6v;5P zk?jtz33fU(fBy4Kwd|jd!$BkLcTq!VEH;Cb>J_oQb?Sv6*ai5)qcPuDxmHjEWnuCA5aN8y|fru`SIE+ z^imo>iO;}%UM@E%SI^?jzcpc5_~pPLwN7ubt~5p_3*7@uhB=*6nZfL~Y84g^Xph5L zQHMj%ABPfBY<;>Vzs!b%OQ^*&KL-VNwqF5^SZ=|sL_rC zvl?~#w1S0QZP2w24#*(1Q%}l+zl3p$?|5dRiL zFT2)VFmc&9I)t(otJ`?D>80vbN@mQMj5+EV zN3W^&*p7{?QYa;fr8jl@qFtw1l-s`a`M}gqXBNm_548ab(2$12*pc*W<@!EnBQQ;R*?8~v zAUka|w?}7faPZN1V$^#^97oe-GYSQqS_3x>lvOv*7sQA;3%#^V^D-u{edo)d`R|z3 z80@TD^|#Ovf5@B(X){*7&!Hb?O_5KJD7UcEkJO91T>dw{QJbizB+-AD`_!Llog7Lx zIEZxSfaHJB7mJkS4i{EGHf5wsR6ujk)c`3t?b>v#epOno&uA1&ggb#1q&GMLZQ50udLLgJ^TI#nW4-RQy?nMklI5#&0?4%jIzbVV50D znmts5I6wE$jNlfdi3-N)(hjiGi;%`^P^mgYAQu@X#HyyV!ldX}MaZ5rcmI9VtnUAl z6%#~OI^#?`@MXK{03dTK>H1rDJ|qaX%=gna=u$1d}Iv|9621+jO;VcWGNN?Vb{?2 zHpz~_DRTEkRm<6re~vP}pSx65uZ_T~(a`Dx5*Ay?-5<}pz&Ckyig^Uv7@|PP6IQC} zM5A^eYPmsd1scq2IydnP0}GA%-w?7*>i3x4qIJ{D{D80XIA(-ZPo^ zHdw-4={u}RDSjn)J)7Ej&fV=9k6!MN7_fQ}kHPMcM7@{?pc}tp6kx@QjAi+t<~^GV zr62P?o^r4uJYg|)**sue>8Z96UD?owt0$*Ydxu7dJ!d-M^}-Q{AAMBqO%p__FdYyH-!2jMtib&u*<)D3C`_H)}D1 z*NtUev47M#<|Fd&ywA6C4JzoZyIZnpy*KvFGiF2+F>mlD&z3C+B#gd)#P%%LQAS0c z6$N}$I10&XtRu-*f6L1=#jA}M#?}(1E)0tIdi|Nl1#WoV83mlQu~_|_b_sbU{M2zh z{ejNEjnfLL{K113QNC^#sk-qB;{0}5cJr^bvA3`{2Fw!c$-n+>NW2;Pfq#H1_kSyM zKe6n8JnpT%6HLNi2?5yWq_}}lPOx!hF?-dtq!G_pi^aNXF+$mi&2N(+z!vD8XwJT9 zimbt_W+;lmKR`5DP@5Z5*u4<|c)(|Lm2dFFxWtQ2nA)NYN=Bh+jZ#P>US!@y``2Es zGGzBZZ55uUlCg%Rgwhh9QF$mg#HOB>%DA?%n4L{cJ}dE7rsg;LY3~Y|TMQT&Kg~(p z=jdl^$G;05Y3kjk05gU}{|n$j@|%x7c%+e7k`=#+QG3-$$nutO+=rQ_3&+A;|(p zqRuW;f!i0%;gh|5Uj(O#)=hUKbmcQvtkFGIn;t>;?3CL7d}3?!`ILH*aBZi*avTVj zHg2Lc-Ze-M4Z|dVX)CQ6KoS+gYqZzQR8r+H*?ob8M3ke)VPAn`wo4MYA-sP?^X_jY zGr1PYJJcrw*>BO!F$_iA)#g|)rB0>kT^&gyJ_5uB`!oL9-JBhT#2~9_f5_f6AH5MN zMm)9OVHX73^YKT|2YAjuv#kWUrt%kt?l$!1e~e0F$38~5P$O+pw@II~@zmrV2f}BMl?r#*rsaQ}UBi5-fm5gXl_(d! z*+C(rs?Qs`>HAZmUj?nkkFtP)yiCs15;*7@UG0v-{WZk!CN`_?6y7u*z;AB8U&a#s zmJz3+k?D22Y-63Gh6eD_Xapi$vkCZV6n>e9sJDq^Pc%pAp3>UckR+#p#72|0N2zRG zKB*+s+KgzjnepSXYSJ7I>qAtWx%#o@Sg2Auwv=TuwYWkf>l9#y#;@Jf&qo*AA$7(8 zs64I&(4B@tcDGIU<>w9;j6y!!;#43d4DF}2|6bXjw*Y60y3qkM}(MKgJv2FL!T7bRmJk(u1zmwz4_d=61VEg?` znrFgMzooM}PtR95I$j>d9aMug7;tk5!_$ET^FoZa;+uH#QV#{BWR+wzx!NN3iOtXa zH5++W7EGu~Y_g!%d|g(EFk^ZhZu>vyS2BNeSd=rdzBlXjhQD`xNHv?lnc?hwZSY!`1( zwVGesmIiqJu#dY?Za0eauog--?8DWb6oOe7Hx)Kw#8$$&${9+@0WoVnf)?y$?)i@|-sOThoSVuSX7xSpj7&4t`r8B>uWx=la?=Vby$i&^+6 z8ox%hIl{R#H$7j!vofjm9J?3%z{f>j&hhU^cGc#+LQ_<#9^gedpIT~ukDJdr^j$F{ z>iUM95tTXNo6d?2rKFCW<$%UpaD4c-cCB!7uLWFi0vAU_u3)Qrlq#vmvSiIfM!gUlPA65($Fxt z=TjJraNhSaQ)G#!XHbN1dH|dwYQ<~(WCEi3nJpm4Mg7P!O*a&gO?Ly@y zUe|jT#g5VMp@2hdZtYkgO~OVREG^?Q^;}EM&YQ89+fdi_Q;i_P@uy{xwa7utP|P~x z8wGqY(JxA+<{DOa)0{9x8_e7Ng1a6--ijEsIn*{R|}gYhy>m7ggPeYt%#b(YJ6Nxm~G zzS}1adFAg!ACvsgY&rKdN|PxqJRHPKC3UO7QE=&Z}u3e5kwxwt*#7(m7iFg8Ln!N_p7_t_0*`ey2%sm*w&qjp8F;XKx_946nt3aB_Y zlpUMa96HU;{%Wr%@o1e^xfgJ;45`LwS0Y>^?n-^G2F@}o?z1SLWh&~aZ}w2!i7FNo zVoK8nC_f9f_6DI(td_R*33wK+h8ixgqAUew?{qoQxAsvMrKYx{$y$J2f70lmU57puNJ4mFcfaB{E9Cbf9f%ncYbOkG2k<+zmi#a z-qQ4!(3W7#3CzFlgqFicQZqKQzZXAQpUxu4q0UTK)^mMRLHs`Bm2nLKf^E+^e#1G&c+gGXZB5~#UnD&@M?bZJ?63LjOmZk)qN9Gnv8tR& zUeV~yPr0q2a^c3MyAeMZ$J^y?aC3mxY_Q;o!$EBvv~ot_B5E;5u{n;)-%{3$=&t1+ zV%SJ|@>zSB-jCmE0hO<`%`&6(Rjf@NP!S=( zg%qXY%{NGBC0aFmE@P!|t=YpVNuw~=DIFZw)A$Tv*wQcv8BPTkRBEc^Lp*qhDa{27 z%HUVc$Y<>_y`~8!$wJ<=5P(y9pwHEOQ{{K`5MF1Zgs-aMN!qTkvg4cm_0Y0R?{rPu zv$?zqYYr#)n@un)Tf)728xMqJ9vy_9)5+n@iPURR)^q-ZDW)m)=T%kC*}tzdV`t9x z$NiiXXBmI_UsQzAh-n{#UFmvP%=k;!KEi|g+KcuR(OU96YfIc;0GvYU*tej9^&^~= zP4~f$q-(Vzn&RK*WRelk&vIH3PrUjCA1*L+8$?x=t<@@(B^><>xO#9SA}!&Ej-N{N z8#6y7oFdtj6*fn-m%~@nSh;8!EZdg9vNXoOG8&&`hr5pwxraFLK2u*AqMe)Ckd*}w zv|>&o(7vV(W>oLs2R#oSUW-Mq(ZnnL+)~TMi>2RQGeO9(J7>TR-A9UaA+o@@`95`)&mrCWZ?odWQLPRBuvr_2fgPg z4*zg%p4j26hiMkSXQ0TQ@0e2}4d{4m+%|QWZ}rd&@H*X$n(jT%3wnop5q0L>guOf4 zseE2d%JLInTsnpQH?>nGVt{Poyh5n>^f>WJTicfmu40PD6a?Sn5V^qwp}#2De0%u7 z(_ZV7R7A&w-2v*qTDYIHNJ>hOM&CVT1#&IokC7uAythNv1NH1ldUb2gI`h7`MD+`} zy!qmDCCJ`c>jp;Sxi)dZQv`#O;oz69C$i!Hs(ecRnH)c3tQ}m6jsAV@+Z8>Y5jKU0 z!@Q66T+qbsCt|8`4{-{>-QYGcjG{$Kfzu*I({-2sFw3$+`5DI$0coGC^fbE2P+u9p zcKg|R0}@D^`LYRu)TLaHFoELp4L596+9WdPYm`k#H496g{TwG5wJePr6Jrz}+i}<- z3&P8X?)}j$$$9_mp~(5rBtu!(Zd8g*Jj}>;T@f@Qskfre5~e8kq8T-+Rj!=k5tO3# z3Z$^Ftk!KCyMHIeB&Eyk;o14gSW^iz!ldPaWbyCh__l!@9u}BGa>SydoQi~j0Oa6Q zqZW&-P%I9dXfG)zCX6JviR>)TZGlYgzZ3@4e2)G9S)wX9RqAs%wT>u&KrO3Lj-{By zNf^z^7nnRr52Z75r~|~o1G0#4Bnj@c-o9QgA`PHNa?~W3T4ftEbWDB*Q*q$nH9$rQ zI+zKn00u9TP%rciZcDLrFl-j6nu&X;Epbv!Ym(73;)we9LTf zQT=1%l~uq3m|_EN$n;J3yROWbwbPaXe;-m2JIKw*3%=>n6(Y;Yo=rE6!Z#H50wO}P zNyY}_op#F~6>6rKB#90YWB#M-Ce%iw&feD1@sD<3o-EIB)n~}1B+*`15Jy9ZsM+X8 zxe1k-%iiZr&@%g;$jQv{FwN6%kDUkmyd?ka;jT_e{H`O`ExI6V;;W?gAAq{fe*47A zaKGzpD}Uade*TJyrcKX?leeu8Md%e^T!bYfRgHZzaK0wW#e;@fXJ#}dY0~yKN^C$N z-##~{4qz-I29W@emdj3_$tv*JG?ck+5&7oQof2Q;@hnErq;9v3Xn_(`{1+&%;N5nm*|NseAZ5OhA@E(;2_(SPy->Nx%VrmMkx&+$V5KJ ze?NGPO@f?mVg}i$#~dmGw#ELK%I@MhIewYU`1Qqd9kITQPc@6@9B5y_FnY2p$F+o-TvtgJgjF2&?X>J9c( zu>>!5&tx5vReuT(%3sG0$~&~yV^T>V4enRl{HFaQA9|w?3Te`UPccQLS^PXNIEdIT za&PP-s7gLhprG(!;=}Dyp;K6D3r;jM5jtfX$!v{!Fy38x+02B6*ioPicw`!z47c1z zP0hXU(>MF=1Ox&UtK9IzaZapik3!~M@;Xbo$O<>v2kUN3eF3k7nRem0=pAnneZD_T zEm}`KK8~rji&3JM!QMk!FNK^yINFrq<}|&l(#0wY;q0F>`~#3xvvB3?rxq~bI+KEm zfn=8D78%hWEK|`+Yu=rOvYq-07iyTYPv!kS-;Q#2^ z%dkfKYM)!C4CMn=15Q2ad{2|fDJ-Abl*2mLq*K+fhzsso(#hF<_#Onf%B=@^4R*!I z6yHzzAZrY90WMo?%1c3soK7{^s%!fqw`|C|S2~?>@!;$$OiQ-vof!yX=i0;RL1_`$ zWBmsrd_!K`Ln>o7EHq?lom>nvr8FpeT=z#_bMK_YcR5}lJl()|Nh~^L$3`%REGgw9 zEnOcuI%*;Y4Yr-IGCHh*#XN3%WN4z|%S`>;#FOwDFzBxSP3V zyx*SWkz_{Met!6q)1cI)hWbteXyV}B=LLjDTa1RH%0)Xz=449cGJ*^1Z25=EE73|n#}9O4!8i3C ziaL*VjPPk|c_s1wuUH!@N?p= z<)x!elZElUj`fRvh_Z^M#LP)MVeoQ?}-OfcE%tOCe4oC7$}-< z+Rj3k=$Ju_RDkt;5J5YMB^0DeW6+C`(yzbB&Bk`FA5V;3B(H}rvUFVE$5!7l*ZD*h zLwDE)K|QA;FwIJF#^-;|SU}4Owxetdo|HXE$`xPT^nD*-cCoCh_>FrZqu6XOTw>kL zR%gT%`jIW0V5}dwIzXqWbRq?VH-MoNBd3HW-4Iar`K3az7mi_h3QfXSd3F1d1$UXLs zM^M>QXY+2;>tem3*EL^W_juzMJ~j}Bgy84wd2B@Q8>xQ)IWm&3({-%4 zAFQd?{+_lzKcRB*V?oX>%`4T@W~b50sPiMz z*o{;-IeI-w)TUwfs!Q$^W~MJ6ne}=F3(Gd!_&}UD*~lTjK$(N4ZDzbRQkAK{#`V94 zKFO$DjUz2Mu?Bc``kMdM6!k8(a1}j9vWrL^ewxZkz(p4I%Hk)X$M|a%o#Df;tlSeT*irPEgva~rrc3?lNfLDmg zO8~ik9lRnuiIy7C$OdyS>1DmP%=?_>k&wHQH=H-?fMFJptJ06ShumWF1za$-p;NpT z^ge~*RnOv@U=+sWq(QGZE#^P-As|()3X!=kV7)$AieK!nTSnV#{I@>Kp1^-R^7b9f z;g=BgDS-<5`39p#QBf{kYMS^kH}uJeC^V08j+qJ7%&^GAPT&yKU`pvxVG$c}eQ>Rb z+nrC2RpjJ50$?!v9t5e%B$;=Z2%_8?mw8($p6@j}f|5uWRUk38jgKR=4m;yB+8a`}-h(nPm{4m-XEUF$V!hNki)yzFjE!$5&m58}&x+SP(# z8MoJ5qp+Wf#{26|gge(WY4q{(+~9ys!=yEhy0vVa*Y9-%_;VItXtBg!tag{u?Q=8$KQ3ZDq4;ljn-csBlaKE%q+!CUeo4PMErE*oT)d9u{F22^i9r zw3eGkus5wD$2h>ilpw&niyi;*rs?R~(hfD?FZ(Z{oPQEd>tum})FRV%Xx+0nTM5%5`Bl6wZ@eA~h#@iM64Y~D>~)6x!M_cog!Pn3Ob3D=Fry7erlXfPr~;~;Nq<*3kXaQr5>&IT0t{eIa64W6-%FaBtr3~ysQb9Mmk$QjG(%|K&KQ_iMV4EU*7e%N=%v-h2`@WH>`F(4!c=SB zNJ|WjRgw7Ym{cab1OB$PhMq<|BGRv8>mFx~++N{aZ_gTeC_Jy_6lW(!Kc1<%wmTts zM_OrpMMyDKZWUZk9(qG8<@U)hz;baj(EAmsi%iS4DvsUp$!A{&qgkre1Hg>@S9=y* zhuNvMOf$ZD8}ktxH)e*?h8`m5MP96l+t3p2L;x`X(uRSrgIbhhdF}R1Qcb19(SDZM zkihH<`z{R!Rn#wLqkSEQA<1iH6D zu2F`N`E<-@{1pk#$)FiK4-&j(O=`nNrdxvRvx!=VgouIy<2Yq7y~Mhn26ru|<9yt> z3()T$Zk}T!UVDhY)oD;tBRbv|q%xlEUGXmdgW2q4f%;PIy?>?{&s0)X)yZ3PGrUVV z)RlOlT?x)5pD%cYqt-#Vy6mvI0*s@l-Rs%y7iAa}|Nfm@j@!PUHIP~xHip6iMg0<7L9Rn$ zi=m$(U?!wC(Ii;G!0O29!S9R7wr>Uw1p;*qgBULB$Bq|jI;vX-T|Y@sidM;mY&4Qi zmP1m_qo~`rJ73hI^M#0(8|;HgPI?PFxu3#BuWts{9$9yA6Hih!Lq5Ip1@EHPsw)-i zT(Kac{^yCejI~balm~+cwQFhviYF;2Dd~9;DezY;Lb3@2tj_<`D25RzK&MS?r z?p{pU=}vsd%G52r^PEr>lXpipE4fo_yIUX&0lYH5f7u~9%AAh7`hRlW`g zq*z;z<6|H{25HL&Dta{9xb<@T`ezw*>%qmS9*)fXgmA{V;~+h?%4u5RaIRu&f35@~={&yp z#}I<|Hs{t~GpY9LxyvQ0*QJhnieIpya{Pkvi6&D6VDD1aQA1Yt7zaTY0CH;K2CiaL=|K^vB}0T-V3Gqt{8J_B1sj zScp&k(;&~zO~vmb&d^1oT$y_LlrA4p;%SVyRuSK!-{r+Y-E~gU1<>87)=gVU*|gU! zljAAL?kcc}Aje{H%(N}BTfB~B?ymk;hS`omSl=)@Yux3b0V+hQi3kot_(%g)i2o!m zy4&2F8JWBKr{3Z{WRaPNW>_XK`K>v*MKd;=RjANu>%tTIZLu9(=#>9Ls(gc9kU&kE z0vne}YWRcuqWvljosk>5hPlV4abQVUV+5Rh<;xxx)TK1&Ts9cJ&DV|r0ytw zJ52>Yh2H7VP zd%bJF%MbgTv$B%OxBnK zqSzZ<+|fniO6+6KBic_vuq1oqH{*$ZUxFTv3|Tk3V=dqqf%Y`U%v`eomv`S%Gw6~~ zgFXE!Vg~nQHxCy;Kap=i%Ef&O)5bN=P^3-7bRjPP^{mDZ#Xyo!-wOQ@7) zy!VgGy9)R2wQ@*#mGTEZoDz#C+LrjB)>>U8%|CruqS>P$IUa|p-}#`TKBkC7*(Ekp z4)&uj+Z@Wx>6TU(Kc9l7qTZj&u~lgk?EFV8bqq%KLQgqEMEiE@#sIWHj0$*oBJ}7= z{~mCHCQRk<{s;Yp_KjfGiO@YigApME)iPT0B5*+HgT zLA1c{+w!jhkte(}JIw}S83t_Qg$w%E z?;e+h{6}p5MO)!4xZLG!_k>#BvNW2I@sqF+?W@yKdlG2Yc)0sroRWGrpPx`;zfAYL zQk_%crK6PLHH%WFoV$*OGJ4lVFnkU*Y{~T1MLmU6rbybBZ)^`%{|W}=#wQXl!lHH5 z{c^u^_Qzw!*&d^QzOnM|yH6e+7X#4aVkcb3l#ZWgbYPk1c9(SKUyccsPRU7KDt}sc z|BxPzy1_O=?hn(v)F`}|F-R!T-sphfZ3k`nU+Vmw?pw2%tV0rX94$;^D;==e^yU;!l8AcZQ z$5G1O+1pFaw%4Avib#&sGv~k8dZYs8K4$~#3{;Q;(=;LXc!qug@t?+5G=q0Q?K*I42Z?b!s_vrYLe;=$p|B>YH4+fWx zv;PyKf8Ln#0fE+(1P~yT#&tS%0BPYBp`K4@%rI0Ak`*fR+%w{zXVD^lX|*xp8$30!u)+@;9VcOE^EWzh#4yDM8Pv&M&cA##cg0Vr#q=qF zpDTn}m6Gb%y5Pzw&$Df`Vo4i~bZjzG&%^>5O~e5{67I5ifeF!|Q1Sq+52qM;-+E@%A#X0Fn4m}IsCH;=EJ_-3hIS1J7p^0 zbCoO0jPpikNTowjN-Q+!py{VXSe+C>n9elEwCnTd`(6d1o8)uRZMJWfx7v8NMGt)o z0;#MP0^jhL#S;O<)+>4-^i-?)2}3r2UNecyag8}o&ic{`cO3aiMRz&%3~fF64D7r= z9rBWE(w3*oo%3Yj=gBW{|4h#vb_yjOXv1;i!uj5@`3TW6)MRA_EkV!`9Q8J)mQ1CB z7fidcYuAH?(`PO7eT6pC07w z7DB}@G&#TGfpwhq1uUu8Pr@}4w&$2NO$`{xq}yhjM<|o}t*oo8yFnogCpYWHl*@^TjewT%u%UUqaxitM_{= zliO{29APUuqq$tuvW(_{VjHvi7J!?&b3T=)?ux^SHkB(O&`_v7ASA6`7qG9Q__BVJ zE^5$<4Y$^%>RWKl_2X(qZ&}EBZ=X$%H{L3i87Fsk;KkCBOKi6Hw!MMH+iNMJX~`er z*fSf^soa!4__rtZ*!r|fWbGlD%1i9BPSgmt+|xJ2RQ2v63M9mR+RIr)3o1_vNX1fZ zEemYz7#KkGmfB%zkj`8Q9kSdPjqSKs8j7^?~33oZgt;2akm>w~wD)+}zH5 zRDJ+xQ`!omXoAUA%R?&NC5IrB*y%-+)?alP|n$IeB`X0rx= zAy1|bk&ElUv`P-M5psv>p;``C$p%!Lr!9rRrOkhID){(T`}0*S66(XDjn6XO+hprY z#FU*yMzJ5qVwfN+7TgpwwC_}ST!fP}r zJ<=~N+#9O%oH%nobI(w?ycr4ml1w+nQs7@~cYD;UQk`$aFDd#Is+f1w%N?Csw{O^M zoq!YRgjwG*l}-!yoi^G~MjJFBP>)q48fG}l%tOcnQqHyKOR{3XRSnOB+Owlq%#A~I z-gpe}ksE)^72R-^wrkKkso9<;a-~g_ncsJ2f`d_^)+Nh^T~!aenlD(gW1ytm*O~gG z&(WrS`CzS{NpHs&d{lF;4BKh!1}wc1Jq3Za0vI@3U9In0XV4uVpg(Cxp18B1Xq{U>>j{5YRcBpi>Y_qgIHY6?drIl z&!MM|L39U+7oFSORV1$Qnw@{lvp*-|=7w8A=9bppo^rOZk6wv$!>9mXjoshigmm)X zIx^tT#IuYYneH|KS2+?cN6Eay0~}pf#0+PcjLP+dZWAYye=_tZMV0b?3hX;_eL%OY z#H5d0(5Xv41K)Vo#HqKP-uxr^#Nl%j?ro6q)!YS#=qA{OpG_0z;bjeHw8xXomWXU( zHmq@*V!-3Ccl|0pU)vUt*5W?29&$w1(a}OQzujcUY%bnuta*72XP@bprGT1lcvmbC z9NM;kZxG$?7^~%99%k#0Oc%SD-LI#nOyj6n&Kh0pxn7_WbI>m@w8Hfm9x7=_<_dIM zEN1Reh`+aYXSD0G)+*7nWA%x~!Ru?CC2>S~NO@kT44yNkbWJyVg)#8#1Eg=pX^E|y zq~bnS>!aVDQ2iUl^XXS-xY#@_>FS%W%ASkR(dI-5Q}t0E&=?^#e& z_=?gHl{VoceEK4#y)t78b&=%SZOF@xj~`Sw&uw>Qa^&kU(t}@mr-q%%@x3U}_alX_ zN8;%oCu4kr+s(lU8^|lSit`7YPK~^=>J3_3WS!~GaU12L+1sUw^!i!3T-of^hZL4I zm?a9iFbd1$xgwx^@r5D`P6Wce`EmJ*$tY3xsCLEUn(}sdXe(npyfr8z8#|NJb{wK%OMX*_pGCMMqQJb5@q*F6`>&maYt>J zf)Tqoc=cWvIl0J#LD?XpL#&SO91r+6j(n}4p@gopBS6G!|FWD0EQCTYR;Pgp5WwKb z5i8)}{RaFy&c32XqX15;Z8D~avRObO4U~Gh024UM$IDuV%R*rqEn02YJn*{e_jnv^ zVW7g?aa?ntK)T8y3?B&AoKJD1l_A)a4Z2_=b{dQy!N1$>sw1j5Bj6~OjQ*OC@B^IetdGAqRN=pTd0HZzk)#8JPx zYps#(*v^|Gd*q}@R+-d#luMO9f00PAsFMw@D*Up5%&=H_<_{h)%jOZ+46brWZ^Yp` zN4%XF!@G?Bd9uU|EBDzNEU{q5JEId*R>P!-CH7D?1RJLCn1FNu&6v@onNbBc=(&EK zI&e-Y9a3Ilq(oAc3zo5_ z+N$MkZWVP`A?5E)n{}xL;$10G-R79BeqGZl%m6u{o#HfglrpJr&c@Fu8NkSZ6v`H1 z$|%>9J&tV%Z&=2FnTI-k;^|ps@zvO3>XYRX!>34zI!&S`WDTqo|6_b`A;lA~__k1@eF$wUiqdnJ zQNxYXg`^mPGUG;&AHwHV_+;3Eat8CcPy~48r+b~|W54%MSTYZu#!|0lYWzn67cpM3!=4533S(}q?= zU6e;z^hQDUqkKOzzXs6Z7BXW$-(?{dfO=K&Q%4ky5Q(wr)>XReBaFq=gyRIh9c+Da zzjtfS4KX^o;~F_AuHKDoiB@XB*nO?Rj;FWgq$oD_twH(@vgOy_DBUV~SNU9loD@u1 z(xT|@LTW^8-|y6876{o>dd`U*@hTJc20Av$PTW$r z`!a7C;lz6C7M7NHJM~h;gOsDB=`_fa-rIcEWQ;V<&}yWZ-gI0O%9s~mXt9M+DH%7% zr#aiETgcd04V~m<#~=cnjTJEL6rr@0{#S>M-lW<5$_#oQ&csNS-b!In*(n7#$lj1x z8z-x2u);cpLy7X3u8ZD(A?1TIIEielZj`MW-@t}ZxiB*|L1C{U6nNk!B}Hz=Qq@Gz zIkjK16^FA;_nDh#(l5DEOq~T|^}6Y;G~0smbH~c%6X%t71z&hyyXeyHh)jDUS$9(V zDQ~hI9yejPDRHA=)h&iF`S~c%c__st8|JoK;;wyV(EX9*Wr{lnpz<|xCnAS`s0eu} zFwQuaKvI4#pSlxX^o8fPH=>A?`GU(3T%Tl`a#5_}p5*|kqekFqUN+^z=T22-qdg7E zWrwQh1&O-h8*i2{xjW`o<*s~!Cj)8u0-6xPH2Mv{`gk1t;Tjv~>bP4%yYG(z9ZC9U z&d;4P0bMu{qycuC%k*4b-Cd=46+d@_P`-cH$!<~u5H?%F1FJU2?x z8Ce}6blOe#uB5G{fGeLF&#Y6b%=o_~bfP}-yXc6il!)(LS+2@%Jtx!RKW@EDpefHk z!Q!xV)i3y!!LTlbiRiNBp5H0SK^Lll+Hw)4r9^v!z0Y3qGezDaKBpm-W#l7xW&CDg zyI{tlpC9#Ts;$a2w;g=Zm(Tm5>EYH?Y-1PsqZRfA6{KH|CQJ`wxKlf_+w%?O=X!tJ zj)~DkU|Dxp5^od7=iYYdir$9TAkjZEPrwRo1&S$eLaeX$vc4jXT_>5lf?w*kair2b z)wZmQ7>XoFnGf_Sjv5ToyxA;(GP0j^H`U&QtaqBNoLTQ7gKdy>weYtMit*YtD=k?V zj!Dfrz^4mHQjl$@c3#!3nSH~q8fa!zs8KGe8(2P_d3pM6d@%3Aw8A?x;{J612LF+w z!y)p4tRzKI@rK*la$fi=>2ADed3(_Sc~k+s@J=|_vZ$y}lW&R50{>`(>J_=PU?o93GsN7Bg<;%5(=pGIT?!Dja9M^5q1~(UX^Jy~t zL!L2dPbnV})L>)o9PfOw=5y!E@hyHG49<@7pDBh84e0yaFw@P`jDbrFVC^3v?^CY! zf6*euq_POHyo!3apTpp}jX5Dn8AAeT;i3Yet_hDfdj_1OZdii!vYvO{Ed3;XIX5yL zuEBWrok}@`dF2+5_sD{Ch7UX>MX|Z-DLim+)-P7*zP1{~kaBg3Q(8}>=<$nJIubtA zBY?5(TE2gV!1k<2c#|9t&&wTLmdmXElf@exl>oGLg%EG8PLyrm6un0F#dQckBm`cx-V(vyR0n4BIXy z{yj9bzU9~b*t$7^Pt+TmeoR++hPSNj;$E+X46j!&WAN4(J!^R?IdBiKyrzcusGrpn zUPFX0`Hf*ufRmTtZ30%;JzF05pi@8OBiAS9AEx+;U9P&L{(#o_YHH=w8NC>Oae;5d%HbVU(fa^I7^CM50dOXw zAO;=Xg1N>|11KRtP;YWs#`Z+==GOrSE_rHz&F6}?SqB&prd(B((L}V1QGFx+MxtIK zev;GJw4l{#U%$z5zsdg*U@Y144fvKk;?nF8{r}%$OSm z27kSrC|Xyi{1F!rmrmGE>4Gvg%&0Ko@m4?vj8^!HUacuTC9uG$c}&Zo|rwODGgr5u~%7=g3 zOJ+1q^XnfGZs*!DJ^51o6o61B6)vNi-G!+me(^X4w4t{-Z*pU56{nNss_4|HWTo&0 zcv^KdVgm1&-q>aAVavb1< z6hQ$d>TF~J!oAm1_56Yl2f)9iG?PYb@+x)d4OcAozM0lInRXx2YoF}J&}Qi5aW6&(VPBAm~ok*bd~c^d69dFaj9^Syt}sfM-b zTMBCiIXJVGmMi3>oxg=>X z-Ssktm{E@t?K6glrl}T?xxJ@Mmeg7mlTy9>W2Fs&(W}lFq0mA%lwkfxl_edot;~D$ z0+aODW+mdv%L96{r$Me9>2{p$B===99nU{~ynvc)Ut1XS*?X%UtG9N0p965dKIBRA z8-16wx>Zl1pXiVWStWg3vTg4sd4rC6Y2*bD6qkL`!{_QF_-R*S;(p?qI%dXspeml78h2H`@#zUeR~-Wp{q0f8_Zf zyf7lC9i^)lF|`f9KawAIKP5TCyO3yDU*r zU#2Ek=g9Gjdz0A~tM@&PaLn{CUrT)6zf9=U;?UVxS6EnTl=cCf={WVff^N2$aH4Fu z1nNZW;t>b~MT%+D@ukgV{q(y>=<K zlzTI$QMCi8?TQU)fP6_;ZnHwwuvzV~O;5B3fwQgYZ;}&@4$p_Ci z(e)*`!OLW`8erJ)Zj#6kpbW@ovBn{^tMi#pN8Y_AVyLH^0Z$>>|KJDT+lCt}`K;y| zHq1X|)3yjI=S<>7nT3dWMI7kyMBPo5ude4^3@^5+Ek|^`hk5_=iQIGxl1?|}chda$ zW<7=L6~Zt-L=}qTs4hgzuzcT^sc#;wKf2F)!{b5ewI8{XZ04+O_O!-bhOz6DMg)rc zH5Kz^D5q)SJWD+XgGa%A50>6rg;-HWLHqRR@af4CXA4UUw;UAtb-qH1EgK z6oZiNrt$-E+$-d?7t!GM%ZOg(gH<}HC5N-*`g^>Ri&?XJ!&7l}Y&N_c3fYUUz%s0x z*^om~6x^vRoDSng`yE={AQ6^eFT2203nP;O<2oZdrl7z=6W%>hmK!z#;Scxh4WCKT z5ipmynjHnM)*-)@`t;$BPqg`O@Qc8$yFYc+A&pB?!AT%tNW9Ga5>Nu7C(aS63c+(X zO^*_OV~|e2%CXwr$$i_)#q9emu1D@ONo(fvdozj!SLTx$c0ZO1cb(2^1MW$4;G@2I z(B&0rQ_WsDopqWoRgnt5V=484iN#BnK7ZxDQfD9sQm^s3%xqxJj#C&>w|9U*XsMuBT@d>|vV%YpO(WGzJO&Oe+LVLpo+b9H# z=^J#l4CT<@^fkV&JDae?M#7c*C7O!MzIAbyidmMpKs#+(T&EW&X|odSFa_3T3-M#h z6vWXIB8~Tyl*5M5OoG`tPgLH5HM)RAzw(`Mu-$6>0Y=pB0B~um0Py-N|UFTbiG#b+KuNecJD7x_VyjZ^$xk#CUKj)(LWmrLJLOqC=4s^C|~kp#(m{i zInysWwsF3vD6@>G9zh(7nQa>E4u~ZC0u3%@@h?cZEnkPn4sn|NJEcpsiUg3F$;rkhK0 z6SGBHmD5+WXt0#3FDr7!ImFqMQ%TFx14yLQnBbvD9Y}j)0bX`zO z6Yiv)|1c&g<_RF}45>9lsu_?7-yM1KIq4&<%fe$*nt3#%WsbsqOth5)Eb1}UB*A>e zka;Io1%K@eJk~$rLhluM+Lu~L0<=%c3*I4k5^{yXh;{jx7cfCktL=U zO)|&^ixf)`*kCCJ61-S6LX?S!O5s*l_O1g^B*M{GMNTeN)RQ=3`x?A-gh84EzU6rC z-M5sZNqDVz_LH7mMp39yxaD!x;RMb^vq+4E_o?nZd>Y`ECK2yMwBq!V0hUaz+G;?; zeXEJmMMR$45h)kIj!7WvyD8??`M^^pt&x!sfjwEsO|=zT!qvhPR`{ajz9REAq&|V( zRW*u=V({qJCiyd}QRIS`A&>Bm0?|rbqj1O~{j8zokNkoQZ~XaENtimqW$DQ_dI3C1;j$K5IoM&Wa8;>b%GfLA6QgttLy;e%eOn>g2^IB}jDM)) zoT4dd8ywPOHrZ6@SZZTVl!Q#j-v(-rs@Zk=G9WOxiz>$jqMw)YfKoz3?X`hGb`cmV zGVyT1$E=n7U|fZzUO8*cp~nQu&}GxtEz7$Y??fV&j`LTpVY^K5RSG~|jORD+8tw(v zb`@{u&5&d$A_33ALjp187fhrH7}o2bTY|`S1EUSF{1H_6BT3Fi4Si>oa!!PJq}ctZ z{KaoX_PR^YlNv@HTtcIB=V+&HrAQ36WG5IHDmTNoX^Gu{(uI7726l1TuX5)cqBHB! zYH1hCGFzUH`F=2Da)JcO5@2UaA=Ao;TK031DG18VqB{#0R*7QCTLsB$RH%kueGzMv z1WZE-q@9}6KxB;cwaksxJG!(?y4rwqVwX}#=Qal=NN(`<(;}(K+TM}^J}cqIB>iUw z*-UgY);}B``a+mmK|c&--#x5uC((D=WxY?LY-(;tF@W+|8E*31~?+5EQ{-X-+apB+ERb_V9MgBE~yXkbeAc;xpLy0 z`cGE~KN-;QgITu{y(HKLS0K6RnxA(R{aSe#nt6mPnWc+U%uDEb^?I^Wye3uHD>o3I z5VDow=Z>_&Y)@6BGV($CY{FnNpXFP#puMv%gZ%c0NZ)?@FF^suD8zSqta+Wq%-7@J z`S9vukaUT;c6t16tfHFH_1uL)?=^=4acQIClpT9P2{o-uau!Qdeb$=pZnzpSl}eyO-zUkP0?|3k^bID!KjliRgghzBk!d1P#nTk4Q$-{r1- z=XY2LWwC%Ukcj*vGH0W^3EgU~J?y2x>GfpDuO5fFcW{+nAtxka`H-)5DIzsq0FMG4 zxli`8g?GVES6ie)vN*UozS8?UDFn!zQCYR-^5d%YX6)IN*)13C%Quu7<4!drZl*)X zYr`Bc=pwNo=B_!}-Et`-Xdqrxnb*ljM8Ma+Grdr_J5sPZsB9qBW6vhpXN}pYi|Uok z^_v)Pi=$~CNJbAT_tIF_BXnOx=L@D2kINTor!p_M3y(QpKTWQ=wSKh>AINp6VjphF zqTpn*#?U`;-snqlI{<1}09CIHl>4&2bVdX{gWxf4m)LHynHZcV4;*KjUrY-zW%nv3 zhWbfQ_=m$Aro@u4gt8_!?)kHJfvQRCDP#AnWDnaU!Gj^4iW;*rq&?MT8^t53R*$qK zs8qqJ5-4<8x^38}z&~{^2@1<(f;M=abW*=tU8fAGuRP%jze07fu((#h=E5Fm zhp}@n=3$}R3=a`5*))ix<+ULqA2reMLm8C_mm(PE$+AYxI_kFis{XGmwaf6kB6LVq^wRiCri2CyX7W=1W(%JhL8wtdaSoxi~T$P^%9jTCAIqaw#SP*+7H+#tF zU?X)HG))iCvyayj1wCTV5ynHH4h1PsKQ4WGuYKnhccgp&Su~C=r272c3BmfyPdFV@ z!vWw`inl1f*7(VV$O=oil?{;;e0kBNRNYG zRl{2Wy%CeKTMoqOwuC4hf78%R^fTJ@dbqzivI|zr=qi`^A*~hwoq68NAkXlo``I$W zy8I)2Fi_l1JMM(pp7opJ_ue;d)U&bbH{8&&mC-uo0Qr(ewqj_3I71hb)PIL_9WpZL zHORMaGUO|%FbUX>N!r`{unG)Mdi%b$Qd-S-OuQ*&o6@g&e?W2?H z{>`n+C32)pJYl4@=uy7AGm~2A;Y7SCDNP;5IC?qoAF(Qf1nSB)XI~Kj6y6Uav2aH` z84{-ml+-LTG1OfgZI(IV-Q~B&ZH051S9SBizaOxscLBLso)hz0#kpDSOvEhmlv;np z^ZLe)pM#}2fv{DIw%&Ii&=3t&2rEhGe2e;qlo06kpe}^davu0HWC{F}bjfV!q!oXj zF#gAySw-T{y zMh*Zc41n;^=z%?s0^tTW8+SGkq_t2}!1ja*_H}!-^`%p%Hx16SwR=vkGa89sIVD4T zC>eQY&xm_4H4b#R@pByD8%5{}6hdCV*_3Nje)tmr)9Q4w%!(7WYpbgp8{&7+AbgVGAu8HV32r#zp|%ehV!g>;<*e+-QCsNEretxW7ywebjkx*oABg?Y7);lKBxmV50zS_$!EIwKh_i{{89~&_af-fh@ACEH zX}z_2id}{EZAM=MEMey6T{CEq5k5TPa=U4RGeFY}bbC!le|C*cs+R%vz6GPJ@Z8e!IrGsyu2+?G5)8z{}ocR?DPe zH$WFZVZZJ^k`bDBo@O0*l|TC#Ra`{RGOe$#Rwg$i&FcCF5yOE@Oeztw<$SSI#pY%X zn@ZZ8T&9nU1tOB`}6h$VZq5fzYtRwSt?hoGan>I zrz4mQ-x)Kom5}JFF{*~(VQ6{E2LIiSgV*Nf`J}*-J5*<>Ld>^-PI#V_WV3t)z(b|V z=#QP&yVseI1g^IyTHU~RI9ulGJUX;gY0BE#k^K&*vu#lI_yLiT4LAhy^28(1$#jE2 zVb-4SwxOL>!2zw_sCGG^i8Vh0bZ$>`RZud%QU2XWq&*n&_{ro*Tu8CjcH~jjpVfu`QlslBvc>kbd z)LiUV(_%A3#pkP$M*LGw05X1RS-azg@iODWPZhlsntrZ^-I@ck_jwaY>Ix&NWYU~!~8hCqiJ^F=y!sb zev@g1Z~WKDJUE5B*skwaE%Nf!UXG7r^=}n!u6~&Xg?Dq*=j?MPK5SFZS-*S~GY$@k zGcFr9`neg$^ngeZKQ5vYGLV3ZSM1uY}ez?c7!1qRMtJuQ2AR{pk!uIqfi4J**CyOA-MX= zNuoLzkmM!4&(suV+VxmvM+H82Gdr1i2?{cdg1puj#r*6!z6`I-BZp*1Y*JGVTw{5l zi6aKijTcYZL&z=m^_g7QQE12`QCToKrSO0Za+G9hU1bBC4>7=B?%_{wRSQ^$p|ddB%G}w4ehR zr5HpS*hYFcs2!J_PE2m)sWd7(M|j_4tLSMY_L*q7E@o=no^giUdgoK!X*x5?=*Xrw zlvX&(${2vTv;_c7%)xC*e~He)$EUOJqx~=KW}5q6C<`m zdLU=-kP5ve1u%9mR^)f-NznSQY)5TQ^^hPh_IEI0X13sU1My#97mp(H@>kyP7q`4( zBAcBA`~B`=BGw zII6K`8Txu;G~t)3c5yhlNMNCQ4OZ@WC@x9IPr#kp<Xm_e+skl?-_4D&ExfdZI;KP|3eZTtb^76*9Yi- zjcITu(hsdHry%QtS5ihRtI8>=DQc*x%AoDMqS5AFVQ57)v?3mV{G_OXChC_D`;qF$m12|6%}QV6|zwY zVbNakvSCpo|Jlj^?8neA$|o`~JUZ}982VrRdU>CTiPphl|25FRm;aiaSNOjN3X78a zkBQ3poC%eW_X?L+ki*OWyXWJE+Q%C;4I=%#qR&LypE(nv`=8S{4vh4RI};fkg*LEL z(*9S=|4sDYqyBe$zvDyXr+dspLl&?DX#-e+2h0uD`hch`=9-|GMihu0JC1N8-Qk`itw22>g-wue<)@ z`Xd5=B>wBJzqtO0z#obKy6Z2lKO*o);=k_ti|daF{E_&tyZ++(BLaUU{_C#4xc-R1 zABq3E>o2Z9BJfAzzwY{r>yHThk@&B>{^I&00)Hg_>#o1J{)oUIiT}FmFRni#@JHgm z?)r=Cj|lvc_^-SE;`$>3eg-w|LQKp ze@A-wg&l`?#2v?RfR29u`gwTpWB>cNuU|fY`ndPchxfbhcDA?PzIna*YGZxv<%{R5 z&sLr;KY9FUY4PF0{Db>*_hx6Nr|wQpjE{|u(C*wG9vZxLbKpjQ-}T;}?yhTBuXJ{_ zUv6t{X>Mw4sIR+JTT@+CSy5hAT2fq8SdgEWo0EMpE0da$o|c+INhV)7e=g~4VnTde zY)o`iWJLIxu+Wg;pum9B{(inb-d-fnQy%Vat}f0_jt=&Awl>6*)>f7l=4PfQ#zuw) z1bw{|x;ol`riQwjs*19bq5@uCPF6-*N)jg_E+#61#h`_S1O@o{czL+FI62taP)Jr5 zW+p}i1DqZPh0uXP$H6c^AW$fP24sNa#TlFr0$@ip)-@4PFo1aA$Af3NNJ!sPPqL*h zzFneNii#s;t(37vBwo^cW8 zx{&AL5|~q3=3e5KSR3Gutf3GYc}s%{^uhv0{BFW@1|7oiNTMrn5CmC=CWk@|ICD>O^AHNF{L8ZkLQXQf^*^%n1`^7jbpcFaktP!)VU~Z6gRQ?l zj}3`Q?lx(QA;bQ0q?iZMeoE3^y`*!}xT}KqH6zfb@p<3D45)k5l6x6&CMf|A$DM`Y z#DzLy%?&J_Nk1J?pZTU`SLyuvd;m+q5glY_^_Bg*h2HbvnHX0%3pvH6sSSs=T|0F$ z#~uxI8HKU|hy`7N-Ou8cCUQ%}G`|Hv}+HPHxi2BUa9Uy-{|aPwoy_yP+XMCK6fdNOTa!k?srFz7BX`LNQB@lqi84E9TILN?BLb- z&}KGYiPibp7brQ|4;7JBS-M9h3ip437)f)O8bYd=p9VfZS*POZ@MjYWa_ zbEprflg#V0^io3IM>Vig1_G}PBRtrzXtnS0OQc<>Q$V&M#P&H#$jkvyEiUN}AaE)c z_`7WU`VqnjU$vhD8x@Mpxvvek(BpetV^Wnofwyl}J6+w4=;+V5WB?r6dr#;OBG&KA zHO@z7^eu>zoUy_IvGerwdU!V1cMwOj$d4iB9o#+xhiGS$H9y1hf=Ie;_Z+6nVpl)k z9DhE~eCJ~nk7cwv&1kXfGfTHhqV~xu_|+dH`4Ow%Up!kAZ8qryWHdNr4sdj7*=yHr zC!6~{woFtWK|cj^255e<8IEEyDSc6^UWMTjI9-gicu+kOkMjN^`6Aem>HQ{se%Rwo z(D3iL&h(Q%RgOYpuH?R5L`m`13(@)5KGduED$1hva3FpHIp#t&o`_Pm+Xs1FHmGvj zDpDG?v9n_O7^(I2++OLs0%k)PUBcRERM=$|ipZ^^rC>A6hvzAJg9IK`A=Jm45~)kZ z^Y`)|>q9C_G9+&n3TyBAV=m5FM;g&+`qq!wYc1uqHxp=jx9VUf!}N7y%vI^yA65D|uUNYl@zDy)5T zd|sAl3V;^{pI-ylWUueckdm*jf*GaEJXe{Xh!Zq0?!tAnGXE*QUo!G|<3s+DIu(el z>_yE^OnG{?f|?Sp!>nqj>Nb@mPG7k|w}`oDpbl19gA+`i1>~{Y_YDzEqv)15XS=_> zRZR^s73tg*<#*N8(zbi}^G4-t z#`p}r$xN2gdVUICypK~xun|?mTTm#fHYFD;k^rgU)ZKPr7YMo+@HB$tpGvA@G+lrn z%_?&Pjv`}bR>@r5-6ev$si@Z=y$hEPB(1)XF8=oI%wEB!ow+BPeG3m(_@}E{Tzy8K zUdSt@91m>W#>{9AyfU~>un)?=mG-T9iP1=D?y;|FW9;ow7X^bI$CfDgiF9hk(+K8< zd$e*vu)nh0uIQN_ACPj=-ihpJMDk2QZ=Ba@B_+PmD9aSBQg5%b!`a1LaJnpP@o|;S zhhs9Cb?o!rta^_=viuK*&cvMw2aMy}Y_kh9b6*?7oXvfNwz==QZ{|LtkR+jvx$iS1 z%~2tQRMNG%&q7GL5F+(UrTg&fZ+M^geZJ58ec$f~bc8|ZUK>1X01SVC1ACNdp-^}H zD!#35>Zt4y(lj?MjxDbgw;TWCxoX-&_U3Q!P{Eqn3nC!FXfooJvWRdLbpS~qtKg*7ilCtowfKw$M>|M~c&Sd2e!7w3}IRg}nuiRz-Z`8w_yYW5AK*ejp{ z*r@XB2e5NJi$>M=U1`&-rq^Mu>|>bSKP@NYc-J2M7#qmOP(QqkV3`@PBB-RzJMAn| zGsxg<$YnX#1FBnA=a(RBotb6dee|7MVFotT{gPUGHgYlDxepLtE)x(hVu<||r00y%Ay&(0J{^`C1*$r%A{~sT|Zh-E?Yxv8Zl7T);16umt!gZ>(<_g-XNx%9C*d( zoxQj~w6&J>?8YQ?j85U{@i7CA2D2pYSkFGF&Db;!)#%yi5)kcv#*<+C$V}X#-H9lJ zrGGzQ^%z`};3;cg)QnRJr`sg;H4J)${bo(9*EI(Qtg0{KR-vs+Z$$^sph_|>v;1(i zTKvU2qET48aU$rXO2(mbo<%=bjioQyNXa_1tn5X9<$(CGdbRap@2T^~LMFX3_n5%6 z{i?#)XUc+mE*0T_?F6!PfNC;us|eJ|qlXi9h*P*mN2uIx@^B%p0;+z8iNhT|+}` zM8aFqw#ic`iO{8dy2xCutMrhATNrLVjLrr=xT$$q-^h$BDoqw!&cu&z9mWz)AzO?N znzg`7H*r%qtN|vTFDU9Mj+Y(}n0x|#?aKQpn8?7vb}k)P&N>58aQ;IMs>#N?#qmq) zo${LXPS29-N6RA3ATL5>rLs~NmawG@B@q{G4DxqkL&-GWhKG($e(vHPPz%%_A<1#QC? z3!Ej!TyPPlu$cZKN!VPJ*KIW>g(fMwck~z)Li2(^Nj`BHzU#APmc~!3T;sV&0GA53pfH15pLAP&&9j5eU6cYLoP!G z_s-_IfT1_NcB{R=h?rQAWZ%onh|_>10$7NaG_jRf1BH^SAeV;RJ#Lv-$RFCI3TS-9 z7{0M~C8-yYCCpa&KV6P+iUVAr0ORT4Z%IIjy_^hvvKhxpRYWhGrsR$T+i@tvUiR zCH-uS050V&;haaLM?Wn`4PzR11ua4=MhX$569Dv`=xVmn?O^vg658|$7R?a#432EZ zh!21BSNq0GiC5KMhF)A$GA4k1dW9G`Exllazd)T%O$3soFY`^foGG@mrATt-JD=&j z&MLWeBY}4nQ2deKvs7w}0}cI=K8H(>`wW(MKELe&R|87$k7wJ@iJJpdyi1eIzgfST zhhKUP%^}HJD7t!V6brwJjNzzn>Opdcjm>9^Vxa(I9YB-5tiNV5FjK>;x6X+KFoYh- z&`M4g;zugyQRC3P-wVLEaLLtrpk(*taMVGa684CEq$5M~<~VdT$lwY|Z_rc8XWl+2 z42tSjzRC${S{J^KH%~bccv#<9s5F94!qABZ6T>0VQI(SJ@k?!qZX{9Ye(vilyyQ`U zt{@Cmn&*;d>|&XDa{`{)2mMUAxJ}A?WQMRaEU3HT|6+*c2*OEoVnJKFvUEB;4{q|7 zW$>C0G|ISM>K~-*-e49{MUqrDNW*+OVHpm4vaIfkwuYPlkBP*RKUP~UXVQz5tag9oEdRBq!`WGcF%hys9(iJ{uSY?$_P~yGN{ca$wcCX)&&Fg1x$kj zk2ecE+)uA9Z9nY88;SM*wibWzUW_=mpZ~B$?@FJqfOYo0O(~BpbdzSN9~-dOFJr$J zI#SNR@I#)Xa@u#Nh0$Yn=sU0adI&_GZU|Jm`X8|F@ zD<98)@S{q-AF_3#)(;1u^N7Cc?L4PU*1l{Lm#cgyJVEbqF4A8+`3yfRm9ivO%`?Sm{0<=uVcuftbsa@Hka!-hWEh%>@m_k|;h5UDyyo zxl9p5k8jd4x{I|--@KOA%W|c;WI>_vCrip`IkH%EsF!oHwbX?Z?uBRrg!74oFJkVi zMC)~+-#&jAH`j}8o6&^2yLT26R{e2SBy7h^bEnc+Uel>n$1a_h_Z$x}840ArbQZwDH<9j89NPvcypU8m_ooImjN>=!`fWuKrGGh0)5+LV! z_+x_2&${>@nEWISQ|rpMGAD;{eK)fsAR5GNQ_#5Pt6Wt&4S2Rk`nYqQw(gaRHSw7y z;-(4{b{$R;ET!H47pos@bk0Kv7qA?hXQCNi$*4}SxO?pkdzLzsRePli3;B1asLFxO<@s8&PKVHF`QysZW$LU&aUgE9v5!B?6rx^I@|*|hZ_)v zj$7tOE<$*vG&}a<8+Qtxc|eo~-9dXLw?5ys-eX#^fmU07Cw}zt8$kRkk{e5<)qh~F zkb2Kf4KoIfdQU`J0)2J*QjR|c@=ez{C`Qf20i?|@^;8;z0DZ6_rMsno(X!5Ox>Kbt z0tabN07=o(I280%NWu}JDr)WoeGceIyqee}@v}nw)mqR?ue-l&rF!ycqH@JyDc%&; zU{3FlS&zq8AlYHo({_mw2*)u`&{9aiZ=kG)Y*{W(gum3Cezx3R2pDJs{v2=4KF_Tt z1JIkp`p_=%N!Ys54JSrpsLHYCJjmNyGVzMOB~y@cW96$$lQW0UQ5ze~R(&kGv+BrW zHy=a&R|IZ&S`-W+iwnFRDq^@^UhwMI&HSeST#Z{h@PDa?DUP z**4PXSiX;}uI>7HX}x~vwGMJ3V>WdvyT+wYBO}e5p&9iIO01LEy~MllSoAU#$SJlh~fN_(^n5h2yttPNazdprNO(JJ}Q z@+St*TSIZWovV+t6S}?Qs5%WtGpJlL^i|!T1U9;5pjaC#VJVK`u7!S=7?kB4x-M z*}&lN%6&&5cfQ1$KDJvBpQpU$U^voF&4N5vmn?OM!$VfsG zVbE$>wDO-PIUO?UbeJ>&cp_FU^|B1wAN{nBVSL4+}L=IDus5#Wy> z@1O27>0JfLzc_@RK}zpw(_TV?{(CI?4rcv$xQb!u2jXWSY!)lf?x|xXIz@sn?*Q6^ z6X_TJ+<^8PgRcsP#5V!Pa9uH?M#&S<9Q0O9X{5J?bAL!cO8R57Sx?G9BvyBO0$=nh zS@<+U(CY**Kz>%w)8_fDb>A1R-GGbVL|Q@UCx_Hr4+VD|tY+PCqxsTstM%bvg!@U& zY5udGS%;PL%iQi|@W9X9DOpMY3XK3%YoL;?s8EvJ%qg%1fwy${6O(A`r$8BE*LsI7~{6})P2=0u_vyYUD5H_D1{uj6#8k@%g8|T$8{N%OB{rPV7$kuPZE`97ZkigMX zlrupN*2lr&b!H}~g)KUvf%HbNZe+-{UpDtH7PbCIFvXw**?>3|z&dY!Wx_$dtkOK9#=4nyRA)6U3jM~)ldCg|4)L$zuhI8x)~*iD zxSCFCJZ(Vthp{n?clMZ_hVZ9l8Hg;QkVGTWcOZ|9dhgp=~|JS{O}+@>G@E zAilSIUDs?LSIY?AtC6N~VZyYpXxVJOsI4^Qn_TWilt*21tBAD=Ar)RAH5W+4kNd@8CyTl$v!;e`it1 z=QPh2!3kuBGw}=oRB2$zG1mvbbZ6#4GBe1&_rVgiQ4;5J~Ty#e@thjytFLun(SGklw zDZsY1p!QdwvC#xFOiKX+D246bkAk&&X17A&X+CW&`Ah~6U90%r9T?-P+nt>b6MOM3 z9&gNY3o>$h&f+b3570VuP0|SNt|EG37@$0PJ>3m>B#-;olq4i^A zjr8k-iU82+SUw>A@CV?x?mKTT8~9|tWoyH(#$LW$M}$a?1Gd|gXJw8m)^q~eoA_;( zO63@4JYiYa$nnYC`@1bs9JvIA5*aj0IR$fry%w5YPMN-!Hn*l23^F(wZ0}|vjuWM=mIm69Adzz|LI_g`T7app~^}mpS=P>(Q z>`y8_|~9f6ul^TjvFh2Z&EUNnpOwP(XknASoEc;d#51V0PHBm1nl* zd?+PE3t#_>PD`%Lb<))K00K(Px3hy`Hn(vC$VO5WVJ^<=hIqbvmlXf5MqI_Af{wxp z4U3tD*C=5N*XC>01tyJj(eJem%wV z)=ysSPZmx)vXc9Gze?*kJA9nlcL-Z^%PlM^CULqs^FXhf9`8Hlv^pWmXuha0#dI z2oONO@%9r5Ih+h?NfGs6Em*K-RvFY_fAsK=!9`1$Mf|EgA2PC9b$M3eL6NcqsrS(V z4zQ(6jG2YoEu;)qlerjeScU|(wU1O2KUB2m6rm>oYf=KkSuTA}l1={csNA)coG zSR9~Xd9&SyFCa*;SVA1GJ~Lg4`svFDuT2(E`q%APJhef}qB$qcJiz=6=pSvcnvgg$*L713#7tVFvp{&E7M@`!71+Mf;FQ% znUOLYk<~B?wDO``_OnS>&B^1cPcrc}zsK&)uPVj1)i6Ma>VKAVu2ouX)W zQ{}(1i;aHuAPj65$Cb2m6EH3xz-f8SA@A+Fbt@`E84kf_h~E~AV6OBhiZDDlQ^si) zSAen~5(p=FR#HU=9^gY`z06^jVv(>%TZ{DO=q=&G(QKHbZP?{)r=jNng`_0))46|M z^%*oN8OG2nXtQHielPkyEkfT5DToYNvo<%7;~EwP*NQihoDU)s>{GZL*}JI|6*|Lw zr!-ZFqy0*&1+ zYI!3xcXGE^Bl$v(8^G3+cLaJXmOetNZ67`sCTSQp~$FfCM~_9DLppn#EO-)Bkcf6Krs$uwVBp zI#B{7J<$s$Un{PtbnCKV@njv$E+I55a~FR1VAq!p+%X1QmTE%0-p3~?vd;E8<#Q5U z%ZQTmDF6R1-)|Qidod;X^QmRV!sq8sgBgoE6EK?CeA|B-h@fBHwsNDs#%dOFoDcCKkvry=GT{# zLf!_kSP@297IMWT+FAON9$XtN7c6mid1>XP8p1S^0X()cdlAs>;VeBa;;}W%JI4U7 z2vVkyEYMmL`x%k(h|kEv(*QMl_d`{c`?j(S#z-^avvCmM_~$`e$+qhcXtCL|UKo(0 zXRX@oEk{mEsN!4iRZ!M@VY4c8LxlG63Y}Hpfh2*4=TjndG(!-uef~dNWXi^e+v~AZ zTB%gj+J(pzpx|r&&*Bc&o4GqCb{?GZrzzF;5=&*#uX`?Z=~qn1=V|i^P7KwvIiZkHN}Rb&wi+#61mb$RmizYZpsk%ummOW zLCA_@{6c1fBgwH&g`oIA-=#k-KIz}j3>)A0Hc1TDrsAD2p~g<6T6_D@_sXXn3&nq0 z?pZx-%I{s5`==^S~9GP8xF3pOOc2y0Zb3o7v{m=!ndO^UXaRdsFNX-RpDqc&fchv7Ciz#sX@l2m3lAVMdL9PZbN~cdQ8z*}cG*Gp zjzjR8!VpB*(LxmoXxMML|KR!SU+dX`Nwln@e1^5tcZNn9s0ls~eb)6J*$UWgFk`4G z1ryp_%cG@yh9mFC7N#p?vN|7P2ppMfw0hiCMl=tJ9-0xPzC>l)1|iGkJpj818MaAr^I9|akkF=O4yp-t!bd`DrTA2~>4+18x zJU~Ofh>qK?CwE0|8if+-;*Oy{zIUxhObkNtD`95Dc%(_0i$N!LX$ro5^yyX*XynRc zC}nS$b1*pu9|eQd^I-v9E~dTT);S<7XSjIc-GEYvt)nTs97e~yt`N;cvGBR_p{ zEMiW6Qn6W^|K8h3;GR!-^t#)@&lHFJVTt~^MS4FTBo){3sWU!N-2o>Mi3z?YaY#{* zjCw7nL3ZY=8w7qD@vK%zB-lw`oGHaj@Jw>2tf{>z;Teb+dcEz6o>_{2hDqyJ?dVnxSa}tHLu#;rz3mIKMwPyq!N)M3>`>u zprXKkgF9N!c?Ha;Rh_d@!}5Hk*Yt03;mk61(|2VuaakO^#?Q>pe)v)FPOY2S<>_gU z`UCRcTsBdQ&9k1_TWbBRl<|s`9brn3wQO6^370xPLFQ*as-Y4_Xo%5xp3tj0cUA#$ z+F`9zaKems@9G@m(u)m&f#^0wci|+gaAZN-wi6(*U!kVIA#j@m(o_8{7mZ9FRsH!6 zn9vAflcN6dnBM_!s%?^-@mZWQozs!xI|2g;3snirX0PcDmHn{mJ>|MO| zNBG^G(>`;qj;g#z29>gO5>wwj=(07*%y810#)WbPMAo!bvSX;(-#~I8J;ie|pL7M) zD~ow5l6H>BQ*7+4S*vSiHgbl&I9e%)$&ptKwh#h>>oJyp`U-*oV=4(ve*zA;7ppht zOfTg+!+ZWE41w^}3M95+742;(y+e@1RfHq$eS zbm6}k`+I|##I|%T)GFTeR&4`PR{e?U;ANtpho}t7*SZB8~S;> zJ^Mkl(@w?-_5swzIOh9sK3Wha?whI%nvoA zkLp(sA1z+&)#3LT+#t1{9<_Y`c9P#;M`jh+-mMEwJ0a0vh3S|_WE}bcP&FSUX_+hK z1_xu4h`u1u?$!-Mz4a_o7VRO2XWQ%p?wx-#y$w;qM`odt zPt3=N!V#XL>B|4X1a#hppVQ$meI7cOfzAp$)*j<|7kog=FQw(Z#EV&1@SvAGya4Lyy1MSP~YrimUFZ;)C^uODshAGz}{Sr?htJ+*T$Re%(wQE5-L2a~eBr}z_ zXTw{9BW`U=9zO4J^bH9!KAF;vtE)VA zkMWrPRE(q_`UkByn#~$}evX{Crm--4Wwo*T0p$mJP%v;4rNy4#(!_V; zu9sR86J~f66r7cSQ>|9XAoBeN4sr;@f@BMg#a!-PH4_{gCdOfm?4`s?PUUgV?R>sC z!tM%)&s*+^ex`#_3>T)XnVk#1w!l#n?LW>fyD5g#@%PdD5o7Ihby_OI>p?H(PtX?l zt@zOpAgc1nLe2<3z2Hn9NQA{2vDF%3#2IPwBfcHZ?EH?SA$llx?yeTC&(KG^3BTzB zGE85E;rB~pXRY589Zo(a(aD42@Pq>(7pBXf8ZV*}Bm0+A`)CzpeSBV~l$=T>dmj~f z*z0JZxVHj0lje$Ysdmv|^z@uAQeXXC$RiOK?R3fsHgSScV3X%uD{6ut)FVWnNOI@( ztQseq{M#1ftN(%-2qgRjMQykxVD4caz0h)X3UpF3k}QWSP5E;qHjXPA{hN^c3K8QjUFm-DEfApXDK%z;g?cf zdGdoY*ecGQr3WwNRQ9{xzsC@5^}MQdsOI1nx<9euKK_B}NlA&Y40xkC#j-)EaU~aU zD!|L%Lol*rr2y?P;}HSMKUn8N^LR{ZQ99nX%vtUx4s?0s#IqtRznjL1Ia>?dPfhz> z#(a}n%3}eEdvdrXv%FwU*@5tBWTg7@$l8mqaEMhut!s=EJy{UrD zpYtBwy_y|^;#%rno2(n=$n!r_W%=OqD!uPo=Y}2Q5OxxATBrMiv>;nD)#oiveJ4aDxb-_5UYB27 z)Zros=6d9VxV@(L9NVV5Y7wbQ0>x~X={I*T$mi>ygvJE)ADcQB>6iNEOv#tXsweyq z#g}rUMi*AKp4vH2-MqtuJ$*zx5n{=jb-3$R`vV8oi|$H8wFM2X0!G&V zpc-lgK{Y@>iPi7u{83G_7>f_C^tug)>qteqg|ke> z3x?e;@&4I^XwG>mqZ(NpTZzkxQ08JZf^gF8^L2Nx>eM z>2?8M8s?g2=lnLc?r=4%*FzgI_-lWpraW))9536P~_`({;j7`K0N0sXeO)B1e`|QW|j@+?ONVA@{kPeN%t*j`R&WTshlrq&t@ma&E z{&f`1eoeH2X?${eVxn8R&bF|GbIhl-aX7z%xv|ZALksKl_m-V$eqOWi*+!pfEydmR zNEp6VT237(r3RUHW*bguQecDroiccU7z1(MJ(cJOdn9b17b1Vs=)-_}K^nHz<|`9W zZ*`)5*bWe64K+R`X5w3ALB*qJSimZcTXjqEhKNNi=V4i`!VDI_XPzJkbhF05qrMkD zoF+i})FkGCQ->8TzQ^f|2_Q_4|N2CSnYoI#1^zbe;HkqaNu0TFI;<6y(>AGeU>ku* zH82MXol4H&yG?r|$cuWIH0irk_6BWxy2ey;4-dqgaRs@7c}0g`Woa+cBgey>~IXq;FaH9&6tWJp3-bf%IMg;MHLRtt%a<%{O=CB3Iu z-XDloAT06DAARW6cd~O%>@?=IRly&;r{klL|C(k`l1YYX0a_oc`8R%W^w(e#6 zkR?xc1*La0T&xS5&Lv|95+txP-$fwIq|k1F=q*j?c@1~itpy)=d(O)PJYNlr;U5Vj zb9uH?Nx~VGl_#LmfccSq_$jSVq;j~V+4wn@vWCyzIlRi3s=93I^S*N! z7rm%L>@#)6VV*Uc`12G?&bMKzqD3$ZAZZBXg400Db3*Ryh&dZZD%;!B87EY&E7+)g z5zW8d=m|x+fGf;$Vk(-B)0p5Vyy1U9*@7}PawD}}FyIpn;l3tJ{v$G(>}>gV$kkj3 zYG8HgQQ7S*vEAh6?1Eo74_-{!f2`rE_9k8>`I=$`An@Tzk8np~)<<*jWm7G4)%ySi zF!(8uO~mLcPZsO91K7{Rp$o`e@y1|lSi~QDrP*8SGTd_qhHF9YA9&w8-$bVFyIr4E zb_D`}BM&XL9d7~9c~ExA`lTEoqyDwnxR#!zvz_9dlwm-M!rGS2A2+da+Pzq92n-|YhQ%6h;44jA#u;$7hG_Xe!qb7SaQ2sd-iQ>v^;>qzs}$p-$HFY# z{v>J-sC&WmbF52_gn|bv1*YHGzZ;T`_|A*f0XJu-m;F(4VB5j6$15u1)@9yKK;)9A zJVveKdtT&j81OyII!jc#*(@~(cy%4Mp6=GRztc!O0r#q?&jhpDrqV}!03!n-+2(!u zu%y|##Bli<0(ey^A4cyij=Nmxx9NWMC&#^Xmid4bbjlL=%vOV32ktG@D%cTL9pAgt zmRBF zsO|CKbd8}_v%(;lz9Ci`t;;h0(oDoey>cns(~*~^@VKtzct9!43%NYug~kmfV%c#%yxE)VwPB~()@5S!$HV#;Cq5w+Kd2>-mUzm4^8)vSB+K=D= z9xwmcQaey>-`dUhz-vZY*Ur1NiJ}JwF=7YLoxcc*#&Dh4wps_hE^X}aXXqaS=Y6*mQ*TMCcYQOa+UzPKJ_n0SG&2!QvUI1R+fM` znof6oyn?f?MSmiV#)zSe>6AJZ+IvMqui$Sn!o{33$~lhv6* z&^4;>h}(~^t!+OGMfbiKn66*GVQRw0k@O)m(sF0dSyKf*=z0AxiPID`7vI~baqIm^ zMA|Gn!Z%{Eyy#o2oc$cFBa@YDIe(pxy%AI9Dpb7Di^(h&;<0@0{RELfJT{Oc`iPtt zy*t3m*YkC>L&$ko`T5Vffvt9Q zN>O$)@1nO)`7Lq#blyrOvrUFy+tj7B>oq4*`XV&r)IIa)+0Y@L)Oc(j|C@)3*mBTm zi=yM)gS-#ld$OfRDGQwqMvI6%LF{<)+dF#-Xz$Jf!L#>*ei?T+Wof|@tM8uc_og^I z8G9}tdu9IoO+&oK@;z3D#aqFz53_Z!$oNp6?_Y|4yuFQ)YMft6Mm-J+Szl@l(fy@% z^YD(VBA_YNEl(S4S-6K>g9?x?6}&N_l-U^-tZg>#wgJ;vl}TYLSqo3TWPAZjhC5zQ z!NpuY?{;5%gUZ@Ee?770GI zH`+X2{+0xoBW1+Mqq*l}(?Edni`Ufx9_hS%-DAHo_xuyhOuG-%6ZTS3S6DuV!`ohQ zw>98EJo%YzB4{d(d5+IAb0a`(L%`tAd9A0Jcy_&gzr!u-u~#2?npj?7Z|bJlKT2+K zjqWh}(zM9tGA|nK-sbZ5l8g3*41RcxJSXpZEZp;bjt@o3Rg4$V!9TR^R9TfF5;PJX z?>qQo+`*XaMjC7L0@uvp>Huys3kW#ScY#}hoi#&a7WyWhqZv;@zwNw|okbQJfX`*J zcLHwK1buK`_^|WnXc7NMaamDZVD~Kd(?`}DICoNvGT>Yy6jR_wUl1|?;4e=FkeOGc zxR&fG_FZorn6c>oENGbv+9;o#%R+&mj$oGP&6jS{kEO;}@1VG^3q4pL1O1&Z9F%jP z#;m(0pW!8 za@BiCNgy-#@Qm~3Nc|tSa?Xtea~lcs42!I0E!&IFX@RG_0wt=?eHCuXj;R)8ytBc9J>Eu(Qmfb{bi?@4^i;*$|RS74>-r$^zO07d`T*qY$S z!eTzpZA~TS9if>g``yzvttxR8tJ6!$YEz>3GPg=mbg5#s+ch&Ru6lgYR|9hZTh45I zP!8?~Jk447(PAPoR<~+yN0?T`+N4NP^%>Q_=u!a_&Jc6odJFJ>bGQR{g-yYJ*>l~Q zzfbc1X&bg&z1Y2sB?i|VtN{UaOn?dvI4}r&=(|r45ff*gRI3WBe{}X;Q4hB1HzVBH z7~mHLN?zm*EJgAsjf}-W^R|J|2+djH|_k^?>pU9k| zX&5WB$1JJiVf?h1w!t8lYUXx<3Y?vXzjx5m$;o{0t6i9PXb*C9z_Z<%`KwIP8e3p2 zO;PaYl@Tjcx@Y0^eF;k^KlVF6BVO==f-{AW@&s2G?eQqMtsZaWMkY*2_2FXgvX6Em z&H(L?eVOXJXZca;VW1A#y;sToWNT3zI6iU^0zOBn^>CSyJz&ty!6XquJf+|3^0)Xo zbh3{pWC4?Eg_-nxx-s@_2ZZ}~Q~mp&6<1d4AFzQNO{#%ma*2Y=86Yt!aWJEL`5eS; zGCcMvwlCOG&qn0wGFpt09%Nnjn@R_YdKr*Gf-N#+&gU$PGpSCN>TcsYInpMXdHcR3 z9EZQ0Pv|>c_BIu5s)$A7RiUE)NQ*deK>em6>ix3}l4 zr#Gs&8`I$;!-GJ-Hhpq-aikmnOYSN1hLBp$fol^pjmb}{#6uM_pyOHUm1aEmr(TJ3 zlk}p)!1g9HIT~TWREey;847^V_$nqG^w(1a9F>OlBeyi4e%?~=zOG)+ygD+gFyoO| zhL@;cJJcQ|)!k_QUk0geIdPA9gc+^nmWSBpz7gDCw`d3Wv%e%AT62@dTF#1Z~+PvGQMyUl=k(pid zcG+FBab<02XDrA;Xx$#WQd-|)BXQu$w+^zs0*)VcjOUzYi)WsUgt`HGYbw(bwRNP; z!kDF|vhZW^u#A?P7u`a_MY0*`Olmzv76DXHb045)*w6rfa2gmt29)(Kvvl>+b~z18 z7~5b1ymEL;QBr;KPGG{QI8e&3T|Lr4(Y#sS{;`KmSul3q1uZ5qXMW027K7?gB9?UD zeV1WLnQb-SXdfJ@A8iG3z8Z#YJ7@9zm=!FfB)pYb?!6>lILPCtGEJA^_1BgpXTislRq9Q}S)0m}U z?DMRxQT!e2WC9TE1wN<^FGmboR;~xxg;DH6&z;Z%%5p7DH>Xqllfm!*+G2v{wc*_fi8{HbjhplZ;rSjM$)F-|MODdbz^Kz1drB ze}jZ{BNrQJhQ1%+B8^lT3vot88+#4qh!vnijc9a`I3OtrcZkCovEg0w7>7kpcSCoh!Tf(^i^-a3fJjD{p zXP!^4--b$%0Dgpw?coWI@r)pvu?3C?$#cL&LAy~A`R^cTXvVe+#Q<={{Ixmi3Tq}bpYwzPSwMqYyb+Im+07H(bJ9FdV% zeSErEtjc#3-l+PQCzN4E(IZQ#3m#D#N_bACy?pV){I%8+%lD=99>KwNJ*UB0NmdG$ zX3B%T$2yfrIxw+4darTz(ymm?iu9dXy$!^38OtNQ*DOA}DQBZx?ZmL9A#p+8wTvkH zi%sUk%AEd@n+$94WWj`AqgKR+Yg$`YRqlvy0p)(+S{ypN9T;`9AaNRMk;++!3C zA|o~q^v_-&)!n;!Z;`6ySS%&yQ@1UW$_tbR9a5kWI85UwHFdMnk*i3{#G`XRqqKE# zADWn&p>yOj)K}J5tlQ$Y3dI9ZO4{Drj+!&;+nqog=9-qI0Z7>E*%iW0F5uz??LK)7 z9(X7?N&W?}ti0uQNA?Ny#I%HfXf8qIozO^Og{t*MEOwOYcT=PPYPAmIoWCY@ky!$K zJn6;o{UNja+q!B)*j8^|Wz*HJA!C@cF&F?ANeEP*(Q@449|8Txka3gnQv*yNcYVlq z1WCENJvZ*?GxjVLOhqks1w7JZz8=(N)dRmuzcFmivUOtde+YVxL&TGwTWxZ~9(5l$ zn*w9BG?e{2gtWe=PGrXGvmG0gVN(i$U6ola1S?=*$1_9* z@w-8A_XYceL3ShkLKgokT+9~ztH`kdF0I(yV{p|u{h7I1m?>i>?^{P-UZjo-}Jp8BBr!J*Of?aG#%+og3N#_66h3Zp|)4dqt!tPW^Qg__3D8 z12w7?2#vfQmM{x0`aqT7CedGnp8x1@m;+_QYP(qX2V5N?!R>ScB|Mau>ciOg5TdaF zcO4S#kdTftTG(OY~|QUB(RW0ih?o7d>T9+hQ|C6Ldo5tCgm{FC;_p^`=_>PuZRJDZ;? zx{I8Dzu3d8AyV!7RflW86Ru!^1!30%Nq5-e%92 z$IaEy9Uj>qQ>L9g`946li^OF#kogTD)D4^ScfQy6rR@i8Z%xDUrK?#S7bRbO`2 z+kYBD0&VMJK}Ou1;b%>{iJ;X@m7PnM6!^(UKd^Z(-=T1wR;t6_)_=)Xcjdzj9@>`M zj)baP)CX6|u(TFGhM8(o8XDBT6}=F*8>-I`)2CA|a%9BKU@7BO2RH7G4X%zoB2r^b zmi07);8rfjT0qC$4t?1Kv{s)mQ%Fd#3vx z{6ud7&7}8s5KmQ|;x-BMyrZbQ)vNaNH}B%iiI3Rj@S0g(5gK!aOCBHx+4h3Mk8z>gSQQRUYkG8}AqcsD^?qsD^B4fUMfD|Gn< z(3c^OQcL5+=znXGzZ)(fh{vq)fa+kN4vbE@Nyy(fkQ|M4($VKr<0s62Sj;&z^$@pR z0hk|&69xv^C-heL6OlC#?AJU+uBNr=w%}KA#uYHU0!H(+*b;-~PLiHmjsmfMp?d(> zPhbg8T!ZyJ!_VX=)I)l=EWekonlXb!RZuCUgS9~8dVihTAAk=P5+}kBsT2N{h~kg+ zOurXNSRW;Nm;ce)yylDzEAC2-MsKf}80G*Xb+l(bPT_$~ZkC4TnYw*osG~QVL1ZL2 zRE6MKDr&fe|PH(-Y!y;r+vD$U;eyMMe;1_GtX1a*lZp&d*XRHWjy_YJKWCQ z`G^CJYGY;d%ydspR_J!z$nS<5$D(HNzobIuojO0I^^^ClX&DL5gZxTHW$$YRj88O+ zQ;5_sy{YKDPG&P8k4IvoFTRvZ$hch$`{pLzBJie(WS0Raajhj&N;8}L9l(9Ll5%%f zMl14XS64@WkmbzEtmLo}1;~oXb1}4skdeM*@P*ls7rTK1adqj<#x{%TY&G z8P-+?=VxS}RnEd~7}10CBg+3i-kWsU+S3hoGYn+DV&kM5|6IfRYqRqjenX%lYn?}n z*3v;5#4KzS3XrsrIsqTT$gTIO#`|SnnUeUSAse<796Ba77AGRr6pnu_4_M`vpf02) z>iXV``Ds&l`(@}!J{Q0?4^2kazf*Ir-ud$wSh`0<)Uuh(v7AoH|5l-AZW}DSO_Cyt zO{L$qvR1Cs)N?!OHmuojKuLbPl?R!o4s&!tqoF1MA0WpTd4XL%&D0ia1`^b^iZz0C z95W_WJ+=7|!M9ht0}8O+pK1Y@jW7UYua9D=q5I|*xe_iMRpGyAo`?@EtryIEtYZFk zK=R|tTU7-`LF$fj_QOI~E#kP`%eupY$4e`Y=MVZk3w8_cY|z@KKWWcRzT~TR%2C@} zJcszEP}=GeQhXcK(sTL6wBYJ4*}knUS}MnKD9A^|upUW+_x{Hd!AHr}Hx%4N$vQR3 z-RRpjny_?Kh}qZXugYV5BNs`Qwj-gFK_{LYIw z1_A(6KZ0|(ARa_yb}GLMYaT$fwIyW$1z~OfGjtYgO>kitUbBtbMvdM^_vjFCba#hJ zHwZ{6ieropM~Z-SgGdWlBc((@M8p~?n3Rg~$;W><=Q`JWp8L7qvoWUw01Bk3t7p)W z6L!^*&U`M5Q@b1uLRwHyd~_WR$7B>b7zZ;cA+X^$!0#5E=kn3P9;IAZR59 zUWx4^I7^E6?GTYyYUu-bG)4bzkU9sPJJgZeZZ3&xASgDu$;{^=dVo?8X31D+l*KbjL?1-H9s@kq&=Q^PA$Dw3gUTd*7xV$7wQMbliIVL6Dy^C>kG z0C`s+=3Iy5%gB&37Zz>|`-x=7o#ROF^d&j@Ojcz%Mw>V>&#GEGn9pF>ER%lIAxqV$ z1GiDCe^0&j$zb(u=iL}>ubQopj&W3ctqiht4XN#>K1(RZT&XvBHGj}d#J#uyAD*Wd zWD$l{$3c!9kYL_bgz_0XLi{*i-PgH&T+%>Bxv=R?5dx##fQVxzfpUq_;_%!r5|%a< z@6=FArg@lF=FcRMU(`V|n66->8q5V?fu9l6wmC1#O5;GG?#>u1$p_OulCA<-?IAN% zVFN=KW}~!)79`i$>Kr?8-WakN5&M_dZ4SF8q}LIYU*w54X$I-Kv{-8JMN^{R0?uN^ zcL`tGzsT2k@ifjtf?k+{pm|D_m#2!^0@|I5cCyoCwG8|-igx`oHq(HjT{Ulk;Ww8% zPli|mX6XMRrR3DI-Y5Qr1x&q8$;Bc8Nzub#6mJV2p#DTB1MZPi?WPhqktb3F6Me9b z$v8`7G!KvDB#>MASs={)nZw0T7L8xvaAj}(8!xpY>FW7^Ac$#OVqhw(CEbHM zgR);dCP_f+rZgL@w2!`V(0Z59TYLMET32g3%;7@2xKpAQgW=l!o4;9GC4M``==Tti~gPVywD>_J_n zKA4G@?V3to);i4}8Lzc&>IOw7@H>hSl%bKGt8*$P4mXQzxzygS1P7IJRurMcB_D*R zQP9wuj)d{R3QK{YMs-)o)@eLErf;4WEYa&y9##D3r4^JtNZ^T~=4H}yj4)vYgS=xO_iqs^9rnVJUp3~M zip~*WnapPl`t0&ui!$t@3?r4)k9_i2NAR1Z51*wGNonrocO{qgxGX}H?(d;jT!=>+ zn(5WG)@{YS>pP>odD5*&TQ!SruTr9P&_3$}!8{fReeN1SGR)rf#MECB@E9qPW4ja~ z1=anO;Qc&jLhnx#*Z4h7@ni_pGkH+wvoZUBQj&M+e=PN@W_kN34*d*7qiw%ef;gUt|_d#k)I^TRO8}IScWeg`lZcptbP9N!|p`aPj z!FgYGuNYS8f_)~H=&p-=P0a>Tw1Q_>hEyxC+#I$fb~z4t8?vChgGfxnZ1(8trKIcW z^VGgb!y*N~`>HtJgKC8OG0tf4;d~_AE}6p8Og1Nge)Qzn5}7ZQQMUeoGp^($VZ}kX zToJ{(SpAm$#Jdvoitid~ha4#sJlvNbq@$r?c$!d^*8V-o(o$8XKF;Kb*-Z=Rlp&Zt z$Q>Xp={G3N-;=~Dmq!VdH=|QBC9kc(o?ps~E=4kBambT<6zz#7Uj6R?B9aN@z*b55 zNY1%z$!}n?!6gdfxZT|Drp^lBN(Sh7DC7Eq*yCi*>bl#EGjd=<)urG*RjE|-Mwxf}>gehP z>kl&vv@Htr&eWwe?zBb&Y4UJwB}uOB=c#UgvLA{(`~YIHB-BO{>VU7MIrU4vy+PD)M6c=>^(QII#GV8+}RjOK6`6pOcFkL_$%X!&tTqs zuOfbI##J+>UhfM3HAUaTcmY?FC!>y&EE%LcS_i9nmN}no2zt^23(LHmr z?Q#02hgz-BlVCknrH-Jz1{qg5pS4=YljnNcgW>|O%4%2)7L%bTH9e}6s$%mus2tGb z1rEu1c$Jdmiw)-czqq~=AGjW}EJ50SV^hWwN0duPOYV26cBWS|P?X5Rt79`#l67Ni z#FQPOyJb?Es3*#ix~a(^mX&Ti@rh;va(fNrah3AkHS1p1gi;U&V+cqH6@6`PD6*Pz zav(j-pCU&pXAfdF?yOLigm{0Xz!J#9T40!@rb_2JxBuNl6~}PQVF=mSky}IZ;027Ugk)#r69gjjiRiN-akjrx+&YnWUn) ztaMqOUX(`bjp%&i!e*9e=_)0$)@I_@B_iDi>w3m- zPn#tId|GI?`9Y$@MtpUHde-7cJL?`Q?9x?Q07HRysQ{W$UOp`*IoaW^(fs|`m@5o5 z$4_~jCDe(3q|~bd(T3#l-u)$dH);c<*JI0)4Ss>W`Jf_&A;al)`pIY}AitimQ8ZjU zulq%jZx=k%J)kV%TD_>DGDlB^X5{dBL!#=)E+Q!u1ibUP{+N5?n>Kh7kUgQ4l3(B; z(YbhA8Gsf@X<`U?$#jVcfcfkdK+G~P3D%W*tGdBl0i3$OxSEOXi`+Tx*-Om3%?V*2s1}t3tn>$v~U@RkB@N7a-AaK(1W&Qn zZm32WpAxq(qWD#Dy;n!9#$S!NW8lckGBM#sKXUO!IbuItqRhG+_PEA?%OXEi0 zYkX@!{9R&^KpDAxgRNa;M5DOBZPvO~PWt$fBA)UF%UvP%ilv6FUP-jXlQ?2|>X0!u zcr#OYTvJug8Cp$V&un@%jyCe`$xRjSMDm>5L*Z0Bx&2y7yzXTGf~-^YZjUrsYW8`U zw$+?@MB_@CW=5T0UCx%?mPL_=-C(&3ni8c|c{EC{mdY90Emd1`CRQpt*zIF&_CWW! zv4T1WK5;*Oh~)Tdun+a#eG3mPXw()G7S1Ap^5%-+(w2O2_Wo^2tnB+xHpPV;7TmDm zNmmBzWbI$BnV<|-rVJUrn(oL_m64z+V5<4)$uf{`EML{}ZXV4aba_%l0g&w_GM>-f zR(0kVB6FM}{3&dVWF9eG=-rfwdi~zwDrMgChEMRDRUi>9#3IkovbW30V@`vS$cSo_ zTDs5Ub0F=Yv8|24*Cba3nv+E$$U?_Sno#!sz^m0FRe8Qr$F@mmBJ<&p>0WcMw#tk2 zsdQNso0t2lF(+s4eZzQ};o5U4&*#g}2e-%aQ@(}H7eAGtuFE8-WWWbJc=ap6JCjG2 z6gZsd<(9(AkofGXy>5ha(AfBgfn19PBaBk4;kx&{6k>NKnaCx`y(XTwV8}^iRVLJg zODMhdYIP*3q>53h5LTBP3h^jfkY7RH#W@TJR)jSpe-`3FOCDmRmH5<=CmFd>A*#LP z&3Doj#gir%YovRE?@N*bd27$!!by`EJaamHj9mHerj&PrD(Yhx)6O=7QkZlw$coOq zW$*aGJtZrVE%y8x^ixG!3Us^mvHmcX1Pyz>>>!`)wx47AEl5N^V%jymZc>bwLk%_s-|sZ|!zE6ZyLh z{uv_PPWCx5R0^2U-+B2)Ad#Zh+sB=PQ%uMLnezNt%Yp@UVW=+BCv;08U|$P=VG^Bu z-HhzXl{wkD$)*Sab&}!y9

dgQwk(F!=2>C5R7GV=@e-M}9~Hyt$HV5LRHVkuP# z=Py|;7(x{8kZ4k(9*U);;_o(n%vyx%faqbYbjoXI;0$}PPk`+$Xk$RE#v3Q^_CNy~ z5jXP1EX?D1-rEJ!dZCmBa94Q73w|-z=#Wm0$Xnf$44-86(MOz{MN-k2Z`zzp(>1H% z8A#D~XknR*Y^GC}^@3`af|Bd#**y5$-(XGwnboUzeJzW0{4|u~%%vF$GJ~cnUP01u z-SM0i zhqAv2)ID80BKb{8zSj!p6Vq_0Bd5jTj5o>QGp-lBi2Y|@SiRR1yPg_H1rdFz?|tuS z1_hR8m_;)~=EW$|(kpYsxzYtHQ-my~Z%y*SEaw6Kht!v46tOHyX$)m_7_42IR^)#!qldrKZBr?a%3XV_ z%?NPq62Q{&oW?N%!cYssZJ3o5fP(J3McL(6hj#a<6?_I+%}Os1gTbpan?I<4Le_3K zu={mTcd|k=hLnXDPpyG(*{d2xX2a$;@`UX2PjF!xJH4sbC^kPP$r-txrK{Pt5XYX# zHpQDaQ&ZSm+4n+j!F&L(Ok^kl&+_RSKDzFBDqR@Nl;hhAi@vKUDGTs|HJc=LvhEMRz@8LqR9 zRE-ooNC0`sob&&7RD${zdvnkZXDc-fW61Ap*B^44=Wc8QZ_G5~86@iwJtyUL(R*_I=nUBA|9Rs8Rn?3ZaE z&WDHR#labs*u`VF)-Yd1a((6JPuA$|r^CFjIAQ`_0jACtu>Lf##*fshEN%)jqJ$z` zu5rG0MHCQ4<@x5Y<==f;PL^>@PQD{C`NoJGCr_{XbJQ9}mXF~Cd?-m#OG^Ab_?+go zB2oEO^lT&DymVuv@n$6t3z0ci2@-_BI@#EWrG>iu)94-q2pfU-U8gkuWWm&TNRmRh zV*pjSHWE%sLITnco@(pf^=INjUR6 zI}^KI1EjM{;yV?NTSzTEc{1SSr1VD(^s{v+d(78$N zc75-RGwDtr-FgEWxC)p!I{$9y8#xQGKcfciF3aRmV}_DirWzZO{ABou9}xq5$qyG} z((|!L0LJlSl{J3{!Ue#ZFMOsqOm?N!5!}uGN=3*}1Oej zm5_%$GWQ}Tqn>vVZ@q2W1Ix2q0LJ+0$6H9|U*wiDBbrq?H+80PMDdHS(+ZsUEN?}A zpQ@AY9yv;F= z`ZU9xVyJjaM0s#&nQ7~|U_~IU8b}9l#eTpFBn&Q$`xvR9oYCIiE>p&F0205NnJK~0 z*dBKe%J)u8afQ=i80e{GS>MGJtUmw-$mM0&`GCu=c?svmG&GFaJH*jYX^ViWSUUgLf>l9uO=oDymKz~U)z&0kxN#k zW?j>Zwe?T@g?)~{etx)&H$g1!G)jOQ8l^vTmVq>v#SNDUT^mvSf;MsY`Rbs?S}UL^ zoIoBXIT^x839r4d6_|V6!^>B5P2-F%o59=D(RCyqV}nwntxx;J52a*9{P0Mp!-?}h zILQFH#(|->=EtCe477tUV5+=|0UpKH-Q`LM&kxkB%<%_NK1sk%T$F2b|NHph{X#pY zfHiX{_$_tZ%+XSOU1`DBuJxwVCbu_faq&e8TpDg)HQr`nuiyF0uJ5L| zx2va>cnzPIu<3w{+Ov#9Uu@E-njHALPea6TcihKg#bi?hvqDQ4EZs!RxY7aJPzEU$ z5N>w<$Te#GVf;DgU7(S5vAH7B+O0t{mH(3@BTd^J5g&&}Y(<4O)7}>H3S7cPNn#uV zp6e0)o7;?qli94O=b9h67mFziulY+ubbc7GT>SFK_3MM)gBRC!wp{js|gis_3=V<;d6}wT>WDs zc{bh{cw!nIU?Di7=NMV0T_koE;3ul^r_)FcgVMf6`z!#(Jae0f2Li9r<*xG1HuRUU zUBlzTtS>(YevFiS^@b+x#6WYuAxppgCC~hJWPz$AlAMIV69nkX+If+>4{h6}XK0na z88~{ioi`^$t2%K~gIE5|B>rZC6*}t(xHJAuZk7bHgewbTxM~$gS{S;kvD8~;X3k1E zXK}9v{Kj$urN!`Ji-RY3*6ciGRY0%ox6*UG zPbv02@3F|STg+^Rwso)VFwF}hM^0Z^lfVIgB^}!iog&0NGF~P{+7pjzCdEwlN{I?9 zQ%?XH#FQl_q?4$H7N+Kc(`5(C2NHA2&N~-&LSRC&GJ_s^T~WV!>g;cGO!B(&Dy+c9M>sqLDD)ka#-9DguzqiPe`=n?`PfPmKvkE*6WL5;c@>Q=gV} zPHK5tqe5y%eq2O)zB1Mv(z->#|oPx51w;e?*I#Qa@SI(34a2{j|<`rFj$}uE-Wf?#Za=Gl!e8 zd=y$SS`>rYitsRdUJ5b+jMd1Ljr z8h4EOnY;D9$&1>7yr}hrjA4>#^JF~z&pRvgMIfEw+h$0hT+iwp{6e!t zvS-{(>)HoCESS-gDVlQ~eO+|fJW#~VtN2l8oQ2a-=%ohz(XvqzGi-LoEjS_cZV-?O z_+uKgKB9~>SSAI2HZ1ocp;>>5v)u3}BGN~qu@L9f&3vhOxdzaAbFN!HHSGS}uaroY zBx~&$QvS{FMz{0Z;DLuWk*NI>lGPYqgQ1JR7!fy{cN3f!E1vvVw8sx$oP6P%Mo1=Y z>KyuAQ`Pg4#&bRAqU?S&sQ)$MFuS!1lYU|%^>5Q59+M2|u=x?8?cK_nWO@g$#KGIY zbr%jKpT`F9PYa6INT~L|;?%P9#m4|jo%U2n=3k~Uzib`lrqp%RdztK>`MMvNQ2+@q zOw)vGv`vov%vy%VDSP|i!?&wEe+u*Nzi1YF_I4y^iFZRM>?;x!@-z%8=vIUTYOpOr z5cg=C@YJ6O%<2?C?zPk>Syq4pu#aM!n?CRb|MZO92=HHfv3$MaqBq0)aUbx4rm_gT zk^c0nG-YV~5oF7hCV@Ulu%48QITu`jF?jf-!5JRv1h@3D5i_f2+P{pQ*Oz39`P@cD zl4aQh-Gk2MFp3F(U%;<#CK`OV1Jag<<zC zcS`*PjAU7yZ{ckqB})#Bjs{=EP2?EYlmcQE3dBrfk7B5^Nx01q*TAkPEj;gDT%3m3 ztyu;8yI;TiqqOT6$xIvo{QX^6-#3iU>*`r+HAi~}{R&QC!2bdJ*!iBj9gDwZf1fbT8AQj#$;7*{bdO$7C0Dmuj z0c6D;1Ea9I-q{cGx!PUvvPv_!u;G9~?86L}ncu~xX&c8nbZRp?MP*(x zV=&Zb_pE+mf)}{Cp4p2&QVhJngoffQ_!8KMAVE~H=4!D@vf~v@I)<6Qogb0MOec zrlUvkT(ty)WZ}Fia2JL`*#_ah3%S?FQVa5K)Iftr&<~5{g!|p?=gYYl&OnDFITIqKdXvap`n? zZlGejY`ZR+fLDX0cEVLDC1Wt%oLcxtKd9=VkTu29so+8;rK=V` z&>{|{MLmFb6vzpPbG8h|%b9^Qqm{BB+i1K{omw_Wnwq%pa#7X5>7*m8 zP&FUzw1B5)?NjZ|xyO4c&G9uTcH8*|x=`_a7xpe(xR@B*xW;{Vl2zLkI$oRaPcs(U zQ4%6LsQcfP_N(0i*LyMqsBS#nU_Qb~xvs{QzIUV1=G-rMa!EhNc2=Tlm)>HzZO3+DaUMo=aYgM*t45iqt@^DH@lqBHM960XSy6 zk?W2K?9aHEsE=?5wKxm3$*eTYY3bJT<%kU$&{<28|3gP-zsb{PL*+kqo+9wqJ=&X> zpbD_iHI3_{K2Uu>c%_-tbuxZxT6*;t!N8rTFc{iGODs;k`^+n0Q$poSy?r5HZpb1l z;F19~%kidH0dr(_9#jAgp)eOo+EhyIOMd%c~Lr0MxkC)hi)4+`Z*^Du8I2RE{onWB0$2 zyy7lxQS*rxHUmO1*G4;F6B7+lMe#(e z!z6pne0h|aJeWz}agV)}=k6|}frC>Zth*|a)NN}bs%G`978F3C=gI_|zqyr2iST zZd#8j1T*%@@iH;PDy}rYnj4A>hv>LGxK(ys~(3 z#@3G9F_8>R5RG0jFm^`XRobpOhz!2r6H}~SLtg?MH=VnnZEKK@ei8>9`BBLDkSwmG zg03n5Lozt;)3M?|>p4l`o;dMn1*nmOY79^zwGYeBS4t9zapqeoOhXBNvk1>xcqm=;d@@HDgLn4zynwM=b3#qP) z=fT{>`vhdF1UN$rC9WH zp~}FQ6yo^aefBXe*mrs%wO8FoQ0wYj7clA}bKr^(7sKW|q|DKA>i4j?2jCrtVh5&r zu8px>{!Szx-D5OJxpek#4%3e)A2D_NzIC&-NT0Vr_oR87SArus_CO~HiO$l|3KWl| z`94G6O@Db(=^aUmE(!S-3oR9xjGH=@KGEDCyo!6t#7T>gk~xL!fw?`Gi;N%?o)m-X zVyz$V{nqYYNMRCSJO4=2zHtiL(34bHws!k?ooaa3p9tJp0}eA_Lyhs<Lx-0Zl3$pBy9q?Y9G0AE!nG)u_U(PMe%A#9aU40 zgW9)2vOgwjdn&~$x-F4DN~X4YFr3JJtn@GhH*wwYg-28*pdAquNq%YN-qy2u-H;Xd zpOOjQKQW5ld#Z!`k*j$>PA*k6y5p-xKW(@BaNa+aHJaVAg|mhxX1qUVVHXq{_9xvH7KXX3xW>&EuQOP2KXN#Y{OrS zh#ZT62f^p7jwjffQ=o(O5#@H*Z{oHOP6K{AVG&n&KK>O)w53mjgCpBM_&T(K4qbT| zyDKwmZ`-+;PmHM}2CQ*|_UaGGDm$Vu15>MYcV_QJi$B!>P#-pQ$l93>2(Q;W2)bY= zj?}LAsF?@AiNMM2%O+n!D*@VgfNbEFpu9|Gb5e;si)k#HAle#Px6F? z<7d?`L7_K(0K87cJrzB(aKTPWN~i*piI4H#w=W@EZ-JKQSa~ma+zpZMfft^@D*3}7 zt=iReaci!ZolMk4`XN*VT$#K^Tsnu&dB9nwq2S1tgk!P=-IB!-%^KOF39qM(KutL= zkCdOfcPVQ1yJ{;YCI^!nxMB%qIGcW{Rd=*0?MwoVKMdLV$UY$NVe;IQi(CfbOU*A< zuKdl>+&iOkbN;+O@bk)0)y3yy4vVOBZ@ewbKDB>txxQO-Il$!6^Pfs5ax8@I`;YhD zxsb9J_4xbQA%GF4Jv<+9yncUDmQZdcMR&--GMfXyh=pihs`N_*%-Ag%T^RV9`Bo+RbU`vH&;%vb{UiIZ7vg=d@@j@amCx z0cLWJI9DNRBqGXN134lz$$z!|=6tr5MvQW~>3Qyx+V6_$dWh_P0g)wh`%R9a-i6$3 zO(wwv&8DHu*{oTiXRpgL5-w!(Hl5|9?YtYk^2k}nDo6FEfE)55jgFGdzDxe?&`csJ0Txv#^;#n`t0Tq`1i-F*a9ihhlRfiA{Ez@ zCwY8~RoXqMn-@66nd`BPS2;NT_&^o2H6ApvwX4JNDfpA1=uspq;y=@|QPm8{-qXyJMPyXA#P$>n zz=Y#XZwm*Q?mc)NAf+^2?I(eI}EDSG>QFDgAWoMbZ@B*gCRaZ_0XQQ%FjZ(ldUF|HDT;%5EzL4Y+ItN5;TeLNT}e)7*RuvoG6N@!*@0Z%tjy)!&p@Ib51gop4> zcDp;_2=hTh{P!yAY5n_BB=Wped9B(NUMVXbxfuKG;a&*D5tVUepPN(0*Km4}Y0dr2 z=gR)H@bZ8!HJ>vye|d%KU6IuRyCVSB8AV&zK9?IK=r=U@7l?er8oOB4dcZN zWM^KG3*^_gj9NjmJ!?2^9yLAEN%ijZ93U_=?QBrB8EXj)2TpA_qu*x_@^@i=G0QFy zbUBOemkl!hM}Pk6mC;4sD@4YT^4XJ#a|G5i*u6|KlJU7-Q{%k;+PqB1FRGJk;Il9v zXtJlIte)LU&XsL+?+f{h-#JWx+Wr-tl576<%1;SGFLC(-fwn1{Da0^Q-l<)1xHb7@ zuB-85mI@X?RUzobgC#w#ci#}>nH~fEhiPYW*1!VCZb2PO24bQJ_G_QU?5h`)+5Fef zT#L$UlZ2Ab%B^Lx<%3f`E)6M@NbyGwfO-fgaEG=2QujP$rFS3mE|zjRyr*iZ63sU# z)dkNZinvmD3KvhMo@=`!fs#bYo6*1o8pml=Wm`{Y~DuTSgyn4Fq;=*LOvwO@!HCl;>qo zZ~>}5!jAE3SJcFomfHF!9`z4MtabfN>#N z|BUjT+nTCglYA+F*r0C7Gp-$z~ZO+Ewpaa^d~= z3Rp_1W@T6K%{sF4IUY~(Xi>(aG33Q)$`xY;M>D4PO27+Zpt{efAFPA_Jx6GqF##>2 z?cV!I>kMwmQBid=s;Uc$@wT^ccK+%!?O`#5wOJnJgvaH1FhGN5E~le`>5T`n2!(@& z9Do=NYYs_{asBMiYz)C6GK=fHdr$?7G6+K@jqny3ud1 zQU_2w;ZMG(rl@nzV&uX{#pJr=K;N8!X|rc4!%LC@s4YF8la=A8mw55#rVgs_m+jsA zY}tVNq&?BKqUM_PyCyh46DPP6H``JZk6>PT&HH2_6M^j|$BUJ8riQLi1lF}5|_zLzN%lUcAQ9*_3 z3!|iv94f7jgE5YmeTSGrOx*3oXMYo9KZRl3vt~`c*BC9sEAxsNg?fDcy&0+#!8%3f zPpXUfayxE+3G|V1U4LZoRNYEdC;dH0X5!Qyc(ijI5v1R)SVanK}%8ga7XR>sUce2XYm z*4w^!s_d+G%E>2bB6e8%Hy{+j;fJf!3|=So?eENAinMzRgh+NZB==_{kgaTcQ+pKqI<8An;A^*?^g6J^rl?c*4Kwn8+ZMSNXy%Q71< za9hb|+6wlOL+l&3UZpzwSXfD%v`9kKt8twaboyMksQmMABS6*Ld`c#?ST~=3r4T>_Ga6H=*uqWRek*;!5Z@e|V= z_U#nXW*bfIVtL0l8-cE>K>@;yWb41c_k4LDh4ET`Q)6qB=-%)ke87&7nF0AtY=DVK z<7|ya=hf|c+(PN+#&RL{Bg1ENrtEFUcYZ!<6LQYc#CjhGL6JE(1PT;pKUV*uxBtnq zl4kpg75^&umGYRAHoKQTQHx8EuIGq0XsHOs*M4Y;nP!avg1jJzR{Z6Ityp9@6T8S* z_Zmm3bWA}M!s~NgXC|UOV$CQ2p2jdpB?JMhCceC<)j`ABffP%4?yFNKaA?bfF42Fcu? z$YG|jNZR3(qAjH*99aL24dsC_YtP&?eEv!I6n<4WImz)lnYS08L<7Dsa8~tP$Veq+ zTdA8LFR+XY){FeKe`+r7)pf;NkSQRXGx`#7DmpS-XfN0W=^&N~lQP=5McPKJw%;F` z$SETYY^I~tETnoQiPqbG5J=$_;A=JN&3*-sJisK#faA(VUTPky;D++8yfe!=2vIV4 zVwCIMX1{3`$3I24ikuki%nZESIxIlx;3-5|>IJfSq--I|(_8Q+{p(+n(0z7*5Ndy2 zUtf6-3n?@%0e~+kbFke3pCv-ll`79qlfI<4wPK)|0N0fUvv#~oV>RC1!sDP*Ok0mL zF*mD%Y^<~MHLqItr|lcKvi)AQ+gFTN?Ni!GDXyk^*r%fIms)099uAxoKv5$h%d1%( z*bXN|O%}#510>+K7w=#PTXnlyqoo@4(|{ksymM`Tod8^E#j2?wK_u+iCknY)2&E|Y zefqLFRjZNQHwjMv$^eQoKC`tmCJ*(4<^&7oEe=1il+E*+%%bX1cSG)A(vFa4z4DJB z!kB4*z(w1gS_HjjR+gyqXam?dZP;r};@c}2iF9}uuDHXH=%ZVroHD9Oua6IeYZMK_I9pELi@p0zBD zPp$9|QtV?#2oLj4yoPH}2~MYN%G) zGAq5vJrtQuVtrQ6`UzId&^sr@=3U#fL_?hX`yRY%hM4P|+eGvI?e6@#i4dYU(!}|4 z$)8yEgbc(G;??IXL$0ZL-N*slSROuCa(DPZENFD?Grb`k!ofGfFnF5ZpxlOfc$BLCpn_KH!``v`~~?3^_6r4+ix3vEz`mKX_Tx8~c|Qv*e4 zfkxO+Ku6>B#HF~-6Nm)oa^qhgQ8!j!n^L+7e~dQw#i0xw?O>c$>80V1=j{vxIi^i` zxI}RGMqEaUW|1v(Mt&6}ZC0D2GoY-?UmYZV5LZm%da!QAvShcchLQcmB1)cnR9AL| z3b&3^fo{z)^v*IahNdwxOMI^%$yA;WLF=4+)1f+lnw*wQF~u#Bx$Br>9Eau&E)7L- z?Wo=Jhry`R)=+*j2^m^N*REN3(m2aDJu?~+j)-BkpCZTaL>lt#vC-3DPSMDOpl4KK zjMA91V<5r(Syd7E3UUHf)@YT{ht-~T%Qxn*8WWwFhF5MjqP7DzeT)7!S)bf<4|QcG zawE9CJWuil-i);x@OFs(m@JMIXLj^{*ABeklh4;k0%LJ2pcsy26RmqFzNCB>%07)A ze|;tT4{iTKi5-90!VgZOfay$fv!YvvqC*Yf#HjiX|G5-^_TdB_>#Ol236_m$dww!-(@XZ)ot-I@eVN4QV3b>lZ(P^GDc|Mz9 zcTvS6M2FMgH;(1D*N)UbA000RB((6NrgR zpv7W@(3Uk~)RXJ_EOhU%72|KtH~V?GImakEcu({_k=hhWunnh2!7p`}SH4G+PdF~#LtTCa6649Qkh7}?6OyhoB1c>^y0cmGaydNxSupn}Z4g*Pf8TDv>ap7a)(>|-CK4BzOt9&B!%co zHy6DsE2wy^o^|Sw89tjIY@XwGWz=OK@1}YaepHNGjm7KJo}4OAb9ppoFD4b>5-?tD zAnRmmQS`2t;}?!DpQ}@cDE-%FuD+|WOZBG+C$jE~!f_i{fsE$BYtM7Lq6tGr&vIFO znECwV;})_7v^xD~4z-y4Z9|+`aUauzYh=-VDi5Cu__?X=I`w;{X;hj8Nv+8Lp>NC1 zCq0-spE%o9&nUik_l+laPH8S*^yf#n86%MbTkbJcH9ou*BONDT%5U16lo#Ij?pX-h zCd*yFJp7ZK;5daS*eLg#bT)srC13-OsfpOop6U*WR${SDOu3x*fFn8!PCfbubGpY# z_+5mDG==Hpdx<=@EmmLO)p|OQLLql}9^Rk%NHcO92<0FE#^hLuthPj>k7tzbsRW!u zoPW~sg{)}uT=BaFGvSi$$!}fnb2-x-cTOh^HXBT`h7cjPS8NzWH2P%>VgKPs6 z>Oo7KvUh;MIRlqMM0!)Ra|!(g)GEE$=Gky3D@u*4TiHPB=&69#sFNAzqg_|256WK} z-SXG}X#jnFD<1Aaa#@A&eRXp7L)Zx~Viuma(-*xB3_p>kT9+w4*~fvxZlM3gTwmUL z^WJqdU_)F$0YmPna?V+@!eGkj3LKyOEDFLOBh_PjTy6q8uzGi7tmaDY3N7weU8G)D z{#eZOHB&ud*Zr{Mx{T%%!goQ^Hw`Ypn#cwsq z&FnjGHO&K`QtmyeZcGxT7<+u;CDPAf7%gaVXEJ#Y$O0sfMw)hV>KfJV-)cwQcCM|H zR>VMsjrSb}K}7QB(>&di}ugCgS#}7wPRw4G39}>m`%@>nbOEC%yNcK29b} zCZK#jCs?JA0N}mPg^I$FdMW`J)GS`?5*mp>+7j78j zBZ5FyhBTe2^J#<`gXF)QY84N8W2sbRY3S*FMkv3$E6dr+S_1`Q)Ko7gz@BiyHytYO zgi{#JAG1aEb(;-#JfCj(rQG&8-8h>zQi>M51+k{@@!1E5m{hnIhD$#QvuYt!<_Po} zZEh9!in}G9?y;s!*+eC{BUX){isx7Wi*EO2Y=oai3@YaLI*?fXF;x}dmsjX2kKo^2 z-iOH&&sv~eKN>#4y|4hj^UpFzyob;krI|RI>ew)pj}CpIviE8|+0U@T$Pf~u+CR<2 zz3>4eR7YJ)H5=(PF}hIhrC}@i9-CkSg$k&mI6-U+0D!M4-T}kL@)8#E*EJq$^Imll zb$PntfFP?h@pCvc6&?)XOB01{3MXrt7IW!eDRM(gsxm~;^uF{L!gi#i^L`MZZ>I1V zZ*4}9XT8yqH20z*Pulv)f9N9KxfexPi@#y7@KKoHpFq%kzz5HCanc%t>+z z-{5*ap9iTTslOt47Vft=V{ZTfh;arJj+UhJ*(4o8h=d{gs*S6i*$Vj>D6@dW=Ud_- z6-pu`uXUp}A7v9{JX1+I3TUjJrSUsCLRg@6N|(rort4PNYdVK%_Z3b8eNJpe(gYde&6)})Xl9WnMgB1vz}Ct)JV!Z23+%o>nTT=pUOK|vXBz)jCh zr?E`u=3^h|^vU2_D*8jwj0KDkH!wUm*Q@Wub-XslBKUG#bYUq_v}=Q@luNN0)|toE z&A}{yF^?59Q+}3j2yc~3dIVzJ5%`~?vv6zrecSM7J$j>?Z8Q!Xo#I9}qesc;6h{h( zx(x=SyHQCcB}4>7zoQheNCguR6crT|73;_A`!_ttaX-g#-`9DaUt2w)bG-3!6!$Xs zylo9BI|r?p$E2%Za_9$wDVK$O zZDKMl@1okP2F_}FS}vDkt~d-GpF(ra0TIt$bOsO3KS-3mP+Lt&_h3AytSeJ$(S7rB z(v6<9lA#Mf;Qa9n1!zLo zBUE5GymuNkx@Jz<$s@Z^pD$uSN8RrCVk{`NLO3Exp13Cc0rTvZ-&fG^M?zTpdx#tX ziBnmPOuel_hvKQSHw;0APty1r{@o6Ib=cx#+sv??0}$^{a2c{Lz&$7!u6EET>x%g| z&goe?q2ZaHz>6IU_)z*%Xbab%)ZLYTzAZm3KADf)mxG>vLA>L7Am>M^6uNYmJIrsq zhPfyx%6KBKa$7}mzgP6wdz6_+AJS~0@#XQ^cI=H~ZMNoLCZ8lSGD883O{k;h-7h>?b7&hUHi~= zRI<|%zj?Wf`KX)p^)l?xMEFPVxd*}wa^*KjaXy!-b~aFAU=b%$YC?zbuA2quvaVy9x{f@6~xXeG2Q5A|`@Xls|p}QDBW3zcMtpq-G-^ z6w|Reu&KZoerWS9#H7Psy6}r^n+{dwKDw3nng#tzW`@omx0Qkpa(7&28S=QR{BCi- z?5*)H{9ZEwRe!!-Agd7b&ag@xS9Oo1^nKGvOCRT%w_H?tuEFJNbI-XXsLUv&L9m`s z2GOZSW}urdRFA0Og=zVm;bi2nkF!1ai^h%kp#GHImZRMImBBIhAz{7Pua~hX<$59a z!>)0Y=2iJm$JP~76PPHnnQAS8XlQ=#lbq7-7_RrS_^0P=nyj924B0}yCu!O=^n>us zW-Qu$`eA0h7qXl8QSKv(Rd@lJXPy|>6SFA_&g;EqtFWd%$Ei9YNXxg`f{_L|OXg?iNWcJ!w2N{mCuZUoz7~sKZ7Gi^LFg4oCI-ZPjYxjU14Px03+T zLA8f@?C3V5DRuT3&g(Dgp7Tm3+wolG^%I)oY*6nd>kOr8?Rkfi55-QrlG8Dd7d~KN z4UGS}o*FguzH9n=Iozh~bZ_(U6SslT$0CM{eE~x|GFDMJu~v;2JZUGK4u64u+)@I~ z9o9TENZyq7I#%W_{+GV}k{pOqOfC6?j?uZC0Q63NgJk$YP37oA*j8}&{JD#|hoS?l z1?%3bd7pC3F&SpTYy88@_Mw&K0+4+{ml%aYsH7hEwS!#hWLR1Hg>4kYe6*5K$V7>2 z530?Mt~%MQ^1kZLxxY2bNiO6``XVx{6;aUfX#bVus*dL|m)B&U#^FV-mT347{v$P= zQyzhRmyce3c02AMQtG?56Z~75`n1LPv#laXsb-Kan8 z)Vs*db>SsRE%@T)>?H4n=e$pBAEwzXfyd%?|2lfRB{>s^XR*`?_8ak{9=W&cq;Poc z4Y_imfxb_gmV*jQM9U1TS;b)E=^JCsT{JwAk+iDi;T%|GKROj>j0av5(3fVg%0d~6 zjZRw$W+w&T7T>%5QK<00!&}ngVk$nuE%^zPi_Q_84^-I%DshIqfI2p|5(ytwe1x*` zHWNoocrY48YR-6*^vg4pmLFa83&4(ACb8j^`c;u?SK&<`Z4>&~^Lb^M;~AFa^?AN* zU>sU5_U-zMdxVU?KS9wzz2dikx<*Oi^ruM&;s{q4#d0&R2KJTb_JEnV@Sj8Bm3DAc z3X!3jdFWm%gy(}2MeqbyX@@{*i>!?0;%B-No$qiQf<(O{vOxrW zJ8q3^DOY{6;rhH(zM<^-rHdBV9sjN(1%d2+Z(pNrL0b~(%>n5@UIwfZuAE3GsUIVOxSUUfAn`d$o;$jN+Cwem*3#y*8tEtj( zj>p&?ytO4OQ{o^$JfE>)fr2OQV933DtVX{eq?3OFFTj6nLbi0wo60BF zQZlsV|I9J>3Gb8^miyc{7B~fXJ)LV##hMXc2|L;uTY~I{%v)?jYINnC*mK9PE3O;N zgIe5HF#hlJVVN_&PT~uQU13xlMn__7^O%H+4oC0-+p<+sWcyCzB

g&mbh|R@7ZT=dqz(Zsb`yCV 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%0DUcl|eKl>(#F- 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 )~){0>}dh*NT`;RI1?heFc787GIa$=l0tJs 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∓F&$c7WcNz)uGI05AUQ>pcowR&kD5j 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 Date: Wed, 5 Jul 2017 14:02:29 -0700 Subject: [PATCH 0763/1049] Use correct text color for checkboxes --- interface/resources/qml/controls-uit/CheckBox.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/controls-uit/CheckBox.qml b/interface/resources/qml/controls-uit/CheckBox.qml index 36161e3c3e..b279b7ca8d 100644 --- a/interface/resources/qml/controls-uit/CheckBox.qml +++ b/interface/resources/qml/controls-uit/CheckBox.qml @@ -18,7 +18,7 @@ Original.CheckBox { id: checkBox property int colorScheme: hifi.colorSchemes.light - property string color: hifi.colors.lightGray + property string color: hifi.colors.lightGrayText readonly property bool isLightColorScheme: colorScheme == hifi.colorSchemes.light property bool isRedCheck: false property int boxSize: 14 From 55b7c2d767f08d674eba5fc8eaa823e237b991b2 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 5 Jul 2017 15:50:05 -0700 Subject: [PATCH 0764/1049] avoid doing a lot of work during mouse-move event-handlers --- scripts/system/controllers/grab.js | 27 +++++++++++++------------- scripts/system/libraries/WebTablet.js | 28 +++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/scripts/system/controllers/grab.js b/scripts/system/controllers/grab.js index 9f06aac3a6..da8add5117 100644 --- a/scripts/system/controllers/grab.js +++ b/scripts/system/controllers/grab.js @@ -447,15 +447,7 @@ Grabber.prototype.releaseEvent = function(event) { } }; -Grabber.prototype.moveEvent = function(event) { - // during the handling of the event, do as little as possible. We save the updated mouse position, - // and start a timer to react to the change. If more changes arrive before the timer fires, only - // the last update will be considered. This is done to avoid backing-up Qt's event queue. - if (!this.isGrabbing) { - return; - } - mouse.updateDrag(event); - +Grabber.prototype.scheduleMouseMoveProcessor = function(event) { var _this = this; if (!this.moveEventTimer) { this.moveEventTimer = Script.setTimeout(function() { @@ -464,7 +456,19 @@ Grabber.prototype.moveEvent = function(event) { } }; +Grabber.prototype.moveEvent = function(event) { + // during the handling of the event, do as little as possible. We save the updated mouse position, + // and start a timer to react to the change. If more changes arrive before the timer fires, only + // the last update will be considered. This is done to avoid backing-up Qt's event queue. + if (!this.isGrabbing) { + return; + } + mouse.updateDrag(event); + this.scheduleMouseMoveProcessor(); +}; + Grabber.prototype.moveEventProcess = function() { + this.moveEventTimer = null; // see if something added/restored gravity var entityProperties = Entities.getEntityProperties(this.entityID); if (!entityProperties || !entityProperties.gravity) { @@ -559,10 +563,7 @@ Grabber.prototype.moveEventProcess = function() { Entities.updateAction(this.entityID, this.actionID, actionArgs); } - var _this = this; - this.moveEventTimer = Script.setTimeout(function() { - _this.moveEventProcess(); - }, DELAY_FOR_30HZ); + this.scheduleMouseMoveProcessor(); }; Grabber.prototype.keyReleaseEvent = function(event) { diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index b429a9f3ae..142ed6e7b6 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -14,8 +14,6 @@ Script.include(Script.resolvePath("../libraries/utils.js")); Script.include(Script.resolvePath("../libraries/controllers.js")); Script.include(Script.resolvePath("../libraries/Xform.js")); -var VEC3_ZERO = {x: 0, y: 0, z: 0}; -var X_AXIS = {x: 1, y: 0, z: 0}; var Y_AXIS = {x: 0, y: 1, z: 0}; var DEFAULT_DPI = 34; var DEFAULT_WIDTH = 0.4375; @@ -25,12 +23,13 @@ var CAMERA_MATRIX = -7; var ROT_Y_180 = {x: 0.0, y: 1.0, z: 0, w: 0}; var ROT_LANDSCAPE = {x: 1.0, y: 1.0, z: 0, w: 0}; var ROT_LANDSCAPE_WINDOW = {x: 0.0, y: 0.0, z: 0.0, w: 0}; -var ROT_IDENT = {x: 0, y: 0, z: 0, w: 1}; var TABLET_TEXTURE_RESOLUTION = { x: 480, y: 706 }; var INCHES_TO_METERS = 1 / 39.3701; var AVATAR_SELF_ID = "{00000000-0000-0000-0000-000000000001}"; var NO_HANDS = -1; +var DELAY_FOR_30HZ = 33; // milliseconds + // will need to be recaclulated if dimensions of fbx model change. var TABLET_NATURAL_DIMENSIONS = {x: 33.797, y: 50.129, z: 2.269}; @@ -561,9 +560,29 @@ function rayIntersectPlane(planePosition, planeNormal, rayStart, rayDirection) { } } +WebTablet.prototype.scheduleMouseMoveProcessor = function() { + var _this = this; + if (!this.moveEventTimer) { + this.moveEventTimer = Script.setTimeout(function() { + _this.mouseMoveProcessor(); + }, DELAY_FOR_30HZ); + } +}; + WebTablet.prototype.mouseMoveEvent = function (event) { if (this.dragging) { - var pickRay = Camera.computePickRay(event.x, event.y); + this.currentMouse = { + x: event.x, + y: event.y + }; + this.scheduleMouseMoveProcessor(); + } +}; + +WebTablet.prototype.mouseMoveProcessor = function () { + this.moveEventTimer = null; + if (this.dragging) { + var pickRay = Camera.computePickRay(this.currentMouse.x, this.currentMouse.y); // transform pickRay into camera local coordinates var invCameraXform = new Xform(Camera.orientation, Camera.position).inv(); @@ -582,6 +601,7 @@ WebTablet.prototype.mouseMoveEvent = function (event) { localPosition: localPosition }); } + this.scheduleMouseMoveProcessor(); } }; From 39bdc20b4fec6dfcf0c308f591c325e7fc97cb4b Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 5 Jul 2017 16:13:36 -0700 Subject: [PATCH 0765/1049] On checkbox language change --- interface/resources/qml/hifi/SpectatorCamera.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/SpectatorCamera.qml b/interface/resources/qml/hifi/SpectatorCamera.qml index 5b1802a6ce..6081419f57 100644 --- a/interface/resources/qml/hifi/SpectatorCamera.qml +++ b/interface/resources/qml/hifi/SpectatorCamera.qml @@ -209,7 +209,7 @@ Rectangle { colorScheme: hifi.colorSchemes.dark; anchors.left: parent.left; anchors.top: parent.top; - text: "Camera On"; + text: "Spectator Camera On"; boxSize: 24; onClicked: { sendToScript({method: (checked ? 'spectatorCameraOn' : 'spectatorCameraOff')}); From 7e9ce5a58bfa14ac9bd4e5a228a554fdd62e1e3e Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 5 Jul 2017 14:18:51 -0700 Subject: [PATCH 0766/1049] Don't overflow during AvatarData::toByteArray --- libraries/avatars/src/AvatarData.cpp | 44 ++++++++++++++++++++++++---- libraries/avatars/src/AvatarData.h | 23 +++++++++++++-- libraries/avatars/src/HeadData.cpp | 5 ++++ libraries/avatars/src/HeadData.h | 1 + 4 files changed, 64 insertions(+), 9 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 6eed23fb5b..6a0b668bfa 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -57,6 +57,27 @@ static const float DEFAULT_AVATAR_DENSITY = 1000.0f; // density of water #define ASSERT(COND) do { if (!(COND)) { abort(); } } while(0) +size_t AvatarDataPacket::maxFaceTrackerInfoSize(size_t numBlendshapeCoefficients) { + return FACE_TRACKER_INFO_SIZE + numBlendshapeCoefficients * sizeof(float); +} + +size_t AvatarDataPacket::maxJointDataSize(size_t numJoints) { + const size_t validityBitsSize = (size_t)std::ceil(numJoints / (float)BITS_IN_BYTE); + + size_t totalSize = sizeof(uint8_t); // numJoints + + totalSize += validityBitsSize; // Orientations mask + totalSize += numJoints * sizeof(SixByteQuat); // Orientations + totalSize += validityBitsSize; // Translations mask + totalSize += numJoints * sizeof(SixByteTrans); // Translations + + size_t NUM_FAUX_JOINT = 2; + totalSize += NUM_FAUX_JOINT * (sizeof(SixByteQuat) + sizeof(SixByteTrans)); // faux joints + + return totalSize; +} + + AvatarData::AvatarData() : SpatiallyNestable(NestableType::Avatar, QUuid()), _handPosition(0.0f), @@ -189,15 +210,11 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent lazyInitHeadData(); - QByteArray avatarDataByteArray(udt::MAX_PACKET_SIZE, 0); - unsigned char* destinationBuffer = reinterpret_cast(avatarDataByteArray.data()); - unsigned char* startPosition = destinationBuffer; - // special case, if we were asked for no data, then just include the flags all set to nothing if (dataDetail == NoData) { AvatarDataPacket::HasFlags packetStateFlags = 0; - memcpy(destinationBuffer, &packetStateFlags, sizeof(packetStateFlags)); - return avatarDataByteArray.left(sizeof(packetStateFlags)); + QByteArray avatarDataByteArray(reinterpret_cast(&packetStateFlags), sizeof(packetStateFlags)); + return avatarDataByteArray; } // FIXME - @@ -258,6 +275,15 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent hasJointData = sendAll || !sendMinimum; } + + const size_t byteArraySize = AvatarDataPacket::MAX_CONSTANT_HEADER_SIZE + + (hasFaceTrackerInfo ? AvatarDataPacket::maxFaceTrackerInfoSize(_headData->getNumSummedBlendshapeCoefficients()) : 0) + + (hasJointData ? AvatarDataPacket::maxJointDataSize(_jointData.size()) : 0); + + QByteArray avatarDataByteArray(byteArraySize, 0); + unsigned char* destinationBuffer = reinterpret_cast(avatarDataByteArray.data()); + unsigned char* startPosition = destinationBuffer; + // Leading flags, to indicate how much data is actually included in the packet... AvatarDataPacket::HasFlags packetStateFlags = (hasAvatarGlobalPosition ? AvatarDataPacket::PACKET_HAS_AVATAR_GLOBAL_POSITION : 0) @@ -624,6 +650,12 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent } int avatarDataSize = destinationBuffer - startPosition; + + if (avatarDataSize > byteArraySize) { + qCCritical(avatars) << "AvatarData::toByteArray buffer overflow"; // We've overflown into the heap + ASSERT(false); + } + return avatarDataByteArray.left(avatarDataSize); } // NOTE: This is never used in a "distanceAdjust" mode, so it's ok that it doesn't use a variable minimum rotation/translation diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index d6241c2c50..0ddf4e7d0a 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -140,6 +140,9 @@ namespace AvatarDataPacket { const HasFlags PACKET_HAS_JOINT_DATA = 1U << 11; const size_t AVATAR_HAS_FLAGS_SIZE = 2; + using SixByteQuat = uint8_t[6]; + using SixByteTrans = uint8_t[6]; + // NOTE: AvatarDataPackets start with a uint16_t sequence number that is not reflected in the Header structure. PACKED_BEGIN struct Header { @@ -158,8 +161,6 @@ namespace AvatarDataPacket { } PACKED_END; const size_t AVATAR_BOUNDING_BOX_SIZE = 24; - - using SixByteQuat = uint8_t[6]; PACKED_BEGIN struct AvatarOrientation { SixByteQuat avatarOrientation; // encodeded and compressed by packOrientationQuatToSixBytes() } PACKED_END; @@ -219,6 +220,21 @@ namespace AvatarDataPacket { } PACKED_END; const size_t AVATAR_LOCAL_POSITION_SIZE = 12; + const size_t MAX_CONSTANT_HEADER_SIZE = HEADER_SIZE + + AVATAR_GLOBAL_POSITION_SIZE + + AVATAR_BOUNDING_BOX_SIZE + + AVATAR_ORIENTATION_SIZE + + AVATAR_SCALE_SIZE + + LOOK_AT_POSITION_SIZE + + AUDIO_LOUDNESS_SIZE + + SENSOR_TO_WORLD_SIZE + + ADDITIONAL_FLAGS_SIZE + + PARENT_INFO_SIZE + + AVATAR_LOCAL_POSITION_SIZE; + + + // variable length structure follows + // only present if IS_FACE_TRACKER_CONNECTED flag is set in AvatarInfo.flags PACKED_BEGIN struct FaceTrackerInfo { float leftEyeBlink; @@ -229,8 +245,8 @@ namespace AvatarDataPacket { // float blendshapeCoefficients[numBlendshapeCoefficients]; } PACKED_END; const size_t FACE_TRACKER_INFO_SIZE = 17; + size_t maxFaceTrackerInfoSize(size_t numBlendshapeCoefficients); - // variable length structure follows /* struct JointData { uint8_t numJoints; @@ -240,6 +256,7 @@ namespace AvatarDataPacket { SixByteTrans translation[numValidTranslations]; // encodeded and compressed by packFloatVec3ToSignedTwoByteFixed() }; */ + size_t maxJointDataSize(size_t numJoints); } static const float MAX_AVATAR_SCALE = 1000.0f; diff --git a/libraries/avatars/src/HeadData.cpp b/libraries/avatars/src/HeadData.cpp index 8ae33a1b4f..1fda984e78 100644 --- a/libraries/avatars/src/HeadData.cpp +++ b/libraries/avatars/src/HeadData.cpp @@ -83,6 +83,11 @@ static const QMap& getBlendshapesLookupMap() { return blendshapeLookupMap; } +int HeadData::getNumSummedBlendshapeCoefficients() const { + int maxSize = std::max(_blendshapeCoefficients.size(), _transientBlendshapeCoefficients.size()); + return maxSize; +} + const QVector& HeadData::getSummedBlendshapeCoefficients() { int maxSize = std::max(_blendshapeCoefficients.size(), _transientBlendshapeCoefficients.size()); if (_summedBlendshapeCoefficients.size() != maxSize) { diff --git a/libraries/avatars/src/HeadData.h b/libraries/avatars/src/HeadData.h index c15714bd73..bcc2cacde5 100644 --- a/libraries/avatars/src/HeadData.h +++ b/libraries/avatars/src/HeadData.h @@ -57,6 +57,7 @@ public: void setBlendshape(QString name, float val); const QVector& getBlendshapeCoefficients() const { return _blendshapeCoefficients; } const QVector& getSummedBlendshapeCoefficients(); + int getNumSummedBlendshapeCoefficients() const; void setBlendshapeCoefficients(const QVector& blendshapeCoefficients) { _blendshapeCoefficients = blendshapeCoefficients; } const glm::vec3& getLookAtPosition() const { return _lookAtPosition; } From 6c15dffb9d0d3737aaae3cac9af01d4061ae3b5b Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Jul 2017 00:45:59 +0100 Subject: [PATCH 0767/1049] added new glyph --- interface/resources/fonts/hifi-glyphs.ttf | Bin 28952 -> 29160 bytes .../resources/images/calibration-help.png | Bin 0 -> 50683 bytes .../qml/controls-uit/ImageMessageBox.qml | 32 ++++++++++++++++++ .../qml/hifi/tablet/CalibratingScreen.qml | 2 +- .../qml/hifi/tablet/OpenVrConfiguration.qml | 23 +++++++++++++ .../qml/styles-uit/HifiConstants.qml | 1 + 6 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 interface/resources/images/calibration-help.png create mode 100644 interface/resources/qml/controls-uit/ImageMessageBox.qml diff --git a/interface/resources/fonts/hifi-glyphs.ttf b/interface/resources/fonts/hifi-glyphs.ttf index ddb0743bf84edd1b9d4d0ae538cee3e050ff201e..8733349227646b207ec15315e9eab9ee7ae9e252 100644 GIT binary patch delta 760 zcmYLHO-vI}5T1Fv`?}jLEmYVN!%qe2MsbC7LyI7g5GaPA6;b2GpA~9LX{A7;ctCzU zaPj0`Ja{nv9gHEy9!w00H{$_gG|`hWL@$kr7ZZ)aM4W9&d@qyvzIikAGC#M!VDT$1 z0s=q z24L$X$CB1uZhMOjN;q-DD0Y}Yp%3q=+{Tq^t(d}yoE9~N#e$o%2>B7-cMA&h`vtGy5d^RwPwvx0uv#u3L{Q)|FXNMTI^(cR5HPUsQog%UoefR{XIQrTT?+? zzP~bs3>OM3nNe}9!n$JRtyv>)&}b9XbwFA$R{GmZtkyA=xIin6^s~d96KwUc$_n9vu&ge)DrARP*NbIQNEde<#?5hOCPzk0FS;E& zbm?6>bTYd{MKPBS)jbHjBwm!HKs+?vItY>dZ+1W)KmYfA@4fHw{qN)_J^MjhAOIK9 zL>q2ZDtB)@)aPFT-d|QTQ{~AD-au!5z&ty1r%;^vIBf!SkNK?W8s6@AzX2#8xTY5k z-#a^FCwSj@Ke6a++#j)0jP(Ry?pSqWA$k07pZBC+$+GHOhB`z?Y}m!Z70X>+&-_lO znZM&oILoHdQ>HaQQ<*ESvF_oJs*K0@eD;Ci*2B?Hv%u18)&g(YU)?U`M*(}D@Ay$T z4(Mc`bk#bp{y|dVYrx(@HEeaI8a|~7YKm(#M}5I_>ZJl?f~Yc)0jR=E&M5 zQ7`b>G~UNpW4sq*o$;xt+1;YouC))Nh&)Q-kv*sm7xN|Y*7il#>8Iw4>kb8F_qIAI kGZO!Z61|pU)+42ew?Y0rk2Ovr^Wp2n_O9&b1FDAq0XSxG3IG5A diff --git a/interface/resources/images/calibration-help.png b/interface/resources/images/calibration-help.png new file mode 100644 index 0000000000000000000000000000000000000000..e3734a7d9c9fbc6ed450b136ce1cd71c16cd3852 GIT binary patch literal 50683 zcmeFZ^;cBi8#WBX2s45(4xl24L$`!dQbS2eN(vGpNS7!nFf@pCHv$5Jbcw_W(j_2B zcXyW}@1D=M-u13$t@j^z*5U^i!#QW~eeQkV*L_{ro)9$^xocN%U&X`2yQUy7qk)G9 zk;lU$NQV)Eznqfpu;JmM@DyYuHC^#H(})r&Wsi^h@#ve8OjK&oP}x|Hl4X|GNli+;;fCk?{Yw z2$|69kv{s+@hWQ;BkzkUZBIrd+v1}l7d<__fI+Ie=O;VdU%q^4V_h4o$RnW^cpO13 z=3cqDxVYM1yEc>;@i_T`g4f@(mtu|Py~!GRDtFd?WceMg4=Z&gaF;YKDBD2V!|%j= zd9~6t-}=sMsVlDBZtCG!-Rr{5=>~mL8X=U##bHdP&6tK_!aXiZ4(-@aT7`=5Z}aE8 z*%}|rlq9hHnI9F)8uhm%ceqfeyWZ^}=haGIS=u5sE+feMqR*Q`qIvol8D|ABA>=GK zoJ^Yi;j&N-FE1}TM}Lx2>33vMgPF#+X8VhsgO!#;Qq`vpsd%^ihH7TKI3)g_X8$>! zuy-6lDHq}4PZsIjw;cWyXW-PyVX0pSuQ)%e6G93 zM;#ovq?z;B2f}9dqG$FB1i?W-NW!{!)!j1;UrY)i3>zC88^7yVVa)fjyyowVhi^7n znUvyxjz2$G?u9r~aFbB+$*lh>;r71#J+r{HAc9+hU>Cw*;iI zySDpWx3Vu81~nq0fZO#RR~zy4@Mzub9ELyk9$TJYY| zKCS1jr0wW-C`YlpF!%j`5-5x1fe1nuvO0&hn6Cd~tP*ooQK(?WRfl9a-zTeqr+-%UYDMKW^-<`_ zvM55zijUu2VGQr_IUN|y_X|4SssX;7mx)p+hXl9YI^mgHPHHYXz5iuV!AQWQWB^m^Lv`mQG3}8CUwz)uVzE z4BZtbf>z&gH^N@Y3@Si5k_q*Bi{bN0f&?)4VFJ}_+$=TBDHpp}9`;8O6fG8qodaLchWcJlZQQ-VjqIi*)ayJX$E#s;C(=yoHfDf2eo2q1N9^_?sv7g>* z9SEbkUs=&I?XlC~FCxRDukyiJzuIO%K%FF82ts|x=`{G}gFSpE23-q(AL ze8TRlGRR2U9Wi%A-pJ=F#$9dAJ@Dxq)h%lSc_i@m#&Dq=4GylT1>;@Opri3b;qP46 zt+q)L{j=LrXIeAuUifDI?dPXehqW*4#s8j~e%Y?uh*nP5s4F5@R9vfD=?u|Qi7A?A z>4*}WSi-K$I=%S49J^T?b-Fv(5)ddhwTm$W;K=nI-j(Q@alh$Ev?ioGf%}(x!nF70 z+pV`MD&c6>+}pPwSQwv4R(Le>5~Vh>sIHsN&}~0@_~;m&(-v$iFBJKJo|XWIcE_Uqw=so{!wbd z@oIL&jSyAA54r_|8Vh~i3QN@iI#=7uYdnrM_3kfTicVxh1>XKXe!nEX0I;UiBao3^ zT<4XzHr?7d|_$+h|!Gk)o+tnw-9d@}9qq$aL~S|?W{ z)zmWR8uiCJ74y0n&S3D)Dgd?fm2d}C>KV8IvaA!|ETr^Tb0ppt*NQ?{RXE_)KL*g7)89oStbNPOau8$HuknV0VV z$@65&CAyE%RpjD>E!gre;S_1=Yc^+`@4-m%A&HA(F53oU^==hEi}aq{tDS|g>6O3e zV#;{)#I9`~7NFg*FTnQN{35p7g}$ZjJ@rsB-j2ULrysaj80`1HGIIr9n6Z4e^{--$ zEU7D7`D6x;VKDcH%?Lu0TbaM^&}_npZ*WFdS^w$+-aj~Y#UiYKw#Zj`x#kt4TRYEeox%!%yN+E-0 zvZ4AeZATx1N(KdDG|gQ1&ih1mU~dFof-(uaiGMZ6p{nMk6|p*=qmQ&nnmBon5~NeX z$YFc5o4bjVocXc*nTOhEJ?byBKb@X7UgQZzOY`6E{5I4VFP{|3Ho<4k>bfMUYL6=L zya1RX7v#zHC>ZY;r~I_%Box=T>Aj%tvMFq=&CRt^D~Q z4U+3IA`@L6#POLK<&#bcOR^vj?A4>A|3Pg^A&n4wneO&c;EUe1fdX18QRze!I@XxJ z){#{e&bC04quGu1U)Oz3*r2q^wLXv?w79giHY|BZjdY(*Lh6ChA&J1uB&Z^M7C$m` z6bnvzSlK3aeQPZ_9^dB7737RI+IYt4aj%}v?&*=!g?B~_*IhF8i1emux0SU0=W<1-WdlM|aB? zQpjRdb^`oM>i0t@U1r`IIs}M=YBeg4ty^Lhc&IS+jX~|}8(Z68n~@?tcYD>Mr_ZGX zrRvYb*|`G;2I1QA_`E^JH{{q=dfgP;RXGkG*o>;BxQg12SNfZu+&h=-N}pmksnh&^ zJ?xG_4Skt%L@qXpD>23y%+sysew{Rg(U=KeWw1J$*_KHe@0APU{AeSAhs-^IXNIW7 zaX=h?jWG(_#aB8;FZF=Vzt*Ce4Sv&BA$n6Zr$t0yLgVjWtpl4f>zaWeTKA4^dW#H@ z2L6R{(7Ny18Lfh8iW@mXmg1>TCyIAoK7UOGP}K1EJIf5;j9}tLhWA6WD>;lEA3au6 zr8wqJNn=$|+&Q`TxAWILEUxui({ca-o22n`P?l85jme_(QiA%Td@i7Njc4Xmyw7Et zeLoq#{`#|aD7m6DUhHkfX4>W3X1<1Wyp>;)td!h_lN-f@0LEe{;H5-tvc`{9Ad(E3 z?(4{5>y1;F7nkb+A<;~pO=~TZ7=&E@DtFVL4`~dErGt+F?wJ(<)vM8(@8M&}2vTUP zawuA$_PDplJ@Sp`Ntq3eqi4DMV1T>m+}EAP4M(yyT2O``g0eoC)h5b_KtT#N?^N0E zJ=QxKys#Yh`W?%wu{$_3)U~nncqmWxrcGTZcm#qIJmQ;`>PR3|gE?~jTa`%DZ_RkI zSA{g=^~`JKBMlc}MP3(kIYYm>=4u@m{w(udfc8Tk4PXd9s*xF!NiMI2!n99+nd$QV z%^h=exy4N+NIN4u*|WCGO>K4{=VxXY5nuk=ptPU+$qIfl6##(p*d}OgXm69PT)zSq z2^qD@aywY28e?~}vK3ydd|2+WEW-XFBwY?WwPVQ=2_SQ1)NE{seSz5})UVYDivY@zzRb>hiu})R*)E9lLg7)-@1K5r|p)M-dNXZcSk&i(wRUCN>wd z!)^cwd@H1|mVwYQqcIfoZ7zlDg*qi8%QSPLK4)^L`72XjU6eA!-yVKZNG$Yw`MuCb zs7J4vC#_Cr2ee1@*+O9ySs;0w>OdFY%G~{bm`a~_P(X#w@?f5QeIpC_iMwn@jh-?xl^&uDv>6|j zQ>^xcg@wnzZf@FaQRz@xjTBLRBRX^J?d=^l1Wk{0e@a3^UTZc@4#pN5N48fQ;uOo> zkqsGS;1b_eJ+rCQQd7%pkUMiN@znZ@y|KyqdzWnI=lwq?Qa*S8yl9&({<^&{^<q1S1Y+M$V_jNU?)>Z!R1b@|}ZEpD?#n}y)Wb3cSFe`^9|Dq|`zul_l<<%H} zbN=y_CF1D<v^{C zYa&SL;0c{C9eN<%W_(EC7Dz(%A(wYqXH6@uXUSwc&aqY{cV##Osv&&%D}z7h7bD^x zh>AHY`~F`yeCft>Y$@}Y-xP+TvH7J|!|YoE<20!HQGgm0Zy$w9IJCK`C~g{)Y83eh zt0g8tCESnJnHoG!;v3)ozJU}kTc_w|Ubs-eJLt#t*uK(WD+<|C1t))B*HRbb0zfrH zPxVOR6udx7UncWrMkDlLrs%7kC|(iwib%WOWPbOg)lQAS^jy;{$d`{&>Q7iOU2z=0 zhaBCNK|YAX($#g)iD0Hf=WBN!Y8DdN z6gofkSGqL*jUU(poAuBx(8%ox;}HbynF|bR{6V;I_6fv_KWXeO=ezdx2UQfbYd_cd z;{>z~>*bzSY2j%LeI<}-G~v(-b3RJ*7^%i1*$qTO7;g{MZU zU0D$4#{ND~}OzGZ!0 zMN+^GaryyD8Dh0vsHbec33ha|kq*+2`yT$r|}Abn9@8mj&(`2l`YU{XnlM zA3tbUJlBS?I*X=00e^dJ!#RkF}9X=qv5$-0&K}8jTh>(3vx<($W03tAH z;3K*#?Cz@=pPRV$v`lN294_?ON7^O{zn%6ejx_iNGy#gD;}^E_C@#pRq#`l({U|&* zG!fj;hdM!v0rLV}$fWeiqE2MHHrs;H6ojCsDtO3=a>vz3^fFZFd%UPw(z(jqA;)~$$9Ayx~w$9D8Isckx5}0R#eo$kS zk2I8ByJ%HS;Ty;DcXCw{!(3ekuyk4I`2?_R=uesjQdcbzr=SB$ess^A4j;Ko0J5<} zCGssJehOUk^V8vFq_1WAL4@yEaSotoWDTp{-BxQ&U zz4%_79pD2-0Q1Bf+4_sNdg<@wo#PB4gwK1hPtjnXwfZuMv=f_O)IO=pjoZ@N~*^+p0mQ z_ka4#BQpA>et`xP*a9lz1W&+NPQ$@%capKGdPT3e_wxT@%t&MdapMWt$W&@}Sd}Ry+{6D&RVWK#%mn%n8?rtc3>>_&lPh?6;dexs6A}w>uS^MC zTca%3u7G_CUQ*{Cj>C&l>d*wM)5wf{Pycqx(>Wbl#DwjoCqFQ#cP)Eh@dM>3^$`UY znICYEXLV<*qF^7zK#LoWpN2B9U@AC~4j>Gp-|gx>03S5L08!m-L^`AouumlzLGJr- zDg~4)RH%vhO-i-h)YIbH`Os1LDJ~Y&z}z6isYN947ms|%t4t3(RK{3 zRfCvvDaJ@~&+CM^$~u1IvpsESklQ7jJx zQwab|K-v6_2niF!Fe@kfQ=?jgGj0g^Q2TwlAOzTuP6u7K@^f zf=#61q{au}gZZ0)_CqmaK-4{4{+iiP`+NJVpElD-5cn$rcqdd?Q*9*dA?Dt*x{frL zX{tjjtE29|K2ljRJq57li!iVV!YYqtAz4fgvsnBuv%bVHzWH9kn3uXASqUHX+$VS@ zryUM%=7tN-isy<*7#HTxA5Y8adbiAt{xdm@ogw%fWEHyV*eG5CxPJs*e3SRzvz56* zA?wE=_28m9%hp{x6{^ATqs&z9>~tX_SC{wixcqyXCoy1SMd5i5os|u*-iO!9%qCkG zM-@EDQv}8F*}hLJPBHbl58h_#T#tr4iU<0%#*Pc8r5FcL|HEZMK`Pcz(~m!*$ESvC z7HG%<0)hc->Nv$X_A%Y)S08KaXSNMYI72`}KLGa;osn^lgw`u%zU)sgf8Kf(-hBNI zpo9+YS-3v}kWmO^t@fx2G!k|L6H3X^Ma*4~;?OCM{k_vPQxlgW{oH zSx;xX=&5%JfXnHi{Xzt1Abp-AGvu z6G(mp_)UG%zB5YkoKXPBP+7I$@RFw_(3orPz`297jZEoL!i%%SgZ?v z+{V4nD;lTcsr=0Naxi22PhUs=;|1_$Yzo|4XvgjHHJy_+TrIx>R+!UAo*WED7JhmG ziw3mCBLIfAE1!pfq5!)B(uUfD`y2|8KJwjHWYHf2vNfl@e%t;dG@*k*jtIyv)6+sa zM57Tjqh`oW66NX1&k$~Io+9+w-{#{p!Q_w?jY1sTb1^CqxF(VvulwkgQ*6-Z~I`X`0Eobf4?uuYP{96hDDH}Zw zWmZW|d}G*T?s+`+GWThf)&5D-GdbCws>-SX^2=$2{4{_M zt~em{uRZWbc6Kc<<2a#3z(d4oQU1$fv{DY}#`l*JjK&Ra_u_&_76gxWRL&i+-niJ# z0mz#%$_FnH^~%W!nKN$<{w@dx_(dVZEC%fZ^8~rvX;@3=O8%o`ohvK#Q(nKfj&FWP zf;aQO{1EArgq6GdR>tu~VD$HcJ1&!1Te*kpg(b{U$qL{fQ-QZ)k{<7ZIP z^!FTZq~{C!l=tODvKo*DGya@!l=M;dM1y~Rjs%?K;|HFSU|A!uA7tM#3JU4~*7+tk z)l9DB?10?eVeQ5=r!F?jMe`eAupA)3^dzGMn8<%R;c8FsSuBQ*X*SKu)Y^yWuBY0)x>foeAz4*5ERJ?I3?R%w$&(({!N#2S#}JFI%wqtWJI z3HTP;CmCmjAu%kf@#$h7U7%SLTcN(=6oFmI@V*D6Gv|K%_{R`&kcJj32(!O}sKg_U zc{__CnrE8(8i~v|_)`7{ls}EHZ?+gp;s~2`9#Y;PRN`(`_@={%;&Ysru_fay2T)KR*E@tz z@m_(uCZkvS(v~Xv#SbbYocr{lINyThU`|L)>IXr_SzZ7d_I3S!+(F6*U;*c@>==8M z=i@L;^zZ2cBiKlhxQ+#a_Ed%#GX40hFGwY5m#Q;`xDz*<2o-sWrV>t7Z&oB7wDJ+zsq$c|0 zB1OWx5r=fAU1DjYeUtzIT12|uP=c%>urF*LcbVfhYpTn%8{f-58ji;Ugm5UX&_RCX z6sf7fZKms!+GU|tj?X^*n*8!=2~;4*0%vgbG+=5Lw~n)10N%o`ZKep=4raJXL$ndD z8=q^6c%-Qr5kep`h;blRk})zNp?x|VB~T={uBoPm;I|ugVsxeyfiz&-NR6A(dfxQrU>AJ|VDfHax&GAL6z z*jz{TJ9QGD+0}l%g%d0<9dA=uV$&w!{%Qct_}ofF!Y7` z7-nv6ZsvasyWDsXZ~vGq>V>Cv;QW}DWwYnoqhXyEgSR77CJ?{}y{eVDAqPSLODAAo zqiV1dHva;oV8@~HqjKP~sk7|CH2=6Qy$rp<^^`GHC`DNAseC#XaQtTnDWdm2lHlWd zsoE$OmDGH2kFE|fSPASl z{K%#dcc0B-dgeFJLwHn@1pn@kzsjkV5qo{U(Dr^IioU?ql$038saO6T!tp>7@(l%c z!@?U)Y2DQus%G1&jL7Q?a$_L@ke&Byj`n?ibJdfR2H&EtAQahettb=-87`2Yg6y=w zGOLd)4Z#BZYg7KXf^k*?B%r_6_oo&}?>t;R!KF{Ho#Si%(O2zG?ARp!ILneD3E;Jo z#z2;_qv+;Sz{Ws@6eePNqf?(WxF1D>V6jS(dhYZ9crtP<4X*$2Fx~7`=(8Ho9ALII z4QU*2hyCV~EHaU$9t34VL-09;qdTMhbL1(2Cqnf%Vn~gIBxgsTQ#PEW!yiTcrl z54lPoPUi-BlBc39&if?V=Nk0Q<|v)kC(W{Ne4tV^0d#Oy*bwSUeBBp5I6Ck&gp$$M zwOPaSYs5J^f)Y}6W^InHM)_z*0E8Qa`RWmz0)_U^k znft6OnUDSO)h;hw5i{)2XhHQ*a6rMKT zxgrgv$ls0ZZb;H{LL zG5z#%RRePC@aK`Y{Yq=@%0C%OXmRzfj4(^27-S)*YhuL5^q9Nef7H`GwuRk*o#2j( z{n`FfctVm2CU54vHdf+t(7Alwt*>@L;UZmd8t`0;pN}&Iw{cfTh$$VTF!5aaT|kYm zvLyyCvX36YpGhCOY;*RD9)!K|>;kp6xT#{D@Kt0zZI?i!%%|7eQDrG+eOB~Z_b!#% z-dF$0Xm%->w+~spEdG+M(=ZtcW)<=b5$rvCjpU5W0}N~?iP56 z??8A_KnpZ%UY_!^d;0PARNG!(6>H(Qr_Pp6gT=A-C6LRkr2?!c$LTHU>__jRkadvx%iRvl zmC;m!3w}NtEw9<{YFC-8ssw-tUz>+Zb#;mvDy2Ww?@IFsacV8M{&Fy(YyK_}Ab5GK zB6wHYgU;Wye-%Hgg10JC6cCs?9=7MJXWIyG6G%ay7s*BRuxyxzlFTDWc;r?=A?o{? zx^<>1x+n8F57r>twmV_p)cG>wEwfoy?0|T#Qo;x{L-9%Z3k6IEA7L=d!3ZAkV-Cqs zkkVA~Y1+iw<_b@Zz?V3>L-K~Bq^bWRe9x7paYjHOxUfbV_-9xS0LkX(cXePo%B+FW zcZN9NT$0}P4X8*^E%LP70Az36=9;K=%+@C3|88#A-V#J+9Yi24Bq=jj_o6des`KIN zb&@HjqNtv5E0u_SeDe!;PyO5u74-1#A)p zavr!JT5J&ShRE_mmrk-|m?Gy*+EW=lc_c-jCJNXl-%Ce*=!t3Tg?9<)cV)G0<|n(9?fv`|-J(Bp9xgVHQJE&Fb? z!J{U#9o}?^10z75@SS5bMc1##0Tn4Jp7g+wr=19YEs9Xu23FhNZt)W9gYPRE9CU3# zB#y`oJxOh?LVUFZ{Dq1n2CYgx;O@Esqi#Iv5XTVbV0_rCE%3_6!@yWiNP z!@*QF)13Lx>hKms$6dA+U4UY6!{z|7)Xww;a{CNqQiCPnd|4r}MTG zEt#ZJJM7RoT;cu8|8V;X&XMmn4h`bBNw`mV{>iq{`OUay!KCO3{{$;&0Dk z?xtbSVISb+0V#s^#UXcVgJ`Ls!E`Wk=pn7->8xHzxrJGF9t`};6$qTpkgCo3>GKu| zgvBaXGfiH7z39cYb)PzHBl6{d=fM5bRYFe|)$~n;2oA$Z1uKcuPqCesnkuJ9H`yA_ zBixj!?LD+kzWj07QAmoD=xnU}{NkilaAPmTt~$&^f28Tc`NIp(9TWx-R`Pt8XHGwu zZpcEyamxBa$7i-uja((1y!kj1bu)S3UDYaK`!z|yQ zSapy&B81q#vrC7t#`U>sRfkdEpBLLlqfB0>BjwvXy&6wG2|NG@*lEVgk7oJ8$^-t0`48~C z7Z-=m>wrz$b%1LsZ-(^l;LcX9aHVb99dpb31Q5VUSQCCpii7$}0`5L#cgn6~GF z7nnP=(?EM|*`T~kX*MwU5g9ZmM)}ZrHFF9eCr#Phw_4RaRFk)Oh~W4~a1EZFmy1<( zcg}{V=i>b~8n_S*BeW`~Ewqd*tQ90BfM48qCvM#%JJ3c&^Q;h&7xO0Feh$}pY^d!E zdFA%woxj3Q*F0vC1>rjbIn4HN)&^y7zD!hmpCwLG_RWsj%((cvO_pKTjX#05KYxh| zvXRmo)$iA%$Gtqsl|+nbCz^Cfi}lTeEXR9r4IhxG_<2D3^PG&en&)TcG}Tq)8fd5N zw@SJfm{aSvAM8pXX?|d;NGvc(*3D8I6`9`F9VT<0edQ$?0o&LGLI3N?y2$PBO)i8 znY-i{T--i{L!eoV6?kY)f&gR>9zS#8yadE6$)VBZ?}-z3zVoMkd&5=}A#q51svkvk zpgI2nG86re=ztZ6B=Sg@by57jS~|L4%{^1mGauhSGr!K?ZSmAT7!a-idtBl=GNY7% z1s}vMaFn3Ls(h>P1ZOg#`t9j(U^T`we=6BdMV*bW59>)ZX-U1WFPf{4lclaizqPSU zg3cooAHKGlJTdhA@^{LM>TA`TRa0b{o6B}sS`Ijbv98Dqz?w~O~2h}X%=0ZcTI0w zkxJ*97WWi4u$w%{6@9!(i=SH10d^wL2^sI!h=-GR0^-{C+N{VrqOH_1`)#|6P%F9b zN=G;s{N2QT`(#ef)vKY|{yB-bYOVxTbnT=%M?Qu~T>hz8Tv@S}OM_Mf7W}dTKD~mM z`?{ougj?rx#05@gMmbW2962^E#Li?9o8!zLHybJ!z95 z9eRQ+1)^tkE84P{6$5%uc%NU3o&!lcyvV3Y9KlL27tt}|Xm5E}Gv9Sg5h?se#%rQU z5OGBOiitI{dGfqS1mK%J4>aT+0v3wq%ND722@($N7iYpYM0$=pI8X2auO?uPPe@E) zg`gIWd*%QuyF7p+W+&Utaze(9WTcrixZ=D+bOMtP@>pykdZS(P*L0t2`UE&ey9ub} z{a%{#jH7QK-ujluYudK@D#w_7XP0+8=uXa)g91&%?6;FC7ijlWj4LIA=n|JcdWm8K zYVipO^BK>FS6@}SZ@_Kq^uE6NtQ-%Db`c$Rs`B%kJcl?l!eo~V1C-k5NeVf@?hpl} zCwbsYVF1T2p3+QjjaMm^P!ARy;v9{G^J4S6l7^nf-HA1snP`u`-d?U3cl+5hZANzh zbqw9xrIU~_`i=d#uO656N2=aE$g`s)UA_3KJXywGpMh#@F62+(rF@WUj#j^$n;Uyl z8?wHH zZ-#k1u(N9Gg-m5$3pSa#sLM6SG zqRkO(xLXmtUp#pj5lN_9$K#UuqvFt?m<0lXGCS8eor7VYj zoc-Z-N0|BVvVDfnduhTmj@AQPbVijCpK7|S+g}5PO1(RLnQY-h4f&VR{woqY|G))< z*5!pW(=r2{n9Plz1>_tdHvmWACV6{Poq}U=dHL!f4oH2apX!KWAXcty^Ps5@4e1Bk z<}kCY#C``uG+-6FZ6;6CL|m*UAo((*^yp!Q*11pf$l;+xqLa>_6RGW8D{&k;Pc6f% z<*_#)`qhln(4XlFD6 zTfh*MFoa}3i2T?wzpxV$#_xjc=qI#xYdX{|F$O_f9; zF{pwkNN%b958dN8k80{1gGo+0h=0501(qT5AoH4DannNTPh00go!PO3T{Q}5qGtT+Ftbekj za${y6V9_j>R4(?IxtT@JYmz)wF1Z{3$JD! zuMTYC4CaZd*l<^gm~E8L4(!D@(~@Jm0d6FW9-l;Zd#r*bSj#jG^2o=V7BZ4qq@oBF zB4T4Qc>EZWbX~W`?oO+^IV@>H5&~GfSEUaCQ2TG+jL%Z)x;O9hD{`0^iTSKwLs;;z zh!~y&4z2$8`brCRbHc%hy4vj9NY?tArYabk2m(uFs!C^6u>fNc7uB`r5F7QhC1>gl}Ubm3PYRmJiq za1P;n2mPsZT#-Q0j_1^)zXlG{v2&3}0TSM!ph@Scua}TApjK7LU%F*6@wjYH{uoK4 zJmJQNc@QFD4B)9ali=o6jPR@FT8(?eOqjRgeVPL>_92!#HT z^P!eKFX>$^>xUUV6(b3gh07E{^zK5HS!b~8f>am7Z{ECG2pPFo^AB8 zJT?JG`*)jX4|$;+c4s9eY8CD(WFm0q9d5WU11kYe+t<}kKdMf{0>`Tjx8IdW@YF|P zw@m*1Q~hM?M^5AJk0@MnRPRfPm9XPUS*Ch>Qmkd9)d; zWk)+y@pROsP6d+A>@XmEQvr~!X21rKejL;1=7$EF&LZIR6F}S4slbw!^UQHm4jhuW zX5>9!&!Pn?{=2W0l zVwfeAM=PX0!8XX*UI>)k<>B}&BMi!6!nQ^sPbCeaep9>I5Yie-dGR_doe{UvE-;FV z5a)KXctr??i3bP{fZeh)-e?cilg_FVG0ft765QIK z|KkNnw0o$GN=7@q3VsjiT(igPKDZ5bPDvH)0?vs61^`9SsdE%YLx}m&l<$}$KeP&K znO$YfldqsD0jPT4s{2O?8VQ0j`kNn7_b(%FE*(QRGt@?hVy+xknU|t>0WeQ;@62i7 z{(&GSERvHckB}I^4R)RGEtr9`u!c_W8f)dT){qb}`Fmbex|J*-0Ng%Mt;*=ajTsaO zk$4!3?mttE2f&5uIPnss~!y{2l{EW39#HZ77j25nMX)CeZcPf&W>! zd+AW+d1Lzy#E?S%_wm*NDau_6LJFX_(=DNQ4EVCMQ!X=cH;p{i#rAJI;m!ab&|p9X zcJE_(2t3g^LNoM1Hyu7Xh9%v#nWCkghg`^cHFD*X>c6rtDVV$yLf{=ezARpQMA5Ua z+BnG!sf2pw*h*PEko7M%6%Q;W*#pQk*j-E%gIr+AV3DH%qzoFJvQnmwYPIESBmuUS z93MfR!WA)Gb6Qxfo^v9aEoX<^{eT7>W3kU})#6wGB6!^6i2{zq!?N6|+Y z*es_2AyPgbsB+OvteEV2Wb$V3)mHxi^DT zRRB*}=cXsjeO<`?FhA_B#I(}AftwN6LA37Qq6G&y!g0$iA2J{402|x*sK>NA;1%Kn5pC3X$}2gdxOe4$TrV&#XL$S%3RnGS6QoWWJzEc zv2#^ufkLjhhrrWA_tlT^8vEhqA;FdCq3?R>I=J}EWm=W{_pG=+r#dFuf||u=+D4+Z zm1h-3H1bg~Y|T#!lqXiMPIuR2Y|ve=Rm;oOR2Q7YBjW4ojX{rxDZb0` zk{bh!o~JtPL&U-e+aNd(}JlL`Asubvs+6fj#8m zEPx%13D}BJ2VnELDkq}!dK@l&7MFIJF z7u_I_FwUJ!3AO7xI!14otj;)7p_4dG;f7m0wJXHVe)py;7QZ-C9aRO+vdH@%=x>u_+2h@y_1;7#)d@uukLU&Ocs)N-K85}9= z{?Jski44THc!kN{<6VX6#RgwAT)1o? z1)wKzpL*GwoIA6!vcghtKky+S-5e+p=VEq1z1CV4o+kLN4qzm|x*3Hq;t|3S5M5yj zX*&>frVQRXmOavE1s9yf3Z5&GWkhS>fcl$Z?>vu4VDT>eb@KzOh={(2Kq%8f!?@tp zkg$10IQ?Q!2d4HLOVXXLAksVRt4UHFot;tB4Ib7fiaBxIMus^3w{v=l)oI`-UZQ)wPd0xR$;#(i(W&6F{cB5&CM~1PoM#GB?hTj+^qQ z1Hb<@_t(h+wx8hFCppTpWr+PFkP-+Pc|W{2pKbzH^*OV8B9Do0I!-)3Z$MfH^Gs8F z#D?v;Kbi*q-Jns=UoV_TH=ySI>07UFu4RzHY{n}KA`|RLD}<-~px1MJkrJQU^MP8t z9+z(-&*T->AomC}lr2Xl8A0aDYbZ#u)TXNfm;rv?8%$K$5Zw17VBdFt`XUX&dfS2Q zX~D7~wcwTLv70Qqg@(77!hn-2m-3zPqxC!AV{Q|+C@uV9;P1)(9)EkC@0hc-kjOnv z^Ag0xClm``cPVn&u2R>v=t9K0JbbVVJb_S=<{Qe zn7M3suOAiJ?k+qh7QpUNXa9)^E^QCKxM1#~8Cgio8C3ub7=?yB(j&>F;KyMcONY&F z5HXR4aF>u0*bD;Ut1^#Sktr`nGF<%RG9GAU&Q>GBdWa3wYl0#relax4OrL zA7fA7jm>?~Gr+=dhAmmE#gQ*Ic892fX%ujZNtGa$uS>$%%KYZ;@rO(#PP6*(a0b2& z)l@}p77W|U;>m@elM;VE17}p=OmW|J149@1b-|wX9ZoNL-wl2-u=ByAYyw&feU+m% zZ8SARA%qUCR(SGLl>T+A2>&nnBX+ub1O0S?n?Df-*E<~P!wP4@q&*zVcjNwxpif{V zw;yzPs0?Id5o%&ADmoq4F#Zoe8PYMCgWCkNcp`p^3`@UA^?y&tM>F<8{1GPGUyCz- zRFb+u^_HTaa*srF#nrBxM?KcNV82``QPyKffN>hukLE_}*(Ac8wgafNz?iOM4i75~$Uf8j@h-uGKN9}5iG%qBbo?gZ06?g%{f6>7c@=~^EyOb{l{ zAi#BB#@D*mYvoYtHH{wWWiKR<79dGz)=b?tpC~s|()8X8dvKCiK+6hZy6}hI zRCFIbn*W}0;K1KaxeW51Lc6>mojs@JKC_LfN-VE<{I#~z@*LHr>mBZ20x@&^@?oG)M<5DFG^H@3B7%o?L*_ZAU`*{5s6ZDRw>5 z&&f0@aR}hcYdyhs7%+YchR3z~HcMt2Hn{V0tOugOKlLonzViVf;HpJS`P07Z z*pIJBa196WLWz9r1TILSWs$FjYN#>U_%{tWI8?|b-Q+243@qf0dvW3CLFgj0zn=)( z%(mJ4`Zj<*yZJzM0%!OFb^~kV!$m>xi!2xP4CZ-IlI#$gGT482xqQDf&W10$Gvt6Lsydjy2FurIM(6cHg~t&WRIxGZD&iN%-f#H7BVujS0Q_oy|Y)cHyO!HR0w5c zRYoYXWv};h|DNZ4-{&~q_pdq}e8=^@uFpKr^ApgFGiNTAE}^>{NyEpRYUG}-nl8Yq zOVR)9=I4}N@@x2{*OMWg{uG3FsQ{dE(2w80@Z8R>^mR|#-HCDl%MoPM=28&8wK?hG zuIc%lS_4UgMe2&+ebTbRu;wj%O z7iA{0;oMv-z)V3u6iZF8IsZ(+DCV4Ur3+f_wthx`t~~Facb>?~qQhcH1t=be60v)9 zx^PYe_gzBRe2QnxXad-&Tg4f{X2^=*kl7`jr?2aDDKV*%7a(QBY2${_*-Vp-{ayyk z(gppbzO={r*f7Mgc`@Zp^Y5YD>RqzZAB(x3OIPl0wC?;91L2$(fSgoNP7XgkfBJ78 zQ!?xPVDxKmK&}m{ASejI9u;GdlIjz&V%o`k7oTI6`18u7f+-YL_pTH#s#A12E7#4V z0i4cmz?=Heh0+C=|wxo*9AIPAi$pRyX-@G$2*DilCjk6*)5V=mues@_>f) zMv_ZAa9tXZJ1P9RN`*36E`fMn<)i){{2c`Q2PMsFHTW%Qq#^g~J=GQCZg1l6xiIi_ zUY@#Y6OXSa#+5tAK2ILqF8jLY&NToKL3ezZX%lindD##Kftpp(8k>=#(6cd-D-rXfu%5N4vF| zXd=M3;2pIa#^7lHkB;O);O$MN!?1sNcz6b4^U>{T4qKDP2(xNW1NOjK3XhYmj}0ca z2dp1RuUH(>du;czj~qSnT&?{`cYNjsjVekxGWmnny(zl{c)-HNXRWHr7Ts_|AQBF* zI9_I2^02%g!MG5Lmd=!_puI33|C1K|mMl(;Gp!%fdPI_Ts^RIZ)A-pY`OB>j3Oha4 zQTuyXq{lVy-_{}%NNpOA8oS=9yHa@oOADGSHS5vL-Te=EQAf|nGCdPu0ttW^)IZMh zJ6gtS0}TjMInRaCU=b&H-b^~x#y{!=2EzD>!aNlrsgD%Bt50n8Xuioal;-E7pnYuV znvt7Ghkl&jKRN8B0Fm95Ut3Qda)Ocmx>XN3F5r`#Fux8L3VEEx9@_fA1;4`_kEmE~ z2hYXBs?lnXHO1(I;eGTT_uaq!`EnE}qChCL;uY~$gdZaTFVkG#O)l1S^so_f+Z7D| z?>|r`INE^(y53u~hn%qUi64rE`}cFxaB6I5(bjd6ZH;S)=)OdzWBc=dtLr8n7prD}dl zWK~%am;F-K=x)F7Pfso~OIxx2lE!3!hpa z15y+Zr(MbCts%Oja1cJQo=4$fC93kh5)yg&V?t=J+CgB}xI)w>RC^K_FYU3ApfG%c z)&26*A<9Ng3?GGVs^wMS@)V`>SLMmb0+74GL#J4^|IyiJ0%wx{U}i#)HNjipNn{>8 z)tyvE&`Nimq^Q0J_$nHJEw3J5+%e_UtE$+g$aedt4{+O#PoTC#NF8`re!9ttk1BQb zJr-ZdW7w!FT{zW0+S2U$jrL7!F%~KL028r)=46%Su{WH^hiT6$37vp{ z>(i^0x%aVz;lhrjro0!H)!RMsvih7_%}OP8E8m6nnLlhR8ZLXblCEckg?&laDrwE3 z176WbQ|iChu=_S_i?~z7_9Nzc?L6`C^toW;8+6lwKQB@9M_d)BQ;4P0&`2>d@!66) zJf1msOcw_pMm5DOi$irI(djlfZcfM2WYN|O^Gh_msw!yW>tYXT>P$OBPRkNeA4lO6eM%d~Co@QM^S}f9!y^~<-g!6$E&Q6dSePLk4mlf4psO|d_ zhq4=tUEecdld1p~slaxu>@63Kk!u2P{6EEOjx{S#+3CUncJh(6<+rZ_hzC7dfFcA0 zm--t5THzboEc~?|ph2{v0U-c0srbM6GrGSQgUTS_t~EBiTrCt;{~1l35TJlv4J>)H zRVkoN;io-KhiB*oo7$-r$@9awyyt%avj4?97y{^g`Uh}`fA@h+PIn!P{~1x^zGlE4 z`3OLZB9PvWX9kcQV8MX72K|}sIqp+7Q`aRoN#;u+CwhBF^STKjT33V$?Z7WL5KMDe zD&M>rb{>0OoRd{~b4VfbPuh1Y5FmyPw)wYntJOB`dHT>#Ajb@b&RCI7xdbv;R=< z)TXf1yMZT&i7zqlt|M6cavv(vy-b!dJQ2>)0w(0z<^%g8luJlncLGxr)F>xw&7Ze! zc3tA^OXOm+6(zs(c?oHmGAD#hgMT2nXM~aM$Lpdq2P+B+&xW$lV^yv9Kr11F?njGZ zWUjV6^l0^}m3Mjfdu@azSguKUND0Mx%EdkVd$C2NoW8vFpAnD$^UZgGugK&kdX517 z>0%`2v6+|5sl(}*VPPV|8V_jGqzV;P=+R+WR5L>K^v^N^e!RCkKN|1Is!Ft5)Ol0$ z>h`tQ2ArpdB0rwD?X;(!WMzQx!iBo^0d~t>yHGtxDLTe1_xF+oA56}3bB30$g{Ond zfLg*sCgQ8N<3Vxg&%EMco%L5H2m@54T|)lR`n~3);?h+$+gQQ;(d>H1@*U{K~Gsdc5>d6bf# zXD_AE;+Lgg;xszdtvYILTXO|FMM*UPI1fr1chS8%cv}lsT!IXBhuI#Qu2_Rys%K*~ z@VlVUvOB&v!kC2}NioO?XsfiBk9&X2R|qZ0@m;?_U?C0LJ^hRMPj&JGFl-Lx8$3#qRyz@nwj+{^C-`>5ap3^@nZc^U2M2g=V>-3>WyOMcY$ojoAhh<~}t&F8D3AvE{ z?a1r@2LP*c@K1E4yh$lJlvM&nz^NP?f zF19#m5V??N)Yj5oTs^7s1D7;)g4VgXL^v1h@tN-`ziEKbYU%tq5PCsu;t(YRZ z3pyt8@!0sDnaQmGHvmFM`)H$~HwgTR)2-1CCQFB^4gqMD()I@$6}hd&kxU_kF2M>_v(ZHn3kOc$1! zW$@6^(GeTb8N7w^{IX>pF?n^+q5h)O6#xrlR6_hcKr*kMLg*29vgBHW>#wbDIZJ4G zP$EL>tF_p<57@FwiBCznxz(y$E93y0ll*fLxFk4!fs?!XZ(U1upS7&wk2yBjZNy>^ z)p2swOojR}WQ&}`rCRK#PoW_~?X@Au=6~34!hL#n4n($ww)PpHotQ$2%oq-G^H^a? zna_FRjAGiIPX!PJUH!D1_VswU!B!{%bM_Zfe9&#+cfN;oPjF z$vnnwSez9W`6H$}3q{Z`ex;=*0lLPbfUFujfe5Mb#iPQG^a+vEJ%4#P?Qa!JukP}c z+V!poGFKYsQXTG4$}su27a5XgLPs(hSfZ?&u+mH$0;SK5JS$Jg)$`x+nml?2jzIVA z!){&fK%^9IAnwd56pZ{Kzb%l7wfKs616pgMa56oF_HJAmN$*!b)V}&KrX6EF zcjZjRr<8P6w%@M)z4vbd5VgR6F20=DgqmnR{|dgLL`P_<72iqY)AvkUy_v!*lY3*{ zb?y_CSFW|T_B1n@w9}0Yf^MjJ`_6n6>;ol`cjR^%h*0W#z_H}oIYh9e_lTE5x5@3# z7b(Naux82SknP2On%;}$~n<|R; zxVvS0fY1_V_Jk2nv))P8)}=@J#kX5@Kb!A$+;`OiWrH=*ap2oYE4j>awI}^mbK=c> zyPp)()MoIfje()Un8OqD^XbTU#DT7mH`#Q&+TPh=<>R~m@F_^uTq`@YNnOvmSPfkRZ>?xpNP z%-K&tUACel`qr-8k745?*8tY#!%8PYxrIhK@`4HEl6+4uO0xFnoM&yzG|n ztnrd$X-Pd6WsQ$Mx6u+8QGSzWb4wrh@y~Eg@n-;ZIR2LRoDjFeFh=UsO1tn@d(^Y) zRgk>6Z7k5fLx}rZVYf>w|7ypFw5Rm}9zN0Lzd5t78VXN^3zAf=&e~?3JonyJn-rYV za(N*BQdbu(-X|10aBZiPjqR%0>US|0jmb;HZcw`wk?9#O`wOi%H|;oyqY{V32a8T@ z?rL`qwSA@CUT`_ydoT`!XPa_wuzb;qz_6hx8tNA2TO8{kyZrrgj`*~$BV^-m@r*wR zyZ8QA5qJS#VDDxMZaC@gF=5B}CWCBu zx*WNmiFC#6D};|QA=A#SpYIy`qV{jd5ZtuH*GrC=dH(6u>g?o=*m$+JTT3yQof@A% zdBL~T>f@e@`PcD%{fH`Uc#Kro&p98j`&Y0lY$u6blC1;W$P|(dZIKhxa&J~gO=?B? zN00w0otg!lS~Cs&@&2+7y?ul1@_D$oThV&6;K57UYvzIDusnx6fLc=ofyu7-7 zN>>OQ=#Jca%#6E13EAoM4xTQNfZmG=s2WcZOnyjeU|hKFxj_Dc#aXXq(B%EQ`VVCPsO>+z z6}r}@Ymcnt>nD*aVH%a z1X5VNFLhPjhc3Os>5`C{C|BHNc{e88e>%3U6`l=Ujsk7bR}O*|R=07!hO{Zv=mboe z4y1id6GH8~ulZYCH@=jFIkMc|TI1wwY}M?`85em~tu)5vG`78wBd$Z@L^3GVp}Y4G zxVF*;O@q--TjldHkqXZ@PSoJW<~-IQ)39_kB<^ZZ)ZX=-6m7oyoI4?=&!EEfR_Rww z&h^7%;y!gm-^5=Fwcq={Yt26z7>7dVLq|FF%pB+mv!i|jDSB+g!G;ot=I5zi_gmTZ zS?{a9@7v-¥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 literal 0 HcmV?d00001 diff --git a/interface/resources/qml/controls-uit/ImageMessageBox.qml b/interface/resources/qml/controls-uit/ImageMessageBox.qml new file mode 100644 index 0000000000..492f520d2a --- /dev/null +++ b/interface/resources/qml/controls-uit/ImageMessageBox.qml @@ -0,0 +1,32 @@ +// +// ImageMessageBox.qml +// +// Created by Dante Ruiz on 7/5/2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import "../styles-uit" + +Item { + id: imageBox + visible: false + anchors.fill: parent + property alias source: image.source + property alias imageWidth: image.width + proeprty alias imageHeight: image.height + Rectangle { + acnhors.fill: parent + color: "black" + opacity: 0.5 + } + + Image { + id: image + } + +} diff --git a/interface/resources/qml/hifi/tablet/CalibratingScreen.qml b/interface/resources/qml/hifi/tablet/CalibratingScreen.qml index 8053673e9c..dd56bc96ab 100644 --- a/interface/resources/qml/hifi/tablet/CalibratingScreen.qml +++ b/interface/resources/qml/hifi/tablet/CalibratingScreen.qml @@ -65,7 +65,7 @@ Rectangle { HiFiGlyphs { id: image - text: hifi.glyphs.avatar1 + text: hifi.glyphs.avatarTPose size: 190 color: hifi.colors.white diff --git a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml index 96413534c3..2fe8a69321 100644 --- a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml +++ b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml @@ -290,6 +290,27 @@ Rectangle { anchors.leftMargin: leftMargin } + RalewayRegular { + id: info + + text: "See Recommended Tracker Placement" + color: hifi.colors.blueHighlight + size: 10 + anchors { + left: additional.right + leftMargin: 10 + verticalCenter: additional.verticalCenter + } + + MouseArea { + anchors.fill: parent; + + onEntered: info.color = hifi.colors.blueAccent + onExited: info.color = hifi.colors.blueHighlight + onClicked: console.log("text clicked"); + } + } + Row { id: feetConfig anchors.top: additional.bottom @@ -379,6 +400,7 @@ Rectangle { if (checked) { hipBox.checked = true; feetBox.checked = true; + shoulderBox.checked = false; } sendConfigurationSettings(); } @@ -416,6 +438,7 @@ Rectangle { if (checked) { hipBox.checked = true; feetBox.checked = true; + chestBox.checked = false; } sendConfigurationSettings(); } diff --git a/interface/resources/qml/styles-uit/HifiConstants.qml b/interface/resources/qml/styles-uit/HifiConstants.qml index ca39326102..aa968c85ef 100644 --- a/interface/resources/qml/styles-uit/HifiConstants.qml +++ b/interface/resources/qml/styles-uit/HifiConstants.qml @@ -336,5 +336,6 @@ Item { readonly property string source: "\ue01c" readonly property string playback_play: "\ue01d" readonly property string stop_square: "\ue01e" + readonly property string avatarTPose: "\ue01f" } } From 2409c83d5df089f5672bc7d14e0b99d421d3212d Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 5 Jul 2017 16:53:42 -0700 Subject: [PATCH 0768/1049] Fix ACClient on Linux --- libraries/shared/src/ThreadHelpers.cpp | 7 +++---- tools/ac-client/src/ACClientApp.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/libraries/shared/src/ThreadHelpers.cpp b/libraries/shared/src/ThreadHelpers.cpp index 14ae35762b..8f3d16a577 100644 --- a/libraries/shared/src/ThreadHelpers.cpp +++ b/libraries/shared/src/ThreadHelpers.cpp @@ -17,10 +17,6 @@ void moveToNewNamedThread(QObject* object, const QString& name, std::functionsetObjectName(name); - if (priority != QThread::InheritPriority) { - thread->setPriority(priority); - } - QString tempName = name; QObject::connect(thread, &QThread::started, [startCallback] { startCallback(); @@ -32,6 +28,9 @@ void moveToNewNamedThread(QObject* object, const QString& name, std::functionmoveToThread(thread); thread->start(); + if (priority != QThread::InheritPriority) { + thread->setPriority(priority); + } } void moveToNewNamedThread(QObject* object, const QString& name, QThread::Priority priority) { diff --git a/tools/ac-client/src/ACClientApp.cpp b/tools/ac-client/src/ACClientApp.cpp index b81d092662..28f91e8121 100644 --- a/tools/ac-client/src/ACClientApp.cpp +++ b/tools/ac-client/src/ACClientApp.cpp @@ -90,14 +90,16 @@ ACClientApp::ACClientApp(int argc, char* argv[]) : auto nodeList = DependencyManager::get(); - // start the nodeThread so its event loop is running - nodeList->startThread(); // setup a timer for domain-server check ins QTimer* domainCheckInTimer = new QTimer(nodeList.data()); connect(domainCheckInTimer, &QTimer::timeout, nodeList.data(), &NodeList::sendDomainServerCheckIn); domainCheckInTimer->start(DOMAIN_SERVER_CHECK_IN_MSECS); + // start the nodeThread so its event loop is running + // (must happen after the checkin timer is created with the nodelist as it's parent) + nodeList->startThread(); + const DomainHandler& domainHandler = nodeList->getDomainHandler(); connect(&domainHandler, SIGNAL(hostnameChanged(const QString&)), SLOT(domainChanged(const QString&))); From 9b7a561c28abe764bed04dc0fcc5f36f3acffc87 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 5 Jul 2017 16:56:21 -0700 Subject: [PATCH 0769/1049] Update describe-settings.json --- domain-server/resources/describe-settings.json | 1 + 1 file changed, 1 insertion(+) diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index bc67a31c02..e8b5bb2878 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -75,6 +75,7 @@ { "name": "descriptors", "label": "Description", + "restart": false, "help": "This data will be queryable from your server. It may be collected by High Fidelity and used to share your domain with others.", "settings": [ { From 8c96d00f14bf1bb7677bf7b5e1e8285da3f96418 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 5 Jul 2017 16:59:47 -0700 Subject: [PATCH 0770/1049] Update DomainServerSettingsManager.cpp --- domain-server/src/DomainServerSettingsManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/domain-server/src/DomainServerSettingsManager.cpp b/domain-server/src/DomainServerSettingsManager.cpp index 9279648319..138ed7d8e8 100644 --- a/domain-server/src/DomainServerSettingsManager.cpp +++ b/domain-server/src/DomainServerSettingsManager.cpp @@ -1198,6 +1198,7 @@ bool DomainServerSettingsManager::recurseJSONObjectAndOverwriteSettings(const QJ static const QString SECURITY_ROOT_KEY = "security"; static const QString AC_SUBNET_WHITELIST_KEY = "ac_subnet_whitelist"; static const QString BROADCASTING_KEY = "broadcasting"; + static const QString DESCRIPTION_ROOT_KEY = "descriptors"; auto& settingsVariant = _configMap.getConfig(); bool needRestart = false; @@ -1265,7 +1266,7 @@ bool DomainServerSettingsManager::recurseJSONObjectAndOverwriteSettings(const QJ if (!matchingDescriptionObject.isEmpty()) { const QJsonValue& settingValue = rootValue.toObject()[settingKey]; updateSetting(settingKey, settingValue, *thisMap, matchingDescriptionObject); - if ((rootKey != SECURITY_ROOT_KEY && rootKey != BROADCASTING_KEY) + if ((rootKey != SECURITY_ROOT_KEY && rootKey != BROADCASTING_KEY && rootKey != DESCRIPTION_ROOT_KEY) || settingKey == AC_SUBNET_WHITELIST_KEY) { needRestart = true; } From 4a22fbca1bedcbe1e37cbf37cf776f2e364725f2 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Wed, 5 Jul 2017 17:01:31 -0700 Subject: [PATCH 0771/1049] redo cache switch --- interface/src/Application.cpp | 10 ++++- interface/src/main.cpp | 16 +------- libraries/networking/src/AssetClient.cpp | 39 ++++++++++--------- libraries/networking/src/AssetClient.h | 2 +- libraries/networking/src/ResourceManager.cpp | 6 +-- libraries/networking/src/ResourceManager.h | 1 - libraries/shared/src/PathUtils.cpp | 9 ++--- libraries/shared/src/PathUtils.h | 2 +- .../shared/src/shared/GlobalAppProperties.cpp | 1 + .../shared/src/shared/GlobalAppProperties.h | 1 + 10 files changed, 38 insertions(+), 49 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 377819c0a0..f9f43757d0 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -480,6 +480,12 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { static const auto SUPPRESS_SETTINGS_RESET = "--suppress-settings-reset"; bool suppressPrompt = cmdOptionExists(argc, const_cast(argv), SUPPRESS_SETTINGS_RESET); bool previousSessionCrashed = CrashHandler::checkForResetSettings(runningMarkerExisted, suppressPrompt); + // get dir to use for cache + static const auto CACHE_SWITCH = "--cache"; + QString cacheDir = getCmdOption(argc, const_cast(argv), CACHE_SWITCH); + if (!cacheDir.isEmpty()) { + qApp->setProperty(hifi::properties::APP_LOCAL_DATA_PATH, cacheDir); + } Setting::init(); @@ -1218,8 +1224,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo settingsTimer->stop(); // Delete it (this will trigger the thread destruction settingsTimer->deleteLater(); - // Mark the settings thread as finished, so we know we can safely save in the main application - // shutdown code + // Mark the settings thread as finished, so we know we can safely save in the main application + // shutdown code _settingsGuard.trigger(); }); diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 42ceb756b9..a19055d4da 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -101,7 +101,7 @@ int main(int argc, const char* argv[]) { if (allowMultipleInstances) { instanceMightBeRunning = false; } - // this needs to be done here in main, as the mechanism for setting the + // this needs to be done here in main, as the mechanism for setting the // scripts directory appears not to work. See the bug report // https://highfidelity.fogbugz.com/f/cases/5759/Issues-changing-scripts-directory-in-ScriptsEngine if (parser.isSet(overrideScriptsPathOption)) { @@ -111,20 +111,6 @@ int main(int argc, const char* argv[]) { } } - if (parser.isSet(overrideAppLocalDataPathOption)) { - // get dir to use for cache - QString cacheDir = parser.value(overrideAppLocalDataPathOption); - if (!cacheDir.isEmpty()) { - // tell everyone to use the right cache location - // - // this handles data8 and prepared - DependencyManager::get()->setCacheDir(cacheDir); - - // this does the ktx_cache - PathUtils::getAppLocalDataPath(cacheDir); - } - } - if (instanceMightBeRunning) { // Try to connect and send message to existing interface instance QLocalSocket socket; diff --git a/libraries/networking/src/AssetClient.cpp b/libraries/networking/src/AssetClient.cpp index e97660da4c..cb0b620a54 100644 --- a/libraries/networking/src/AssetClient.cpp +++ b/libraries/networking/src/AssetClient.cpp @@ -19,6 +19,8 @@ #include #include +#include + #include "AssetRequest.h" #include "AssetUpload.h" #include "AssetUtils.h" @@ -31,11 +33,12 @@ MessageID AssetClient::_currentID = 0; -AssetClient::AssetClient(const QString& cacheDir) : _cacheDir(cacheDir) { +AssetClient::AssetClient() { + _cacheDir = qApp->property(hifi::properties::APP_LOCAL_DATA_PATH).toString(); setCustomDeleter([](Dependency* dependency){ static_cast(dependency)->deleteLater(); }); - + auto nodeList = DependencyManager::get(); auto& packetReceiver = nodeList->getPacketReceiver(); @@ -105,7 +108,7 @@ void AssetClient::handleAssetMappingOperationReply(QSharedPointerreadPrimitive(&messageID); - + AssetServerError error; message->readPrimitive(&error); @@ -132,13 +135,13 @@ void AssetClient::handleAssetMappingOperationReply(QSharedPointer(); SharedNodePointer assetServer = nodeList->soloNodeOfType(NodeType::AssetServer); - + if (!assetServer) { qCWarning(asset_client) << "Could not complete AssetClient operation " << "since you are not currently connected to an asset-server."; return false; } - + return true; } @@ -220,14 +223,14 @@ MessageID AssetClient::getAsset(const QString& hash, DataOffset start, DataOffse SharedNodePointer assetServer = nodeList->soloNodeOfType(NodeType::AssetServer); if (assetServer) { - + auto messageID = ++_currentID; - + auto payloadSize = sizeof(messageID) + SHA256_HASH_LENGTH + sizeof(start) + sizeof(end); auto packet = NLPacket::create(PacketType::AssetGet, payloadSize, true); - + qCDebug(asset_client) << "Requesting data from" << start << "to" << end << "of" << hash << "from asset-server."; - + packet->writePrimitive(messageID); packet->write(QByteArray::fromHex(hash.toLatin1())); @@ -254,10 +257,10 @@ MessageID AssetClient::getAssetInfo(const QString& hash, GetInfoCallback callbac if (assetServer) { auto messageID = ++_currentID; - + auto payloadSize = sizeof(messageID) + SHA256_HASH_LENGTH; auto packet = NLPacket::create(PacketType::AssetGetInfo, payloadSize, true); - + packet->writePrimitive(messageID); packet->write(QByteArray::fromHex(hash.toLatin1())); @@ -278,7 +281,7 @@ void AssetClient::handleAssetGetInfoReply(QSharedPointer messag MessageID messageID; message->readPrimitive(&messageID); auto assetHash = message->read(SHA256_HASH_LENGTH); - + AssetServerError error; message->readPrimitive(&error); @@ -367,7 +370,7 @@ void AssetClient::handleAssetGetReply(QSharedPointer message, S callbacks.completeCallback(true, error, message->readAll()); } - + messageCallbackMap.erase(requestIt); } } @@ -478,7 +481,7 @@ MessageID AssetClient::getAllAssetMappings(MappingOperationCallback callback) { auto nodeList = DependencyManager::get(); SharedNodePointer assetServer = nodeList->soloNodeOfType(NodeType::AssetServer); - + if (assetServer) { auto packetList = NLPacketList::create(PacketType::AssetMappingOperation, QByteArray(), true, true); @@ -501,7 +504,7 @@ MessageID AssetClient::getAllAssetMappings(MappingOperationCallback callback) { MessageID AssetClient::deleteAssetMappings(const AssetPathList& paths, MappingOperationCallback callback) { auto nodeList = DependencyManager::get(); SharedNodePointer assetServer = nodeList->soloNodeOfType(NodeType::AssetServer); - + if (assetServer) { auto packetList = NLPacketList::create(PacketType::AssetMappingOperation, QByteArray(), true, true); @@ -532,7 +535,7 @@ MessageID AssetClient::setAssetMapping(const QString& path, const AssetHash& has auto nodeList = DependencyManager::get(); SharedNodePointer assetServer = nodeList->soloNodeOfType(NodeType::AssetServer); - + if (assetServer) { auto packetList = NLPacketList::create(PacketType::AssetMappingOperation, QByteArray(), true, true); @@ -644,7 +647,7 @@ MessageID AssetClient::uploadAsset(const QByteArray& data, UploadResultCallback auto nodeList = DependencyManager::get(); SharedNodePointer assetServer = nodeList->soloNodeOfType(NodeType::AssetServer); - + if (assetServer) { auto packetList = NLPacketList::create(PacketType::AssetUpload, QByteArray(), true, true); @@ -682,7 +685,7 @@ void AssetClient::handleAssetUploadReply(QSharedPointer message } else { auto hash = message->read(SHA256_HASH_LENGTH); hashString = hash.toHex(); - + qCDebug(asset_client) << "Successfully uploaded asset to asset-server - SHA256 hash is " << hashString; } diff --git a/libraries/networking/src/AssetClient.h b/libraries/networking/src/AssetClient.h index 2bc694f367..3f6602b76b 100644 --- a/libraries/networking/src/AssetClient.h +++ b/libraries/networking/src/AssetClient.h @@ -49,7 +49,7 @@ using ProgressCallback = std::function class AssetClient : public QObject, public Dependency { Q_OBJECT public: - AssetClient(const QString& cacheDir=""); + AssetClient(); Q_INVOKABLE GetMappingRequest* createGetMappingRequest(const AssetPath& path); Q_INVOKABLE GetAllMappingsRequest* createGetAllMappingsRequest(); diff --git a/libraries/networking/src/ResourceManager.cpp b/libraries/networking/src/ResourceManager.cpp index e9fe2f1ec1..3ee66f89c1 100644 --- a/libraries/networking/src/ResourceManager.cpp +++ b/libraries/networking/src/ResourceManager.cpp @@ -28,7 +28,7 @@ ResourceManager::ResourceManager() { _thread.setObjectName("Resource Manager Thread"); - auto assetClient = DependencyManager::set(_cacheDir); + auto assetClient = DependencyManager::set(); assetClient->moveToThread(&_thread); QObject::connect(&_thread, &QThread::started, assetClient.data(), &AssetClient::init); @@ -160,7 +160,3 @@ bool ResourceManager::resourceExists(const QUrl& url) { return false; } -void ResourceManager::setCacheDir(const QString& cacheDir) { - // TODO: check for existence? - _cacheDir = cacheDir; -} diff --git a/libraries/networking/src/ResourceManager.h b/libraries/networking/src/ResourceManager.h index 4e7cd3d92d..fdfd05736e 100644 --- a/libraries/networking/src/ResourceManager.h +++ b/libraries/networking/src/ResourceManager.h @@ -59,7 +59,6 @@ private: PrefixMap _prefixMap; QMutex _prefixMapLock; - QString _cacheDir; }; #endif diff --git a/libraries/shared/src/PathUtils.cpp b/libraries/shared/src/PathUtils.cpp index 1fe9e2f83d..0636411f51 100644 --- a/libraries/shared/src/PathUtils.cpp +++ b/libraries/shared/src/PathUtils.cpp @@ -19,6 +19,7 @@ #include "PathUtils.h" #include #include // std::once +#include "shared/GlobalAppProperties.h" const QString& PathUtils::resourcesPath() { #ifdef Q_OS_MAC @@ -34,12 +35,8 @@ QString PathUtils::getAppDataPath() { return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/"; } -QString PathUtils::getAppLocalDataPath(const QString& overridePath /* = "" */) { - static QString overriddenPath = ""; - // set the overridden path if one was passed in - if (!overridePath.isEmpty()) { - overriddenPath = overridePath; - } +QString PathUtils::getAppLocalDataPath() { + QString overriddenPath = qApp->property(hifi::properties::APP_LOCAL_DATA_PATH).toString(); // return overridden path if set if (!overriddenPath.isEmpty()) { return overriddenPath; diff --git a/libraries/shared/src/PathUtils.h b/libraries/shared/src/PathUtils.h index 42dd09c8b0..14eb81dd9a 100644 --- a/libraries/shared/src/PathUtils.h +++ b/libraries/shared/src/PathUtils.h @@ -28,7 +28,7 @@ public: static const QString& resourcesPath(); static QString getAppDataPath(); - static QString getAppLocalDataPath(const QString& overridePath = ""); + static QString getAppLocalDataPath(); static QString getAppDataFilePath(const QString& filename); static QString getAppLocalDataFilePath(const QString& filename); diff --git a/libraries/shared/src/shared/GlobalAppProperties.cpp b/libraries/shared/src/shared/GlobalAppProperties.cpp index b0ba0bf83d..6c9f3f9601 100644 --- a/libraries/shared/src/shared/GlobalAppProperties.cpp +++ b/libraries/shared/src/shared/GlobalAppProperties.cpp @@ -17,6 +17,7 @@ namespace hifi { namespace properties { const char* TEST = "com.highfidelity.test"; const char* TRACING = "com.highfidelity.tracing"; const char* HMD = "com.highfidelity.hmd"; + const char* APP_LOCAL_DATA_PATH = "com.highfidelity.appLocalDataPath"; namespace gl { const char* BACKEND = "com.highfidelity.gl.backend"; diff --git a/libraries/shared/src/shared/GlobalAppProperties.h b/libraries/shared/src/shared/GlobalAppProperties.h index b1811586ba..174be61939 100644 --- a/libraries/shared/src/shared/GlobalAppProperties.h +++ b/libraries/shared/src/shared/GlobalAppProperties.h @@ -19,6 +19,7 @@ namespace hifi { namespace properties { extern const char* TEST; extern const char* TRACING; extern const char* HMD; + extern const char* APP_LOCAL_DATA_PATH; namespace gl { extern const char* BACKEND; From 95abbd0ad4a8392a4dfbe62d1dce8068489effeb Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 5 Jul 2017 16:54:33 -0700 Subject: [PATCH 0772/1049] Prevent Interface from trying to send packets bigger than an MTU --- assignment-client/src/Agent.cpp | 18 +++++++++++++++ .../src/avatars/ScriptableAvatar.cpp | 2 +- .../src/avatars/ScriptableAvatar.h | 2 +- interface/src/avatar/MyAvatar.cpp | 2 +- interface/src/avatar/MyAvatar.h | 2 +- libraries/avatars/src/AvatarData.cpp | 22 +++++++++++++++++-- libraries/avatars/src/AvatarData.h | 2 +- 7 files changed, 43 insertions(+), 7 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 8aec5adb1f..908acba5ad 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -604,6 +604,24 @@ void Agent::processAgentAvatar() { AvatarData::AvatarDataDetail dataDetail = (randFloat() < AVATAR_SEND_FULL_UPDATE_RATIO) ? AvatarData::SendAllData : AvatarData::CullSmallData; QByteArray avatarByteArray = scriptedAvatar->toByteArrayStateful(dataDetail); + + auto maximumByteArraySize = NLPacket::maxPayloadSize(PacketType::AvatarData) - sizeof(AvatarDataSequenceNumber); + + if (avatarByteArray.size() > maximumByteArraySize) { + qWarning() << " scriptedAvatar->toByteArrayStateful() resulted in very large buffer:" << avatarByteArray.size() << "... attempt to drop facial data"; + avatarByteArray = scriptedAvatar->toByteArrayStateful(dataDetail, true); + + if (avatarByteArray.size() > maximumByteArraySize) { + qWarning() << " scriptedAvatar->toByteArrayStateful() without facial data resulted in very large buffer:" << avatarByteArray.size() << "... reduce to MinimumData"; + avatarByteArray = scriptedAvatar->toByteArrayStateful(AvatarData::MinimumData, true); + } + + if (avatarByteArray.size() > maximumByteArraySize) { + qWarning() << " scriptedAvatar->toByteArrayStateful() MinimumData resulted in very large buffer:" << avatarByteArray.size() << "... FAIL!!"; + return; + } + } + scriptedAvatar->doneEncoding(true); static AvatarDataSequenceNumber sequenceNumber = 0; diff --git a/assignment-client/src/avatars/ScriptableAvatar.cpp b/assignment-client/src/avatars/ScriptableAvatar.cpp index 6443e7bf4b..c7715d4014 100644 --- a/assignment-client/src/avatars/ScriptableAvatar.cpp +++ b/assignment-client/src/avatars/ScriptableAvatar.cpp @@ -19,7 +19,7 @@ #include "ScriptableAvatar.h" -QByteArray ScriptableAvatar::toByteArrayStateful(AvatarDataDetail dataDetail) { +QByteArray ScriptableAvatar::toByteArrayStateful(AvatarDataDetail dataDetail, bool dropFaceTracking) { _globalPosition = getPosition(); return AvatarData::toByteArrayStateful(dataDetail); } diff --git a/assignment-client/src/avatars/ScriptableAvatar.h b/assignment-client/src/avatars/ScriptableAvatar.h index 1028912e55..b1039b5ac0 100644 --- a/assignment-client/src/avatars/ScriptableAvatar.h +++ b/assignment-client/src/avatars/ScriptableAvatar.h @@ -28,7 +28,7 @@ public: Q_INVOKABLE AnimationDetails getAnimationDetails(); virtual void setSkeletonModelURL(const QUrl& skeletonModelURL) override; - virtual QByteArray toByteArrayStateful(AvatarDataDetail dataDetail) override; + virtual QByteArray toByteArrayStateful(AvatarDataDetail dataDetail, bool dropFaceTracking = false) override; private slots: diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 8cd39b298f..6478fe38a6 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -295,7 +295,7 @@ void MyAvatar::simulateAttachments(float deltaTime) { // don't update attachments here, do it in harvestResultsFromPhysicsSimulation() } -QByteArray MyAvatar::toByteArrayStateful(AvatarDataDetail dataDetail) { +QByteArray MyAvatar::toByteArrayStateful(AvatarDataDetail dataDetail, bool dropFaceTracking) { CameraMode mode = qApp->getCamera().getMode(); _globalPosition = getPosition(); // This might not be right! Isn't the capsule local offset in avatar space, and don't we need to add the radius to the y as well? -HRS 5/26/17 diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 8ad4bf4436..ba102eb27c 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -611,7 +611,7 @@ private: bool requiresSafeLanding(const glm::vec3& positionIn, glm::vec3& positionOut); - virtual QByteArray toByteArrayStateful(AvatarDataDetail dataDetail) override; + virtual QByteArray toByteArrayStateful(AvatarDataDetail dataDetail, bool dropFaceTracking) override; void simulate(float deltaTime); void updateFromTrackers(float deltaTime); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 6a0b668bfa..1e12158de1 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -190,12 +190,12 @@ float AvatarData::getDistanceBasedMinTranslationDistance(glm::vec3 viewerPositio // we want to track outbound data in this case... -QByteArray AvatarData::toByteArrayStateful(AvatarDataDetail dataDetail) { +QByteArray AvatarData::toByteArrayStateful(AvatarDataDetail dataDetail, bool dropFaceTracking) { AvatarDataPacket::HasFlags hasFlagsOut; auto lastSentTime = _lastToByteArray; _lastToByteArray = usecTimestampNow(); return AvatarData::toByteArray(dataDetail, lastSentTime, getLastSentJointData(), - hasFlagsOut, false, false, glm::vec3(0), nullptr, + hasFlagsOut, dropFaceTracking, false, glm::vec3(0), nullptr, &_outboundDataRate); } @@ -1775,6 +1775,24 @@ void AvatarData::sendAvatarDataPacket() { bool cullSmallData = (randFloat() < AVATAR_SEND_FULL_UPDATE_RATIO); auto dataDetail = cullSmallData ? SendAllData : CullSmallData; QByteArray avatarByteArray = toByteArrayStateful(dataDetail); + + auto maximumByteArraySize = NLPacket::maxPayloadSize(PacketType::AvatarData) - sizeof(AvatarDataSequenceNumber); + + if (avatarByteArray.size() > maximumByteArraySize) { + qCWarning(avatars) << "toByteArrayStateful() resulted in very large buffer:" << avatarByteArray.size() << "... attempt to drop facial data"; + avatarByteArray = toByteArrayStateful(dataDetail, true); + + if (avatarByteArray.size() > maximumByteArraySize) { + qCWarning(avatars) << "toByteArrayStateful() without facial data resulted in very large buffer:" << avatarByteArray.size() << "... reduce to MinimumData"; + avatarByteArray = toByteArrayStateful(MinimumData, true); + } + + if (avatarByteArray.size() > maximumByteArraySize) { + qCWarning(avatars) << "toByteArrayStateful() MinimumData resulted in very large buffer:" << avatarByteArray.size() << "... FAIL!!"; + return; + } + } + doneEncoding(cullSmallData); static AvatarDataSequenceNumber sequenceNumber = 0; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 0ddf4e7d0a..4a1c951397 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -404,7 +404,7 @@ public: SendAllData } AvatarDataDetail; - virtual QByteArray toByteArrayStateful(AvatarDataDetail dataDetail); + virtual QByteArray toByteArrayStateful(AvatarDataDetail dataDetail, bool dropFaceTracking = false); virtual QByteArray toByteArray(AvatarDataDetail dataDetail, quint64 lastSentTime, const QVector& lastSentJointData, AvatarDataPacket::HasFlags& hasFlagsOut, bool dropFaceTracking, bool distanceAdjust, glm::vec3 viewerPosition, From f7131027e020c89ce38a492119022216c060d4ff Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 5 Jul 2017 17:26:15 -0700 Subject: [PATCH 0773/1049] if user has provided login credentials, wait for the keypair to be ready before proceeding --- tools/atp-client/src/ATPClientApp.cpp | 119 ++++++++++++++++---------- tools/atp-client/src/ATPClientApp.h | 8 +- 2 files changed, 79 insertions(+), 48 deletions(-) diff --git a/tools/atp-client/src/ATPClientApp.cpp b/tools/atp-client/src/ATPClientApp.cpp index 5029bcd5b3..a0856dbff1 100644 --- a/tools/atp-client/src/ATPClientApp.cpp +++ b/tools/atp-client/src/ATPClientApp.cpp @@ -27,6 +27,7 @@ #include "ATPClientApp.h" #define HIGH_FIDELITY_ATP_CLIENT_USER_AGENT "Mozilla/5.0 (HighFidelityATPClient)" +#define TIMEOUT_MILLISECONDS 8000 ATPClientApp::ATPClientApp(int argc, char* argv[]) : QCoreApplication(argc, argv) @@ -116,30 +117,21 @@ ATPClientApp::ATPClientApp(int argc, char* argv[]) : _username = pieces[0]; _password = pieces[1]; + _waitingForLogin = true; } if (parser.isSet(listenPortOption)) { _listenPort = parser.value(listenPortOption).toInt(); } - QString domainServerAddress = QString("127.0.0.1") + ":" + QString::number(domainPort); + _domainServerAddress = QString("127.0.0.1") + ":" + QString::number(domainPort); if (parser.isSet(domainAddressOption)) { - domainServerAddress = parser.value(domainAddressOption); - connectToDomain(domainServerAddress); + _domainServerAddress = parser.value(domainAddressOption); } else if (!_url.host().isEmpty()) { QUrl domainURL; domainURL.setScheme("hifi"); domainURL.setHost(_url.host()); - connectToDomain(domainURL.toString()); - } else { - connectToDomain(domainServerAddress); - } -} - -void ATPClientApp::connectToDomain(QString domainServerAddress) { - - if (_verbose) { - qDebug() << "domain-server address is" << domainServerAddress; + _domainServerAddress = domainURL.toString(); } Setting::init(); @@ -149,70 +141,90 @@ void ATPClientApp::connectToDomain(QString domainServerAddress) { DependencyManager::set(); DependencyManager::set(NodeType::Agent, _listenPort); + auto accountManager = DependencyManager::get(); + accountManager->setIsAgent(true); + accountManager->setAuthURL(NetworkingConstants::METAVERSE_SERVER_URL); + auto nodeList = DependencyManager::get(); - nodeList->startThread(); // setup a timer for domain-server check ins _domainCheckInTimer = new QTimer(nodeList.data()); connect(_domainCheckInTimer, &QTimer::timeout, nodeList.data(), &NodeList::sendDomainServerCheckIn); _domainCheckInTimer->start(DOMAIN_SERVER_CHECK_IN_MSECS); - const DomainHandler& domainHandler = nodeList->getDomainHandler(); + // start the nodeThread so its event loop is running + // (must happen after the checkin timer is created with the nodelist as it's parent) + nodeList->startThread(); + const DomainHandler& domainHandler = nodeList->getDomainHandler(); connect(&domainHandler, SIGNAL(hostnameChanged(const QString&)), SLOT(domainChanged(const QString&))); - // connect(&domainHandler, SIGNAL(resetting()), SLOT(resettingDomain())); - // connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(clearDomainOctreeDetails())); connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &ATPClientApp::domainConnectionRefused); connect(nodeList.data(), &NodeList::nodeAdded, this, &ATPClientApp::nodeAdded); connect(nodeList.data(), &NodeList::nodeKilled, this, &ATPClientApp::nodeKilled); connect(nodeList.data(), &NodeList::nodeActivated, this, &ATPClientApp::nodeActivated); - // connect(nodeList.data(), &NodeList::uuidChanged, getMyAvatar(), &MyAvatar::setSessionUUID); - // connect(nodeList.data(), &NodeList::uuidChanged, this, &ATPClientApp::setSessionUUID); connect(nodeList.data(), &NodeList::packetVersionMismatch, this, &ATPClientApp::notifyPacketVersionMismatch); - nodeList->addSetOfNodeTypesToNodeInterestSet(NodeSet() << NodeType::AudioMixer << NodeType::AvatarMixer << NodeType::EntityServer << NodeType::AssetServer << NodeType::MessagesMixer); - DependencyManager::get()->handleLookupString(domainServerAddress, false); - - auto assetClient = DependencyManager::set(); - assetClient->init(); - - auto accountManager = DependencyManager::get(); - accountManager->setIsAgent(true); - accountManager->setAuthURL(NetworkingConstants::METAVERSE_SERVER_URL); - if (_verbose) { QString username = accountManager->getAccountInfo().getUsername(); qDebug() << "cached username is" << username << ", isLoggedIn =" << accountManager->isLoggedIn(); } if (!_username.isEmpty()) { + + connect(accountManager.data(), &AccountManager::newKeypair, this, [&](){ + if (_verbose) { + qDebug() << "new keypair has been created."; + } + }); + connect(accountManager.data(), &AccountManager::loginComplete, this, [&](){ if (_verbose) { qDebug() << "login successful"; } + _waitingForLogin = false; + go(); }); connect(accountManager.data(), &AccountManager::loginFailed, this, [&](){ qDebug() << "login failed."; + _waitingForLogin = false; + go(); }); accountManager->requestAccessToken(_username, _password); } + auto assetClient = DependencyManager::set(); + assetClient->init(); + + if (_verbose) { + qDebug() << "domain-server address is" << _domainServerAddress; + } + + + DependencyManager::get()->handleLookupString(_domainServerAddress, false); + QTimer* _timeoutTimer = new QTimer(this); _timeoutTimer->setSingleShot(true); connect(_timeoutTimer, &QTimer::timeout, this, &ATPClientApp::timedOut); - _timeoutTimer->start(4000); + _timeoutTimer->start(TIMEOUT_MILLISECONDS); } ATPClientApp::~ATPClientApp() { - delete _domainCheckInTimer; - delete _timeoutTimer; + if (_domainCheckInTimer) { + QMetaObject::invokeMethod(_domainCheckInTimer, "deleteLater", Qt::QueuedConnection); + } + if (_timeoutTimer) { + QMetaObject::invokeMethod(_timeoutTimer, "deleteLater", Qt::QueuedConnection); + } } void ATPClientApp::domainConnectionRefused(const QString& reasonMessage, int reasonCodeInt, const QString& extraInfo) { - qDebug() << "domainConnectionRefused"; + // this is non-fatal if we are trying to get an authenticated connection -- it will be retried. + if (_verbose) { + qDebug() << "domainConnectionRefused"; + } } void ATPClientApp::domainChanged(const QString& domainHostname) { @@ -228,25 +240,36 @@ void ATPClientApp::nodeAdded(SharedNodePointer node) { } void ATPClientApp::nodeActivated(SharedNodePointer node) { - if (node->getType() == NodeType::AssetServer) { - auto path = _url.path(); + if (!_waitingForLogin && node->getType() == NodeType::AssetServer) { + _waitingForNode = false; + go(); + } +} - if (_verbose) { - qDebug() << "path is " << path; - } +void ATPClientApp::go() { + if (_waitingForLogin || _waitingForNode) { + return; + } - if (!_localUploadFile.isEmpty()) { - uploadAsset(); - } else if (path == "/") { - listAssets(); - } else { - lookupAsset(); - } + auto path = _url.path(); + + if (_verbose) { + qDebug() << "path is " << path; + } + + if (!_localUploadFile.isEmpty()) { + uploadAsset(); + } else if (path == "/") { + listAssets(); + } else { + lookupAsset(); } } void ATPClientApp::nodeKilled(SharedNodePointer node) { - qDebug() << "nodeKilled"; + if (_verbose) { + qDebug() << "nodeKilled" << node->getType(); + } } void ATPClientApp::timedOut() { @@ -289,8 +312,11 @@ void ATPClientApp::setMapping(QString hash) { connect(request, &SetMappingRequest::finished, this, [=](SetMappingRequest* request) mutable { if (request->getError() != SetMappingRequest::NoError) { qDebug() << "upload succeeded, but couldn't set mapping: " << request->getErrorString(); + } else if (_verbose) { + qDebug() << "mapping set."; } request->deleteLater(); + finish(0); }); request->start(); @@ -311,6 +337,7 @@ void ATPClientApp::listAssets() { qDebug() << "error -- " << request->getError() << " -- " << request->getErrorString(); } request->deleteLater(); + finish(0); }); request->start(); } diff --git a/tools/atp-client/src/ATPClientApp.h b/tools/atp-client/src/ATPClientApp.h index c2401e54af..a3904d6e50 100644 --- a/tools/atp-client/src/ATPClientApp.h +++ b/tools/atp-client/src/ATPClientApp.h @@ -38,8 +38,7 @@ private slots: void notifyPacketVersionMismatch(); private: - void connectToDomain(QString domainServerAddress); - + void go(); NodeList* _nodeList; void timedOut(); void uploadAsset(); @@ -56,9 +55,14 @@ private: int _listenPort { INVALID_PORT }; + QString _domainServerAddress; + QString _username; QString _password; + bool _waitingForLogin { false }; + bool _waitingForNode { true }; + QTimer* _domainCheckInTimer { nullptr }; QTimer* _timeoutTimer { nullptr }; }; From 98ac2ccb908f04795736b23ddc5eb606544178e9 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 5 Jul 2017 17:36:25 -0700 Subject: [PATCH 0774/1049] rearrange code so authed connection works better --- tools/ac-client/src/ACClientApp.cpp | 25 ++++++++++++------------- tools/atp-client/src/ATPClientApp.cpp | 1 - 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/tools/ac-client/src/ACClientApp.cpp b/tools/ac-client/src/ACClientApp.cpp index c44d4aa24c..2b92bb744b 100644 --- a/tools/ac-client/src/ACClientApp.cpp +++ b/tools/ac-client/src/ACClientApp.cpp @@ -104,6 +104,9 @@ ACClientApp::ACClientApp(int argc, char* argv[]) : DependencyManager::set(); DependencyManager::set(NodeType::Agent, listenPort); + auto accountManager = DependencyManager::get(); + accountManager->setIsAgent(true); + accountManager->setAuthURL(NetworkingConstants::METAVERSE_SERVER_URL); auto nodeList = DependencyManager::get(); @@ -112,39 +115,34 @@ ACClientApp::ACClientApp(int argc, char* argv[]) : connect(domainCheckInTimer, &QTimer::timeout, nodeList.data(), &NodeList::sendDomainServerCheckIn); domainCheckInTimer->start(DOMAIN_SERVER_CHECK_IN_MSECS); - // start the nodeThread so its event loop is running + // start the nodeThread so its event loop is running // (must happen after the checkin timer is created with the nodelist as it's parent) nodeList->startThread(); const DomainHandler& domainHandler = nodeList->getDomainHandler(); - connect(&domainHandler, SIGNAL(hostnameChanged(const QString&)), SLOT(domainChanged(const QString&))); - // connect(&domainHandler, SIGNAL(resetting()), SLOT(resettingDomain())); - // connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(clearDomainOctreeDetails())); connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &ACClientApp::domainConnectionRefused); connect(nodeList.data(), &NodeList::nodeAdded, this, &ACClientApp::nodeAdded); connect(nodeList.data(), &NodeList::nodeKilled, this, &ACClientApp::nodeKilled); connect(nodeList.data(), &NodeList::nodeActivated, this, &ACClientApp::nodeActivated); - // connect(nodeList.data(), &NodeList::uuidChanged, getMyAvatar(), &MyAvatar::setSessionUUID); - // connect(nodeList.data(), &NodeList::uuidChanged, this, &ACClientApp::setSessionUUID); connect(nodeList.data(), &NodeList::packetVersionMismatch, this, &ACClientApp::notifyPacketVersionMismatch); - nodeList->addSetOfNodeTypesToNodeInterestSet(NodeSet() << NodeType::AudioMixer << NodeType::AvatarMixer << NodeType::EntityServer << NodeType::AssetServer << NodeType::MessagesMixer); - DependencyManager::get()->handleLookupString(domainServerAddress, false); - - auto accountManager = DependencyManager::get(); - accountManager->setIsAgent(true); - accountManager->setAuthURL(NetworkingConstants::METAVERSE_SERVER_URL); - if (_verbose) { QString username = accountManager->getAccountInfo().getUsername(); qDebug() << "cached username is" << username << ", isLoggedIn =" << accountManager->isLoggedIn(); } if (!_username.isEmpty()) { + + connect(accountManager.data(), &AccountManager::newKeypair, this, [&](){ + if (_verbose) { + qDebug() << "new keypair has been created."; + } + }); + connect(accountManager.data(), &AccountManager::loginComplete, this, [&](){ if (_verbose) { qDebug() << "login successful"; @@ -156,6 +154,7 @@ ACClientApp::ACClientApp(int argc, char* argv[]) : accountManager->requestAccessToken(_username, _password); } + DependencyManager::get()->handleLookupString(domainServerAddress, false); QTimer* doTimer = new QTimer(this); doTimer->setSingleShot(true); diff --git a/tools/atp-client/src/ATPClientApp.cpp b/tools/atp-client/src/ATPClientApp.cpp index a0856dbff1..3e2f8ca71d 100644 --- a/tools/atp-client/src/ATPClientApp.cpp +++ b/tools/atp-client/src/ATPClientApp.cpp @@ -202,7 +202,6 @@ ATPClientApp::ATPClientApp(int argc, char* argv[]) : qDebug() << "domain-server address is" << _domainServerAddress; } - DependencyManager::get()->handleLookupString(_domainServerAddress, false); QTimer* _timeoutTimer = new QTimer(this); From 20a633eb899475a4d272c419786ebcdbe8f4cb5b Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 5 Jul 2017 16:15:53 -0700 Subject: [PATCH 0775/1049] Check struct sizes at compile time --- libraries/avatars/src/AvatarData.cpp | 13 ------------- libraries/avatars/src/AvatarData.h | 12 ++++++++++++ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 1e12158de1..3b2ec9fb86 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -94,19 +94,6 @@ AvatarData::AvatarData() : setBodyPitch(0.0f); setBodyYaw(-90.0f); setBodyRoll(0.0f); - - ASSERT(sizeof(AvatarDataPacket::Header) == AvatarDataPacket::HEADER_SIZE); - ASSERT(sizeof(AvatarDataPacket::AvatarGlobalPosition) == AvatarDataPacket::AVATAR_GLOBAL_POSITION_SIZE); - ASSERT(sizeof(AvatarDataPacket::AvatarLocalPosition) == AvatarDataPacket::AVATAR_LOCAL_POSITION_SIZE); - ASSERT(sizeof(AvatarDataPacket::AvatarBoundingBox) == AvatarDataPacket::AVATAR_BOUNDING_BOX_SIZE); - ASSERT(sizeof(AvatarDataPacket::AvatarOrientation) == AvatarDataPacket::AVATAR_ORIENTATION_SIZE); - ASSERT(sizeof(AvatarDataPacket::AvatarScale) == AvatarDataPacket::AVATAR_SCALE_SIZE); - ASSERT(sizeof(AvatarDataPacket::LookAtPosition) == AvatarDataPacket::LOOK_AT_POSITION_SIZE); - ASSERT(sizeof(AvatarDataPacket::AudioLoudness) == AvatarDataPacket::AUDIO_LOUDNESS_SIZE); - ASSERT(sizeof(AvatarDataPacket::SensorToWorldMatrix) == AvatarDataPacket::SENSOR_TO_WORLD_SIZE); - ASSERT(sizeof(AvatarDataPacket::AdditionalFlags) == AvatarDataPacket::ADDITIONAL_FLAGS_SIZE); - ASSERT(sizeof(AvatarDataPacket::ParentInfo) == AvatarDataPacket::PARENT_INFO_SIZE); - ASSERT(sizeof(AvatarDataPacket::FaceTrackerInfo) == AvatarDataPacket::FACE_TRACKER_INFO_SIZE); } AvatarData::~AvatarData() { diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 4a1c951397..cb5aead050 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -149,27 +149,32 @@ namespace AvatarDataPacket { HasFlags packetHasFlags; // state flags, indicated which additional records are included in the packet } PACKED_END; const size_t HEADER_SIZE = 2; + static_assert(sizeof(Header) == HEADER_SIZE, "AvatarDataPacket::Header size doesn't match."); PACKED_BEGIN struct AvatarGlobalPosition { float globalPosition[3]; // avatar's position } PACKED_END; const size_t AVATAR_GLOBAL_POSITION_SIZE = 12; + static_assert(sizeof(AvatarGlobalPosition) == AVATAR_GLOBAL_POSITION_SIZE, "AvatarDataPacket::AvatarGlobalPosition size doesn't match."); PACKED_BEGIN struct AvatarBoundingBox { float avatarDimensions[3]; // avatar's bounding box in world space units, but relative to the position. float boundOriginOffset[3]; // offset from the position of the avatar to the origin of the bounding box } PACKED_END; const size_t AVATAR_BOUNDING_BOX_SIZE = 24; + static_assert(sizeof(AvatarBoundingBox) == AVATAR_BOUNDING_BOX_SIZE, "AvatarDataPacket::AvatarBoundingBox size doesn't match."); PACKED_BEGIN struct AvatarOrientation { SixByteQuat avatarOrientation; // encodeded and compressed by packOrientationQuatToSixBytes() } PACKED_END; const size_t AVATAR_ORIENTATION_SIZE = 6; + static_assert(sizeof(AvatarOrientation) == AVATAR_ORIENTATION_SIZE, "AvatarDataPacket::AvatarOrientation size doesn't match."); PACKED_BEGIN struct AvatarScale { SmallFloat scale; // avatar's scale, compressed by packFloatRatioToTwoByte() } PACKED_END; const size_t AVATAR_SCALE_SIZE = 2; + static_assert(sizeof(AvatarScale) == AVATAR_SCALE_SIZE, "AvatarDataPacket::AvatarScale size doesn't match."); PACKED_BEGIN struct LookAtPosition { float lookAtPosition[3]; // world space position that eyes are focusing on. @@ -181,11 +186,13 @@ namespace AvatarDataPacket { // POTENTIAL SAVINGS - 12 bytes } PACKED_END; const size_t LOOK_AT_POSITION_SIZE = 12; + static_assert(sizeof(LookAtPosition) == LOOK_AT_POSITION_SIZE, "AvatarDataPacket::LookAtPosition size doesn't match."); PACKED_BEGIN struct AudioLoudness { uint8_t audioLoudness; // current loudness of microphone compressed with packFloatGainToByte() } PACKED_END; const size_t AUDIO_LOUDNESS_SIZE = 1; + static_assert(sizeof(AudioLoudness) == AUDIO_LOUDNESS_SIZE, "AvatarDataPacket::AudioLoudness size doesn't match."); PACKED_BEGIN struct SensorToWorldMatrix { // FIXME - these 20 bytes are only used by viewers if my avatar has "attachments" @@ -200,11 +207,13 @@ namespace AvatarDataPacket { // relative to the avatar position. } PACKED_END; const size_t SENSOR_TO_WORLD_SIZE = 20; + static_assert(sizeof(SensorToWorldMatrix) == SENSOR_TO_WORLD_SIZE, "AvatarDataPacket::SensorToWorldMatrix size doesn't match."); PACKED_BEGIN struct AdditionalFlags { uint8_t flags; // additional flags: hand state, key state, eye tracking } PACKED_END; const size_t ADDITIONAL_FLAGS_SIZE = 1; + static_assert(sizeof(AdditionalFlags) == ADDITIONAL_FLAGS_SIZE, "AvatarDataPacket::AdditionalFlags size doesn't match."); // only present if HAS_REFERENTIAL flag is set in AvatarInfo.flags PACKED_BEGIN struct ParentInfo { @@ -212,6 +221,7 @@ namespace AvatarDataPacket { uint16_t parentJointIndex; } PACKED_END; const size_t PARENT_INFO_SIZE = 18; + static_assert(sizeof(ParentInfo) == PARENT_INFO_SIZE, "AvatarDataPacket::ParentInfo size doesn't match."); // will only ever be included if the avatar has a parent but can change independent of changes to parent info // and so we keep it a separate record @@ -219,6 +229,7 @@ namespace AvatarDataPacket { float localPosition[3]; // parent frame translation of the avatar } PACKED_END; const size_t AVATAR_LOCAL_POSITION_SIZE = 12; + static_assert(sizeof(AvatarLocalPosition) == AVATAR_LOCAL_POSITION_SIZE, "AvatarDataPacket::AvatarLocalPosition size doesn't match."); const size_t MAX_CONSTANT_HEADER_SIZE = HEADER_SIZE + AVATAR_GLOBAL_POSITION_SIZE + @@ -245,6 +256,7 @@ namespace AvatarDataPacket { // float blendshapeCoefficients[numBlendshapeCoefficients]; } PACKED_END; const size_t FACE_TRACKER_INFO_SIZE = 17; + static_assert(sizeof(FaceTrackerInfo) == FACE_TRACKER_INFO_SIZE, "AvatarDataPacket::FaceTrackerInfo size doesn't match."); size_t maxFaceTrackerInfoSize(size_t numBlendshapeCoefficients); /* From 9a1d38384d4693fc34ae4b3bd4875a47ea6266fb Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 5 Jul 2017 17:22:16 -0700 Subject: [PATCH 0776/1049] Remove unecessary loops --- libraries/avatars/src/AvatarData.cpp | 46 +++++++++------------------- 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 3b2ec9fb86..4236565e04 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -491,12 +491,15 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent unsigned char* validityPosition = destinationBuffer; unsigned char validity = 0; int validityBit = 0; + int numValidityBytes = (int)std::ceil(numJoints / (float)BITS_IN_BYTE); #ifdef WANT_DEBUG int rotationSentCount = 0; unsigned char* beforeRotations = destinationBuffer; #endif + destinationBuffer += numValidityBytes; // Move pointer past the validity bytes + if (sentJointDataOut) { sentJointDataOut->resize(_jointData.size()); // Make sure the destination is resized before using it } @@ -516,6 +519,8 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent #ifdef WANT_DEBUG rotationSentCount++; #endif + destinationBuffer += packOrientationQuatToSixBytes(destinationBuffer, data.rotation); + if (sentJointDataOut) { auto jointDataOut = *sentJointDataOut; jointDataOut[i].rotation = data.rotation; @@ -525,28 +530,14 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent } } if (++validityBit == BITS_IN_BYTE) { - *destinationBuffer++ = validity; + *validityPosition++ = validity; validityBit = validity = 0; } } if (validityBit != 0) { - *destinationBuffer++ = validity; + *validityPosition++ = validity; } - validityBit = 0; - validity = *validityPosition++; - for (int i = 0; i < _jointData.size(); i++) { - const JointData& data = _jointData[i]; - if (validity & (1 << validityBit)) { - destinationBuffer += packOrientationQuatToSixBytes(destinationBuffer, data.rotation); - } - if (++validityBit == BITS_IN_BYTE) { - validityBit = 0; - validity = *validityPosition++; - } - } - - // joint translation data validityPosition = destinationBuffer; validity = 0; @@ -557,6 +548,8 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent unsigned char* beforeTranslations = destinationBuffer; #endif + destinationBuffer += numValidityBytes; // Move pointer past the validity bytes + float minTranslation = !distanceAdjust ? AVATAR_MIN_TRANSLATION : getDistanceBasedMinTranslationDistance(viewerPosition); float maxTranslationDimension = 0.0; @@ -575,6 +568,9 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent maxTranslationDimension = glm::max(fabsf(data.translation.y), maxTranslationDimension); maxTranslationDimension = glm::max(fabsf(data.translation.z), maxTranslationDimension); + destinationBuffer += + packFloatVec3ToSignedTwoByteFixed(destinationBuffer, data.translation, TRANSLATION_COMPRESSION_RADIX); + if (sentJointDataOut) { auto jointDataOut = *sentJointDataOut; jointDataOut[i].translation = data.translation; @@ -584,27 +580,13 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent } } if (++validityBit == BITS_IN_BYTE) { - *destinationBuffer++ = validity; + *validityPosition++ = validity; validityBit = validity = 0; } } if (validityBit != 0) { - *destinationBuffer++ = validity; - } - - validityBit = 0; - validity = *validityPosition++; - for (int i = 0; i < _jointData.size(); i++) { - const JointData& data = _jointData[i]; - if (validity & (1 << validityBit)) { - destinationBuffer += - packFloatVec3ToSignedTwoByteFixed(destinationBuffer, data.translation, TRANSLATION_COMPRESSION_RADIX); - } - if (++validityBit == BITS_IN_BYTE) { - validityBit = 0; - validity = *validityPosition++; - } + *validityPosition++ = validity; } // faux joints From 9d2fe8da9c1a6ef4fdf7516a54b7f3b63f8ef469 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 5 Jul 2017 18:02:44 -0700 Subject: [PATCH 0777/1049] Update DomainServer.cpp --- domain-server/src/DomainServer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 095613a473..94a77af4ab 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -162,8 +162,10 @@ DomainServer::DomainServer(int argc, char* argv[]) : _gatekeeper.preloadAllowedUserPublicKeys(); // so they can connect on first request + //send signal to DomainMetadata when descriptors changed _metadata = new DomainMetadata(this); - + connect(&_settingsManager, &DomainServerSettingsManager::settingsUpdated, + _metadata, &DomainMetadata::descriptorsChanged); qDebug() << "domain-server is running"; static const QString AC_SUBNET_WHITELIST_SETTING_PATH = "security.ac_subnet_whitelist"; From 936c21e8497b055feef74de6cbcd8620eda1c91c Mon Sep 17 00:00:00 2001 From: David Kelly Date: Thu, 6 Jul 2017 07:24:58 -0700 Subject: [PATCH 0778/1049] remove unnecessary cacheDir member --- interface/src/Application.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/interface/src/Application.h b/interface/src/Application.h index 28d95a280c..cf0ae91a0f 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -299,7 +299,6 @@ public: void setAvatarOverrideUrl(const QUrl& url, bool save); QUrl getAvatarOverrideUrl() { return _avatarOverrideUrl; } bool getSaveAvatarOverrideUrl() { return _saveAvatarOverrideUrl; } - void setCacheOverrideDir(const QString& dirName) { _cacheDir = dirName; } signals: void svoImportRequested(const QString& url); @@ -691,6 +690,5 @@ private: QUrl _avatarOverrideUrl; bool _saveAvatarOverrideUrl { false }; - QString _cacheDir; }; #endif // hifi_Application_h From 53ffca796f2b4d0408b60eca1e2ddb43f05bf360 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Thu, 6 Jul 2017 16:35:40 +0200 Subject: [PATCH 0779/1049] Drafting a better SHape plumber to render the items --- interface/src/Application.cpp | 2 +- libraries/render-utils/src/GeometryCache.cpp | 9 +++++--- libraries/render/src/render/DrawTask.cpp | 2 ++ libraries/render/src/render/ShapePipeline.cpp | 23 ++++++++++++------- libraries/render/src/render/ShapePipeline.h | 20 ++++++++++++---- 5 files changed, 39 insertions(+), 17 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 377819c0a0..3de3e19347 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -345,7 +345,7 @@ public: // Don't actually crash in debug builds, in case this apparent deadlock is simply from // the developer actively debugging code #ifdef NDEBUG - deadlockDetectionCrash(); + // deadlockDetectionCrash(); #endif } } diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index dcf90012c1..8c7637faf9 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -459,7 +459,8 @@ _nextID(0) { // Set the defaults needed for a simple program batch.setResourceTexture(render::ShapePipeline::Slot::MAP::ALBEDO, DependencyManager::get()->getWhiteTexture()); - } + }, + nullptr ); GeometryCache::_simpleTransparentPipeline = std::make_shared(getSimplePipeline(false, true, true, false), nullptr, @@ -467,11 +468,13 @@ _nextID(0) { // Set the defaults needed for a simple program batch.setResourceTexture(render::ShapePipeline::Slot::MAP::ALBEDO, DependencyManager::get()->getWhiteTexture()); - } + }, + nullptr ); GeometryCache::_simpleWirePipeline = std::make_shared(getSimplePipeline(false, false, true, true), nullptr, - [](const render::ShapePipeline&, gpu::Batch& batch) {}); + [](const render::ShapePipeline&, gpu::Batch& batch) {}, + nullptr); } GeometryCache::~GeometryCache() { diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index b6f3440d5c..13d454e393 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -45,6 +45,7 @@ void renderShape(RenderArgs* args, const ShapePlumberPointer& shapeContext, cons if (key.isValid() && !key.hasOwnPipeline()) { args->_pipeline = shapeContext->pickPipeline(args, key); if (args->_pipeline) { + args->_pipeline->prepareShapeItem(args, key, item); item.render(args); } args->_pipeline = nullptr; @@ -114,6 +115,7 @@ void render::renderStateSortShapes(const RenderContextPointer& renderContext, continue; } for (auto& item : bucket) { + args->_pipeline->prepareShapeItem(args, pipelineKey, item); item.render(args); } } diff --git a/libraries/render/src/render/ShapePipeline.cpp b/libraries/render/src/render/ShapePipeline.cpp index d51d7f8cb6..e07af139b5 100644 --- a/libraries/render/src/render/ShapePipeline.cpp +++ b/libraries/render/src/render/ShapePipeline.cpp @@ -18,11 +18,18 @@ using namespace render; void ShapePipeline::prepare(gpu::Batch& batch) { - if (batchSetter) { - batchSetter(*this, batch); + if (_batchSetter) { + _batchSetter(*this, batch); } } +void ShapePipeline::prepareShapeItem(RenderArgs* args, const ShapeKey& key, const Item& shape) { + if (_itemSetter) { + _itemSetter(*this, args, shape); + } +} + + ShapeKey::Filter::Builder::Builder() { _mask.set(OWN_PIPELINE); _mask.set(INVALID); @@ -48,12 +55,12 @@ void ShapePlumber::addPipelineHelper(const Filter& filter, ShapeKey key, int bit } void ShapePlumber::addPipeline(const Key& key, const gpu::ShaderPointer& program, const gpu::StatePointer& state, - BatchSetter batchSetter) { - addPipeline(Filter{key}, program, state, batchSetter); + BatchSetter batchSetter, ItemSetter itemSetter) { + addPipeline(Filter{key}, program, state, batchSetter, itemSetter); } void ShapePlumber::addPipeline(const Filter& filter, const gpu::ShaderPointer& program, const gpu::StatePointer& state, - BatchSetter batchSetter) { + BatchSetter batchSetter, ItemSetter itemSetter) { gpu::Shader::BindingSet slotBindings; slotBindings.insert(gpu::Shader::Binding(std::string("lightingModelBuffer"), Slot::BUFFER::LIGHTING_MODEL)); slotBindings.insert(gpu::Shader::Binding(std::string("skinClusterBuffer"), Slot::BUFFER::SKINNING)); @@ -90,7 +97,7 @@ void ShapePlumber::addPipeline(const Filter& filter, const gpu::ShaderPointer& p ShapeKey key{filter._flags}; auto gpuPipeline = gpu::Pipeline::create(program, state); - auto shapePipeline = std::make_shared(gpuPipeline, locations, batchSetter); + auto shapePipeline = std::make_shared(gpuPipeline, locations, batchSetter, itemSetter); addPipelineHelper(filter, key, 0, shapePipeline); } @@ -118,8 +125,8 @@ const ShapePipelinePointer ShapePlumber::pickPipeline(RenderArgs* args, const Ke batch->setPipeline(shapePipeline->pipeline); // Run the pipeline's BatchSetter on the passed in batch - if (shapePipeline->batchSetter) { - shapePipeline->batchSetter(*shapePipeline, *batch); + if (shapePipeline->_batchSetter) { + shapePipeline->_batchSetter(*shapePipeline, *batch); } return shapePipeline; diff --git a/libraries/render/src/render/ShapePipeline.h b/libraries/render/src/render/ShapePipeline.h index 434c909198..f846b562c6 100644 --- a/libraries/render/src/render/ShapePipeline.h +++ b/libraries/render/src/render/ShapePipeline.h @@ -19,6 +19,7 @@ #include "Args.h" namespace render { +class Item; class ShapeKey { public: @@ -242,8 +243,13 @@ public: using BatchSetter = std::function; - ShapePipeline(gpu::PipelinePointer pipeline, LocationsPointer locations, BatchSetter batchSetter) : - pipeline(pipeline), locations(locations), batchSetter(batchSetter) {} + using ItemSetter = std::function; + + ShapePipeline(gpu::PipelinePointer pipeline, LocationsPointer locations, BatchSetter batchSetter, ItemSetter itemSetter) : + pipeline(pipeline), + locations(locations), + _batchSetter(batchSetter), + _itemSetter(itemSetter) {} // Normally, a pipeline is accessed thorugh pickPipeline. If it needs to be set manually, // after calling setPipeline this method should be called to prepare the pipeline with default buffers. @@ -252,10 +258,13 @@ public: gpu::PipelinePointer pipeline; std::shared_ptr locations; + void prepareShapeItem(Args* args, const ShapeKey& key, const Item& shape); + protected: friend class ShapePlumber; - BatchSetter batchSetter; + BatchSetter _batchSetter; + ItemSetter _itemSetter; }; using ShapePipelinePointer = std::shared_ptr; @@ -270,11 +279,12 @@ public: using Locations = Pipeline::Locations; using LocationsPointer = Pipeline::LocationsPointer; using BatchSetter = Pipeline::BatchSetter; + using ItemSetter = Pipeline::ItemSetter; void addPipeline(const Key& key, const gpu::ShaderPointer& program, const gpu::StatePointer& state, - BatchSetter batchSetter = nullptr); + BatchSetter batchSetter = nullptr, ItemSetter itemSetter = nullptr); void addPipeline(const Filter& filter, const gpu::ShaderPointer& program, const gpu::StatePointer& state, - BatchSetter batchSetter = nullptr); + BatchSetter batchSetter = nullptr, ItemSetter itemSetter = nullptr); const PipelinePointer pickPipeline(RenderArgs* args, const Key& key) const; From 9cae8684923e3fa7fbf87da27b2d8511fa0370ae Mon Sep 17 00:00:00 2001 From: LaShonda Hopper Date: Wed, 5 Jul 2017 16:33:05 -0400 Subject: [PATCH 0780/1049] [Worklist #21420] Implement Create button disabled state (details below). * The create button icon is set to its disabled resource when the user enters a domain where they have _neither_ Rez or TempRez permissions. ** If the user has either of the Rez permission levels then the normal edit-i.svg icon is used and the user is able to create items as before. * When the user clicks the button in this state, the INSUFFICIENT_PERMISSIONS_ERROR_MSG is shown and creation menu is not shown. * The disabled icon, edit-disabled.svg, is based on the edit-i.svg and is set to 33% opacity. Item Ticket Link: https://worklist.net/21420 Changes to be committed: new file: interface/resources/icons/tablet-icons/edit-disabled.svg modified: scripts/system/edit.js --- .../icons/tablet-icons/edit-disabled.svg | 25 +++++++++++++++++++ scripts/system/edit.js | 8 +++++- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 interface/resources/icons/tablet-icons/edit-disabled.svg diff --git a/interface/resources/icons/tablet-icons/edit-disabled.svg b/interface/resources/icons/tablet-icons/edit-disabled.svg new file mode 100644 index 0000000000..4869b30dd9 --- /dev/null +++ b/interface/resources/icons/tablet-icons/edit-disabled.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + diff --git a/scripts/system/edit.js b/scripts/system/edit.js index a83d2159bb..69aacfd48f 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -397,9 +397,10 @@ var toolBar = (function () { } }); + var hasEditPermissions = (Entities.canRez() || Entities.canRezTmp()); tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); activeButton = tablet.addButton({ - icon: "icons/tablet-icons/edit-i.svg", + icon: (hasEditPermissions ? "icons/tablet-icons/edit-i.svg" : "icons/tablet-icons/edit-disabled.svg"), activeIcon: "icons/tablet-icons/edit-a.svg", text: "CREATE", sortOrder: 10 @@ -412,6 +413,11 @@ var toolBar = (function () { tablet.fromQml.connect(fromQml); activeButton.clicked.connect(function() { + if ( ! hasEditPermissions ){ + Window.notifyEditError(INSUFFICIENT_PERMISSIONS_ERROR_MSG); + return; + } + that.toggle(); }); From 258c21838e48d149742b9521b713f0f2a2038fad Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Jul 2017 17:32:40 +0100 Subject: [PATCH 0781/1049] finished calibration-ui updates --- .../qml/controls-uit/ImageMessageBox.qml | 38 +++++++- .../qml/hifi/tablet/ControllerSettings.qml | 24 +++-- .../qml/hifi/tablet/OpenVrConfiguration.qml | 89 ++++++++++++------- 3 files changed, 111 insertions(+), 40 deletions(-) diff --git a/interface/resources/qml/controls-uit/ImageMessageBox.qml b/interface/resources/qml/controls-uit/ImageMessageBox.qml index 492f520d2a..95c753aab4 100644 --- a/interface/resources/qml/controls-uit/ImageMessageBox.qml +++ b/interface/resources/qml/controls-uit/ImageMessageBox.qml @@ -18,15 +18,47 @@ Item { anchors.fill: parent property alias source: image.source property alias imageWidth: image.width - proeprty alias imageHeight: image.height + property alias imageHeight: image.height + Rectangle { - acnhors.fill: parent + anchors.fill: parent color: "black" - opacity: 0.5 + opacity: 0.3 } Image { id: image + anchors.centerIn: parent + + HiFiGlyphs { + id: closeGlyphButton + text: hifi.glyphs.close + size: 25 + + anchors { + top: parent.top + topMargin: 15 + right: parent.right + rightMargin: 15 + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + + onEntered: { + parent.text = hifi.glyphs.closeInverted; + } + + onExited: { + parent.text = hifi.glyphs.close; + } + + onClicked: { + imageBox.visible = false; + } + } + } } } diff --git a/interface/resources/qml/hifi/tablet/ControllerSettings.qml b/interface/resources/qml/hifi/tablet/ControllerSettings.qml index e1ba93a840..4814eaf01c 100644 --- a/interface/resources/qml/hifi/tablet/ControllerSettings.qml +++ b/interface/resources/qml/hifi/tablet/ControllerSettings.qml @@ -16,6 +16,7 @@ import "../../controls-uit" as HifiControls StackView { id: stack initialItem: inputConfiguration + property alias messageVisible: imageMessageBox.visible Rectangle { id: inputConfiguration anchors.fill: parent @@ -26,6 +27,15 @@ StackView { property var pluginSettings: null + HifiControls.ImageMessageBox { + id: imageMessageBox + anchors.fill: parent + z: 2000 + imageWidth: 442 + imageHeight: 670 + source: "../../../images/calibration-help.png" + } + Rectangle { width: inputConfiguration.width height: 1 @@ -167,7 +177,7 @@ StackView { loader.item.pluginName = box.currentText; } } - + if (loader.item.hasOwnProperty("displayInformation")) { loader.item.displayConfiguration(); } @@ -183,20 +193,20 @@ StackView { return InputConfiguration.activeInputPlugins(); } } - + function initialize() { changeSource(); } - + function changeSource() { loader.source = ""; var source = ""; if (box.currentText == "Vive") { source = InputConfiguration.configurationLayout("OpenVR"); - } else { + } else { source = InputConfiguration.configurationLayout(box.currentText); } - + loader.source = source; if (source === "") { box.label = "(not configurable)"; @@ -204,14 +214,14 @@ StackView { box.label = ""; } } - + Timer { id: timer repeat: false interval: 300 onTriggered: initialize() } - + Component.onCompleted: { timer.start(); } diff --git a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml index 2fe8a69321..9db80df3cc 100644 --- a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml +++ b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml @@ -50,9 +50,12 @@ Rectangle { readonly property int apply: 1 readonly property int applyAndCalibrate: 2 readonly property int calibrate: 3 - + } - + + + + MouseArea { id: mouseArea @@ -64,6 +67,7 @@ Rectangle { mouse.accepted = false; } } + color: hifi.colors.baseGray RalewayBold { @@ -162,14 +166,14 @@ Rectangle { stepSize: 0.0254 decimals: 4 colorScheme: hifi.colorSchemes.dark - + onEditingFinished: { sendConfigurationSettings(); } } } - - + + RalewayBold { id: hands @@ -245,7 +249,7 @@ Rectangle { anchors.left: openVrConfiguration.left anchors.leftMargin: leftMargin + 10 spacing: 10 - + HifiControls.SpinBox { id: handYOffset decimals: 4 @@ -269,7 +273,7 @@ Rectangle { stepSize: 0.0254 decimals: 4 colorScheme: hifi.colorSchemes.dark - + onEditingFinished: { sendConfigurationSettings(); } @@ -302,12 +306,37 @@ Rectangle { verticalCenter: additional.verticalCenter } + Rectangle { + id: selected + color: hifi.colors.blueHighlight + + width: info.width + height: 1 + + anchors { + top: info.bottom + topMargin: 1 + left: info.left + right: info.right + } + + visible: false + } + MouseArea { anchors.fill: parent; + hoverEnabled: true - onEntered: info.color = hifi.colors.blueAccent - onExited: info.color = hifi.colors.blueHighlight - onClicked: console.log("text clicked"); + onEntered: { + selected.visible = true; + } + + onExited: { + selected.visible = false; + } + onClicked: { + stack.messageVisible = true; + } } } @@ -486,7 +515,7 @@ Rectangle { anchors.leftMargin: leftMargin radius: hifi.buttons.radius - + gradient: Gradient { GradientStop { position: 0.2 @@ -502,7 +531,7 @@ Rectangle { } } } - + GradientStop { position: 1.0 color: { @@ -518,10 +547,10 @@ Rectangle { } } } - - + + HiFiGlyphs { id: glyphButton color: enabled ? hifi.buttons.textColor[calibrationButton.color] @@ -535,7 +564,7 @@ Rectangle { bottomMargin: 1 } } - + RalewayBold { id: calibrationText font.capitalization: Font.AllUppercase @@ -550,7 +579,7 @@ Rectangle { topMargin: 7 } } - + MouseArea { anchors.fill: parent @@ -572,19 +601,19 @@ Rectangle { } } } - + onPressed: { calibrationButton.pressed = true; } - + onReleased: { calibrationButton.pressed = false; } - + onEntered: { calibrationButton.hovered = true; } - + onExited: { calibrationButton.hovered = false; } @@ -690,14 +719,14 @@ Rectangle { calibratingScreen = screen.createObject(); stack.push(calibratingScreen); } - + if (status["calibrated"]) { calibrationScreen.success(); if (status["UI"]) { logAction("mocap_ui_success", status); } - + } else if (!status["calibrated"]) { calibrationScreen.failure(); @@ -809,11 +838,11 @@ Rectangle { var handOverride = handSetting["override"]; var settingsChanged = false; - + if (lastConfiguration["bodyConfiguration"] !== bodySetting) { settingsChanged = true; } - + var lastHead = lastConfiguration["headConfiguration"]; if (lastHead["override"] !== headOverride) { settingsChanged = true; @@ -823,13 +852,13 @@ Rectangle { if (lastHand["override"] !== handOverride) { settingsChanged = true; } - + if (settingsChanged) { if ((!handOverride) && (!headOverride) && (bodySetting === "None")) { state = buttonState.apply; } else { state = buttonState.applyAndCalibrate; - } + } } else { if (state == buttonState.apply) { state = buttonState.disabled; @@ -837,7 +866,7 @@ Rectangle { state = buttonState.calibrate; } } - + lastConfiguration = settings; } @@ -854,7 +883,7 @@ Rectangle { state = buttonState.disabled; } else { state = buttonState.calibrate; - } + } } function updateCalibrationButton() { @@ -920,11 +949,11 @@ Rectangle { "Y": handYOffset.value, "Z": handZOffset.value } - + var settingsObject = { "bodyConfiguration": trackerConfiguration, "headConfiguration": headObject, - "handConfiguration": handObject + "handConfiguration": handObject } return settingsObject; From 6e1f9d275cc6a741a6eb54f9bdc14d1a491bfc47 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Jul 2017 17:54:06 +0100 Subject: [PATCH 0782/1049] chnaged default head offset --- interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml index 9db80df3cc..b5698104d2 100644 --- a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml +++ b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml @@ -150,6 +150,7 @@ Rectangle { label: "Y: offset" minimumValue: -10 stepSize: 0.0254 + value: -0.05 colorScheme: hifi.colorSchemes.dark onEditingFinished: { @@ -165,6 +166,7 @@ Rectangle { minimumValue: -10 stepSize: 0.0254 decimals: 4 + value: -0.05 colorScheme: hifi.colorSchemes.dark onEditingFinished: { From 916f57772bc1767168127756960f81d9a5573003 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 6 Jul 2017 10:21:07 -0700 Subject: [PATCH 0783/1049] default the UAL off for all targets, enable manually for Interface --- assignment-client/src/AssignmentClientApp.cpp | 4 - domain-server/src/DomainServer.cpp | 4 - interface/src/Application.cpp | 108 ++++++++++-------- libraries/networking/src/UserActivityLogger.h | 3 +- tools/ac-client/src/ACClientApp.cpp | 4 - 5 files changed, 61 insertions(+), 62 deletions(-) diff --git a/assignment-client/src/AssignmentClientApp.cpp b/assignment-client/src/AssignmentClientApp.cpp index 91554d915b..ed8d0eb2d1 100644 --- a/assignment-client/src/AssignmentClientApp.cpp +++ b/assignment-client/src/AssignmentClientApp.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include "Assignment.h" #include "AssignmentClient.h" @@ -208,9 +207,6 @@ AssignmentClientApp::AssignmentClientApp(int argc, char* argv[]) : DependencyManager::registerInheritance(); - // the ACs should not send any user activity events so disable the logger ASAP - UserActivityLogger::getInstance().disable(true); - if (numForks || minForks || maxForks) { AssignmentClientMonitor* monitor = new AssignmentClientMonitor(numForks, minForks, maxForks, requestAssignmentType, assignmentPool, diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 545484d79d..504af97f80 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -42,7 +42,6 @@ #include #include #include -#include #include "DomainServerNodeData.h" #include "NodeConnectionData.h" @@ -76,9 +75,6 @@ DomainServer::DomainServer(int argc, char* argv[]) : { parseCommandLine(); - // the DS should not send any user activity events so disable the logger ASAP - UserActivityLogger::getInstance().disable(true); - DependencyManager::set(); DependencyManager::set(); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9052f082dc..85f9469933 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -950,58 +950,68 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // Make sure we don't time out during slow operations at startup updateHeartbeat(); - - // sessionRunTime will be reset soon by loadSettings. Grab it now to get previous session value. - // The value will be 0 if the user blew away settings this session, which is both a feature and a bug. - static const QString TESTER = "HIFI_TESTER"; - auto gpuIdent = GPUIdent::getInstance(); - auto glContextData = getGLContextData(); - QJsonObject properties = { - { "version", applicationVersion() }, - { "tester", QProcessEnvironment::systemEnvironment().contains(TESTER) }, - { "previousSessionCrashed", _previousSessionCrashed }, - { "previousSessionRuntime", sessionRunTime.get() }, - { "cpu_architecture", QSysInfo::currentCpuArchitecture() }, - { "kernel_type", QSysInfo::kernelType() }, - { "kernel_version", QSysInfo::kernelVersion() }, - { "os_type", QSysInfo::productType() }, - { "os_version", QSysInfo::productVersion() }, - { "gpu_name", gpuIdent->getName() }, - { "gpu_driver", gpuIdent->getDriver() }, - { "gpu_memory", static_cast(gpuIdent->getMemory()) }, - { "gl_version_int", glVersionToInteger(glContextData.value("version").toString()) }, - { "gl_version", glContextData["version"] }, - { "gl_vender", glContextData["vendor"] }, - { "gl_sl_version", glContextData["sl_version"] }, - { "gl_renderer", glContextData["renderer"] }, - { "ideal_thread_count", QThread::idealThreadCount() } - }; - auto macVersion = QSysInfo::macVersion(); - if (macVersion != QSysInfo::MV_None) { - properties["os_osx_version"] = QSysInfo::macVersion(); - } - auto windowsVersion = QSysInfo::windowsVersion(); - if (windowsVersion != QSysInfo::WV_None) { - properties["os_win_version"] = QSysInfo::windowsVersion(); - } - - ProcessorInfo procInfo; - if (getProcessorInfo(procInfo)) { - properties["processor_core_count"] = procInfo.numProcessorCores; - properties["logical_processor_count"] = procInfo.numLogicalProcessors; - properties["processor_l1_cache_count"] = procInfo.numProcessorCachesL1; - properties["processor_l2_cache_count"] = procInfo.numProcessorCachesL2; - properties["processor_l3_cache_count"] = procInfo.numProcessorCachesL3; - } - - // add firstRun flag from settings to launch event Setting::Handle firstRun { Settings::firstRun, true }; - properties["first_run"] = firstRun.get(); - // add the user's machine ID to the launch event - properties["machine_fingerprint"] = uuidStringWithoutCurlyBraces(FingerprintUtils::getMachineFingerprint()); + // once the settings have been loaded, check if we need to flip the default for UserActivityLogger + auto& userActivityLogger = UserActivityLogger::getInstance(); + if (!userActivityLogger.isDisabledSettingSet()) { + // the user activity logger is opt-out for Interface + // but it's defaulted to disabled for other targets + // so we need to enable it here if it has never been disabled by the user + userActivityLogger.disable(false); + } - UserActivityLogger::getInstance().logAction("launch", properties); + if (userActivityLogger.isEnabled()) { + // sessionRunTime will be reset soon by loadSettings. Grab it now to get previous session value. + // The value will be 0 if the user blew away settings this session, which is both a feature and a bug. + static const QString TESTER = "HIFI_TESTER"; + auto gpuIdent = GPUIdent::getInstance(); + auto glContextData = getGLContextData(); + QJsonObject properties = { + { "version", applicationVersion() }, + { "tester", QProcessEnvironment::systemEnvironment().contains(TESTER) }, + { "previousSessionCrashed", _previousSessionCrashed }, + { "previousSessionRuntime", sessionRunTime.get() }, + { "cpu_architecture", QSysInfo::currentCpuArchitecture() }, + { "kernel_type", QSysInfo::kernelType() }, + { "kernel_version", QSysInfo::kernelVersion() }, + { "os_type", QSysInfo::productType() }, + { "os_version", QSysInfo::productVersion() }, + { "gpu_name", gpuIdent->getName() }, + { "gpu_driver", gpuIdent->getDriver() }, + { "gpu_memory", static_cast(gpuIdent->getMemory()) }, + { "gl_version_int", glVersionToInteger(glContextData.value("version").toString()) }, + { "gl_version", glContextData["version"] }, + { "gl_vender", glContextData["vendor"] }, + { "gl_sl_version", glContextData["sl_version"] }, + { "gl_renderer", glContextData["renderer"] }, + { "ideal_thread_count", QThread::idealThreadCount() } + }; + auto macVersion = QSysInfo::macVersion(); + if (macVersion != QSysInfo::MV_None) { + properties["os_osx_version"] = QSysInfo::macVersion(); + } + auto windowsVersion = QSysInfo::windowsVersion(); + if (windowsVersion != QSysInfo::WV_None) { + properties["os_win_version"] = QSysInfo::windowsVersion(); + } + + ProcessorInfo procInfo; + if (getProcessorInfo(procInfo)) { + properties["processor_core_count"] = procInfo.numProcessorCores; + properties["logical_processor_count"] = procInfo.numLogicalProcessors; + properties["processor_l1_cache_count"] = procInfo.numProcessorCachesL1; + properties["processor_l2_cache_count"] = procInfo.numProcessorCachesL2; + properties["processor_l3_cache_count"] = procInfo.numProcessorCachesL3; + } + + properties["first_run"] = firstRun.get(); + + // add the user's machine ID to the launch event + properties["machine_fingerprint"] = uuidStringWithoutCurlyBraces(FingerprintUtils::getMachineFingerprint()); + + userActivityLogger.logAction("launch", properties); + } // Tell our entity edit sender about our known jurisdictions _entityEditSender.setServerJurisdictions(&_entityServerJurisdictions); diff --git a/libraries/networking/src/UserActivityLogger.h b/libraries/networking/src/UserActivityLogger.h index 179e8e6e66..b44c60eba7 100644 --- a/libraries/networking/src/UserActivityLogger.h +++ b/libraries/networking/src/UserActivityLogger.h @@ -33,6 +33,7 @@ public: public slots: bool isEnabled() { return !_disabled.get(); } + bool isDisabledSettingSet() const { return _disabled.isSet(); } void disable(bool disable); void logAction(QString action, QJsonObject details = QJsonObject(), JSONCallbackParameters params = JSONCallbackParameters()); @@ -53,7 +54,7 @@ private slots: private: UserActivityLogger(); - Setting::Handle _disabled { "UserActivityLoggerDisabled", false }; + Setting::Handle _disabled { "UserActivityLoggerDisabled", true }; QElapsedTimer _timer; }; diff --git a/tools/ac-client/src/ACClientApp.cpp b/tools/ac-client/src/ACClientApp.cpp index 34b7d5b049..1a2e6e4049 100644 --- a/tools/ac-client/src/ACClientApp.cpp +++ b/tools/ac-client/src/ACClientApp.cpp @@ -18,7 +18,6 @@ #include #include #include -#include #include "ACClientApp.h" @@ -43,9 +42,6 @@ ACClientApp::ACClientApp(int argc, char* argv[]) : const QCommandLineOption listenPortOption("listenPort", "listen port", QString::number(INVALID_PORT)); parser.addOption(listenPortOption); - // the AC client should not send any user activity events so disable the logger ASAP - UserActivityLogger::getInstance().disable(true); - if (!parser.parse(QCoreApplication::arguments())) { qCritical() << parser.errorText() << endl; parser.showHelp(); From 2299bb7718c51dabb764b9874f4d229c80036b44 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 5 Jul 2017 09:17:06 -0700 Subject: [PATCH 0784/1049] supply minimum shape rather than null --- libraries/physics/src/ShapeManager.cpp | 7 ------- libraries/shared/src/ShapeInfo.cpp | 24 ++++++++++++++++++++---- libraries/shared/src/ShapeInfo.h | 2 ++ 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/libraries/physics/src/ShapeManager.cpp b/libraries/physics/src/ShapeManager.cpp index fd3e35d28a..77716f671b 100644 --- a/libraries/physics/src/ShapeManager.cpp +++ b/libraries/physics/src/ShapeManager.cpp @@ -32,13 +32,6 @@ const btCollisionShape* ShapeManager::getShape(const ShapeInfo& info) { if (info.getType() == SHAPE_TYPE_NONE) { return nullptr; } - const float MIN_SHAPE_DIAGONAL_SQUARED = 3.0e-4f; // 1 cm cube - if (4.0f * glm::length2(info.getHalfExtents()) < MIN_SHAPE_DIAGONAL_SQUARED) { - // tiny shapes are not supported - // qCDebug(physics) << "ShapeManager::getShape -- not making shape due to size" << diagonal; - return nullptr; - } - DoubleHashKey key = info.getHash(); ShapeReference* shapeRef = _shapeMap.find(key); if (shapeRef) { diff --git a/libraries/shared/src/ShapeInfo.cpp b/libraries/shared/src/ShapeInfo.cpp index 583bceeaf2..496e94f8bd 100644 --- a/libraries/shared/src/ShapeInfo.cpp +++ b/libraries/shared/src/ShapeInfo.cpp @@ -15,6 +15,9 @@ #include "NumericalConstants.h" // for MILLIMETERS_PER_METER +// Bullet doesn't support arbitrarily small shapes +const float MIN_HALF_EXTENT = 0.005f; // 0.5 cm + void ShapeInfo::clear() { _url.clear(); _pointCollection.clear(); @@ -26,14 +29,20 @@ void ShapeInfo::clear() { } void ShapeInfo::setParams(ShapeType type, const glm::vec3& halfExtents, QString url) { + _url = ""; _type = type; - _halfExtents = halfExtents; + setHalfExtents(halfExtents); switch(type) { case SHAPE_TYPE_NONE: _halfExtents = glm::vec3(0.0f); break; case SHAPE_TYPE_BOX: - case SHAPE_TYPE_SPHERE: + break; + case SHAPE_TYPE_SPHERE: { + float radius = glm::length(halfExtents) / SQUARE_ROOT_OF_3; + radius = glm::max(radius, MIN_HALF_EXTENT); + _halfExtents = glm::vec3(radius); + } break; case SHAPE_TYPE_COMPOUND: case SHAPE_TYPE_STATIC_MESH: @@ -48,14 +57,15 @@ void ShapeInfo::setParams(ShapeType type, const glm::vec3& halfExtents, QString void ShapeInfo::setBox(const glm::vec3& halfExtents) { _url = ""; _type = SHAPE_TYPE_BOX; - _halfExtents = halfExtents; + setHalfExtents(halfExtents); _doubleHashKey.clear(); } void ShapeInfo::setSphere(float radius) { _url = ""; _type = SHAPE_TYPE_SPHERE; - _halfExtents = glm::vec3(radius, radius, radius); + radius = glm::max(radius, MIN_HALF_EXTENT); + _halfExtents = glm::vec3(radius); _doubleHashKey.clear(); } @@ -68,6 +78,8 @@ void ShapeInfo::setPointCollection(const ShapeInfo::PointCollection& pointCollec void ShapeInfo::setCapsuleY(float radius, float halfHeight) { _url = ""; _type = SHAPE_TYPE_CAPSULE_Y; + radius = glm::max(radius, MIN_HALF_EXTENT); + halfHeight = glm::max(halfHeight, 0.0f); _halfExtents = glm::vec3(radius, halfHeight, radius); _doubleHashKey.clear(); } @@ -239,3 +251,7 @@ const DoubleHashKey& ShapeInfo::getHash() const { } return _doubleHashKey; } + +void ShapeInfo::setHalfExtents(const glm::vec3& halfExtents) { + _halfExtents = glm::max(halfExtents, glm::vec3(MIN_HALF_EXTENT)); +} diff --git a/libraries/shared/src/ShapeInfo.h b/libraries/shared/src/ShapeInfo.h index 17e4703fc2..0ffdf1310d 100644 --- a/libraries/shared/src/ShapeInfo.h +++ b/libraries/shared/src/ShapeInfo.h @@ -89,6 +89,8 @@ public: const DoubleHashKey& getHash() const; protected: + void setHalfExtents(const glm::vec3& halfExtents); + QUrl _url; // url for model of convex collision hulls PointCollection _pointCollection; TriangleIndices _triangleIndices; From c3c9df0cd0dd521e37f99679b029647c437b53e5 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 6 Jul 2017 10:41:46 -0700 Subject: [PATCH 0785/1049] restore old camera state --- scripts/system/controllers/godView.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/system/controllers/godView.js b/scripts/system/controllers/godView.js index f4990b7921..4b406399fd 100644 --- a/scripts/system/controllers/godView.js +++ b/scripts/system/controllers/godView.js @@ -52,9 +52,6 @@ function keyPressEvent(event) { function mousePress(event) { if (godView) { var pickRay = Camera.computePickRay(event.x, event.y); - Vec3.print("pr.o:", pickRay.origin); - Vec3.print("pr.d:", pickRay.direction); - Vec3.print("c.p:", Camera.position); var pointingAt = Vec3.sum(pickRay.origin, Vec3.multiply(pickRay.direction,300)); var moveToPosition = { x: pointingAt.x, y: MyAvatar.position.y, z: pointingAt.z }; moveTo(moveToPosition); @@ -62,9 +59,11 @@ function mousePress(event) { } +var oldCameraMode = Camera.mode; + function startGodView() { if (!godView) { - Camera.mode = "first person"; + oldCameraMode = Camera.mode; MyAvatar.position = Vec3.sum(MyAvatar.position, {x:0, y: GOD_VIEW_HEIGHT, z: 0}); Camera.mode = "independent"; Camera.position = Vec3.sum(MyAvatar.position, {x:0, y: GOD_CAMERA_OFFSET, z: 0}); @@ -75,7 +74,7 @@ function startGodView() { function endGodView() { if (godView) { - Camera.mode = "first person"; + Camera.mode = oldCameraMode; MyAvatar.position = Vec3.sum(MyAvatar.position, {x:0, y: (-1 * GOD_VIEW_HEIGHT) + ABOVE_GROUND_DROP, z: 0}); godView = false; } From 8c15d1bab900e349a8d76670181af8e3cd95e326 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 5 Jul 2017 15:50:47 -0700 Subject: [PATCH 0786/1049] delete-trailing-whitespace --- plugins/openvr/src/ViveControllerManager.cpp | 24 ++++++++++---------- plugins/openvr/src/ViveControllerManager.h | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index b0e7297879..2b0a485a00 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -124,7 +124,7 @@ static glm::mat4 calculateResetMat() { float const UI_RADIUS = 1.0f; float const UI_HEIGHT = 1.6f; float const UI_Z_OFFSET = 0.5; - + float xSize, zSize; chaperone->GetPlayAreaSize(&xSize, &zSize); glm::vec3 uiPos(0.0f, UI_HEIGHT, UI_RADIUS - (0.5f * zSize) - UI_Z_OFFSET); @@ -251,7 +251,7 @@ void ViveControllerManager::pluginUpdate(float deltaTime, const controller::Inpu _resetMat = calculateResetMat(); _resetMatCalculated = true; } - + _system->GetDeviceToAbsoluteTrackingPose(vr::TrackingUniverseStanding, 0, _nextSimPoseData.vrPoses, vr::k_unMaxTrackedDeviceCount); _nextSimPoseData.update(_resetMat); } else if (isDesktopMode()) { @@ -429,7 +429,7 @@ void ViveControllerManager::InputDevice::emitCalibrationStatus() { status["hand_pucks"] = (_handConfig == HandConfig::Pucks); status["puckCount"] = (int)_validTrackedObjects.size(); status["UI"] = _calibrate; - + emit inputConfiguration->calibrationStatus(status); } @@ -480,7 +480,7 @@ void ViveControllerManager::InputDevice::sendUserActivityData(QString activity) {"head_puck", (_headConfig == HeadConfig::Puck) ? true : false}, {"hand_pucks", (_handConfig == HandConfig::Pucks) ? true : false} }; - + UserActivityLogger::getInstance().logAction(activity, jsonData); } @@ -513,12 +513,12 @@ void ViveControllerManager::InputDevice::calibrate(const controller::InputCalibr glm::mat4 defaultToReferenceMat = glm::mat4(); if (_headConfig == HeadConfig::HMD) { defaultToReferenceMat = calculateDefaultToReferenceForHmd(inputCalibration); - } else if (_headConfig == HeadConfig::Puck) { + } else if (_headConfig == HeadConfig::Puck) { defaultToReferenceMat = calculateDefaultToReferenceForHeadPuck(inputCalibration); } - + _config = _preferedConfig; - + bool headConfigured = configureHead(defaultToReferenceMat, inputCalibration); bool handsConfigured = configureHands(defaultToReferenceMat, inputCalibration); bool bodyConfigured = configureBody(defaultToReferenceMat, inputCalibration); @@ -952,12 +952,12 @@ void ViveControllerManager::InputDevice::calibrateLeftHand(glm::mat4& defaultToR glm::mat4 newHandMat = glm::mat4(glm::vec4(xPrime, 0.0f), glm::vec4(yPrime, 0.0f), glm::vec4(zPrime, 0.0f), glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)); - + glm::vec3 translationOffset = glm::vec3(0.0f, _handPuckYOffset, _handPuckZOffset); glm::quat initialRotation = glmExtractRotation(handPoseAvatarMat); glm::quat finalRotation = glmExtractRotation(newHandMat); - + glm::quat rotationOffset = glm::inverse(initialRotation) * finalRotation; glm::mat4 offsetMat = createMatFromQuatAndPos(rotationOffset, translationOffset); @@ -982,13 +982,13 @@ void ViveControllerManager::InputDevice::calibrateRightHand(glm::mat4& defaultTo glm::vec3 yPrime = glm::normalize(glm::cross(zPrime, xPrime)); glm::mat4 newHandMat = glm::mat4(glm::vec4(xPrime, 0.0f), glm::vec4(yPrime, 0.0f), glm::vec4(zPrime, 0.0f), glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)); - + glm::vec3 translationOffset = glm::vec3(0.0f, _handPuckYOffset, _handPuckZOffset); glm::quat initialRotation = glmExtractRotation(handPoseAvatarMat); glm::quat finalRotation = glmExtractRotation(newHandMat); - + glm::quat rotationOffset = glm::inverse(initialRotation) * finalRotation; glm::mat4 offsetMat = createMatFromQuatAndPos(rotationOffset, translationOffset); @@ -1005,7 +1005,7 @@ void ViveControllerManager::InputDevice::calibrateFeet(glm::mat4& defaultToRefer auto& secondFoot = _validTrackedObjects[SECOND_FOOT]; controller::Pose& firstFootPose = firstFoot.second; controller::Pose& secondFootPose = secondFoot.second; - + if (determineLimbOrdering(firstFootPose, secondFootPose, headXAxis, headPosition)) { calibrateFoot(defaultToReferenceMat, inputCalibration, firstFoot, true); calibrateFoot(defaultToReferenceMat, inputCalibration, secondFoot, false); diff --git a/plugins/openvr/src/ViveControllerManager.h b/plugins/openvr/src/ViveControllerManager.h index d94320dfb2..2c7aee5dad 100644 --- a/plugins/openvr/src/ViveControllerManager.h +++ b/plugins/openvr/src/ViveControllerManager.h @@ -152,7 +152,7 @@ private: HandController, Pucks }; - + Config _config { Config::None }; Config _preferedConfig { Config::None }; HeadConfig _headConfig { HeadConfig::HMD }; From dee9769be34eb4317083f06deca1350ada12d26c Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Thu, 6 Jul 2017 10:50:47 -0700 Subject: [PATCH 0787/1049] Can now use chest, hips, shoulder & feet pucks in desktop mode. * Fixed bug where head puck would sometimes not work properly when other vive trackers were enabled. * Fixed calibration to work in sensor space instead of avatar space, this was necessary because the sensor to world matrix is unreliable when in desktop mode. --- plugins/openvr/src/ViveControllerManager.cpp | 102 +++++++++---------- plugins/openvr/src/ViveControllerManager.h | 4 +- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index 2b0a485a00..a531dfad4c 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -466,7 +466,9 @@ void ViveControllerManager::InputDevice::handleTrackedObject(uint32_t deviceInde // transform into avatar frame glm::mat4 controllerToAvatar = glm::inverse(inputCalibrationData.avatarMat) * inputCalibrationData.sensorToWorldMat; _poseStateMap[poseIndex] = pose.transform(controllerToAvatar); - _validTrackedObjects.push_back(std::make_pair(poseIndex, _poseStateMap[poseIndex])); + + // but _validTrackedObjects remain in sensor frame + _validTrackedObjects.push_back(std::make_pair(poseIndex, pose)); } else { controller::Pose invalidPose; _poseStateMap[poseIndex] = invalidPose; @@ -514,6 +516,7 @@ void ViveControllerManager::InputDevice::calibrate(const controller::InputCalibr if (_headConfig == HeadConfig::HMD) { defaultToReferenceMat = calculateDefaultToReferenceForHmd(inputCalibration); } else if (_headConfig == HeadConfig::Puck) { + std::sort(_validTrackedObjects.begin(), _validTrackedObjects.end(), sortPucksYPosition); defaultToReferenceMat = calculateDefaultToReferenceForHeadPuck(inputCalibration); } @@ -708,63 +711,65 @@ void ViveControllerManager::InputDevice::handleHandController(float deltaTime, u } } } + +// defaultToReferenceMat is an offset from avatar space to sensor space. +// it aligns the default head in avatar space with the hmd in sensor space. +// +// * E_a is the the default center-eye transform in avatar space. +// * E_s is the the hmd center-eye transform in sensor space, with roll and pitch removed. +// * D is the defaultReferenceMat. +// +// E_s = D * E_a => +// D = E_s * inverse(E_a) +// glm::mat4 ViveControllerManager::InputDevice::calculateDefaultToReferenceForHmd(const controller::InputCalibrationData& inputCalibration) { - // convert the hmd head from sensor space to avatar space - glm::mat4 hmdSensorFlippedMat = inputCalibration.hmdSensorMat * Matrices::Y_180; - glm::mat4 sensorToAvatarMat = glm::inverse(inputCalibration.avatarMat) * inputCalibration.sensorToWorldMat; - glm::mat4 hmdAvatarMat = sensorToAvatarMat * hmdSensorFlippedMat; - // cancel the roll and pitch for the hmd head - glm::quat hmdRotation = cancelOutRollAndPitch(glmExtractRotation(hmdAvatarMat)); - glm::vec3 hmdTranslation = extractTranslation(hmdAvatarMat); - glm::mat4 currentHmd = createMatFromQuatAndPos(hmdRotation, hmdTranslation); + // the center-eye transform in avatar space. + glm::mat4 E_a = inputCalibration.defaultCenterEyeMat; - // calculate the offset from the centerOfEye to defaultHeadMat - glm::mat4 defaultHeadOffset = glm::inverse(inputCalibration.defaultCenterEyeMat) * inputCalibration.defaultHeadMat; + // the center-eye transform in sensor space. + glm::mat4 E_s = inputCalibration.hmdSensorMat * Matrices::Y_180; // the Y_180 is to convert hmd from -z forward to z forward. - glm::mat4 currentHead = currentHmd * defaultHeadOffset; + // cancel out roll and pitch on E_s + glm::quat rot = cancelOutRollAndPitch(glmExtractRotation(E_s)); + glm::vec3 trans = extractTranslation(E_s); + E_s = createMatFromQuatAndPos(rot, trans); - // calculate the defaultToRefrenceXform - glm::mat4 defaultToReferenceMat = currentHead * glm::inverse(inputCalibration.defaultHeadMat); - - return defaultToReferenceMat; + return E_s * glm::inverse(E_a); } +// defaultToReferenceMat is an offset from avatar space to sensor space. +// it aligns the default head in avatar space with the head-puck in sensor space. +// +// * E_a is the the default center-eye transform in avatar space. +// * E_s is the the head-puck center-eye transform in sensor space, with roll and pitch removed. +// * D is the defaultReferenceMat. +// +// E_s = D * E_a => +// D = E_s * inverse(E_a) +// glm::mat4 ViveControllerManager::InputDevice::calculateDefaultToReferenceForHeadPuck(const controller::InputCalibrationData& inputCalibration) { - glm::mat4 avatarToSensorMat = glm::inverse(inputCalibration.sensorToWorldMat) * inputCalibration.avatarMat; - glm::mat4 sensorToAvatarMat = glm::inverse(inputCalibration.avatarMat) * inputCalibration.sensorToWorldMat; + + // the center-eye transform in avatar space. + glm::mat4 E_a = inputCalibration.defaultCenterEyeMat; + + // calculate the center-eye transform in sensor space, via the head-puck size_t headPuckIndex = _validTrackedObjects.size() - 1; controller::Pose headPuckPose = _validTrackedObjects[headPuckIndex].second; - glm::mat4 headPuckAvatarMat = createMatFromQuatAndPos(headPuckPose.getRotation(), headPuckPose.getTranslation()) * Matrices::Y_180; - glm::vec3 headPuckTranslation = extractTranslation(headPuckAvatarMat); - glm::vec3 headPuckZAxis = cancelOutRollAndPitch(glmExtractRotation(headPuckAvatarMat)) * glm::vec3(0.0f, 0.0f, 1.0f); - glm::vec3 worldUp = glm::vec3(0.0f, 1.0f, 0.0f); - // check that the head puck z axis is not parrallel to the world up - const float EPSILON = 1.0e-4f; - glm::vec3 zAxis = glmExtractRotation(headPuckAvatarMat) * glm::vec3(0.0f, 0.0f, 1.0f); - if (fabsf(fabsf(glm::dot(glm::normalize(worldUp), glm::normalize(zAxis))) - 1.0f) < EPSILON) { - headPuckZAxis = glm::vec3(1.0f, 0.0f, 0.0f); - } + // AJT: TODO: handle case were forward is parallel with UNIT_Y. + glm::vec3 forward = headPuckPose.rotation * -Vectors::UNIT_Z; + glm::vec3 x = glm::normalize(glm::cross(Vectors::UNIT_Y, forward)); + glm::vec3 z = glm::normalize(glm::cross(x, Vectors::UNIT_Y)); + glm::mat3 centerEyeRotMat(x, Vectors::UNIT_Y, z); + glm::vec3 centerEyeTrans = headPuckPose.translation + centerEyeRotMat * glm::vec3(0.0f, _headPuckYOffset, _headPuckZOffset); - glm::vec3 yPrime = glm::vec3(0.0f, 1.0f, 0.0f); - glm::vec3 xPrime = glm::normalize(glm::cross(worldUp, headPuckZAxis)); - glm::vec3 zPrime = glm::normalize(glm::cross(xPrime, yPrime)); - glm::mat4 newHeadPuck = glm::mat4(glm::vec4(xPrime, 0.0f), glm::vec4(yPrime, 0.0f), - glm::vec4(zPrime, 0.0f), glm::vec4(headPuckTranslation, 1.0f)); + glm::mat4 E_s(glm::vec4(centerEyeRotMat[0], 0.0f), + glm::vec4(centerEyeRotMat[1], 0.0f), + glm::vec4(centerEyeRotMat[2], 0.0f), + glm::vec4(centerEyeTrans, 1.0f)); - glm::mat4 headPuckOffset = glm::mat4(glm::vec4(1.0f, 0.0f, 0.0f, 0.0f), glm::vec4(0.0f, 1.0f, 0.0f, 0.0f), - glm::vec4(0.0f, 0.0f, 1.0f, 0.0f), glm::vec4(0.0f, _headPuckYOffset, _headPuckZOffset, 1.0f)); - - glm::mat4 finalHeadPuck = newHeadPuck * headPuckOffset; - - glm::mat4 defaultHeadOffset = glm::inverse(inputCalibration.defaultCenterEyeMat) * inputCalibration.defaultHeadMat; - - glm::mat4 currentHead = finalHeadPuck * defaultHeadOffset; - - // calculate the defaultToRefrenceXform - glm::mat4 defaultToReferenceMat = currentHead * glm::inverse(inputCalibration.defaultHeadMat); - return defaultToReferenceMat; + return E_s * glm::inverse(E_a); } void ViveControllerManager::InputDevice::partitionTouchpad(int sButton, int xAxis, int yAxis, int centerPseudoButton, int xPseudoButton, int yPseudoButton) { @@ -1070,13 +1075,8 @@ void ViveControllerManager::InputDevice::calibrateShoulders(glm::mat4& defaultTo void ViveControllerManager::InputDevice::calibrateHead(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration) { size_t headIndex = _validTrackedObjects.size() - 1; const PuckPosePair& head = _validTrackedObjects[headIndex]; - - // assume the person is wearing the head puck on his/her forehead - glm::mat4 defaultHeadOffset = glm::inverse(inputCalibration.defaultCenterEyeMat) * inputCalibration.defaultHeadMat; - controller::Pose newHead = head.second.postTransform(defaultHeadOffset); - _jointToPuckMap[controller::HEAD] = head.first; - _pucksOffset[head.first] = computeOffset(defaultToReferenceMat, inputCalibration.defaultHeadMat, newHead); + _pucksOffset[head.first] = computeOffset(defaultToReferenceMat, inputCalibration.defaultHeadMat, head.second); } QString ViveControllerManager::InputDevice::configToString(Config config) { diff --git a/plugins/openvr/src/ViveControllerManager.h b/plugins/openvr/src/ViveControllerManager.h index 2c7aee5dad..a9bcc7e4e2 100644 --- a/plugins/openvr/src/ViveControllerManager.h +++ b/plugins/openvr/src/ViveControllerManager.h @@ -177,8 +177,8 @@ private: float _leftHapticDuration { 0.0f }; float _rightHapticStrength { 0.0f }; float _rightHapticDuration { 0.0f }; - float _headPuckYOffset { 0.0f }; - float _headPuckZOffset { 0.0f }; + float _headPuckYOffset { -0.05f }; + float _headPuckZOffset { -0.05f }; float _handPuckYOffset { 0.0f }; float _handPuckZOffset { 0.0f }; bool _triggersPressedHandled { false }; From 1d07ab70f0c5d3e2beb5dffe7cc949dfe8fdb8c0 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 5 Jul 2017 18:07:10 -0700 Subject: [PATCH 0788/1049] Fix warnings --- assignment-client/src/Agent.cpp | 2 +- libraries/avatars/src/AvatarData.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 908acba5ad..beeae7527e 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -605,7 +605,7 @@ void Agent::processAgentAvatar() { AvatarData::AvatarDataDetail dataDetail = (randFloat() < AVATAR_SEND_FULL_UPDATE_RATIO) ? AvatarData::SendAllData : AvatarData::CullSmallData; QByteArray avatarByteArray = scriptedAvatar->toByteArrayStateful(dataDetail); - auto maximumByteArraySize = NLPacket::maxPayloadSize(PacketType::AvatarData) - sizeof(AvatarDataSequenceNumber); + int maximumByteArraySize = NLPacket::maxPayloadSize(PacketType::AvatarData) - sizeof(AvatarDataSequenceNumber); if (avatarByteArray.size() > maximumByteArraySize) { qWarning() << " scriptedAvatar->toByteArrayStateful() resulted in very large buffer:" << avatarByteArray.size() << "... attempt to drop facial data"; diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 4236565e04..036d67da17 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -267,7 +267,7 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent (hasFaceTrackerInfo ? AvatarDataPacket::maxFaceTrackerInfoSize(_headData->getNumSummedBlendshapeCoefficients()) : 0) + (hasJointData ? AvatarDataPacket::maxJointDataSize(_jointData.size()) : 0); - QByteArray avatarDataByteArray(byteArraySize, 0); + QByteArray avatarDataByteArray((int)byteArraySize, 0); unsigned char* destinationBuffer = reinterpret_cast(avatarDataByteArray.data()); unsigned char* startPosition = destinationBuffer; @@ -620,7 +620,7 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent int avatarDataSize = destinationBuffer - startPosition; - if (avatarDataSize > byteArraySize) { + if (avatarDataSize > (int)byteArraySize) { qCCritical(avatars) << "AvatarData::toByteArray buffer overflow"; // We've overflown into the heap ASSERT(false); } @@ -1745,7 +1745,7 @@ void AvatarData::sendAvatarDataPacket() { auto dataDetail = cullSmallData ? SendAllData : CullSmallData; QByteArray avatarByteArray = toByteArrayStateful(dataDetail); - auto maximumByteArraySize = NLPacket::maxPayloadSize(PacketType::AvatarData) - sizeof(AvatarDataSequenceNumber); + int maximumByteArraySize = NLPacket::maxPayloadSize(PacketType::AvatarData) - sizeof(AvatarDataSequenceNumber); if (avatarByteArray.size() > maximumByteArraySize) { qCWarning(avatars) << "toByteArrayStateful() resulted in very large buffer:" << avatarByteArray.size() << "... attempt to drop facial data"; From 4e9b8c1ef94e7e1384f2fc0e697708f72d229855 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Thu, 6 Jul 2017 11:01:59 -0700 Subject: [PATCH 0789/1049] updated comments --- plugins/openvr/src/ViveControllerManager.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index a531dfad4c..e505051536 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -713,10 +713,10 @@ void ViveControllerManager::InputDevice::handleHandController(float deltaTime, u } // defaultToReferenceMat is an offset from avatar space to sensor space. -// it aligns the default head in avatar space with the hmd in sensor space. +// it aligns the default center-eye in avatar space with the hmd in sensor space. // -// * E_a is the the default center-eye transform in avatar space. -// * E_s is the the hmd center-eye transform in sensor space, with roll and pitch removed. +// * E_a is the the default center-of-the-eyes transform in avatar space. +// * E_s is the the hmd eye-center transform in sensor space, with roll and pitch removed. // * D is the defaultReferenceMat. // // E_s = D * E_a => @@ -739,7 +739,9 @@ glm::mat4 ViveControllerManager::InputDevice::calculateDefaultToReferenceForHmd( } // defaultToReferenceMat is an offset from avatar space to sensor space. -// it aligns the default head in avatar space with the head-puck in sensor space. +// it aligns the default center-of-the-eyes transform in avatar space with the head-puck in sensor space. +// The offset from the center-of-the-eyes to the head-puck can be configured via _headPuckYOffset and _headPuckZOffset, +// these values are exposed in the configuration UI. // // * E_a is the the default center-eye transform in avatar space. // * E_s is the the head-puck center-eye transform in sensor space, with roll and pitch removed. From eb486c8f470344f2239e4818bc8ea353929d2370 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Thu, 6 Jul 2017 11:03:03 -0700 Subject: [PATCH 0790/1049] comments --- plugins/openvr/src/ViveControllerManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index e505051536..07b3b2f73d 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -739,9 +739,9 @@ glm::mat4 ViveControllerManager::InputDevice::calculateDefaultToReferenceForHmd( } // defaultToReferenceMat is an offset from avatar space to sensor space. -// it aligns the default center-of-the-eyes transform in avatar space with the head-puck in sensor space. +// It aligns the default center-of-the-eyes transform in avatar space with the head-puck in sensor space. // The offset from the center-of-the-eyes to the head-puck can be configured via _headPuckYOffset and _headPuckZOffset, -// these values are exposed in the configuration UI. +// These values are exposed in the configuration UI. // // * E_a is the the default center-eye transform in avatar space. // * E_s is the the head-puck center-eye transform in sensor space, with roll and pitch removed. From 4e3dba176734e72fc1b45b38a9cc7c15afbbd0ad Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Jul 2017 19:12:52 +0100 Subject: [PATCH 0791/1049] goto HMD keyboard fix --- interface/resources/qml/hifi/tablet/TabletAddressDialog.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index 073f143dbe..1a8b33c974 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -227,7 +227,7 @@ StackView { MouseArea { anchors.fill: parent; onClicked: { - if (!addressLine.focus || !HMD.active) { + if (!addressLine.focus || HMD.active) { addressLine.focus = true; addressLine.forceActiveFocus(); addressBarDialog.keyboardEnabled = HMD.active; From de5802418f98fa72059cfb76d878969c44d6ee87 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Jul 2017 19:27:48 +0100 Subject: [PATCH 0792/1049] fixed some keybaord logic --- interface/resources/qml/hifi/tablet/TabletAddressDialog.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index 1a8b33c974..9828b3e068 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -227,9 +227,9 @@ StackView { MouseArea { anchors.fill: parent; onClicked: { - if (!addressLine.focus || HMD.active) { - addressLine.focus = true; - addressLine.forceActiveFocus(); + addressLine.focus = true; + addressLine.forceActiveFocus(); + if (HMD.active) { addressBarDialog.keyboardEnabled = HMD.active; } tabletRoot.playButtonClickSound(); From bdcdff3dbc34aadaffdc75605f95f31ffd4d8516 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 6 Jul 2017 12:01:08 -0700 Subject: [PATCH 0793/1049] force _isSet to be set before isSet() called --- libraries/shared/src/SettingHandle.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/shared/src/SettingHandle.h b/libraries/shared/src/SettingHandle.h index 258d1f8491..341a4cb101 100644 --- a/libraries/shared/src/SettingHandle.h +++ b/libraries/shared/src/SettingHandle.h @@ -107,6 +107,7 @@ namespace Setting { } bool isSet() const { + maybeInit(); return _isSet; } From 2d876377d58071255f4dc0e9fa4150f98da13e9a Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Jul 2017 20:04:44 +0100 Subject: [PATCH 0794/1049] keyboard know disappears when you click of the address line --- .../qml/hifi/tablet/TabletAddressDialog.qml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index 9828b3e068..a02e79a5e2 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -94,10 +94,20 @@ StackView { property bool keyboardEnabled: false property bool keyboardRaised: false property bool punctuationMode: false - + width: parent.width height: parent.height + MouseArea { + anchors.fill: parent + propagateComposedEvents: true + onPressed: { + parent.forceActiveFocus(); + addressBarDialog.keyboardEnabled = false; + mouse.accepted = false; + } + } + anchors { right: parent.right left: parent.left From a5c7324ec500bc044630684dffe1fc4abbded05e Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 6 Jul 2017 12:15:44 -0700 Subject: [PATCH 0795/1049] Ensure admins see PAL admin column --- scripts/system/pal.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/pal.js b/scripts/system/pal.js index 2c81622668..c6cf4af0ad 100644 --- a/scripts/system/pal.js +++ b/scripts/system/pal.js @@ -482,10 +482,10 @@ function populateNearbyUserList(selectData, oldAudioData) { isPresent: true, isReplicated: avatar.isReplicated }; + // Everyone needs to see admin status. Username and fingerprint returns default constructor output if the requesting user isn't an admin. + Users.requestUsernameFromID(id); if (id) { addAvatarNode(id); // No overlay for ourselves - // Everyone needs to see admin status. Username and fingerprint returns default constructor output if the requesting user isn't an admin. - Users.requestUsernameFromID(id); avatarsOfInterest[id] = true; } else { // Return our username from the Account API From 85111131da25995b14f4d636581311433fa227a1 Mon Sep 17 00:00:00 2001 From: LaShonda Hopper Date: Thu, 6 Jul 2017 15:16:16 -0400 Subject: [PATCH 0796/1049] [Worklist #21420] Resolves issue where domain changes didn't refresh the icon (details below). * Adds a local message/event: "Toolbar-DomainChanged" ** This message is sent by the application via its registered domain handlers: *** hostnameChanged *** connectedToDomain *** disconnectedFromDomain * edit.js subscribes to the "Toolbar-DomainChanged" event and updates the Create button icon as long as there's a valid known valid create button. Item Ticket Link: https://worklist.net/21420 Changes to be committed: modified: interface/src/Application.cpp modified: scripts/system/edit.js --- interface/src/Application.cpp | 4 +++ scripts/system/edit.js | 46 +++++++++++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 377819c0a0..1a0d164d65 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5293,6 +5293,10 @@ void Application::updateWindowTitle() const { qCDebug(interfaceapp, "Application title set to: %s", title.toStdString().c_str()); #endif _window->setWindowTitle(title); + + // updateTitleWindow gets called whenever there's a change regarding the domain, so rather + // than placing this within domainChanged, it's placed here to cover the other potential cases. + DependencyManager::get< MessagesClient >()->sendLocalMessage("Toolbar-DomainChanged", ""); } void Application::clearDomainOctreeDetails() { diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 69aacfd48f..d37a6e4189 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -123,6 +123,8 @@ var SETTING_EASE_ON_FOCUS = "cameraEaseOnFocus"; var SETTING_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE = "showLightsAndParticlesInEditMode"; var SETTING_SHOW_ZONES_IN_EDIT_MODE = "showZonesInEditMode"; +var CREATE_ENABLED_ICON = "icons/tablet-icons/edit-i.svg"; +var CREATE_DISABLED_ICON = "icons/tablet-icons/edit-disabled.svg"; // marketplace info, etc. not quite ready yet. var SHOULD_SHOW_PROPERTY_MENU = false; @@ -130,6 +132,7 @@ var INSUFFICIENT_PERMISSIONS_ERROR_MSG = "You do not have the necessary permissi var INSUFFICIENT_PERMISSIONS_IMPORT_ERROR_MSG = "You do not have the necessary permissions to place items on this domain."; var isActive = false; +var createButton = null; var IMPORTING_SVO_OVERLAY_WIDTH = 144; var IMPORTING_SVO_OVERLAY_HEIGHT = 30; @@ -397,14 +400,15 @@ var toolBar = (function () { } }); - var hasEditPermissions = (Entities.canRez() || Entities.canRezTmp()); + var createButtonIconRsrc = ((Entities.canRez() || Entities.canRezTmp()) ? CREATE_ENABLED_ICON : CREATE_DISABLED_ICON); tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); activeButton = tablet.addButton({ - icon: (hasEditPermissions ? "icons/tablet-icons/edit-i.svg" : "icons/tablet-icons/edit-disabled.svg"), + icon: createButtonIconRsrc, activeIcon: "icons/tablet-icons/edit-a.svg", text: "CREATE", sortOrder: 10 }); + createButton = activeButton; tablet.screenChanged.connect(function (type, url) { if (isActive && (type !== "QML" || url !== "Edit.qml")) { that.toggle(); @@ -412,8 +416,8 @@ var toolBar = (function () { }); tablet.fromQml.connect(fromQml); - activeButton.clicked.connect(function() { - if ( ! hasEditPermissions ){ + createButton.clicked.connect(function() { + if ( ! (Entities.canRez() || Entities.canRezTmp()) ) { Window.notifyEditError(INSUFFICIENT_PERMISSIONS_ERROR_MSG); return; } @@ -766,8 +770,38 @@ function handleOverlaySelectionToolUpdates(channel, message, sender) { } } +// Handles any edit mode updates required when domains have switched +function handleDomainChange() { + if ( (createButton === null) || (createButton === undefined) ){ + //--EARLY EXIT--( nothing to safely update ) + return; + } + + var hasRezPermissions = (Entities.canRez() || Entities.canRezTmp()); + createButton.editProperties({ + icon: (hasRezPermissions ? CREATE_ENABLED_ICON : CREATE_DISABLED_ICON), + }); +} + +function handleMessagesReceived(channel, message, sender) { + switch( channel ){ + case 'entityToolUpdates': { + handleOverlaySelectionToolUpdates( channel, message, sender ); + break; + } + case 'Toolbar-DomainChanged': { + handleDomainChange(); + break; + } + default: { + return; + } + } +} + +Messages.subscribe('Toolbar-DomainChanged'); Messages.subscribe("entityToolUpdates"); -Messages.messageReceived.connect(handleOverlaySelectionToolUpdates); +Messages.messageReceived.connect(handleMessagesReceived); var mouseHasMovedSincePress = false; var mousePressStartTime = 0; @@ -1195,6 +1229,8 @@ Script.scriptEnding.connect(function () { Messages.messageReceived.disconnect(handleOverlaySelectionToolUpdates); Messages.unsubscribe("entityToolUpdates"); + Messages.unsubscribe("Toolbar-DomainChanged"); + createButton = null; }); var lastOrientation = null; From 1fcb3b32d60e921776f824529e9b4bd1b3030887 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Jul 2017 20:55:19 +0100 Subject: [PATCH 0797/1049] fixed letter cap --- interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml index d6d37e6dae..90d6ba7022 100644 --- a/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml +++ b/interface/resources/qml/hifi/tablet/OpenVrConfiguration.qml @@ -737,7 +737,7 @@ Rectangle { RalewayBold { id: viveDesktopText size: 10 - text: "Use vive devices in desktop mode" + text: "Use Vive devices in desktop mode" color: hifi.colors.white anchors { From 24c8267030734bc6b96b1e853cca43bc0588ad4d Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 13:22:14 -0700 Subject: [PATCH 0798/1049] in Rig joint accessors, if on the Rig's thread use internalPoseSet, else use external --- libraries/animation/src/Rig.cpp | 42 +++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 3ea03bc5f9..cd5d8c6231 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -404,31 +404,41 @@ void Rig::setJointRotation(int index, bool valid, const glm::quat& rotation, flo } bool Rig::getJointPositionInWorldFrame(int jointIndex, glm::vec3& position, glm::vec3 translation, glm::quat rotation) const { - // if (isIndexValid(jointIndex)) { + if (QThread::currentThread() == thread()) { + if (isIndexValid(jointIndex)) { + position = (rotation * _internalPoseSet._absolutePoses[jointIndex].trans()) + translation; + return true; + } + return false; + } + QReadLocker readLock(&_externalPoseSetLock); if (jointIndex >= 0 && jointIndex < (int)_externalPoseSet._absolutePoses.size()) { position = (rotation * _externalPoseSet._absolutePoses[jointIndex].trans()) + translation; return true; - } else { - return false; } + return false; } bool Rig::getJointPosition(int jointIndex, glm::vec3& position) const { -/* - if (isIndexValid(jointIndex)) { - position = _internalPoseSet._absolutePoses[jointIndex].trans(); - return true; - } else { + if (QThread::currentThread() == thread()) { + if (isIndexValid(jointIndex)) { + position = _internalPoseSet._absolutePoses[jointIndex].trans(); + return true; + } return false; - }*/ + } return getAbsoluteJointTranslationInRigFrame(jointIndex, position); } bool Rig::getJointRotationInWorldFrame(int jointIndex, glm::quat& result, const glm::quat& rotation) const { - // if (isIndexValid(jointIndex)) { - // result = rotation * _internalPoseSet._absolutePoses[jointIndex].rot(); - // return true; + if (QThread::currentThread() == thread()) { + if (isIndexValid(jointIndex)) { + result = rotation * _internalPoseSet._absolutePoses[jointIndex].rot(); + return true; + } + return false; + } QReadLocker readLock(&_externalPoseSetLock); if (jointIndex >= 0 && jointIndex < (int)_externalPoseSet._absolutePoses.size()) { @@ -440,6 +450,14 @@ bool Rig::getJointRotationInWorldFrame(int jointIndex, glm::quat& result, const } bool Rig::getJointRotation(int jointIndex, glm::quat& rotation) const { + if (QThread::currentThread() == thread()) { + if (isIndexValid(jointIndex)) { + rotation = _internalPoseSet._relativePoses[jointIndex].rot(); + return true; + } + return false; + } + QReadLocker readLock(&_externalPoseSetLock); if (jointIndex >= 0 && jointIndex < (int)_externalPoseSet._relativePoses.size()) { rotation = _externalPoseSet._relativePoses[jointIndex].rot(); From b0130896d1f8b68a069df9f56526859e4f0dd870 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Jul 2017 22:01:08 +0100 Subject: [PATCH 0799/1049] fixed spamming from windowRoot.qml --- interface/resources/qml/hifi/tablet/WindowRoot.qml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/WindowRoot.qml b/interface/resources/qml/hifi/tablet/WindowRoot.qml index ea0c2844a1..fdfcfcf806 100644 --- a/interface/resources/qml/hifi/tablet/WindowRoot.qml +++ b/interface/resources/qml/hifi/tablet/WindowRoot.qml @@ -52,8 +52,10 @@ Windows.ScrollingWindow { // used to receive messages from interface script function fromScript(message) { - if (loader.item.hasOwnProperty("fromScript")) { - loader.item.fromScript(message); + if (loader.item !== null) { + if (loader.item.hasOwnProperty("fromScript")) { + loader.item.fromScript(message); + } } } From 0ac8f6efa3dcea0a62fad55f948b46c5b277ebaa Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 14:02:59 -0700 Subject: [PATCH 0800/1049] cache the jointnames and indexes from FBXGeometry for out-of-thread access --- .../src/avatars-renderer/Avatar.cpp | 43 ++++++------------- .../src/avatars-renderer/Avatar.h | 4 ++ 2 files changed, 18 insertions(+), 29 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 5d4d7af493..3674c003a1 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1009,48 +1009,25 @@ glm::vec3 Avatar::getAbsoluteJointTranslationInObjectFrame(int index) const { } int Avatar::getJointIndex(const QString& name) const { - /* if (QThread::currentThread() != thread()) { - int result; - BLOCKING_INVOKE_METHOD(const_cast(this), "getJointIndex", - Q_RETURN_ARG(int, result), Q_ARG(const QString&, name)); - return result; - } */ - int result = getFauxJointIndex(name); - if (result != -1) { - return result; + QReadLocker readLock(&_jointIndicesCacheLock); + if (_jointIndicesCache.contains(name)) { + return _jointIndicesCache[name]; } - return _skeletonModel->isActive() ? _skeletonModel->getFBXGeometry().getJointIndex(name) : -1; + return -1; } QStringList Avatar::getJointNames() const { -/* if (QThread::currentThread() != thread()) { - QStringList result; - BLOCKING_INVOKE_METHOD(const_cast(this), "getJointNames", - Q_RETURN_ARG(QStringList, result)); - return result; - }*/ - return _skeletonModel->isActive() ? _skeletonModel->getFBXGeometry().getJointNames() : QStringList(); + QReadLocker readLock(&_jointIndicesCacheLock); + return _jointIndicesCache.keys(); } glm::vec3 Avatar::getJointPosition(int index) const { -/* if (QThread::currentThread() != thread()) { - glm::vec3 position; - BLOCKING_INVOKE_METHOD(const_cast(this), "getJointPosition", - Q_RETURN_ARG(glm::vec3, position), Q_ARG(const int, index)); - return position; - }*/ glm::vec3 position; _skeletonModel->getJointPositionInWorldFrame(index, position); return position; } glm::vec3 Avatar::getJointPosition(const QString& name) const { -/* if (QThread::currentThread() != thread()) { - glm::vec3 position; - BLOCKING_INVOKE_METHOD(const_cast(this), "getJointPosition", - Q_RETURN_ARG(glm::vec3, position), Q_ARG(const QString&, name)); - return position; - }*/ glm::vec3 position; _skeletonModel->getJointPositionInWorldFrame(getJointIndex(name), position); return position; @@ -1071,6 +1048,14 @@ void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { } void Avatar::setModelURLFinished(bool success) { + { + QWriteLocker writeLock(&_jointIndicesCacheLock); + _jointIndicesCache.clear(); + if (_skeletonModel && _skeletonModel->isActive()) { + _jointIndicesCache = _skeletonModel->getFBXGeometry().jointIndices; + } + } + if (!success && _skeletonModelURL != AvatarData::defaultFullAvatarModelUrl()) { const int MAX_SKELETON_DOWNLOAD_ATTEMPTS = 4; // NOTE: we don't want to be as generous as ResourceCache is, we only want 4 attempts if (_skeletonModel->getResourceDownloadAttemptsRemaining() <= 0 || diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index 1724d42510..d2c7756257 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -267,6 +267,10 @@ protected: virtual void maybeUpdateSessionDisplayNameFromTransport(const QString& sessionDisplayName) override { _sessionDisplayName = sessionDisplayName; } // don't use no-op setter! SkeletonModelPointer _skeletonModel; + + QHash _jointIndicesCache; + mutable QReadWriteLock _jointIndicesCacheLock; + glm::vec3 _skeletonOffset; std::vector> _attachmentModels; std::vector> _attachmentsToRemove; From e03b902a157be8ef74d7cdc680374cf359716ec6 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 15:42:24 -0700 Subject: [PATCH 0801/1049] change when joint cache is copied --- .../src/avatars-renderer/Avatar.cpp | 49 ++++++++++++++----- .../src/avatars-renderer/Avatar.h | 4 +- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 3674c003a1..445396870f 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1008,17 +1008,48 @@ glm::vec3 Avatar::getAbsoluteJointTranslationInObjectFrame(int index) const { } } -int Avatar::getJointIndex(const QString& name) const { - QReadLocker readLock(&_jointIndicesCacheLock); - if (_jointIndicesCache.contains(name)) { - return _jointIndicesCache[name]; +void Avatar::cacheJoints() const { + // _jointIndicesCacheLock should be locked for write before calling this. + _jointIndicesCache.clear(); + if (_skeletonModel && _skeletonModel->isActive()) { + _jointIndicesCache = _skeletonModel->getFBXGeometry().jointIndices; + _jointsCached = true; } - return -1; +} + +int Avatar::getJointIndex(const QString& name) const { + auto getJointIndexWorker = [&]() { + if (_jointIndicesCache.contains(name)) { + return _jointIndicesCache[name]; + } + return -1; + }; + QReadLocker readLock(&_jointIndicesCacheLock); + if (!_jointsCached) { + readLock.unlock(); + { + QWriteLocker writeLock(&_jointIndicesCacheLock); + Avatar::cacheJoints(); + return getJointIndexWorker(); + } + } + return getJointIndexWorker(); } QStringList Avatar::getJointNames() const { + auto getJointNamesWorker = [&]() { + return _jointIndicesCache.keys(); + }; QReadLocker readLock(&_jointIndicesCacheLock); - return _jointIndicesCache.keys(); + if (!_jointsCached) { + readLock.unlock(); + { + QWriteLocker writeLock(&_jointIndicesCacheLock); + Avatar::cacheJoints(); + return getJointNamesWorker(); + } + } + return getJointNamesWorker(); } glm::vec3 Avatar::getJointPosition(int index) const { @@ -1050,12 +1081,8 @@ void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { void Avatar::setModelURLFinished(bool success) { { QWriteLocker writeLock(&_jointIndicesCacheLock); - _jointIndicesCache.clear(); - if (_skeletonModel && _skeletonModel->isActive()) { - _jointIndicesCache = _skeletonModel->getFBXGeometry().jointIndices; - } + _jointsCached = false; } - if (!success && _skeletonModelURL != AvatarData::defaultFullAvatarModelUrl()) { const int MAX_SKELETON_DOWNLOAD_ATTEMPTS = 4; // NOTE: we don't want to be as generous as ResourceCache is, we only want 4 attempts if (_skeletonModel->getResourceDownloadAttemptsRemaining() <= 0 || diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index d2c7756257..f19feab9c6 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -268,8 +268,10 @@ protected: SkeletonModelPointer _skeletonModel; - QHash _jointIndicesCache; + void cacheJoints() const; + mutable QHash _jointIndicesCache; mutable QReadWriteLock _jointIndicesCacheLock; + mutable bool _jointsCached { false }; glm::vec3 _skeletonOffset; std::vector> _attachmentModels; From 1ac415aa14d3be3b9782aa813690b7dfe5ff148c Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 6 Jul 2017 23:50:32 +0100 Subject: [PATCH 0802/1049] dynamic listview height --- interface/resources/qml/hifi/audio/Audio.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/audio/Audio.qml b/interface/resources/qml/hifi/audio/Audio.qml index c13bd3281a..519499e35c 100644 --- a/interface/resources/qml/hifi/audio/Audio.qml +++ b/interface/resources/qml/hifi/audio/Audio.qml @@ -166,7 +166,7 @@ Rectangle { ListView { anchors { left: parent.left; right: parent.right; leftMargin: 70 } - height: 125; + height: Math.min(250, contentHeight); spacing: 0; snapMode: ListView.SnapToItem; clip: true; From b41c470064be7362a551d52dee68be4d79a5e139 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Thu, 6 Jul 2017 15:59:24 -0700 Subject: [PATCH 0803/1049] first cut, still stereo --- interface/resources/qml/hifi/SpectatorCamera.qml | 8 +++++--- .../src/display-plugins/hmd/HmdDisplayPlugin.cpp | 15 ++++++++------- .../src/model-networking/TextureCache.cpp | 12 ++++++++++++ .../src/model-networking/TextureCache.h | 5 ++++- scripts/system/spectatorCamera.js | 15 ++++++++------- 5 files changed, 37 insertions(+), 18 deletions(-) diff --git a/interface/resources/qml/hifi/SpectatorCamera.qml b/interface/resources/qml/hifi/SpectatorCamera.qml index 6081419f57..12861ee386 100644 --- a/interface/resources/qml/hifi/SpectatorCamera.qml +++ b/interface/resources/qml/hifi/SpectatorCamera.qml @@ -227,7 +227,7 @@ Rectangle { height: 250; color: spectatorCameraPreview.visible ? "transparent" : "black"; - + AnimatedImage { source: "../../images/static.gif" @@ -235,7 +235,7 @@ Rectangle { anchors.fill: parent; opacity: 0.15; } - + // Instructions (visible when display texture isn't set) FiraSansRegular { id: spectatorCameraInstructions; @@ -247,7 +247,7 @@ Rectangle { horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter; } - + // Spectator Camera Preview Hifi.ResourceImageItem { id: spectatorCameraPreview; @@ -360,6 +360,8 @@ Rectangle { } break; case 'showPreviewTextureNotInstructions': + console.log('showPreviewTextureNotInstructions recvd', JSON.stringify(message)); + spectatorCameraPreview.url = message.url; spectatorCameraPreview.visible = message.setting; break; default: diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index ea91890f33..aed99da920 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -134,7 +134,7 @@ void HmdDisplayPlugin::customizeContext() { state->setBlendFunction(true, gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::INV_SRC_ALPHA, gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); - + gpu::Shader::BindingSet bindings; bindings.insert({ "lineData", LINE_DATA_SLOT });; gpu::Shader::makeProgram(*program, bindings); @@ -287,6 +287,7 @@ void HmdDisplayPlugin::internalPresent() { viewport.z *= 2; } + DependencyManager::get()->setHmdPreviewTexture(_compositeFramebuffer->getRenderBuffer(0)); renderFromTexture(batch, _compositeFramebuffer->getRenderBuffer(0), viewport, scissor); }); swapBuffers(); @@ -312,7 +313,7 @@ void HmdDisplayPlugin::internalPresent() { _previewTexture->assignStoredMip(0, image.byteCount(), image.constBits()); _previewTexture->setAutoGenerateMips(true); } - + auto viewport = getViewportForSourceSize(uvec2(_previewTexture->getDimensions())); render([&](gpu::Batch& batch) { @@ -323,7 +324,7 @@ void HmdDisplayPlugin::internalPresent() { } postPreview(); - // If preview is disabled, we need to check to see if the window size has changed + // If preview is disabled, we need to check to see if the window size has changed // and re-render the no-preview message if (_disablePreview) { auto window = _container->getPrimaryWidget(); @@ -510,7 +511,7 @@ void HmdDisplayPlugin::OverlayRenderer::build() { indices = std::make_shared(); //UV mapping source: http://www.mvps.org/directx/articles/spheremap.htm - + static const float fov = CompositorHelper::VIRTUAL_UI_TARGET_FOV.y; static const float aspectRatio = CompositorHelper::VIRTUAL_UI_ASPECT_RATIO; static const uint16_t stacks = 128; @@ -672,7 +673,7 @@ bool HmdDisplayPlugin::setHandLaser(uint32_t hands, HandLaserMode mode, const ve _handLasers[1] = info; } }); - // FIXME defer to a child class plugin to determine if hand lasers are actually + // FIXME defer to a child class plugin to determine if hand lasers are actually // available based on the presence or absence of hand controllers return true; } @@ -687,7 +688,7 @@ bool HmdDisplayPlugin::setExtraLaser(HandLaserMode mode, const vec4& color, cons _extraLaserStart = sensorSpaceStart; }); - // FIXME defer to a child class plugin to determine if hand lasers are actually + // FIXME defer to a child class plugin to determine if hand lasers are actually // available based on the presence or absence of hand controllers return true; } @@ -702,7 +703,7 @@ void HmdDisplayPlugin::compositeExtra() { if (_presentHandPoses[0] == IDENTITY_MATRIX && _presentHandPoses[1] == IDENTITY_MATRIX && !_presentExtraLaser.valid()) { return; } - + render([&](gpu::Batch& batch) { batch.setFramebuffer(_compositeFramebuffer); batch.setModelTransform(Transform()); diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index 4d2fdd2bc4..a01979730f 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -54,6 +54,7 @@ const std::string TextureCache::KTX_EXT { "ktx" }; static const QString RESOURCE_SCHEME = "resource"; static const QUrl SPECTATOR_CAMERA_FRAME_URL("resource://spectatorCameraFrame"); +static const QUrl HMD_PREVIEW_FRAME_URL("resource://hmdPreviewFrame"); static const float SKYBOX_LOAD_PRIORITY { 10.0f }; // Make sure skybox loads first static const float HIGH_MIPS_LOAD_PRIORITY { 9.0f }; // Make sure high mips loads after skybox but before models @@ -969,6 +970,12 @@ void ImageReader::read() { Q_ARG(int, texture->getHeight())); } +void TextureCache::setHmdPreviewTexture(gpu::TexturePointer texturePointer) { + if (!_hmdPreviewNetworkTexture) { + _hmdPreviewNetworkTexture.reset(new NetworkTexture(HMD_PREVIEW_FRAME_URL)); + } + _hmdPreviewNetworkTexture->setImage(texturePointer, texturePointer->getWidth(), texturePointer->getHeight()); +} NetworkTexturePointer TextureCache::getResourceTexture(QUrl resourceTextureUrl) { gpu::TexturePointer texture; @@ -984,6 +991,11 @@ NetworkTexturePointer TextureCache::getResourceTexture(QUrl resourceTextureUrl) } } } + if (resourceTextureUrl == HMD_PREVIEW_FRAME_URL) { + if (_hmdPreviewNetworkTexture) { + return _hmdPreviewNetworkTexture; + } + } return NetworkTexturePointer(); } diff --git a/libraries/model-networking/src/model-networking/TextureCache.h b/libraries/model-networking/src/model-networking/TextureCache.h index 43edc3593d..7e3d421ad0 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.h +++ b/libraries/model-networking/src/model-networking/TextureCache.h @@ -74,7 +74,7 @@ protected: virtual bool isCacheable() const override { return _loaded; } virtual void downloadFinished(const QByteArray& data) override; - + Q_INVOKABLE void loadContent(const QByteArray& content); Q_INVOKABLE void setImage(gpu::TexturePointer texture, int originalWidth, int originalHeight); @@ -170,6 +170,7 @@ public: NetworkTexturePointer getResourceTexture(QUrl resourceTextureUrl); const gpu::FramebufferPointer& getSpectatorCameraFramebuffer(); void resetSpectatorCameraFramebuffer(int width, int height); + void setHmdPreviewTexture(gpu::TexturePointer texturePointer); protected: // Overload ResourceCache::prefetch to allow specifying texture type for loads @@ -202,6 +203,8 @@ private: NetworkTexturePointer _spectatorCameraNetworkTexture; gpu::FramebufferPointer _spectatorCameraFramebuffer; + + NetworkTexturePointer _hmdPreviewNetworkTexture; }; #endif // hifi_TextureCache_h diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index b77ab1d8af..a87640a984 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -19,7 +19,7 @@ onTabletButtonClicked, wireEventBridge, startup, shutdown, registerButtonMappings; // Function Name: inFrontOf() - // + // // Description: // -Returns the position in front of the given "position" argument, where the forward vector is based off // the "orientation" argument and the amount in front is based off the "distance" argument. @@ -29,7 +29,7 @@ } // Function Name: spectatorCameraOn() - // + // // Description: // -Call this function to set up the spectator camera and // spawn the camera entity. @@ -103,7 +103,7 @@ } // Function Name: spectatorCameraOff() - // + // // Description: // -Call this function to shut down the spectator camera and // destroy the camera entity. @@ -217,8 +217,9 @@ // 3. Camera is on; "Monitor Shows" is "HMD Preview": "url" is "" // 4. Camera is on; "Monitor Shows" is "Camera View": "url" is "resource://spectatorCameraFrame" function setDisplay(showCameraView) { - var url = (camera && showCameraView) ? "resource://spectatorCameraFrame" : ""; - sendToQml({ method: 'showPreviewTextureNotInstructions', setting: !!url }); + + var url = (camera) ? (showCameraView ? "resource://spectatorCameraFrame" : "resource://hmdPreviewFrame") : ""; + sendToQml({ method: 'showPreviewTextureNotInstructions', setting: !!url, url: url}); Window.setDisplayTexture(url); } const MONITOR_SHOWS_CAMERA_VIEW_DEFAULT = false; @@ -420,7 +421,7 @@ } // Function Name: onHMDChanged() - // + // // Description: // -Called from C++ when HMD mode is changed. The argument "isHMDMode" should be true if HMD is on; false otherwise. function onHMDChanged(isHMDMode) { @@ -432,7 +433,7 @@ } // Function Name: shutdown() - // + // // Description: // -shutdown() will be called when the script ends (i.e. is stopped). function shutdown() { From 6d98d20b129d5f69f1257e8f103898b6cb506b28 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 6 Jul 2017 16:15:23 -0700 Subject: [PATCH 0804/1049] cleanup bad QEventLoop::exec() OAuth handling code --- domain-server/src/DomainServer.cpp | 92 +++++++++++++++++++++--------- domain-server/src/DomainServer.h | 7 +++ 2 files changed, 71 insertions(+), 28 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 9303bed2b5..bf7a8e2f1e 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1959,7 +1959,8 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url return _settingsManager.handleAuthenticatedHTTPRequest(connection, url); } -const QString HIFI_SESSION_COOKIE_KEY = "DS_WEB_SESSION_UUID"; +static const QString HIFI_SESSION_COOKIE_KEY = "DS_WEB_SESSION_UUID"; +static const QString STATE_QUERY_KEY = "state"; bool DomainServer::handleHTTPSRequest(HTTPSConnection* connection, const QUrl &url, bool skipSubHandler) { qDebug() << "HTTPS request received at" << url.toString(); @@ -1970,10 +1971,9 @@ bool DomainServer::handleHTTPSRequest(HTTPSConnection* connection, const QUrl &u const QString CODE_QUERY_KEY = "code"; QString authorizationCode = codeURLQuery.queryItemValue(CODE_QUERY_KEY); - const QString STATE_QUERY_KEY = "state"; QUuid stateUUID = QUuid(codeURLQuery.queryItemValue(STATE_QUERY_KEY)); - if (!authorizationCode.isEmpty() && !stateUUID.isNull()) { + if (!authorizationCode.isEmpty() && !stateUUID.isNull() && _webAuthenticationStateSet.remove(stateUUID)) { // fire off a request with this code and state to get an access token for the user const QString OAUTH_TOKEN_REQUEST_PATH = "/oauth/token"; @@ -1991,47 +1991,83 @@ bool DomainServer::handleHTTPSRequest(HTTPSConnection* connection, const QUrl &u tokenRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QNetworkReply* tokenReply = NetworkAccessManager::getInstance().post(tokenRequest, tokenPostBody.toLocal8Bit()); + connect(tokenReply, &QNetworkReply::finished, this, &DomainServer::tokenGrantFinished); - if (_webAuthenticationStateSet.remove(stateUUID)) { - // this is a web user who wants to auth to access web interface - // we hold the response back to them until we get their profile information - // and can decide if they are let in or not + // add this connection to our list of pending connections so that we can hold the response + _pendingOAuthConnections.insert(stateUUID, connection); - QEventLoop loop; - connect(tokenReply, &QNetworkReply::finished, &loop, &QEventLoop::quit); + // set the state UUID on the reply so that we can associate the response with the connection later + tokenReply->setProperty(STATE_QUERY_KEY.toLocal8Bit(), stateUUID); - // start the loop for the token request - loop.exec(); + return true; + } else { + connection->respond(HTTPConnection::StatusCode400); - QNetworkReply* profileReply = profileRequestGivenTokenReply(tokenReply); + return true; + } + } else { + return false; + } +} - // stop the loop once the profileReply is complete - connect(profileReply, &QNetworkReply::finished, &loop, &QEventLoop::quit); +HTTPSConnection* DomainServer::connectionFromReplyWithState(QNetworkReply* reply) { + // grab the UUID state property from the reply + QUuid stateUUID = reply->property(STATE_QUERY_KEY.toLocal8Bit()).toUuid(); - // restart the loop for the profile request - loop.exec(); + if (!stateUUID.isNull()) { + return _pendingOAuthConnections.take(stateUUID); + } else { + return nullptr; + } +} +void DomainServer::tokenGrantFinished() { + auto tokenReply = qobject_cast(sender()); + + if (tokenReply) { + if (tokenReply->error() == QNetworkReply::NoError) { + // now that we have a token for this profile, send off a profile request + QNetworkReply* profileReply = profileRequestGivenTokenReply(tokenReply); + + // forward along the state UUID that we kept with the token request + profileReply->setProperty(STATE_QUERY_KEY.toLocal8Bit(), tokenReply->property(STATE_QUERY_KEY.toLocal8Bit())); + + connect(profileReply, &QNetworkReply::finished, this, &DomainServer::profileRequestFinished); + } else { + // the token grant failed, send back a 500 (assuming the connection is still around) + auto connection = connectionFromReplyWithState(tokenReply); + + if (connection) { + connection->respond(HTTPConnection::StatusCode500); + } + } + + tokenReply->deleteLater(); + } +} + +void DomainServer::profileRequestFinished() { + + auto profileReply = qobject_cast(sender()); + + if (profileReply) { + auto connection = connectionFromReplyWithState(profileReply); + + if (connection) { + if (profileReply->error() == QNetworkReply::NoError) { // call helper method to get cookieHeaders Headers cookieHeaders = setupCookieHeadersFromProfileReply(profileReply); connection->respond(HTTPConnection::StatusCode302, QByteArray(), HTTPConnection::DefaultContentType, cookieHeaders); - delete tokenReply; - delete profileReply; - - // we've redirected the user back to our homepage - return true; - + } else { + // the profile request failed, send back a 500 (assuming the connection is still around) + connection->respond(HTTPConnection::StatusCode500); } } - // respond with a 200 code indicating that login is complete - connection->respond(HTTPConnection::StatusCode200); - - return true; - } else { - return false; + profileReply->deleteLater(); } } diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index 8851e3380b..4808297c89 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -111,6 +111,9 @@ private slots: void updateDownstreamNodes(); void updateUpstreamNodes(); + void tokenGrantFinished(); + void profileRequestFinished(); + signals: void iceServerChanged(); void userConnected(); @@ -178,6 +181,8 @@ private: void updateReplicationNodes(ReplicationServerDirection direction); + HTTPSConnection* connectionFromReplyWithState(QNetworkReply* reply); + SubnetList _acSubnetWhitelist; std::vector _replicatedUsernames; @@ -235,6 +240,8 @@ private: bool _sendICEServerAddressToMetaverseAPIInProgress { false }; bool _sendICEServerAddressToMetaverseAPIRedo { false }; + + QHash> _pendingOAuthConnections; }; From 1afa2d3775d4a4363c5f2b9d5ac6c46ffec9aa4d Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 6 Jul 2017 16:21:14 -0700 Subject: [PATCH 0805/1049] Spectator camera icon --- .../icons/tablet-icons/spectator-i.svg | 25 +++++++++++++++++++ scripts/system/spectatorCamera.js | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 interface/resources/icons/tablet-icons/spectator-i.svg diff --git a/interface/resources/icons/tablet-icons/spectator-i.svg b/interface/resources/icons/tablet-icons/spectator-i.svg new file mode 100644 index 0000000000..bc76417c4c --- /dev/null +++ b/interface/resources/icons/tablet-icons/spectator-i.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index b77ab1d8af..6a80daae85 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -143,7 +143,8 @@ if (!button) { if ((isHMDMode || showSpectatorInDesktop) && !isShuttingDown) { button = tablet.addButton({ - text: buttonName + text: buttonName, + icon: "icons/tablet-icons/spectator-i.svg" }); button.clicked.connect(onTabletButtonClicked); } From 2e88eca2b983f34dbe2e61fb1d747c987057b8af Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 16:33:37 -0700 Subject: [PATCH 0806/1049] oopsy crazy --- libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 445396870f..16c0d7516b 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1019,6 +1019,10 @@ void Avatar::cacheJoints() const { int Avatar::getJointIndex(const QString& name) const { auto getJointIndexWorker = [&]() { + int result = getFauxJointIndex(name); + if (result != -1) { + return result; + } if (_jointIndicesCache.contains(name)) { return _jointIndicesCache[name]; } From 15d379cc5ab86be34b6190d91dd7528188ab6194 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 17:36:28 -0700 Subject: [PATCH 0807/1049] coding style --- libraries/animation/src/Rig.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index cd5d8c6231..6ebb68773f 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -408,16 +408,18 @@ bool Rig::getJointPositionInWorldFrame(int jointIndex, glm::vec3& position, glm: if (isIndexValid(jointIndex)) { position = (rotation * _internalPoseSet._absolutePoses[jointIndex].trans()) + translation; return true; + } else { + return false; } - return false; } QReadLocker readLock(&_externalPoseSetLock); if (jointIndex >= 0 && jointIndex < (int)_externalPoseSet._absolutePoses.size()) { position = (rotation * _externalPoseSet._absolutePoses[jointIndex].trans()) + translation; return true; + } else { + return false; } - return false; } bool Rig::getJointPosition(int jointIndex, glm::vec3& position) const { @@ -425,10 +427,12 @@ bool Rig::getJointPosition(int jointIndex, glm::vec3& position) const { if (isIndexValid(jointIndex)) { position = _internalPoseSet._absolutePoses[jointIndex].trans(); return true; + } else { + return false; } - return false; + } else { + return getAbsoluteJointTranslationInRigFrame(jointIndex, position); } - return getAbsoluteJointTranslationInRigFrame(jointIndex, position); } bool Rig::getJointRotationInWorldFrame(int jointIndex, glm::quat& result, const glm::quat& rotation) const { @@ -436,8 +440,9 @@ bool Rig::getJointRotationInWorldFrame(int jointIndex, glm::quat& result, const if (isIndexValid(jointIndex)) { result = rotation * _internalPoseSet._absolutePoses[jointIndex].rot(); return true; + } else { + return false; } - return false; } QReadLocker readLock(&_externalPoseSetLock); @@ -454,8 +459,9 @@ bool Rig::getJointRotation(int jointIndex, glm::quat& rotation) const { if (isIndexValid(jointIndex)) { rotation = _internalPoseSet._relativePoses[jointIndex].rot(); return true; + } else { + return false; } - return false; } QReadLocker readLock(&_externalPoseSetLock); From fc61fcf49488c41bb116c53655b59efda773f60a Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 17:40:41 -0700 Subject: [PATCH 0808/1049] coding style --- libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 16c0d7516b..3fc7bba3d2 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1022,11 +1022,11 @@ int Avatar::getJointIndex(const QString& name) const { int result = getFauxJointIndex(name); if (result != -1) { return result; - } - if (_jointIndicesCache.contains(name)) { + } else if (_jointIndicesCache.contains(name)) { return _jointIndicesCache[name]; + } else { + return -1; } - return -1; }; QReadLocker readLock(&_jointIndicesCacheLock); if (!_jointsCached) { From a543b957efeaf198a60fe45fe69d3034f1372882 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 17:45:57 -0700 Subject: [PATCH 0809/1049] fix a race --- libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 3fc7bba3d2..e3586fd9a8 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1010,6 +1010,9 @@ glm::vec3 Avatar::getAbsoluteJointTranslationInObjectFrame(int index) const { void Avatar::cacheJoints() const { // _jointIndicesCacheLock should be locked for write before calling this. + if (_jointsCached) { + return; + } _jointIndicesCache.clear(); if (_skeletonModel && _skeletonModel->isActive()) { _jointIndicesCache = _skeletonModel->getFBXGeometry().jointIndices; From ab8d9f4885dd3bf441fb3a14624cf506d82aedd4 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 18:00:11 -0700 Subject: [PATCH 0810/1049] check for faux joints before heading into code that needs to lock --- .../avatars-renderer/src/avatars-renderer/Avatar.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index e3586fd9a8..439beb94d6 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1021,11 +1021,13 @@ void Avatar::cacheJoints() const { } int Avatar::getJointIndex(const QString& name) const { + int result = getFauxJointIndex(name); + if (result != -1) { + return result; + } + auto getJointIndexWorker = [&]() { - int result = getFauxJointIndex(name); - if (result != -1) { - return result; - } else if (_jointIndicesCache.contains(name)) { + if (_jointIndicesCache.contains(name)) { return _jointIndicesCache[name]; } else { return -1; From f8b76d65ab3963912ee4ebb730b0790ff5dca469 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 6 Jul 2017 18:01:26 -0700 Subject: [PATCH 0811/1049] Fixing overlay crashes, for real --- interface/src/ui/overlays/Overlays.cpp | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index 399c730dbd..bcf9897dd8 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -307,6 +307,7 @@ void Overlays::deleteOverlay(OverlayID id) { } #endif + _overlaysToDelete.push_back(overlayToDelete); emit overlayDeleted(id); } @@ -606,22 +607,16 @@ QSizeF Overlays::textSize(OverlayID id, const QString& text) { return result; } - Overlay::Pointer thisOverlay; - { - QMutexLocker locker(&_mutex); - thisOverlay = _overlaysHUD[id]; - } + Overlay::Pointer thisOverlay = getOverlay(id); if (thisOverlay) { - if (auto textOverlay = std::dynamic_pointer_cast(thisOverlay)) { - return textOverlay->textSize(text); - } - } else { - { - QMutexLocker locker(&_mutex); - thisOverlay = _overlaysWorld[id]; - } - if (auto text3dOverlay = std::dynamic_pointer_cast(thisOverlay)) { - return text3dOverlay->textSize(text); + if (thisOverlay->is3D()) { + if (auto text3dOverlay = std::dynamic_pointer_cast(thisOverlay)) { + return text3dOverlay->textSize(text); + } + } else { + if (auto textOverlay = std::dynamic_pointer_cast(thisOverlay)) { + return textOverlay->textSize(text); + } } } return QSizeF(0.0f, 0.0f); From ef4a04b9cf31a201fd5e0dafd3e925913f8af44a Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 18:01:58 -0700 Subject: [PATCH 0812/1049] code style --- .../avatars-renderer/src/avatars-renderer/Avatar.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 439beb94d6..fc604809dc 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1034,7 +1034,9 @@ int Avatar::getJointIndex(const QString& name) const { } }; QReadLocker readLock(&_jointIndicesCacheLock); - if (!_jointsCached) { + if (_jointsCached) { + return getJointIndexWorker(); + } else { readLock.unlock(); { QWriteLocker writeLock(&_jointIndicesCacheLock); @@ -1042,7 +1044,6 @@ int Avatar::getJointIndex(const QString& name) const { return getJointIndexWorker(); } } - return getJointIndexWorker(); } QStringList Avatar::getJointNames() const { @@ -1050,7 +1051,9 @@ QStringList Avatar::getJointNames() const { return _jointIndicesCache.keys(); }; QReadLocker readLock(&_jointIndicesCacheLock); - if (!_jointsCached) { + if (_jointsCached) { + return getJointNamesWorker(); + } else { readLock.unlock(); { QWriteLocker writeLock(&_jointIndicesCacheLock); @@ -1058,7 +1061,6 @@ QStringList Avatar::getJointNames() const { return getJointNamesWorker(); } } - return getJointNamesWorker(); } glm::vec3 Avatar::getJointPosition(int index) const { From 93840bf93649ce2d81de4ed4732bee574ef09c34 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Thu, 6 Jul 2017 18:13:24 -0700 Subject: [PATCH 0813/1049] hack to not switch display to hmdPreviewFrame texture (temporary) --- scripts/system/spectatorCamera.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index a87640a984..7a1fb5a406 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -220,7 +220,11 @@ var url = (camera) ? (showCameraView ? "resource://spectatorCameraFrame" : "resource://hmdPreviewFrame") : ""; sendToQml({ method: 'showPreviewTextureNotInstructions', setting: !!url, url: url}); - Window.setDisplayTexture(url); + // FIXME: temporary hack to avoid setting the display texture to hmdPreviewFrame + // until it is the correct mono. + if (url != "resource://hmdPreviewFrame") { + Window.setDisplayTexture(url); + } } const MONITOR_SHOWS_CAMERA_VIEW_DEFAULT = false; var monitorShowsCameraView = !!Settings.getValue('spectatorCamera/monitorShowsCameraView', MONITOR_SHOWS_CAMERA_VIEW_DEFAULT); From 57ba2c5cd6c9c807e46692f3715bf8611c751c39 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 18:16:41 -0700 Subject: [PATCH 0814/1049] add invalidateJointIndicesCache method --- .../avatars-renderer/src/avatars-renderer/Avatar.cpp | 11 +++++++---- .../avatars-renderer/src/avatars-renderer/Avatar.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index fc604809dc..2206d67c2c 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1020,6 +1020,11 @@ void Avatar::cacheJoints() const { } } +void Avatar::invalidateJointIndicesCache() const { + QWriteLocker writeLock(&_jointIndicesCacheLock); + _jointsCached = false; +} + int Avatar::getJointIndex(const QString& name) const { int result = getFauxJointIndex(name); if (result != -1) { @@ -1090,10 +1095,8 @@ void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { } void Avatar::setModelURLFinished(bool success) { - { - QWriteLocker writeLock(&_jointIndicesCacheLock); - _jointsCached = false; - } + invalidateJointIndicesCache(); + if (!success && _skeletonModelURL != AvatarData::defaultFullAvatarModelUrl()) { const int MAX_SKELETON_DOWNLOAD_ATTEMPTS = 4; // NOTE: we don't want to be as generous as ResourceCache is, we only want 4 attempts if (_skeletonModel->getResourceDownloadAttemptsRemaining() <= 0 || diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index f19feab9c6..2069e36998 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -269,6 +269,7 @@ protected: SkeletonModelPointer _skeletonModel; void cacheJoints() const; + void invalidateJointIndicesCache() const; mutable QHash _jointIndicesCache; mutable QReadWriteLock _jointIndicesCacheLock; mutable bool _jointsCached { false }; From 801c45898ffd4a23e5a738d5540d0c59ce2bc33e Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 18:41:11 -0700 Subject: [PATCH 0815/1049] dry up some code --- .../src/avatars-renderer/Avatar.cpp | 71 ++++++++----------- .../src/avatars-renderer/Avatar.h | 2 +- 2 files changed, 30 insertions(+), 43 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 2206d67c2c..4ffacf9fa6 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1008,64 +1008,51 @@ glm::vec3 Avatar::getAbsoluteJointTranslationInObjectFrame(int index) const { } } -void Avatar::cacheJoints() const { - // _jointIndicesCacheLock should be locked for write before calling this. - if (_jointsCached) { - return; - } - _jointIndicesCache.clear(); - if (_skeletonModel && _skeletonModel->isActive()) { - _jointIndicesCache = _skeletonModel->getFBXGeometry().jointIndices; - _jointsCached = true; - } -} - void Avatar::invalidateJointIndicesCache() const { QWriteLocker writeLock(&_jointIndicesCacheLock); _jointsCached = false; } +void Avatar::withValidCache(std::function const& worker) const { + QReadLocker readLock(&_jointIndicesCacheLock); + if (_jointsCached) { + worker(); + } else { + readLock.unlock(); + { + QWriteLocker writeLock(&_jointIndicesCacheLock); + if (!_jointsCached) { + _jointIndicesCache.clear(); + if (_skeletonModel && _skeletonModel->isActive()) { + _jointIndicesCache = _skeletonModel->getFBXGeometry().jointIndices; + _jointsCached = true; + } + } + worker(); + } + } +} + int Avatar::getJointIndex(const QString& name) const { int result = getFauxJointIndex(name); if (result != -1) { return result; } - auto getJointIndexWorker = [&]() { + withValidCache([&]() { if (_jointIndicesCache.contains(name)) { - return _jointIndicesCache[name]; - } else { - return -1; + result = _jointIndicesCache[name]; } - }; - QReadLocker readLock(&_jointIndicesCacheLock); - if (_jointsCached) { - return getJointIndexWorker(); - } else { - readLock.unlock(); - { - QWriteLocker writeLock(&_jointIndicesCacheLock); - Avatar::cacheJoints(); - return getJointIndexWorker(); - } - } + }); + return result; } QStringList Avatar::getJointNames() const { - auto getJointNamesWorker = [&]() { - return _jointIndicesCache.keys(); - }; - QReadLocker readLock(&_jointIndicesCacheLock); - if (_jointsCached) { - return getJointNamesWorker(); - } else { - readLock.unlock(); - { - QWriteLocker writeLock(&_jointIndicesCacheLock); - Avatar::cacheJoints(); - return getJointNamesWorker(); - } - } + QStringList result; + withValidCache([&]() { + result = _jointIndicesCache.keys(); + }); + return result; } glm::vec3 Avatar::getJointPosition(int index) const { diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index 2069e36998..6566e79d79 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -268,8 +268,8 @@ protected: SkeletonModelPointer _skeletonModel; - void cacheJoints() const; void invalidateJointIndicesCache() const; + void withValidCache(std::function const& worker) const; mutable QHash _jointIndicesCache; mutable QReadWriteLock _jointIndicesCacheLock; mutable bool _jointsCached { false }; From 0c18f04e58736cb39c6810be7b500b8d19afaa04 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 6 Jul 2017 18:40:14 -0700 Subject: [PATCH 0816/1049] Fix Audio Mixer crash --- libraries/networking/src/LimitedNodeList.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/LimitedNodeList.h b/libraries/networking/src/LimitedNodeList.h index ab61c71952..5d602cc0c0 100644 --- a/libraries/networking/src/LimitedNodeList.h +++ b/libraries/networking/src/LimitedNodeList.h @@ -197,8 +197,12 @@ public: *lockWaitOut = (endLock - start); } - std::vector nodes(_nodeHash.size()); - std::transform(_nodeHash.cbegin(), _nodeHash.cend(), nodes.begin(), [](const NodeHash::value_type& it) { + // Size of _nodeHash could change at any time, + // so reserve enough memory for the current size + // and then back insert all the nodes found + std::vector nodes; + nodes.reserve(_nodeHash.size()); + std::transform(_nodeHash.cbegin(), _nodeHash.cend(), std::back_inserter(nodes), [&](const NodeHash::value_type& it) { return it.second; }); auto endTransform = usecTimestampNow(); From ddabe940d699b8054f7e4aba67e7581ccdeaecce Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 6 Jul 2017 18:42:00 -0700 Subject: [PATCH 0817/1049] dry up some code --- libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp | 6 +++--- libraries/avatars-renderer/src/avatars-renderer/Avatar.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 4ffacf9fa6..664b9f5959 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1013,7 +1013,7 @@ void Avatar::invalidateJointIndicesCache() const { _jointsCached = false; } -void Avatar::withValidCache(std::function const& worker) const { +void Avatar::withValidJointIndicesCache(std::function const& worker) const { QReadLocker readLock(&_jointIndicesCacheLock); if (_jointsCached) { worker(); @@ -1039,7 +1039,7 @@ int Avatar::getJointIndex(const QString& name) const { return result; } - withValidCache([&]() { + withValidJointIndicesCache([&]() { if (_jointIndicesCache.contains(name)) { result = _jointIndicesCache[name]; } @@ -1049,7 +1049,7 @@ int Avatar::getJointIndex(const QString& name) const { QStringList Avatar::getJointNames() const { QStringList result; - withValidCache([&]() { + withValidJointIndicesCache([&]() { result = _jointIndicesCache.keys(); }); return result; diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index 6566e79d79..ce7e53656e 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -269,7 +269,7 @@ protected: SkeletonModelPointer _skeletonModel; void invalidateJointIndicesCache() const; - void withValidCache(std::function const& worker) const; + void withValidJointIndicesCache(std::function const& worker) const; mutable QHash _jointIndicesCache; mutable QReadWriteLock _jointIndicesCacheLock; mutable bool _jointsCached { false }; From ee9cdaff901f40f596c423158a113bfd23fdd624 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 6 Jul 2017 23:26:40 -0700 Subject: [PATCH 0818/1049] Set admin status even if QML can't find user in PAL --- interface/resources/qml/hifi/Pal.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/Pal.qml b/interface/resources/qml/hifi/Pal.qml index bbb42e61ac..e300af98b4 100644 --- a/interface/resources/qml/hifi/Pal.qml +++ b/interface/resources/qml/hifi/Pal.qml @@ -1099,9 +1099,9 @@ Rectangle { case 'nearbyUsers': var data = message.params; var index = -1; + iAmAdmin = Users.canKick; index = findNearbySessionIndex('', data); if (index !== -1) { - iAmAdmin = Users.canKick; myData = data[index]; data.splice(index, 1); } else { From 4c1bf6af4716f8dfe6b6ea5cecf6865dcd9d1d3d Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Fri, 7 Jul 2017 11:38:25 +0200 Subject: [PATCH 0819/1049] REmoving comments --- libraries/render-utils/src/ZoneRenderer.cpp | 9 +++------ tests/gpu-test/src/TestWindow.cpp | 1 - tests/render-perf/src/main.cpp | 7 ------- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/libraries/render-utils/src/ZoneRenderer.cpp b/libraries/render-utils/src/ZoneRenderer.cpp index 80be123f0f..8fa243c13b 100644 --- a/libraries/render-utils/src/ZoneRenderer.cpp +++ b/libraries/render-utils/src/ZoneRenderer.cpp @@ -136,14 +136,13 @@ void DebugZoneLighting::run(const render::RenderContextPointer& context, const I auto deferredTransform = inputs; - auto lightStage = context->_scene->getStage("LIGHT_STAGE"); + auto lightStage = context->_scene->getStage(LightStage::getName()); std::vector keyLightStack; if (lightStage && lightStage->_currentFrame._sunLights.size()) { for (auto index : lightStage->_currentFrame._sunLights) { keyLightStack.push_back(lightStage->getLight(index)); } } - // keyLightStack.push_back(lightStage->getLight(0)); std::vector ambientLightStack; if (lightStage && lightStage->_currentFrame._ambientLights.size()) { @@ -151,9 +150,8 @@ void DebugZoneLighting::run(const render::RenderContextPointer& context, const I ambientLightStack.push_back(lightStage->getLight(index)); } } - // ambientLightStack.push_back(lightStage->getLight(0)); - auto backgroundStage = context->_scene->getStage("BACKGROUND_STAGE"); + auto backgroundStage = context->_scene->getStage(BackgroundStage::getName()); std::vector skyboxStack; if (backgroundStage && backgroundStage->_currentFrame._backgrounds.size()) { for (auto index : backgroundStage->_currentFrame._backgrounds) { @@ -162,8 +160,7 @@ void DebugZoneLighting::run(const render::RenderContextPointer& context, const I skyboxStack.push_back(background->getSkybox()); } } - } - // skyboxStack.push_back(backgroundStage->getBackground(0)->getSkybox()); + } gpu::doInBatch(args->_context, [=](gpu::Batch& batch) { diff --git a/tests/gpu-test/src/TestWindow.cpp b/tests/gpu-test/src/TestWindow.cpp index 5b5102701a..39043805b8 100644 --- a/tests/gpu-test/src/TestWindow.cpp +++ b/tests/gpu-test/src/TestWindow.cpp @@ -77,7 +77,6 @@ void TestWindow::initGl() { #ifdef DEFERRED_LIGHTING auto deferredLightingEffect = DependencyManager::get(); deferredLightingEffect->init(); - // deferredLightingEffect->setGlobalLight(_light); initDeferredPipelines(*_shapePlumber); #endif } diff --git a/tests/render-perf/src/main.cpp b/tests/render-perf/src/main.cpp index 2b91a36b48..ce47a896aa 100644 --- a/tests/render-perf/src/main.cpp +++ b/tests/render-perf/src/main.cpp @@ -889,11 +889,6 @@ private: BackgroundRenderData::_item = _main3DScene->allocateID(); transaction.resetItem(BackgroundRenderData::_item, backgroundRenderPayload); } - // Setup the current Zone Entity lighting - { - auto stage = DependencyManager::get()->getSkyStage(); - // DependencyManager::get()->setGlobalLight(stage->getSunLight()); - } { PerformanceTimer perfTimer("SceneProcessTransaction"); @@ -914,8 +909,6 @@ private: PerformanceTimer perfTimer("draw"); // The pending changes collecting the changes here render::Transaction transaction; - // Setup the current Zone Entity lighting - // DependencyManager::get()->setGlobalLight(_sunSkyStage.getSunLight()); { PerformanceTimer perfTimer("SceneProcessTransaction"); _main3DScene->enqueueTransaction(transaction); From a8086764dae94e8195d939d69ed76a03e8d99d2f Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Fri, 7 Jul 2017 12:19:22 +0200 Subject: [PATCH 0820/1049] REmoving warnings for unused var --- libraries/render-utils/src/DeferredLightingEffect.cpp | 6 +++--- libraries/render-utils/src/DeferredLightingEffect.h | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index 5f18916a92..7b1ea1768d 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -740,8 +740,8 @@ void DefaultLightingSetup::run(const RenderContextPointer& renderContext) { _defaultLight = lp; // Add the global light to the light stage (for later shadow rendering) - auto defaultLightID = lightStage->addLight(lp); - lightStage->addShadow(defaultLightID); + _defaultLightID = lightStage->addLight(lp); + lightStage->addShadow(_defaultLightID); } auto backgroundStage = renderContext->_scene->getStage(); @@ -754,7 +754,7 @@ void DefaultLightingSetup::run(const RenderContextPointer& renderContext) { _defaultBackground = background; // Add the global light to the light stage (for later shadow rendering) - auto defaultBackgroundID = backgroundStage->addBackground(_defaultBackground); + _defaultBackgroundID = backgroundStage->addBackground(_defaultBackground); } } } diff --git a/libraries/render-utils/src/DeferredLightingEffect.h b/libraries/render-utils/src/DeferredLightingEffect.h index 7fc9600d18..a4d62ea407 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.h +++ b/libraries/render-utils/src/DeferredLightingEffect.h @@ -180,7 +180,9 @@ public: protected: model::LightPointer _defaultLight; + LightStage::Index _defaultLightID{ LightStage::INVALID_INDEX }; model::SunSkyStagePointer _defaultBackground; + BackgroundStage::Index _defaultBackgroundID{ BackgroundStage::INVALID_INDEX }; model::SkyboxPointer _defaultSkybox { new ProceduralSkybox() }; gpu::TexturePointer _defaultSkyboxTexture; gpu::TexturePointer _defaultSkyboxAmbientTexture; From ea77557e387500c6342077d6344f05cbe9a3d678 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 7 Jul 2017 08:08:52 -0700 Subject: [PATCH 0821/1049] Correctly close PAL when switching domains --- scripts/system/pal.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/system/pal.js b/scripts/system/pal.js index 0500c13f9b..264066558e 100644 --- a/scripts/system/pal.js +++ b/scripts/system/pal.js @@ -865,6 +865,9 @@ function avatarDisconnected(nodeID) { function clearLocalQMLDataAndClosePAL() { sendToQml({ method: 'clearLocalQMLData' }); + if (onPalScreen) { + tablet.gotoHomeScreen(); + } } function avatarAdded(avatarID) { From 88c39f3237ecaa00fc713114f86295b00fdafd6b Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Fri, 7 Jul 2017 09:15:42 -0700 Subject: [PATCH 0822/1049] off-by-one --- libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 664b9f5959..20a85331d9 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1041,7 +1041,7 @@ int Avatar::getJointIndex(const QString& name) const { withValidJointIndicesCache([&]() { if (_jointIndicesCache.contains(name)) { - result = _jointIndicesCache[name]; + result = _jointIndicesCache[name] - 1; } }); return result; From c3dd25e4994837de299a3928f855f4f1a6e97ecc Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Fri, 7 Jul 2017 18:26:10 +0200 Subject: [PATCH 0823/1049] Drafting the mechanism to add shape pipeline --- .../RenderableParticleEffectEntityItem.cpp | 9 ++++++++ libraries/render/src/render/DrawTask.cpp | 23 +++++++++++++++++-- libraries/render/src/render/Item.h | 4 ++++ libraries/render/src/render/ShapePipeline.h | 20 ++++++++++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 10bd70be13..5ea8af4d7a 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -142,6 +142,15 @@ namespace render { payload->render(args); } } + template <> + const ShapeKey shapeGetShapeKey(const ParticlePayloadData::Pointer& payload) { + return ShapeKey::Builder().withCustom(75).build(); + } + + template <> + bool shapeDefineCustomShapePipeline(const ParticlePayloadData::Pointer& payload, ShapePlumber& plumber, const ShapeKey& key) { + return false; + } } diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index 13d454e393..ce6e26faf2 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -44,10 +44,17 @@ void renderShape(RenderArgs* args, const ShapePlumberPointer& shapeContext, cons auto key = item.getShapeKey() | globalKey; if (key.isValid() && !key.hasOwnPipeline()) { args->_pipeline = shapeContext->pickPipeline(args, key); + if (!args->_pipeline) { + if (key.isCustom()) { + if (item.defineCustomShapePipeline(*shapeContext, key)) { + args->_pipeline = shapeContext->pickPipeline(args, key); + } + } + } if (args->_pipeline) { args->_pipeline->prepareShapeItem(args, key, item); item.render(args); - } + } args->_pipeline = nullptr; } else if (key.hasOwnPipeline()) { item.render(args); @@ -111,7 +118,19 @@ void render::renderStateSortShapes(const RenderContextPointer& renderContext, for (auto& pipelineKey : sortedPipelines) { auto& bucket = sortedShapes[pipelineKey]; args->_pipeline = shapeContext->pickPipeline(args, pipelineKey); - if (!args->_pipeline) { + if (!args->_pipeline) { + if (pipelineKey.isCustom()) { + if (bucket.front().defineCustomShapePipeline(*shapeContext, pipelineKey)) { + args->_pipeline = shapeContext->pickPipeline(args, pipelineKey); + if (!args->_pipeline) { + + } else { + continue; + } + } else { + continue; + } + } continue; } for (auto& item : bucket) { diff --git a/libraries/render/src/render/Item.h b/libraries/render/src/render/Item.h index 007b34395d..8ec80a7d7e 100644 --- a/libraries/render/src/render/Item.h +++ b/libraries/render/src/render/Item.h @@ -320,6 +320,7 @@ public: virtual void render(RenderArgs* args) = 0; virtual const ShapeKey getShapeKey() const = 0; + virtual bool defineCustomShapePipeline(ShapePlumber& plumber, const ShapeKey& key) const = 0; virtual uint32_t fetchMetaSubItems(ItemIDs& subItems) const = 0; @@ -369,6 +370,7 @@ public: // Shape Type Interface const ShapeKey getShapeKey() const { return _payload->getShapeKey(); } + bool defineCustomShapePipeline(ShapePlumber& plumber, const ShapeKey& key) const { return _payload->defineCustomShapePipeline(plumber, key); } // Meta Type Interface uint32_t fetchMetaSubItems(ItemIDs& subItems) const { return _payload->fetchMetaSubItems(subItems); } @@ -415,6 +417,7 @@ template void payloadRender(const std::shared_ptr& payloadData, Ren // When creating a new shape payload you need to create a specialized version, or the ShapeKey will be ownPipeline, // implying that the shape will setup its own pipeline without the use of the ShapeKey. template const ShapeKey shapeGetShapeKey(const std::shared_ptr& payloadData) { return ShapeKey::Builder::ownPipeline(); } +template bool shapeDefineCustomShapePipeline(const std::shared_ptr& payloadData, ShapePlumber& plumber, const ShapeKey& key) { return false; } // Meta Type Interface // Meta items act as the grouping object for several sub items (typically shapes). @@ -441,6 +444,7 @@ public: // Shape Type interface virtual const ShapeKey getShapeKey() const override { return shapeGetShapeKey(_data); } + virtual bool defineCustomShapePipeline(ShapePlumber& plumber, const ShapeKey& key) const override { return shapeDefineCustomShapePipeline(_data, plumber, key); } // Meta Type Interface virtual uint32_t fetchMetaSubItems(ItemIDs& subItems) const override { return metaFetchMetaSubItems(_data, subItems); } diff --git a/libraries/render/src/render/ShapePipeline.h b/libraries/render/src/render/ShapePipeline.h index 7b2eff994f..afc0eac011 100644 --- a/libraries/render/src/render/ShapePipeline.h +++ b/libraries/render/src/render/ShapePipeline.h @@ -39,7 +39,19 @@ public: OWN_PIPELINE, INVALID, + CUSTOM_0, + CUSTOM_1, + CUSTOM_2, + CUSTOM_3, + CUSTOM_4, + CUSTOM_5, + CUSTOM_6, + CUSTOM_7, + NUM_FLAGS, // Not a valid flag + + CUSTOM_MASK = (0xFF << CUSTOM_0), + }; using Flags = std::bitset; @@ -74,6 +86,8 @@ public: Builder& withOwnPipeline() { _flags.set(OWN_PIPELINE); return (*this); } Builder& invalidate() { _flags.set(INVALID); return (*this); } + Builder& withCustom(uint8_t custom) { _flags &= (~CUSTOM_MASK); _flags |= (custom << CUSTOM_0); return (*this); } + static const ShapeKey ownPipeline() { return Builder().withOwnPipeline(); } static const ShapeKey invalid() { return Builder().invalidate(); } @@ -128,6 +142,9 @@ public: Builder& withCullFace() { _flags.reset(NO_CULL_FACE); _mask.set(NO_CULL_FACE); return (*this); } Builder& withoutCullFace() { _flags.set(NO_CULL_FACE); _mask.set(NO_CULL_FACE); return (*this); } + Builder& withCustom(uint8_t custom) { _flags &= (~CUSTOM_MASK); _flags |= (custom << CUSTOM_0); _mask |= (CUSTOM_MASK); return (*this); } + Builder& withoutCustom() { _flags &= (~CUSTOM_MASK); _mask |= (CUSTOM_MASK); return (*this); } + protected: friend class Filter; Flags _flags{0}; @@ -156,6 +173,9 @@ public: bool hasOwnPipeline() const { return _flags[OWN_PIPELINE]; } bool isValid() const { return !_flags[INVALID]; } + uint8_t getCustom() const { return (_flags.to_ulong() & CUSTOM_MASK) >> CUSTOM_0; } + bool isCustom() const { return (_flags.to_ulong() & CUSTOM_MASK); } + // Comparator for use in stl containers class Hash { public: From bd8d6280a8a4636648b840c2fcfb8d80abe756b8 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 7 Jul 2017 09:29:57 -0700 Subject: [PATCH 0824/1049] Interpolate out of ik chains when they are disabled --- libraries/animation/src/AnimInverseKinematics.cpp | 14 ++++++++++++-- libraries/animation/src/IKTarget.h | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index 7e13c13650..a0cb8432d9 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -252,6 +252,14 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< jointChainInfoVec[i].jointInfoVec[j].rot = safeMix(_prevJointChainInfoVec[i].jointInfoVec[j].rot, jointChainInfoVec[i].jointInfoVec[j].rot, alpha); jointChainInfoVec[i].jointInfoVec[j].trans = lerp(_prevJointChainInfoVec[i].jointInfoVec[j].trans, jointChainInfoVec[i].jointInfoVec[j].trans, alpha); } + + // if joint chain was just disabled, ramp the weight toward zero. + if (_prevJointChainInfoVec[i].target.getType() != IKTarget::Type::Unknown && + jointChainInfoVec[i].target.getType() == IKTarget::Type::Unknown) { + IKTarget newTarget = _prevJointChainInfoVec[i].target; + newTarget.setWeight(alpha); + jointChainInfoVec[i].target = newTarget; + } } } } @@ -336,6 +344,7 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< } } + // copy jointChainInfoVec into _prevJointChainInfoVec, and update timers for (size_t i = 0; i < jointChainInfoVec.size(); i++) { _prevJointChainInfoVec[i].timer = _prevJointChainInfoVec[i].timer - dt; if (_prevJointChainInfoVec[i].timer <= 0.0f) { @@ -888,7 +897,7 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars { PROFILE_RANGE_EX(simulation_animation, "ik/jointChainInfo", 0xffff00ff, 0); - // initialize a new jointChainInfoVec, this will holds the results for solving each ik chain. + // initialize a new jointChainInfoVec, this will hold the results for solving each ik chain. JointInfo defaultJointInfo = { glm::quat(), glm::vec3(), -1, false }; for (size_t i = 0; i < targets.size(); i++) { size_t chainDepth = (size_t)_skeleton->getChainDepth(targets[i].getIndex()); @@ -902,6 +911,7 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars } } + // identity joint chains that have changed types this frame. _prevJointChainInfoVec.resize(jointChainInfoVec.size()); for (size_t i = 0; i < _prevJointChainInfoVec.size(); i++) { if (_prevJointChainInfoVec[i].timer <= 0.0f && @@ -923,7 +933,7 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars int parentIndex = _skeleton->getParentIndex(targets[_hipsTargetIndex].getIndex()); AnimPose parentAbsPose = _skeleton->getAbsolutePose(parentIndex, _relativePoses); - // do smooth interpolation of hips here, if necessary. + // do smooth interpolation of hips, if necessary. if (_prevJointChainInfoVec[_hipsTargetIndex].timer > 0.0f) { float alpha = (JOINT_CHAIN_INTERP_TIME - _prevJointChainInfoVec[_hipsTargetIndex].timer) / JOINT_CHAIN_INTERP_TIME; diff --git a/libraries/animation/src/IKTarget.h b/libraries/animation/src/IKTarget.h index a86ae0ca8b..325a1b40b6 100644 --- a/libraries/animation/src/IKTarget.h +++ b/libraries/animation/src/IKTarget.h @@ -56,7 +56,7 @@ private: glm::vec3 _poleReferenceVector; bool _poleVectorEnabled { false }; int _index { -1 }; - Type _type { Type::RotationAndPosition }; + Type _type { Type::Unknown }; float _weight { 0.0f }; float _flexCoefficients[MAX_FLEX_COEFFICIENTS]; size_t _numFlexCoefficients; From bff54d260e4db966d34bfe32ed517c33bd7ffc2e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 7 Jul 2017 10:11:13 -0700 Subject: [PATCH 0825/1049] fix for baking FBX with external textures --- tools/oven/src/FBXBaker.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/oven/src/FBXBaker.cpp b/tools/oven/src/FBXBaker.cpp index 8a72784d7c..0259a6baf8 100644 --- a/tools/oven/src/FBXBaker.cpp +++ b/tools/oven/src/FBXBaker.cpp @@ -354,8 +354,8 @@ void FBXBaker::rewriteAndBakeSceneTextures() { FbxFileTexture* fileTexture = property.GetSrcObject(j); // use QFileInfo to easily split up the existing texture filename into its components - QString fbxFileName { fileTexture->GetFileName() }; - QFileInfo textureFileInfo { fbxFileName.replace("\\", "/") }; + QString fbxTextureFileName { fileTexture->GetFileName() }; + QFileInfo textureFileInfo { fbxTextureFileName.replace("\\", "/") }; // make sure this texture points to something and isn't one we've already re-mapped if (!textureFileInfo.filePath().isEmpty() @@ -372,6 +372,9 @@ void FBXBaker::rewriteAndBakeSceneTextures() { qCDebug(model_baking).noquote() << "Re-mapping" << fileTexture->GetFileName() << "to" << bakedTextureFilePath; + // figure out the URL to this texture, embedded or external + auto urlToTexture = getTextureURL(textureFileInfo, fileTexture); + // write the new filename into the FBX scene fileTexture->SetFileName(bakedTextureFilePath.toLocal8Bit()); @@ -379,9 +382,6 @@ void FBXBaker::rewriteAndBakeSceneTextures() { // be right beside the FBX fileTexture->SetRelativeFileName(bakedTextureFileName.toLocal8Bit().constData()); - // figure out the URL to this texture, embedded or external - auto urlToTexture = getTextureURL(textureFileInfo, fileTexture); - if (!_bakingTextures.contains(urlToTexture)) { // bake this texture asynchronously bakeTexture(urlToTexture, textureType, _uniqueOutputPath + BAKED_OUTPUT_SUBFOLDER); From e22a3c6af97eb7646f9de612d66a11866ff6a8d1 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 6 Jul 2017 18:01:26 -0700 Subject: [PATCH 0826/1049] Fixing overlay crashes, for real --- interface/src/ui/overlays/Overlays.cpp | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index 399c730dbd..bcf9897dd8 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -307,6 +307,7 @@ void Overlays::deleteOverlay(OverlayID id) { } #endif + _overlaysToDelete.push_back(overlayToDelete); emit overlayDeleted(id); } @@ -606,22 +607,16 @@ QSizeF Overlays::textSize(OverlayID id, const QString& text) { return result; } - Overlay::Pointer thisOverlay; - { - QMutexLocker locker(&_mutex); - thisOverlay = _overlaysHUD[id]; - } + Overlay::Pointer thisOverlay = getOverlay(id); if (thisOverlay) { - if (auto textOverlay = std::dynamic_pointer_cast(thisOverlay)) { - return textOverlay->textSize(text); - } - } else { - { - QMutexLocker locker(&_mutex); - thisOverlay = _overlaysWorld[id]; - } - if (auto text3dOverlay = std::dynamic_pointer_cast(thisOverlay)) { - return text3dOverlay->textSize(text); + if (thisOverlay->is3D()) { + if (auto text3dOverlay = std::dynamic_pointer_cast(thisOverlay)) { + return text3dOverlay->textSize(text); + } + } else { + if (auto textOverlay = std::dynamic_pointer_cast(thisOverlay)) { + return textOverlay->textSize(text); + } } } return QSizeF(0.0f, 0.0f); From 688b5dad8b9077407122e43b7580849fdc1f7ecb Mon Sep 17 00:00:00 2001 From: David Kelly Date: Fri, 7 Jul 2017 10:34:11 -0700 Subject: [PATCH 0827/1049] allow switching display modes to work in desktop --- scripts/system/spectatorCamera.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 7a1fb5a406..31f9406969 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -220,9 +220,12 @@ var url = (camera) ? (showCameraView ? "resource://spectatorCameraFrame" : "resource://hmdPreviewFrame") : ""; sendToQml({ method: 'showPreviewTextureNotInstructions', setting: !!url, url: url}); + // FIXME: temporary hack to avoid setting the display texture to hmdPreviewFrame // until it is the correct mono. - if (url != "resource://hmdPreviewFrame") { + if (url === "resource://hmdPreviewFrame") { + Window.setDisplayTexture(""); + } else { Window.setDisplayTexture(url); } } From 6782a891d04c0ae887c68c09386b8d7a0b0d1282 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Fri, 7 Jul 2017 10:35:45 -0700 Subject: [PATCH 0828/1049] rename the joint-name caches in AvatarData and Avatar so it's more clear that they are different --- .../src/avatars-renderer/Avatar.cpp | 24 +++++++++---------- .../src/avatars-renderer/Avatar.h | 6 ++--- libraries/avatars/src/AvatarData.cpp | 18 +++++++------- libraries/avatars/src/AvatarData.h | 4 ++-- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 20a85331d9..7e1e51572f 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1009,23 +1009,23 @@ glm::vec3 Avatar::getAbsoluteJointTranslationInObjectFrame(int index) const { } void Avatar::invalidateJointIndicesCache() const { - QWriteLocker writeLock(&_jointIndicesCacheLock); - _jointsCached = false; + QWriteLocker writeLock(&_modelJointIndicesCacheLock); + _modelJointsCached = false; } void Avatar::withValidJointIndicesCache(std::function const& worker) const { - QReadLocker readLock(&_jointIndicesCacheLock); - if (_jointsCached) { + QReadLocker readLock(&_modelJointIndicesCacheLock); + if (_modelJointsCached) { worker(); } else { readLock.unlock(); { - QWriteLocker writeLock(&_jointIndicesCacheLock); - if (!_jointsCached) { - _jointIndicesCache.clear(); + QWriteLocker writeLock(&_modelJointIndicesCacheLock); + if (!_modelJointsCached) { + _modelJointIndicesCache.clear(); if (_skeletonModel && _skeletonModel->isActive()) { - _jointIndicesCache = _skeletonModel->getFBXGeometry().jointIndices; - _jointsCached = true; + _modelJointIndicesCache = _skeletonModel->getFBXGeometry().jointIndices; + _modelJointsCached = true; } } worker(); @@ -1040,8 +1040,8 @@ int Avatar::getJointIndex(const QString& name) const { } withValidJointIndicesCache([&]() { - if (_jointIndicesCache.contains(name)) { - result = _jointIndicesCache[name] - 1; + if (_modelJointIndicesCache.contains(name)) { + result = _modelJointIndicesCache[name] - 1; } }); return result; @@ -1050,7 +1050,7 @@ int Avatar::getJointIndex(const QString& name) const { QStringList Avatar::getJointNames() const { QStringList result; withValidJointIndicesCache([&]() { - result = _jointIndicesCache.keys(); + result = _modelJointIndicesCache.keys(); }); return result; } diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index ce7e53656e..89db519abc 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -270,9 +270,9 @@ protected: void invalidateJointIndicesCache() const; void withValidJointIndicesCache(std::function const& worker) const; - mutable QHash _jointIndicesCache; - mutable QReadWriteLock _jointIndicesCacheLock; - mutable bool _jointsCached { false }; + mutable QHash _modelJointIndicesCache; + mutable QReadWriteLock _modelJointIndicesCacheLock; + mutable bool _modelJointsCached { false }; glm::vec3 _skeletonOffset; std::vector> _attachmentModels; diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 6eed23fb5b..cc64d21f0f 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1462,12 +1462,12 @@ int AvatarData::getJointIndex(const QString& name) const { return result; } QReadLocker readLock(&_jointDataLock); - return _jointIndices.value(name) - 1; + return _fstJointIndices.value(name) - 1; } QStringList AvatarData::getJointNames() const { QReadLocker readLock(&_jointDataLock); - return _jointNames; + return _fstJointNames; } glm::quat AvatarData::getOrientationOutbound() const { @@ -1720,14 +1720,14 @@ void AvatarData::setJointMappingsFromNetworkReply() { bool ok; int jointIndex = line.mid(secondSeparatorIndex + 1).trimmed().toInt(&ok); if (ok) { - while (_jointNames.size() < jointIndex + 1) { - _jointNames.append(QString()); + while (_fstJointNames.size() < jointIndex + 1) { + _fstJointNames.append(QString()); } - _jointNames[jointIndex] = jointName; + _fstJointNames[jointIndex] = jointName; } } - for (int i = 0; i < _jointNames.size(); i++) { - _jointIndices.insert(_jointNames.at(i), i + 1); + for (int i = 0; i < _fstJointNames.size(); i++) { + _fstJointIndices.insert(_fstJointNames.at(i), i + 1); } } @@ -1781,8 +1781,8 @@ void AvatarData::sendIdentityPacket() { void AvatarData::updateJointMappings() { { QWriteLocker writeLock(&_jointDataLock); - _jointIndices.clear(); - _jointNames.clear(); + _fstJointIndices.clear(); + _fstJointNames.clear(); _jointData.clear(); } diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index d6241c2c50..1f672328ba 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -704,8 +704,8 @@ protected: QString _displayName; QString _sessionDisplayName { }; - QHash _jointIndices; ///< 1-based, since zero is returned for missing keys - QStringList _jointNames; ///< in order of depth-first traversal + QHash _fstJointIndices; ///< 1-based, since zero is returned for missing keys + QStringList _fstJointNames; ///< in order of depth-first traversal quint64 _errorLogExpiry; ///< time in future when to log an error From 060e3a9c5afdaa3ddbf15d37b87cdd81456f77d8 Mon Sep 17 00:00:00 2001 From: Liv Date: Fri, 7 Jul 2017 11:48:12 -0700 Subject: [PATCH 0829/1049] Add signal for avatar skeleton changing --- interface/src/avatar/MyAvatar.cpp | 1 + interface/src/avatar/MyAvatar.h | 1 + 2 files changed, 2 insertions(+) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index afbcd170e5..f6fb87dad9 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1356,6 +1356,7 @@ void MyAvatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { Avatar::setSkeletonModelURL(skeletonModelURL); _skeletonModel->setVisibleInScene(true, qApp->getMain3DScene()); _headBoneSet.clear(); + emit skeletonChanged(); } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 8ad4bf4436..4d599230fb 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -606,6 +606,7 @@ signals: void onLoadComplete(); void wentAway(); void wentActive(); + void skeletonChanged(); private: From 77001712abec8cba03815bfaf2a1c3acabd8b041 Mon Sep 17 00:00:00 2001 From: 1P-Cusack <1p-cusack@1stplayable.com> Date: Fri, 7 Jul 2017 15:35:32 -0400 Subject: [PATCH 0830/1049] Default 'Enter First Person Mode in HMD' to true. --- interface/src/Menu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 9bda575305..042719362b 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -259,7 +259,7 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::Overlays, 0, true); // View > Enter First Person Mode in HMD - addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::FirstPersonHMD, 0, false); + addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::FirstPersonHMD, 0, true); // Navigate menu ---------------------------------- MenuWrapper* navigateMenu = addMenu("Navigate"); From f18e64ed1aed5d3a7f765588a6d936619b1f31cb Mon Sep 17 00:00:00 2001 From: David Kelly Date: Fri, 7 Jul 2017 15:53:29 -0700 Subject: [PATCH 0831/1049] first pass at blitting correct hmd preview (in mono) --- .../display-plugins/OpenGLDisplayPlugin.cpp | 12 ++++++++- .../src/display-plugins/OpenGLDisplayPlugin.h | 1 + .../display-plugins/hmd/HmdDisplayPlugin.cpp | 6 ++--- .../src/model-networking/TextureCache.cpp | 26 ++++++++++++------- .../src/model-networking/TextureCache.h | 3 ++- 5 files changed, 34 insertions(+), 14 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index 63df7fdda9..e5de6fce8a 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -497,16 +497,26 @@ void OpenGLDisplayPlugin::submitFrame(const gpu::FramePointer& newFrame) { _newFrameQueue.push(newFrame); }); } + void OpenGLDisplayPlugin::renderFromTexture(gpu::Batch& batch, const gpu::TexturePointer texture, glm::ivec4 viewport, const glm::ivec4 scissor) { + renderFromTexture(batch, texture, viewport, scissor, gpu::FramebufferPointer()); +} + +void OpenGLDisplayPlugin::renderFromTexture(gpu::Batch& batch, const gpu::TexturePointer texture, glm::ivec4 viewport, const glm::ivec4 scissor, gpu::FramebufferPointer copyFbo /*=gpu::FramebufferPointer()*/) { + auto fbo = gpu::FramebufferPointer(); batch.enableStereo(false); batch.resetViewTransform(); - batch.setFramebuffer(gpu::FramebufferPointer()); + batch.setFramebuffer(fbo); batch.clearColorFramebuffer(gpu::Framebuffer::BUFFER_COLOR0, vec4(0)); batch.setStateScissorRect(scissor); batch.setViewportTransform(viewport); batch.setResourceTexture(0, texture); batch.setPipeline(_presentPipeline); batch.draw(gpu::TRIANGLE_STRIP, 4); + if (copyFbo) { + gpu::Vec4i rect {0, 0, scissor.z, scissor.w}; + batch.blit(fbo, rect, copyFbo, rect); + } } void OpenGLDisplayPlugin::updateFrameData() { diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h index 237864ded6..2f93fa630d 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h @@ -113,6 +113,7 @@ protected: // Plugin specific functionality to send the composed scene to the output window or device virtual void internalPresent(); + void renderFromTexture(gpu::Batch& batch, const gpu::TexturePointer texture, glm::ivec4 viewport, const glm::ivec4 scissor, gpu::FramebufferPointer fbo); void renderFromTexture(gpu::Batch& batch, const gpu::TexturePointer texture, glm::ivec4 viewport, const glm::ivec4 scissor); virtual void updateFrameData(); diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index aed99da920..656d3013ab 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -242,7 +242,6 @@ void HmdDisplayPlugin::internalPresent() { glm::ivec4 viewport = getViewportForSourceSize(sourceSize); glm::ivec4 scissor = viewport; - render([&](gpu::Batch& batch) { if (_monoPreview) { @@ -287,10 +286,11 @@ void HmdDisplayPlugin::internalPresent() { viewport.z *= 2; } - DependencyManager::get()->setHmdPreviewTexture(_compositeFramebuffer->getRenderBuffer(0)); - renderFromTexture(batch, _compositeFramebuffer->getRenderBuffer(0), viewport, scissor); + auto fbo = DependencyManager::get()->getHmdPreviewFramebuffer(); + renderFromTexture(batch, _compositeFramebuffer->getRenderBuffer(0), viewport, scissor, fbo); }); swapBuffers(); + } else if (_clearPreviewFlag) { QImage image; if (_vsyncEnabled) { diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index a01979730f..c511db28ac 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -970,13 +970,6 @@ void ImageReader::read() { Q_ARG(int, texture->getHeight())); } -void TextureCache::setHmdPreviewTexture(gpu::TexturePointer texturePointer) { - if (!_hmdPreviewNetworkTexture) { - _hmdPreviewNetworkTexture.reset(new NetworkTexture(HMD_PREVIEW_FRAME_URL)); - } - _hmdPreviewNetworkTexture->setImage(texturePointer, texturePointer->getWidth(), texturePointer->getHeight()); -} - NetworkTexturePointer TextureCache::getResourceTexture(QUrl resourceTextureUrl) { gpu::TexturePointer texture; if (resourceTextureUrl == SPECTATOR_CAMERA_FRAME_URL) { @@ -991,15 +984,30 @@ NetworkTexturePointer TextureCache::getResourceTexture(QUrl resourceTextureUrl) } } } + // FIXME: Generalize this, DRY up this code if (resourceTextureUrl == HMD_PREVIEW_FRAME_URL) { - if (_hmdPreviewNetworkTexture) { - return _hmdPreviewNetworkTexture; + if (!_hmdPreviewNetworkTexture) { + _hmdPreviewNetworkTexture.reset(new NetworkTexture(resourceTextureUrl)); + } + if (_hmdPreviewFramebuffer) { + texture = _hmdPreviewFramebuffer->getRenderBuffer(0); + if (texture) { + _hmdPreviewNetworkTexture->setImage(texture, texture->getWidth(), texture->getHeight()); + return _hmdPreviewNetworkTexture; + } } } return NetworkTexturePointer(); } +const gpu::FramebufferPointer& TextureCache::getHmdPreviewFramebuffer() { + if (!_hmdPreviewFramebuffer) { + _hmdPreviewFramebuffer.reset(gpu::Framebuffer::create("hmdPreview",gpu::Element::COLOR_SRGBA_32, 2040, 1024)); + } + return _hmdPreviewFramebuffer; +} + const gpu::FramebufferPointer& TextureCache::getSpectatorCameraFramebuffer() { if (!_spectatorCameraFramebuffer) { resetSpectatorCameraFramebuffer(2048, 1024); diff --git a/libraries/model-networking/src/model-networking/TextureCache.h b/libraries/model-networking/src/model-networking/TextureCache.h index 7e3d421ad0..8b7607d04d 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.h +++ b/libraries/model-networking/src/model-networking/TextureCache.h @@ -170,7 +170,7 @@ public: NetworkTexturePointer getResourceTexture(QUrl resourceTextureUrl); const gpu::FramebufferPointer& getSpectatorCameraFramebuffer(); void resetSpectatorCameraFramebuffer(int width, int height); - void setHmdPreviewTexture(gpu::TexturePointer texturePointer); + const gpu::FramebufferPointer& getHmdPreviewFramebuffer(); protected: // Overload ResourceCache::prefetch to allow specifying texture type for loads @@ -205,6 +205,7 @@ private: gpu::FramebufferPointer _spectatorCameraFramebuffer; NetworkTexturePointer _hmdPreviewNetworkTexture; + gpu::FramebufferPointer _hmdPreviewFramebuffer; }; #endif // hifi_TextureCache_h From 0778fbaea9a45446a2acacbb53b792d0ebe73845 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 7 Jul 2017 15:58:39 -0700 Subject: [PATCH 0832/1049] Fix Debug Mode Assert --- assignment-client/src/Agent.cpp | 3 +++ assignment-client/src/scripts/EntityScriptServer.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 8aec5adb1f..f9b8087f94 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -80,6 +81,8 @@ Agent::Agent(ReceivedMessage& message) : DependencyManager::set(); DependencyManager::set(); + + DebugDraw::getInstance(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); diff --git a/assignment-client/src/scripts/EntityScriptServer.cpp b/assignment-client/src/scripts/EntityScriptServer.cpp index 489478ff9a..e8ea14f399 100644 --- a/assignment-client/src/scripts/EntityScriptServer.cpp +++ b/assignment-client/src/scripts/EntityScriptServer.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -67,6 +68,8 @@ EntityScriptServer::EntityScriptServer(ReceivedMessage& message) : ThreadedAssig DependencyManager::set(); DependencyManager::set(ScriptEngine::ENTITY_SERVER_SCRIPT); + DebugDraw::getInstance(); + auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver.registerListenerForTypes({ PacketType::OctreeStats, PacketType::EntityData, PacketType::EntityErase }, this, "handleOctreePacket"); From e537c494e5ca343722e8a7d734a8c3ef003ad6a2 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 7 Jul 2017 16:00:27 -0700 Subject: [PATCH 0833/1049] Prevent Image3DOverlays from drifting --- interface/src/ui/overlays/Billboard3DOverlay.cpp | 8 +++++--- interface/src/ui/overlays/Billboard3DOverlay.h | 2 +- interface/src/ui/overlays/Billboardable.cpp | 4 +++- interface/src/ui/overlays/Billboardable.h | 2 +- interface/src/ui/overlays/Image3DOverlay.cpp | 8 +++++--- interface/src/ui/overlays/PanelAttachable.cpp | 4 +++- interface/src/ui/overlays/PanelAttachable.h | 2 +- 7 files changed, 19 insertions(+), 11 deletions(-) diff --git a/interface/src/ui/overlays/Billboard3DOverlay.cpp b/interface/src/ui/overlays/Billboard3DOverlay.cpp index 182e7da978..f5668caa71 100644 --- a/interface/src/ui/overlays/Billboard3DOverlay.cpp +++ b/interface/src/ui/overlays/Billboard3DOverlay.cpp @@ -37,9 +37,11 @@ QVariant Billboard3DOverlay::getProperty(const QString &property) { return Planar3DOverlay::getProperty(property); } -void Billboard3DOverlay::applyTransformTo(Transform& transform, bool force) { +bool Billboard3DOverlay::applyTransformTo(Transform& transform, bool force) { + bool transformChanged = false; if (force || usecTimestampNow() > _transformExpiry) { - PanelAttachable::applyTransformTo(transform, true); - pointTransformAtCamera(transform, getOffsetRotation()); + transformChanged = PanelAttachable::applyTransformTo(transform, true); + transformChanged |= pointTransformAtCamera(transform, getOffsetRotation()); } + return transformChanged; } diff --git a/interface/src/ui/overlays/Billboard3DOverlay.h b/interface/src/ui/overlays/Billboard3DOverlay.h index d256a92afe..d429537b5b 100644 --- a/interface/src/ui/overlays/Billboard3DOverlay.h +++ b/interface/src/ui/overlays/Billboard3DOverlay.h @@ -27,7 +27,7 @@ public: QVariant getProperty(const QString& property) override; protected: - virtual void applyTransformTo(Transform& transform, bool force = false) override; + virtual bool applyTransformTo(Transform& transform, bool force = false) override; }; #endif // hifi_Billboard3DOverlay_h diff --git a/interface/src/ui/overlays/Billboardable.cpp b/interface/src/ui/overlays/Billboardable.cpp index a01d62bfd1..34a4ef6df5 100644 --- a/interface/src/ui/overlays/Billboardable.cpp +++ b/interface/src/ui/overlays/Billboardable.cpp @@ -28,7 +28,7 @@ QVariant Billboardable::getProperty(const QString &property) { return QVariant(); } -void Billboardable::pointTransformAtCamera(Transform& transform, glm::quat offsetRotation) { +bool Billboardable::pointTransformAtCamera(Transform& transform, glm::quat offsetRotation) { if (isFacingAvatar()) { glm::vec3 billboardPos = transform.getTranslation(); glm::vec3 cameraPos = qApp->getCamera().getPosition(); @@ -38,5 +38,7 @@ void Billboardable::pointTransformAtCamera(Transform& transform, glm::quat offse glm::quat rotation(glm::vec3(elevation, azimuth, 0)); transform.setRotation(rotation); transform.postRotate(offsetRotation); + return true; } + return false; } diff --git a/interface/src/ui/overlays/Billboardable.h b/interface/src/ui/overlays/Billboardable.h index e2d29a2769..46d9ac6479 100644 --- a/interface/src/ui/overlays/Billboardable.h +++ b/interface/src/ui/overlays/Billboardable.h @@ -27,7 +27,7 @@ protected: void setProperties(const QVariantMap& properties); QVariant getProperty(const QString& property); - void pointTransformAtCamera(Transform& transform, glm::quat offsetRotation = {1, 0, 0, 0}); + bool pointTransformAtCamera(Transform& transform, glm::quat offsetRotation = {1, 0, 0, 0}); private: bool _isFacingAvatar = false; diff --git a/interface/src/ui/overlays/Image3DOverlay.cpp b/interface/src/ui/overlays/Image3DOverlay.cpp index c8c9c36a1d..601756c6fa 100644 --- a/interface/src/ui/overlays/Image3DOverlay.cpp +++ b/interface/src/ui/overlays/Image3DOverlay.cpp @@ -99,10 +99,12 @@ void Image3DOverlay::render(RenderArgs* args) { const float MAX_COLOR = 255.0f; xColor color = getColor(); float alpha = getAlpha(); - + Transform transform = getTransform(); - applyTransformTo(transform, true); - setTransform(transform); + bool transformChanged = applyTransformTo(transform, true); + if (transformChanged) { + setTransform(transform); + } transform.postScale(glm::vec3(getDimensions(), 1.0f)); batch->setModelTransform(transform); diff --git a/interface/src/ui/overlays/PanelAttachable.cpp b/interface/src/ui/overlays/PanelAttachable.cpp index 421155083c..aae8893667 100644 --- a/interface/src/ui/overlays/PanelAttachable.cpp +++ b/interface/src/ui/overlays/PanelAttachable.cpp @@ -61,7 +61,7 @@ void PanelAttachable::setProperties(const QVariantMap& properties) { } } -void PanelAttachable::applyTransformTo(Transform& transform, bool force) { +bool PanelAttachable::applyTransformTo(Transform& transform, bool force) { if (force || usecTimestampNow() > _transformExpiry) { const quint64 TRANSFORM_UPDATE_PERIOD = 100000; // frequency is 10 Hz _transformExpiry = usecTimestampNow() + TRANSFORM_UPDATE_PERIOD; @@ -71,7 +71,9 @@ void PanelAttachable::applyTransformTo(Transform& transform, bool force) { transform.postTranslate(getOffsetPosition()); transform.postRotate(getOffsetRotation()); transform.postScale(getOffsetScale()); + return true; } #endif } + return false; } diff --git a/interface/src/ui/overlays/PanelAttachable.h b/interface/src/ui/overlays/PanelAttachable.h index 4f37cd2258..1598aa4700 100644 --- a/interface/src/ui/overlays/PanelAttachable.h +++ b/interface/src/ui/overlays/PanelAttachable.h @@ -67,7 +67,7 @@ protected: /// set position, rotation and scale on transform based on offsets, and parent panel offsets /// if force is false, only apply transform if it hasn't been applied in the last .1 seconds - virtual void applyTransformTo(Transform& transform, bool force = false); + virtual bool applyTransformTo(Transform& transform, bool force = false); quint64 _transformExpiry = 0; private: From 420e9233b6e4d15d4969400ebc09db263b534935 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 7 Jul 2017 16:50:28 -0700 Subject: [PATCH 0834/1049] Revert "fix for invisible avatars after radius ignore" --- .../src/avatars/AvatarMixerClientData.cpp | 3 +++ interface/src/avatar/AvatarManager.cpp | 4 ++++ .../src/avatars-renderer/Avatar.cpp | 3 ++- libraries/avatars/src/AvatarHashMap.cpp | 7 +++++++ libraries/avatars/src/AvatarHashMap.h | 1 + libraries/networking/src/NodeList.cpp | 20 +++++++++++++++++++ libraries/networking/src/NodeList.h | 4 ++++ libraries/networking/src/udt/PacketHeaders.h | 1 + 8 files changed, 42 insertions(+), 1 deletion(-) diff --git a/assignment-client/src/avatars/AvatarMixerClientData.cpp b/assignment-client/src/avatars/AvatarMixerClientData.cpp index a4bf8fa253..4d80bc7d17 100644 --- a/assignment-client/src/avatars/AvatarMixerClientData.cpp +++ b/assignment-client/src/avatars/AvatarMixerClientData.cpp @@ -108,6 +108,9 @@ void AvatarMixerClientData::ignoreOther(SharedNodePointer self, SharedNodePointe void AvatarMixerClientData::removeFromRadiusIgnoringSet(SharedNodePointer self, const QUuid& other) { if (isRadiusIgnoring(other)) { _radiusIgnoredOthers.erase(other); + auto exitingSpaceBubblePacket = NLPacket::create(PacketType::ExitingSpaceBubble, NUM_BYTES_RFC4122_UUID); + exitingSpaceBubblePacket->write(other.toRfc4122()); + DependencyManager::get()->sendUnreliablePacket(*exitingSpaceBubblePacket, *self); } } diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 3272bc3255..c46d61cf68 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -63,6 +63,7 @@ AvatarManager::AvatarManager(QObject* parent) : packetReceiver.registerListener(PacketType::BulkAvatarData, this, "processAvatarDataPacket"); packetReceiver.registerListener(PacketType::KillAvatar, this, "processKillAvatar"); packetReceiver.registerListener(PacketType::AvatarIdentity, this, "processAvatarIdentityPacket"); + packetReceiver.registerListener(PacketType::ExitingSpaceBubble, this, "processExitingSpaceBubble"); // when we hear that the user has ignored an avatar by session UUID // immediately remove that avatar instead of waiting for the absence of packets from avatar mixer @@ -319,6 +320,9 @@ void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble) { emit DependencyManager::get()->enteredIgnoreRadius(); + } + if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble || removalReason == YourAvatarEnteredTheirBubble) { + DependencyManager::get()->radiusIgnoreNodeBySessionID(avatar->getSessionUUID(), true); } else if (removalReason == KillAvatarReason::AvatarDisconnected) { // remove from node sets, if present DependencyManager::get()->removeFromIgnoreMuteSets(avatar->getSessionUUID()); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 63009d7a28..d303b2e66d 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1440,7 +1440,8 @@ void Avatar::addToScene(AvatarSharedPointer myHandle, const render::ScenePointer if (scene) { auto nodelist = DependencyManager::get(); if (showAvatars - && !nodelist->isIgnoringNode(getSessionUUID())) { + && !nodelist->isIgnoringNode(getSessionUUID()) + && !nodelist->isRadiusIgnoringNode(getSessionUUID())) { render::Transaction transaction; addToScene(myHandle, scene, transaction); scene->enqueueTransaction(transaction); diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp index 3712080cdb..e8c37bdaa8 100644 --- a/libraries/avatars/src/AvatarHashMap.cpp +++ b/libraries/avatars/src/AvatarHashMap.cpp @@ -170,6 +170,13 @@ void AvatarHashMap::processKillAvatar(QSharedPointer message, S removeAvatar(sessionUUID, reason); } +void AvatarHashMap::processExitingSpaceBubble(QSharedPointer message, SharedNodePointer sendingNode) { + // read the node id + QUuid sessionUUID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID)); + auto nodeList = DependencyManager::get(); + nodeList->radiusIgnoreNodeBySessionID(sessionUUID, false); +} + void AvatarHashMap::removeAvatar(const QUuid& sessionUUID, KillAvatarReason removalReason) { QWriteLocker locker(&_hashLock); diff --git a/libraries/avatars/src/AvatarHashMap.h b/libraries/avatars/src/AvatarHashMap.h index 68fc232685..21ea8081c7 100644 --- a/libraries/avatars/src/AvatarHashMap.h +++ b/libraries/avatars/src/AvatarHashMap.h @@ -60,6 +60,7 @@ protected slots: void processAvatarDataPacket(QSharedPointer message, SharedNodePointer sendingNode); void processAvatarIdentityPacket(QSharedPointer message, SharedNodePointer sendingNode); void processKillAvatar(QSharedPointer message, SharedNodePointer sendingNode); + void processExitingSpaceBubble(QSharedPointer message, SharedNodePointer sendingNode); protected: AvatarHashMap(); diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 7c479e1bff..262f0318b6 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -241,6 +241,10 @@ void NodeList::reset() { _numNoReplyDomainCheckIns = 0; + // lock and clear our set of radius ignored IDs + _radiusIgnoredSetLock.lockForWrite(); + _radiusIgnoredNodeIDs.clear(); + _radiusIgnoredSetLock.unlock(); // lock and clear our set of ignored IDs _ignoredSetLock.lockForWrite(); _ignoredNodeIDs.clear(); @@ -806,6 +810,22 @@ void NodeList::sendIgnoreRadiusStateToNode(const SharedNodePointer& destinationN sendPacket(std::move(ignorePacket), *destinationNode); } +void NodeList::radiusIgnoreNodeBySessionID(const QUuid& nodeID, bool radiusIgnoreEnabled) { + if (radiusIgnoreEnabled) { + QReadLocker radiusIgnoredSetLocker{ &_radiusIgnoredSetLock }; // read lock for insert + // add this nodeID to our set of ignored IDs + _radiusIgnoredNodeIDs.insert(nodeID); + } else { + QWriteLocker radiusIgnoredSetLocker{ &_radiusIgnoredSetLock }; // write lock for unsafe_erase + _radiusIgnoredNodeIDs.unsafe_erase(nodeID); + } +} + +bool NodeList::isRadiusIgnoringNode(const QUuid& nodeID) const { + QReadLocker radiusIgnoredSetLocker{ &_radiusIgnoredSetLock }; // read lock for reading + return _radiusIgnoredNodeIDs.find(nodeID) != _radiusIgnoredNodeIDs.cend(); +} + void NodeList::ignoreNodeBySessionID(const QUuid& nodeID, bool ignoreEnabled) { // enumerate the nodes to send a reliable ignore packet to each that can leverage it if (!nodeID.isNull() && _sessionUUID != nodeID) { diff --git a/libraries/networking/src/NodeList.h b/libraries/networking/src/NodeList.h index b3a12153e5..6db760b3ca 100644 --- a/libraries/networking/src/NodeList.h +++ b/libraries/networking/src/NodeList.h @@ -77,6 +77,8 @@ public: void toggleIgnoreRadius() { ignoreNodesInRadius(!getIgnoreRadiusEnabled()); } void enableIgnoreRadius() { ignoreNodesInRadius(true); } void disableIgnoreRadius() { ignoreNodesInRadius(false); } + void radiusIgnoreNodeBySessionID(const QUuid& nodeID, bool radiusIgnoreEnabled); + bool isRadiusIgnoringNode(const QUuid& other) const; void ignoreNodeBySessionID(const QUuid& nodeID, bool ignoreEnabled); bool isIgnoringNode(const QUuid& nodeID) const; void personalMuteNodeBySessionID(const QUuid& nodeID, bool muteEnabled); @@ -164,6 +166,8 @@ private: QTimer _keepAlivePingTimer; bool _requestsDomainListData; + mutable QReadWriteLock _radiusIgnoredSetLock; + tbb::concurrent_unordered_set _radiusIgnoredNodeIDs; mutable QReadWriteLock _ignoredSetLock; tbb::concurrent_unordered_set _ignoredNodeIDs; mutable QReadWriteLock _personalMutedSetLock; diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index 848bfd97cf..6c42193e11 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -105,6 +105,7 @@ public: UsernameFromIDReply, ViewFrustum, RequestsDomainListData, + ExitingSpaceBubble, PerAvatarGainSet, EntityScriptGetStatus, EntityScriptGetStatusReply, From aa306c3450f048573e94fb6bb0ca0100c6871f4f Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 7 Jul 2017 17:01:07 -0700 Subject: [PATCH 0835/1049] Fix debug asserts on shutdown --- assignment-client/src/Agent.cpp | 1 + assignment-client/src/entities/EntityServer.cpp | 6 ++++++ assignment-client/src/entities/EntityServer.h | 2 ++ 3 files changed, 9 insertions(+) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index f9b8087f94..8710553027 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -801,6 +801,7 @@ void Agent::aboutToFinish() { emit stopAvatarAudioTimer(); _avatarAudioTimerThread.quit(); + _avatarAudioTimerThread.wait(); // cleanup codec & encoder if (_codec && _encoder) { diff --git a/assignment-client/src/entities/EntityServer.cpp b/assignment-client/src/entities/EntityServer.cpp index ac686e2e0a..2c8f8a9e37 100644 --- a/assignment-client/src/entities/EntityServer.cpp +++ b/assignment-client/src/entities/EntityServer.cpp @@ -50,6 +50,12 @@ EntityServer::~EntityServer() { tree->removeNewlyCreatedHook(this); } +void EntityServer::aboutToFinish() { + DependencyManager::get()->cleanup(); + + OctreeServer::aboutToFinish(); +} + void EntityServer::handleEntityPacket(QSharedPointer message, SharedNodePointer senderNode) { if (_octreeInboundPacketProcessor) { _octreeInboundPacketProcessor->queueReceivedPacket(message, senderNode); diff --git a/assignment-client/src/entities/EntityServer.h b/assignment-client/src/entities/EntityServer.h index 40676e79bd..26c2f149aa 100644 --- a/assignment-client/src/entities/EntityServer.h +++ b/assignment-client/src/entities/EntityServer.h @@ -59,6 +59,8 @@ public: virtual void trackSend(const QUuid& dataID, quint64 dataLastEdited, const QUuid& sessionID) override; virtual void trackViewerGone(const QUuid& sessionID) override; + virtual void aboutToFinish() override; + public slots: virtual void nodeAdded(SharedNodePointer node) override; virtual void nodeKilled(SharedNodePointer node) override; From 7160fca4f726044b5a4ee216be5bbe54d8f740c2 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 7 Jul 2017 17:14:08 -0700 Subject: [PATCH 0836/1049] Fix bad read access on shutdown --- assignment-client/src/audio/AudioMixerSlavePool.cpp | 2 +- assignment-client/src/avatars/AvatarMixerSlavePool.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/audio/AudioMixerSlavePool.cpp b/assignment-client/src/audio/AudioMixerSlavePool.cpp index 643361ac5d..d2c19d97ba 100644 --- a/assignment-client/src/audio/AudioMixerSlavePool.cpp +++ b/assignment-client/src/audio/AudioMixerSlavePool.cpp @@ -76,7 +76,7 @@ void AudioMixerSlavePool::processPackets(ConstIter begin, ConstIter end) { void AudioMixerSlavePool::mix(ConstIter begin, ConstIter end, unsigned int frame, float throttlingRatio) { _function = &AudioMixerSlave::mix; - _configure = [&](AudioMixerSlave& slave) { + _configure = [=](AudioMixerSlave& slave) { slave.configureMix(_begin, _end, _frame, _throttlingRatio); }; _frame = frame; diff --git a/assignment-client/src/avatars/AvatarMixerSlavePool.cpp b/assignment-client/src/avatars/AvatarMixerSlavePool.cpp index cb5ae7735a..8afbc1cfe4 100644 --- a/assignment-client/src/avatars/AvatarMixerSlavePool.cpp +++ b/assignment-client/src/avatars/AvatarMixerSlavePool.cpp @@ -69,7 +69,7 @@ static AvatarMixerSlave slave; void AvatarMixerSlavePool::processIncomingPackets(ConstIter begin, ConstIter end) { _function = &AvatarMixerSlave::processIncomingPackets; - _configure = [&](AvatarMixerSlave& slave) { + _configure = [=](AvatarMixerSlave& slave) { slave.configure(begin, end); }; run(begin, end); @@ -79,7 +79,7 @@ void AvatarMixerSlavePool::broadcastAvatarData(ConstIter begin, ConstIter end, p_high_resolution_clock::time_point lastFrameTimestamp, float maxKbpsPerNode, float throttlingRatio) { _function = &AvatarMixerSlave::broadcastAvatarData; - _configure = [&](AvatarMixerSlave& slave) { + _configure = [=](AvatarMixerSlave& slave) { slave.configureBroadcast(begin, end, lastFrameTimestamp, maxKbpsPerNode, throttlingRatio); }; run(begin, end); From d0c521d7b459aea96e488b306e198c27adab2976 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 7 Jul 2017 19:19:48 -0700 Subject: [PATCH 0837/1049] Add clarifying comment. --- interface/src/ui/overlays/Image3DOverlay.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/src/ui/overlays/Image3DOverlay.cpp b/interface/src/ui/overlays/Image3DOverlay.cpp index 601756c6fa..7dfee2c491 100644 --- a/interface/src/ui/overlays/Image3DOverlay.cpp +++ b/interface/src/ui/overlays/Image3DOverlay.cpp @@ -102,6 +102,8 @@ void Image3DOverlay::render(RenderArgs* args) { Transform transform = getTransform(); bool transformChanged = applyTransformTo(transform, true); + // If the transform is not modified, setting the transform to + // itself will cause drift over time due to floating point errors. if (transformChanged) { setTransform(transform); } From 7e9ea596a086fd0a1512938ae1cd7e60742b359b Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 7 Jul 2017 19:07:19 -0700 Subject: [PATCH 0838/1049] Add more efficient overlay getters, don't use blocking calls --- interface/src/ui/overlays/Overlays.cpp | 41 +++++++++++++++++++++----- interface/src/ui/overlays/Overlays.h | 4 +++ 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index bcf9897dd8..2f22b62306 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -414,20 +414,47 @@ OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { } OverlayPropertyResult Overlays::getProperty(OverlayID id, const QString& property) { - if (QThread::currentThread() != thread()) { - OverlayPropertyResult result; - BLOCKING_INVOKE_METHOD(this, "getProperty", Q_RETURN_ARG(OverlayPropertyResult, result), Q_ARG(OverlayID, id), Q_ARG(QString, property)); - return result; - } - - OverlayPropertyResult result; Overlay::Pointer thisOverlay = getOverlay(id); + OverlayPropertyResult result; if (thisOverlay && thisOverlay->supportsGetProperty()) { result.value = thisOverlay->getProperty(property); } return result; } +OverlayPropertyResult Overlays::getProperties(const OverlayID& id, const QStringList& properties) { + Overlay::Pointer thisOverlay = getOverlay(id); + OverlayPropertyResult result; + if (thisOverlay && thisOverlay->supportsGetProperty()) { + QVariantMap mapResult; + for (const auto& property : properties) { + mapResult.insert(property, thisOverlay->getProperty(property)); + } + result.value = mapResult; + } + return result; +} + +OverlayPropertyResult Overlays::getOverlaysProperties(const QVariant& propertiesById) { + QVariantMap map = propertiesById.toMap(); + OverlayPropertyResult result; + QVariantMap resultMap; + for (const auto& key : map.keys()) { + OverlayID id = OverlayID(key); + QVariantMap overlayResult; + Overlay::Pointer thisOverlay = getOverlay(id); + if (thisOverlay && thisOverlay->supportsGetProperty()) { + QStringList propertiesToFetch = map[key].toStringList(); + for (const auto& property : propertiesToFetch) { + overlayResult[property] = thisOverlay->getProperty(property); + } + } + resultMap[key] = overlayResult; + } + result.value = resultMap; + return result; +} + OverlayPropertyResult::OverlayPropertyResult() { } diff --git a/interface/src/ui/overlays/Overlays.h b/interface/src/ui/overlays/Overlays.h index bfb775b041..100f853a96 100644 --- a/interface/src/ui/overlays/Overlays.h +++ b/interface/src/ui/overlays/Overlays.h @@ -190,6 +190,10 @@ public slots: */ OverlayPropertyResult getProperty(OverlayID id, const QString& property); + OverlayPropertyResult getProperties(const OverlayID& id, const QStringList& properties); + + OverlayPropertyResult getOverlaysProperties(const QVariant& overlaysProperties); + /*jsdoc * Find the closest 3D overlay hit by a pick ray. * From 148eece065c3a8c2dc34daac1f6c8d098d3b0f96 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 7 Jul 2017 13:56:28 -0700 Subject: [PATCH 0839/1049] Tweak frame timing to avoid overloading the main thread --- interface/src/Application.cpp | 67 ++++++++++++++--------------------- 1 file changed, 26 insertions(+), 41 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 7d397adf96..3cbc6208ad 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2729,56 +2729,41 @@ bool Application::importSVOFromURL(const QString& urlString) { return true; } +bool _renderRequested { false }; + bool Application::event(QEvent* event) { if (!Menu::getInstance()) { return false; } - // Presentation/painting logic - // TODO: Decouple presentation and painting loops - static bool isPaintingThrottled = false; - if ((int)event->type() == (int)Present) { - if (isPaintingThrottled) { - // If painting (triggered by presentation) is hogging the main thread, - // repost as low priority to avoid hanging the GUI. - // This has the effect of allowing presentation to exceed the paint budget by X times and - // only dropping every (1/X) frames, instead of every ceil(X) frames - // (e.g. at a 60FPS target, painting for 17us would fall to 58.82FPS instead of 30FPS). - removePostedEvents(this, Present); - postEvent(this, new QEvent(static_cast(Present)), Qt::LowEventPriority); - isPaintingThrottled = false; + int type = event->type(); + switch (type) { + case Event::Lambda: + static_cast(event)->call(); return true; - } - float nsecsElapsed = (float)_lastTimeUpdated.nsecsElapsed(); - if (shouldPaint(nsecsElapsed)) { - _lastTimeUpdated.start(); - idle(nsecsElapsed); - postEvent(this, new QEvent(static_cast(Paint)), Qt::HighEventPriority); - } - isPaintingThrottled = true; + case Event::Present: + if (!_renderRequested) { + float nsecsElapsed = (float)_lastTimeUpdated.nsecsElapsed(); + if (shouldPaint(nsecsElapsed)) { + _renderRequested = true; + _lastTimeUpdated.start(); + idle(nsecsElapsed); + postEvent(this, new QEvent(static_cast(Paint)), Qt::HighEventPriority); + } + } + return true; - return true; - } else if ((int)event->type() == (int)Paint) { - // NOTE: This must be updated as close to painting as possible, - // or AvatarInputs will mysteriously move to the bottom-right - AvatarInputs::getInstance()->update(); + case Event::Paint: + // NOTE: This must be updated as close to painting as possible, + // or AvatarInputs will mysteriously move to the bottom-right + AvatarInputs::getInstance()->update(); + paintGL(); + _renderRequested = false; + return true; - paintGL(); - - isPaintingThrottled = false; - - return true; - } else if ((int)event->type() == (int)Idle) { - float nsecsElapsed = (float)_lastTimeUpdated.nsecsElapsed(); - idle(nsecsElapsed); - - return true; - } - - if ((int)event->type() == (int)Lambda) { - static_cast(event)->call(); - return true; + default: + break; } { From cd11f5cfa6edda943b9015e13d0bc645a6f83024 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 7 Jul 2017 22:02:56 -0700 Subject: [PATCH 0840/1049] More tweaks for improved script performance --- interface/src/Application.cpp | 4 ++- interface/src/ui/overlays/Overlays.cpp | 37 +++++++++++--------------- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 3cbc6208ad..565d86cc69 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2751,7 +2751,7 @@ bool Application::event(QEvent* event) { idle(nsecsElapsed); postEvent(this, new QEvent(static_cast(Paint)), Qt::HighEventPriority); } - } + } return true; case Event::Paint: @@ -2759,6 +2759,8 @@ bool Application::event(QEvent* event) { // or AvatarInputs will mysteriously move to the bottom-right AvatarInputs::getInstance()->update(); paintGL(); + // wait for the next present event before starting idle / paint again + removePostedEvents(this, Present); _renderRequested = false; return true; diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index 2f22b62306..72682fcb8c 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -152,6 +152,7 @@ Overlay::Pointer Overlays::getOverlay(OverlayID id) const { OverlayID Overlays::addOverlay(const QString& type, const QVariant& properties) { if (QThread::currentThread() != thread()) { OverlayID result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "addOverlay", Q_RETURN_ARG(OverlayID, result), Q_ARG(QString, type), Q_ARG(QVariant, properties)); return result; } @@ -220,6 +221,7 @@ OverlayID Overlays::addOverlay(const Overlay::Pointer& overlay) { OverlayID Overlays::cloneOverlay(OverlayID id) { if (QThread::currentThread() != thread()) { OverlayID result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "cloneOverlay", Q_RETURN_ARG(OverlayID, result), Q_ARG(OverlayID, id)); return result; } @@ -315,6 +317,7 @@ void Overlays::deleteOverlay(OverlayID id) { QString Overlays::getOverlayType(OverlayID overlayId) { if (QThread::currentThread() != thread()) { QString result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "getOverlayType", Q_RETURN_ARG(QString, result), Q_ARG(OverlayID, overlayId)); return result; } @@ -329,6 +332,7 @@ QString Overlays::getOverlayType(OverlayID overlayId) { QObject* Overlays::getOverlayObject(OverlayID id) { if (QThread::currentThread() != thread()) { QObject* result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "getOverlayObject", Q_RETURN_ARG(QObject*, result), Q_ARG(OverlayID, id)); return result; } @@ -384,12 +388,6 @@ void Overlays::setParentPanel(OverlayID childId, OverlayID panelId) { #endif OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { - if (QThread::currentThread() != thread()) { - OverlayID result; - BLOCKING_INVOKE_METHOD(this, "getOverlayAtPoint", Q_RETURN_ARG(OverlayID, result), Q_ARG(glm::vec2, point)); - return result; - } - if (!_enabled) { return UNKNOWN_OVERLAY_ID; } @@ -486,18 +484,6 @@ RayToOverlayIntersectionResult Overlays::findRayIntersectionInternal(const PickR const QVector& overlaysToInclude, const QVector& overlaysToDiscard, bool visibleOnly, bool collidableOnly) { - if (QThread::currentThread() != thread()) { - RayToOverlayIntersectionResult result; - BLOCKING_INVOKE_METHOD(this, "findRayIntersectionInternal", Q_RETURN_ARG(RayToOverlayIntersectionResult, result), - Q_ARG(PickRay, ray), - Q_ARG(bool, precisionPicking), - Q_ARG(QVector, overlaysToInclude), - Q_ARG(QVector, overlaysToDiscard), - Q_ARG(bool, visibleOnly), - Q_ARG(bool, collidableOnly)); - return result; - } - float bestDistance = std::numeric_limits::max(); bool bestIsFront = false; @@ -616,6 +602,7 @@ void RayToOverlayIntersectionResultFromScriptValue(const QScriptValue& objectVar bool Overlays::isLoaded(OverlayID id) { if (QThread::currentThread() != thread()) { bool result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "isLoaded", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id)); return result; } @@ -630,6 +617,7 @@ bool Overlays::isLoaded(OverlayID id) { QSizeF Overlays::textSize(OverlayID id, const QString& text) { if (QThread::currentThread() != thread()) { QSizeF result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "textSize", Q_RETURN_ARG(QSizeF, result), Q_ARG(OverlayID, id), Q_ARG(QString, text)); return result; } @@ -708,6 +696,7 @@ void Overlays::deletePanel(OverlayID panelId) { bool Overlays::isAddedOverlay(OverlayID id) { if (QThread::currentThread() != thread()) { bool result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "isAddedOverlay", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id)); return result; } @@ -743,6 +732,7 @@ void Overlays::sendHoverLeaveOverlay(OverlayID id, PointerEvent event) { OverlayID Overlays::getKeyboardFocusOverlay() { if (QThread::currentThread() != thread()) { OverlayID result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "getKeyboardFocusOverlay", Q_RETURN_ARG(OverlayID, result)); return result; } @@ -762,6 +752,7 @@ void Overlays::setKeyboardFocusOverlay(OverlayID id) { float Overlays::width() { if (QThread::currentThread() != thread()) { float result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "width", Q_RETURN_ARG(float, result)); return result; } @@ -773,6 +764,7 @@ float Overlays::width() { float Overlays::height() { if (QThread::currentThread() != thread()) { float result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "height", Q_RETURN_ARG(float, result)); return result; } @@ -982,10 +974,11 @@ bool Overlays::mouseMoveEvent(QMouseEvent* event) { QVector Overlays::findOverlays(const glm::vec3& center, float radius) { QVector result; - if (QThread::currentThread() != thread()) { - BLOCKING_INVOKE_METHOD(this, "findOverlays", Q_RETURN_ARG(QVector, result), Q_ARG(glm::vec3, center), Q_ARG(float, radius)); - return result; - } + //if (QThread::currentThread() != thread()) { + // PROFILE_RANGE(script, __FUNCTION__); + // BLOCKING_INVOKE_METHOD(this, "findOverlays", Q_RETURN_ARG(QVector, result), Q_ARG(glm::vec3, center), Q_ARG(float, radius)); + // return result; + //} QMutexLocker locker(&_mutex); QMapIterator i(_overlaysWorld); From 4b593d1ab43edf3725af8d68f77f257652f4a5ac Mon Sep 17 00:00:00 2001 From: Mike Moody Date: Sat, 8 Jul 2017 15:18:27 -0700 Subject: [PATCH 0841/1049] Added fallback method using controllers if joints do not exist. --- .../marketplace/laser/laserPointerApp.js | 92 ++++++++++++++----- 1 file changed, 67 insertions(+), 25 deletions(-) diff --git a/unpublishedScripts/marketplace/laser/laserPointerApp.js b/unpublishedScripts/marketplace/laser/laserPointerApp.js index 282fe4dc8d..515a2c3a76 100644 --- a/unpublishedScripts/marketplace/laser/laserPointerApp.js +++ b/unpublishedScripts/marketplace/laser/laserPointerApp.js @@ -8,8 +8,8 @@ Script.include("/~/system/libraries/controllers.js"); var APP_NAME = 'LASER', - APP_ICON = 'https://binaryrelay.com/files/public-docs/hifi/laser/laser.svg', - APP_ICON_ACTIVE = 'https://binaryrelay.com/files/public-docs/hifi/laser/laser-a.svg'; + APP_ICON = Script.resolvePath('laser.svg'), + APP_ICON_ACTIVE = Script.resolvePath('laser-a.svg'); var POINT_INDEX_CHANNEL = "Hifi-Point-Index", GRAB_DISABLE_CHANNEL = "Hifi-Grab-Disable", @@ -47,12 +47,26 @@ var jointName = hand === 'right' ? 'RightHandIndex4' : 'LeftHandIndex4'; //'RightHand' : 'LeftHand'; + var _hand = hand === 'right' ? Controller.Standard.RightHand : Controller.Standard.LeftHand; + var controllerLocation = getControllerWorldLocation(_hand, true); + + var worldControllerPosition = controllerLocation.position; + var worldControllerRotation = controllerLocation.orientation; + + var jointExists = (MyAvatar.getJointIndex(jointName) > 0) ; + var CONTROLLER_FORWARD_OFFSET = Vec3.multiply(Quat.getUp(worldControllerRotation), FORWARD_OFFSET); + var pickRay = { - origin: MyAvatar.getJointPosition(jointName), - direction: MyAvatar.jointToWorldDirection(Vec3.UP, MyAvatar.getJointIndex(jointName)), + origin: worldControllerPosition, + direction: Quat.getUp(worldControllerRotation), length: PICK_MAX_DISTANCE }; + if (jointExists) { + pickRay.origin = MyAvatar.getJointPosition(jointName); + pickRay.direction = MyAvatar.jointToWorldDirection(Vec3.UP, MyAvatar.getJointIndex(jointName)); + } + var ray = Entities.findRayIntersection(pickRay, true, [], rayExclusionList, true); var avatarRay = AvatarManager.findRayIntersection(pickRay, true, [], rayExclusionList, true); @@ -91,13 +105,19 @@ drawInFront: true, color: {red: 0, green: 255, blue: 0}, parentID: MyAvatar.sessionUUID, - parentJointIndex: MyAvatar.getJointIndex(jointName), - localPosition: {x: 0, y: FORWARD_OFFSET, z: 0}, - localRotation: Quat.normalize({}), dimensions: Vec3.multiply(PICK_MAX_DISTANCE * 2, Vec3.ONE), - linePoints: [Vec3.ZERO, {x: 0, y: dist, z: 0}] + linePoints: [Vec3.ZERO, {x: 0, y: dist - FORWARD_OFFSET, z: 0}] }; + if(jointExists) { + beam.parentJointIndex = MyAvatar.getJointIndex(jointName); + beam.localPosition = {x: 0, y: FORWARD_OFFSET, z: 0}; + beam.localRotation = Quat.normalize({}); + } else { + beam.position = Vec3.sum(pickRay.origin, CONTROLLER_FORWARD_OFFSET); + beam.rotation = worldControllerRotation; + } + laserEntities[hand].beam = Entities.addEntity(beam,true); rayExclusionList.push(laserEntities[hand].beam); @@ -112,15 +132,25 @@ } else { if (ray.intersects || avatarRay.intersects) { - - Entities.editEntity(laserEntities[hand].beam, { - parentID: MyAvatar.sessionUUID, - parentJointIndex: MyAvatar.getJointIndex(jointName), - localPosition: {x: 0, y: FORWARD_OFFSET, z: 0}, - localRotation: Quat.normalize({}), - dimensions: Vec3.multiply(PICK_MAX_DISTANCE * 2, Vec3.ONE), - linePoints: [Vec3.ZERO, {x: 0, y: dist - FORWARD_OFFSET, z: 0}] - }); + if(jointExists) { + Entities.editEntity(laserEntities[hand].beam, { + parentID: MyAvatar.sessionUUID, + parentJointIndex: MyAvatar.getJointIndex(jointName), + localPosition: {x: 0, y: FORWARD_OFFSET, z: 0}, + localRotation: Quat.normalize({}), + dimensions: Vec3.multiply(PICK_MAX_DISTANCE * 2, Vec3.ONE), + linePoints: [Vec3.ZERO, {x: 0, y: dist - FORWARD_OFFSET, z: 0}] + }); + } else { + Entities.editEntity(laserEntities[hand].beam, { + parentID: MyAvatar.sessionUUID, + parentJointIndex: MyAvatar.getJointIndex(jointName), + position: Vec3.sum(pickRay.origin, CONTROLLER_FORWARD_OFFSET), + rotation: worldControllerRotation, + dimensions: Vec3.multiply(PICK_MAX_DISTANCE * 2, Vec3.ONE), + linePoints: [Vec3.ZERO, {x: 0, y: dist - FORWARD_OFFSET, z: 0}] + }); + } Entities.editEntity(laserEntities[hand].sphere, { dimensions: {x: sphereSize, y: sphereSize, z: sphereSize}, @@ -128,14 +158,26 @@ visible: true }); } else { - Entities.editEntity(laserEntities[hand].beam, { - parentID: MyAvatar.sessionUUID, - parentJointIndex: MyAvatar.getJointIndex(jointName), - localPosition: {x: 0, y: FORWARD_OFFSET, z: 0}, - localRotation: Quat.normalize({}), - dimensions: Vec3.multiply(PICK_MAX_DISTANCE * 2, Vec3.ONE), - linePoints: [Vec3.ZERO, {x: 0, y: dist - FORWARD_OFFSET, z: 0}] - }); + if(jointExists) { + Entities.editEntity(laserEntities[hand].beam, { + parentID: MyAvatar.sessionUUID, + parentJointIndex: MyAvatar.getJointIndex(jointName), + localPosition: {x: 0, y: FORWARD_OFFSET, z: 0}, + localRotation: Quat.normalize({}), + dimensions: Vec3.multiply(PICK_MAX_DISTANCE * 2, Vec3.ONE), + linePoints: [Vec3.ZERO, {x: 0, y: dist - FORWARD_OFFSET, z: 0}] + }); + } else { + Entities.editEntity(laserEntities[hand].beam, { + parentID: MyAvatar.sessionUUID, + parentJointIndex: MyAvatar.getJointIndex(jointName), + position: Vec3.sum(pickRay.origin, CONTROLLER_FORWARD_OFFSET), + rotation: worldControllerRotation, + dimensions: Vec3.multiply(PICK_MAX_DISTANCE * 2, Vec3.ONE), + linePoints: [Vec3.ZERO, {x: 0, y: dist - FORWARD_OFFSET, z: 0}] + }); + } + Entities.editEntity(laserEntities[hand].sphere, { visible: false }); From e52c7f4395e0f19fe66ccd6534136c935a657d6e Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 7 Jul 2017 19:07:19 -0700 Subject: [PATCH 0842/1049] Add more efficient overlay getters, don't use blocking calls --- interface/src/ui/overlays/Overlays.cpp | 41 +++++++++++++++++++++----- interface/src/ui/overlays/Overlays.h | 4 +++ 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index bcf9897dd8..2f22b62306 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -414,20 +414,47 @@ OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { } OverlayPropertyResult Overlays::getProperty(OverlayID id, const QString& property) { - if (QThread::currentThread() != thread()) { - OverlayPropertyResult result; - BLOCKING_INVOKE_METHOD(this, "getProperty", Q_RETURN_ARG(OverlayPropertyResult, result), Q_ARG(OverlayID, id), Q_ARG(QString, property)); - return result; - } - - OverlayPropertyResult result; Overlay::Pointer thisOverlay = getOverlay(id); + OverlayPropertyResult result; if (thisOverlay && thisOverlay->supportsGetProperty()) { result.value = thisOverlay->getProperty(property); } return result; } +OverlayPropertyResult Overlays::getProperties(const OverlayID& id, const QStringList& properties) { + Overlay::Pointer thisOverlay = getOverlay(id); + OverlayPropertyResult result; + if (thisOverlay && thisOverlay->supportsGetProperty()) { + QVariantMap mapResult; + for (const auto& property : properties) { + mapResult.insert(property, thisOverlay->getProperty(property)); + } + result.value = mapResult; + } + return result; +} + +OverlayPropertyResult Overlays::getOverlaysProperties(const QVariant& propertiesById) { + QVariantMap map = propertiesById.toMap(); + OverlayPropertyResult result; + QVariantMap resultMap; + for (const auto& key : map.keys()) { + OverlayID id = OverlayID(key); + QVariantMap overlayResult; + Overlay::Pointer thisOverlay = getOverlay(id); + if (thisOverlay && thisOverlay->supportsGetProperty()) { + QStringList propertiesToFetch = map[key].toStringList(); + for (const auto& property : propertiesToFetch) { + overlayResult[property] = thisOverlay->getProperty(property); + } + } + resultMap[key] = overlayResult; + } + result.value = resultMap; + return result; +} + OverlayPropertyResult::OverlayPropertyResult() { } diff --git a/interface/src/ui/overlays/Overlays.h b/interface/src/ui/overlays/Overlays.h index bfb775b041..100f853a96 100644 --- a/interface/src/ui/overlays/Overlays.h +++ b/interface/src/ui/overlays/Overlays.h @@ -190,6 +190,10 @@ public slots: */ OverlayPropertyResult getProperty(OverlayID id, const QString& property); + OverlayPropertyResult getProperties(const OverlayID& id, const QStringList& properties); + + OverlayPropertyResult getOverlaysProperties(const QVariant& overlaysProperties); + /*jsdoc * Find the closest 3D overlay hit by a pick ray. * From 9afe0bc12448278492a98e33e74498fb8abd195b Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 7 Jul 2017 13:56:28 -0700 Subject: [PATCH 0843/1049] Tweak frame timing to avoid overloading the main thread --- interface/src/Application.cpp | 67 ++++++++++++++--------------------- 1 file changed, 26 insertions(+), 41 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6f94e74120..fe5f78a50b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2719,56 +2719,41 @@ bool Application::importSVOFromURL(const QString& urlString) { return true; } +bool _renderRequested { false }; + bool Application::event(QEvent* event) { if (!Menu::getInstance()) { return false; } - // Presentation/painting logic - // TODO: Decouple presentation and painting loops - static bool isPaintingThrottled = false; - if ((int)event->type() == (int)Present) { - if (isPaintingThrottled) { - // If painting (triggered by presentation) is hogging the main thread, - // repost as low priority to avoid hanging the GUI. - // This has the effect of allowing presentation to exceed the paint budget by X times and - // only dropping every (1/X) frames, instead of every ceil(X) frames - // (e.g. at a 60FPS target, painting for 17us would fall to 58.82FPS instead of 30FPS). - removePostedEvents(this, Present); - postEvent(this, new QEvent(static_cast(Present)), Qt::LowEventPriority); - isPaintingThrottled = false; + int type = event->type(); + switch (type) { + case Event::Lambda: + static_cast(event)->call(); return true; - } - float nsecsElapsed = (float)_lastTimeUpdated.nsecsElapsed(); - if (shouldPaint(nsecsElapsed)) { - _lastTimeUpdated.start(); - idle(nsecsElapsed); - postEvent(this, new QEvent(static_cast(Paint)), Qt::HighEventPriority); - } - isPaintingThrottled = true; + case Event::Present: + if (!_renderRequested) { + float nsecsElapsed = (float)_lastTimeUpdated.nsecsElapsed(); + if (shouldPaint(nsecsElapsed)) { + _renderRequested = true; + _lastTimeUpdated.start(); + idle(nsecsElapsed); + postEvent(this, new QEvent(static_cast(Paint)), Qt::HighEventPriority); + } + } + return true; - return true; - } else if ((int)event->type() == (int)Paint) { - // NOTE: This must be updated as close to painting as possible, - // or AvatarInputs will mysteriously move to the bottom-right - AvatarInputs::getInstance()->update(); + case Event::Paint: + // NOTE: This must be updated as close to painting as possible, + // or AvatarInputs will mysteriously move to the bottom-right + AvatarInputs::getInstance()->update(); + paintGL(); + _renderRequested = false; + return true; - paintGL(); - - isPaintingThrottled = false; - - return true; - } else if ((int)event->type() == (int)Idle) { - float nsecsElapsed = (float)_lastTimeUpdated.nsecsElapsed(); - idle(nsecsElapsed); - - return true; - } - - if ((int)event->type() == (int)Lambda) { - static_cast(event)->call(); - return true; + default: + break; } { From ee1f6dfa4220754465891e8abe9313638177a2d3 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 7 Jul 2017 22:02:56 -0700 Subject: [PATCH 0844/1049] More tweaks for improved script performance --- interface/src/Application.cpp | 4 ++- interface/src/ui/overlays/Overlays.cpp | 37 +++++++++++--------------- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index fe5f78a50b..a59b745b78 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2741,7 +2741,7 @@ bool Application::event(QEvent* event) { idle(nsecsElapsed); postEvent(this, new QEvent(static_cast(Paint)), Qt::HighEventPriority); } - } + } return true; case Event::Paint: @@ -2749,6 +2749,8 @@ bool Application::event(QEvent* event) { // or AvatarInputs will mysteriously move to the bottom-right AvatarInputs::getInstance()->update(); paintGL(); + // wait for the next present event before starting idle / paint again + removePostedEvents(this, Present); _renderRequested = false; return true; diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index 2f22b62306..72682fcb8c 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -152,6 +152,7 @@ Overlay::Pointer Overlays::getOverlay(OverlayID id) const { OverlayID Overlays::addOverlay(const QString& type, const QVariant& properties) { if (QThread::currentThread() != thread()) { OverlayID result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "addOverlay", Q_RETURN_ARG(OverlayID, result), Q_ARG(QString, type), Q_ARG(QVariant, properties)); return result; } @@ -220,6 +221,7 @@ OverlayID Overlays::addOverlay(const Overlay::Pointer& overlay) { OverlayID Overlays::cloneOverlay(OverlayID id) { if (QThread::currentThread() != thread()) { OverlayID result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "cloneOverlay", Q_RETURN_ARG(OverlayID, result), Q_ARG(OverlayID, id)); return result; } @@ -315,6 +317,7 @@ void Overlays::deleteOverlay(OverlayID id) { QString Overlays::getOverlayType(OverlayID overlayId) { if (QThread::currentThread() != thread()) { QString result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "getOverlayType", Q_RETURN_ARG(QString, result), Q_ARG(OverlayID, overlayId)); return result; } @@ -329,6 +332,7 @@ QString Overlays::getOverlayType(OverlayID overlayId) { QObject* Overlays::getOverlayObject(OverlayID id) { if (QThread::currentThread() != thread()) { QObject* result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "getOverlayObject", Q_RETURN_ARG(QObject*, result), Q_ARG(OverlayID, id)); return result; } @@ -384,12 +388,6 @@ void Overlays::setParentPanel(OverlayID childId, OverlayID panelId) { #endif OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { - if (QThread::currentThread() != thread()) { - OverlayID result; - BLOCKING_INVOKE_METHOD(this, "getOverlayAtPoint", Q_RETURN_ARG(OverlayID, result), Q_ARG(glm::vec2, point)); - return result; - } - if (!_enabled) { return UNKNOWN_OVERLAY_ID; } @@ -486,18 +484,6 @@ RayToOverlayIntersectionResult Overlays::findRayIntersectionInternal(const PickR const QVector& overlaysToInclude, const QVector& overlaysToDiscard, bool visibleOnly, bool collidableOnly) { - if (QThread::currentThread() != thread()) { - RayToOverlayIntersectionResult result; - BLOCKING_INVOKE_METHOD(this, "findRayIntersectionInternal", Q_RETURN_ARG(RayToOverlayIntersectionResult, result), - Q_ARG(PickRay, ray), - Q_ARG(bool, precisionPicking), - Q_ARG(QVector, overlaysToInclude), - Q_ARG(QVector, overlaysToDiscard), - Q_ARG(bool, visibleOnly), - Q_ARG(bool, collidableOnly)); - return result; - } - float bestDistance = std::numeric_limits::max(); bool bestIsFront = false; @@ -616,6 +602,7 @@ void RayToOverlayIntersectionResultFromScriptValue(const QScriptValue& objectVar bool Overlays::isLoaded(OverlayID id) { if (QThread::currentThread() != thread()) { bool result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "isLoaded", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id)); return result; } @@ -630,6 +617,7 @@ bool Overlays::isLoaded(OverlayID id) { QSizeF Overlays::textSize(OverlayID id, const QString& text) { if (QThread::currentThread() != thread()) { QSizeF result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "textSize", Q_RETURN_ARG(QSizeF, result), Q_ARG(OverlayID, id), Q_ARG(QString, text)); return result; } @@ -708,6 +696,7 @@ void Overlays::deletePanel(OverlayID panelId) { bool Overlays::isAddedOverlay(OverlayID id) { if (QThread::currentThread() != thread()) { bool result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "isAddedOverlay", Q_RETURN_ARG(bool, result), Q_ARG(OverlayID, id)); return result; } @@ -743,6 +732,7 @@ void Overlays::sendHoverLeaveOverlay(OverlayID id, PointerEvent event) { OverlayID Overlays::getKeyboardFocusOverlay() { if (QThread::currentThread() != thread()) { OverlayID result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "getKeyboardFocusOverlay", Q_RETURN_ARG(OverlayID, result)); return result; } @@ -762,6 +752,7 @@ void Overlays::setKeyboardFocusOverlay(OverlayID id) { float Overlays::width() { if (QThread::currentThread() != thread()) { float result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "width", Q_RETURN_ARG(float, result)); return result; } @@ -773,6 +764,7 @@ float Overlays::width() { float Overlays::height() { if (QThread::currentThread() != thread()) { float result; + PROFILE_RANGE(script, __FUNCTION__); BLOCKING_INVOKE_METHOD(this, "height", Q_RETURN_ARG(float, result)); return result; } @@ -982,10 +974,11 @@ bool Overlays::mouseMoveEvent(QMouseEvent* event) { QVector Overlays::findOverlays(const glm::vec3& center, float radius) { QVector result; - if (QThread::currentThread() != thread()) { - BLOCKING_INVOKE_METHOD(this, "findOverlays", Q_RETURN_ARG(QVector, result), Q_ARG(glm::vec3, center), Q_ARG(float, radius)); - return result; - } + //if (QThread::currentThread() != thread()) { + // PROFILE_RANGE(script, __FUNCTION__); + // BLOCKING_INVOKE_METHOD(this, "findOverlays", Q_RETURN_ARG(QVector, result), Q_ARG(glm::vec3, center), Q_ARG(float, radius)); + // return result; + //} QMutexLocker locker(&_mutex); QMapIterator i(_overlaysWorld); From 4edea433ce0eac525dbda824498511eb29a8cf93 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 10 Jul 2017 12:16:53 +0200 Subject: [PATCH 0845/1049] Rename the _pipeline into _shapePipeline in the render::Args --- interface/src/ui/overlays/Circle3DOverlay.cpp | 4 ++-- interface/src/ui/overlays/Cube3DOverlay.cpp | 10 +++++----- interface/src/ui/overlays/Shape3DOverlay.cpp | 10 +++++----- interface/src/ui/overlays/Sphere3DOverlay.cpp | 10 +++++----- interface/src/ui/overlays/Text3DOverlay.cpp | 4 ++-- libraries/render-utils/src/MeshPartPayload.cpp | 4 ++-- libraries/render-utils/src/RenderShadowTask.cpp | 6 +++--- libraries/render/src/render/Args.h | 2 +- libraries/render/src/render/DrawTask.cpp | 12 ++++++------ 9 files changed, 31 insertions(+), 31 deletions(-) diff --git a/interface/src/ui/overlays/Circle3DOverlay.cpp b/interface/src/ui/overlays/Circle3DOverlay.cpp index ae0173f054..827417a912 100644 --- a/interface/src/ui/overlays/Circle3DOverlay.cpp +++ b/interface/src/ui/overlays/Circle3DOverlay.cpp @@ -80,8 +80,8 @@ void Circle3DOverlay::render(RenderArgs* args) { Q_ASSERT(args->_batch); auto& batch = *args->_batch; - if (args->_pipeline) { - batch.setPipeline(args->_pipeline->pipeline); + if (args->_shapePipeline) { + batch.setPipeline(args->_shapePipeline->pipeline); } // FIXME: THe line width of _lineWidth is not supported anymore, we ll need a workaround diff --git a/interface/src/ui/overlays/Cube3DOverlay.cpp b/interface/src/ui/overlays/Cube3DOverlay.cpp index 707aabc241..a353545245 100644 --- a/interface/src/ui/overlays/Cube3DOverlay.cpp +++ b/interface/src/ui/overlays/Cube3DOverlay.cpp @@ -65,15 +65,15 @@ void Cube3DOverlay::render(RenderArgs* args) { transform.setTranslation(position); transform.setRotation(rotation); auto geometryCache = DependencyManager::get(); - auto pipeline = args->_pipeline; - if (!pipeline) { - pipeline = _isSolid ? geometryCache->getOpaqueShapePipeline() : geometryCache->getWireShapePipeline(); + auto shapePipeline = args->_shapePipeline; + if (!shapePipeline) { + shapePipeline = _isSolid ? geometryCache->getOpaqueShapePipeline() : geometryCache->getWireShapePipeline(); } if (_isSolid) { transform.setScale(dimensions); batch->setModelTransform(transform); - geometryCache->renderSolidCubeInstance(args, *batch, cubeColor, pipeline); + geometryCache->renderSolidCubeInstance(args, *batch, cubeColor, shapePipeline); } else { geometryCache->bindSimpleProgram(*batch, false, false, false, true, true); if (getIsDashedLine()) { @@ -109,7 +109,7 @@ void Cube3DOverlay::render(RenderArgs* args) { } else { transform.setScale(dimensions); batch->setModelTransform(transform); - geometryCache->renderWireCubeInstance(args, *batch, cubeColor, pipeline); + geometryCache->renderWireCubeInstance(args, *batch, cubeColor, shapePipeline); } } } diff --git a/interface/src/ui/overlays/Shape3DOverlay.cpp b/interface/src/ui/overlays/Shape3DOverlay.cpp index 72c57565d4..a6fcacc769 100644 --- a/interface/src/ui/overlays/Shape3DOverlay.cpp +++ b/interface/src/ui/overlays/Shape3DOverlay.cpp @@ -45,17 +45,17 @@ void Shape3DOverlay::render(RenderArgs* args) { transform.setTranslation(position); transform.setRotation(rotation); auto geometryCache = DependencyManager::get(); - auto pipeline = args->_pipeline; - if (!pipeline) { - pipeline = _isSolid ? geometryCache->getOpaqueShapePipeline() : geometryCache->getWireShapePipeline(); + auto shapePipeline = args->_shapePipeline; + if (!shapePipeline) { + shapePipeline = _isSolid ? geometryCache->getOpaqueShapePipeline() : geometryCache->getWireShapePipeline(); } transform.setScale(dimensions); batch->setModelTransform(transform); if (_isSolid) { - geometryCache->renderSolidShapeInstance(args, *batch, _shape, cubeColor, pipeline); + geometryCache->renderSolidShapeInstance(args, *batch, _shape, cubeColor, shapePipeline); } else { - geometryCache->renderWireShapeInstance(args, *batch, _shape, cubeColor, pipeline); + geometryCache->renderWireShapeInstance(args, *batch, _shape, cubeColor, shapePipeline); } } } diff --git a/interface/src/ui/overlays/Sphere3DOverlay.cpp b/interface/src/ui/overlays/Sphere3DOverlay.cpp index 67e11cf1d8..5bbf41eb94 100644 --- a/interface/src/ui/overlays/Sphere3DOverlay.cpp +++ b/interface/src/ui/overlays/Sphere3DOverlay.cpp @@ -44,15 +44,15 @@ void Sphere3DOverlay::render(RenderArgs* args) { batch->setModelTransform(transform); auto geometryCache = DependencyManager::get(); - auto pipeline = args->_pipeline; - if (!pipeline) { - pipeline = _isSolid ? geometryCache->getOpaqueShapePipeline() : geometryCache->getWireShapePipeline(); + auto shapePipeline = args->_shapePipeline; + if (!shapePipeline) { + shapePipeline = _isSolid ? geometryCache->getOpaqueShapePipeline() : geometryCache->getWireShapePipeline(); } if (_isSolid) { - geometryCache->renderSolidSphereInstance(args, *batch, sphereColor, pipeline); + geometryCache->renderSolidSphereInstance(args, *batch, sphereColor, shapePipeline); } else { - geometryCache->renderWireSphereInstance(args, *batch, sphereColor, pipeline); + geometryCache->renderWireSphereInstance(args, *batch, sphereColor, shapePipeline); } } } diff --git a/interface/src/ui/overlays/Text3DOverlay.cpp b/interface/src/ui/overlays/Text3DOverlay.cpp index ed29bc4e1b..4b110b8099 100644 --- a/interface/src/ui/overlays/Text3DOverlay.cpp +++ b/interface/src/ui/overlays/Text3DOverlay.cpp @@ -137,8 +137,8 @@ void Text3DOverlay::render(RenderArgs* args) { // Text renderer sets its own pipeline, _textRenderer->draw(batch, 0, 0, getText(), textColor, glm::vec2(-1.0f), getDrawInFront()); // so before we continue, we must reset the pipeline - batch.setPipeline(args->_pipeline->pipeline); - args->_pipeline->prepare(batch, args); + batch.setPipeline(args->_shapePipeline->pipeline); + args->_shapePipeline->prepare(batch, args); } const render::ShapeKey Text3DOverlay::getShapeKey() { diff --git a/libraries/render-utils/src/MeshPartPayload.cpp b/libraries/render-utils/src/MeshPartPayload.cpp index b16134db5f..f6cb55deed 100644 --- a/libraries/render-utils/src/MeshPartPayload.cpp +++ b/libraries/render-utils/src/MeshPartPayload.cpp @@ -259,7 +259,7 @@ void MeshPartPayload::render(RenderArgs* args) { gpu::Batch& batch = *(args->_batch); - auto locations = args->_pipeline->locations; + auto locations = args->_shapePipeline->locations; assert(locations); // Bind the model transform and the skinCLusterMatrices if needed @@ -583,7 +583,7 @@ void ModelMeshPartPayload::render(RenderArgs* args) { } gpu::Batch& batch = *(args->_batch); - auto locations = args->_pipeline->locations; + auto locations = args->_shapePipeline->locations; assert(locations); bindTransform(batch, locations, args->_renderMode); diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp index a817a6abff..5b840bd330 100644 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -68,7 +68,7 @@ void RenderShadowMap::run(const render::RenderContextPointer& renderContext, std::vector skinnedShapeKeys{}; // Iterate through all inShapes and render the unskinned - args->_pipeline = shadowPipeline; + args->_shapePipeline = shadowPipeline; batch.setPipeline(shadowPipeline->pipeline); for (auto items : inShapes) { if (items.first.isSkinned()) { @@ -79,13 +79,13 @@ void RenderShadowMap::run(const render::RenderContextPointer& renderContext, } // Reiterate to render the skinned - args->_pipeline = shadowSkinnedPipeline; + args->_shapePipeline = shadowSkinnedPipeline; batch.setPipeline(shadowSkinnedPipeline->pipeline); for (const auto& key : skinnedShapeKeys) { renderItems(renderContext, inShapes.at(key)); } - args->_pipeline = nullptr; + args->_shapePipeline = nullptr; args->_batch = nullptr; }); } diff --git a/libraries/render/src/render/Args.h b/libraries/render/src/render/Args.h index c2e03d4f46..449a3ac22b 100644 --- a/libraries/render/src/render/Args.h +++ b/libraries/render/src/render/Args.h @@ -103,7 +103,7 @@ namespace render { std::shared_ptr _context; std::shared_ptr _blitFramebuffer; - std::shared_ptr _pipeline; + std::shared_ptr _shapePipeline; QSharedPointer _renderData; std::stack _viewFrustums; glm::ivec4 _viewport { 0.0f, 0.0f, 1.0f, 1.0f }; diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index b6f3440d5c..1153a737a1 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -43,11 +43,11 @@ void renderShape(RenderArgs* args, const ShapePlumberPointer& shapeContext, cons assert(item.getKey().isShape()); auto key = item.getShapeKey() | globalKey; if (key.isValid() && !key.hasOwnPipeline()) { - args->_pipeline = shapeContext->pickPipeline(args, key); - if (args->_pipeline) { + args->_shapePipeline = shapeContext->pickPipeline(args, key); + if (args->_shapePipeline) { item.render(args); } - args->_pipeline = nullptr; + args->_shapePipeline = nullptr; } else if (key.hasOwnPipeline()) { item.render(args); } else { @@ -109,15 +109,15 @@ void render::renderStateSortShapes(const RenderContextPointer& renderContext, // Then render for (auto& pipelineKey : sortedPipelines) { auto& bucket = sortedShapes[pipelineKey]; - args->_pipeline = shapeContext->pickPipeline(args, pipelineKey); - if (!args->_pipeline) { + args->_shapePipeline = shapeContext->pickPipeline(args, pipelineKey); + if (!args->_shapePipeline) { continue; } for (auto& item : bucket) { item.render(args); } } - args->_pipeline = nullptr; + args->_shapePipeline = nullptr; for (auto& item : ownPipelineBucket) { item.render(args); } From 0c3755483b99ecc1a88af17ac9bb8bd1ba598e6a Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 10 Jul 2017 12:37:26 +0200 Subject: [PATCH 0846/1049] adding assert or checks whenever getting a scene stage --- .../entities-renderer/src/RenderableZoneEntityItem.cpp | 2 ++ libraries/render-utils/src/BackgroundStage.cpp | 2 ++ libraries/render-utils/src/DebugDeferredBuffer.cpp | 1 + libraries/render-utils/src/DeferredLightingEffect.cpp | 2 ++ libraries/render-utils/src/LightClusters.cpp | 1 + libraries/render-utils/src/LightPayload.cpp | 2 ++ libraries/render-utils/src/RenderShadowTask.cpp | 3 ++- libraries/render-utils/src/SubsurfaceScattering.cpp | 3 ++- libraries/render-utils/src/ZoneRenderer.cpp | 8 +++++--- 9 files changed, 19 insertions(+), 5 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index a57a6e5d52..eda304ef91 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -555,10 +555,12 @@ void RenderableZoneEntityItemMeta::setProceduralUserData(QString userData) { void RenderableZoneEntityItemMeta::render(RenderArgs* args) { if (!_stage) { _stage = args->_scene->getStage(); + assert(_stage); } if (!_backgroundStage) { _backgroundStage = args->_scene->getStage(); + assert(_backgroundStage); } { // Sun diff --git a/libraries/render-utils/src/BackgroundStage.cpp b/libraries/render-utils/src/BackgroundStage.cpp index 5d04f188f1..2ea3683c4a 100644 --- a/libraries/render-utils/src/BackgroundStage.cpp +++ b/libraries/render-utils/src/BackgroundStage.cpp @@ -61,6 +61,8 @@ void DrawBackgroundStage::run(const render::RenderContextPointer& renderContext, // Background rendering decision auto backgroundStage = renderContext->_scene->getStage(); + assert(backgroundStage); + model::SunSkyStagePointer background; model::SkyboxPointer skybox; if (backgroundStage->_currentFrame._backgrounds.size()) { diff --git a/libraries/render-utils/src/DebugDeferredBuffer.cpp b/libraries/render-utils/src/DebugDeferredBuffer.cpp index 8887de81ef..44e2bd290b 100644 --- a/libraries/render-utils/src/DebugDeferredBuffer.cpp +++ b/libraries/render-utils/src/DebugDeferredBuffer.cpp @@ -433,6 +433,7 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I } auto lightStage = renderContext->_scene->getStage(); + assert(lightStage); assert(lightStage->getNumLights() > 0); auto lightAndShadow = lightStage->getLightAndShadow(0); const auto& globalShadow = lightAndShadow.second; diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index 7b1ea1768d..2b5fdc1d74 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -429,6 +429,7 @@ void PrepareDeferred::run(const RenderContextPointer& renderContext, const Input // Prepare a fresh Light Frame auto lightStage = renderContext->_scene->getStage(); + assert(lightStage); lightStage->_currentFrame.clear(); } @@ -493,6 +494,7 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext, // Global directional light and ambient pass auto lightStage = renderContext->_scene->getStage(); + assert(lightStage); assert(lightStage->getNumLights() > 0); auto lightAndShadow = lightStage->getLightAndShadow(0); const auto& globalShadow = lightAndShadow.second; diff --git a/libraries/render-utils/src/LightClusters.cpp b/libraries/render-utils/src/LightClusters.cpp index 74209ce951..ab1e194498 100644 --- a/libraries/render-utils/src/LightClusters.cpp +++ b/libraries/render-utils/src/LightClusters.cpp @@ -575,6 +575,7 @@ void LightClusteringPass::run(const render::RenderContextPointer& renderContext, // From the LightStage and the current frame, update the light cluster Grid auto lightStage = renderContext->_scene->getStage(); + assert(lightStage); _lightClusters->updateLightStage(lightStage); _lightClusters->updateLightFrame(lightStage->_currentFrame, lightingModel->isPointLightEnabled(), lightingModel->isSpotLightEnabled()); diff --git a/libraries/render-utils/src/LightPayload.cpp b/libraries/render-utils/src/LightPayload.cpp index 5f7f7236f2..afa17bee19 100644 --- a/libraries/render-utils/src/LightPayload.cpp +++ b/libraries/render-utils/src/LightPayload.cpp @@ -56,6 +56,7 @@ LightPayload::~LightPayload() { void LightPayload::render(RenderArgs* args) { if (!_stage) { _stage = args->_scene->getStage(); + assert(_stage); } // Do we need to allocate the light in the stage ? if (LightStage::isIndexInvalid(_index)) { @@ -124,6 +125,7 @@ KeyLightPayload::~KeyLightPayload() { void KeyLightPayload::render(RenderArgs* args) { if (!_stage) { _stage = args->_scene->getStage(); + assert(_stage); } // Do we need to allocate the light in the stage ? if (LightStage::isIndexInvalid(_index)) { diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp index 5b840bd330..03a2a4f9b1 100644 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -36,7 +36,7 @@ void RenderShadowMap::run(const render::RenderContextPointer& renderContext, assert(renderContext->args->hasViewFrustum()); auto lightStage = renderContext->_scene->getStage(); - + assert(lightStage); LightStage::Index globalLightIndex { 0 }; const auto globalLight = lightStage->getLight(globalLightIndex); @@ -141,6 +141,7 @@ void RenderShadowTask::configure(const Config& configuration) { void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, Output& output) { auto lightStage = renderContext->_scene->getStage(); + assert(lightStage); const auto globalShadow = lightStage->getShadow(0); // Cache old render args diff --git a/libraries/render-utils/src/SubsurfaceScattering.cpp b/libraries/render-utils/src/SubsurfaceScattering.cpp index d67369774c..1786898e57 100644 --- a/libraries/render-utils/src/SubsurfaceScattering.cpp +++ b/libraries/render-utils/src/SubsurfaceScattering.cpp @@ -532,7 +532,8 @@ void DebugSubsurfaceScattering::run(const render::RenderContextPointer& renderCo - auto lightStage = renderContext->_scene->getStage("LIGHT_STAGE"); + auto lightStage = renderContext->_scene->getStage(); + assert(lightStage); // const auto light = DependencyManager::get()->getLightStage()->getLight(0); const auto light = lightStage->getLight(0); diff --git a/libraries/render-utils/src/ZoneRenderer.cpp b/libraries/render-utils/src/ZoneRenderer.cpp index 8fa243c13b..787ef47282 100644 --- a/libraries/render-utils/src/ZoneRenderer.cpp +++ b/libraries/render-utils/src/ZoneRenderer.cpp @@ -52,19 +52,21 @@ void ZoneRendererTask::build(JobModel& task, const Varying& input, Varying& oupu } void SetupZones::run(const RenderContextPointer& context, const Inputs& inputs) { - auto backgroundStage = context->_scene->getStage("BACKGROUND_STAGE"); + auto backgroundStage = context->_scene->getStage(); + assert(backgroundStage); backgroundStage->_currentFrame.clear(); // call render in the correct order first... render::renderItems(context, inputs); // Finally add the default lights and background: - auto lightStage = context->_scene->getStage("LIGHT_STAGE"); + auto lightStage = context->_scene->getStage(); + assert(lightStage); + lightStage->_currentFrame.pushSunLight(0); lightStage->_currentFrame.pushAmbientLight(0); backgroundStage->_currentFrame.pushBackground(0); - } const gpu::PipelinePointer& DebugZoneLighting::getKeyLightPipeline() { From dd2dbd9b39ab3eb5a45e0d754ea3c938ccce63b1 Mon Sep 17 00:00:00 2001 From: NeetBhagat Date: Fri, 7 Jul 2017 18:14:21 +0530 Subject: [PATCH 0847/1049] Initial Commit to resolve problem :> When Max Avatar scale is set in Sandbox -> setting, take that value as default max value --- interface/src/avatar/MyAvatar.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 42ed32072c..442ded8156 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -68,7 +68,6 @@ const float MAX_WALKING_SPEED = 2.6f; // human walking speed const float MAX_BOOST_SPEED = 0.5f * MAX_WALKING_SPEED; // action motor gets additive boost below this speed const float MIN_AVATAR_SPEED = 0.05f; const float MIN_AVATAR_SPEED_SQUARED = MIN_AVATAR_SPEED * MIN_AVATAR_SPEED; // speed is set to zero below this -const float DEFAULT_MAX_AVATAR_SCALE = 3.0f; const float YAW_SPEED_DEFAULT = 120.0f; // degrees/sec const float PITCH_SPEED_DEFAULT = 90.0f; // degrees/sec @@ -1076,10 +1075,6 @@ void MyAvatar::loadData() { getHead()->setBasePitch(loadSetting(settings, "headPitch", 0.0f)); - _targetScale = loadSetting(settings, "scale", 1.0f); - _targetScale = (_targetScale > DEFAULT_MAX_AVATAR_SCALE) ? DEFAULT_MAX_AVATAR_SCALE : _targetScale; - setScale(glm::vec3(_targetScale)); - _prefOverrideAnimGraphUrl.set(QUrl(settings.value("animGraphURL", "").toString())); _fullAvatarURLFromPreferences = settings.value("fullAvatarURL", AvatarData::defaultFullAvatarModelUrl()).toUrl(); _fullAvatarModelName = settings.value("fullAvatarModelName", DEFAULT_FULL_AVATAR_MODEL_NAME).toString(); @@ -2270,7 +2265,16 @@ void MyAvatar::restrictScaleFromDomainSettings(const QJsonObject& domainSettings static const QString MAX_SCALE_OPTION = "max_avatar_scale"; float settingMaxScale = avatarsObject[MAX_SCALE_OPTION].toDouble(MAX_AVATAR_SCALE); setDomainMaximumScale(settingMaxScale); - + + // Set avatar scale. The current avatar scale should not be more than domain's max_avatar_scale. + Settings settings; + settings.beginGroup("Avatar"); + _targetScale = loadSetting(settings, "scale", 1.0f); + qCDebug(interfaceapp, "Current avatar scale is %f. Receive max_avatar_scale %f from this domain settings. Selecting the minimum value to set the scale of an avatar.", _targetScale, _domainMaximumScale); + _targetScale = (_targetScale > _domainMaximumScale) ? _domainMaximumScale : _targetScale; + qCDebug(interfaceapp) << "Avatar scale " << _targetScale; + setScale(glm::vec3(_targetScale)); + settings.endGroup(); // make sure that the domain owner didn't flip min and max if (_domainMinimumScale > _domainMaximumScale) { std::swap(_domainMinimumScale, _domainMaximumScale); From 3ee9d8b76640e8206722bd3d12fed649f2a23b8f Mon Sep 17 00:00:00 2001 From: LaShonda Hopper Date: Fri, 7 Jul 2017 17:56:50 -0400 Subject: [PATCH 0848/1049] [Worklist #21420] Ran lint on edit script (details below). Prior to and after addressing Worklist Item #21420, it was observed that the tool bar buttons popping in and out during load. Taking a while to become visible. Ran JSHint on the edit.js script to see if something stood out. Testing with the various lint fixes the odd loading behavior wasn't observed locally any longer. Pushing this up for testing. This may be what @CainFoool was seeing regarding the create button not appearing when testing a different PR as at times it took quite some time for the buttons to load properly. JSHint Issues Addressed: * Resolved instance of \"Use the function form of \"use strict\"\" ** Moved use strict declaration to the file function level. ** This fixed various unknown or not defined errors. * Resolved instances of \"\'const\' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz).\" ** Switched const to var to avoid using keywords respected by only a subset of browsers. * Resolved various multiply defined vars. ** Notable callouts being position var and properties var. ** This should fix issues where the same var was being used though the intent of use may have varied. * Resolved instances of missing semi-colons PreFix: 51 JSHint issues detected PostFix: 0 JSHint issues detected. Changes to be committed: modified: scripts/system/edit.js --- scripts/system/edit.js | 56 +++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index d37a6e4189..791642838d 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -1,5 +1,3 @@ -"use strict"; - // edit.js // // Created by Brad Hefta-Gaub on 10/2/14. @@ -16,6 +14,8 @@ Settings, Entities, Tablet, Toolbars, Messages, Menu, Camera, progressDialog, tooltip, MyAvatar, Quat, Controller, Clipboard, HMD, UndoStack, ParticleExplorerTool */ (function() { // BEGIN LOCAL_SCOPE + +"use strict"; var HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/"; var EDIT_TOGGLE_BUTTON = "com.highfidelity.interface.system.editButton"; @@ -41,19 +41,19 @@ Script.include([ var selectionDisplay = SelectionDisplay; var selectionManager = SelectionManager; -const PARTICLE_SYSTEM_URL = Script.resolvePath("assets/images/icon-particles.svg"); -const POINT_LIGHT_URL = Script.resolvePath("assets/images/icon-point-light.svg"); -const SPOT_LIGHT_URL = Script.resolvePath("assets/images/icon-spot-light.svg"); +var PARTICLE_SYSTEM_URL = Script.resolvePath("assets/images/icon-particles.svg"); +var POINT_LIGHT_URL = Script.resolvePath("assets/images/icon-point-light.svg"); +var SPOT_LIGHT_URL = Script.resolvePath("assets/images/icon-spot-light.svg"); entityIconOverlayManager = new EntityIconOverlayManager(['Light', 'ParticleEffect'], function(entityID) { var properties = Entities.getEntityProperties(entityID, ['type', 'isSpotlight']); if (properties.type === 'Light') { return { url: properties.isSpotlight ? SPOT_LIGHT_URL : POINT_LIGHT_URL, - } + }; } else { return { url: PARTICLE_SYSTEM_URL, - } + }; } }); @@ -94,7 +94,7 @@ selectionManager.addEventListener(function () { } }); -const KEY_P = 80; //Key code for letter p used for Parenting hotkey. +var KEY_P = 80; //Key code for letter p used for Parenting hotkey. var DEGREES_TO_RADIANS = Math.PI / 180.0; var RADIANS_TO_DEGREES = 180.0 / Math.PI; @@ -652,7 +652,7 @@ var toolBar = (function () { grid.setEnabled(true); propertiesTool.setVisible(true); selectionDisplay.triggerMapping.enable(); - print("starting tablet in landscape mode") + print("starting tablet in landscape mode"); tablet.landscape = true; // Not sure what the following was meant to accomplish, but it currently causes // everybody else to think that Interface has lost focus overall. fogbugzid:558 @@ -1356,7 +1356,7 @@ function unparentSelectedEntities() { if (parentId !== null && parentId.length > 0 && parentId !== "{00000000-0000-0000-0000-000000000000}") { parentCheck = true; } - Entities.editEntity(id, {parentID: null}) + Entities.editEntity(id, {parentID: null}); return true; }); if (parentCheck) { @@ -1391,7 +1391,7 @@ function parentSelectedEntities() { if (parentId !== lastEntityId) { parentCheck = true; } - Entities.editEntity(id, {parentID: lastEntityId}) + Entities.editEntity(id, {parentID: lastEntityId}); } }); @@ -1564,9 +1564,9 @@ function importSVO(importURL) { var entityPositions = []; var entityParentIDs = []; - var properties = Entities.getEntityProperties(pastedEntityIDs[0], ["type"]); + var propType = Entities.getEntityProperties(pastedEntityIDs[0], ["type"]).type; var NO_ADJUST_ENTITY_TYPES = ["Zone", "Light", "ParticleEffect"]; - if (NO_ADJUST_ENTITY_TYPES.indexOf(properties.type) === -1) { + if (NO_ADJUST_ENTITY_TYPES.indexOf(propType) === -1) { var targetDirection; if (Camera.mode === "entity" || Camera.mode === "independent") { targetDirection = Camera.orientation; @@ -1579,36 +1579,36 @@ function importSVO(importURL) { var deltaParallel = HALF_TREE_SCALE; // Distance to move entities parallel to targetDirection. var deltaPerpendicular = Vec3.ZERO; // Distance to move entities perpendicular to targetDirection. for (var i = 0, length = pastedEntityIDs.length; i < length; i++) { - var properties = Entities.getEntityProperties(pastedEntityIDs[i], ["position", "dimensions", + var curLoopEntityProps = Entities.getEntityProperties(pastedEntityIDs[i], ["position", "dimensions", "registrationPoint", "rotation", "parentID"]); var adjustedPosition = adjustPositionPerBoundingBox(targetPosition, targetDirection, - properties.registrationPoint, properties.dimensions, properties.rotation); - var delta = Vec3.subtract(adjustedPosition, properties.position); + curLoopEntityProps.registrationPoint, curLoopEntityProps.dimensions, curLoopEntityProps.rotation); + var delta = Vec3.subtract(adjustedPosition, curLoopEntityProps.position); var distance = Vec3.dot(delta, targetDirection); deltaParallel = Math.min(distance, deltaParallel); deltaPerpendicular = Vec3.sum(Vec3.subtract(delta, Vec3.multiply(distance, targetDirection)), deltaPerpendicular); - entityPositions[i] = properties.position; - entityParentIDs[i] = properties.parentID; + entityPositions[i] = curLoopEntityProps.position; + entityParentIDs[i] = curLoopEntityProps.parentID; } deltaPerpendicular = Vec3.multiply(1 / pastedEntityIDs.length, deltaPerpendicular); deltaPosition = Vec3.sum(Vec3.multiply(deltaParallel, targetDirection), deltaPerpendicular); } if (grid.getSnapToGrid()) { - var properties = Entities.getEntityProperties(pastedEntityIDs[0], ["position", "dimensions", + var firstEntityProps = Entities.getEntityProperties(pastedEntityIDs[0], ["position", "dimensions", "registrationPoint"]); - var position = Vec3.sum(deltaPosition, properties.position); - position = grid.snapToSurface(grid.snapToGrid(position, false, properties.dimensions, - properties.registrationPoint), properties.dimensions, properties.registrationPoint); - deltaPosition = Vec3.subtract(position, properties.position); + var positionPreSnap = Vec3.sum(deltaPosition, firstEntityProps.position); + position = grid.snapToSurface(grid.snapToGrid(positionPreSnap, false, firstEntityProps.dimensions, + firstEntityProps.registrationPoint), firstEntityProps.dimensions, firstEntityProps.registrationPoint); + deltaPosition = Vec3.subtract(position, firstEntityProps.position); } if (!Vec3.equal(deltaPosition, Vec3.ZERO)) { - for (var i = 0, length = pastedEntityIDs.length; i < length; i++) { - if (Uuid.isNull(entityParentIDs[i])) { - Entities.editEntity(pastedEntityIDs[i], { - position: Vec3.sum(deltaPosition, entityPositions[i]) + for (var editEntityIndex = 0, numEntities = pastedEntityIDs.length; editEntityIndex < numEntities; editEntityIndex++) { + if (Uuid.isNull(entityParentIDs[editEntityIndex])) { + Entities.editEntity(pastedEntityIDs[editEntityIndex], { + position: Vec3.sum(deltaPosition, entityPositions[editEntityIndex]) }); } } @@ -2254,7 +2254,7 @@ entityListTool.webView.webEventReceived.connect(function (data) { try { data = JSON.parse(data); } catch(e) { - print("edit.js: Error parsing JSON: " + e.name + " data " + data) + print("edit.js: Error parsing JSON: " + e.name + " data " + data); return; } From 75e1b265d55a81ffa583b4058ed3153e1b9089cc Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Mon, 10 Jul 2017 17:48:53 +0100 Subject: [PATCH 0849/1049] comment out code that causes a crash on launch from fresh install --- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index 19cd37a6cb..9df727424f 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -831,7 +831,9 @@ bool OffscreenQmlSurface::eventFilter(QObject* originalDestination, QEvent* even mouseEvent->screenPos(), mouseEvent->button(), mouseEvent->buttons(), mouseEvent->modifiers()); if (event->type() == QEvent::MouseMove) { - _qmlContext->setContextProperty("lastMousePosition", transformedPos); + // TODO - this line necessary for the QML Tooltop to work (which is not currently being used), but it causes interface to crash on launch on a fresh install + // need to investigate into why this crash is happening. + //_qmlContext->setContextProperty("lastMousePosition", transformedPos); } mappedEvent.ignore(); if (QCoreApplication::sendEvent(_quickWindow, &mappedEvent)) { From f170449b887954eb2acd66ee8fcb9cd245d58ec3 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 10 Jul 2017 10:25:37 -0700 Subject: [PATCH 0850/1049] Don't show SPECTATOR app in Desktop mode --- scripts/system/spectatorCamera.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 6a80daae85..99f064e933 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -131,10 +131,10 @@ // Relevant Variables: // -button: The tablet button. // -buttonName: The name of the button. - // -showInDesktop: Set to "true" to show the "SPECTATOR" app in desktop mode. + // -showSpectatorInDesktop: Set to "true" to show the "SPECTATOR" app in desktop mode. var button = false; var buttonName = "SPECTATOR"; - var showSpectatorInDesktop = true; + var showSpectatorInDesktop = false; function addOrRemoveButton(isShuttingDown, isHMDMode) { if (!tablet) { print("Warning in addOrRemoveButton(): 'tablet' undefined!"); From 89a072cfeed52dcfd22281b232aa4084a1c8cac1 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Mon, 10 Jul 2017 19:05:07 +0100 Subject: [PATCH 0851/1049] fixed hmd keyboard for goto --- .../resources/qml/hifi/tablet/TabletAddressDialog.qml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index a02e79a5e2..8bf13bad76 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -99,7 +99,13 @@ StackView { height: parent.height MouseArea { - anchors.fill: parent + anchors { + top: parent.top + left: parent.left + right: parent.right + bottom: keyboard.top + } + propagateComposedEvents: true onPressed: { parent.forceActiveFocus(); From 98ccfa80a229fa37aa2f7c21dd0f1079583f24e5 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 22 Jun 2017 14:32:11 -0700 Subject: [PATCH 0852/1049] don't add node missing from a replicated kill packet --- assignment-client/src/avatars/AvatarMixer.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index b4aae40c10..eea44f031e 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -85,7 +85,22 @@ void AvatarMixer::handleReplicatedPacket(QSharedPointer message auto nodeList = DependencyManager::get(); auto nodeID = QUuid::fromRfc4122(message->peek(NUM_BYTES_RFC4122_UUID)); - auto replicatedNode = addOrUpdateReplicatedNode(nodeID, message->getSenderSockAddr()); + SharedNodePointer replicatedNode; + + if (message->getType() == PacketType::ReplicatedKillAvatar) { + // this is a kill packet, which we should only process if we already have the node in our list + // since it of course does not make sense to add a node just to remove it an instant later + replicatedNode = nodeList->nodeWithUUID(nodeID); + + if (!replicatedNode) { + return; + } + } else { + replicatedNode = addOrUpdateReplicatedNode(nodeID, message->getSenderSockAddr()); + } + + // we better have a node to work with at this point + assert(replicatedNode); if (message->getType() == PacketType::ReplicatedAvatarIdentity) { handleAvatarIdentityPacket(message, replicatedNode); From b87d69b15d97efd718172be9d3d908e3395f7ea4 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Mon, 10 Jul 2017 13:16:08 -0700 Subject: [PATCH 0853/1049] Insure spectator camera preview is up when reopening tablet --- interface/resources/qml/hifi/SpectatorCamera.qml | 4 ++-- interface/src/ui/ResourceImageItem.cpp | 13 +++++++++---- interface/src/ui/ResourceImageItem.h | 1 + 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/interface/resources/qml/hifi/SpectatorCamera.qml b/interface/resources/qml/hifi/SpectatorCamera.qml index 12861ee386..4f27ab8b8e 100644 --- a/interface/resources/qml/hifi/SpectatorCamera.qml +++ b/interface/resources/qml/hifi/SpectatorCamera.qml @@ -251,8 +251,8 @@ Rectangle { // Spectator Camera Preview Hifi.ResourceImageItem { id: spectatorCameraPreview; - visible: false; - url: "resource://spectatorCameraFrame"; + visible: cameraToggleCheckbox.checked; + url: monitorShowsSwitch.checked ? "resource://spectatorCameraFrame" : "resource://hmdPreviewFrame"; ready: cameraToggleCheckBox.checked; mirrorVertically: true; anchors.fill: parent; diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index d7ad793bb8..dbe5cbe60d 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -66,15 +66,20 @@ void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { _ready = resourceImageItem->getReady(); readyChanged = true; } - + bool visibleChanged = false; + if (_visible != resourceImageItem->isVisible()) { + _visible = resourceImageItem->isVisible(); + visibleChanged=true; + } _window = resourceImageItem->window(); - if (_ready && !_url.isNull() && !_url.isEmpty() && (urlChanged || readyChanged || !_networkTexture)) { + + if (_ready && _visible && !_url.isNull() && !_url.isEmpty() && (visibleChanged || urlChanged || readyChanged || !_networkTexture)) { _networkTexture = DependencyManager::get()->getTexture(_url); } static const int UPDATE_TIMER_DELAY_IN_MS = 100; // 100 ms = 10 hz for now - if (_ready && !_updateTimer.isActive()) { + if (_ready && _visible && !_updateTimer.isActive()) { _updateTimer.start(UPDATE_TIMER_DELAY_IN_MS); - } else if (!_ready && _updateTimer.isActive()) { + } else if (!(_ready && _visible) && _updateTimer.isActive()) { _updateTimer.stop(); } } diff --git a/interface/src/ui/ResourceImageItem.h b/interface/src/ui/ResourceImageItem.h index 39cae44ed0..183e86ec63 100644 --- a/interface/src/ui/ResourceImageItem.h +++ b/interface/src/ui/ResourceImageItem.h @@ -30,6 +30,7 @@ public: private: bool _ready; QString _url; + bool _visible; NetworkTexturePointer _networkTexture; QQuickWindow* _window; From fcf4bfd59a65c2fe5342681bd79e30b41b54c208 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Mon, 10 Jul 2017 13:25:33 -0700 Subject: [PATCH 0854/1049] spacing issue --- interface/src/ui/ResourceImageItem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index dbe5cbe60d..2ff3121df4 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -69,7 +69,7 @@ void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { bool visibleChanged = false; if (_visible != resourceImageItem->isVisible()) { _visible = resourceImageItem->isVisible(); - visibleChanged=true; + visibleChanged = true; } _window = resourceImageItem->window(); From 303a3d1e4c688637944353e89f980e418e60b430 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 10 Jul 2017 13:27:45 -0700 Subject: [PATCH 0855/1049] Force Mono Preview when using Spectator Camera --- scripts/system/spectatorCamera.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 6a80daae85..1176a1a314 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -370,6 +370,7 @@ sendToQml({ method: 'updateMonitorShowsSwitch', params: monitorShowsCameraView }); sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); Menu.setIsOptionChecked("Disable Preview", false); + Menu.setIsOptionChecked("Mono Preview", true); } } From c32f4ab0d3e0d82974c6d6b5f8c787d331e833ce Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 10 Jul 2017 14:24:53 -0700 Subject: [PATCH 0856/1049] CR --- assignment-client/src/Agent.cpp | 8 ++++---- assignment-client/src/avatars/AvatarMixerSlave.cpp | 8 ++++---- libraries/avatars/src/AvatarData.cpp | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index beeae7527e..1de7fa135b 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -614,11 +614,11 @@ void Agent::processAgentAvatar() { if (avatarByteArray.size() > maximumByteArraySize) { qWarning() << " scriptedAvatar->toByteArrayStateful() without facial data resulted in very large buffer:" << avatarByteArray.size() << "... reduce to MinimumData"; avatarByteArray = scriptedAvatar->toByteArrayStateful(AvatarData::MinimumData, true); - } - if (avatarByteArray.size() > maximumByteArraySize) { - qWarning() << " scriptedAvatar->toByteArrayStateful() MinimumData resulted in very large buffer:" << avatarByteArray.size() << "... FAIL!!"; - return; + if (avatarByteArray.size() > maximumByteArraySize) { + qWarning() << " scriptedAvatar->toByteArrayStateful() MinimumData resulted in very large buffer:" << avatarByteArray.size() << "... FAIL!!"; + return; + } } } diff --git a/assignment-client/src/avatars/AvatarMixerSlave.cpp b/assignment-client/src/avatars/AvatarMixerSlave.cpp index 7e37f583ff..34feafbd4d 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.cpp +++ b/assignment-client/src/avatars/AvatarMixerSlave.cpp @@ -383,11 +383,11 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node) qCWarning(avatars) << "otherAvatar.toByteArray() without facial data resulted in very large buffer:" << bytes.size() << "... reduce to MinimumData"; bytes = otherAvatar->toByteArray(AvatarData::MinimumData, lastEncodeForOther, lastSentJointsForOther, hasFlagsOut, dropFaceTracking, distanceAdjust, viewerPosition, &lastSentJointsForOther); - } - if (bytes.size() > MAX_ALLOWED_AVATAR_DATA) { - qCWarning(avatars) << "otherAvatar.toByteArray() MinimumData resulted in very large buffer:" << bytes.size() << "... FAIL!!"; - includeThisAvatar = false; + if (bytes.size() > MAX_ALLOWED_AVATAR_DATA) { + qCWarning(avatars) << "otherAvatar.toByteArray() MinimumData resulted in very large buffer:" << bytes.size() << "... FAIL!!"; + includeThisAvatar = false; + } } } diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 036d67da17..96475159f2 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1754,11 +1754,11 @@ void AvatarData::sendAvatarDataPacket() { if (avatarByteArray.size() > maximumByteArraySize) { qCWarning(avatars) << "toByteArrayStateful() without facial data resulted in very large buffer:" << avatarByteArray.size() << "... reduce to MinimumData"; avatarByteArray = toByteArrayStateful(MinimumData, true); - } - if (avatarByteArray.size() > maximumByteArraySize) { - qCWarning(avatars) << "toByteArrayStateful() MinimumData resulted in very large buffer:" << avatarByteArray.size() << "... FAIL!!"; - return; + if (avatarByteArray.size() > maximumByteArraySize) { + qCWarning(avatars) << "toByteArrayStateful() MinimumData resulted in very large buffer:" << avatarByteArray.size() << "... FAIL!!"; + return; + } } } From 4a74522884b8576f0243eb9e5bcb064be1db0dea Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 10 Jul 2017 15:16:16 -0700 Subject: [PATCH 0857/1049] Ensure tablet button shows up; protections for controller mapping --- .../resources/qml/hifi/SpectatorCamera.qml | 6 ++-- scripts/system/spectatorCamera.js | 30 ++++++++++++++----- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/interface/resources/qml/hifi/SpectatorCamera.qml b/interface/resources/qml/hifi/SpectatorCamera.qml index 4f27ab8b8e..ca434caca0 100644 --- a/interface/resources/qml/hifi/SpectatorCamera.qml +++ b/interface/resources/qml/hifi/SpectatorCamera.qml @@ -227,11 +227,9 @@ Rectangle { height: 250; color: spectatorCameraPreview.visible ? "transparent" : "black"; - - AnimatedImage { source: "../../images/static.gif" - visible: !spectatorCameraPreview.visible; + visible: !cameraToggleCheckBox.checked; anchors.fill: parent; opacity: 0.15; } @@ -242,7 +240,7 @@ Rectangle { text: "Turn on Spectator Camera for a preview\nof what your monitor shows."; size: 16; color: hifi.colors.lightGrayText; - visible: !spectatorCameraPreview.visible; + visible: !cameraToggleCheckBox.checked; anchors.fill: parent; horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter; diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index b4011843a5..96785a7a03 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -149,7 +149,7 @@ button.clicked.connect(onTabletButtonClicked); } } else if (button) { - if (!showSpectatorInDesktop || isShuttingDown) { + if ((!isHMDMode && !showSpectatorInDesktop) || isShuttingDown) { button.clicked.disconnect(onTabletButtonClicked); tablet.removeButton(button); button = false; @@ -298,6 +298,9 @@ const SWITCH_VIEW_FROM_CONTROLLER_DEFAULT = false; var switchViewFromController = !!Settings.getValue('spectatorCamera/switchViewFromController', SWITCH_VIEW_FROM_CONTROLLER_DEFAULT); function setControllerMappingStatus(status) { + if (!controllerMapping) { + return; + } if (status) { controllerMapping.enable(); } else { @@ -326,11 +329,16 @@ var controllerMapping; var controllerType = "Other"; function registerButtonMappings() { + var VRDevices = Controller.getDeviceNames().toString(); - if (VRDevices.includes("Vive")) { - controllerType = "Vive"; - } else if (VRDevices.includes("OculusTouch")) { - controllerType = "OculusTouch"; + if (VRDevices) { + if (VRDevices.includes("Vive")) { + controllerType = "Vive"; + } else if (VRDevices.includes("OculusTouch")) { + controllerType = "OculusTouch"; + } else { + return; // Neither Vive nor Touch detected + } } controllerMappingName = 'Hifi-SpectatorCamera-Mapping'; @@ -379,6 +387,9 @@ sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); Menu.setIsOptionChecked("Disable Preview", false); Menu.setIsOptionChecked("Mono Preview", true); + if (!controllerMapping) { + registerButtonMappings(); + } } } @@ -432,8 +443,11 @@ // Function Name: onHMDChanged() // // Description: - // -Called from C++ when HMD mode is changed. The argument "isHMDMode" should be true if HMD is on; false otherwise. + // -Called from C++ when HMD mode is changed. The argument "isHMDMode" is true if HMD is on; false otherwise. function onHMDChanged(isHMDMode) { + if (!controllerMapping) { + registerButtonMappings(); + } setDisplay(monitorShowsCameraView); addOrRemoveButton(false, isHMDMode); if (!isHMDMode && !showSpectatorInDesktop) { @@ -458,7 +472,9 @@ } HMD.displayModeChanged.disconnect(onHMDChanged); Controller.keyPressEvent.disconnect(keyPressEvent); - controllerMapping.disable(); + if (controllerMapping) { + controllerMapping.disable(); + } } // These functions will be called when the script is loaded. From 5823efce76b03f108d3da802d741b18db6fab215 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 10 Jul 2017 15:51:27 -0700 Subject: [PATCH 0858/1049] Cleanup --- scripts/system/spectatorCamera.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 96785a7a03..c1b23ea02c 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -329,7 +329,6 @@ var controllerMapping; var controllerType = "Other"; function registerButtonMappings() { - var VRDevices = Controller.getDeviceNames().toString(); if (VRDevices) { if (VRDevices.includes("Vive")) { @@ -337,6 +336,7 @@ } else if (VRDevices.includes("OculusTouch")) { controllerType = "OculusTouch"; } else { + sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); return; // Neither Vive nor Touch detected } } @@ -384,12 +384,13 @@ tablet.loadQMLSource(SPECTATOR_CAMERA_QML_SOURCE); sendToQml({ method: 'updateSpectatorCameraCheckbox', params: !!camera }); sendToQml({ method: 'updateMonitorShowsSwitch', params: monitorShowsCameraView }); - sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); - Menu.setIsOptionChecked("Disable Preview", false); - Menu.setIsOptionChecked("Mono Preview", true); if (!controllerMapping) { registerButtonMappings(); + } else { + sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); } + Menu.setIsOptionChecked("Disable Preview", false); + Menu.setIsOptionChecked("Mono Preview", true); } } From ea62ef165cd8c953bf0c020580150f95cbe4f378 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 10 Jul 2017 16:13:45 -0700 Subject: [PATCH 0859/1049] Fix image container background --- interface/resources/qml/hifi/SpectatorCamera.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/SpectatorCamera.qml b/interface/resources/qml/hifi/SpectatorCamera.qml index ca434caca0..3a8559ab1e 100644 --- a/interface/resources/qml/hifi/SpectatorCamera.qml +++ b/interface/resources/qml/hifi/SpectatorCamera.qml @@ -225,7 +225,7 @@ Rectangle { anchors.topMargin: 20; anchors.right: parent.right; height: 250; - color: spectatorCameraPreview.visible ? "transparent" : "black"; + color: cameraToggleCheckBox.checked ? "transparent" : "black"; AnimatedImage { source: "../../images/static.gif" From 1cdc0071f3cfb489831f90d04171c6418d9d4906 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Mon, 10 Jul 2017 16:17:25 -0700 Subject: [PATCH 0860/1049] Fixed issue with hips and chest not ramping off properly. --- .../animation/src/AnimInverseKinematics.cpp | 99 +++++++++++-------- .../animation/src/AnimInverseKinematics.h | 11 +-- libraries/animation/src/Rig.cpp | 22 ----- libraries/animation/src/Rig.h | 3 - 4 files changed, 62 insertions(+), 73 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index a0cb8432d9..8c86ada43c 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -257,7 +257,7 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< if (_prevJointChainInfoVec[i].target.getType() != IKTarget::Type::Unknown && jointChainInfoVec[i].target.getType() == IKTarget::Type::Unknown) { IKTarget newTarget = _prevJointChainInfoVec[i].target; - newTarget.setWeight(alpha); + newTarget.setWeight((1.0f - alpha) * _prevJointChainInfoVec[i].target.getWeight()); jointChainInfoVec[i].target = newTarget; } } @@ -349,6 +349,7 @@ void AnimInverseKinematics::solve(const AnimContext& context, const std::vector< _prevJointChainInfoVec[i].timer = _prevJointChainInfoVec[i].timer - dt; if (_prevJointChainInfoVec[i].timer <= 0.0f) { _prevJointChainInfoVec[i] = jointChainInfoVec[i]; + _prevJointChainInfoVec[i].target = targets[i]; // store relative poses into unknown/rotation only joint chains. // so we have something to interpolate from if this chain is activated. IKTarget::Type type = _prevJointChainInfoVec[i].target.getType(); @@ -849,6 +850,24 @@ const AnimPoseVec& AnimInverseKinematics::evaluate(const AnimVariantMap& animVar return _relativePoses; } +AnimPose AnimInverseKinematics::applyHipsOffset() const { + glm::vec3 hipsOffset = _hipsOffset; + AnimPose relHipsPose = _relativePoses[_hipsIndex]; + float offsetLength = glm::length(hipsOffset); + const float MIN_HIPS_OFFSET_LENGTH = 0.03f; + if (offsetLength > MIN_HIPS_OFFSET_LENGTH) { + float scaleFactor = ((offsetLength - MIN_HIPS_OFFSET_LENGTH) / offsetLength); + glm::vec3 scaledHipsOffset = scaleFactor * hipsOffset; + if (_hipsParentIndex == -1) { + relHipsPose.trans() = _relativePoses[_hipsIndex].trans() + scaledHipsOffset; + } else { + AnimPose absHipsPose = _skeleton->getAbsolutePose(_hipsIndex, _relativePoses); + absHipsPose.trans() += scaledHipsOffset; + relHipsPose = _skeleton->getAbsolutePose(_hipsParentIndex, _relativePoses).inverse() * absHipsPose; + } + } + return relHipsPose; +} //virtual const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars, const AnimContext& context, float dt, Triggers& triggersOut, const AnimPoseVec& underPoses) { @@ -925,7 +944,7 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars { PROFILE_RANGE_EX(simulation_animation, "ik/shiftHips", 0xffff00ff, 0); - if (_hipsTargetIndex >= 0 && _hipsTargetIndex < (int)targets.size()) { + if (_hipsTargetIndex >= 0 && _hipsTargetIndex >= 0 && _hipsTargetIndex < (int)targets.size()) { // slam the hips to match the _hipsTarget AnimPose absPose = targets[_hipsTargetIndex].getPose(); @@ -934,7 +953,7 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars AnimPose parentAbsPose = _skeleton->getAbsolutePose(parentIndex, _relativePoses); // do smooth interpolation of hips, if necessary. - if (_prevJointChainInfoVec[_hipsTargetIndex].timer > 0.0f) { + if (_prevJointChainInfoVec[_hipsTargetIndex].timer > 0.0f && _prevJointChainInfoVec[_hipsTargetIndex].jointInfoVec.size() > 0) { float alpha = (JOINT_CHAIN_INTERP_TIME - _prevJointChainInfoVec[_hipsTargetIndex].timer) / JOINT_CHAIN_INTERP_TIME; auto& info = _prevJointChainInfoVec[_hipsTargetIndex].jointInfoVec[0]; @@ -944,22 +963,36 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars } _relativePoses[_hipsIndex] = parentAbsPose.inverse() * absPose; + _relativePoses[_hipsIndex].scale() = glm::vec3(1.0f); + _hipsOffset = Vectors::ZERO; + + } else if (_hipsIndex >= 0) { - } else { // if there is no hips target, shift hips according to the _hipsOffset from the previous frame - float offsetLength = glm::length(_hipsOffset); - const float MIN_HIPS_OFFSET_LENGTH = 0.03f; - if (offsetLength > MIN_HIPS_OFFSET_LENGTH && _hipsIndex >= 0) { - float scaleFactor = ((offsetLength - MIN_HIPS_OFFSET_LENGTH) / offsetLength); - glm::vec3 hipsOffset = scaleFactor * _hipsOffset; - if (_hipsParentIndex == -1) { - _relativePoses[_hipsIndex].trans() = _relativePoses[_hipsIndex].trans() + hipsOffset; - } else { - auto absHipsPose = _skeleton->getAbsolutePose(_hipsIndex, _relativePoses); - absHipsPose.trans() += hipsOffset; - _relativePoses[_hipsIndex] = _skeleton->getAbsolutePose(_hipsParentIndex, _relativePoses).inverse() * absHipsPose; + AnimPose relHipsPose = applyHipsOffset(); + + // determine if we should begin interpolating the hips. + for (size_t i = 0; i < targets.size(); i++) { + if (_prevJointChainInfoVec[i].target.getIndex() == _hipsIndex) { + if (_prevJointChainInfoVec[i].timer > 0.0f) { + // smoothly lerp in hipsOffset + float alpha = (JOINT_CHAIN_INTERP_TIME - _prevJointChainInfoVec[i].timer) / JOINT_CHAIN_INTERP_TIME; + AnimPose prevRelHipsPose(_prevJointChainInfoVec[i].jointInfoVec[0].rot, _prevJointChainInfoVec[i].jointInfoVec[0].trans); + ::blend(1, &prevRelHipsPose, &relHipsPose, alpha, &relHipsPose); + } + break; } } + + _relativePoses[_hipsIndex] = relHipsPose; + } + + // if there is an active jointChainInfo for the hips store the post shifted hips into it. + // This is so we have a valid pose to interplate from when the hips target is disabled. + if (_hipsTargetIndex >= 0) { + // AJT: TODO: WILL THIS WORK if hips aren't the root of skeleton? + jointChainInfoVec[_hipsTargetIndex].jointInfoVec[0].rot = _relativePoses[_hipsIndex].rot(); + jointChainInfoVec[_hipsTargetIndex].jointInfoVec[0].trans = _relativePoses[_hipsIndex].trans(); } // update all HipsRelative targets to account for the hips shift/ik target. @@ -1010,9 +1043,7 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars if (_hipsTargetIndex < 0) { PROFILE_RANGE_EX(simulation_animation, "ik/measureHipsOffset", 0xffff00ff, 0); - computeHipsOffset(targets, underPoses, dt); - } else { - _hipsOffset = Vectors::ZERO; + _hipsOffset = computeHipsOffset(targets, underPoses, dt, _hipsOffset); } } @@ -1021,23 +1052,15 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars } } - if (_leftHandIndex > -1) { - _uncontrolledLeftHandPose = _skeleton->getAbsolutePose(_leftHandIndex, underPoses); - } - if (_rightHandIndex > -1) { - _uncontrolledRightHandPose = _skeleton->getAbsolutePose(_rightHandIndex, underPoses); - } - if (_hipsIndex > -1) { - _uncontrolledHipsPose = _skeleton->getAbsolutePose(_hipsIndex, underPoses); - } - return _relativePoses; } -void AnimInverseKinematics::computeHipsOffset(const std::vector& targets, const AnimPoseVec& underPoses, float dt) { +glm::vec3 AnimInverseKinematics::computeHipsOffset(const std::vector& targets, const AnimPoseVec& underPoses, float dt, glm::vec3 prevHipsOffset) const { + // measure new _hipsOffset for next frame // by looking for discrepancies between where a targeted endEffector is // and where it wants to be (after IK solutions are done) + glm::vec3 hipsOffset = prevHipsOffset; glm::vec3 newHipsOffset = Vectors::ZERO; for (auto& target: targets) { int targetIndex = target.getIndex(); @@ -1053,9 +1076,9 @@ void AnimInverseKinematics::computeHipsOffset(const std::vector& targe } else if (target.getType() == IKTarget::Type::HmdHead) { // we want to shift the hips to bring the head to its designated position glm::vec3 actual = _skeleton->getAbsolutePose(_headIndex, _relativePoses).trans(); - _hipsOffset += target.getTranslation() - actual; + hipsOffset += target.getTranslation() - actual; // and ignore all other targets - newHipsOffset = _hipsOffset; + newHipsOffset = hipsOffset; break; } else if (target.getType() == IKTarget::Type::RotationAndPosition) { glm::vec3 actualPosition = _skeleton->getAbsolutePose(targetIndex, _relativePoses).trans(); @@ -1075,16 +1098,18 @@ void AnimInverseKinematics::computeHipsOffset(const std::vector& targe } } - // smooth transitions by relaxing _hipsOffset toward the new value + // smooth transitions by relaxing hipsOffset toward the new value const float HIPS_OFFSET_SLAVE_TIMESCALE = 0.10f; float tau = dt < HIPS_OFFSET_SLAVE_TIMESCALE ? dt / HIPS_OFFSET_SLAVE_TIMESCALE : 1.0f; - _hipsOffset += (newHipsOffset - _hipsOffset) * tau; + hipsOffset += (newHipsOffset - hipsOffset) * tau; // clamp the hips offset - float hipsOffsetLength = glm::length(_hipsOffset); + float hipsOffsetLength = glm::length(hipsOffset); if (hipsOffsetLength > _maxHipsOffsetLength) { - _hipsOffset *= _maxHipsOffsetLength / hipsOffsetLength; + hipsOffset *= _maxHipsOffsetLength / hipsOffsetLength; } + + return hipsOffset; } void AnimInverseKinematics::setMaxHipsOffsetLength(float maxLength) { @@ -1528,10 +1553,6 @@ void AnimInverseKinematics::setSkeletonInternal(AnimSkeleton::ConstPointer skele _leftHandIndex = -1; _rightHandIndex = -1; } - - _uncontrolledLeftHandPose = AnimPose(); - _uncontrolledRightHandPose = AnimPose(); - _uncontrolledHipsPose = AnimPose(); } static glm::vec3 sphericalToCartesian(float phi, float theta) { diff --git a/libraries/animation/src/AnimInverseKinematics.h b/libraries/animation/src/AnimInverseKinematics.h index d5fc5a6a8c..7f7640aa24 100644 --- a/libraries/animation/src/AnimInverseKinematics.h +++ b/libraries/animation/src/AnimInverseKinematics.h @@ -73,10 +73,6 @@ public: void setSolutionSource(SolutionSource solutionSource) { _solutionSource = solutionSource; } void setSolutionSourceVar(const QString& solutionSourceVar) { _solutionSourceVar = solutionSourceVar; } - const AnimPose& getUncontrolledLeftHandPose() { return _uncontrolledLeftHandPose; } - const AnimPose& getUncontrolledRightHandPose() { return _uncontrolledRightHandPose; } - const AnimPose& getUncontrolledHipPose() { return _uncontrolledHipsPose; } - protected: void computeTargets(const AnimVariantMap& animVars, std::vector& targets, const AnimPoseVec& underPoses); void solve(const AnimContext& context, const std::vector& targets, float dt, JointChainInfoVec& jointChainInfoVec); @@ -92,6 +88,7 @@ protected: void initRelativePosesFromSolutionSource(SolutionSource solutionSource, const AnimPoseVec& underPose); void blendToPoses(const AnimPoseVec& targetPoses, const AnimPoseVec& underPose, float blendFactor); void preconditionRelativePosesToAvoidLimbLock(const AnimContext& context, const std::vector& targets); + AnimPose applyHipsOffset() const; // used to pre-compute information about each joint influeced by a spline IK target. struct SplineJointInfo { @@ -110,7 +107,7 @@ protected: void clearConstraints(); void initConstraints(); void initLimitCenterPoses(); - void computeHipsOffset(const std::vector& targets, const AnimPoseVec& underPoses, float dt); + glm::vec3 computeHipsOffset(const std::vector& targets, const AnimPoseVec& underPoses, float dt, glm::vec3 prevHipsOffset) const; // no copies AnimInverseKinematics(const AnimInverseKinematics&) = delete; @@ -162,10 +159,6 @@ protected: SolutionSource _solutionSource { SolutionSource::RelaxToUnderPoses }; QString _solutionSourceVar; - AnimPose _uncontrolledLeftHandPose { AnimPose() }; - AnimPose _uncontrolledRightHandPose { AnimPose() }; - AnimPose _uncontrolledHipsPose { AnimPose() }; - JointChainInfoVec _prevJointChainInfoVec; }; diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 9cc09addb3..aa080dfa86 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -1703,25 +1703,3 @@ void Rig::computeAvatarBoundingCapsule( glm::vec3 rigCenter = transformPoint(_geometryToRigTransform, (0.5f * (totalExtents.maximum + totalExtents.minimum))); localOffsetOut = rigCenter - transformPoint(_geometryToRigTransform, rootPosition); } - -bool Rig::transitionHandPose(float deltaTime, float totalDuration, AnimPose& controlledHandPose, bool isLeftHand, - bool isToControlled, AnimPose& returnHandPose) { - auto ikNode = getAnimInverseKinematicsNode(); - if (ikNode) { - float alpha = 1.0f - deltaTime / totalDuration; - const AnimPose geometryToRigTransform(_geometryToRigTransform); - AnimPose uncontrolledHandPose; - if (isLeftHand) { - uncontrolledHandPose = geometryToRigTransform * ikNode->getUncontrolledLeftHandPose(); - } else { - uncontrolledHandPose = geometryToRigTransform * ikNode->getUncontrolledRightHandPose(); - } - if (isToControlled) { - ::blend(1, &uncontrolledHandPose, &controlledHandPose, alpha, &returnHandPose); - } else { - ::blend(1, &controlledHandPose, &uncontrolledHandPose, alpha, &returnHandPose); - } - return true; - } - return false; -} diff --git a/libraries/animation/src/Rig.h b/libraries/animation/src/Rig.h index ec13d98613..5293fa1fe7 100644 --- a/libraries/animation/src/Rig.h +++ b/libraries/animation/src/Rig.h @@ -340,9 +340,6 @@ protected: int _nextStateHandlerId { 0 }; QMutex _stateMutex; - bool transitionHandPose(float deltaTime, float totalDuration, AnimPose& controlledHandPose, bool isLeftHand, - bool isToControlled, AnimPose& returnHandPose); - glm::vec3 _prevRightFootPoleVector { Vectors::UNIT_Z }; bool _prevRightFootPoleVectorValid { false }; From b0177c25221d59c065a385b6287ca6a48b94e965 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Mon, 10 Jul 2017 16:25:37 -0700 Subject: [PATCH 0861/1049] remove comment, it does indeed work --- libraries/animation/src/AnimInverseKinematics.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index 8c86ada43c..20b62c2724 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -990,7 +990,6 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars // if there is an active jointChainInfo for the hips store the post shifted hips into it. // This is so we have a valid pose to interplate from when the hips target is disabled. if (_hipsTargetIndex >= 0) { - // AJT: TODO: WILL THIS WORK if hips aren't the root of skeleton? jointChainInfoVec[_hipsTargetIndex].jointInfoVec[0].rot = _relativePoses[_hipsIndex].rot(); jointChainInfoVec[_hipsTargetIndex].jointInfoVec[0].trans = _relativePoses[_hipsIndex].trans(); } From b74aad32ede3cb9d9c65d538c28b6099ca216f2c Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 10 Jul 2017 18:27:40 -0700 Subject: [PATCH 0862/1049] minor cleanup in OctreeSendThread::packetDistributor() --- .../src/octree/OctreeSendThread.cpp | 56 ++++++------------- 1 file changed, 18 insertions(+), 38 deletions(-) diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index 7db06f12c0..2a4e317670 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -334,8 +334,6 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* && ((!viewFrustumChanged && nodeData->getViewFrustumJustStoppedChanging()) || nodeData->hasLodChanged())); } - bool somethingToSend = true; // assume we have something - // If our packet already has content in it, then we must use the color choice of the waiting packet. // If we're starting a fresh packet, then... // If we're moving, and the client asked for low res, then we force monochrome, otherwise, use @@ -404,7 +402,6 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* // If we have something in our elementBag, then turn them into packets and send them out... if (!nodeData->elementBag.isEmpty()) { - int bytesWritten = 0; quint64 start = usecTimestampNow(); // TODO: add these to stats page @@ -414,6 +411,7 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* int extraPackingAttempts = 0; bool completedScene = false; + bool somethingToSend = true; // assume we have something while (somethingToSend && packetsSentThisInterval < maxPacketsPerInterval && !nodeData->isShuttingDown()) { float lockWaitElapsedUsec = OctreeServer::SKIP_TIME; float encodeElapsedUsec = OctreeServer::SKIP_TIME; @@ -461,7 +459,7 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* // are reported to client. Since you can encode without the lock nodeData->stats.encodeStarted(); - bytesWritten = _myServer->getOctree()->encodeTreeBitstream(subTree, &_packetData, nodeData->elementBag, params); + _myServer->getOctree()->encodeTreeBitstream(subTree, &_packetData, nodeData->elementBag, params); quint64 encodeEnd = usecTimestampNow(); encodeElapsedUsec = (float)(encodeEnd - encodeStart); @@ -479,45 +477,30 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* nodeData->stats.encodeStopped(); }); } else { - // If the bag was empty then we didn't even attempt to encode, and so we know the bytesWritten were 0 - bytesWritten = 0; somethingToSend = false; // this will cause us to drop out of the loop... } - // If the last node didn't fit, but we're in compressed mode, then we actually want to see if we can fit a - // little bit more in this packet. To do this we write into the packet, but don't send it yet, we'll - // keep attempting to write in compressed mode to add more compressed segments - - // We only consider sending anything if there is something in the _packetData to send... But - // if bytesWritten == 0 it means either the subTree couldn't fit or we had an empty bag... Both cases - // mean we should send the previous packet contents and reset it. if (completedScene || lastNodeDidntFit) { - + // we probably want to flush what has accumulated in nodeData but: + // do we have more data to send? and is there room? if (_packetData.hasContent()) { + // yes, more data to send quint64 compressAndWriteStart = usecTimestampNow(); - - // if for some reason the finalized size is greater than our available size, then probably the "compressed" - // form actually inflated beyond our padding, and in this case we will send the current packet, then - // write to out new packet... - unsigned int writtenSize = _packetData.getFinalizedSize() + sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE); - - if (writtenSize > nodeData->getAvailable()) { + unsigned int additionalSize = _packetData.getFinalizedSize() + sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE); + if (additionalSize > nodeData->getAvailable()) { + // no room --> flush what we've got packetsSentThisInterval += handlePacketSend(node, nodeData, trueBytesSent, truePacketsSent); } + // either there is room, or we've flushed and reset nodeData's data buffer + // so we can transfer whatever is in _packetData to nodeData nodeData->writeToPacket(_packetData.getFinalizedData(), _packetData.getFinalizedSize()); - quint64 compressAndWriteEnd = usecTimestampNow(); - compressAndWriteElapsedUsec = (float)(compressAndWriteEnd - compressAndWriteStart); + compressAndWriteElapsedUsec = (float)(usecTimestampNow()- compressAndWriteStart); } - // If we're not running compressed, then we know we can just send now. Or if we're running compressed, but - // the packet doesn't have enough space to bother attempting to pack more... - bool sendNow = true; - - if (!completedScene && (nodeData->getAvailable() >= MINIMUM_ATTEMPT_MORE_PACKING && - extraPackingAttempts <= REASONABLE_NUMBER_OF_PACKING_ATTEMPTS)) { - sendNow = false; // try to pack more - } + bool sendNow = completedScene || + nodeData->getAvailable() < MINIMUM_ATTEMPT_MORE_PACKING || + extraPackingAttempts > REASONABLE_NUMBER_OF_PACKING_ATTEMPTS; int targetSize = MAX_OCTREE_PACKET_DATA_SIZE; if (sendNow) { @@ -529,16 +512,13 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* targetSize = nodeData->getAvailable() - sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE); extraPackingAttempts = 0; } else { - // If we're in compressed mode, then we want to see if we have room for more in this wire packet. - // but we've finalized the _packetData, so we want to start a new section, we will do that by - // resetting the packet settings with the max uncompressed size of our current available space - // in the wire packet. We also include room for our section header, and a little bit of padding - // to account for the fact that whenc compressing small amounts of data, we sometimes end up with - // a larger compressed size then uncompressed size + // We want to see if we have room for more in this wire packet but we've copied the _packetData, + // so we want to start a new section. We will do that by resetting the packet settings with the max + // size of our current available space in the wire packet plus room for our section header and a + // little bit of padding. targetSize = nodeData->getAvailable() - sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE) - COMPRESS_PADDING; } _packetData.changeSettings(true, targetSize); // will do reset - NOTE: Always compressed - } OctreeServer::trackTreeWaitTime(lockWaitElapsedUsec); OctreeServer::trackEncodeTime(encodeElapsedUsec); From e08e9d68216316a92dee03a1e6d6c0624368d683 Mon Sep 17 00:00:00 2001 From: NeetBhagat Date: Tue, 11 Jul 2017 20:39:51 +0530 Subject: [PATCH 0863/1049] The current scale of avatar should not be more than domain's max_avatar_scale and not less than domain's min_avatar_scale. --- interface/src/avatar/MyAvatar.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index fc86bfd959..41ae07f54f 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2266,31 +2266,31 @@ void MyAvatar::restrictScaleFromDomainSettings(const QJsonObject& domainSettings static const QString MAX_SCALE_OPTION = "max_avatar_scale"; float settingMaxScale = avatarsObject[MAX_SCALE_OPTION].toDouble(MAX_AVATAR_SCALE); setDomainMaximumScale(settingMaxScale); - - // Set avatar scale. The current avatar scale should not be more than domain's max_avatar_scale. - Settings settings; - settings.beginGroup("Avatar"); - _targetScale = loadSetting(settings, "scale", 1.0f); - qCDebug(interfaceapp, "Current avatar scale is %f. Receive max_avatar_scale %f from this domain settings. Selecting the minimum value to set the scale of an avatar.", _targetScale, _domainMaximumScale); - _targetScale = (_targetScale > _domainMaximumScale) ? _domainMaximumScale : _targetScale; - qCDebug(interfaceapp) << "Avatar scale " << _targetScale; - setScale(glm::vec3(_targetScale)); - settings.endGroup(); + // make sure that the domain owner didn't flip min and max if (_domainMinimumScale > _domainMaximumScale) { std::swap(_domainMinimumScale, _domainMaximumScale); } + // Set avatar current scale + Settings settings; + settings.beginGroup("Avatar"); + _targetScale = loadSetting(settings, "scale", 1.0f); - qCDebug(interfaceapp, "This domain requires a minimum avatar scale of %f and a maximum avatar scale of %f", - (double)_domainMinimumScale, (double)_domainMaximumScale); + qCDebug(interfaceapp, "This domain requires a minimum avatar scale of %f and a maximum avatar scale of %f. Current avatar scale is %f", + (double)_domainMinimumScale, (double)_domainMaximumScale, (double)_targetScale); // debug to log if this avatar's scale in this domain will be clamped - auto clampedScale = glm::clamp(_targetScale, _domainMinimumScale, _domainMaximumScale); + float clampedScale = glm::clamp(_targetScale, _domainMinimumScale, _domainMaximumScale); if (_targetScale != clampedScale) { - qCDebug(interfaceapp, "Avatar scale will be clamped to %f because %f is not allowed by current domain", - (double)clampedScale, (double)_targetScale); + qCDebug(interfaceapp, "Current avatar scale is clamped to %f because %f is not allowed by current domain", + clampedScale, _targetScale); + // The current scale of avatar should not be more than domain's max_avatar_scale and not less than domain's min_avatar_scale . + _targetScale = clampedScale; } + + setScale(glm::vec3(_targetScale)); + settings.endGroup(); } void MyAvatar::clearScaleRestriction() { From 076ae28bed5d46df9d892bf831940b102845931c Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 11 Jul 2017 09:52:39 -0700 Subject: [PATCH 0864/1049] one less strand of spaghetti when counting packets --- .../src/octree/OctreeSendThread.cpp | 28 +++++++++++-------- .../src/octree/OctreeSendThread.h | 6 ++-- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index 2a4e317670..028128e80b 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -130,7 +130,7 @@ AtomicUIntStat OctreeSendThread::_totalSpecialPackets { 0 }; int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* nodeData, int& trueBytesSent, - int& truePacketsSent, bool dontSuppressDuplicate) { + bool dontSuppressDuplicate) { OctreeServer::didHandlePacketSend(this); // if we're shutting down, then exit early @@ -222,7 +222,6 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* } trueBytesSent += statsPacket.getDataSize(); - truePacketsSent++; packetsSent++; OctreeServer::didCallWriteDatagram(this); @@ -290,7 +289,6 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* if (packetSent) { nodeData->stats.packetSent(nodeData->getPacket().getPayloadSize()); trueBytesSent += nodeData->getPacket().getPayloadSize(); - truePacketsSent++; packetsSent++; nodeData->octreePacketSent(); nodeData->resetOctreePacket(); @@ -342,7 +340,9 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* // If we have a packet waiting, and our desired want color, doesn't match the current waiting packets color // then let's just send that waiting packet. if (nodeData->isPacketWaiting()) { - packetsSentThisInterval += handlePacketSend(node, nodeData, trueBytesSent, truePacketsSent); + int numPackets = handlePacketSend(node, nodeData, trueBytesSent); + truePacketsSent += numPackets; + packetsSentThisInterval += numPackets; } else { nodeData->resetOctreePacket(); } @@ -373,8 +373,9 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* //unsigned long encodeTime = nodeData->stats.getTotalEncodeTime(); //unsigned long elapsedTime = nodeData->stats.getElapsedTime(); - int packetsJustSent = handlePacketSend(node, nodeData, trueBytesSent, truePacketsSent, isFullScene); - packetsSentThisInterval += packetsJustSent; + int numPackets = handlePacketSend(node, nodeData, trueBytesSent, isFullScene); + truePacketsSent += numPackets; + packetsSentThisInterval += numPackets; // If we're starting a full scene, then definitely we want to empty the elementBag if (isFullScene) { @@ -489,7 +490,9 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* unsigned int additionalSize = _packetData.getFinalizedSize() + sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE); if (additionalSize > nodeData->getAvailable()) { // no room --> flush what we've got - packetsSentThisInterval += handlePacketSend(node, nodeData, trueBytesSent, truePacketsSent); + int numPackets = handlePacketSend(node, nodeData, trueBytesSent); + truePacketsSent += numPackets; + packetsSentThisInterval += numPackets; } // either there is room, or we've flushed and reset nodeData's data buffer @@ -505,7 +508,9 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* int targetSize = MAX_OCTREE_PACKET_DATA_SIZE; if (sendNow) { quint64 packetSendingStart = usecTimestampNow(); - packetsSentThisInterval += handlePacketSend(node, nodeData, trueBytesSent, truePacketsSent); + int numPackets = handlePacketSend(node, nodeData, trueBytesSent); + truePacketsSent += numPackets; + packetsSentThisInterval += numPackets; quint64 packetSendingEnd = usecTimestampNow(); packetSendingElapsedUsec = (float)(packetSendingEnd - packetSendingStart); @@ -587,12 +592,11 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* // the clients will know the scene is stable if (isFullScene) { int thisTrueBytesSent = 0; - int thisTruePacketsSent = 0; nodeData->stats.sceneCompleted(); - int packetsJustSent = handlePacketSend(node, nodeData, thisTrueBytesSent, thisTruePacketsSent, true); + int numPackets = handlePacketSend(node, nodeData, thisTrueBytesSent, true); _totalBytes += thisTrueBytesSent; - _totalPackets += thisTruePacketsSent; - truePacketsSent += packetsJustSent; + _totalPackets += numPackets; + truePacketsSent += numPackets; } } diff --git a/assignment-client/src/octree/OctreeSendThread.h b/assignment-client/src/octree/OctreeSendThread.h index 06c9b5f1d6..f1d153b6e3 100644 --- a/assignment-client/src/octree/OctreeSendThread.h +++ b/assignment-client/src/octree/OctreeSendThread.h @@ -34,7 +34,7 @@ public: void setIsShuttingDown(); bool isShuttingDown() { return _isShuttingDown; } - + QUuid getNodeUuid() const { return _nodeUuid; } static AtomicUIntStat _totalBytes; @@ -58,9 +58,9 @@ protected: QWeakPointer _node; private: - int handlePacketSend(SharedNodePointer node, OctreeQueryNode* nodeData, int& trueBytesSent, int& truePacketsSent, bool dontSuppressDuplicate = false); + int handlePacketSend(SharedNodePointer node, OctreeQueryNode* nodeData, int& trueBytesSent, bool dontSuppressDuplicate = false); int packetDistributor(SharedNodePointer node, OctreeQueryNode* nodeData, bool viewFrustumChanged); - + QUuid _nodeUuid; From ca3f0ceecbe5d57481000fc23a6ea14beaf0b619 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 11 Jul 2017 10:02:18 -0700 Subject: [PATCH 0865/1049] remove crufty comments --- assignment-client/src/octree/OctreeSendThread.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index 028128e80b..7c6478208e 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -332,13 +332,7 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* && ((!viewFrustumChanged && nodeData->getViewFrustumJustStoppedChanging()) || nodeData->hasLodChanged())); } - // If our packet already has content in it, then we must use the color choice of the waiting packet. - // If we're starting a fresh packet, then... - // If we're moving, and the client asked for low res, then we force monochrome, otherwise, use - // the clients requested color state. - - // If we have a packet waiting, and our desired want color, doesn't match the current waiting packets color - // then let's just send that waiting packet. + // send any waiting packet if (nodeData->isPacketWaiting()) { int numPackets = handlePacketSend(node, nodeData, trueBytesSent); truePacketsSent += numPackets; From a5cd11cea7d65de0a492aa53fcc4935f03861442 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 11 Jul 2017 10:11:24 -0700 Subject: [PATCH 0866/1049] remove more crufty comments --- assignment-client/src/octree/OctreeSendThread.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index 7c6478208e..e6449f9f72 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -399,10 +399,6 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* if (!nodeData->elementBag.isEmpty()) { quint64 start = usecTimestampNow(); - // TODO: add these to stats page - //quint64 startCompressTimeMsecs = OctreePacketData::getCompressContentTime() / 1000; - //quint64 startCompressCalls = OctreePacketData::getCompressContentCalls(); - int extraPackingAttempts = 0; bool completedScene = false; @@ -570,12 +566,6 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* int elapsedmsec = (end - start) / USECS_PER_MSEC; OctreeServer::trackLoopTime(elapsedmsec); - // TODO: add these to stats page - //quint64 endCompressCalls = OctreePacketData::getCompressContentCalls(); - //int elapsedCompressCalls = endCompressCalls - startCompressCalls; - //quint64 endCompressTimeMsecs = OctreePacketData::getCompressContentTime() / 1000; - //int elapsedCompressTimeMsecs = endCompressTimeMsecs - startCompressTimeMsecs; - // if after sending packets we've emptied our bag, then we want to remember that we've sent all // the octree elements from the current view frustum if (nodeData->elementBag.isEmpty()) { From 2e8bd3c9cb7f9e7ce83e2715058c2998c3cef8b8 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 11 Jul 2017 10:16:55 -0700 Subject: [PATCH 0867/1049] Make Spectator Camera icon active when Camera is on --- scripts/system/spectatorCamera.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index c1b23ea02c..7786514edc 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -100,6 +100,10 @@ spectatorCameraConfig.attachedEntityId = camera; updateOverlay(); setDisplay(monitorShowsCameraView); + // Change button to active when window is first openend OR if the camera is on, false otherwise. + if (button) { + button.editProperties({ isActive: onSpectatorCameraScreen || camera }); + } } // Function Name: spectatorCameraOff() @@ -119,6 +123,10 @@ camera = false; viewFinderOverlay = false; setDisplay(monitorShowsCameraView); + // Change button to active when window is first openend OR if the camera is on, false otherwise. + if (button) { + button.editProperties({ isActive: onSpectatorCameraScreen || camera }); + } } // Function Name: addOrRemoveButton() @@ -402,9 +410,9 @@ function onTabletScreenChanged(type, url) { onSpectatorCameraScreen = (type === "QML" && url === SPECTATOR_CAMERA_QML_SOURCE); wireEventBridge(onSpectatorCameraScreen); - // for toolbar mode: change button to active when window is first openend, false otherwise. + // Change button to active when window is first openend OR if the camera is on, false otherwise. if (button) { - button.editProperties({ isActive: onSpectatorCameraScreen }); + button.editProperties({ isActive: onSpectatorCameraScreen || camera }); } } From e1df3feb5c78e65f867ff2cead3118050cf6f197 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Tue, 11 Jul 2017 10:54:35 -0700 Subject: [PATCH 0868/1049] fix hmd preview --- .../src/display-plugins/OpenGLDisplayPlugin.cpp | 16 +++++++++++----- .../src/display-plugins/hmd/HmdDisplayPlugin.cpp | 3 ++- .../src/model-networking/TextureCache.cpp | 4 ++-- .../src/model-networking/TextureCache.h | 2 +- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index e5de6fce8a..004cd05883 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -514,8 +514,14 @@ void OpenGLDisplayPlugin::renderFromTexture(gpu::Batch& batch, const gpu::Textur batch.setPipeline(_presentPipeline); batch.draw(gpu::TRIANGLE_STRIP, 4); if (copyFbo) { - gpu::Vec4i rect {0, 0, scissor.z, scissor.w}; - batch.blit(fbo, rect, copyFbo, rect); + gpu::Vec4i sourceRect(scissor.x, scissor.y, scissor.x + scissor.z, scissor.y + scissor.w); + gpu::Vec4i copyRect(0, 0, copyFbo->getWidth(), copyFbo->getHeight()); + batch.setFramebuffer(copyFbo); + batch.resetViewTransform(); + batch.clearColorFramebuffer(gpu::Framebuffer::BUFFER_COLOR0, vec4(0)); + batch.setViewportTransform(copyRect); + batch.setStateScissorRect(copyRect); + batch.blit(fbo, sourceRect, copyFbo, copyRect); } } @@ -849,9 +855,9 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne // setup source fbo glBindFramebuffer(GL_FRAMEBUFFER, fbo[0]); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, sourceTexture, 0); - GLint texWidth, texHeight; - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &texWidth); - glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &texHeight); + + GLint texWidth = networkTexture->getWidth(); + GLint texHeight = networkTexture->getHeight(); // setup destination fbo glBindFramebuffer(GL_FRAMEBUFFER, fbo[1]); diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index 656d3013ab..c0937ce289 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -286,7 +286,8 @@ void HmdDisplayPlugin::internalPresent() { viewport.z *= 2; } - auto fbo = DependencyManager::get()->getHmdPreviewFramebuffer(); + // TODO: only bother getting and passing in the hmdPreviewFramebuffer if the camera is on + auto fbo = DependencyManager::get()->getHmdPreviewFramebuffer(scissor.z, scissor.w); renderFromTexture(batch, _compositeFramebuffer->getRenderBuffer(0), viewport, scissor, fbo); }); swapBuffers(); diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index c511db28ac..3538080065 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -1001,9 +1001,9 @@ NetworkTexturePointer TextureCache::getResourceTexture(QUrl resourceTextureUrl) return NetworkTexturePointer(); } -const gpu::FramebufferPointer& TextureCache::getHmdPreviewFramebuffer() { +const gpu::FramebufferPointer& TextureCache::getHmdPreviewFramebuffer(int width, int height) { if (!_hmdPreviewFramebuffer) { - _hmdPreviewFramebuffer.reset(gpu::Framebuffer::create("hmdPreview",gpu::Element::COLOR_SRGBA_32, 2040, 1024)); + _hmdPreviewFramebuffer.reset(gpu::Framebuffer::create("hmdPreview",gpu::Element::COLOR_SRGBA_32, width, height)); } return _hmdPreviewFramebuffer; } diff --git a/libraries/model-networking/src/model-networking/TextureCache.h b/libraries/model-networking/src/model-networking/TextureCache.h index 8b7607d04d..2de447f573 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.h +++ b/libraries/model-networking/src/model-networking/TextureCache.h @@ -170,7 +170,7 @@ public: NetworkTexturePointer getResourceTexture(QUrl resourceTextureUrl); const gpu::FramebufferPointer& getSpectatorCameraFramebuffer(); void resetSpectatorCameraFramebuffer(int width, int height); - const gpu::FramebufferPointer& getHmdPreviewFramebuffer(); + const gpu::FramebufferPointer& getHmdPreviewFramebuffer(int width, int height); protected: // Overload ResourceCache::prefetch to allow specifying texture type for loads From 01ca1926131ebf8fcd1a544094e9d61fbccd3356 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 11 Jul 2017 21:16:13 +0100 Subject: [PATCH 0869/1049] fixed tablet scrolling --- interface/src/ui/overlays/Web3DOverlay.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 80f11fa552..1c01bd3781 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -451,7 +451,7 @@ void Web3DOverlay::handlePointerEventAsTouch(const PointerEvent& event) { // In Qt 5.9 mouse events must be sent before touch events to make sure some QtQuick components will // receive mouse events #if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) - if (!(this->_pressed && event.getType() == PointerEvent::Move)) { + if (event.getType() == PointerEvent::Move) { QMouseEvent* mouseEvent = new QMouseEvent(mouseType, windowPoint, windowPoint, windowPoint, button, buttons, Qt::NoModifier); QCoreApplication::postEvent(_webSurface->getWindow(), mouseEvent); } From 2f192fd48a23e8895c7e898ebfcdf74bb5bd7fe7 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 11 Jul 2017 21:19:06 +0100 Subject: [PATCH 0870/1049] added scroll fix for qt 5.6 --- interface/src/ui/overlays/Web3DOverlay.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 1c01bd3781..acba15d2ec 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -459,11 +459,10 @@ void Web3DOverlay::handlePointerEventAsTouch(const PointerEvent& event) { QCoreApplication::postEvent(_webSurface->getWindow(), touchEvent); #if QT_VERSION < QT_VERSION_CHECK(5, 9, 0) - if (this->_pressed && event.getType() == PointerEvent::Move) { - return; + if (event.getType() == PointerEvent::Move) { + QMouseEvent* mouseEvent = new QMouseEvent(mouseType, windowPoint, windowPoint, windowPoint, button, buttons, Qt::NoModifier); + QCoreApplication::postEvent(_webSurface->getWindow(), mouseEvent); } - QMouseEvent* mouseEvent = new QMouseEvent(mouseType, windowPoint, windowPoint, windowPoint, button, buttons, Qt::NoModifier); - QCoreApplication::postEvent(_webSurface->getWindow(), mouseEvent); #endif } From 9d111d1f92126001265bb0af305030f4b217a968 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 11 Jul 2017 13:42:35 -0700 Subject: [PATCH 0871/1049] remove unused OctreeSendThread::_nodeMissingCount --- assignment-client/src/octree/OctreeSendThread.cpp | 1 - assignment-client/src/octree/OctreeSendThread.h | 1 - 2 files changed, 2 deletions(-) diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index e6449f9f72..f35fe9ef70 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -81,7 +81,6 @@ bool OctreeSendThread::process() { // don't do any send processing until the initial load of the octree is complete... if (_myServer->isInitialLoadComplete()) { if (auto node = _node.lock()) { - _nodeMissingCount = 0; OctreeQueryNode* nodeData = static_cast(node->getLinkedData()); // Sometimes the node data has not yet been linked, in which case we can't really do anything diff --git a/assignment-client/src/octree/OctreeSendThread.h b/assignment-client/src/octree/OctreeSendThread.h index f1d153b6e3..df1d5f3811 100644 --- a/assignment-client/src/octree/OctreeSendThread.h +++ b/assignment-client/src/octree/OctreeSendThread.h @@ -66,7 +66,6 @@ private: OctreePacketData _packetData; - int _nodeMissingCount { 0 }; bool _isShuttingDown { false }; }; From 15879b28324dcde7c0b28c89855b01093b42a6e3 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 11 Jul 2017 13:53:08 -0700 Subject: [PATCH 0872/1049] + OctreeSendThread::traverseTreeAndSendContents() this abstracts a portion of OctreeSendThread::packetDistributor() which will make it easier to split apart the tree traversal from the sending of packets also cleaned up some of the packet stats tracking --- .../src/octree/OctreeSendThread.cpp | 370 +++++++++--------- .../src/octree/OctreeSendThread.h | 6 +- 2 files changed, 192 insertions(+), 184 deletions(-) diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index f35fe9ef70..edf7b6da0b 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -128,8 +128,7 @@ AtomicUIntStat OctreeSendThread::_totalSpecialBytes { 0 }; AtomicUIntStat OctreeSendThread::_totalSpecialPackets { 0 }; -int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* nodeData, int& trueBytesSent, - bool dontSuppressDuplicate) { +int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* nodeData, bool dontSuppressDuplicate) { OctreeServer::didHandlePacketSend(this); // if we're shutting down, then exit early @@ -140,15 +139,14 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* bool debug = _myServer->wantsDebugSending(); quint64 now = usecTimestampNow(); - bool packetSent = false; // did we send a packet? - int packetsSent = 0; + int numPackets = 0; // Here's where we check to see if this packet is a duplicate of the last packet. If it is, we will silently // obscure the packet and not send it. This allows the callers and upper level logic to not need to know about // this rate control savings. if (!dontSuppressDuplicate && nodeData->shouldSuppressDuplicatePacket()) { nodeData->resetOctreePacket(); // we still need to reset it though! - return packetsSent; // without sending... + return numPackets; // without sending... } // If we've got a stats message ready to send, then see if we can piggyback them together @@ -165,9 +163,12 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* // since a stats message is only included on end of scene, don't consider any of these bytes "wasted", since // there was nothing else to send. int thisWastedBytes = 0; + int numBytes = statsPacket.getDataSize(); _totalWastedBytes += thisWastedBytes; - _totalBytes += statsPacket.getDataSize(); + _totalBytes += numBytes; _totalPackets++; + _trueBytesSent += numBytes; + numPackets++; if (debug) { NLPacket& sentPacket = nodeData->getPacket(); @@ -190,18 +191,22 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* // actually send it OctreeServer::didCallWriteDatagram(this); DependencyManager::get()->sendUnreliablePacket(statsPacket, *node); - packetSent = true; } else { // not enough room in the packet, send two packets + + // first packet OctreeServer::didCallWriteDatagram(this); DependencyManager::get()->sendUnreliablePacket(statsPacket, *node); // since a stats message is only included on end of scene, don't consider any of these bytes "wasted", since // there was nothing else to send. int thisWastedBytes = 0; + int numBytes = statsPacket.getDataSize(); _totalWastedBytes += thisWastedBytes; - _totalBytes += statsPacket.getDataSize(); + _totalBytes += numBytes; _totalPackets++; + _trueBytesSent += numBytes; + numPackets++; if (debug) { NLPacket& sentPacket = nodeData->getPacket(); @@ -220,18 +225,17 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* "] wasted bytes:" << thisWastedBytes << " [" << _totalWastedBytes << "]"; } - trueBytesSent += statsPacket.getDataSize(); - packetsSent++; - + // second packet OctreeServer::didCallWriteDatagram(this); DependencyManager::get()->sendUnreliablePacket(nodeData->getPacket(), *node); - packetSent = true; - int packetSizeWithHeader = nodeData->getPacket().getDataSize(); - thisWastedBytes = udt::MAX_PACKET_SIZE - packetSizeWithHeader; + numBytes = nodeData->getPacket().getDataSize(); + thisWastedBytes = udt::MAX_PACKET_SIZE - numBytes; _totalWastedBytes += thisWastedBytes; - _totalBytes += nodeData->getPacket().getDataSize(); + _totalBytes += numBytes; _totalPackets++; + _trueBytesSent += numBytes; + numPackets++; if (debug) { NLPacket& sentPacket = nodeData->getPacket(); @@ -257,13 +261,13 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* // just send the octree packet OctreeServer::didCallWriteDatagram(this); DependencyManager::get()->sendUnreliablePacket(nodeData->getPacket(), *node); - packetSent = true; - int packetSizeWithHeader = nodeData->getPacket().getDataSize(); - int thisWastedBytes = udt::MAX_PACKET_SIZE - packetSizeWithHeader; + int numBytes = nodeData->getPacket().getDataSize(); + int thisWastedBytes = udt::MAX_PACKET_SIZE - numBytes; _totalWastedBytes += thisWastedBytes; - _totalBytes += packetSizeWithHeader; + _totalBytes += numBytes; _totalPackets++; + numPackets++; if (debug) { NLPacket& sentPacket = nodeData->getPacket(); @@ -278,22 +282,22 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* qDebug() << "Sending packet at " << now << " [" << _totalPackets <<"]: sequence: " << sequence << " timestamp: " << timestamp << - " size: " << packetSizeWithHeader << " [" << _totalBytes << + " size: " << numBytes << " [" << _totalBytes << "] wasted bytes:" << thisWastedBytes << " [" << _totalWastedBytes << "]"; } + _trueBytesSent += numBytes; } } // remember to track our stats - if (packetSent) { + if (numPackets > 0) { nodeData->stats.packetSent(nodeData->getPacket().getPayloadSize()); - trueBytesSent += nodeData->getPacket().getPayloadSize(); - packetsSent++; nodeData->octreePacketSent(); nodeData->resetOctreePacket(); } - return packetsSent; + _truePacketsSent += numPackets; + return numPackets; } /// Version of octree element distributor that sends the deepest LOD level at once @@ -312,13 +316,9 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* preDistributionProcessing(); } - // calculate max number of packets that can be sent during this interval - int clientMaxPacketsPerInterval = std::max(1, (nodeData->getMaxQueryPacketsPerSecond() / INTERVALS_PER_SECOND)); - int maxPacketsPerInterval = std::min(clientMaxPacketsPerInterval, _myServer->getPacketsPerClientPerInterval()); - - int truePacketsSent = 0; - int trueBytesSent = 0; - int packetsSentThisInterval = 0; + _truePacketsSent = 0; + _trueBytesSent = 0; + _packetsSentThisInterval = 0; bool isFullScene = nodeData->shouldForceFullScene(); if (isFullScene) { @@ -333,9 +333,7 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* // send any waiting packet if (nodeData->isPacketWaiting()) { - int numPackets = handlePacketSend(node, nodeData, trueBytesSent); - truePacketsSent += numPackets; - packetsSentThisInterval += numPackets; + _packetsSentThisInterval += handlePacketSend(node, nodeData); } else { nodeData->resetOctreePacket(); } @@ -366,9 +364,7 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* //unsigned long encodeTime = nodeData->stats.getTotalEncodeTime(); //unsigned long elapsedTime = nodeData->stats.getElapsedTime(); - int numPackets = handlePacketSend(node, nodeData, trueBytesSent, isFullScene); - truePacketsSent += numPackets; - packetsSentThisInterval += numPackets; + _packetsSentThisInterval += handlePacketSend(node, nodeData, isFullScene); // If we're starting a full scene, then definitely we want to empty the elementBag if (isFullScene) { @@ -398,165 +394,42 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* if (!nodeData->elementBag.isEmpty()) { quint64 start = usecTimestampNow(); - int extraPackingAttempts = 0; - bool completedScene = false; - - bool somethingToSend = true; // assume we have something - while (somethingToSend && packetsSentThisInterval < maxPacketsPerInterval && !nodeData->isShuttingDown()) { - float lockWaitElapsedUsec = OctreeServer::SKIP_TIME; - float encodeElapsedUsec = OctreeServer::SKIP_TIME; - float compressAndWriteElapsedUsec = OctreeServer::SKIP_TIME; - float packetSendingElapsedUsec = OctreeServer::SKIP_TIME; - - quint64 startInside = usecTimestampNow(); - - bool lastNodeDidntFit = false; // assume each node fits - if (!nodeData->elementBag.isEmpty()) { - - quint64 lockWaitStart = usecTimestampNow(); - _myServer->getOctree()->withReadLock([&]{ - quint64 lockWaitEnd = usecTimestampNow(); - lockWaitElapsedUsec = (float)(lockWaitEnd - lockWaitStart); - quint64 encodeStart = usecTimestampNow(); - - OctreeElementPointer subTree = nodeData->elementBag.extract(); - if (!subTree) { - return; - } - - float octreeSizeScale = nodeData->getOctreeSizeScale(); - int boundaryLevelAdjustClient = nodeData->getBoundaryLevelAdjust(); - - int boundaryLevelAdjust = boundaryLevelAdjustClient + - (viewFrustumChanged ? LOW_RES_MOVING_ADJUST : NO_BOUNDARY_ADJUST); - - EncodeBitstreamParams params(INT_MAX, WANT_EXISTS_BITS, DONT_CHOP, - viewFrustumChanged, boundaryLevelAdjust, octreeSizeScale, - isFullScene, _myServer->getJurisdiction(), nodeData); - nodeData->copyCurrentViewFrustum(params.viewFrustum); - if (viewFrustumChanged) { - nodeData->copyLastKnownViewFrustum(params.lastViewFrustum); - } - - // Our trackSend() function is implemented by the server subclass, and will be called back - // during the encodeTreeBitstream() as new entities/data elements are sent - params.trackSend = [this, node](const QUuid& dataID, quint64 dataEdited) { - _myServer->trackSend(dataID, dataEdited, node->getUUID()); - }; - - // TODO: should this include the lock time or not? This stat is sent down to the client, - // it seems like it may be a good idea to include the lock time as part of the encode time - // are reported to client. Since you can encode without the lock - nodeData->stats.encodeStarted(); - - _myServer->getOctree()->encodeTreeBitstream(subTree, &_packetData, nodeData->elementBag, params); - - quint64 encodeEnd = usecTimestampNow(); - encodeElapsedUsec = (float)(encodeEnd - encodeStart); - - // If after calling encodeTreeBitstream() there are no nodes left to send, then we know we've - // sent the entire scene. We want to know this below so we'll actually write this content into - // the packet and send it - completedScene = nodeData->elementBag.isEmpty(); - - if (params.stopReason == EncodeBitstreamParams::DIDNT_FIT) { - lastNodeDidntFit = true; - extraPackingAttempts++; - } - - nodeData->stats.encodeStopped(); - }); - } else { - somethingToSend = false; // this will cause us to drop out of the loop... - } - - if (completedScene || lastNodeDidntFit) { - // we probably want to flush what has accumulated in nodeData but: - // do we have more data to send? and is there room? - if (_packetData.hasContent()) { - // yes, more data to send - quint64 compressAndWriteStart = usecTimestampNow(); - unsigned int additionalSize = _packetData.getFinalizedSize() + sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE); - if (additionalSize > nodeData->getAvailable()) { - // no room --> flush what we've got - int numPackets = handlePacketSend(node, nodeData, trueBytesSent); - truePacketsSent += numPackets; - packetsSentThisInterval += numPackets; - } - - // either there is room, or we've flushed and reset nodeData's data buffer - // so we can transfer whatever is in _packetData to nodeData - nodeData->writeToPacket(_packetData.getFinalizedData(), _packetData.getFinalizedSize()); - compressAndWriteElapsedUsec = (float)(usecTimestampNow()- compressAndWriteStart); - } - - bool sendNow = completedScene || - nodeData->getAvailable() < MINIMUM_ATTEMPT_MORE_PACKING || - extraPackingAttempts > REASONABLE_NUMBER_OF_PACKING_ATTEMPTS; - - int targetSize = MAX_OCTREE_PACKET_DATA_SIZE; - if (sendNow) { - quint64 packetSendingStart = usecTimestampNow(); - int numPackets = handlePacketSend(node, nodeData, trueBytesSent); - truePacketsSent += numPackets; - packetsSentThisInterval += numPackets; - quint64 packetSendingEnd = usecTimestampNow(); - packetSendingElapsedUsec = (float)(packetSendingEnd - packetSendingStart); - - targetSize = nodeData->getAvailable() - sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE); - extraPackingAttempts = 0; - } else { - // We want to see if we have room for more in this wire packet but we've copied the _packetData, - // so we want to start a new section. We will do that by resetting the packet settings with the max - // size of our current available space in the wire packet plus room for our section header and a - // little bit of padding. - targetSize = nodeData->getAvailable() - sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE) - COMPRESS_PADDING; - } - _packetData.changeSettings(true, targetSize); // will do reset - NOTE: Always compressed - } - OctreeServer::trackTreeWaitTime(lockWaitElapsedUsec); - OctreeServer::trackEncodeTime(encodeElapsedUsec); - OctreeServer::trackCompressAndWriteTime(compressAndWriteElapsedUsec); - OctreeServer::trackPacketSendingTime(packetSendingElapsedUsec); - - quint64 endInside = usecTimestampNow(); - quint64 elapsedInsideUsecs = endInside - startInside; - OctreeServer::trackInsideTime((float)elapsedInsideUsecs); - } - - if (somethingToSend && _myServer->wantsVerboseDebug()) { - qCDebug(octree) << "Hit PPS Limit, packetsSentThisInterval =" << packetsSentThisInterval - << " maxPacketsPerInterval = " << maxPacketsPerInterval - << " clientMaxPacketsPerInterval = " << clientMaxPacketsPerInterval; - } + traverseTreeAndSendContents(node, nodeData, viewFrustumChanged, isFullScene); // Here's where we can/should allow the server to send other data... // send the environment packet // TODO: should we turn this into a while loop to better handle sending multiple special packets if (_myServer->hasSpecialPacketsToSend(node) && !nodeData->isShuttingDown()) { int specialPacketsSent = 0; - trueBytesSent += _myServer->sendSpecialPackets(node, nodeData, specialPacketsSent); + int specialBytesSent = _myServer->sendSpecialPackets(node, nodeData, specialPacketsSent); nodeData->resetOctreePacket(); // because nodeData's _sequenceNumber has changed - truePacketsSent += specialPacketsSent; - packetsSentThisInterval += specialPacketsSent; + _truePacketsSent += specialPacketsSent; + _trueBytesSent += specialBytesSent; + _packetsSentThisInterval += specialPacketsSent; _totalPackets += specialPacketsSent; - _totalBytes += trueBytesSent; + _totalBytes += specialBytesSent; _totalSpecialPackets += specialPacketsSent; - _totalSpecialBytes += trueBytesSent; + _totalSpecialBytes += specialBytesSent; } + // calculate max number of packets that can be sent during this interval + int clientMaxPacketsPerInterval = std::max(1, (nodeData->getMaxQueryPacketsPerSecond() / INTERVALS_PER_SECOND)); + int maxPacketsPerInterval = std::min(clientMaxPacketsPerInterval, _myServer->getPacketsPerClientPerInterval()); + // Re-send packets that were nacked by the client - while (nodeData->hasNextNackedPacket() && packetsSentThisInterval < maxPacketsPerInterval) { + while (nodeData->hasNextNackedPacket() && _packetsSentThisInterval < maxPacketsPerInterval) { const NLPacket* packet = nodeData->getNextNackedPacket(); if (packet) { DependencyManager::get()->sendUnreliablePacket(*packet, *node); - truePacketsSent++; - packetsSentThisInterval++; + int numBytes = packet->getDataSize(); + _truePacketsSent++; + _trueBytesSent += numBytes; + _packetsSentThisInterval++; - _totalBytes += packet->getDataSize(); _totalPackets++; + _totalBytes += numBytes; _totalWastedBytes += udt::MAX_PACKET_SIZE - packet->getDataSize(); } } @@ -574,16 +447,147 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* // If this was a full scene then make sure we really send out a stats packet at this point so that // the clients will know the scene is stable if (isFullScene) { - int thisTrueBytesSent = 0; nodeData->stats.sceneCompleted(); - int numPackets = handlePacketSend(node, nodeData, thisTrueBytesSent, true); - _totalBytes += thisTrueBytesSent; - _totalPackets += numPackets; - truePacketsSent += numPackets; + handlePacketSend(node, nodeData, true); } } } // end if bag wasn't empty, and so we sent stuff... - return truePacketsSent; + return _truePacketsSent; +} + +void OctreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData, bool viewFrustumChanged, bool isFullScene) { + // calculate max number of packets that can be sent during this interval + int clientMaxPacketsPerInterval = std::max(1, (nodeData->getMaxQueryPacketsPerSecond() / INTERVALS_PER_SECOND)); + int maxPacketsPerInterval = std::min(clientMaxPacketsPerInterval, _myServer->getPacketsPerClientPerInterval()); + + int extraPackingAttempts = 0; + bool completedScene = false; + + bool somethingToSend = true; // assume we have something + while (somethingToSend && _packetsSentThisInterval < maxPacketsPerInterval && !nodeData->isShuttingDown()) { + float lockWaitElapsedUsec = OctreeServer::SKIP_TIME; + float encodeElapsedUsec = OctreeServer::SKIP_TIME; + float compressAndWriteElapsedUsec = OctreeServer::SKIP_TIME; + float packetSendingElapsedUsec = OctreeServer::SKIP_TIME; + + quint64 startInside = usecTimestampNow(); + + bool lastNodeDidntFit = false; // assume each node fits + if (!nodeData->elementBag.isEmpty()) { + + quint64 lockWaitStart = usecTimestampNow(); + _myServer->getOctree()->withReadLock([&]{ + quint64 lockWaitEnd = usecTimestampNow(); + lockWaitElapsedUsec = (float)(lockWaitEnd - lockWaitStart); + quint64 encodeStart = usecTimestampNow(); + + OctreeElementPointer subTree = nodeData->elementBag.extract(); + if (!subTree) { + return; + } + + float octreeSizeScale = nodeData->getOctreeSizeScale(); + int boundaryLevelAdjustClient = nodeData->getBoundaryLevelAdjust(); + + int boundaryLevelAdjust = boundaryLevelAdjustClient + + (viewFrustumChanged ? LOW_RES_MOVING_ADJUST : NO_BOUNDARY_ADJUST); + + EncodeBitstreamParams params(INT_MAX, WANT_EXISTS_BITS, DONT_CHOP, + viewFrustumChanged, boundaryLevelAdjust, octreeSizeScale, + isFullScene, _myServer->getJurisdiction(), nodeData); + nodeData->copyCurrentViewFrustum(params.viewFrustum); + if (viewFrustumChanged) { + nodeData->copyLastKnownViewFrustum(params.lastViewFrustum); + } + + // Our trackSend() function is implemented by the server subclass, and will be called back + // during the encodeTreeBitstream() as new entities/data elements are sent + params.trackSend = [this, node](const QUuid& dataID, quint64 dataEdited) { + _myServer->trackSend(dataID, dataEdited, node->getUUID()); + }; + + // TODO: should this include the lock time or not? This stat is sent down to the client, + // it seems like it may be a good idea to include the lock time as part of the encode time + // are reported to client. Since you can encode without the lock + nodeData->stats.encodeStarted(); + + // NOTE: this is where the tree "contents" are actaully packed + _myServer->getOctree()->encodeTreeBitstream(subTree, &_packetData, nodeData->elementBag, params); + + quint64 encodeEnd = usecTimestampNow(); + encodeElapsedUsec = (float)(encodeEnd - encodeStart); + + // If after calling encodeTreeBitstream() there are no nodes left to send, then we know we've + // sent the entire scene. We want to know this below so we'll actually write this content into + // the packet and send it + completedScene = nodeData->elementBag.isEmpty(); + + if (params.stopReason == EncodeBitstreamParams::DIDNT_FIT) { + lastNodeDidntFit = true; + extraPackingAttempts++; + } + + nodeData->stats.encodeStopped(); + }); + } else { + somethingToSend = false; // this will cause us to drop out of the loop... + } + + if (completedScene || lastNodeDidntFit) { + // we probably want to flush what has accumulated in nodeData but: + // do we have more data to send? and is there room? + if (_packetData.hasContent()) { + // yes, more data to send + quint64 compressAndWriteStart = usecTimestampNow(); + unsigned int additionalSize = _packetData.getFinalizedSize() + sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE); + if (additionalSize > nodeData->getAvailable()) { + // no room --> flush what we've got + _packetsSentThisInterval += handlePacketSend(node, nodeData); + } + + // either there is room, or we've flushed and reset nodeData's data buffer + // so we can transfer whatever is in _packetData to nodeData + nodeData->writeToPacket(_packetData.getFinalizedData(), _packetData.getFinalizedSize()); + compressAndWriteElapsedUsec = (float)(usecTimestampNow()- compressAndWriteStart); + } + + bool sendNow = completedScene || + nodeData->getAvailable() < MINIMUM_ATTEMPT_MORE_PACKING || + extraPackingAttempts > REASONABLE_NUMBER_OF_PACKING_ATTEMPTS; + + int targetSize = MAX_OCTREE_PACKET_DATA_SIZE; + if (sendNow) { + quint64 packetSendingStart = usecTimestampNow(); + _packetsSentThisInterval += handlePacketSend(node, nodeData); + quint64 packetSendingEnd = usecTimestampNow(); + packetSendingElapsedUsec = (float)(packetSendingEnd - packetSendingStart); + + targetSize = nodeData->getAvailable() - sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE); + extraPackingAttempts = 0; + } else { + // We want to see if we have room for more in this wire packet but we've copied the _packetData, + // so we want to start a new section. We will do that by resetting the packet settings with the max + // size of our current available space in the wire packet plus room for our section header and a + // little bit of padding. + targetSize = nodeData->getAvailable() - sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE) - COMPRESS_PADDING; + } + _packetData.changeSettings(true, targetSize); // will do reset - NOTE: Always compressed + } + OctreeServer::trackTreeWaitTime(lockWaitElapsedUsec); + OctreeServer::trackEncodeTime(encodeElapsedUsec); + OctreeServer::trackCompressAndWriteTime(compressAndWriteElapsedUsec); + OctreeServer::trackPacketSendingTime(packetSendingElapsedUsec); + + quint64 endInside = usecTimestampNow(); + quint64 elapsedInsideUsecs = endInside - startInside; + OctreeServer::trackInsideTime((float)elapsedInsideUsecs); + } + + if (somethingToSend && _myServer->wantsVerboseDebug()) { + qCDebug(octree) << "Hit PPS Limit, packetsSentThisInterval =" << _packetsSentThisInterval + << " maxPacketsPerInterval = " << maxPacketsPerInterval + << " clientMaxPacketsPerInterval = " << clientMaxPacketsPerInterval; + } } diff --git a/assignment-client/src/octree/OctreeSendThread.h b/assignment-client/src/octree/OctreeSendThread.h index df1d5f3811..d158539f57 100644 --- a/assignment-client/src/octree/OctreeSendThread.h +++ b/assignment-client/src/octree/OctreeSendThread.h @@ -53,12 +53,13 @@ protected: /// Called before a packetDistributor pass to allow for pre-distribution processing virtual void preDistributionProcessing() {}; + virtual void traverseTreeAndSendContents(SharedNodePointer node, OctreeQueryNode* nodeData, bool viewFrustumChanged, bool isFullScene); OctreeServer* _myServer { nullptr }; QWeakPointer _node; private: - int handlePacketSend(SharedNodePointer node, OctreeQueryNode* nodeData, int& trueBytesSent, bool dontSuppressDuplicate = false); + int handlePacketSend(SharedNodePointer node, OctreeQueryNode* nodeData, bool dontSuppressDuplicate = false); int packetDistributor(SharedNodePointer node, OctreeQueryNode* nodeData, bool viewFrustumChanged); @@ -66,6 +67,9 @@ private: OctreePacketData _packetData; + int _truePacketsSent { 0 }; // available for debug stats + int _trueBytesSent { 0 }; // available for debug stats + int _packetsSentThisInterval { 0 }; // used for bandwidth throttle condition bool _isShuttingDown { false }; }; From 3226d33830d6ffaff5d728ed91c0b746f8116f1e Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 11 Jul 2017 14:02:16 -0700 Subject: [PATCH 0873/1049] use cached OctreeSendThread::_nodeUuid --- assignment-client/src/octree/OctreeSendThread.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index edf7b6da0b..2766d5e2e6 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -504,8 +504,8 @@ void OctreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, Octre // Our trackSend() function is implemented by the server subclass, and will be called back // during the encodeTreeBitstream() as new entities/data elements are sent - params.trackSend = [this, node](const QUuid& dataID, quint64 dataEdited) { - _myServer->trackSend(dataID, dataEdited, node->getUUID()); + params.trackSend = [this](const QUuid& dataID, quint64 dataEdited) { + _myServer->trackSend(dataID, dataEdited, _nodeUuid); }; // TODO: should this include the lock time or not? This stat is sent down to the client, From badbe980970311cfdfa5e4b39ea42d43f5918696 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 11 Jul 2017 14:21:49 -0700 Subject: [PATCH 0874/1049] minor cleanup and constency for packet stats --- .../src/octree/OctreeSendThread.cpp | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index 2766d5e2e6..46439b74df 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -160,13 +160,13 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* // copy octree message to back of stats message statsPacket.write(nodeData->getPacket().getData(), nodeData->getPacket().getDataSize()); - // since a stats message is only included on end of scene, don't consider any of these bytes "wasted", since - // there was nothing else to send. - int thisWastedBytes = 0; int numBytes = statsPacket.getDataSize(); - _totalWastedBytes += thisWastedBytes; _totalBytes += numBytes; _totalPackets++; + // since a stats message is only included on end of scene, don't consider any of these bytes "wasted" + // there was nothing else to send. + int thisWastedBytes = 0; + //_totalWastedBytes += 0; _trueBytesSent += numBytes; numPackets++; @@ -198,13 +198,13 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* OctreeServer::didCallWriteDatagram(this); DependencyManager::get()->sendUnreliablePacket(statsPacket, *node); - // since a stats message is only included on end of scene, don't consider any of these bytes "wasted", since - // there was nothing else to send. - int thisWastedBytes = 0; int numBytes = statsPacket.getDataSize(); - _totalWastedBytes += thisWastedBytes; _totalBytes += numBytes; _totalPackets++; + // since a stats message is only included on end of scene, don't consider any of these bytes "wasted" + // there was nothing else to send. + int thisWastedBytes = 0; + //_totalWastedBytes += 0; _trueBytesSent += numBytes; numPackets++; @@ -230,10 +230,11 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* DependencyManager::get()->sendUnreliablePacket(nodeData->getPacket(), *node); numBytes = nodeData->getPacket().getDataSize(); - thisWastedBytes = udt::MAX_PACKET_SIZE - numBytes; - _totalWastedBytes += thisWastedBytes; _totalBytes += numBytes; _totalPackets++; + // since a stats message is only included on end of scene, don't consider any of these bytes "wasted" + // there was nothing else to send. + //_totalWastedBytes += 0; _trueBytesSent += numBytes; numPackets++; @@ -263,11 +264,12 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* DependencyManager::get()->sendUnreliablePacket(nodeData->getPacket(), *node); int numBytes = nodeData->getPacket().getDataSize(); - int thisWastedBytes = udt::MAX_PACKET_SIZE - numBytes; - _totalWastedBytes += thisWastedBytes; _totalBytes += numBytes; _totalPackets++; + int thisWastedBytes = udt::MAX_PACKET_SIZE - numBytes; + _totalWastedBytes += thisWastedBytes; numPackets++; + _trueBytesSent += numBytes; if (debug) { NLPacket& sentPacket = nodeData->getPacket(); @@ -285,7 +287,6 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* " size: " << numBytes << " [" << _totalBytes << "] wasted bytes:" << thisWastedBytes << " [" << _totalWastedBytes << "]"; } - _trueBytesSent += numBytes; } } @@ -331,8 +332,8 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode* && ((!viewFrustumChanged && nodeData->getViewFrustumJustStoppedChanging()) || nodeData->hasLodChanged())); } - // send any waiting packet if (nodeData->isPacketWaiting()) { + // send the waiting packet _packetsSentThisInterval += handlePacketSend(node, nodeData); } else { nodeData->resetOctreePacket(); From 3670a04d8e73343a090cd9bcd22e2b8fa57c7f87 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 11 Jul 2017 14:24:58 -0700 Subject: [PATCH 0875/1049] switch bare pointers to AudioInjector objects to be QSharedPointers --- interface/src/Application.h | 2 +- interface/src/avatar/AvatarManager.cpp | 3 +- interface/src/avatar/AvatarManager.h | 4 +- libraries/audio-client/src/AudioClient.cpp | 64 +++++++++---------- libraries/audio-client/src/AudioClient.h | 4 +- libraries/audio/src/AbstractAudioInterface.h | 3 +- libraries/audio/src/AudioInjector.cpp | 34 +++++++--- libraries/audio/src/AudioInjector.h | 46 +++++++------ libraries/audio/src/AudioInjectorManager.cpp | 58 ++++++++--------- libraries/audio/src/AudioInjectorManager.h | 25 ++++---- .../script-engine/src/ScriptAudioInjector.cpp | 6 +- .../script-engine/src/ScriptAudioInjector.h | 16 ++--- libraries/ui/src/ui/types/SoundEffect.h | 3 +- 13 files changed, 148 insertions(+), 120 deletions(-) diff --git a/interface/src/Application.h b/interface/src/Application.h index cf0ae91a0f..ce27c4a70a 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -678,7 +678,7 @@ private: QTimer _addAssetToWorldErrorTimer; FileScriptingInterface* _fileDownload; - AudioInjector* _snapshotSoundInjector { nullptr }; + AudioInjectorPointer _snapshotSoundInjector; SharedSoundPointer _snapshotSound; DisplayPluginPointer _autoSwitchDisplayModeSupportedHMDPlugin; diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index c46d61cf68..b63816eb4f 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -434,8 +434,7 @@ void AvatarManager::handleCollisionEvents(const CollisionEvents& collisionEvents // but most avatars are roughly the same size, so let's not be so fancy yet. const float AVATAR_STRETCH_FACTOR = 1.0f; - - _collisionInjectors.remove_if([](QPointer& injector) { + _collisionInjectors.remove_if([](AudioInjectorPointer injector) { return !injector || injector->isFinished(); }); diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index f1e71f7367..d6f140ea74 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -25,8 +25,8 @@ #include "AvatarMotionState.h" #include "MyAvatar.h" +#include "AudioInjector.h" -class AudioInjector; class AvatarManager : public AvatarHashMap { Q_OBJECT @@ -104,7 +104,7 @@ private: std::shared_ptr _myAvatar; quint64 _lastSendAvatarDataTime = 0; // Controls MyAvatar send data rate. - std::list> _collisionInjectors; + std::list _collisionInjectors; RateCounter<> _myAvatarSendRate; int _numAvatarsUpdated { 0 }; diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index c630fe09e4..d532b18836 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -210,9 +210,9 @@ AudioClient::AudioClient() : connect(&_receivedAudioStream, &MixedProcessedAudioStream::processSamples, this, &AudioClient::processReceivedSamples, Qt::DirectConnection); - connect(this, &AudioClient::changeDevice, this, [=](const QAudioDeviceInfo& outputDeviceInfo) { + connect(this, &AudioClient::changeDevice, this, [=](const QAudioDeviceInfo& outputDeviceInfo) { qCDebug(audioclient) << "got AudioClient::changeDevice signal, about to call switchOutputToAudioDevice() outputDeviceInfo: [" << outputDeviceInfo.deviceName() << "]"; - switchOutputToAudioDevice(outputDeviceInfo); + switchOutputToAudioDevice(outputDeviceInfo); }); connect(&_receivedAudioStream, &InboundAudioStream::mismatchedAudioCodec, this, &AudioClient::handleMismatchAudioFormat); @@ -261,10 +261,10 @@ void AudioClient::cleanupBeforeQuit() { // so this must be explicitly, synchronously stopped static ConditionalGuard guard; if (QThread::currentThread() != thread()) { - // This will likely be called from the main thread, but we don't want to do blocking queued calls - // from the main thread, so we use a normal auto-connection invoke, and then use a conditional to wait + // This will likely be called from the main thread, but we don't want to do blocking queued calls + // from the main thread, so we use a normal auto-connection invoke, and then use a conditional to wait // for completion - // The effect is the same, yes, but we actually want to avoid the use of Qt::BlockingQueuedConnection + // The effect is the same, yes, but we actually want to avoid the use of Qt::BlockingQueuedConnection // in the code QMetaObject::invokeMethod(this, "cleanupBeforeQuit"); guard.wait(); @@ -630,7 +630,7 @@ void AudioClient::handleAudioEnvironmentDataPacket(QSharedPointerreadPrimitive(&bitset); bool hasReverb = oneAtBit(bitset, HAS_REVERB_BIT); - + if (hasReverb) { float reverbTime, wetLevel; message->readPrimitive(&reverbTime); @@ -728,7 +728,7 @@ void AudioClient::Gate::flush() { void AudioClient::handleNoisyMutePacket(QSharedPointer message) { if (!_muted) { toggleMute(); - + // have the audio scripting interface emit a signal to say we were muted by the mixer emit mutedByMixer(); } @@ -737,7 +737,7 @@ void AudioClient::handleNoisyMutePacket(QSharedPointer message) void AudioClient::handleMuteEnvironmentPacket(QSharedPointer message) { glm::vec3 position; float radius; - + message->readPrimitive(&position); message->readPrimitive(&radius); @@ -770,7 +770,7 @@ void AudioClient::handleSelectedAudioFormat(QSharedPointer mess } void AudioClient::selectAudioFormat(const QString& selectedCodecName) { - + _selectedCodecName = selectedCodecName; qCDebug(audioclient) << "Selected Codec:" << _selectedCodecName; @@ -787,7 +787,7 @@ void AudioClient::selectAudioFormat(const QString& selectedCodecName) { for (auto& plugin : codecPlugins) { if (_selectedCodecName == plugin->getName()) { _codec = plugin; - _receivedAudioStream.setupCodec(plugin, _selectedCodecName, AudioConstants::STEREO); + _receivedAudioStream.setupCodec(plugin, _selectedCodecName, AudioConstants::STEREO); _encoder = plugin->createEncoder(AudioConstants::SAMPLE_RATE, AudioConstants::MONO); qCDebug(audioclient) << "Selected Codec Plugin:" << _codec.get(); break; @@ -795,7 +795,7 @@ void AudioClient::selectAudioFormat(const QString& selectedCodecName) { } } - + bool AudioClient::switchAudioDevice(QAudio::Mode mode, const QAudioDeviceInfo& deviceInfo) { auto device = deviceInfo; @@ -1203,11 +1203,11 @@ bool AudioClient::mixLocalAudioInjectors(float* mixBuffer) { // lock the injectors Lock lock(_injectorsMutex); - QVector injectorsToRemove; + QVector injectorsToRemove; memset(mixBuffer, 0, AudioConstants::NETWORK_FRAME_SAMPLES_STEREO * sizeof(float)); - for (AudioInjector* injector : _activeLocalAudioInjectors) { + for (AudioInjectorPointer injector : _activeLocalAudioInjectors) { // the lock guarantees that injectorBuffer, if found, is invariant AudioInjectorLocalBuffer* injectorBuffer = injector->getLocalBuffer(); if (injectorBuffer) { @@ -1220,7 +1220,7 @@ bool AudioClient::mixLocalAudioInjectors(float* mixBuffer) { // get one frame from the injector memset(_localScratchBuffer, 0, bytesToRead); if (0 < injectorBuffer->readData((char*)_localScratchBuffer, bytesToRead)) { - + if (injector->isAmbisonic()) { // no distance attenuation @@ -1249,36 +1249,36 @@ bool AudioClient::mixLocalAudioInjectors(float* mixBuffer) { for (int i = 0; i < AudioConstants::NETWORK_FRAME_SAMPLES_STEREO; i++) { mixBuffer[i] += convertToFloat(_localScratchBuffer[i]) * gain; } - + } else { // calculate distance, gain and azimuth for hrtf glm::vec3 relativePosition = injector->getPosition() - _positionGetter(); float distance = glm::max(glm::length(relativePosition), EPSILON); - float gain = gainForSource(distance, injector->getVolume()); + float gain = gainForSource(distance, injector->getVolume()); float azimuth = azimuthForSource(relativePosition); - + // mono gets spatialized into mixBuffer - injector->getLocalHRTF().render(_localScratchBuffer, mixBuffer, HRTF_DATASET_INDEX, + injector->getLocalHRTF().render(_localScratchBuffer, mixBuffer, HRTF_DATASET_INDEX, azimuth, distance, gain, AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL); } - + } else { - + qCDebug(audioclient) << "injector has no more data, marking finished for removal"; injector->finishLocalInjection(); injectorsToRemove.append(injector); } } else { - + qCDebug(audioclient) << "injector has no local buffer, marking as finished for removal"; injector->finishLocalInjection(); injectorsToRemove.append(injector); } } - - for (AudioInjector* injector : injectorsToRemove) { + + for (AudioInjectorPointer injector : injectorsToRemove) { qCDebug(audioclient) << "removing injector"; _activeLocalAudioInjectors.removeOne(injector); } @@ -1369,7 +1369,7 @@ void AudioClient::setIsStereoInput(bool isStereoInput) { } } -bool AudioClient::outputLocalInjector(AudioInjector* injector) { +bool AudioClient::outputLocalInjector(AudioInjectorPointer injector) { AudioInjectorLocalBuffer* injectorBuffer = injector->getLocalBuffer(); if (injectorBuffer) { // local injectors are on the AudioInjectorsThread, so we must guard access @@ -1711,9 +1711,9 @@ int AudioClient::calculateNumberOfFrameSamples(int numBytes) const { float AudioClient::azimuthForSource(const glm::vec3& relativePosition) { glm::quat inverseOrientation = glm::inverse(_orientationGetter()); - + glm::vec3 rotatedSourcePosition = inverseOrientation * relativePosition; - + // project the rotated source position vector onto the XZ plane rotatedSourcePosition.y = 0.0f; @@ -1721,15 +1721,15 @@ float AudioClient::azimuthForSource(const glm::vec3& relativePosition) { float rotatedSourcePositionLength2 = glm::length2(rotatedSourcePosition); if (rotatedSourcePositionLength2 > SOURCE_DISTANCE_THRESHOLD) { - + // produce an oriented angle about the y-axis glm::vec3 direction = rotatedSourcePosition * (1.0f / fastSqrtf(rotatedSourcePositionLength2)); float angle = fastAcosf(glm::clamp(-direction.z, -1.0f, 1.0f)); // UNIT_NEG_Z is "forward" return (direction.x < 0.0f) ? -angle : angle; - } else { + } else { // no azimuth if they are in same spot - return 0.0f; + return 0.0f; } } @@ -1869,9 +1869,9 @@ void AudioClient::startThread() { moveToNewNamedThread(this, "Audio Thread", [this] { start(); }); } -void AudioClient::setInputVolume(float volume) { - if (_audioInput && volume != (float)_audioInput->volume()) { - _audioInput->setVolume(volume); +void AudioClient::setInputVolume(float volume) { + if (_audioInput && volume != (float)_audioInput->volume()) { + _audioInput->setVolume(volume); emit inputVolumeChanged(_audioInput->volume()); } } diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 62b99d2443..7fbfcc25d6 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -143,7 +143,7 @@ public: Q_INVOKABLE void setAvatarBoundingBoxParameters(glm::vec3 corner, glm::vec3 scale); - bool outputLocalInjector(AudioInjector* injector) override; + bool outputLocalInjector(AudioInjectorPointer injector) override; QAudioDeviceInfo getActiveAudioDevice(QAudio::Mode mode) const; QList getAudioDevices(QAudio::Mode mode) const; @@ -380,7 +380,7 @@ private: bool _hasReceivedFirstPacket { false }; - QVector _activeLocalAudioInjectors; + QVector _activeLocalAudioInjectors; bool _isPlayingBackRecording { false }; diff --git a/libraries/audio/src/AbstractAudioInterface.h b/libraries/audio/src/AbstractAudioInterface.h index 2e14b9956b..314884a67a 100644 --- a/libraries/audio/src/AbstractAudioInterface.h +++ b/libraries/audio/src/AbstractAudioInterface.h @@ -18,6 +18,7 @@ #include #include "AudioInjectorOptions.h" +#include "AudioInjector.h" class AudioInjector; class AudioInjectorLocalBuffer; @@ -35,7 +36,7 @@ public: // threadsafe // moves injector->getLocalBuffer() to another thread (so removes its parent) // take care to delete it when ~AudioInjector, as parenting Qt semantics will not work - virtual bool outputLocalInjector(AudioInjector* injector) = 0; + virtual bool outputLocalInjector(AudioInjectorPointer injector) = 0; public slots: virtual bool shouldLoopbackInjectors() { return false; } diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index 47e6c98144..5b42168bdd 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -132,7 +132,7 @@ void AudioInjector::restart() { } } -bool AudioInjector::inject(bool(AudioInjectorManager::*injection)(AudioInjector*)) { +bool AudioInjector::inject(bool(AudioInjectorManager::*injection)(AudioInjectorPointer)) { _state = AudioInjectorState::NotFinished; int byteOffset = 0; @@ -150,7 +150,7 @@ bool AudioInjector::inject(bool(AudioInjectorManager::*injection)(AudioInjector* bool success = true; if (!_options.localOnly) { auto injectorManager = DependencyManager::get(); - if (!(*injectorManager.*injection)(this)) { + if (!(*injectorManager.*injection)(getThisPointer())) { success = false; finishNetworkInjection(); } @@ -173,7 +173,7 @@ bool AudioInjector::injectLocally() { // call this function on the AudioClient's thread // this will move the local buffer's thread to the LocalInjectorThread - success = _localAudioInterface->outputLocalInjector(this); + success = _localAudioInterface->outputLocalInjector(getThisPointer()); if (!success) { qCDebug(audio) << "AudioInjector::injectLocally could not output locally via _localAudioInterface"; @@ -429,7 +429,8 @@ void AudioInjector::stopAndDeleteLater() { QMetaObject::invokeMethod(this, "deleteLater", Qt::QueuedConnection); } -AudioInjector* AudioInjector::playSound(SharedSoundPointer sound, const float volume, const float stretchFactor, const glm::vec3 position) { +AudioInjectorPointer AudioInjector::playSound(SharedSoundPointer sound, const float volume, + const float stretchFactor, const glm::vec3 position) { if (!sound || !sound->isReady()) { return nullptr; } @@ -462,8 +463,8 @@ AudioInjector* AudioInjector::playSound(SharedSoundPointer sound, const float vo return playSoundAndDelete(resampled, options); } -AudioInjector* AudioInjector::playSoundAndDelete(const QByteArray& buffer, const AudioInjectorOptions options) { - AudioInjector* sound = playSound(buffer, options); +AudioInjectorPointer AudioInjector::playSoundAndDelete(const QByteArray& buffer, const AudioInjectorOptions options) { + AudioInjectorPointer sound = playSound(buffer, options); if (sound) { sound->_state |= AudioInjectorState::PendingDelete; @@ -473,10 +474,27 @@ AudioInjector* AudioInjector::playSoundAndDelete(const QByteArray& buffer, const } -AudioInjector* AudioInjector::playSound(const QByteArray& buffer, const AudioInjectorOptions options) { - AudioInjector* injector = new AudioInjector(buffer, options); +AudioInjectorPointer AudioInjector::playSound(const QByteArray& buffer, const AudioInjectorOptions options) { + AudioInjectorPointer injector = AudioInjectorPointer(new AudioInjector(buffer, options)); + injector->setThisPointer(injector); + if (!injector->inject(&AudioInjectorManager::threadInjector)) { qWarning() << "AudioInjector::playSound failed to thread injector"; } return injector; } + +AudioInjectorPointer AudioInjector::getThisPointer() { + std::lock_guard lock(_refLock); + QSharedPointer this_ref(_self); + if (this_ref.isNull()) { + this_ref = QSharedPointer(this); + _self = this_ref.toWeakRef(); + } + return this_ref; +} + +void AudioInjector::setThisPointer(AudioInjectorPointer self) { + std::lock_guard lock(_refLock); + _self = self.toWeakRef(); +} diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index a901c2520f..056f498b3a 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -32,6 +32,8 @@ class AbstractAudioInterface; class AudioInjectorManager; +class AudioInjector; +using AudioInjectorPointer = QSharedPointer; enum class AudioInjectorState : uint8_t { @@ -46,19 +48,19 @@ AudioInjectorState operator& (AudioInjectorState lhs, AudioInjectorState rhs); AudioInjectorState& operator|= (AudioInjectorState& lhs, AudioInjectorState rhs); // In order to make scripting cleaner for the AudioInjector, the script now holds on to the AudioInjector object -// until it dies. +// until it dies. class AudioInjector : public QObject { Q_OBJECT public: AudioInjector(const Sound& sound, const AudioInjectorOptions& injectorOptions); AudioInjector(const QByteArray& audioData, const AudioInjectorOptions& injectorOptions); ~AudioInjector(); - + bool isFinished() const { return (stateHas(AudioInjectorState::Finished)); } - + int getCurrentSendOffset() const { return _currentSendOffset; } void setCurrentSendOffset(int currentSendOffset) { _currentSendOffset = currentSendOffset; } - + AudioInjectorLocalBuffer* getLocalBuffer() const { return _localBuffer; } AudioHRTF& getLocalHRTF() { return _localHRTF; } AudioFOA& getLocalFOA() { return _localFOA; } @@ -72,36 +74,41 @@ public: bool stateHas(AudioInjectorState state) const ; static void setLocalAudioInterface(AbstractAudioInterface* audioInterface) { _localAudioInterface = audioInterface; } - static AudioInjector* playSoundAndDelete(const QByteArray& buffer, const AudioInjectorOptions options); - static AudioInjector* playSound(const QByteArray& buffer, const AudioInjectorOptions options); - static AudioInjector* playSound(SharedSoundPointer sound, const float volume, const float stretchFactor, const glm::vec3 position); + static AudioInjectorPointer playSoundAndDelete(const QByteArray& buffer, const AudioInjectorOptions options); + static AudioInjectorPointer playSound(const QByteArray& buffer, const AudioInjectorOptions options); + static AudioInjectorPointer playSound(SharedSoundPointer sound, const float volume, + const float stretchFactor, const glm::vec3 position); + + QWeakPointer weakRef() const { return _self; } + AudioInjectorPointer getThisPointer(); + void setThisPointer(AudioInjectorPointer self); public slots: void restart(); - + void stop(); void triggerDeleteAfterFinish(); void stopAndDeleteLater(); - + const AudioInjectorOptions& getOptions() const { return _options; } void setOptions(const AudioInjectorOptions& options); - + float getLoudness() const { return _loudness; } bool isPlaying() const { return !stateHas(AudioInjectorState::Finished); } void finish(); void finishLocalInjection(); void finishNetworkInjection(); - + signals: void finished(); void restarting(); - + private: int64_t injectNextFrame(); - bool inject(bool(AudioInjectorManager::*injection)(AudioInjector*)); + bool inject(bool(AudioInjectorManager::*injection)(AudioInjectorPointer)); bool injectLocally(); void deleteLocalBuffer(); - + static AbstractAudioInterface* _localAudioInterface; QByteArray _audioData; @@ -112,17 +119,20 @@ private: int _currentSendOffset { 0 }; std::unique_ptr _currentPacket { nullptr }; AudioInjectorLocalBuffer* _localBuffer { nullptr }; - + int64_t _nextFrame { 0 }; std::unique_ptr _frameTimer { nullptr }; quint16 _outgoingSequenceNumber { 0 }; - + // when the injector is local, we need this AudioHRTF _localHRTF; AudioFOA _localFOA; friend class AudioInjectorManager; + + QWeakPointer _self; + mutable std::mutex _refLock; }; -Q_DECLARE_METATYPE(AudioInjector*) - +Q_DECLARE_METATYPE(AudioInjectorPointer) + #endif // hifi_AudioInjector_h diff --git a/libraries/audio/src/AudioInjectorManager.cpp b/libraries/audio/src/AudioInjectorManager.cpp index c66e209ea9..f9f45987d4 100644 --- a/libraries/audio/src/AudioInjectorManager.cpp +++ b/libraries/audio/src/AudioInjectorManager.cpp @@ -21,26 +21,26 @@ AudioInjectorManager::~AudioInjectorManager() { _shouldStop = true; - + Lock lock(_injectorsMutex); - + // make sure any still living injectors are stopped and deleted while (!_injectors.empty()) { // grab the injector at the front auto& timePointerPair = _injectors.top(); - + // ask it to stop and be deleted timePointerPair.second->stopAndDeleteLater(); - + _injectors.pop(); } - + // get rid of the lock now that we've stopped all living injectors lock.unlock(); - + // in case the thread is waiting for injectors wake it up now _injectorReady.notify_one(); - + // quit and wait on the manager thread, if we ever created it if (_thread) { _thread->quit(); @@ -51,10 +51,10 @@ AudioInjectorManager::~AudioInjectorManager() { void AudioInjectorManager::createThread() { _thread = new QThread; _thread->setObjectName("Audio Injector Thread"); - + // when the thread is started, have it call our run to handle injection of audio connect(_thread, &QThread::started, this, &AudioInjectorManager::run, Qt::DirectConnection); - + // start the thread _thread->start(); } @@ -63,20 +63,20 @@ void AudioInjectorManager::run() { while (!_shouldStop) { // wait until the next injector is ready, or until we get a new injector given to us Lock lock(_injectorsMutex); - + if (_injectors.size() > 0) { // when does the next injector need to send a frame? // do we get to wait or should we just go for it now? - + auto timeInjectorPair = _injectors.top(); - + auto nextTimestamp = timeInjectorPair.first; int64_t difference = int64_t(nextTimestamp - usecTimestampNow()); - + if (difference > 0) { _injectorReady.wait_for(lock, std::chrono::microseconds(difference)); } - + if (_injectors.size() > 0) { // loop through the injectors in the map and send whatever frames need to go out auto front = _injectors.top(); @@ -90,7 +90,7 @@ void AudioInjectorManager::run() { // either way we're popping this injector off - get a copy first auto injector = front.second; _injectors.pop(); - + if (!injector.isNull()) { // this is an injector that's ready to go, have it send a frame now auto nextCallDelta = injector->injectNextFrame(); @@ -100,7 +100,7 @@ void AudioInjectorManager::run() { heldInjectors.emplace(heldInjectors.end(), usecTimestampNow() + nextCallDelta, injector); } } - + if (_injectors.size() > 0) { front = _injectors.top(); } else { @@ -120,10 +120,10 @@ void AudioInjectorManager::run() { // we have no current injectors, wait until we get at least one before we do anything _injectorReady.wait(lock); } - + // unlock the lock in case something in process events needs to modify the queue lock.unlock(); - + QCoreApplication::processEvents(); } } @@ -139,36 +139,36 @@ bool AudioInjectorManager::wouldExceedLimits() { // Should be called inside of a return false; } -bool AudioInjectorManager::threadInjector(AudioInjector* injector) { +bool AudioInjectorManager::threadInjector(AudioInjectorPointer injector) { if (_shouldStop) { qCDebug(audio) << "AudioInjectorManager::threadInjector asked to thread injector but is shutting down."; return false; } - + // guard the injectors vector with a mutex Lock lock(_injectorsMutex); - + if (wouldExceedLimits()) { return false; } else { if (!_thread) { createThread(); } - + // move the injector to the QThread injector->moveToThread(_thread); - + // add the injector to the queue with a send timestamp of now - _injectors.emplace(usecTimestampNow(), InjectorQPointer { injector }); - + _injectors.emplace(usecTimestampNow(), AudioInjectorPointer { injector }); + // notify our wait condition so we can inject two frames for this injector immediately _injectorReady.notify_one(); - + return true; } } -bool AudioInjectorManager::restartFinishedInjector(AudioInjector* injector) { +bool AudioInjectorManager::restartFinishedInjector(AudioInjectorPointer injector) { if (_shouldStop) { qCDebug(audio) << "AudioInjectorManager::threadInjector asked to thread injector but is shutting down."; return false; @@ -181,8 +181,8 @@ bool AudioInjectorManager::restartFinishedInjector(AudioInjector* injector) { return false; } else { // add the injector to the queue with a send timestamp of now - _injectors.emplace(usecTimestampNow(), InjectorQPointer { injector }); - + _injectors.emplace(usecTimestampNow(), injector->getThisPointer()); + // notify our wait condition so we can inject two frames for this injector immediately _injectorReady.notify_one(); } diff --git a/libraries/audio/src/AudioInjectorManager.h b/libraries/audio/src/AudioInjectorManager.h index de5537856e..ac1d364b86 100644 --- a/libraries/audio/src/AudioInjectorManager.h +++ b/libraries/audio/src/AudioInjectorManager.h @@ -23,7 +23,7 @@ #include -class AudioInjector; +#include "AudioInjector.h" class AudioInjectorManager : public QObject, public Dependency { Q_OBJECT @@ -33,39 +33,38 @@ public: private slots: void run(); private: - - using InjectorQPointer = QPointer; - using TimeInjectorPointerPair = std::pair; - + + using TimeInjectorPointerPair = std::pair; + struct greaterTime { bool operator() (const TimeInjectorPointerPair& x, const TimeInjectorPointerPair& y) const { return x.first > y.first; } }; - + using InjectorQueue = std::priority_queue, greaterTime>; using Mutex = std::mutex; using Lock = std::unique_lock; - - bool threadInjector(AudioInjector* injector); - bool restartFinishedInjector(AudioInjector* injector); + + bool threadInjector(AudioInjectorPointer injector); + bool restartFinishedInjector(AudioInjectorPointer injector); void notifyInjectorReadyCondition() { _injectorReady.notify_one(); } bool wouldExceedLimits(); - + AudioInjectorManager() {}; AudioInjectorManager(const AudioInjectorManager&) = delete; AudioInjectorManager& operator=(const AudioInjectorManager&) = delete; - + void createThread(); - + QThread* _thread { nullptr }; bool _shouldStop { false }; InjectorQueue _injectors; Mutex _injectorsMutex; std::condition_variable _injectorReady; - + friend class AudioInjector; }; diff --git a/libraries/script-engine/src/ScriptAudioInjector.cpp b/libraries/script-engine/src/ScriptAudioInjector.cpp index c0ad2debd9..37a9ad65d7 100644 --- a/libraries/script-engine/src/ScriptAudioInjector.cpp +++ b/libraries/script-engine/src/ScriptAudioInjector.cpp @@ -21,7 +21,7 @@ QScriptValue injectorToScriptValue(QScriptEngine* engine, ScriptAudioInjector* c // when the script goes down we want to cleanup the injector QObject::connect(engine, &QScriptEngine::destroyed, in, &ScriptAudioInjector::stopInjectorImmediately, Qt::DirectConnection); - + return engine->newQObject(in, QScriptEngine::ScriptOwnership); } @@ -29,10 +29,10 @@ void injectorFromScriptValue(const QScriptValue& object, ScriptAudioInjector*& o out = qobject_cast(object.toQObject()); } -ScriptAudioInjector::ScriptAudioInjector(AudioInjector* injector) : +ScriptAudioInjector::ScriptAudioInjector(AudioInjectorPointer injector) : _injector(injector) { - QObject::connect(injector, &AudioInjector::finished, this, &ScriptAudioInjector::finished); + QObject::connect(injector.data(), &AudioInjector::finished, this, &ScriptAudioInjector::finished); } ScriptAudioInjector::~ScriptAudioInjector() { diff --git a/libraries/script-engine/src/ScriptAudioInjector.h b/libraries/script-engine/src/ScriptAudioInjector.h index 4de12af62c..018fbe5110 100644 --- a/libraries/script-engine/src/ScriptAudioInjector.h +++ b/libraries/script-engine/src/ScriptAudioInjector.h @@ -18,31 +18,31 @@ class ScriptAudioInjector : public QObject { Q_OBJECT - + Q_PROPERTY(bool playing READ isPlaying) Q_PROPERTY(float loudness READ getLoudness) Q_PROPERTY(AudioInjectorOptions options WRITE setOptions READ getOptions) public: - ScriptAudioInjector(AudioInjector* injector); + ScriptAudioInjector(AudioInjectorPointer injector); ~ScriptAudioInjector(); public slots: void restart() { _injector->restart(); } void stop() { _injector->stop(); } - + const AudioInjectorOptions& getOptions() const { return _injector->getOptions(); } void setOptions(const AudioInjectorOptions& options) { _injector->setOptions(options); } - + float getLoudness() const { return _injector->getLoudness(); } bool isPlaying() const { return _injector->isPlaying(); } - + signals: void finished(); - + protected slots: void stopInjectorImmediately(); private: - QPointer _injector; - + AudioInjectorPointer _injector; + friend QScriptValue injectorToScriptValue(QScriptEngine* engine, ScriptAudioInjector* const& in); }; diff --git a/libraries/ui/src/ui/types/SoundEffect.h b/libraries/ui/src/ui/types/SoundEffect.h index 656f98dd8d..a7e29d86f9 100644 --- a/libraries/ui/src/ui/types/SoundEffect.h +++ b/libraries/ui/src/ui/types/SoundEffect.h @@ -15,6 +15,7 @@ #include class AudioInjector; +using AudioInjectorPointer = QSharedPointer; // SoundEffect object, exposed to qml only, not interface JavaScript. // This is used to play spatial sound effects on tablets/web entities from within QML. @@ -38,7 +39,7 @@ protected: QUrl _url; float _volume { 1.0f }; SharedSoundPointer _sound; - AudioInjector* _injector { nullptr }; + AudioInjectorPointer _injector; }; #endif // hifi_SoundEffect_h From 62be0af32d9634d597ff26baa2ccb2e934e18f55 Mon Sep 17 00:00:00 2001 From: Liv Date: Tue, 11 Jul 2017 14:57:11 -0700 Subject: [PATCH 0876/1049] string pass on Chat.js --- scripts/system/chat.js | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/scripts/system/chat.js b/scripts/system/chat.js index d03c6aae98..58a1849f1f 100644 --- a/scripts/system/chat.js +++ b/scripts/system/chat.js @@ -370,14 +370,14 @@ // Change the avatar size to bigger. function biggerSize() { //print("biggerSize"); - logMessage("Increasing avatar size bigger!", null); + logMessage("Increasing avatar size", null); MyAvatar.increaseSize(); } // Change the avatar size to smaller. function smallerSize() { //print("smallerSize"); - logMessage("Decreasing avatar size smaler!", null); + logMessage("Decreasing avatar size", null); MyAvatar.decreaseSize(); } @@ -470,14 +470,13 @@ case '?': case 'help': - logMessage('Type "/?" or "/help" for help, which is this!', null); - logMessage('Type "/name " to set your chat name, or "/name" to use your display name, or a random name if that is not defined.', null); - logMessage('Type "/shutup" to shut up your overhead chat message.', null); - logMessage('Type "/say " to say something.', null); - logMessage('Type "/clear" to clear your cha, nullt log.', null); - logMessage('Type "/who" to ask who is h, nullere to chat.', null); - logMessage('Type "/bigger", "/smaller" or "/normal" to change, null your avatar size.', null); - logMessage('(Sorry, that\'s all there is so far!)', null); + logMessage('Type "/?" or "/help" for help', null); + logMessage('Type "/name " to set your chat name, or "/name" to use your display name. If your display name is not defined, a random name will be used.', null); + logMessage('Type "/close" to close your overhead chat message.', null); + logMessage('Type "/say " to display a new message.', null); + logMessage('Type "/clear" to clear your chat log.', null); + logMessage('Type "/who" to ask who is in the chat session.', null); + logMessage('Type "/bigger", "/smaller" or "/normal" to change your avatar size.', null); break; case 'name': @@ -498,9 +497,9 @@ } break; - case 'shutup': + case 'close': popDownSpeechBubble(); - logMessage('Overhead chat message shut up.', null); + logMessage('Overhead chat message closed.', null); break; case 'say': From 1fe7718b9f720b48c13016134eec2f7e3689427b Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 11 Jul 2017 15:02:45 -0700 Subject: [PATCH 0877/1049] restore wasted byte count when unable to fit stats --- assignment-client/src/octree/OctreeSendThread.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index 46439b74df..868b377ced 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -232,9 +232,9 @@ int OctreeSendThread::handlePacketSend(SharedNodePointer node, OctreeQueryNode* numBytes = nodeData->getPacket().getDataSize(); _totalBytes += numBytes; _totalPackets++; - // since a stats message is only included on end of scene, don't consider any of these bytes "wasted" - // there was nothing else to send. - //_totalWastedBytes += 0; + // we count wasted bytes here because we were unable to fit the stats packet + thisWastedBytes = udt::MAX_PACKET_SIZE - numBytes; + _totalWastedBytes += thisWastedBytes; _trueBytesSent += numBytes; numPackets++; From c4a4623ba87a5f8ffaeaff385f8a607acd6ad851 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 11 Jul 2017 15:11:48 -0700 Subject: [PATCH 0878/1049] Workaround the bug where Avatar Entities can't get deleted after switching domains --- scripts/system/spectatorCamera.js | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 7786514edc..a9069a66a6 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -110,17 +110,28 @@ // // Description: // -Call this function to shut down the spectator camera and - // destroy the camera entity. - function spectatorCameraOff() { + // destroy the camera entity. "isChangingDomains" is true when this function is called + // from the "Window.domainChanged()" signal. + function spectatorCameraOff(isChangingDomains) { spectatorCameraConfig.attachedEntityId = false; spectatorCameraConfig.enableSecondaryCameraRenderConfigs(false); if (camera) { - Entities.deleteEntity(camera); + // Workaround for Avatar Entities not immediately having properties after + // the "Window.domainChanged()" signal is emitted. + // Should be removed after FB6155 is fixed. + if (isChangingDomains) { + Script.setTimeout(function () { + Entities.deleteEntity(camera); + camera = false; + }, 1 * 1000); + } else { + Entities.deleteEntity(camera); + camera = false; + } } if (viewFinderOverlay) { Overlays.deleteOverlay(viewFinderOverlay); } - camera = false; viewFinderOverlay = false; setDisplay(monitorShowsCameraView); // Change button to active when window is first openend OR if the camera is on, false otherwise. @@ -179,7 +190,9 @@ tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); addOrRemoveButton(false, HMD.active); tablet.screenChanged.connect(onTabletScreenChanged); - Window.domainChanged.connect(spectatorCameraOff); + Window.domainChanged.connect(function () { + spectatorCameraOff(true); + }); Window.geometryChanged.connect(resizeViewFinderOverlay); Controller.keyPressEvent.connect(keyPressEvent); HMD.displayModeChanged.connect(onHMDChanged); @@ -470,7 +483,9 @@ // -shutdown() will be called when the script ends (i.e. is stopped). function shutdown() { spectatorCameraOff(); - Window.domainChanged.disconnect(spectatorCameraOff); + Window.domainChanged.disconnect(function () { + spectatorCameraOff(true); + }); Window.geometryChanged.disconnect(resizeViewFinderOverlay); addOrRemoveButton(true, HMD.active); if (tablet) { From b0639be8bdf59eac377b0d939c5ed9c08a92fd1d Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 11 Jul 2017 15:23:50 -0700 Subject: [PATCH 0879/1049] Use function pointers correctly --- scripts/system/spectatorCamera.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index a9069a66a6..94e3dbde02 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -190,9 +190,7 @@ tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); addOrRemoveButton(false, HMD.active); tablet.screenChanged.connect(onTabletScreenChanged); - Window.domainChanged.connect(function () { - spectatorCameraOff(true); - }); + Window.domainChanged.connect(onDomainChanged); Window.geometryChanged.connect(resizeViewFinderOverlay); Controller.keyPressEvent.connect(keyPressEvent); HMD.displayModeChanged.connect(onHMDChanged); @@ -483,9 +481,7 @@ // -shutdown() will be called when the script ends (i.e. is stopped). function shutdown() { spectatorCameraOff(); - Window.domainChanged.disconnect(function () { - spectatorCameraOff(true); - }); + Window.domainChanged.disconnect(onDomainChanged); Window.geometryChanged.disconnect(resizeViewFinderOverlay); addOrRemoveButton(true, HMD.active); if (tablet) { @@ -501,6 +497,14 @@ } } + // Function Name: onDomainChanged() + // + // Description: + // -A small utility function used when the Window.domainChanged() signal is fired. + function onDomainChanged() { + spectatorCameraOff(true); + } + // These functions will be called when the script is loaded. startup(); Script.scriptEnding.connect(shutdown); From 8cf60df5b060e9cfd04ea1abd903be4f1381ddf5 Mon Sep 17 00:00:00 2001 From: "rick@ghostpunch.com" Date: Tue, 11 Jul 2017 18:24:19 -0400 Subject: [PATCH 0880/1049] Address #21402 Added a handler to Sit.js script for the onLoadComplete signal to which re-applys the siting animation rol overrides. This works around a bug that shows up if the user switches avatars while the current avatar has overloaded anim roles. --- scripts/tutorials/entity_scripts/sit.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/scripts/tutorials/entity_scripts/sit.js b/scripts/tutorials/entity_scripts/sit.js index 3d3bc10fb1..a532195041 100644 --- a/scripts/tutorials/entity_scripts/sit.js +++ b/scripts/tutorials/entity_scripts/sit.js @@ -122,10 +122,21 @@ this.rolesToOverride = function() { return MyAvatar.getAnimationRoles().filter(function(role) { - return role === "fly" || role.startsWith("inAir"); + return role === "right" || role.startsWith("left"); }); } + // Handler for user changing the avatar model while sitting. There's currently an issue with changing avatar models while override role animations are applied, + // so to avoid that problem, re-apply the role overrides once the model has finished changing. + this.modelURLChangeFinished = function () { + print("Sitter's model has FINISHED changing. Reapply anim role overrides."); + var roles = this.rolesToOverride(); + for (i in roles) { + //print("Overriding role animation " + roles[i]); + MyAvatar.overrideRoleAnimation(roles[i], ANIMATION_URL, ANIMATION_FPS, true, ANIMATION_FIRST_FRAME, ANIMATION_LAST_FRAME); + } + } + this.sitDown = function() { if (this.checkSeatForAvatar()) { print("Someone is already sitting in that chair."); @@ -164,12 +175,14 @@ return { headType: 0 }; }, ["headType"]); Script.update.connect(this, this.update); + MyAvatar.onLoadComplete.connect(this, this.modelURLChangeFinished); } this.standUp = function() { print("Standing up (" + this.entityID + ")"); MyAvatar.removeAnimationStateHandler(this.animStateHandlerID); Script.update.disconnect(this, this.update); + MyAvatar.onLoadComplete.disconnect(this, this.modelURLChangeFinished); if (MyAvatar.sessionUUID === this.getSeatUser()) { this.setSeatUser(null); From 1001097f9293197273a45aad423170a5bf29cf1e Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 11 Jul 2017 15:29:00 -0700 Subject: [PATCH 0881/1049] Fix button state --- scripts/system/spectatorCamera.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 94e3dbde02..8945d006ab 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -113,6 +113,14 @@ // destroy the camera entity. "isChangingDomains" is true when this function is called // from the "Window.domainChanged()" signal. function spectatorCameraOff(isChangingDomains) { + + function deleteCamera() { + Entities.deleteEntity(camera); + camera = false; + // Change button to active when window is first openend OR if the camera is on, false otherwise. + button.editProperties({ isActive: onSpectatorCameraScreen || camera }); + } + spectatorCameraConfig.attachedEntityId = false; spectatorCameraConfig.enableSecondaryCameraRenderConfigs(false); if (camera) { @@ -121,12 +129,10 @@ // Should be removed after FB6155 is fixed. if (isChangingDomains) { Script.setTimeout(function () { - Entities.deleteEntity(camera); - camera = false; + deleteCamera(); }, 1 * 1000); } else { - Entities.deleteEntity(camera); - camera = false; + deleteCamera(); } } if (viewFinderOverlay) { @@ -134,10 +140,6 @@ } viewFinderOverlay = false; setDisplay(monitorShowsCameraView); - // Change button to active when window is first openend OR if the camera is on, false otherwise. - if (button) { - button.editProperties({ isActive: onSpectatorCameraScreen || camera }); - } } // Function Name: addOrRemoveButton() From 51c22eb7dbe318b5f8021c8fa549a8febcd0ee4a Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 11 Jul 2017 15:38:10 -0700 Subject: [PATCH 0882/1049] Also re-enable spectator camera after switching domains --- scripts/system/spectatorCamera.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 8945d006ab..9d976a5608 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -130,6 +130,7 @@ if (isChangingDomains) { Script.setTimeout(function () { deleteCamera(); + spectatorCameraOn(); }, 1 * 1000); } else { deleteCamera(); From a27644ae4d71559053da55f62892522f449fb32c Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Tue, 11 Jul 2017 15:52:12 -0700 Subject: [PATCH 0883/1049] Magic numbers --- scripts/system/spectatorCamera.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 9d976a5608..661e40cdeb 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -112,6 +112,7 @@ // -Call this function to shut down the spectator camera and // destroy the camera entity. "isChangingDomains" is true when this function is called // from the "Window.domainChanged()" signal. + var WAIT_AFTER_DOMAIN_SWITCH_BEFORE_CAMERA_DELETE_MS = 1 * 1000; function spectatorCameraOff(isChangingDomains) { function deleteCamera() { @@ -131,7 +132,7 @@ Script.setTimeout(function () { deleteCamera(); spectatorCameraOn(); - }, 1 * 1000); + }, WAIT_AFTER_DOMAIN_SWITCH_BEFORE_CAMERA_DELETE_MS); } else { deleteCamera(); } From 3c8c87cff582757814c0e146877b16e99272ccd8 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 11 Jul 2017 16:48:28 -0700 Subject: [PATCH 0884/1049] i hate you, milkman dan --- libraries/audio/src/AudioInjector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index 5b42168bdd..b1b5fdc316 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -432,7 +432,7 @@ void AudioInjector::stopAndDeleteLater() { AudioInjectorPointer AudioInjector::playSound(SharedSoundPointer sound, const float volume, const float stretchFactor, const glm::vec3 position) { if (!sound || !sound->isReady()) { - return nullptr; + return AudioInjectorPointer(nullptr); } AudioInjectorOptions options; From bedd0628b9558c59b2ed425bf1909edbfbd3c51d Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 12 Jul 2017 00:51:07 +0100 Subject: [PATCH 0885/1049] allowed tablet to toggle when a dialog is open --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ddd1870723..352d9e28e2 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1706,7 +1706,7 @@ void Application::toggleTabletUI(bool shouldOpen) const { auto hmd = DependencyManager::get(); TabletProxy* tablet = dynamic_cast(tabletScriptingInterface->getTablet(SYSTEM_TABLET)); bool messageOpen = tablet->isMessageDialogOpen(); - if ((!messageOpen || (messageOpen && !hmd->getShouldShowTablet())) && !(shouldOpen && hmd->getShouldShowTablet())) { + if (!(shouldOpen && hmd->getShouldShowTablet())) { auto HMD = DependencyManager::get(); HMD->toggleShouldShowTablet(); } From 59c586bc5d870d08a1017c76191bd9d8c9115d4c Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 11 Jul 2017 16:58:19 -0700 Subject: [PATCH 0886/1049] remove unused code --- libraries/audio/src/AudioInjector.h | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index 056f498b3a..c53a65ecd9 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -79,7 +79,6 @@ public: static AudioInjectorPointer playSound(SharedSoundPointer sound, const float volume, const float stretchFactor, const glm::vec3 position); - QWeakPointer weakRef() const { return _self; } AudioInjectorPointer getThisPointer(); void setThisPointer(AudioInjectorPointer self); From 0b2f13dacc210e59aad8a58a94f28e9fd90f3281 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 11 Jul 2017 17:07:44 -0700 Subject: [PATCH 0887/1049] don't use deleteLater on smartpointered object --- libraries/audio/src/AudioInjector.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index b1b5fdc316..1362d4850e 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -426,7 +426,6 @@ void AudioInjector::triggerDeleteAfterFinish() { void AudioInjector::stopAndDeleteLater() { stop(); - QMetaObject::invokeMethod(this, "deleteLater", Qt::QueuedConnection); } AudioInjectorPointer AudioInjector::playSound(SharedSoundPointer sound, const float volume, From bf13d0cc802202e84b9932a3adb4f8e0009c4ae6 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 11 Jul 2017 17:12:12 -0700 Subject: [PATCH 0888/1049] Send ordered packet lists for ignore feature --- libraries/networking/src/NodeList.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 262f0318b6..2c324892a7 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -950,7 +950,7 @@ void NodeList::maybeSendIgnoreSetToNode(SharedNodePointer newNode) { if (_personalMutedNodeIDs.size() > 0) { // setup a packet list so we can send the stream of ignore IDs - auto personalMutePacketList = NLPacketList::create(PacketType::NodeIgnoreRequest, QByteArray(), true); + auto personalMutePacketList = NLPacketList::create(PacketType::NodeIgnoreRequest, QByteArray(), true, true); // Force the "enabled" flag in this packet to true personalMutePacketList->writePrimitive(true); @@ -977,7 +977,7 @@ void NodeList::maybeSendIgnoreSetToNode(SharedNodePointer newNode) { if (_ignoredNodeIDs.size() > 0) { // setup a packet list so we can send the stream of ignore IDs - auto ignorePacketList = NLPacketList::create(PacketType::NodeIgnoreRequest, QByteArray(), true); + auto ignorePacketList = NLPacketList::create(PacketType::NodeIgnoreRequest, QByteArray(), true, true); // Force the "enabled" flag in this packet to true ignorePacketList->writePrimitive(true); From 81489ea6c419fdfb9af8f9968f4e557c3bce4a43 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 11 Jul 2017 18:44:37 -0700 Subject: [PATCH 0889/1049] use QEnableSharedFromThis --- libraries/audio/src/AudioInjector.cpp | 20 ++------------------ libraries/audio/src/AudioInjector.h | 8 +------- libraries/audio/src/AudioInjectorManager.cpp | 2 +- 3 files changed, 4 insertions(+), 26 deletions(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index 1362d4850e..b6c159ec90 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -150,7 +150,7 @@ bool AudioInjector::inject(bool(AudioInjectorManager::*injection)(AudioInjectorP bool success = true; if (!_options.localOnly) { auto injectorManager = DependencyManager::get(); - if (!(*injectorManager.*injection)(getThisPointer())) { + if (!(*injectorManager.*injection)(sharedFromThis())) { success = false; finishNetworkInjection(); } @@ -173,7 +173,7 @@ bool AudioInjector::injectLocally() { // call this function on the AudioClient's thread // this will move the local buffer's thread to the LocalInjectorThread - success = _localAudioInterface->outputLocalInjector(getThisPointer()); + success = _localAudioInterface->outputLocalInjector(sharedFromThis()); if (!success) { qCDebug(audio) << "AudioInjector::injectLocally could not output locally via _localAudioInterface"; @@ -475,25 +475,9 @@ AudioInjectorPointer AudioInjector::playSoundAndDelete(const QByteArray& buffer, AudioInjectorPointer AudioInjector::playSound(const QByteArray& buffer, const AudioInjectorOptions options) { AudioInjectorPointer injector = AudioInjectorPointer(new AudioInjector(buffer, options)); - injector->setThisPointer(injector); if (!injector->inject(&AudioInjectorManager::threadInjector)) { qWarning() << "AudioInjector::playSound failed to thread injector"; } return injector; } - -AudioInjectorPointer AudioInjector::getThisPointer() { - std::lock_guard lock(_refLock); - QSharedPointer this_ref(_self); - if (this_ref.isNull()) { - this_ref = QSharedPointer(this); - _self = this_ref.toWeakRef(); - } - return this_ref; -} - -void AudioInjector::setThisPointer(AudioInjectorPointer self) { - std::lock_guard lock(_refLock); - _self = self.toWeakRef(); -} diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index c53a65ecd9..89320ecc7a 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -49,7 +49,7 @@ AudioInjectorState& operator|= (AudioInjectorState& lhs, AudioInjectorState rhs) // In order to make scripting cleaner for the AudioInjector, the script now holds on to the AudioInjector object // until it dies. -class AudioInjector : public QObject { +class AudioInjector : public QObject, public QEnableSharedFromThis { Q_OBJECT public: AudioInjector(const Sound& sound, const AudioInjectorOptions& injectorOptions); @@ -79,9 +79,6 @@ public: static AudioInjectorPointer playSound(SharedSoundPointer sound, const float volume, const float stretchFactor, const glm::vec3 position); - AudioInjectorPointer getThisPointer(); - void setThisPointer(AudioInjectorPointer self); - public slots: void restart(); @@ -127,9 +124,6 @@ private: AudioHRTF _localHRTF; AudioFOA _localFOA; friend class AudioInjectorManager; - - QWeakPointer _self; - mutable std::mutex _refLock; }; Q_DECLARE_METATYPE(AudioInjectorPointer) diff --git a/libraries/audio/src/AudioInjectorManager.cpp b/libraries/audio/src/AudioInjectorManager.cpp index f9f45987d4..e1465252b5 100644 --- a/libraries/audio/src/AudioInjectorManager.cpp +++ b/libraries/audio/src/AudioInjectorManager.cpp @@ -181,7 +181,7 @@ bool AudioInjectorManager::restartFinishedInjector(AudioInjectorPointer injector return false; } else { // add the injector to the queue with a send timestamp of now - _injectors.emplace(usecTimestampNow(), injector->getThisPointer()); + _injectors.emplace(usecTimestampNow(), injector); // notify our wait condition so we can inject two frames for this injector immediately _injectorReady.notify_one(); From c52e7e180a47b3c20511b533671a85ca4614a327 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 11 Jul 2017 19:42:03 -0700 Subject: [PATCH 0890/1049] use const AudioInjectorPointer& in some places --- interface/src/avatar/AvatarManager.cpp | 2 +- libraries/audio-client/src/AudioClient.cpp | 2 +- libraries/audio/src/AudioInjector.cpp | 4 ++-- libraries/audio/src/AudioInjector.h | 2 +- libraries/audio/src/AudioInjectorManager.cpp | 4 ++-- libraries/audio/src/AudioInjectorManager.h | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index b63816eb4f..03def29b8a 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -434,7 +434,7 @@ void AvatarManager::handleCollisionEvents(const CollisionEvents& collisionEvents // but most avatars are roughly the same size, so let's not be so fancy yet. const float AVATAR_STRETCH_FACTOR = 1.0f; - _collisionInjectors.remove_if([](AudioInjectorPointer injector) { + _collisionInjectors.remove_if([](const AudioInjectorPointer& injector) { return !injector || injector->isFinished(); }); diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index d532b18836..f1a69441f1 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -1207,7 +1207,7 @@ bool AudioClient::mixLocalAudioInjectors(float* mixBuffer) { memset(mixBuffer, 0, AudioConstants::NETWORK_FRAME_SAMPLES_STEREO * sizeof(float)); - for (AudioInjectorPointer injector : _activeLocalAudioInjectors) { + for (const AudioInjectorPointer& injector : _activeLocalAudioInjectors) { // the lock guarantees that injectorBuffer, if found, is invariant AudioInjectorLocalBuffer* injectorBuffer = injector->getLocalBuffer(); if (injectorBuffer) { diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index b6c159ec90..82e3a3e5b5 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -132,7 +132,7 @@ void AudioInjector::restart() { } } -bool AudioInjector::inject(bool(AudioInjectorManager::*injection)(AudioInjectorPointer)) { +bool AudioInjector::inject(bool(AudioInjectorManager::*injection)(const AudioInjectorPointer&)) { _state = AudioInjectorState::NotFinished; int byteOffset = 0; @@ -474,7 +474,7 @@ AudioInjectorPointer AudioInjector::playSoundAndDelete(const QByteArray& buffer, AudioInjectorPointer AudioInjector::playSound(const QByteArray& buffer, const AudioInjectorOptions options) { - AudioInjectorPointer injector = AudioInjectorPointer(new AudioInjector(buffer, options)); + AudioInjectorPointer injector = AudioInjectorPointer::create<>(buffer, options); if (!injector->inject(&AudioInjectorManager::threadInjector)) { qWarning() << "AudioInjector::playSound failed to thread injector"; diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index 89320ecc7a..09ce1d32b8 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -101,7 +101,7 @@ signals: private: int64_t injectNextFrame(); - bool inject(bool(AudioInjectorManager::*injection)(AudioInjectorPointer)); + bool inject(bool(AudioInjectorManager::*injection)(const AudioInjectorPointer&)); bool injectLocally(); void deleteLocalBuffer(); diff --git a/libraries/audio/src/AudioInjectorManager.cpp b/libraries/audio/src/AudioInjectorManager.cpp index e1465252b5..e8a46ba2b4 100644 --- a/libraries/audio/src/AudioInjectorManager.cpp +++ b/libraries/audio/src/AudioInjectorManager.cpp @@ -139,7 +139,7 @@ bool AudioInjectorManager::wouldExceedLimits() { // Should be called inside of a return false; } -bool AudioInjectorManager::threadInjector(AudioInjectorPointer injector) { +bool AudioInjectorManager::threadInjector(const AudioInjectorPointer& injector) { if (_shouldStop) { qCDebug(audio) << "AudioInjectorManager::threadInjector asked to thread injector but is shutting down."; return false; @@ -168,7 +168,7 @@ bool AudioInjectorManager::threadInjector(AudioInjectorPointer injector) { } } -bool AudioInjectorManager::restartFinishedInjector(AudioInjectorPointer injector) { +bool AudioInjectorManager::restartFinishedInjector(const AudioInjectorPointer& injector) { if (_shouldStop) { qCDebug(audio) << "AudioInjectorManager::threadInjector asked to thread injector but is shutting down."; return false; diff --git a/libraries/audio/src/AudioInjectorManager.h b/libraries/audio/src/AudioInjectorManager.h index ac1d364b86..9aca3014e3 100644 --- a/libraries/audio/src/AudioInjectorManager.h +++ b/libraries/audio/src/AudioInjectorManager.h @@ -48,8 +48,8 @@ private: using Mutex = std::mutex; using Lock = std::unique_lock; - bool threadInjector(AudioInjectorPointer injector); - bool restartFinishedInjector(AudioInjectorPointer injector); + bool threadInjector(const AudioInjectorPointer& injector); + bool restartFinishedInjector(const AudioInjectorPointer& injector); void notifyInjectorReadyCondition() { _injectorReady.notify_one(); } bool wouldExceedLimits(); From 972dc4d1b29cb8d13f5b07493b875c59b270846b Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 11 Jul 2017 19:56:34 -0700 Subject: [PATCH 0891/1049] more const ref --- libraries/audio-client/src/AudioClient.cpp | 4 ++-- libraries/audio-client/src/AudioClient.h | 2 +- libraries/audio/src/AbstractAudioInterface.h | 2 +- libraries/script-engine/src/ScriptAudioInjector.cpp | 2 +- libraries/script-engine/src/ScriptAudioInjector.h | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index f1a69441f1..3d9b1de10f 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -1278,7 +1278,7 @@ bool AudioClient::mixLocalAudioInjectors(float* mixBuffer) { } } - for (AudioInjectorPointer injector : injectorsToRemove) { + for (const AudioInjectorPointer& injector : injectorsToRemove) { qCDebug(audioclient) << "removing injector"; _activeLocalAudioInjectors.removeOne(injector); } @@ -1369,7 +1369,7 @@ void AudioClient::setIsStereoInput(bool isStereoInput) { } } -bool AudioClient::outputLocalInjector(AudioInjectorPointer injector) { +bool AudioClient::outputLocalInjector(const AudioInjectorPointer& injector) { AudioInjectorLocalBuffer* injectorBuffer = injector->getLocalBuffer(); if (injectorBuffer) { // local injectors are on the AudioInjectorsThread, so we must guard access diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 7fbfcc25d6..31e36671c7 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -143,7 +143,7 @@ public: Q_INVOKABLE void setAvatarBoundingBoxParameters(glm::vec3 corner, glm::vec3 scale); - bool outputLocalInjector(AudioInjectorPointer injector) override; + bool outputLocalInjector(const AudioInjectorPointer& injector) override; QAudioDeviceInfo getActiveAudioDevice(QAudio::Mode mode) const; QList getAudioDevices(QAudio::Mode mode) const; diff --git a/libraries/audio/src/AbstractAudioInterface.h b/libraries/audio/src/AbstractAudioInterface.h index 314884a67a..8b48b55206 100644 --- a/libraries/audio/src/AbstractAudioInterface.h +++ b/libraries/audio/src/AbstractAudioInterface.h @@ -36,7 +36,7 @@ public: // threadsafe // moves injector->getLocalBuffer() to another thread (so removes its parent) // take care to delete it when ~AudioInjector, as parenting Qt semantics will not work - virtual bool outputLocalInjector(AudioInjectorPointer injector) = 0; + virtual bool outputLocalInjector(const AudioInjectorPointer& injector) = 0; public slots: virtual bool shouldLoopbackInjectors() { return false; } diff --git a/libraries/script-engine/src/ScriptAudioInjector.cpp b/libraries/script-engine/src/ScriptAudioInjector.cpp index 37a9ad65d7..1b734e8cdf 100644 --- a/libraries/script-engine/src/ScriptAudioInjector.cpp +++ b/libraries/script-engine/src/ScriptAudioInjector.cpp @@ -29,7 +29,7 @@ void injectorFromScriptValue(const QScriptValue& object, ScriptAudioInjector*& o out = qobject_cast(object.toQObject()); } -ScriptAudioInjector::ScriptAudioInjector(AudioInjectorPointer injector) : +ScriptAudioInjector::ScriptAudioInjector(const AudioInjectorPointer& injector) : _injector(injector) { QObject::connect(injector.data(), &AudioInjector::finished, this, &ScriptAudioInjector::finished); diff --git a/libraries/script-engine/src/ScriptAudioInjector.h b/libraries/script-engine/src/ScriptAudioInjector.h index 018fbe5110..4c2871dd34 100644 --- a/libraries/script-engine/src/ScriptAudioInjector.h +++ b/libraries/script-engine/src/ScriptAudioInjector.h @@ -23,7 +23,7 @@ class ScriptAudioInjector : public QObject { Q_PROPERTY(float loudness READ getLoudness) Q_PROPERTY(AudioInjectorOptions options WRITE setOptions READ getOptions) public: - ScriptAudioInjector(AudioInjectorPointer injector); + ScriptAudioInjector(const AudioInjectorPointer& injector); ~ScriptAudioInjector(); public slots: void restart() { _injector->restart(); } From 3897ab2723c9210de9abd298d04bb753343515b5 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 11 Jul 2017 20:16:00 -0700 Subject: [PATCH 0892/1049] don't call deleteLater on smartpointered object --- libraries/audio/src/AudioInjector.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index 82e3a3e5b5..d7cb77bc7f 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -92,11 +92,6 @@ void AudioInjector::finish() { emit finished(); deleteLocalBuffer(); - - if (stateHas(AudioInjectorState::PendingDelete)) { - // we've been asked to delete after finishing, trigger a deleteLater here - deleteLater(); - } } void AudioInjector::restart() { From 80916b62bb2558c0e4db063bf4cd637f4f0cbda2 Mon Sep 17 00:00:00 2001 From: Tingjin Date: Tue, 11 Jul 2017 20:52:28 -0700 Subject: [PATCH 0893/1049] Remove unnecessary code Remove two lines of unnecessary code. --- interface/src/scripting/AudioDevices.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index 98b8a7c12c..e26ebac3f1 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -131,7 +131,6 @@ void AudioDeviceList::resetDevice(bool contextIsHMD, const QString& device) { void AudioDeviceList::onDeviceChanged(const QAudioDeviceInfo& device) { auto oldDevice = _selectedDevice; _selectedDevice = device; - QModelIndex index; for (auto i = 0; i < _devices.size(); ++i) { AudioDevice& device = _devices[i]; @@ -139,7 +138,6 @@ void AudioDeviceList::onDeviceChanged(const QAudioDeviceInfo& device) { device.selected = false; } else if (device.info == _selectedDevice) { device.selected = true; - index = createIndex(i, 0); } } From 084a989a7acdaf0313361ff4d36420c4db41df00 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 11 Jul 2017 21:21:42 -0700 Subject: [PATCH 0894/1049] stopAndDeleteLater is now just stop --- libraries/audio/src/AudioInjector.cpp | 6 +----- libraries/audio/src/AudioInjector.h | 1 - libraries/audio/src/AudioInjectorManager.cpp | 2 +- libraries/script-engine/src/ScriptAudioInjector.cpp | 2 +- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index d7cb77bc7f..1b16a28546 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -413,16 +413,12 @@ void AudioInjector::triggerDeleteAfterFinish() { } if (stateHas(AudioInjectorState::Finished)) { - stopAndDeleteLater(); + stop(); } else { _state |= AudioInjectorState::PendingDelete; } } -void AudioInjector::stopAndDeleteLater() { - stop(); -} - AudioInjectorPointer AudioInjector::playSound(SharedSoundPointer sound, const float volume, const float stretchFactor, const glm::vec3 position) { if (!sound || !sound->isReady()) { diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index 09ce1d32b8..aed51c5f85 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -84,7 +84,6 @@ public slots: void stop(); void triggerDeleteAfterFinish(); - void stopAndDeleteLater(); const AudioInjectorOptions& getOptions() const { return _options; } void setOptions(const AudioInjectorOptions& options); diff --git a/libraries/audio/src/AudioInjectorManager.cpp b/libraries/audio/src/AudioInjectorManager.cpp index e8a46ba2b4..a2f8de8da9 100644 --- a/libraries/audio/src/AudioInjectorManager.cpp +++ b/libraries/audio/src/AudioInjectorManager.cpp @@ -30,7 +30,7 @@ AudioInjectorManager::~AudioInjectorManager() { auto& timePointerPair = _injectors.top(); // ask it to stop and be deleted - timePointerPair.second->stopAndDeleteLater(); + timePointerPair.second->stop(); _injectors.pop(); } diff --git a/libraries/script-engine/src/ScriptAudioInjector.cpp b/libraries/script-engine/src/ScriptAudioInjector.cpp index 1b734e8cdf..516f62401f 100644 --- a/libraries/script-engine/src/ScriptAudioInjector.cpp +++ b/libraries/script-engine/src/ScriptAudioInjector.cpp @@ -44,5 +44,5 @@ ScriptAudioInjector::~ScriptAudioInjector() { void ScriptAudioInjector::stopInjectorImmediately() { qCDebug(scriptengine) << "ScriptAudioInjector::stopInjectorImmediately called to stop audio injector immediately."; - _injector->stopAndDeleteLater(); + _injector->stop(); } From 98cc8c0683097b13140235c7d7401a4ed6802685 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Wed, 12 Jul 2017 14:13:58 +0200 Subject: [PATCH 0895/1049] Refining the custom shader pipeline design and registration mechanism --- .../RenderableParticleEffectEntityItem.cpp | 90 +++++++++---------- .../src/RenderableParticleEffectEntityItem.h | 7 +- .../src/untextured_particle.slf | 5 +- libraries/gl/src/gl/GLShaders.cpp | 1 - libraries/render/src/render/DrawTask.cpp | 8 +- libraries/render/src/render/Item.h | 4 - libraries/render/src/render/ShapePipeline.cpp | 29 +++++- libraries/render/src/render/ShapePipeline.h | 14 ++- 8 files changed, 87 insertions(+), 71 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 5ea8af4d7a..276ffb279f 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include "EntitiesRendererLogging.h" @@ -29,6 +30,16 @@ class ParticlePayloadData { public: static const size_t VERTEX_PER_PARTICLE = 4; + static uint8_t CUSTOM_PIPELINE_NUMBER; + static render::ShapePipelinePointer shapePipelineFactory(const render::ShapePlumber& plumber, const render::ShapeKey& key); + static std::weak_ptr _texturedPipeline; + + static void registerShapePipeline() { + if (!CUSTOM_PIPELINE_NUMBER) { + ParticlePayloadData::CUSTOM_PIPELINE_NUMBER = render::ShapePipeline::registerCustomShapePipelineFactory(ParticlePayloadData::shapePipelineFactory); + } + } + template struct InterpolationData { T start; @@ -70,9 +81,6 @@ public: offsetof(ParticlePrimitive, uv), gpu::Stream::PER_INSTANCE); } - void setPipeline(PipelinePointer pipeline) { _pipeline = pipeline; } - const PipelinePointer& getPipeline() const { return _pipeline; } - const Transform& getModelTransform() const { return _modelTransform; } void setModelTransform(const Transform& modelTransform) { _modelTransform = modelTransform; } @@ -90,15 +98,16 @@ public: bool getVisibleFlag() const { return _visibleFlag; } void setVisibleFlag(bool visibleFlag) { _visibleFlag = visibleFlag; } - + void render(RenderArgs* args) const { assert(_pipeline); gpu::Batch& batch = *args->_batch; - batch.setPipeline(_pipeline); if (_texture) { batch.setResourceTexture(0, _texture); + } else { + batch.setResourceTexture(0, DependencyManager::get()->getWhiteTexture()); } batch.setModelTransform(_modelTransform); @@ -144,30 +153,47 @@ namespace render { } template <> const ShapeKey shapeGetShapeKey(const ParticlePayloadData::Pointer& payload) { - return ShapeKey::Builder().withCustom(75).build(); - } - - template <> - bool shapeDefineCustomShapePipeline(const ParticlePayloadData::Pointer& payload, ShapePlumber& plumber, const ShapeKey& key) { - return false; + return render::ShapeKey::Builder().withCustom(ParticlePayloadData::CUSTOM_PIPELINE_NUMBER).withTranslucent().build(); } } +uint8_t ParticlePayloadData::CUSTOM_PIPELINE_NUMBER = 0; +std::weak_ptr ParticlePayloadData::_texturedPipeline; + +render::ShapePipelinePointer ParticlePayloadData::shapePipelineFactory(const render::ShapePlumber& plumber, const render::ShapeKey& key) { + auto texturedPipeline = _texturedPipeline.lock(); + if (!texturedPipeline) { + auto state = std::make_shared(); + state->setCullMode(gpu::State::CULL_BACK); + state->setDepthTest(true, false, gpu::LESS_EQUAL); + state->setBlendFunction(true, gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE, + gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); + PrepareStencil::testMask(*state); + + auto vertShader = gpu::Shader::createVertex(std::string(textured_particle_vert)); + auto fragShader = gpu::Shader::createPixel(std::string(textured_particle_frag)); + + auto program = gpu::Shader::createProgram(vertShader, fragShader); + _texturedPipeline = texturedPipeline = gpu::Pipeline::create(program, state); + } + + return std::make_shared(texturedPipeline, nullptr, nullptr, nullptr); +} EntityItemPointer RenderableParticleEffectEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { auto entity = std::make_shared(entityID); entity->setProperties(properties); + + // As we create the first ParticuleSystem entity, let s register its special shapePIpeline factory: + ParticlePayloadData::registerShapePipeline(); + return entity; } RenderableParticleEffectEntityItem::RenderableParticleEffectEntityItem(const EntityItemID& entityItemID) : ParticleEffectEntityItem(entityItemID) { - // lazy creation of particle system pipeline - if (!_untexturedPipeline || !_texturedPipeline) { - createPipelines(); - } } bool RenderableParticleEffectEntityItem::addToScene(const EntityItemPointer& self, @@ -176,7 +202,6 @@ bool RenderableParticleEffectEntityItem::addToScene(const EntityItemPointer& sel _scene = scene; _renderItemId = _scene->allocateID(); auto particlePayloadData = std::make_shared(); - particlePayloadData->setPipeline(_untexturedPipeline); auto renderPayload = std::make_shared(particlePayloadData); render::Item::Status::Getters statusGetters; makeEntityItemStatusGetters(getThisPointer(), statusGetters); @@ -285,47 +310,14 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { if (_texture && _texture->isLoaded()) { payload.setTexture(_texture->getGPUTexture()); - payload.setPipeline(_texturedPipeline); } else { payload.setTexture(nullptr); - payload.setPipeline(_untexturedPipeline); } }); _scene->enqueueTransaction(transaction); } -void RenderableParticleEffectEntityItem::createPipelines() { - if (!_untexturedPipeline) { - auto state = std::make_shared(); - state->setCullMode(gpu::State::CULL_BACK); - state->setDepthTest(true, false, gpu::LESS_EQUAL); - state->setBlendFunction(true, gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE, - gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); - PrepareStencil::testMask(*state); - - auto vertShader = gpu::Shader::createVertex(std::string(untextured_particle_vert)); - auto fragShader = gpu::Shader::createPixel(std::string(untextured_particle_frag)); - - auto program = gpu::Shader::createProgram(vertShader, fragShader); - _untexturedPipeline = gpu::Pipeline::create(program, state); - } - if (!_texturedPipeline) { - auto state = std::make_shared(); - state->setCullMode(gpu::State::CULL_BACK); - state->setDepthTest(true, false, gpu::LESS_EQUAL); - state->setBlendFunction(true, gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE, - gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); - PrepareStencil::testMask(*state); - - auto vertShader = gpu::Shader::createVertex(std::string(textured_particle_vert)); - auto fragShader = gpu::Shader::createPixel(std::string(textured_particle_frag)); - - auto program = gpu::Shader::createProgram(vertShader, fragShader); - _texturedPipeline = gpu::Pipeline::create(program, state); - } -} - void RenderableParticleEffectEntityItem::notifyBoundChanged() { if (!render::Item::isValidID(_renderItemId)) { return; diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.h b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.h index 678b582b41..b0d7e1c920 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.h +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.h @@ -34,16 +34,13 @@ protected: virtual void locationChanged(bool tellPhysics = true) override { EntityItem::locationChanged(tellPhysics); notifyBoundChanged(); } virtual void dimensionsChanged() override { EntityItem::dimensionsChanged(); notifyBoundChanged(); } - void notifyBoundChanged(); + void notifyBoundChanged(); - void createPipelines(); - render::ScenePointer _scene; render::ItemID _renderItemId{ render::Item::INVALID_ITEM_ID }; NetworkTexturePointer _texture; - gpu::PipelinePointer _untexturedPipeline; - gpu::PipelinePointer _texturedPipeline; + }; diff --git a/libraries/entities-renderer/src/untextured_particle.slf b/libraries/entities-renderer/src/untextured_particle.slf index 11f25bb693..a8062f0024 100644 --- a/libraries/entities-renderer/src/untextured_particle.slf +++ b/libraries/entities-renderer/src/untextured_particle.slf @@ -9,10 +9,11 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -in vec4 _color; +in vec4 varColor; +in vec2 varTexcoord; out vec4 outFragColor; void main(void) { - outFragColor = _color; + outFragColor = varColor; } diff --git a/libraries/gl/src/gl/GLShaders.cpp b/libraries/gl/src/gl/GLShaders.cpp index fd0c6788cb..8ef0198676 100644 --- a/libraries/gl/src/gl/GLShaders.cpp +++ b/libraries/gl/src/gl/GLShaders.cpp @@ -182,7 +182,6 @@ GLuint compileProgram(const std::vector& glshaders, std::string& error) filestream.close(); } */ - delete[] temp; glDeleteProgram(glprogram); return 0; diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index 550092c90e..f7712f59e7 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -44,13 +44,13 @@ void renderShape(RenderArgs* args, const ShapePlumberPointer& shapeContext, cons auto key = item.getShapeKey() | globalKey; if (key.isValid() && !key.hasOwnPipeline()) { args->_shapePipeline = shapeContext->pickPipeline(args, key); - if (!args->_shapePipeline) { + /* if (!args->_shapePipeline) { if (key.isCustom()) { if (item.defineCustomShapePipeline(*shapeContext, key)) { args->_shapePipeline = shapeContext->pickPipeline(args, key); } } - } + }*/ if (args->_shapePipeline) { args->_shapePipeline->prepareShapeItem(args, key, item); item.render(args); @@ -119,7 +119,7 @@ void render::renderStateSortShapes(const RenderContextPointer& renderContext, auto& bucket = sortedShapes[pipelineKey]; args->_shapePipeline = shapeContext->pickPipeline(args, pipelineKey); if (!args->_shapePipeline) { - if (pipelineKey.isCustom()) { + /* if (pipelineKey.isCustom()) { if (bucket.front().defineCustomShapePipeline(*shapeContext, pipelineKey)) { args->_shapePipeline = shapeContext->pickPipeline(args, pipelineKey); if (!args->_shapePipeline) { @@ -130,7 +130,7 @@ void render::renderStateSortShapes(const RenderContextPointer& renderContext, } else { continue; } - } + }*/ continue; } for (auto& item : bucket) { diff --git a/libraries/render/src/render/Item.h b/libraries/render/src/render/Item.h index 8ec80a7d7e..007b34395d 100644 --- a/libraries/render/src/render/Item.h +++ b/libraries/render/src/render/Item.h @@ -320,7 +320,6 @@ public: virtual void render(RenderArgs* args) = 0; virtual const ShapeKey getShapeKey() const = 0; - virtual bool defineCustomShapePipeline(ShapePlumber& plumber, const ShapeKey& key) const = 0; virtual uint32_t fetchMetaSubItems(ItemIDs& subItems) const = 0; @@ -370,7 +369,6 @@ public: // Shape Type Interface const ShapeKey getShapeKey() const { return _payload->getShapeKey(); } - bool defineCustomShapePipeline(ShapePlumber& plumber, const ShapeKey& key) const { return _payload->defineCustomShapePipeline(plumber, key); } // Meta Type Interface uint32_t fetchMetaSubItems(ItemIDs& subItems) const { return _payload->fetchMetaSubItems(subItems); } @@ -417,7 +415,6 @@ template void payloadRender(const std::shared_ptr& payloadData, Ren // When creating a new shape payload you need to create a specialized version, or the ShapeKey will be ownPipeline, // implying that the shape will setup its own pipeline without the use of the ShapeKey. template const ShapeKey shapeGetShapeKey(const std::shared_ptr& payloadData) { return ShapeKey::Builder::ownPipeline(); } -template bool shapeDefineCustomShapePipeline(const std::shared_ptr& payloadData, ShapePlumber& plumber, const ShapeKey& key) { return false; } // Meta Type Interface // Meta items act as the grouping object for several sub items (typically shapes). @@ -444,7 +441,6 @@ public: // Shape Type interface virtual const ShapeKey getShapeKey() const override { return shapeGetShapeKey(_data); } - virtual bool defineCustomShapePipeline(ShapePlumber& plumber, const ShapeKey& key) const override { return shapeDefineCustomShapePipeline(_data, plumber, key); } // Meta Type Interface virtual uint32_t fetchMetaSubItems(ItemIDs& subItems) const override { return metaFetchMetaSubItems(_data, subItems); } diff --git a/libraries/render/src/render/ShapePipeline.cpp b/libraries/render/src/render/ShapePipeline.cpp index ba506699b2..c83c0b44fc 100644 --- a/libraries/render/src/render/ShapePipeline.cpp +++ b/libraries/render/src/render/ShapePipeline.cpp @@ -17,6 +17,15 @@ using namespace render; +ShapePipeline::CustomFactoryMap ShapePipeline::_globalCustomFactoryMap; + +ShapePipeline::CustomKey ShapePipeline::registerCustomShapePipelineFactory(CustomFactory factory) { + ShapePipeline::CustomKey custom = (ShapePipeline::CustomKey) _globalCustomFactoryMap.size() + 1; + _globalCustomFactoryMap[custom] = factory; + return custom; +} + + void ShapePipeline::prepare(gpu::Batch& batch, RenderArgs* args) { if (_batchSetter) { _batchSetter(*this, batch, args); @@ -35,7 +44,7 @@ ShapeKey::Filter::Builder::Builder() { _mask.set(INVALID); } -void ShapePlumber::addPipelineHelper(const Filter& filter, ShapeKey key, int bit, const PipelinePointer& pipeline) { +void ShapePlumber::addPipelineHelper(const Filter& filter, ShapeKey key, int bit, const PipelinePointer& pipeline) const { // Iterate over all keys if (bit < (int)ShapeKey::FlagBit::NUM_FLAGS) { addPipelineHelper(filter, key, bit + 1, pipeline); @@ -110,10 +119,22 @@ const ShapePipelinePointer ShapePlumber::pickPipeline(RenderArgs* args, const Ke const auto& pipelineIterator = _pipelineMap.find(key); if (pipelineIterator == _pipelineMap.end()) { - // The first time we can't find a pipeline, we should log it + // The first time we can't find a pipeline, we should try things to solve that if (_missingKeys.find(key) == _missingKeys.end()) { - _missingKeys.insert(key); - qCDebug(renderlogging) << "Couldn't find a pipeline for" << key; + if (key.isCustom()) { + auto factoryIt = ShapePipeline::_globalCustomFactoryMap.find(key.getCustom()); + if ((factoryIt != ShapePipeline::_globalCustomFactoryMap.end()) && (factoryIt)->second) { + // found a factory for the custom key, can now generate a shape pipeline for this case: + addPipelineHelper(Filter(key), key, 0, (factoryIt)->second(*this, key)); + + return pickPipeline(args, key); + } else { + qCDebug(renderlogging) << "ShapePlumber::Couldn't find a custom pipeline factory for " << key.getCustom() << " key is: " << key; + } + } + + _missingKeys.insert(key); + qCDebug(renderlogging) << "ShapePlumber::Couldn't find a pipeline for" << key; } return PipelinePointer(nullptr); } diff --git a/libraries/render/src/render/ShapePipeline.h b/libraries/render/src/render/ShapePipeline.h index afc0eac011..3951e41e44 100644 --- a/libraries/render/src/render/ShapePipeline.h +++ b/libraries/render/src/render/ShapePipeline.h @@ -285,6 +285,15 @@ protected: BatchSetter _batchSetter; ItemSetter _itemSetter; +public: + using CustomKey = uint8_t; + using CustomFactory = std::function (const ShapePlumber& plumber, const ShapeKey& key)>; + using CustomFactoryMap = std::map; + + static CustomFactoryMap _globalCustomFactoryMap; + + static CustomKey registerCustomShapePipelineFactory(CustomFactory factory); + }; using ShapePipelinePointer = std::shared_ptr; @@ -309,13 +318,14 @@ public: const PipelinePointer pickPipeline(RenderArgs* args, const Key& key) const; protected: - void addPipelineHelper(const Filter& filter, Key key, int bit, const PipelinePointer& pipeline); - PipelineMap _pipelineMap; + void addPipelineHelper(const Filter& filter, Key key, int bit, const PipelinePointer& pipeline) const; + mutable PipelineMap _pipelineMap; private: mutable std::unordered_set _missingKeys; }; + using ShapePlumberPointer = std::shared_ptr; } From 49779754ff063a57d6b57b97aeb6f64a3be1967d Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Wed, 12 Jul 2017 15:50:06 +0200 Subject: [PATCH 0896/1049] Remove unecessary shaders and apply the custom shader pipeline to polyvox --- .../RenderableParticleEffectEntityItem.cpp | 10 +-- .../src/RenderablePolyVoxEntityItem.cpp | 68 ++++++++++++++++--- .../src/RenderablePolyVoxEntityItem.h | 17 ++++- .../src/untextured_particle.slf | 19 ------ .../src/untextured_particle.slv | 25 ------- tests/shaders/src/main.cpp | 3 - 6 files changed, 76 insertions(+), 66 deletions(-) delete mode 100644 libraries/entities-renderer/src/untextured_particle.slf delete mode 100644 libraries/entities-renderer/src/untextured_particle.slv diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 276ffb279f..a3c0d9877e 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -20,8 +20,6 @@ #include "RenderableParticleEffectEntityItem.h" -#include "untextured_particle_vert.h" -#include "untextured_particle_frag.h" #include "textured_particle_vert.h" #include "textured_particle_frag.h" @@ -32,14 +30,14 @@ public: static uint8_t CUSTOM_PIPELINE_NUMBER; static render::ShapePipelinePointer shapePipelineFactory(const render::ShapePlumber& plumber, const render::ShapeKey& key); - static std::weak_ptr _texturedPipeline; - static void registerShapePipeline() { if (!CUSTOM_PIPELINE_NUMBER) { - ParticlePayloadData::CUSTOM_PIPELINE_NUMBER = render::ShapePipeline::registerCustomShapePipelineFactory(ParticlePayloadData::shapePipelineFactory); + CUSTOM_PIPELINE_NUMBER = render::ShapePipeline::registerCustomShapePipelineFactory(shapePipelineFactory); } } + static std::weak_ptr _texturedPipeline; + template struct InterpolationData { T start; @@ -100,7 +98,6 @@ public: void setVisibleFlag(bool visibleFlag) { _visibleFlag = visibleFlag; } void render(RenderArgs* args) const { - assert(_pipeline); gpu::Batch& batch = *args->_batch; @@ -122,7 +119,6 @@ public: protected: Transform _modelTransform; AABox _bound; - PipelinePointer _pipeline; FormatPointer _vertexFormat { std::make_shared() }; BufferPointer _particleBuffer { std::make_shared() }; BufferView _uniformBuffer; diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index 88a5d2b873..364195ae0b 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -59,8 +59,8 @@ #include "EntityEditPacketSender.h" #include "PhysicalEntitySimulation.h" -gpu::PipelinePointer RenderablePolyVoxEntityItem::_pipeline = nullptr; -gpu::PipelinePointer RenderablePolyVoxEntityItem::_wireframePipeline = nullptr; +//gpu::PipelinePointer RenderablePolyVoxEntityItem::_pipeline = nullptr; +//gpu::PipelinePointer RenderablePolyVoxEntityItem::_wireframePipeline = nullptr; const float MARCHING_CUBE_COLLISION_HULL_OFFSET = 0.5; @@ -116,6 +116,10 @@ EntityItemPointer RenderablePolyVoxEntityItem::factory(const EntityItemID& entit EntityItemPointer entity{ new RenderablePolyVoxEntityItem(entityID) }; entity->setProperties(properties); std::static_pointer_cast(entity)->initializePolyVox(); + + // As we create the first Polyvox entity, let's register its special shapePipeline factory: + PolyVoxPayload::registerShapePipeline(); + return entity; } @@ -733,7 +737,7 @@ void RenderablePolyVoxEntityItem::render(RenderArgs* args) { return; } - if (!_pipeline) { + /* if (!_pipeline) { gpu::ShaderPointer vertexShader = gpu::Shader::createVertex(std::string(polyvox_vert)); gpu::ShaderPointer pixelShader = gpu::Shader::createPixel(std::string(polyvox_frag)); @@ -760,7 +764,7 @@ void RenderablePolyVoxEntityItem::render(RenderArgs* args) { PrepareStencil::testMaskDrawShape(*wireframeState); _wireframePipeline = gpu::Pipeline::create(program, wireframeState); - } + }*/ if (!_vertexFormat) { auto vf = std::make_shared(); @@ -772,9 +776,9 @@ void RenderablePolyVoxEntityItem::render(RenderArgs* args) { gpu::Batch& batch = *args->_batch; // Pick correct Pipeline - bool wireframe = (render::ShapeKey(args->_globalShapeKey).isWireframe()); - auto pipeline = (wireframe ? _wireframePipeline : _pipeline); - batch.setPipeline(pipeline); + // bool wireframe = (render::ShapeKey(args->_globalShapeKey).isWireframe()); + // auto pipeline = (wireframe ? _wireframePipeline : _pipeline); + // batch.setPipeline(pipeline); Transform transform(voxelToWorldMatrix()); batch.setModelTransform(transform); @@ -817,7 +821,7 @@ void RenderablePolyVoxEntityItem::render(RenderArgs* args) { batch.setResourceTexture(2, DependencyManager::get()->getWhiteTexture()); } - int voxelVolumeSizeLocation = pipeline->getProgram()->getUniforms().findLocation("voxelVolumeSize"); + int voxelVolumeSizeLocation = args->_shapePipeline->pipeline->getProgram()->getUniforms().findLocation("voxelVolumeSize"); batch._glUniform3f(voxelVolumeSizeLocation, voxelVolumeSize.x, voxelVolumeSize.y, voxelVolumeSize.z); batch.drawIndexed(gpu::TRIANGLES, (gpu::uint32)mesh->getNumIndices(), 0); @@ -848,6 +852,48 @@ void RenderablePolyVoxEntityItem::removeFromScene(const EntityItemPointer& self, render::Item::clearID(_myItem); } +uint8_t PolyVoxPayload::CUSTOM_PIPELINE_NUMBER = 0; + +std::shared_ptr PolyVoxPayload::_pipeline; +std::shared_ptr PolyVoxPayload::_wireframePipeline; + +render::ShapePipelinePointer PolyVoxPayload::shapePipelineFactory(const render::ShapePlumber& plumber, const render::ShapeKey& key) { + if (!_pipeline) { + gpu::ShaderPointer vertexShader = gpu::Shader::createVertex(std::string(polyvox_vert)); + gpu::ShaderPointer pixelShader = gpu::Shader::createPixel(std::string(polyvox_frag)); + + gpu::Shader::BindingSet slotBindings; + slotBindings.insert(gpu::Shader::Binding(std::string("materialBuffer"), PolyVoxPayload::MATERIAL_GPU_SLOT)); + slotBindings.insert(gpu::Shader::Binding(std::string("xMap"), 0)); + slotBindings.insert(gpu::Shader::Binding(std::string("yMap"), 1)); + slotBindings.insert(gpu::Shader::Binding(std::string("zMap"), 2)); + + gpu::ShaderPointer program = gpu::Shader::createProgram(vertexShader, pixelShader); + gpu::Shader::makeProgram(*program, slotBindings); + + auto state = std::make_shared(); + state->setCullMode(gpu::State::CULL_BACK); + state->setDepthTest(true, true, gpu::LESS_EQUAL); + PrepareStencil::testMaskDrawShape(*state); + + _pipeline = gpu::Pipeline::create(program, state); + + auto wireframeState = std::make_shared(); + wireframeState->setCullMode(gpu::State::CULL_BACK); + wireframeState->setDepthTest(true, true, gpu::LESS_EQUAL); + wireframeState->setFillMode(gpu::State::FILL_LINE); + PrepareStencil::testMaskDrawShape(*wireframeState); + + _wireframePipeline = gpu::Pipeline::create(program, wireframeState); + } + + if (key.isWireframe()) { + return std::make_shared(_wireframePipeline, nullptr, nullptr, nullptr); + } else { + return std::make_shared(_pipeline, nullptr, nullptr, nullptr); + } +} + namespace render { template <> const ItemKey payloadGetKey(const PolyVoxPayload::Pointer& payload) { return ItemKey::Builder::opaqueShape(); @@ -871,6 +917,10 @@ namespace render { payload->_owner->getRenderableInterface()->render(args); } } + + template <> const ShapeKey shapeGetShapeKey(const PolyVoxPayload::Pointer& payload) { + return ShapeKey::Builder().withCustom(PolyVoxPayload::CUSTOM_PIPELINE_NUMBER).build(); + } } @@ -1619,7 +1669,7 @@ void RenderablePolyVoxEntityItem::bonkNeighbors() { void RenderablePolyVoxEntityItem::locationChanged(bool tellPhysics) { EntityItem::locationChanged(tellPhysics); - if (!_pipeline || !render::Item::isValidID(_myItem)) { + if (/*!_pipeline || */!render::Item::isValidID(_myItem)) { return; } render::ScenePointer scene = AbstractViewStateInterface::instance()->getMain3DScene(); diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h index 45625ada6d..8f20a7a298 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h @@ -28,6 +28,19 @@ class PolyVoxPayload { public: + + static uint8_t CUSTOM_PIPELINE_NUMBER; + static render::ShapePipelinePointer shapePipelineFactory(const render::ShapePlumber& plumber, const render::ShapeKey& key); + static void registerShapePipeline() { + if (!CUSTOM_PIPELINE_NUMBER) { + CUSTOM_PIPELINE_NUMBER = render::ShapePipeline::registerCustomShapePipelineFactory(shapePipelineFactory); + } + } + + static const int MATERIAL_GPU_SLOT = 3; + static std::shared_ptr _pipeline; + static std::shared_ptr _wireframePipeline; + PolyVoxPayload(EntityItemPointer owner) : _owner(owner), _bounds(AABox()) { } typedef render::Payload Payload; typedef Payload::DataPointer Pointer; @@ -40,6 +53,7 @@ namespace render { template <> const ItemKey payloadGetKey(const PolyVoxPayload::Pointer& payload); template <> const Item::Bound payloadGetBound(const PolyVoxPayload::Pointer& payload); template <> void payloadRender(const PolyVoxPayload::Pointer& payload, RenderArgs* args); + template <> const ShapeKey shapeGetShapeKey(const PolyVoxPayload::Pointer& payload); } @@ -168,10 +182,7 @@ private: NetworkTexturePointer _yTexture; NetworkTexturePointer _zTexture; - const int MATERIAL_GPU_SLOT = 3; render::ItemID _myItem{ render::Item::INVALID_ITEM_ID }; - static gpu::PipelinePointer _pipeline; - static gpu::PipelinePointer _wireframePipeline; ShapeInfo _shapeInfo; diff --git a/libraries/entities-renderer/src/untextured_particle.slf b/libraries/entities-renderer/src/untextured_particle.slf deleted file mode 100644 index a8062f0024..0000000000 --- a/libraries/entities-renderer/src/untextured_particle.slf +++ /dev/null @@ -1,19 +0,0 @@ -<@include gpu/Config.slh@> -<$VERSION_HEADER$> -// Generated on <$_SCRIBE_DATE$> -// fragment shader -// -// Copyright 2015 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -in vec4 varColor; -in vec2 varTexcoord; - -out vec4 outFragColor; - -void main(void) { - outFragColor = varColor; -} diff --git a/libraries/entities-renderer/src/untextured_particle.slv b/libraries/entities-renderer/src/untextured_particle.slv deleted file mode 100644 index 85f9d438bf..0000000000 --- a/libraries/entities-renderer/src/untextured_particle.slv +++ /dev/null @@ -1,25 +0,0 @@ -<@include gpu/Config.slh@> -<$VERSION_HEADER$> -// Generated on <$_SCRIBE_DATE$> -// -// particle vertex shader -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -<@include gpu/Inputs.slh@> -<@include gpu/Color.slh@> -<@include gpu/Transform.slh@> -<$declareStandardTransform()$> - -out vec4 _color; - -void main(void) { - // pass along the color - _color = colorToLinearRGBA(inColor); - - TransformCamera cam = getTransformCamera(); - TransformObject obj = getTransformObject(); - <$transformModelToClipPos(cam, obj, inPosition, gl_Position)$> -} \ No newline at end of file diff --git a/tests/shaders/src/main.cpp b/tests/shaders/src/main.cpp index d10ab1ddbe..9847e9f7b9 100644 --- a/tests/shaders/src/main.cpp +++ b/tests/shaders/src/main.cpp @@ -57,8 +57,6 @@ #include #include -#include -#include #include #include @@ -172,7 +170,6 @@ void QTestWindow::draw() { testShaderBuild(skin_model_normal_map_vert, model_translucent_frag); testShaderBuild(model_shadow_vert, model_shadow_frag); - testShaderBuild(untextured_particle_vert, untextured_particle_frag); testShaderBuild(textured_particle_vert, textured_particle_frag); /* FIXME: Bring back the ssao shader tests testShaderBuild(gaussian_blur_vertical_vert, gaussian_blur_frag); From b556ddc0ef80a582922201a7eea59de0591356a4 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 12 Jul 2017 07:24:19 -0700 Subject: [PATCH 0897/1049] remove unneeded AudioInjectorPointer constructor --- libraries/audio/src/AudioInjectorManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/audio/src/AudioInjectorManager.cpp b/libraries/audio/src/AudioInjectorManager.cpp index a2f8de8da9..f30d3093ec 100644 --- a/libraries/audio/src/AudioInjectorManager.cpp +++ b/libraries/audio/src/AudioInjectorManager.cpp @@ -159,7 +159,7 @@ bool AudioInjectorManager::threadInjector(const AudioInjectorPointer& injector) injector->moveToThread(_thread); // add the injector to the queue with a send timestamp of now - _injectors.emplace(usecTimestampNow(), AudioInjectorPointer { injector }); + _injectors.emplace(usecTimestampNow(), injector); // notify our wait condition so we can inject two frames for this injector immediately _injectorReady.notify_one(); From 5394ac86726111ea5d6790def85a5529ac79055d Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Wed, 12 Jul 2017 17:33:05 +0200 Subject: [PATCH 0898/1049] Cleaning up changes, removing comments and dead code etc... --- interface/src/Application.cpp | 2 +- .../src/RenderablePolyVoxEntityItem.cpp | 40 +------------------ libraries/render/src/render/DrawTask.cpp | 19 --------- 3 files changed, 2 insertions(+), 59 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 1ab8dca762..ddd1870723 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -343,7 +343,7 @@ public: // Don't actually crash in debug builds, in case this apparent deadlock is simply from // the developer actively debugging code #ifdef NDEBUG - // deadlockDetectionCrash(); + deadlockDetectionCrash(); #endif } } diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index 364195ae0b..1d309a8e14 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -59,12 +59,8 @@ #include "EntityEditPacketSender.h" #include "PhysicalEntitySimulation.h" -//gpu::PipelinePointer RenderablePolyVoxEntityItem::_pipeline = nullptr; -//gpu::PipelinePointer RenderablePolyVoxEntityItem::_wireframePipeline = nullptr; - const float MARCHING_CUBE_COLLISION_HULL_OFFSET = 0.5; - /* A PolyVoxEntity has several interdependent parts: @@ -736,35 +732,6 @@ void RenderablePolyVoxEntityItem::render(RenderArgs* args) { !mesh->getIndexBuffer()._buffer) { return; } - - /* if (!_pipeline) { - gpu::ShaderPointer vertexShader = gpu::Shader::createVertex(std::string(polyvox_vert)); - gpu::ShaderPointer pixelShader = gpu::Shader::createPixel(std::string(polyvox_frag)); - - gpu::Shader::BindingSet slotBindings; - slotBindings.insert(gpu::Shader::Binding(std::string("materialBuffer"), MATERIAL_GPU_SLOT)); - slotBindings.insert(gpu::Shader::Binding(std::string("xMap"), 0)); - slotBindings.insert(gpu::Shader::Binding(std::string("yMap"), 1)); - slotBindings.insert(gpu::Shader::Binding(std::string("zMap"), 2)); - - gpu::ShaderPointer program = gpu::Shader::createProgram(vertexShader, pixelShader); - gpu::Shader::makeProgram(*program, slotBindings); - - auto state = std::make_shared(); - state->setCullMode(gpu::State::CULL_BACK); - state->setDepthTest(true, true, gpu::LESS_EQUAL); - PrepareStencil::testMaskDrawShape(*state); - - _pipeline = gpu::Pipeline::create(program, state); - - auto wireframeState = std::make_shared(); - wireframeState->setCullMode(gpu::State::CULL_BACK); - wireframeState->setDepthTest(true, true, gpu::LESS_EQUAL); - wireframeState->setFillMode(gpu::State::FILL_LINE); - PrepareStencil::testMaskDrawShape(*wireframeState); - - _wireframePipeline = gpu::Pipeline::create(program, wireframeState); - }*/ if (!_vertexFormat) { auto vf = std::make_shared(); @@ -775,11 +742,6 @@ void RenderablePolyVoxEntityItem::render(RenderArgs* args) { gpu::Batch& batch = *args->_batch; - // Pick correct Pipeline - // bool wireframe = (render::ShapeKey(args->_globalShapeKey).isWireframe()); - // auto pipeline = (wireframe ? _wireframePipeline : _pipeline); - // batch.setPipeline(pipeline); - Transform transform(voxelToWorldMatrix()); batch.setModelTransform(transform); batch.setInputFormat(_vertexFormat); @@ -1669,7 +1631,7 @@ void RenderablePolyVoxEntityItem::bonkNeighbors() { void RenderablePolyVoxEntityItem::locationChanged(bool tellPhysics) { EntityItem::locationChanged(tellPhysics); - if (/*!_pipeline || */!render::Item::isValidID(_myItem)) { + if (!render::Item::isValidID(_myItem)) { return; } render::ScenePointer scene = AbstractViewStateInterface::instance()->getMain3DScene(); diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index f7712f59e7..a3175ffdec 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -44,13 +44,6 @@ void renderShape(RenderArgs* args, const ShapePlumberPointer& shapeContext, cons auto key = item.getShapeKey() | globalKey; if (key.isValid() && !key.hasOwnPipeline()) { args->_shapePipeline = shapeContext->pickPipeline(args, key); - /* if (!args->_shapePipeline) { - if (key.isCustom()) { - if (item.defineCustomShapePipeline(*shapeContext, key)) { - args->_shapePipeline = shapeContext->pickPipeline(args, key); - } - } - }*/ if (args->_shapePipeline) { args->_shapePipeline->prepareShapeItem(args, key, item); item.render(args); @@ -119,18 +112,6 @@ void render::renderStateSortShapes(const RenderContextPointer& renderContext, auto& bucket = sortedShapes[pipelineKey]; args->_shapePipeline = shapeContext->pickPipeline(args, pipelineKey); if (!args->_shapePipeline) { - /* if (pipelineKey.isCustom()) { - if (bucket.front().defineCustomShapePipeline(*shapeContext, pipelineKey)) { - args->_shapePipeline = shapeContext->pickPipeline(args, pipelineKey); - if (!args->_shapePipeline) { - - } else { - continue; - } - } else { - continue; - } - }*/ continue; } for (auto& item : bucket) { From f6d9a79fb5283798face33bfc68b231094b5eb5e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 12 Jul 2017 10:36:53 -0700 Subject: [PATCH 0899/1049] Revert "Revert "fix for invisible avatars after radius ignore"" --- .../src/avatars/AvatarMixerClientData.cpp | 3 --- interface/src/avatar/AvatarManager.cpp | 4 ---- .../src/avatars-renderer/Avatar.cpp | 3 +-- libraries/avatars/src/AvatarHashMap.cpp | 7 ------- libraries/avatars/src/AvatarHashMap.h | 1 - libraries/networking/src/NodeList.cpp | 20 ------------------- libraries/networking/src/NodeList.h | 4 ---- libraries/networking/src/udt/PacketHeaders.h | 1 - 8 files changed, 1 insertion(+), 42 deletions(-) diff --git a/assignment-client/src/avatars/AvatarMixerClientData.cpp b/assignment-client/src/avatars/AvatarMixerClientData.cpp index 4d80bc7d17..a4bf8fa253 100644 --- a/assignment-client/src/avatars/AvatarMixerClientData.cpp +++ b/assignment-client/src/avatars/AvatarMixerClientData.cpp @@ -108,9 +108,6 @@ void AvatarMixerClientData::ignoreOther(SharedNodePointer self, SharedNodePointe void AvatarMixerClientData::removeFromRadiusIgnoringSet(SharedNodePointer self, const QUuid& other) { if (isRadiusIgnoring(other)) { _radiusIgnoredOthers.erase(other); - auto exitingSpaceBubblePacket = NLPacket::create(PacketType::ExitingSpaceBubble, NUM_BYTES_RFC4122_UUID); - exitingSpaceBubblePacket->write(other.toRfc4122()); - DependencyManager::get()->sendUnreliablePacket(*exitingSpaceBubblePacket, *self); } } diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index c46d61cf68..3272bc3255 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -63,7 +63,6 @@ AvatarManager::AvatarManager(QObject* parent) : packetReceiver.registerListener(PacketType::BulkAvatarData, this, "processAvatarDataPacket"); packetReceiver.registerListener(PacketType::KillAvatar, this, "processKillAvatar"); packetReceiver.registerListener(PacketType::AvatarIdentity, this, "processAvatarIdentityPacket"); - packetReceiver.registerListener(PacketType::ExitingSpaceBubble, this, "processExitingSpaceBubble"); // when we hear that the user has ignored an avatar by session UUID // immediately remove that avatar instead of waiting for the absence of packets from avatar mixer @@ -320,9 +319,6 @@ void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble) { emit DependencyManager::get()->enteredIgnoreRadius(); - } - if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble || removalReason == YourAvatarEnteredTheirBubble) { - DependencyManager::get()->radiusIgnoreNodeBySessionID(avatar->getSessionUUID(), true); } else if (removalReason == KillAvatarReason::AvatarDisconnected) { // remove from node sets, if present DependencyManager::get()->removeFromIgnoreMuteSets(avatar->getSessionUUID()); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 2a223a1eaf..6e8f0f01e7 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1453,8 +1453,7 @@ void Avatar::addToScene(AvatarSharedPointer myHandle, const render::ScenePointer if (scene) { auto nodelist = DependencyManager::get(); if (showAvatars - && !nodelist->isIgnoringNode(getSessionUUID()) - && !nodelist->isRadiusIgnoringNode(getSessionUUID())) { + && !nodelist->isIgnoringNode(getSessionUUID())) { render::Transaction transaction; addToScene(myHandle, scene, transaction); scene->enqueueTransaction(transaction); diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp index e8c37bdaa8..3712080cdb 100644 --- a/libraries/avatars/src/AvatarHashMap.cpp +++ b/libraries/avatars/src/AvatarHashMap.cpp @@ -170,13 +170,6 @@ void AvatarHashMap::processKillAvatar(QSharedPointer message, S removeAvatar(sessionUUID, reason); } -void AvatarHashMap::processExitingSpaceBubble(QSharedPointer message, SharedNodePointer sendingNode) { - // read the node id - QUuid sessionUUID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID)); - auto nodeList = DependencyManager::get(); - nodeList->radiusIgnoreNodeBySessionID(sessionUUID, false); -} - void AvatarHashMap::removeAvatar(const QUuid& sessionUUID, KillAvatarReason removalReason) { QWriteLocker locker(&_hashLock); diff --git a/libraries/avatars/src/AvatarHashMap.h b/libraries/avatars/src/AvatarHashMap.h index 21ea8081c7..68fc232685 100644 --- a/libraries/avatars/src/AvatarHashMap.h +++ b/libraries/avatars/src/AvatarHashMap.h @@ -60,7 +60,6 @@ protected slots: void processAvatarDataPacket(QSharedPointer message, SharedNodePointer sendingNode); void processAvatarIdentityPacket(QSharedPointer message, SharedNodePointer sendingNode); void processKillAvatar(QSharedPointer message, SharedNodePointer sendingNode); - void processExitingSpaceBubble(QSharedPointer message, SharedNodePointer sendingNode); protected: AvatarHashMap(); diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 262f0318b6..7c479e1bff 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -241,10 +241,6 @@ void NodeList::reset() { _numNoReplyDomainCheckIns = 0; - // lock and clear our set of radius ignored IDs - _radiusIgnoredSetLock.lockForWrite(); - _radiusIgnoredNodeIDs.clear(); - _radiusIgnoredSetLock.unlock(); // lock and clear our set of ignored IDs _ignoredSetLock.lockForWrite(); _ignoredNodeIDs.clear(); @@ -810,22 +806,6 @@ void NodeList::sendIgnoreRadiusStateToNode(const SharedNodePointer& destinationN sendPacket(std::move(ignorePacket), *destinationNode); } -void NodeList::radiusIgnoreNodeBySessionID(const QUuid& nodeID, bool radiusIgnoreEnabled) { - if (radiusIgnoreEnabled) { - QReadLocker radiusIgnoredSetLocker{ &_radiusIgnoredSetLock }; // read lock for insert - // add this nodeID to our set of ignored IDs - _radiusIgnoredNodeIDs.insert(nodeID); - } else { - QWriteLocker radiusIgnoredSetLocker{ &_radiusIgnoredSetLock }; // write lock for unsafe_erase - _radiusIgnoredNodeIDs.unsafe_erase(nodeID); - } -} - -bool NodeList::isRadiusIgnoringNode(const QUuid& nodeID) const { - QReadLocker radiusIgnoredSetLocker{ &_radiusIgnoredSetLock }; // read lock for reading - return _radiusIgnoredNodeIDs.find(nodeID) != _radiusIgnoredNodeIDs.cend(); -} - void NodeList::ignoreNodeBySessionID(const QUuid& nodeID, bool ignoreEnabled) { // enumerate the nodes to send a reliable ignore packet to each that can leverage it if (!nodeID.isNull() && _sessionUUID != nodeID) { diff --git a/libraries/networking/src/NodeList.h b/libraries/networking/src/NodeList.h index 6db760b3ca..b3a12153e5 100644 --- a/libraries/networking/src/NodeList.h +++ b/libraries/networking/src/NodeList.h @@ -77,8 +77,6 @@ public: void toggleIgnoreRadius() { ignoreNodesInRadius(!getIgnoreRadiusEnabled()); } void enableIgnoreRadius() { ignoreNodesInRadius(true); } void disableIgnoreRadius() { ignoreNodesInRadius(false); } - void radiusIgnoreNodeBySessionID(const QUuid& nodeID, bool radiusIgnoreEnabled); - bool isRadiusIgnoringNode(const QUuid& other) const; void ignoreNodeBySessionID(const QUuid& nodeID, bool ignoreEnabled); bool isIgnoringNode(const QUuid& nodeID) const; void personalMuteNodeBySessionID(const QUuid& nodeID, bool muteEnabled); @@ -166,8 +164,6 @@ private: QTimer _keepAlivePingTimer; bool _requestsDomainListData; - mutable QReadWriteLock _radiusIgnoredSetLock; - tbb::concurrent_unordered_set _radiusIgnoredNodeIDs; mutable QReadWriteLock _ignoredSetLock; tbb::concurrent_unordered_set _ignoredNodeIDs; mutable QReadWriteLock _personalMutedSetLock; diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index 6c42193e11..848bfd97cf 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -105,7 +105,6 @@ public: UsernameFromIDReply, ViewFrustum, RequestsDomainListData, - ExitingSpaceBubble, PerAvatarGainSet, EntityScriptGetStatus, EntityScriptGetStatusReply, From b3d73fd0dfdebfae602fc99970326b8d54482829 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 12 Jul 2017 10:39:15 -0700 Subject: [PATCH 0900/1049] Add comments to DebugDraw instanciation --- assignment-client/src/Agent.cpp | 3 ++- assignment-client/src/scripts/EntityScriptServer.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 8710553027..8b22d391d0 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -81,7 +81,8 @@ Agent::Agent(ReceivedMessage& message) : DependencyManager::set(); DependencyManager::set(); - + + // Needed to ensure the creation of the DebugDraw instance on the main thread DebugDraw::getInstance(); diff --git a/assignment-client/src/scripts/EntityScriptServer.cpp b/assignment-client/src/scripts/EntityScriptServer.cpp index e8ea14f399..e7433e7c05 100644 --- a/assignment-client/src/scripts/EntityScriptServer.cpp +++ b/assignment-client/src/scripts/EntityScriptServer.cpp @@ -68,6 +68,7 @@ EntityScriptServer::EntityScriptServer(ReceivedMessage& message) : ThreadedAssig DependencyManager::set(); DependencyManager::set(ScriptEngine::ENTITY_SERVER_SCRIPT); + // Needed to ensure the creation of the DebugDraw instance on the main thread DebugDraw::getInstance(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); From 79cf242fc93dfd9121c4e8f6472a42124747fd23 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 12 Jul 2017 10:51:14 -0700 Subject: [PATCH 0901/1049] Make far clip plane distance equal to main camera's --- interface/src/SecondaryCamera.h | 2 +- scripts/system/spectatorCamera.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/SecondaryCamera.h b/interface/src/SecondaryCamera.h index ac82290211..14e848e578 100644 --- a/interface/src/SecondaryCamera.h +++ b/interface/src/SecondaryCamera.h @@ -42,7 +42,7 @@ public: glm::quat orientation{}; float vFoV{ 45.0f }; float nearClipPlaneDistance{ 0.1f }; - float farClipPlaneDistance{ 100.0f }; + float farClipPlaneDistance{ 16513.0f }; SecondaryCameraJobConfig() : render::Task::Config(false) {} signals: void dirty(); diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index 661e40cdeb..d462e13c56 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -63,7 +63,7 @@ var cameraIsDynamic = false; var vFoV = 45.0; var nearClipPlaneDistance = 0.1; - var farClipPlaneDistance = 100.0; + var farClipPlaneDistance = 16513.0; var cameraRotation; var cameraPosition; var glassPaneWidth = 0.16; From 0e9f8cc103b5c8e2684bf057acf9bee12041d661 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 12 Jul 2017 10:27:35 -0700 Subject: [PATCH 0902/1049] Still trying to address QML crashes --- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 85 +++++++++++++-------- 1 file changed, 52 insertions(+), 33 deletions(-) diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index 9df727424f..34865ea058 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -264,9 +264,6 @@ QNetworkAccessManager* QmlNetworkAccessManagerFactory::create(QObject* parent) { return new QmlNetworkAccessManager(parent); } -static QQmlEngine* globalEngine { nullptr }; -static size_t globalEngineRefCount { 0 }; - QString getEventBridgeJavascript() { // FIXME: Refactor with similar code in RenderableWebEntityItem QString javaScriptToInject; @@ -300,9 +297,44 @@ private: }; +#define SINGLE_QML_ENGINE 0 + +#if SINGLE_QML_ENGINE +static QQmlEngine* globalEngine{ nullptr }; +static size_t globalEngineRefCount{ 0 }; +#endif + +void initializeQmlEngine(QQmlEngine* engine, QQuickWindow* window) { + engine->setNetworkAccessManagerFactory(new QmlNetworkAccessManagerFactory); + auto importList = engine->importPathList(); + importList.insert(importList.begin(), PathUtils::resourcesPath()); + engine->setImportPathList(importList); + for (const auto& path : importList) { + qDebug() << path; + } + + if (!engine->incubationController()) { + engine->setIncubationController(window->incubationController()); + } + auto rootContext = engine->rootContext(); + rootContext->setContextProperty("GL", ::getGLContextData()); + rootContext->setContextProperty("urlHandler", new UrlHandler()); + rootContext->setContextProperty("resourceDirectoryUrl", QUrl::fromLocalFile(PathUtils::resourcesPath())); + rootContext->setContextProperty("pathToFonts", "../../"); + rootContext->setContextProperty("ApplicationInterface", qApp); + auto javaScriptToInject = getEventBridgeJavascript(); + if (!javaScriptToInject.isEmpty()) { + rootContext->setContextProperty("eventBridgeJavaScriptToInject", QVariant(javaScriptToInject)); + } + rootContext->setContextProperty("FileTypeProfile", new FileTypeProfile(rootContext)); + rootContext->setContextProperty("HFWebEngineProfile", new HFWebEngineProfile(rootContext)); + rootContext->setContextProperty("HFTabletWebEngineProfile", new HFTabletWebEngineProfile(rootContext)); +} QQmlEngine* acquireEngine(QQuickWindow* window) { Q_ASSERT(QThread::currentThread() == qApp->thread()); + + QQmlEngine* result = nullptr; if (QThread::currentThread() != qApp->thread()) { qCWarning(uiLogging) << "Cannot acquire QML engine on any thread but the main thread"; } @@ -311,47 +343,34 @@ QQmlEngine* acquireEngine(QQuickWindow* window) { qmlRegisterType("Hifi", 1, 0, "SoundEffect"); }); + +#if SINGLE_QML_ENGINE if (!globalEngine) { Q_ASSERT(0 == globalEngineRefCount); globalEngine = new QQmlEngine(); - globalEngine->setNetworkAccessManagerFactory(new QmlNetworkAccessManagerFactory); - - auto importList = globalEngine->importPathList(); - importList.insert(importList.begin(), PathUtils::resourcesPath()); - globalEngine->setImportPathList(importList); - for (const auto& path : importList) { - qDebug() << path; - } - - if (!globalEngine->incubationController()) { - globalEngine->setIncubationController(window->incubationController()); - } - auto rootContext = globalEngine->rootContext(); - rootContext->setContextProperty("GL", ::getGLContextData()); - rootContext->setContextProperty("urlHandler", new UrlHandler()); - rootContext->setContextProperty("resourceDirectoryUrl", QUrl::fromLocalFile(PathUtils::resourcesPath())); - rootContext->setContextProperty("pathToFonts", "../../"); - rootContext->setContextProperty("ApplicationInterface", qApp); - auto javaScriptToInject = getEventBridgeJavascript(); - if (!javaScriptToInject.isEmpty()) { - rootContext->setContextProperty("eventBridgeJavaScriptToInject", QVariant(javaScriptToInject)); - } - rootContext->setContextProperty("FileTypeProfile", new FileTypeProfile(rootContext)); - rootContext->setContextProperty("HFWebEngineProfile", new HFWebEngineProfile(rootContext)); - rootContext->setContextProperty("HFTabletWebEngineProfile", new HFTabletWebEngineProfile(rootContext)); + initializeQmlEngine(result, window); + ++globalEngineRefCount; } + result = globalEngine; +#else + result = new QQmlEngine(); + initializeQmlEngine(result, window); +#endif - ++globalEngineRefCount; - return globalEngine; + return result; } -void releaseEngine() { +void releaseEngine(QQmlEngine* engine) { Q_ASSERT(QThread::currentThread() == qApp->thread()); +#if SINGLE_QML_ENGINE Q_ASSERT(0 != globalEngineRefCount); if (0 == --globalEngineRefCount) { globalEngine->deleteLater(); globalEngine = nullptr; } +#else + engine->deleteLater(); +#endif } void OffscreenQmlSurface::cleanup() { @@ -456,11 +475,11 @@ OffscreenQmlSurface::~OffscreenQmlSurface() { QObject::disconnect(qApp); cleanup(); - + auto engine = _qmlContext->engine(); _canvas->deleteLater(); _rootItem->deleteLater(); _quickWindow->deleteLater(); - releaseEngine(); + releaseEngine(engine); } void OffscreenQmlSurface::onAboutToQuit() { From 364600c447340998aead63f93caeef45d735fb15 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 12 Jul 2017 11:12:47 -0700 Subject: [PATCH 0903/1049] fix rendering of simulation ownership debug icons --- interface/src/Menu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 8b616c3029..c7223be208 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -680,7 +680,7 @@ Menu::Menu() { // Developer > Physics >>> MenuWrapper* physicsOptionsMenu = developerMenu->addMenu("Physics"); { - auto drawStatusConfig = qApp->getRenderEngine()->getConfiguration()->getConfig(); + auto drawStatusConfig = qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.DrawStatus"); addCheckableActionToQMenuAndActionHash(physicsOptionsMenu, MenuOption::PhysicsShowOwned, 0, false, drawStatusConfig, SLOT(setShowNetwork(bool))); } From 6b969bc39d784cb142f7ddb2ebbda9df1f12c562 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Tue, 11 Jul 2017 13:05:07 -0700 Subject: [PATCH 0904/1049] added code to record total number of ATP/HTTP/File bytes downloaded during session Update FileResourceRequest.cpp Update AssetResourceRequest.cpp Update FileResourceRequest.cpp Update HTTPResourceRequest.cpp Update AssetResourceRequest.cpp Update AssetResourceRequest.cpp Update FileResourceRequest.cpp Update AssetResourceRequest.cpp Update AssetResourceRequest.cpp Update FileResourceRequest.cpp Update FileResourceRequest.cpp Update HTTPResourceRequest.cpp Update FileResourceRequest.cpp Update FileResourceRequest.cpp Update Application.cpp Update Application.cpp --- interface/src/Application.cpp | 8 ++++++++ libraries/networking/src/AssetResourceRequest.cpp | 4 +++- libraries/networking/src/FileResourceRequest.cpp | 5 ++++- libraries/networking/src/HTTPResourceRequest.cpp | 5 +++++ libraries/networking/src/ResourceRequest.h | 3 +++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ddd1870723..07c8a928c5 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1466,6 +1466,14 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo properties["atp_mapping_requests"] = atpMappingRequests; properties["throttled"] = _displayPlugin ? _displayPlugin->isThrottled() : false; + + QJsonObject bytesDownloaded; + bytesDownloaded["atp"] = statTracker->getStat(STAT_ATP_RESOURCE_TOTAL_BYTES).toInt(); + bytesDownloaded["http"] = statTracker->getStat(STAT_HTTP_RESOURCE_TOTAL_BYTES).toInt(); + bytesDownloaded["file"] = statTracker->getStat(STAT_FILE_RESOURCE_TOTAL_BYTES).toInt(); + bytesDownloaded["total"] = bytesDownloaded["atp"].toInt() + bytesDownloaded["http"].toInt() + + bytesDownloaded["file"].toInt(); + properties["bytesDownloaded"] = bytesDownloaded; auto myAvatar = getMyAvatar(); glm::vec3 avatarPosition = myAvatar->getPosition(); diff --git a/libraries/networking/src/AssetResourceRequest.cpp b/libraries/networking/src/AssetResourceRequest.cpp index f4a3b20fd5..a41283cc0d 100644 --- a/libraries/networking/src/AssetResourceRequest.cpp +++ b/libraries/networking/src/AssetResourceRequest.cpp @@ -187,6 +187,9 @@ void AssetResourceRequest::onDownloadProgress(qint64 bytesReceived, qint64 bytes emit progress(bytesReceived, bytesTotal); auto now = p_high_resolution_clock::now(); + + // Recording ATP bytes downloaded in stats + DependencyManager::get()->updateStat(STAT_ATP_RESOURCE_TOTAL_BYTES, bytesReceived); // if we haven't received the full asset check if it is time to output progress to log // we do so every X seconds to assist with ATP download tracking @@ -201,6 +204,5 @@ void AssetResourceRequest::onDownloadProgress(qint64 bytesReceived, qint64 bytes _lastProgressDebug = now; } - } diff --git a/libraries/networking/src/FileResourceRequest.cpp b/libraries/networking/src/FileResourceRequest.cpp index d0e2721679..26857716e1 100644 --- a/libraries/networking/src/FileResourceRequest.cpp +++ b/libraries/networking/src/FileResourceRequest.cpp @@ -20,7 +20,7 @@ void FileResourceRequest::doSend() { auto statTracker = DependencyManager::get(); statTracker->incrementStat(STAT_FILE_REQUEST_STARTED); - + int fileSize = 0; QString filename = _url.toLocalFile(); // sometimes on windows, we see the toLocalFile() return null, @@ -53,6 +53,7 @@ void FileResourceRequest::doSend() { } _result = ResourceRequest::Success; + fileSize = file.size(); } } else { @@ -68,6 +69,8 @@ void FileResourceRequest::doSend() { if (_result == ResourceRequest::Success) { statTracker->incrementStat(STAT_FILE_REQUEST_SUCCESS); + // Recording FILE bytes downloaded in stats + statTracker->updateStat(STAT_FILE_RESOURCE_TOTAL_BYTES,fileSize); } else { statTracker->incrementStat(STAT_FILE_REQUEST_FAILED); } diff --git a/libraries/networking/src/HTTPResourceRequest.cpp b/libraries/networking/src/HTTPResourceRequest.cpp index 266ea429a0..c6d0370a70 100644 --- a/libraries/networking/src/HTTPResourceRequest.cpp +++ b/libraries/networking/src/HTTPResourceRequest.cpp @@ -201,6 +201,11 @@ void HTTPResourceRequest::onDownloadProgress(qint64 bytesReceived, qint64 bytesT _sendTimer->start(); emit progress(bytesReceived, bytesTotal); + + // Recording HTTP bytes downloaded in stats + DependencyManager::get()->updateStat(STAT_HTTP_RESOURCE_TOTAL_BYTES, bytesReceived); + + } void HTTPResourceRequest::onTimeout() { diff --git a/libraries/networking/src/ResourceRequest.h b/libraries/networking/src/ResourceRequest.h index 39bcb3fe93..3ee86025a2 100644 --- a/libraries/networking/src/ResourceRequest.h +++ b/libraries/networking/src/ResourceRequest.h @@ -33,6 +33,9 @@ const QString STAT_HTTP_REQUEST_CACHE = "CacheHTTPRequest"; const QString STAT_ATP_MAPPING_REQUEST_STARTED = "StartedATPMappingRequest"; const QString STAT_ATP_MAPPING_REQUEST_FAILED = "FailedATPMappingRequest"; const QString STAT_ATP_MAPPING_REQUEST_SUCCESS = "SuccessfulATPMappingRequest"; +const QString STAT_HTTP_RESOURCE_TOTAL_BYTES = "HTTPBytesDownloaded"; +const QString STAT_ATP_RESOURCE_TOTAL_BYTES = "ATPBytesDownloaded"; +const QString STAT_FILE_RESOURCE_TOTAL_BYTES = "FILEBytesDownloaded"; class ResourceRequest : public QObject { Q_OBJECT From 9fe6fbd811639b6b2de8f3065f37756347a89792 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 12 Jul 2017 11:37:18 -0700 Subject: [PATCH 0905/1049] View frustums are strange. --- interface/src/SecondaryCamera.h | 2 +- scripts/system/spectatorCamera.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/SecondaryCamera.h b/interface/src/SecondaryCamera.h index 14e848e578..0fa24a7637 100644 --- a/interface/src/SecondaryCamera.h +++ b/interface/src/SecondaryCamera.h @@ -42,7 +42,7 @@ public: glm::quat orientation{}; float vFoV{ 45.0f }; float nearClipPlaneDistance{ 0.1f }; - float farClipPlaneDistance{ 16513.0f }; + float farClipPlaneDistance{ 16384.0f }; SecondaryCameraJobConfig() : render::Task::Config(false) {} signals: void dirty(); diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index d462e13c56..bd090e27ca 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -63,7 +63,7 @@ var cameraIsDynamic = false; var vFoV = 45.0; var nearClipPlaneDistance = 0.1; - var farClipPlaneDistance = 16513.0; + var farClipPlaneDistance = 16384.0; var cameraRotation; var cameraPosition; var glassPaneWidth = 0.16; From bd4fe416b4335e8eb6b5ae0280913646d91496c1 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 12 Jul 2017 12:04:37 -0700 Subject: [PATCH 0906/1049] Cleanup; no magic numbers for default cam params --- interface/src/SecondaryCamera.h | 6 +++--- scripts/system/spectatorCamera.js | 12 +----------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/interface/src/SecondaryCamera.h b/interface/src/SecondaryCamera.h index 0fa24a7637..0941959c0a 100644 --- a/interface/src/SecondaryCamera.h +++ b/interface/src/SecondaryCamera.h @@ -40,9 +40,9 @@ public: QUuid attachedEntityId{}; glm::vec3 position{}; glm::quat orientation{}; - float vFoV{ 45.0f }; - float nearClipPlaneDistance{ 0.1f }; - float farClipPlaneDistance{ 16384.0f }; + float vFoV{ DEFAULT_FIELD_OF_VIEW_DEGREES }; + float nearClipPlaneDistance{ DEFAULT_NEAR_CLIP }; + float farClipPlaneDistance{ DEFAULT_FAR_CLIP }; SecondaryCameraJobConfig() : render::Task::Config(false) {} signals: void dirty(); diff --git a/scripts/system/spectatorCamera.js b/scripts/system/spectatorCamera.js index bd090e27ca..bc975f59dd 100644 --- a/scripts/system/spectatorCamera.js +++ b/scripts/system/spectatorCamera.js @@ -46,11 +46,7 @@ // -Far clip plane distance // -viewFinderOverlay: The in-world overlay that displays the spectator camera's view. // -camera: The in-world entity that corresponds to the spectator camera. - // -cameraIsDynamic: "false" for now while we figure out why dynamic, parented overlays - // drift with respect to their parent. - // -vFoV: The vertical field of view of the spectator camera. - // -nearClipPlaneDistance: The near clip plane distance of the spectator camera (aka "camera"). - // -farClipPlaneDistance: The far clip plane distance of the spectator camera. + // -cameraIsDynamic: "false" for now - maybe it shouldn't be? False means that the camera won't drift when you let go... // -cameraRotation: The rotation of the spectator camera. // -cameraPosition: The position of the spectator camera. // -glassPaneWidth: The width of the glass pane above the spectator camera that holds the viewFinderOverlay. @@ -61,9 +57,6 @@ var viewFinderOverlay = false; var camera = false; var cameraIsDynamic = false; - var vFoV = 45.0; - var nearClipPlaneDistance = 0.1; - var farClipPlaneDistance = 16384.0; var cameraRotation; var cameraPosition; var glassPaneWidth = 0.16; @@ -75,9 +68,6 @@ // Sets the special texture size based on the window it is displayed in, which doesn't include the menu bar spectatorCameraConfig.enableSecondaryCameraRenderConfigs(true); spectatorCameraConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); - spectatorCameraConfig.vFoV = vFoV; - spectatorCameraConfig.nearClipPlaneDistance = nearClipPlaneDistance; - spectatorCameraConfig.farClipPlaneDistance = farClipPlaneDistance; cameraRotation = MyAvatar.orientation, cameraPosition = inFrontOf(1, Vec3.sum(MyAvatar.position, { x: 0, y: 0.3, z: 0 })); camera = Entities.addEntity({ "angularDamping": 1, From ddf2312dc6db21a13f8f260b242291d7d07fd80c Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 12 Jul 2017 12:45:52 -0700 Subject: [PATCH 0907/1049] code review --- interface/src/avatar/AvatarManager.h | 2 +- libraries/audio/src/AudioInjector.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index d6f140ea74..30801807d6 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -22,10 +22,10 @@ #include #include #include +#include #include "AvatarMotionState.h" #include "MyAvatar.h" -#include "AudioInjector.h" class AvatarManager : public AvatarHashMap { diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index 1b16a28546..9276461783 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -422,7 +422,7 @@ void AudioInjector::triggerDeleteAfterFinish() { AudioInjectorPointer AudioInjector::playSound(SharedSoundPointer sound, const float volume, const float stretchFactor, const glm::vec3 position) { if (!sound || !sound->isReady()) { - return AudioInjectorPointer(nullptr); + return AudioInjectorPointer(); } AudioInjectorOptions options; From e07b067d7b0be083bb8301005d44cb9c01563f8c Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 12 Jul 2017 21:09:54 +0100 Subject: [PATCH 0908/1049] fixed tablet getting in the wrong state --- libraries/ui/src/ui/TabletScriptingInterface.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index 857cae15cc..76f290f17e 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -227,7 +227,6 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { // forward qml surface events to interface js connect(tabletRootWindow, &QmlWindowClass::fromQml, this, &TabletProxy::fromQml); } else { - _state = State::Home; removeButtonsFromToolbar(); addButtonsToHomeScreen(); emit screenChanged(QVariant("Home"), QVariant(TABLET_SOURCE_URL)); From 06618e81d01766270010ac448763f4461b498977 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 12 Jul 2017 13:14:32 -0700 Subject: [PATCH 0909/1049] remove unneeded <> --- libraries/audio/src/AudioInjector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index 9276461783..ee57e42e77 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -465,7 +465,7 @@ AudioInjectorPointer AudioInjector::playSoundAndDelete(const QByteArray& buffer, AudioInjectorPointer AudioInjector::playSound(const QByteArray& buffer, const AudioInjectorOptions options) { - AudioInjectorPointer injector = AudioInjectorPointer::create<>(buffer, options); + AudioInjectorPointer injector = AudioInjectorPointer::create(buffer, options); if (!injector->inject(&AudioInjectorManager::threadInjector)) { qWarning() << "AudioInjector::playSound failed to thread injector"; From 43782a29c78d8504e1104dbf853bd73777bcda49 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Wed, 12 Jul 2017 22:04:58 +0100 Subject: [PATCH 0910/1049] Avatar Scaler - WIP --- .../qml/dialogs/preferences/Section.qml | 6 ++ .../preferences/SpinnerSliderPreference.qml | 64 +++++++++++++++++++ .../tabletWindows/preferences/Section.qml | 5 ++ interface/src/ui/PreferencesDialog.cpp | 36 ++++++----- libraries/shared/src/Preferences.h | 10 +++ 5 files changed, 104 insertions(+), 17 deletions(-) create mode 100644 interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml diff --git a/interface/resources/qml/dialogs/preferences/Section.qml b/interface/resources/qml/dialogs/preferences/Section.qml index a813dc6b5f..61b3c7530b 100644 --- a/interface/resources/qml/dialogs/preferences/Section.qml +++ b/interface/resources/qml/dialogs/preferences/Section.qml @@ -72,6 +72,7 @@ Preference { property var avatarBuilder: Component { AvatarPreference { } } property var buttonBuilder: Component { ButtonPreference { } } property var comboBoxBuilder: Component { ComboBoxPreference { } } + property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } property var preferences: [] property int checkBoxCount: 0 @@ -128,6 +129,11 @@ Preference { checkBoxCount = 0; builder = comboBoxBuilder; break; + + case Preference.SpinnerSlider: + checkBoxCount = 0; + builder = spinnerSliderBuilder; + break; }; if (builder) { diff --git a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml new file mode 100644 index 0000000000..e9013bc17a --- /dev/null +++ b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml @@ -0,0 +1,64 @@ +// +// SpinBoxPreference.qml +// +// Created by Bradley Austin Davis on 18 Jan 2016 +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 + +import "../../dialogs" +import "../../controls-uit" + +Preference { + id: root + property alias slider: slider + height: control.height + hifi.dimensions.controlInterlineHeight + + Component.onCompleted: { + slider.value = preference.value; + } + + function save() { + preference.value = slider.value; + preference.save(); + } + + Item { + id: control + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + height: Math.max(labelText.height, slider.height) + + Label { + id: labelText + text: root.label + ":" + colorScheme: hifi.colorSchemes.dark + anchors { + left: parent.left + right: slider.left + rightMargin: hifi.dimensions.labelPadding + verticalCenter: parent.verticalCenter + } + horizontalAlignment: Text.AlignRight + wrapMode: Text.Wrap + } + + Slider { + id: slider + value: preference.value + width: 130 + anchors { + right: parent.right + verticalCenter: parent.verticalCenter + } + colorScheme: hifi.colorSchemes.dark + } + } +} diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml index 9dd0956000..25279bb6bf 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml @@ -81,6 +81,7 @@ Preference { property var avatarBuilder: Component { AvatarPreference { } } property var buttonBuilder: Component { ButtonPreference { } } property var comboBoxBuilder: Component { ComboBoxPreference { } } + property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } property var preferences: [] property int checkBoxCount: 0 @@ -143,6 +144,10 @@ Preference { //to be not overlapped when drop down is active zpos = root.z + 1000 - itemNum break; + case Preference.SpinnerSlider: + checkBoxCount = 0; + builder = spinnerSliderBuilder; + break; }; if (builder) { diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 767c122bb6..9c1b3e8c70 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -181,16 +181,18 @@ void setupPreferences() { preference->setStep(1); preferences->addPreference(preference); } - { - auto getter = [=]()->float { return myAvatar->getUniformScale(); }; - auto setter = [=](float value) { myAvatar->setTargetScale(value); }; - auto preference = new SpinnerPreference(AVATAR_TUNING, "Avatar scale (default is 1.0)", getter, setter); - preference->setMin(0.01f); - preference->setMax(99.9f); - preference->setDecimals(2); - preference->setStep(1); - preferences->addPreference(preference); - } + { + auto getter = [=]()->float { return myAvatar->getUniformScale(); }; + auto setter = [=](float value) { myAvatar->setTargetScale(value); }; + + auto scaleSpinner = new SpinnerSliderPreference(AVATAR_TUNING, "Avatar Scale", getter, setter); + scaleSpinner->setMin(0.01f); + scaleSpinner->setMax(99.9f); + scaleSpinner->setDecimals(2); + scaleSpinner->setStep(1); + + preferences->addPreference(scaleSpinner); + } { auto getter = []()->float { return DependencyManager::get()->getEyeClosingThreshold(); }; auto setter = [](float value) { DependencyManager::get()->setEyeClosingThreshold(value); }; @@ -227,17 +229,17 @@ void setupPreferences() { preferences->addPreference(preference); } - static const QString AUDIO("Audio"); + static const QString AUDIO_BUFFERS("Audio Buffers"); { auto getter = []()->bool { return !DependencyManager::get()->getReceivedAudioStream().dynamicJitterBufferEnabled(); }; auto setter = [](bool value) { DependencyManager::get()->getReceivedAudioStream().setDynamicJitterBufferEnabled(!value); }; - auto preference = new CheckPreference(AUDIO, "Disable dynamic jitter buffer", getter, setter); + auto preference = new CheckPreference(AUDIO_BUFFERS, "Disable dynamic jitter buffer", getter, setter); preferences->addPreference(preference); } { auto getter = []()->float { return DependencyManager::get()->getReceivedAudioStream().getStaticJitterBufferFrames(); }; auto setter = [](float value) { DependencyManager::get()->getReceivedAudioStream().setStaticJitterBufferFrames(value); }; - auto preference = new SpinnerPreference(AUDIO, "Static jitter buffer frames", getter, setter); + auto preference = new SpinnerPreference(AUDIO_BUFFERS, "Static jitter buffer frames", getter, setter); preference->setMin(0); preference->setMax(2000); preference->setStep(1); @@ -246,13 +248,13 @@ void setupPreferences() { { auto getter = []()->bool { return !DependencyManager::get()->getOutputStarveDetectionEnabled(); }; auto setter = [](bool value) { DependencyManager::get()->setOutputStarveDetectionEnabled(!value); }; - auto preference = new CheckPreference(AUDIO, "Disable output starve detection", getter, setter); + auto preference = new CheckPreference(AUDIO_BUFFERS, "Disable output starve detection", getter, setter); preferences->addPreference(preference); } { auto getter = []()->float { return DependencyManager::get()->getOutputBufferSize(); }; auto setter = [](float value) { DependencyManager::get()->setOutputBufferSize(value); }; - auto preference = new SpinnerPreference(AUDIO, "Output buffer initial frames", getter, setter); + auto preference = new SpinnerPreference(AUDIO_BUFFERS, "Output buffer initial frames", getter, setter); preference->setMin(AudioClient::MIN_BUFFER_FRAMES); preference->setMax(AudioClient::MAX_BUFFER_FRAMES); preference->setStep(1); @@ -262,13 +264,13 @@ void setupPreferences() { { auto getter = []()->bool { return DependencyManager::get()->isSimulatingJitter(); }; auto setter = [](bool value) { return DependencyManager::get()->setIsSimulatingJitter(value); }; - auto preference = new CheckPreference(AUDIO, "Packet jitter simulator", getter, setter); + auto preference = new CheckPreference(AUDIO_BUFFERS, "Packet jitter simulator", getter, setter); preferences->addPreference(preference); } { auto getter = []()->float { return DependencyManager::get()->getGateThreshold(); }; auto setter = [](float value) { return DependencyManager::get()->setGateThreshold(value); }; - auto preference = new SpinnerPreference(AUDIO, "Packet throttle threshold", getter, setter); + auto preference = new SpinnerPreference(AUDIO_BUFFERS, "Packet throttle threshold", getter, setter); preference->setMin(1); preference->setMax(200); preference->setStep(1); diff --git a/libraries/shared/src/Preferences.h b/libraries/shared/src/Preferences.h index f1915a9d6a..271df58951 100644 --- a/libraries/shared/src/Preferences.h +++ b/libraries/shared/src/Preferences.h @@ -52,6 +52,7 @@ public: Browsable, Slider, Spinner, + SpinnerSlider, Checkbox, Button, ComboBox, @@ -254,6 +255,15 @@ public: Type getType() override { return Spinner; } }; +class SpinnerSliderPreference : public FloatPreference { + Q_OBJECT +public: + SpinnerSliderPreference(const QString& category, const QString& name, Getter getter, Setter setter) + : FloatPreference(category, name, getter, setter) { } + + Type getType() override { return SpinnerSlider; } +}; + class IntSpinnerPreference : public IntPreference { Q_OBJECT public: From 63b0e7083361aa44cbb6853f6716ceef5996c9cc Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 12 Jul 2017 14:14:01 -0700 Subject: [PATCH 0911/1049] Prepare for marketplace submission --- .../spectator-camera/spectator-camera.fbx | Bin 0 -> 316956 bytes .../spectator-camera}/spectatorCamera.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 unpublishedScripts/marketplace/spectator-camera/spectator-camera.fbx rename {scripts/system => unpublishedScripts/marketplace/spectator-camera}/spectatorCamera.js (99%) diff --git a/unpublishedScripts/marketplace/spectator-camera/spectator-camera.fbx b/unpublishedScripts/marketplace/spectator-camera/spectator-camera.fbx new file mode 100644 index 0000000000000000000000000000000000000000..b3940be141cd81ba31fa993e7c76c085c8e33fc5 GIT binary patch literal 316956 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 #PYNl1qNu7+xPH)k>f_ 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 BDNq0a literal 0 HcmV?d00001 diff --git a/scripts/system/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js similarity index 99% rename from scripts/system/spectatorCamera.js rename to unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index bc975f59dd..411a43a628 100644 --- a/scripts/system/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -75,7 +75,7 @@ "collidesWith": "static,dynamic,kinematic,", "collisionMask": 7, "dynamic": cameraIsDynamic, - "modelURL": "http://hifi-content.s3.amazonaws.com/alan/dev/spectator-camera.fbx?7", + "modelURL": Script.resolvePath("spectator-camera.fbx"), "registrationPoint": { "x": 0.53, "y": 0.545, From d37789234dadd5944d664ca25a1022605bebe98c Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 12 Jul 2017 14:24:23 -0700 Subject: [PATCH 0912/1049] Remove from default scripts --- scripts/defaultScripts.js | 1 - .../marketplace/spectator-camera/spectatorCamera.js | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index 4902f66a51..2270118861 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -25,7 +25,6 @@ var DEFAULT_SCRIPTS_COMBINED = [ "system/tablet-goto.js", "system/marketplaces/marketplaces.js", "system/edit.js", - "system/spectatorCamera.js", "system/notifications.js", "system/dialTone.js", "system/firstPersonHMD.js", diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index 411a43a628..283d502820 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -157,7 +157,7 @@ if ((isHMDMode || showSpectatorInDesktop) && !isShuttingDown) { button = tablet.addButton({ text: buttonName, - icon: "icons/tablet-icons/spectator-i.svg" + icon: Script.resourcesPath() + "icons/tablet-icons/spectator-i.svg" }); button.clicked.connect(onTabletButtonClicked); } @@ -383,7 +383,7 @@ // Relevant Variables: // -SPECTATOR_CAMERA_QML_SOURCE: The path to the SpectatorCamera QML // -onSpectatorCameraScreen: true/false depending on whether we're looking at the spectator camera app. - var SPECTATOR_CAMERA_QML_SOURCE = "../SpectatorCamera.qml"; + var SPECTATOR_CAMERA_QML_SOURCE = Script.resourcesPath() + "qml/hifi/SpectatorCamera.qml"; var onSpectatorCameraScreen = false; function onTabletButtonClicked() { if (!tablet) { From e6f7457d0ce18a97ae812303d5c02d049694f94b Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 12 Jul 2017 15:17:23 -0700 Subject: [PATCH 0913/1049] Fixes --- .../marketplace/spectator-camera/spectatorCamera.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index 283d502820..28d57528cd 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -157,7 +157,7 @@ if ((isHMDMode || showSpectatorInDesktop) && !isShuttingDown) { button = tablet.addButton({ text: buttonName, - icon: Script.resourcesPath() + "icons/tablet-icons/spectator-i.svg" + icon: "icons/tablet-icons/spectator-i.svg" }); button.clicked.connect(onTabletButtonClicked); } @@ -344,9 +344,9 @@ function registerButtonMappings() { var VRDevices = Controller.getDeviceNames().toString(); if (VRDevices) { - if (VRDevices.includes("Vive")) { + if (VRDevices.indexOf("Vive") != -1) { controllerType = "Vive"; - } else if (VRDevices.includes("OculusTouch")) { + } else if (VRDevices.indexOf("OculusTouch") != -1) { controllerType = "OculusTouch"; } else { sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); From 8294df8b76f02d5678ea3d3d7f8f6be832b73bf4 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 12 Jul 2017 15:37:06 -0700 Subject: [PATCH 0914/1049] != to !== --- .../marketplace/spectator-camera/spectatorCamera.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index 28d57528cd..a318f933fe 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -344,9 +344,9 @@ function registerButtonMappings() { var VRDevices = Controller.getDeviceNames().toString(); if (VRDevices) { - if (VRDevices.indexOf("Vive") != -1) { + if (VRDevices.indexOf("Vive") !== -1) { controllerType = "Vive"; - } else if (VRDevices.indexOf("OculusTouch") != -1) { + } else if (VRDevices.indexOf("OculusTouch") !== -1) { controllerType = "OculusTouch"; } else { sendToQml({ method: 'updateControllerMappingCheckbox', setting: switchViewFromController, controller: controllerType }); From 5f50f290603beb56b73a5e394b26d438eae250c1 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 12 Jul 2017 15:56:39 -0700 Subject: [PATCH 0915/1049] New model --- .../spectator-camera/spectator-camera.fbx | Bin 316956 -> 809084 bytes .../spectator-camera/spectatorCamera.js | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unpublishedScripts/marketplace/spectator-camera/spectator-camera.fbx b/unpublishedScripts/marketplace/spectator-camera/spectator-camera.fbx index b3940be141cd81ba31fa993e7c76c085c8e33fc5..6bc8d236799564c61bc3557c271276b3765c3c84 100644 GIT binary patch literal 809084 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%0Aq6^<||5D_d6C*P;!K4V4QGn8Po@I{oe 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

tt@yW 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

`2{pEQ5TfD_@O%DoXF1 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 z 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�U1itJT6s# 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%0AiZl$ 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 #PYNl1qNu7+xPH)k>f_ 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 BDNq0a diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index a318f933fe..b40fe7f8ba 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -77,9 +77,9 @@ "dynamic": cameraIsDynamic, "modelURL": Script.resolvePath("spectator-camera.fbx"), "registrationPoint": { - "x": 0.53, + "x": 0.56, "y": 0.545, - "z": 0.16 + "z": 0.23 }, "rotation": cameraRotation, "position": cameraPosition, From d6ac67d2215db06f6d64a05c8a0800342bdd63e7 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 12 Jul 2017 16:09:30 -0700 Subject: [PATCH 0916/1049] Added option for clean install --- cmake/templates/NSIS.template.in | 80 +++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 26 deletions(-) diff --git a/cmake/templates/NSIS.template.in b/cmake/templates/NSIS.template.in index 710fd81316..f279bd8a71 100644 --- a/cmake/templates/NSIS.template.in +++ b/cmake/templates/NSIS.template.in @@ -49,7 +49,7 @@ Var STR_CONTAINS_VAR_3 Var STR_CONTAINS_VAR_4 Var STR_RETURN_VAR - + Function StrContains Exch $STR_NEEDLE Exch 1 @@ -267,6 +267,7 @@ Var substringResult "${SecName}_unchanged:" !macroend + ;--- End of Add/Remove macros --- ;-------------------------------- @@ -438,6 +439,7 @@ Var DesktopServerCheckbox Var ServerStartupCheckbox Var LaunchServerNowCheckbox Var LaunchClientNowCheckbox +Var CleanInstallCheckbox Var CurrentOffset Var OffsetUnits Var CopyFromProductionCheckbox @@ -479,23 +481,14 @@ Function PostInstallOptionsPage ; set the checkbox state depending on what is present in the registry !insertmacro SetPostInstallOption $DesktopClientCheckbox @CLIENT_DESKTOP_SHORTCUT_REG_KEY@ ${BST_CHECKED} ${EndIf} - + ${If} ${SectionIsSelected} ${@SERVER_COMPONENT_NAME@} ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Create a desktop shortcut for @CONSOLE_HF_SHORTCUT_NAME@" Pop $DesktopServerCheckbox + IntOp $CurrentOffset $CurrentOffset + 15 ; set the checkbox state depending on what is present in the registry !insertmacro SetPostInstallOption $DesktopServerCheckbox @CONSOLE_DESKTOP_SHORTCUT_REG_KEY@ ${BST_UNCHECKED} - - IntOp $CurrentOffset $CurrentOffset + 15 - - ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @CONSOLE_HF_SHORTCUT_NAME@ on startup" - Pop $ServerStartupCheckbox - - ; set the checkbox state depending on what is present in the registry - !insertmacro SetPostInstallOption $ServerStartupCheckbox @CONSOLE_STARTUP_REG_KEY@ ${BST_CHECKED} - - IntOp $CurrentOffset $CurrentOffset + 15 ${EndIf} ${If} ${SectionIsSelected} ${@SERVER_COMPONENT_NAME@} @@ -513,15 +506,34 @@ Function PostInstallOptionsPage ${EndIf} ${If} ${SectionIsSelected} ${@CLIENT_COMPONENT_NAME@} - ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @INTERFACE_HF_SHORTCUT_NAME@ after install" - Pop $LaunchClientNowCheckbox - - ; set the checkbox state depending on what is present in the registry - !insertmacro SetPostInstallOption $LaunchClientNowCheckbox @CLIENT_LAUNCH_NOW_REG_KEY@ ${BST_CHECKED} - ${StrContains} $substringResult "/forceNoLaunchClient" $CMDLINE - ${IfNot} $substringResult == "" - ${NSD_SetState} $LaunchClientNowCheckbox ${BST_UNCHECKED} - ${EndIf} + ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @INTERFACE_HF_SHORTCUT_NAME@ after install" + Pop $LaunchClientNowCheckbox + IntOp $CurrentOffset $CurrentOffset + 30 + + ; set the checkbox state depending on what is present in the registry + !insertmacro SetPostInstallOption $LaunchClientNowCheckbox @CLIENT_LAUNCH_NOW_REG_KEY@ ${BST_CHECKED} + ${StrContains} $substringResult "/forceNoLaunchClient" $CMDLINE + ${IfNot} $substringResult == "" + ${NSD_SetState} $LaunchClientNowCheckbox ${BST_UNCHECKED} + ${EndIf} + ${EndIf} + + ${If} ${SectionIsSelected} ${@SERVER_COMPONENT_NAME@} + ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @CONSOLE_HF_SHORTCUT_NAME@ on startup" + Pop $ServerStartupCheckbox + IntOp $CurrentOffset $CurrentOffset + 15 + + ; set the checkbox state depending on what is present in the registry + !insertmacro SetPostInstallOption $ServerStartupCheckbox @CONSOLE_STARTUP_REG_KEY@ ${BST_CHECKED} + ${EndIf} + + ${If} ${SectionIsSelected} ${@CLIENT_COMPONENT_NAME@} + ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Perform a clean install (Delete older settings and content)" + Pop $CleanInstallCheckbox + IntOp $CurrentOffset $CurrentOffset + 15 + + ; not saving checkbox state in registry + !insertmacro SetPostInstallOption $CleanInstallCheckbox @@ ${BST_UNCHECKED} ${EndIf} ${If} @PR_BUILD@ == 1 @@ -543,7 +555,7 @@ Function PostInstallOptionsPage ${NSD_SetState} $CopyFromProductionCheckbox ${BST_CHECKED} ${EndIf} - + nsDialogs::Show FunctionEnd @@ -558,6 +570,7 @@ Var ServerStartupState Var LaunchServerNowState Var LaunchClientNowState Var CopyFromProductionState +Var CleanInstallState Function ReadPostInstallOptions ${If} ${SectionIsSelected} ${@CLIENT_COMPONENT_NAME@} @@ -579,13 +592,18 @@ Function ReadPostInstallOptions ${EndIf} ${If} ${SectionIsSelected} ${@SERVER_COMPONENT_NAME@} - ; check if we need to launch the server post-install - ${NSD_GetState} $LaunchServerNowCheckbox $LaunchServerNowState + ; check if we need to launch the server post-install + ${NSD_GetState} $LaunchServerNowCheckbox $LaunchServerNowState ${EndIf} ${If} ${SectionIsSelected} ${@CLIENT_COMPONENT_NAME@} - ; check if we need to launch the client post-install - ${NSD_GetState} $LaunchClientNowCheckbox $LaunchClientNowState + ; check if we need to launch the client post-install + ${NSD_GetState} $LaunchClientNowCheckbox $LaunchClientNowState + ${EndIf} + + ${If} ${SectionIsSelected} ${@CLIENT_COMPONENT_NAME@} + ; check if the user asked for a clean install + ${NSD_GetState} $CleanInstallCheckbox $CleanInstallState ${EndIf} FunctionEnd @@ -628,6 +646,15 @@ Function HandlePostInstallOptions !insertmacro WritePostInstallOption @CONSOLE_STARTUP_REG_KEY@ NO ${EndIf} ${EndIf} + + ${If} ${SectionIsSelected} ${@CLIENT_COMPONENT_NAME@} + ; check if the user asked for a clean install + ${If} $CleanInstallState == ${BST_CHECKED} + SetShellVarContext current + RMDir /r "$APPDATA\@BUILD_ORGANIZATION@" + RMDir /r "$LOCALAPPDATA\@BUILD_ORGANIZATION@" + ${EndIf} + ${EndIf} ${If} @PR_BUILD@ == 1 @@ -683,6 +710,7 @@ Function HandlePostInstallOptions ${EndIf} ${EndIf} + FunctionEnd ;-------------------------------- From b5a1c65622843244b56f59d7c45f75748b01b5f6 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 12 Jul 2017 16:10:20 -0700 Subject: [PATCH 0917/1049] New model, smaller filesize --- .../spectator-camera/spectator-camera.fbx | Bin 809084 -> 584652 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/unpublishedScripts/marketplace/spectator-camera/spectator-camera.fbx b/unpublishedScripts/marketplace/spectator-camera/spectator-camera.fbx index 6bc8d236799564c61bc3557c271276b3765c3c84..6584264c0d811231c4c14c8e857c3847ad4d8173 100644 GIT binary patch delta 10711 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
}v~w;#%nbe;OTAN!8&kmpXO zBr~Q0xwR!)czD}!Z;h42j5Qg>W&M2RTuifR`hDNG?_DPBD-yp%@3^jKH)0)=nz@1A zbO#cHPibaY64ltcLu%UsnO7C%G4k%TwRyO-4h)2Y{t;8})b6K7p!ODbQBBxn z?+*{Wn!;8`wx`ktb46qMZEbB5u7f3iZo|(si;#n9p1T&huVfC@iM=c zE+n}-edTM|N?oMqVz!{AOw)qhwC<^udtsx$KaCP42xbxozs|0@ui561m(w;8XBQ|S zn38x)mI8Y&mN=vSLP?vHi+j=7rM+n@+KYC-q8F;VUL^bgk9*3XRBunM(P+@2%y72w*9^G(Vk8%Uok;nlxc=V}Q?%ie?32y$Ms_^zRXKhFs+{FYNhd zzOHG^H1b^)+hR&d;u7Y}Z;W`Dd7c_nbaa@;VWrR6E@Z}$sS1@ezP+}c=JV!e&iS@s z^3;yGh2;3`^$l%pc+W>F;m2pS2b|IGQDSPHUi*YgH{UV(ZV=WTU)0dCr>H)<>{g3Y zc9NYZJwJpX5*9&3K{n~x-8BcV75b3T+13Yj8#&bAL=L9#kHbQRu!luo54uI^EFtvWzzpB$&#Of!|<{ zZKs}3>3&q*VOT#%p)ecGHy&S3H}8(0U_TWIK6jZ2l?cQ!;)t6|0b{(8;F=<|y#Ho% zOHQU+T85`*2P0tG(n1_u`ex5dm#gpCGOtAw16Y~k`zblik=-dl6K$M8Pc07B>%Ld7 zy>}w@Ds>tB9644M6eplG*lj2OY%c84Ddf0WI1b5tJ)c07%$oYh^Szo^9Me#weKtE`xeJK480XVWap_PBy)4LKHI8Pmnw7voc+_iBNqvuMEph@Q3#VTV1{xHH zpBU4{8vZG(dds{Q`=*iq`PDAVIMX1_qAXF&KnrL1Tg|$e&7?4Vf1wv)-L$w>?cL0A z;?J|YWD*?u!$7v>X}@dL!dV>@<>qq|Wb2_tnKj@JS>89EGDttSp{$)g$ZX+76$+Yu zJtm&_QRsbIXI$0wmn5>QJ*+L&UMz}ZB|4bJ^1N^Uk+sz7cyy9Kyc-}aN`5p!{|+b0 z%gMGc?{^##NKmotu5S}mr{#C+twO4YDYMay<0Uaovu@Xo8}g)I?G^PK*}Sc2h^a4Q z@CDs-k&zj49RWsx%POLWQ0Zi4LhP)Gh&U8@>4HVVMlkJpGT1U_6UB4E2j;uFSw0^t z4O&qhA5fq2@H|+bE%GQM1#?ez@SOOT%O~MPNsliK{FS`qO+_q9C3CF8SQ+Qm^Q11! zO~ElVK4V+7jh48x#?JD$`eCQ+XDJ0^txU#Lt~=W$E;aqdlr_39tZxUd{BmPz2$4#|;Ud}O1Ku7V*gtVW zflPfalX1$@`_QP)#t_l=n7}K8jF~+pgTBRGz42-1$GL(;FIjmFtZsRgfvAHK#A)<^ zx3w;cSb?fvv^h9I-lK7@H&I93rI=>>$ChhpDs$x`d6D32s7yd#rkC^cqK1j)VCsdA z*|jsOPQ1_K?eGf~vS~z8ygS2wI*K`q!*0r{w#{P0zsoWVszj|I=~WO2aT(--6~8H& zaEp=$xw*8Ke11@LbI7da`%*`fmFg^43(YJ@-Qg7LqE9F#>3XqgHkQI zHG@BDdgYH8p$7447(2LC;CXWStHWm5vprM8Q7?x%(HVy-*lnkRx3$d;IS`@=Q8D$; z8`}hL#)qY_^dU#z29BZurBabvi1GBqBmAD;}*#J@4s`B~FF zMRRZCav7ZLhbG3uq^?rljrP#IkIU1dtXLhrhlwqL4K4ZnETb_2YQ0l}1($Jo)FHzRos<{o_&;1qt( z(cy`iCON;rV}{a)r_lcx6qcOdIJz^a^iPyV!lcZ&iO57=?R#KvvaZP6yv?o<4DnDe zWZ7EQydlmmEl&%q85p@-Rg!lyyNxv_o{1^rZg^s->nK|pTuCJg(z;B#c03a|N40X< z-j;Sn9s_Zs2aC)P?`$F)?5uHaHW%6YeZe zQPK2_*z>-7G@iLGCZ@xkd#bI99#l5|xir|ijVRT96@^yvL%*#O#3$fIgW@TT>HM;U zSrLzRkJX!fYfOC4aya*J%kVErk#DmWQ9btij7%K%bwq!t$-8&&hGMBv*%Qqc;zn{d z#a&>Vckj@s_hd-PNQj8;Wc9&;BsqUqT>}rlxkH;PJ>X(-6Md%R9O|;w5vewsCA1-; z*nb}7I*;0Y*T1h>(mzbE%4Rw;ll(I~ujqYO#N#91zP)qo)1j5sOO;e&RloYFrTr?C zG58r<9el&Y!tPufL1)rS!W&`^N>pXTcBpB5Ja9BTGA-$$2cy8BsV{8(#v|2J6wjR2 z*}q>NJth)V;G*R%Okd<`m~{>^ab`SXNqxrzgGI2+8QU|wGWF~a(+K-$xBH?Y;SeLR zlk4w6{>xm2baf0hBx~;T;A&`uvv8WyOQH0RGsefnjlt7Q53dwYGhuTOJ}|^0=Hrvi zS6D+J>5mcn%a%EU>s5TOU)FO%CVn2}J%W|{qw5#zO)j6jr;wKFVfBbJt4}oFd}6v% z@TZN+tvpkBBxlYTPY(t)w0ZXiPPJOlX4qZFtcqR|?{Is>u~{VzA5JK=y2Sci)$O-Y zN$XlBhc#xu=zi#d)8Y#0hx416EHzC}F0p@5r=m?I{fEvH!)(4mlQ(0@nzt)d9+&sV zN1BJVmH8R{l>P2>f7kS&eghHLIV2wJ_4|cu_0py-E8X4j@P}VaaMhr1)*u=BEc!Jv zV|xBTP}j1*&U_EMcD+*mb45g*eOTj$QO7Ujgw$jkLvFPDY#WzQ;-52X^6s>+wW1YC zag9ECeP%4Sv(v4QBzCYJ=v(cUu=KOM#VxW7N2x1qoV2TtC+O>h#t1~Y=B}N!yLP;4 zjB)R8XsIgkV79sTRoMO>f23DttWqWOYPf^C&(+HtB3XBo=d?<>xB-&bHmgYQqyNF| z+VH;Sfi}DCWpr12E>kBf)BAQv zjS~NoZ&I|pHDGX3fWO3A9x|SAKR6d;TSvk zx%Wly22ne)^-4st{gJ47^ee@%b!wVn)&}cV?Ao7Zx{OOE||J zAsBHzatAp<10u`EDnk;%Y>fKvowj#28aEZ_YQ8fjR`n{|sEu_;ROO@}d9U@qXgc$_ zq|*2O+gRCN)6}Hp(oC9_qfM#hhEAKN4mxRSNlJ~GDIvMw0>YVU+RU^xv)q_6B{if{ zKtZ5YQ%h135=1N)L_}0JL7?C1^L_pP@-KXG4$pb+=f1D^b)Am4&VyY%K7{}hfV_>- z^&)3^jcDE*f!j07WD;Nbng!l=A^*K_IQ0s=27=4?%8ZTcQ8<+5>{!yT>M-_NMZ4K+Dv}2dX`yP=E%i{ee$G~7~6)_mR42KqTb+aMB>ATc^ByX)Xx!72TDnvT=@q}q5X3y! z{kY?4>|t|9bG|LOvb|inVB}+dEGl3D@A&gOdc-LDAOi%gRsg?eHL-=i>Sfgiq421@55|w< zg#Kq%)a_a>Da2w{@8grO1Y%v%2Pr=a@Wx5LR!|MzXd`Ou?6E|p`2Ev2dBS@u7O6L9 z*j5-I9Ex# z%}zPPyZLnMI$ICRwtzn~$5TMh;j)?GC_zIqg4STnX%b?kHJS+^d?b5p)1KG+(0H4?TB-%8E0Xn|x6rRDF^@fo+jnYEH5i~t;z(81}fZtYiRLm{m&P>0_u zq=908OTLD$z$BX#bC80N>4FR5@bqT- z4ejxj%2lmegICdjGA~VeoVF&we8aLZt-4>KJ;xsEm&NfrXNspiu0>XRx*U(u34x;w z9g7tl$1i(5li0IE*tY)Yid$90SJ?dg} zXa1g>K6`$xuB%?JaHAOPI5pI5Pj`Uc3_C@fReK1&RoyXp9Dwz^E4j!90;pv?*?*)o z4C;PHmDH^lM)5P6qLZ$TjBX+VW*25hPR7xEFh5o@pD#)b4!R{q^8{jMp{#zkeQkr}YT!TPCje)v6bAScN?JrY-#J+XV2{DK&`AS4mu@nv$`iXygd zU=G@9!WSfq3#y=-^joi{)DJugwAyjFL)g9AXBfoUDw!Q$+Jed;k(B@I;?(~N13cUO18w{`sZPoP;K#nV zed*&~tIw@bApGH=+yJu@K_ry11JP|oNh`g}}!8)VwI#pe0> zRLH7aqcO6Csi2TV{ldu1$ten(5VKxhtwmLHQNW@4A)lmuRKwiFZddU?kY{b7WH|YY z{832^yfj&kw~dNX`TeiR!6QbMI@7ZGJZ0v7`%gaJ#T(ZuHjqn$cwAIP z9}{17wJ|3o;yN)BR2=<}AY=7g>9Hcn&RI4trF!{#;aamx{{&bs=#Y(j4%;xD#c z7)e7?#iWX~huOAdR^LU@D9*(-y7>mH`U)MeI_)>uI92-$H>z2lg40k&bch;m*Nc@i$UlxwZ}dbuw^s z-iTU1pRs;qtfl(5m7dtH3X;2!4{cRsn3V4??{!3=7zTcgUIgccOK}?xQF}?f9v>H* z7foTl0cM2uUbf@=w2jT3&&x;A_?!Lh!AQ_?#wtCoeYI?Rrg%E`O#ff65hwM=6#i#^ znUzP^eP6nJO{s!9z(hwkX#ygaska>kHOHhQ;G87-1I8H_F*sj7RYg3Fx|uC&r+Ksk zrl&8+@a4H-C!QzC(8!HkxVLz=_q~w|@{eB!IZN|u4bPyo@h3D8=r8HIk3Rhy@lyFo zefd1jjFUV}dqk=xA$|0U1i_RMgGkeQMSS@mkyC9IaNnJukT4rXDP%twvE6GYHMe;t z8(5*_TG;#nI$Aj55yDh06I_owXH_5)V(9wXMRkukD~#$nmm%@+m|xYJsjX(#2MT1atr&`m4%^;I;eXfgDuc{+1{ zZ}DG&zx~l38%jOD3Uf)ueK0Sq-aK#HFzrDS^HX6C4_vi+`UkZQ09WVQA!t zM!-8-uJ*n5?CHg}b-C*zmhF1cu4`vYa}A6Qx%Jm;w|7HnnLG`HS;=HLpHq!{(x1Z!jTuE!gdFw9~0Ow4_#h#sI^kOwT*gbv@1q4rEj;(k_{h?_` zSoy^#Ms3GD~8!=`Fgl@GN5CQ_TvQo zu$avG+j?|%TUK^6gSgaN-^|W-3?y&<$J@LhB+L53-2aJy#q44~ zUp>>fv(|uW*O&xvd|PMd2WcP_imm1b-x@DWsqRxZAu$$o1M76(3Ij>Kb^6OOmIvVZuiu1p= zZ@e4R>J(vCn1b}P9baHr$kmCxGY$68l~ zEDZ}yzUq^b-|suv;w}e$O4pA+>J6>xQL#m`vD-$-_aW+s>5qAJJI_8Wg7yz~m~a^9 z@Xr$U8hqEzhTd#X>x5^Vzq}=cYRo;0a|hkH_mM<+r%8>tYzqq;*}D&EL0KEav_%!wW#B)snExRr}1+IkCSl z#(7~(iG&0$3FN69k&*cV2y#Sg4Cy>dVmH(#;_#u*16>;Q@K3<{{o5jjR^7AxW+ri* zA?M#IuWXpbFhsKY=*db2xhmjjI^_w;h*61I48|SuZ-rk%JNL%T*bdv>T>|;X#)-W0 zda5`HDXZNIoiyzkw#xNo`yU`G zILr>uul%&bA9x6L6QkZ{g2o{`Zp;6Q;-?92`H9k-y-8XGKZ@I_4RHJl*I9IMy#qZg z2+VQ`FCw&xdp@Rvgop}t0;2lJ%fV(N7~Z{Go}n>BDvpY%vM;NiaCblM_)X+# z_0E@giBM}PZSz$(6(JwpHXz~A>b*2KG62BP%ATesOusN{h}xx2*k6yMTA zCF}Mcen$RZK}<>`E_H+ySI`CD%!rlL9Tj^WldtQ*SsOjp`14(`96o(|@zuKA^~=`9 zfd-n@?fL{MyyWY%h+XauVO4ZwQyD#)X-j6_HKq?5pXTOLOLr;_Xn6xbqgK-np?AE9 zvuO`CQPQ}z+k)@=?V+&9(59q88e!Hc<{^PO7NAM7cPKWIe<%DFocgPm$>gjJ6Lwi zdyf~5x035+M#Omdqle_`Z)T384}~$2THJbZ!iBuJ0_B_$;v{KMqzh#^bZiEn4BtO)J zH>(2zMs=50y!v-XPx<4W>Ia6r`JJJ+65K2n~KwFPXOLH3fS zrATEpbib}oh8u4QT8DmPPmT&8!@Y@;!V-^n#GpeIY4% z*^ee4R)~Y0@n9QluDdd*=|GJ2&gwKWuK#!Xa;>Y)=s=d$!o@Zmz(>*|(=DiU`r>NP z1(e>jijA(}g0dn2ukuPf!hi}x80sE1AO8Us@bP7njy&X#Z!y)@+`=46vBxGJK5mm>! z|60+fqMJ%Mb;?Gr9(%c&xVrpQEzzy+QE^!mU7!~u5Y-Cc#L8e3B;Ib4fFDSJc%eD- zC!&ZYiPvgGg=0YsNk~QU!U&ZJLBi- z*xdHz7Dn5l;)HzGm!CmdyRUSq?uth$P=$&K{bb3^;*_w|_p*Ao>adV`cZQUU!z;y2 zF}A{B>cN|9em_#wmiCXQYz~Jn*4>S}7uohHIV>^e5i>@ELK2d%qtQWx-=Y|^N-Cfc zv1k;na&IamfD8x7z)1FWuJFL0wf2Z!t^J6 zm`K6v^g?1YM2iRs$s$y;2rnm-k61eW@WkIcFZa>t1~fXJ9+}*A&_I&bQOh8YBkT7+ z`YsmUEKM@nsZ?y@x!@1m0s8^jg_n+0U`ty{hw1nW)p*>-rqg9|5?5{5@FAK9md6IS z+R5R|Z$8Y|+KUtq1CzuN;+WEwulOB3l@q$ZLqaC4v4l5imF1bX57`GhpY>E-3M+h0 ztI)7@Q|xs)ez}%!uf1s_xxcR%%r%uzZvw9;GHq8+-=y40^m$AIep%3B{yBe%y^?Qf zUalqI>sEGB%Bn*`OOEQ&L4*=c5Vh!%*SaJIz8xpis;SYC^#(<)bYlG<%l|QJvyd8r zjdPmOtpjANIKYLB5W#VMy?n`dDy4_)1i-JBjk^ToWVX**8s^a)o5bUTJT65=56n=} zLa6lTYiC)2i6-ZLK-HP;8{Y?V<6xJ%Iy%so*N4QD>*)+-pL6;Ye|KMuZ<)RypTVym z52H8ckHR+pkS6res}*x28)dJ*It2EMi;*nNRN*{T&J(A-YK7)@K3n&7#8{N*CJe?N zpP~sH=2c4e`b2z8`Ss@07dPAr-ESe8n`sCA_x#hA4M~Q9h7J_M#Yj&arSLRHc&_Wj z@%(+^w+F+ju@0mb6arNFq%4WW7s6s=ovgb&-h66gRSQQYnR&r+pE}bod0O*jx$?LJ zD%i8W z;gGLP*xDBT)ptB#8yt*o@G-?$gov8SJ<_owufP1Vl{Do@r6mF^0l7`+I&JIq##6FB z$=@poNkl>94Lor}eO!Oe&M%CZt)f+Lci-B5e)X2hkzp&blf zx%q6VM3?vs%wO``6`r8Wo~W3lFd3riKJR6m7~9HFeZT&SKPYsvsX&P*u?{p^^+>U* z-Y#}wB)=wqNV0Uhzm%BHouJ~}=yYAStBWEecgS^x`G6_L)0E&yJEvc_EA?U{gI2^x z*U^TFAMEPSM{S6D8F9t7X>>6$(qzO{|)3X z{ITtax_`V+&%E^eXP8eQ;jxjACO&i`sUme?y|Z53%Lx(0RFa*dk4u#f@6=W*4p}!` zK(sy@t%v}}mbmq_%-9>D&A*B90^*?fpVOFv?owzD0qVkl9qJRwv=cYnDTXF-x0oD! zD|BI6L+^%dtQKkqd3Ow95MucC)7+I`2c(mH#FI<5Y-<+@sE9)dD56 zgK1%5ADrH{f30;!ilodEIQ+gsu=OUgS{Pt`xMi8=3klyQEidlViqzkol-93*ug|M@ z+^S1f@i=6d18%Pv6;vJ46OA}6=5W{{BwbmHd97jE+hh$?B0eNCX+a_+5*Ui{Cf%+k zAe;KtYWOJ7D|)?on9!weC$m-6$#*gEkedi9wXa{s4`!S_E~`?I$poP690GZApQnvJ zMPc;d&@hiXkK_pI&lT}$#Hc>>ELG(c@!j^2d?Y2YrU(Y((mtr7c9Gp4-Eyt5SSZ;H zT(#jGnZ)p`11$UQ6d_r>s2)Fd7gHEWXaT0-R-e*&n||6lNh_X5vAVn9J+iN{J9-AE z<__LNl`Yg-7o1DU$F8tNsQ#?qw9&(1yW>L!y+1n}58241by`G=J>(xH1MdAa;#UcVC(#ppIf)nsQBZXL=zy+ExQ-mFqc+mEPQR_&O(>=fgW zDJ2^gv4}EjFw5!v^JV#Vn~3D7hsgTG28N=Cs`=vMIwYn5F-wVdn{gtG$3DiiDT`>W zYmV}B_?=(y2sgUkksEwmHkwe)z6-1PGvaWwfQuy#4#FMBIrwMKY0obIdOgC-a@bk} zfha+vQ0d>#+*8~gJgLHD{(K2^LjxWCQS~LX_?#xX8Y|aL8T9EAu%>Sy%O0b$Z{`{yckdh2T#M8cz z^k>te^9vvDy?xkx;jI)79wV{T>jCxp$x|seKV9UfGdE6xeJUGr-?;qsi8yuZ^6G1u zgvL>(hE_@L9He`Ho)#T=J)7iJzhky~I>eO_d$q<})4e*{__NiW^PdlU#$aiY3OY~~ z9Loxxw)Jk1lt+|D40}>b)fjbS-yk@6k0d^ygTIa}jd;H2Us%eY|t1Z2t6tU z2kU4>U%ky9+)qMI-K>&T;fzGDm@iOPf&+61#&%ny7-pa&s&#CL8rO4XUIoXC`Gk9G zSM5_7nzf*5Ud9FbjuXjZvcE<*E{H90*o}A4EK)6^%roY>j^!uH1qzv64S8;IwNhjpbIJxEfx#UT){HR1c#J2JV zn73$=1vHAnYuj$?z$4kyej(sK~!U={XAz$$?uO{lJ(WWe{-(YlTn$10rP z>aB%B#PM_36T1R_*s=8ovbm*s4aAu3SAhq@9!+$H6$_D|FLj963+h}qkrV#T_Ju+$ z(4gh3XLV}}y>Gu$%a7DiOPw(K;|~0WT%P#IBlUC8qO$^YP#!lWjlUbVPgAsq0ISKs ztK!l`hlf;FW|UHRP);mdU!ln~u{krFE0;*ZEc5SiY(OWzxJy8*jy@_tBnu2$e#B^t z%E}g<+nI7y5|Wx19u>%dpfO0`VK5pYMiAQ(n4or~(+|HN9r|gYKqCH63WgZ1I({SV zO?V_KM(+o&0AnrA8uiu@D_%R)TKNrn?bgkcW2ZXxd-X)++x9ns>4>|B`6&w}TP%dP z^D)z2*bDI5fGgv}wZtRN5v@#M=L^GE!tzmF<({CB9S@5_5h6$?-vCU`4^-gY#3yqu zDM8!nNr`p(aOJ&@hRhdp_EUX>CG=RPFEX1DzIx^Ph8-L<8dVa7&^Go>Y5UrTp;N9j z@LET_Fp^sVkhF{YOjSdAC%;e`-LU+d*|o&W8BHa1TorP1-Z3G?qV2}8!P@pJn`Y@b zbh`5XyDf^aZ)Rb@@7q;a6pE|ZAG`4sI$DS7?aGX2htQc7mrNTDX~T%*{VDndh5l*p z7D^nMermgg`W$)v;9!hCU2XBD=4X%qiq1}?>K&>k6?M;QiH2jJ$OEq)AKq+!As@#q z$iY)Ou6EYSY8MsF)QUL(buv`^yvKgvBa`SLUboACjnRo^? zyNs6`fF#z$QSfoiO8sNX)5dFNE-m-NdEeDBduD|+Wat6YFEyYC@hA2G1BuAsQXhOX zTV6Mpck%)_ZuODKWS3<5O~B(hhu*;qnqlRI{5Tj|&F|`Ot4Tm0c^)X%`g#(P5F_ zuWE-UhguCqIjksI{cn9o5T72(MnQ4#D2jq#asJ8k_Zyf_y^TyEr6p{h)IbKnq$7B4 z)W*{!>%dnPEymrDnU6E_wq3H&f2ZdjZ$CO$%7AGnisqYU69?vU8ZYgh>}(<~J+ybL zfDRK=Wol}v>|9RbC(lioRl7bFJnnc2N%^Q<&oMnZ$#9`FH`0pr*{0w0=r1)^)rlw` zM?zw6+A0PUFE4ZPse3N8xdP?odDioi%0D`!Z|x?0mt$cKLNc6b7-W3Elk3k8k`X(Z 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%0DodHbTgXeJ@OnczSjA%B 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 rkL0}_RKGI5LG4k%?m9Q(C# z#Va$48NMYj?lu^JjBC9ZnNjh)kOhJQwGcr|ZUnuQw5)~>(e982l`%J3w}Csg{;y5{ zv*K3pPH&Y`B3x-sbl1`__?{-w-c!l2Iy6#=!x)Atm#%beh#WZXLpE&Xcf;ecS-u#N zhv$)rXDdzfR(!I(VYL!4>|bT(cw_NX4kVo#61yN$3HZiJ#UzgT^%VJEa@aG`uKvh$ zR#C6i83PTdg!Y`e7`J(Q9vYo+Lxz83!?ZPduN-r5`|7tNt7!$0L3y=&ph|ZH?8%Nz z1(Ejb*#kaY#>sc_WnAho>v%&_LZ-?8pe1;N7uT{K*uSFPdlSp`%aQu@P=qhGJ4UDS zNegVl%NIf?8U9&JUXV}`&Tx`DrJ220s17amQVVADeZ z?m&Q0Z$n8GGeT!^fI~*V{%fCd0_;DMpYOAv{b_sYOg5*y7T>xaGS-cWRd)Ko6N{cjWTc^(TjiQh5T@n<%_pq0x zcSi=k0<)fH_ZQ``Z#@ampCT>BLi*H;V9qBF%=y%ZC%1Z`6ba0V`Z4Ep3ANzt&^6sf5G^B)@vs(O&Vta$5{E2xkwPR&#=?jB0|%+C z2hSc`|3iu6#gQVhnV=^41U^0EolnspZo*_Rbd@=fJV~kU8+1~PQCxZCGB`NE`AYCL z9cQ+lNLpL>Cg7$hGuoe&&$^+JsN*8q@_<6)RGGQwxU|!kgms<-hvmwc zXn!=+!_M)1N?lYMuX!q1HIu!Iy#w!4Rh!LDO(n5xXt7!nQ#xSx_%h{(-w);--OVT% zghIVDS%l#dCW{q*YI0QY~&Fi`OmnUFKu*P&V! zj2~^xarb#J?Sk6Y^=-{8k43?P&$aJ%@@#_b$C|m36&lkD{Gkq#5YBXEvP%ZF@F@%> z%9B(kh?5RF(xLb}QqpW|L5GQUWDYn{F&C8X-Kmx|gY^HPe@zCTP~)9QSRe)?|7<+> zRon#7I_B7-O~q79pgS=tgBxs*^=JL*HD=}iqnc~UZB~G!5e^*d5h3_Te=<%MoZ4lG z=Aezwk;9w6f(g^}-oM`ds^UgLnrh5)%!;zb{X_D(+T)7_flkrkAg4E)0i(nhqWF~o z$&lchX)Y{z5yEnlv5duincJWN1HS{m_S-xT4~nocvN{C!<4eX4#V*y&rlwCY`@mUc z3E1ON_6-})NYY2=&VQyii@9kY;1C`w#iB%)(4zjwM1e6;BBFTlOc zv`#0WeABL@y`T@j`t?>;L>? zwRhONpuNlLm{}^y$Qb)U7y?64XmhC~JgD-XWkWeiKp{>IJY767irJL=4e}CYriT-5) zk5`>zwA->vdqD+n5~G%I1ywI~ns4SS&$6rk8{R2Dd6o-DYj_aFfXm&Yvd#DAUge$7 zXd5$mp`6X`9Kmc=?R0R+T=q=FDu_rqOj;GcQ|Ig2@v-CMz1Tx}51v#f+RGb5$)!lN z5b9hT3!L~n;wVXt$#smo~XYPoTw}Vu-H_ zHLQqg8MSq^>Q7XC4)RHG1Q+MPd5omY;AC2}m9P|pr}39%A~-lY9}5p?=y|zDc7_R) zP}Mwkhu5DyQ88)u*9yoMmTi)J*1;n7dd^Xw2Sf);YGx(5G&F8GRuRJqGf&sO`}_AFeGdrki&fmQ{8q^(X)kGOomAGF ztV1d$`LsY{b4>0FE!(!N_*h-7Qw>iLwr}|V)b{OhNoDW5Hdb0=IbFh#sJH0^5M zQl=R%nW=d%NvTmYB{c7e;%=sZJuw z&XbC0vqW;YN%Nep(^GbIfK4lQ`vMcA6Y=!}GTZ$+9B8q%f%_7-7F4h)J4D&TRpmFq zv1=*Z;0;{=j+QBos#`|ARA+%Ifp0qf{Km~SCOWcpVntX2D+D_m9aGo^VqxLnU3_;E zgSG=72tBV=+;U?rvteH>40}9whX(S4Fo|rw`}&})TTAmZ7H~j}5(`JQ3_SPLZ`q*V z91d+!rnc}5m196bO2$^ppQ+B$-x*qBR{G?7y#miLGUceg-0=5tUmM?CEaNym9>XK9Cz+Z&cUqaYCwxFrnjk?YLm`LcR#1Pe86 z2dKt`=wB*E!A^E00aKHo*u_txKwF?{ZZj)K-TdkSbEub8ktGb`8Ib6tBz*ky7>kmp z46L!s<_FI{6mI+=&`>-47tI-Id$c~`{vf+1Q4&3;UodNL^eSZl(R1{g711q<%9D`f zq3`$WeYn0bIr#=|r{7Ko8{>+UhUWtDd!xTuRYM!vip^`S66BILE+bD~^BOu-#J6tV zhwUl?0>dbTFSq}a%?cl@r5Yomii}**BNv}~D!${k>C~e5tji=LHR-rfNMY*r zN9*Dm_DaE+7@CoY39?~#Tz~xW?NNYsvoLTsgZPk_ZbwJQ)C?F}x$Jp(1X>}M?T^n+ z8^A3~|0AaXb1ayb$W}~I`rId6C#SFN{;Yut5@YsCC{&2*+&-`nR8cg< zx!pch8^tZ50fEnOA|)WGTL?LGAqy(U3>Pw451s%8hL2&&4*Ksp=Q zjUsrEi1~!Fi$}_KYH6e{Hy;S!c4z{q1&R|zeVn$C76pM8HHY3IXW2lI7RP6KdkMx1JxZKNH+S|t)9Qm-*(@+fR^!tm(g5Ie2&9gN1VRi zsbW(hshK2hpiIMjKeX&A&kwj{w8ER_F;Pyvk0FUCgC11G=?6%E%Kdq+qcd@>q+Tn# zo}9WmLVv40kyD_?_jjuQzIUs&{zOrb)g}{R4P;WlCSy1 zBg74w9MWNdo+4za_t7X+HJvMMZB8uOF|fo4^4vuMX_+*kfX85fa!vUcA_#9kAAK>yZV|rZg4ktz$1n4$s;xptgZcubJ#hynx?0l3=kPm8vC+Br0yM9uCRSY4<89k= zClcW3|bz= zZ;ad!nrympLCz8t^n$KBWtX?+CSluV!T@T&bfTLfm^3@yo-}<2WkMEDJJ2lzVd`7s z^&si;+PU|4CzJm4?A= zK6Fvut_~HXHh?wANk#0wF$J8+&jl1wl^*ha9U#>WHe)ot_{g(AcQ5k+`-yB$Fn^X0 z@>9$0N2c$Elo~#W@qidRi1I?eNDVi zJK3;Q0ctOoJvud3kzQ5!`?kPFWJ}@4k0W&7iRcEt`Ugs0k|R_{EkMq$Sp6izSYxAH zGfQ`1M1yrWP`LELCbvUAZd*zC0S>|Ix0xyjq|$v=S=WOx0Pb60&Ttyaaj!u>FHHW+nRL!kKE&m8Rt zxCZp{yORRid&)=l_9VlL9igcP%b)sPq?6JNbaq$m&iA){bG#zj6zGK7;6!1(WClnj zfE~gWUliP>TXNjg3^*!UmDv2?`W~H?3rq}S-@*oRvup%eNbX+;Tbiv%s^xeLnF*>h z>hkx$JoWx4`{IYej}^Hdd=gaaT+tNzChbi2)b-V?a9W6=)gzc;7vAo(B$Q)SR&)VDs?W;{ei9j(!ry|t34J9j2IN0{vqIEX)HqzH$ zqSG#H_%_IGf}$2vL8WUi=~PG1jzd2UdSJ%*7iJac(>H2EB5-9K)q3XrfS!ihDBSCG zeAi18=NpIq`_}O(7@*k5r8yToEqi#$R9EEbT9^qxv=zjo4@iJ|HN;heC7O>AO}DeY zs2*hGJAasP*~MQsK=6cl#^aH?e`g*nhv+E4#YjXl+a$z3ep{XXo10H$_b!2Ii$_~4 zBF*W0+pN>eEAE_T!9JPoe(!$$?CJ~nMIE8ehGb%HX(O?GbYHIU$E*pYS%V)5uAWc8KM3xb2L-ivJX?kB-lQ0y3v3 zI11q;EDIUrPl!l<*GJ>=Nmwi`0ge9^hy*`5>TK|8WdDo1s%H^e6$?~5A)FhjxoULE zzr<{B_-P)|FuT16L4p&pqnSb%|SS@u#H)88}L%2j2^3Ehc8OZT4h{hU8zQ*KZbt zOnVlDC==luG4FJjzFl|l1FrCfygnqJuSL)s^~s69m@77bruhDo?%}9a3<_1|p!4FA z{X+44#)}7iJ%`7j%>o7*^Qdz>u7oCcK3H1QbRv}EX}?^{D_!^aDW>~#x9wK;wVU;7 z11FVy++6NKwbOtgO~gc`2UBa4IqGFo?TSR)vhgrZd&%o}VJ>TT>exg>hPc~njk(!B z+OszObrE{hkrNjwA>}a3+qv-0nZ|_K0(7?(k-k#Gb(hq#g1AtFa4{GLO(qFxfE+%X9yk^(KK*^Hi%K6-T(h1!PX z^-Oh3*a)=|@#-Y^LE`}pd@NrD>J;Iv5Ya3yNXhU@nBCbWa=Y!X1)^3kod%iZ45U-vmXz6*h2wPs6}Cs~?BtzX=tdjBNC|>3cOP zIG8%g=;Bmdo-_&E3n;(VkN^(|*ejEaG2Q1=9ebQNua=+1T-GE!Tq|a2-L3aR{CL%8I!pm=21Ui3z!*^vvv8eP3KA~+okFSs>p)D_oCaGhi+U1dA_J_YmBcjeQy7h!|%(Gu7B=zqFwpr$l{Hm z<04&=dB12VCG%Kg+&x=IR1Z|vp>TDII}>+x?zQI~XK`g;7o&#{a=1Lx4wPH~RTbd% zosX1ApS{r~IMzG{DzcxHWvhbsW^z%0f2Uhs)x~pH*Vi*=W9@-P9b!-}Qu0gt!QSCw zELdb?(b{Rec{APmz_&kJ}$est+CRnnXMlmp6Co+XIouFR-LJq)nXLIEdz}v+7#MplT1tZvQQRz%|13TC}uGjMNO6j*1a_@!cnXctV*Q+TD3Z+5rf5 zCFAe+=kGkyb&*S*pu>JF7gqoxY0t~*mCLq{M*}%o#v4~cdfh-)ypY?Zep@e^yEwO9 z?q->pCZpmWj;ib5kX1|b5j+S>n&AuXGRLn+LX&d+IcUlbJ?EhCIp$~|bJDt8xg&tX zi|9UG&36L5t%QCkRmQoOC?61q+h?OLe%82n!CjiT0w~PYp_9dLH^vvhDt9T=AJcJD zk2doVEO$r6-D57+CI38$NhD%4#I(bBbKbA6-g#Q83oMxDOxdNtTL*+Ln3!UY>x?7R zc&PY){3>v=))%JP@C-%gx$QLPAv1Vub zhOQoa(!MESt%HS?Wbo|DFirjE{XbZB;yoOC_U_m&&472oU*s0)M~Mt)a|;9+G( zV)e^r3+Y>qM{Sx?&IyEG{8j?7dJ)s_OXjk(Q%?#eyeQ?)$)L*L!R{#Z9-0}hzUMtp zr#fdrBoatDRbUJ!0AV&Th7G{fAsL*zH~3!3?Dgtb2M+V^jE-_rgI<8y@>!$R!Na;P zJchwz1h#*fEjL|N7$*#MIRkh5UfArP%rR3UAREG?_DcA0J)Lr+b*AgBR>2+JETZLH zD0xDB&qe76wGI8zeJV4n@9HzT@J6mwCPGqm&%ZMcSehWvOH6&OlEX#h;G{N`0_NCa5mxilVa9l(Uaxy?y{$AdS1u z!w6~PT2`NI9y52p@{2Dr%cS&`xgnukA;E>MF!a~CW3(PQt+&C={Hgt{tes0yD%Kl~ zUl&HGL+(r19400H?U;>VyuxcV4N}eA=~C|HQE5mS4e7Cx>N@3UuTJxd8OlY=yHP}_ znpr--YE;15?+XYmj(CC4OKD_;Iy*rH@WzLBX2gX4l#9LVs96-2&QT*ai^y%4RVH=_ zmFji&G$)&*nqt|wZ>bk6uOQ$`BC4F7_ITPWxs;?d-bnT{i-f?&V{Y~USwXx+As4?} zN`B>fA^W!HIdO)1;q~|yBy@17Ces0v!Iq)z;h6oSZL&JM$uqTjTH5|cJP>X{T!I4d zwbpT7O+-%TZ1<*}Ss15XZ_2?Rm>pc6qEHp&nfLpHhWMv?(Yr>&5)60iSi9!OYCmN%5Rby@RvS`|bf#>^ax*f@eF%O zA1B}%qZzQkHqK#b2zboprYbYNlXeMFTM8nfhYjX3wmAeJ&9I0$(jG>>{@Ucss4lO^ zD@|sa1;|(T;Mn5ur`r?EpLbrokEME~VmP4_v88p5P0KQ#PM;v$&A4qhZIuDJ3KVzkq)?UC^-AFkEdxiQN|(s|ZC@Flyk$}Hz*i3_T> zPdJMh$E4xI5_}t;^gj8l5%H+Q-)I7n`Ix?BzTXvdWjnkWHtM>8$pLc2T;?r^bw!N2 zFYTIgi<0w)tE1RpJ>o!fI0B+_dh{`Ka|H1g^y0vmZg=e%HY6D0FSkydR@c7+>rkvc zyezLPP-Q4>RFvz22?A2Y&5i-C+HMj6tRtECK(t<--y^cTJX1egPyErezNEr1$>U5B zJrFKL0qOBql^JOEk%tB1w_{XJ2WzZrF0 zsFvR7sp51N*m)E&lEyI7r5~%#(4s8$Fh!KA${XJ6{VG&i8j&r zMHDYn#J|Qcmi!LFuTOMR4?htogn|^+R9v#5_v_*I%%d)z?jVU>q39cH7L%2{rJ(-0 zgUAjoSahNowtG;}-%yE9k=>IjPoZ06s=NdFStEd{|1p)m z@7#Ku;0`x!iPD+6kKR#eOUX;0AE2u z&+!H+%4jwvSQu~ga-YKD0q#uYD-hO(w#i}ko1cz6&)PprAa2@U1!URhgD-=Wy!y@dGF@?P% z9nLFB)z>NCdGRK8NhvNH3m78%kR@`m+HVKh;Xg-B%=aFCZ}Z$2YB0Q8n2IN)EggM% zVvjcaYLTr;0Z=5H;FgdCN$DjoZE=woUmn7qW)FG~1=d#1N`xIDWlfFgtkPbQOG@_- zQr_eVorsNdAjt%F0D%lRN;`M3qj(M9q9Bmg(bUx<5{LJy2Ch}APVL!+J@>1RAh*q2 zjG^#31YdT7#20d^{=@j{#}((b`n+2s0Iw!Ky)eyj$BuVT^o|Q$q9tQRbqaWhk{;4y z7_4*0V6Ay;0cI9aF*QP_dRRZ1pZ1IMU_&BfS)z^6T?5^XYX2rMo|)sPa2#a1xPn$u zwAbA!W-dDm-ujTu%nL$wr%;$1MDu<9@B3#RCSFBTdV{O@?>!vGI=ZdN#NwW@hH}ey zuqU6oJX-Mt^N?#LfKdhW%ghCkMvQ;>Nj)R@q)7N#nfq@vKbGj#HGQayL8W8lCciFACwPQXC1rk8`XI#w-V|G>742La>xA3 zOmf`l;qax2p&Kf~BhA%Cs>ezk@?&zx*x(A6Pd68a4Tj=)sRA*-Qqp$f+-Nq^@bd>94h^niA>vyH z_T$)sQ=OBC{R;dEd&kZ=+L zaeyfhSvnY`)3d!0U6*q~0jxk!EFP1_Ft}&^&ViqZ_#S_08{S@hRvf`et z_>!-fWl9zBS9f{ea(-l{x4jNWm6R&`Siw@Z^wNCXHMUDAdtF)(=>|R^6tiogpuT%0 zZb(z?_A~Du+x)BmoH=%Cy?-L^3;%76+uZi`C>16hGBlM0b&ap9_%e=m;ch;chwO>8W zVc>oI>Y2@ZOML&i=jxLGAkF{BFWLF;nf!C}?E=4g_<1iIcvZvNR+{y|5Cdb$XI~wS zh2VO#{F4H0qx^#c?VmJl{B-i+0_}a8C}7+aXz$j%4~&L+qX!sj0l2|xf1Uh&Bih!Q zKEOCTqHV8v6&MvG;1m-W!y};aG%z*@!4boNe>>om5c~+|uU_W7cLsR(gxV&WxnB+1 zzvovkaJ4u6@~>(B>brN|=>K} Date: Wed, 12 Jul 2017 16:24:56 -0700 Subject: [PATCH 0918/1049] Camera faces you, but offset --- .../marketplace/spectator-camera/spectatorCamera.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index b40fe7f8ba..0c7c519eb5 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -68,7 +68,7 @@ // Sets the special texture size based on the window it is displayed in, which doesn't include the menu bar spectatorCameraConfig.enableSecondaryCameraRenderConfigs(true); spectatorCameraConfig.resetSizeSpectatorCamera(Window.innerWidth, Window.innerHeight); - cameraRotation = MyAvatar.orientation, cameraPosition = inFrontOf(1, Vec3.sum(MyAvatar.position, { x: 0, y: 0.3, z: 0 })); + cameraRotation = Quat.multiply(MyAvatar.orientation, Quat.fromPitchYawRollDegrees(15, -155, 0)), cameraPosition = inFrontOf(0.85, Vec3.sum(MyAvatar.position, { x: 0, y: 0.28, z: 0 })); camera = Entities.addEntity({ "angularDamping": 1, "damping": 1, From 902705297f4493714aec04474efbf4c99d7e1c78 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 12 Jul 2017 16:28:21 -0700 Subject: [PATCH 0919/1049] indentation fix --- cmake/templates/NSIS.template.in | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/cmake/templates/NSIS.template.in b/cmake/templates/NSIS.template.in index f279bd8a71..3ff4f8986e 100644 --- a/cmake/templates/NSIS.template.in +++ b/cmake/templates/NSIS.template.in @@ -49,7 +49,7 @@ Var STR_CONTAINS_VAR_3 Var STR_CONTAINS_VAR_4 Var STR_RETURN_VAR - + Function StrContains Exch $STR_NEEDLE Exch 1 @@ -267,7 +267,6 @@ Var substringResult "${SecName}_unchanged:" !macroend - ;--- End of Add/Remove macros --- ;-------------------------------- @@ -477,7 +476,7 @@ Function PostInstallOptionsPage ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Create a desktop shortcut for @INTERFACE_HF_SHORTCUT_NAME@" Pop $DesktopClientCheckbox IntOp $CurrentOffset $CurrentOffset + 15 - + ; set the checkbox state depending on what is present in the registry !insertmacro SetPostInstallOption $DesktopClientCheckbox @CLIENT_DESKTOP_SHORTCUT_REG_KEY@ ${BST_CHECKED} ${EndIf} @@ -486,7 +485,7 @@ Function PostInstallOptionsPage ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Create a desktop shortcut for @CONSOLE_HF_SHORTCUT_NAME@" Pop $DesktopServerCheckbox IntOp $CurrentOffset $CurrentOffset + 15 - + ; set the checkbox state depending on what is present in the registry !insertmacro SetPostInstallOption $DesktopServerCheckbox @CONSOLE_DESKTOP_SHORTCUT_REG_KEY@ ${BST_UNCHECKED} ${EndIf} @@ -504,7 +503,7 @@ Function PostInstallOptionsPage IntOp $CurrentOffset $CurrentOffset + 15 ${EndIf} - + ${If} ${SectionIsSelected} ${@CLIENT_COMPONENT_NAME@} ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Launch @INTERFACE_HF_SHORTCUT_NAME@ after install" Pop $LaunchClientNowCheckbox @@ -595,7 +594,7 @@ Function ReadPostInstallOptions ; check if we need to launch the server post-install ${NSD_GetState} $LaunchServerNowCheckbox $LaunchServerNowState ${EndIf} - + ${If} ${SectionIsSelected} ${@CLIENT_COMPONENT_NAME@} ; check if we need to launch the client post-install ${NSD_GetState} $LaunchClientNowCheckbox $LaunchClientNowState @@ -710,7 +709,6 @@ Function HandlePostInstallOptions ${EndIf} ${EndIf} - FunctionEnd ;-------------------------------- From a4d95f9bf8f5b53008261de0db8b918a46e5be09 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 12 Jul 2017 16:39:56 -0700 Subject: [PATCH 0920/1049] Play sound when turning camera on --- .../marketplace/spectator-camera/cameraOn.wav | Bin 0 -> 108952 bytes .../spectator-camera/spectatorCamera.js | 6 ++++++ 2 files changed, 6 insertions(+) create mode 100644 unpublishedScripts/marketplace/spectator-camera/cameraOn.wav diff --git a/unpublishedScripts/marketplace/spectator-camera/cameraOn.wav b/unpublishedScripts/marketplace/spectator-camera/cameraOn.wav new file mode 100644 index 0000000000000000000000000000000000000000..76dbb647b1798c70929815bd0cdde80ead259885 GIT binary patch literal 108952 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 O40g0dqG3w(`u_n;_?vhD literal 0 HcmV?d00001 diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index 0c7c519eb5..345267f423 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -94,6 +94,11 @@ if (button) { button.editProperties({ isActive: onSpectatorCameraScreen || camera }); } + Audio.playSound(CAMERA_ON_SOUND, { + volume: 0.15, + position: cameraPosition, + localOnly: true + }); } // Function Name: spectatorCameraOff() @@ -500,6 +505,7 @@ } // These functions will be called when the script is loaded. + var CAMERA_ON_SOUND = SoundCache.getSound(Script.resolvePath("cameraOn.wav")); startup(); Script.scriptEnding.connect(shutdown); From dc1b4b5324dbf5b590ade4101b89073f3e2151e9 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 12 Jul 2017 16:48:04 -0700 Subject: [PATCH 0921/1049] New icons --- .../icons/tablet-icons/spectator-a.svg | 19 +++++++++++ .../icons/tablet-icons/spectator-i.svg | 33 +++++++++---------- .../spectator-camera/spectatorCamera.js | 3 +- 3 files changed, 36 insertions(+), 19 deletions(-) create mode 100644 interface/resources/icons/tablet-icons/spectator-a.svg diff --git a/interface/resources/icons/tablet-icons/spectator-a.svg b/interface/resources/icons/tablet-icons/spectator-a.svg new file mode 100644 index 0000000000..22ebde999b --- /dev/null +++ b/interface/resources/icons/tablet-icons/spectator-a.svg @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/interface/resources/icons/tablet-icons/spectator-i.svg b/interface/resources/icons/tablet-icons/spectator-i.svg index bc76417c4c..3e6c1a7dd9 100644 --- a/interface/resources/icons/tablet-icons/spectator-i.svg +++ b/interface/resources/icons/tablet-icons/spectator-i.svg @@ -1,25 +1,22 @@ - + - - - - - - + + + + diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index 345267f423..5c5eb5f33b 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -162,7 +162,8 @@ if ((isHMDMode || showSpectatorInDesktop) && !isShuttingDown) { button = tablet.addButton({ text: buttonName, - icon: "icons/tablet-icons/spectator-i.svg" + icon: "icons/tablet-icons/spectator-i.svg", + activeIcon: "icons/tablet-icons/spectator-a.svg" }); button.clicked.connect(onTabletButtonClicked); } From 88a449c1af7381163d1c01b742b30aabb0264a3c Mon Sep 17 00:00:00 2001 From: David Kelly Date: Wed, 12 Jul 2017 16:49:26 -0700 Subject: [PATCH 0922/1049] Fixes hmd preview when resizing --- interface/src/ui/ResourceImageItem.cpp | 28 +++++++------------ interface/src/ui/ResourceImageItem.h | 1 + .../display-plugins/OpenGLDisplayPlugin.cpp | 28 +++++++++++++++---- .../display-plugins/hmd/HmdDisplayPlugin.cpp | 8 ++++-- .../src/model-networking/TextureCache.cpp | 3 +- .../src/model-networking/TextureCache.h | 3 ++ 6 files changed, 45 insertions(+), 26 deletions(-) diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index 2ff3121df4..7b9592fa4c 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -16,6 +16,10 @@ #include #include +ResourceImageItem::ResourceImageItem() : QQuickFramebufferObject() { + auto textureCache = DependencyManager::get(); + connect(textureCache.data(), SIGNAL(spectatorCameraFramebufferReset()), this, SLOT(update())); +} void ResourceImageItem::setUrl(const QString& url) { if (url != m_url) { @@ -50,32 +54,20 @@ void ResourceImageItemRenderer::onUpdateTimer() { ResourceImageItemRenderer::ResourceImageItemRenderer() : QQuickFramebufferObject::Renderer() { connect(&_updateTimer, SIGNAL(timeout()), this, SLOT(onUpdateTimer())); + auto textureCache = DependencyManager::get(); } void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { ResourceImageItem* resourceImageItem = static_cast(item); resourceImageItem->setFlag(QQuickItem::ItemHasContents); - bool urlChanged = false; - if (_url != resourceImageItem->getUrl()) { - _url = resourceImageItem->getUrl(); - urlChanged = true; - } - bool readyChanged = false; - if (_ready != resourceImageItem->getReady()) { - _ready = resourceImageItem->getReady(); - readyChanged = true; - } - bool visibleChanged = false; - if (_visible != resourceImageItem->isVisible()) { - _visible = resourceImageItem->isVisible(); - visibleChanged = true; - } + + _url = resourceImageItem->getUrl(); + _ready = resourceImageItem->getReady(); + _visible = resourceImageItem->isVisible(); _window = resourceImageItem->window(); - if (_ready && _visible && !_url.isNull() && !_url.isEmpty() && (visibleChanged || urlChanged || readyChanged || !_networkTexture)) { - _networkTexture = DependencyManager::get()->getTexture(_url); - } + _networkTexture = DependencyManager::get()->getTexture(_url); static const int UPDATE_TIMER_DELAY_IN_MS = 100; // 100 ms = 10 hz for now if (_ready && _visible && !_updateTimer.isActive()) { _updateTimer.start(UPDATE_TIMER_DELAY_IN_MS); diff --git a/interface/src/ui/ResourceImageItem.h b/interface/src/ui/ResourceImageItem.h index 183e86ec63..985ab5a66e 100644 --- a/interface/src/ui/ResourceImageItem.h +++ b/interface/src/ui/ResourceImageItem.h @@ -47,6 +47,7 @@ class ResourceImageItem : public QQuickFramebufferObject { Q_PROPERTY(QString url READ getUrl WRITE setUrl) Q_PROPERTY(bool ready READ getReady WRITE setReady) public: + ResourceImageItem(); QString getUrl() const { return m_url; } void setUrl(const QString& url); bool getReady() const { return m_ready; } diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index 004cd05883..e1259fc5fc 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -514,13 +514,29 @@ void OpenGLDisplayPlugin::renderFromTexture(gpu::Batch& batch, const gpu::Textur batch.setPipeline(_presentPipeline); batch.draw(gpu::TRIANGLE_STRIP, 4); if (copyFbo) { + gpu::Vec4i copyFboRect(0, 0, copyFbo->getWidth(), copyFbo->getHeight()); gpu::Vec4i sourceRect(scissor.x, scissor.y, scissor.x + scissor.z, scissor.y + scissor.w); - gpu::Vec4i copyRect(0, 0, copyFbo->getWidth(), copyFbo->getHeight()); + float aspectRatio = (float)scissor.w / (float) scissor.z; // height/width + // scale width first + int xOffset = 0; + int yOffset = 0; + int newWidth = copyFbo->getWidth(); + int newHeight = std::round(aspectRatio * (float) copyFbo->getWidth()); + if (newHeight > copyFbo->getHeight()) { + // ok, so now fill height instead + newHeight = copyFbo->getHeight(); + newWidth = std::round((float)copyFbo->getHeight() / aspectRatio); + xOffset = (copyFbo->getWidth() - newWidth) / 2; + } else { + yOffset = (copyFbo->getHeight() - newHeight) / 2; + } + gpu::Vec4i copyRect(xOffset, yOffset, xOffset + newWidth, yOffset + newHeight); batch.setFramebuffer(copyFbo); + batch.resetViewTransform(); - batch.clearColorFramebuffer(gpu::Framebuffer::BUFFER_COLOR0, vec4(0)); - batch.setViewportTransform(copyRect); - batch.setStateScissorRect(copyRect); + batch.setViewportTransform(copyFboRect); + batch.setStateScissorRect(copyFboRect); + batch.clearColorFramebuffer(gpu::Framebuffer::BUFFER_COLOR0, {0.0f, 0.0f, 0.0f, 1.0f}); batch.blit(fbo, sourceRect, copyFbo, copyRect); } } @@ -862,6 +878,8 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne // setup destination fbo glBindFramebuffer(GL_FRAMEBUFFER, fbo[1]); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, targetTexture, 0); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + glClear(GL_COLOR_BUFFER_BIT); // maintain aspect ratio, filling the width first if possible. If that makes the height too @@ -878,7 +896,7 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne } else { newY = (target->height() - newHeight) / 2; } - glBlitNamedFramebuffer(fbo[0], fbo[1], 0, 0, texWidth, texHeight, newX, newY, newWidth, newHeight, GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT, GL_NEAREST); + glBlitNamedFramebuffer(fbo[0], fbo[1], 0, 0, texWidth, texHeight, newX, newY, newX + newWidth, newY + newHeight, GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT, GL_NEAREST); // don't delete the textures! glDeleteFramebuffers(2, fbo); diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index c0937ce289..b183850e7f 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -242,6 +242,9 @@ void HmdDisplayPlugin::internalPresent() { glm::ivec4 viewport = getViewportForSourceSize(sourceSize); glm::ivec4 scissor = viewport; + + auto fbo = gpu::FramebufferPointer(); + render([&](gpu::Batch& batch) { if (_monoPreview) { @@ -284,10 +287,11 @@ void HmdDisplayPlugin::internalPresent() { viewport = ivec4(scissorOffset - scaledShiftLeftBy, viewportOffset, viewportSizeX, viewportSizeY); } + // TODO: only bother getting and passing in the hmdPreviewFramebuffer if the camera is on + fbo = DependencyManager::get()->getHmdPreviewFramebuffer(windowSize.x, windowSize.y); + viewport.z *= 2; } - // TODO: only bother getting and passing in the hmdPreviewFramebuffer if the camera is on - auto fbo = DependencyManager::get()->getHmdPreviewFramebuffer(scissor.z, scissor.w); renderFromTexture(batch, _compositeFramebuffer->getRenderBuffer(0), viewport, scissor, fbo); }); swapBuffers(); diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index 3538080065..85bde4c2f1 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -1002,7 +1002,7 @@ NetworkTexturePointer TextureCache::getResourceTexture(QUrl resourceTextureUrl) } const gpu::FramebufferPointer& TextureCache::getHmdPreviewFramebuffer(int width, int height) { - if (!_hmdPreviewFramebuffer) { + if (!_hmdPreviewFramebuffer || _hmdPreviewFramebuffer->getWidth() != width || _hmdPreviewFramebuffer->getHeight() != height) { _hmdPreviewFramebuffer.reset(gpu::Framebuffer::create("hmdPreview",gpu::Element::COLOR_SRGBA_32, width, height)); } return _hmdPreviewFramebuffer; @@ -1018,4 +1018,5 @@ const gpu::FramebufferPointer& TextureCache::getSpectatorCameraFramebuffer() { void TextureCache::resetSpectatorCameraFramebuffer(int width, int height) { _spectatorCameraFramebuffer.reset(gpu::Framebuffer::create("spectatorCamera", gpu::Element::COLOR_SRGBA_32, width, height)); _spectatorCameraNetworkTexture.reset(); + emit spectatorCameraFramebufferReset(); } diff --git a/libraries/model-networking/src/model-networking/TextureCache.h b/libraries/model-networking/src/model-networking/TextureCache.h index 2de447f573..f5a0ec5215 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.h +++ b/libraries/model-networking/src/model-networking/TextureCache.h @@ -172,6 +172,9 @@ public: void resetSpectatorCameraFramebuffer(int width, int height); const gpu::FramebufferPointer& getHmdPreviewFramebuffer(int width, int height); +signals: + void spectatorCameraFramebufferReset(); + protected: // Overload ResourceCache::prefetch to allow specifying texture type for loads Q_INVOKABLE ScriptableResource* prefetch(const QUrl& url, int type, int maxNumPixels = ABSOLUTE_MAX_TEXTURE_NUM_PIXELS); From 44de1dd2be479cb4f4f4f53a1abc4cead23796fe Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 12 Jul 2017 19:25:39 -0700 Subject: [PATCH 0923/1049] put result of Avatar::getJointNames back in index-order --- .../avatars-renderer/src/avatars-renderer/Avatar.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 6e8f0f01e7..7097d01226 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1048,11 +1048,17 @@ int Avatar::getJointIndex(const QString& name) const { } QStringList Avatar::getJointNames() const { - QStringList result; + QVector result; withValidJointIndicesCache([&]() { - result = _modelJointIndicesCache.keys(); + QHashIterator i(_modelJointIndicesCache); + while (i.hasNext()) { + i.next(); + int index = _modelJointIndicesCache[i.key()]; + result.resize(index); + result[index] = i.value(); + } }); - return result; + return result.toList(); } glm::vec3 Avatar::getJointPosition(int index) const { From 85d0b682842189b62604a0bc05bd26c97ab3947a Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 12 Jul 2017 20:36:37 -0700 Subject: [PATCH 0924/1049] try again on putting result of Avatar::getJointNames in index order --- .../src/avatars-renderer/Avatar.cpp | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 7097d01226..4016592d0a 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1048,17 +1048,38 @@ int Avatar::getJointIndex(const QString& name) const { } QStringList Avatar::getJointNames() const { - QVector result; + QStringList result; withValidJointIndicesCache([&]() { + // find out how large the vector needs to be + int maxJointIndex = -1; + QHashIterator k(_modelJointIndicesCache); + while (k.hasNext()) { + k.next(); + int index = k.value(); + if (index > maxJointIndex) { + maxJointIndex = index; + } + } + // iterate through the hash and put joint names + // into the vector at their indices + QVector resultVector(maxJointIndex+1); QHashIterator i(_modelJointIndicesCache); while (i.hasNext()) { i.next(); - int index = _modelJointIndicesCache[i.key()]; - result.resize(index); - result[index] = i.value(); + int index = i.value(); + resultVector[index] = i.key(); + } + // convert to QList and drop out blanks + result = resultVector.toList(); + QMutableListIterator j(result); + while (j.hasNext()) { + QString jointName = j.next(); + if (jointName.isEmpty()) { + j.remove(); + } } }); - return result.toList(); + return result; } glm::vec3 Avatar::getJointPosition(int index) const { From b065b99b0b845d0171094bcbd9b9389384e4effc Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Thu, 13 Jul 2017 09:30:04 +0200 Subject: [PATCH 0925/1049] fix linux compilation maybe --- libraries/render/src/render/ShapePipeline.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/render/src/render/ShapePipeline.h b/libraries/render/src/render/ShapePipeline.h index 3951e41e44..13daac2db7 100644 --- a/libraries/render/src/render/ShapePipeline.h +++ b/libraries/render/src/render/ShapePipeline.h @@ -20,6 +20,7 @@ namespace render { class Item; +class ShapePlumber; class ShapeKey { public: From 11f8f5cffccb6a6409fcaf77c13bd07275780cda Mon Sep 17 00:00:00 2001 From: NeetBhagat Date: Thu, 13 Jul 2017 18:26:52 +0530 Subject: [PATCH 0926/1049] =?UTF-8?q?Solve=20:=20implicit=20conversion=20f?= =?UTF-8?q?rom=20=E2=80=98float=E2=80=99=20to=20=E2=80=98double=E2=80=99?= =?UTF-8?q?=20issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface/src/avatar/MyAvatar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 41ae07f54f..6ccc0ab516 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2277,7 +2277,7 @@ void MyAvatar::restrictScaleFromDomainSettings(const QJsonObject& domainSettings _targetScale = loadSetting(settings, "scale", 1.0f); qCDebug(interfaceapp, "This domain requires a minimum avatar scale of %f and a maximum avatar scale of %f. Current avatar scale is %f", - (double)_domainMinimumScale, (double)_domainMaximumScale, (double)_targetScale); + _domainMinimumScale, _domainMaximumScale, _targetScale); // debug to log if this avatar's scale in this domain will be clamped float clampedScale = glm::clamp(_targetScale, _domainMinimumScale, _domainMaximumScale); From 070db2922d1ccf0741af18a936dfdf61c43d6bbc Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 13 Jul 2017 18:40:38 +0100 Subject: [PATCH 0927/1049] fixed warning compile error --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 352d9e28e2..ef6ad0771d 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1,3 +1,4 @@ + // // Application.cpp // interface/src @@ -1705,7 +1706,6 @@ void Application::toggleTabletUI(bool shouldOpen) const { auto tabletScriptingInterface = DependencyManager::get(); auto hmd = DependencyManager::get(); TabletProxy* tablet = dynamic_cast(tabletScriptingInterface->getTablet(SYSTEM_TABLET)); - bool messageOpen = tablet->isMessageDialogOpen(); if (!(shouldOpen && hmd->getShouldShowTablet())) { auto HMD = DependencyManager::get(); HMD->toggleShouldShowTablet(); From b46dc7d389224d3ee609974df5ef406885502911 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 13 Jul 2017 18:42:26 +0100 Subject: [PATCH 0928/1049] removed space --- interface/src/Application.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ef6ad0771d..237fc3f6a4 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1,4 +1,3 @@ - // // Application.cpp // interface/src From 35f97837e797a70e63a1779b156e8e0d4f0b2d40 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Thu, 13 Jul 2017 10:50:14 -0700 Subject: [PATCH 0929/1049] ensured clean install state is not saved in the registry --- cmake/templates/NSIS.template.in | 3 --- 1 file changed, 3 deletions(-) diff --git a/cmake/templates/NSIS.template.in b/cmake/templates/NSIS.template.in index 3ff4f8986e..f44c8185d8 100644 --- a/cmake/templates/NSIS.template.in +++ b/cmake/templates/NSIS.template.in @@ -530,9 +530,6 @@ Function PostInstallOptionsPage ${NSD_CreateCheckbox} 0 $CurrentOffset$OffsetUnits 100% 10u "&Perform a clean install (Delete older settings and content)" Pop $CleanInstallCheckbox IntOp $CurrentOffset $CurrentOffset + 15 - - ; not saving checkbox state in registry - !insertmacro SetPostInstallOption $CleanInstallCheckbox @@ ${BST_UNCHECKED} ${EndIf} ${If} @PR_BUILD@ == 1 From 03fbd2a1e6a029723ebb063e7392bd38ce593d34 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 13 Jul 2017 19:12:34 +0100 Subject: [PATCH 0930/1049] fixed another warning --- interface/src/Application.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 237fc3f6a4..6a01b35230 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1704,7 +1704,6 @@ QString Application::getUserAgent() { void Application::toggleTabletUI(bool shouldOpen) const { auto tabletScriptingInterface = DependencyManager::get(); auto hmd = DependencyManager::get(); - TabletProxy* tablet = dynamic_cast(tabletScriptingInterface->getTablet(SYSTEM_TABLET)); if (!(shouldOpen && hmd->getShouldShowTablet())) { auto HMD = DependencyManager::get(); HMD->toggleShouldShowTablet(); From 521babb6bd558641667094c8139568af7ba34ee2 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Thu, 13 Jul 2017 19:18:51 +0100 Subject: [PATCH 0931/1049] Avatar Scaler - should be PR Ready. --- .../resources/qml/controls-uit/Slider.qml | 2 +- .../qml/dialogs/preferences/Section.qml | 6 +- .../preferences/SpinnerSliderPreference.qml | 54 +- interface/src/avatar/MyAvatar.cpp | 745 ++++++++++++++---- interface/src/avatar/MyAvatar.h | 131 ++- interface/src/ui/PreferencesDialog.cpp | 12 +- libraries/shared/src/Preferences.h | 2 +- 7 files changed, 738 insertions(+), 214 deletions(-) diff --git a/interface/resources/qml/controls-uit/Slider.qml b/interface/resources/qml/controls-uit/Slider.qml index 39831546e1..18d0d33fe2 100644 --- a/interface/resources/qml/controls-uit/Slider.qml +++ b/interface/resources/qml/controls-uit/Slider.qml @@ -36,7 +36,7 @@ Slider { Rectangle { width: parent.height - 2 - height: slider.value * (slider.width/(slider.maximumValue - slider.minimumValue)) - 1 + height: slider.width * (slider.value - slider.minimumValue)/(slider.maximumValue-slider.minimumValue)-1 radius: height / 2 anchors { top: parent.top diff --git a/interface/resources/qml/dialogs/preferences/Section.qml b/interface/resources/qml/dialogs/preferences/Section.qml index 61b3c7530b..a2bfa9ba0e 100644 --- a/interface/resources/qml/dialogs/preferences/Section.qml +++ b/interface/resources/qml/dialogs/preferences/Section.qml @@ -72,7 +72,7 @@ Preference { property var avatarBuilder: Component { AvatarPreference { } } property var buttonBuilder: Component { ButtonPreference { } } property var comboBoxBuilder: Component { ComboBoxPreference { } } - property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } + property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } property var preferences: [] property int checkBoxCount: 0 @@ -87,7 +87,7 @@ Preference { } function buildPreference(preference) { - console.log("\tPreference type " + preference.type + " name " + preference.name) + console.log("\tPreference type " + preference.type + " name " + preference.name); var builder; switch (preference.type) { case Preference.Editable: @@ -128,11 +128,13 @@ Preference { case Preference.ComboBox: checkBoxCount = 0; builder = comboBoxBuilder; + console.log("Built COMBOBOX"); break; case Preference.SpinnerSlider: checkBoxCount = 0; builder = spinnerSliderBuilder; + console.log("Built SPINNERSLIDER"); break; }; diff --git a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml index e9013bc17a..5b9e70a42a 100644 --- a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml +++ b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml @@ -1,7 +1,7 @@ // -// SpinBoxPreference.qml +// SpinnerSliderPreference.qml // -// Created by Bradley Austin Davis on 18 Jan 2016 +// Created by Cain Kilgore on 11th July 2017 // Copyright 2016 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. @@ -27,6 +27,10 @@ Preference { preference.save(); } + function sliderToAvatarScale(sliderValue) { + return MyAvatar.getDomainMinScale() + (MyAvatar.getDomainMaxScale()-MyAvatar.getDomainMinScale())*value; + } + Item { id: control anchors { @@ -53,12 +57,50 @@ Preference { Slider { id: slider value: preference.value - width: 130 + width: 100 + minimumValue: MyAvatar.getDomainMinScale() + maximumValue: MyAvatar.getDomainMaxScale() + stepSize: preference.step + onValueChanged: { + spinner.value = value + } anchors { - right: parent.right - verticalCenter: parent.verticalCenter + right: spinner.left + rightMargin: 10 + } + } + SpinBox { + id: spinner + decimals: preference.decimals + value: preference.value + minimumValue: MyAvatar.getDomainMinScale() + maximumValue: MyAvatar.getDomainMaxScale() + width: 100 + onValueChanged: { + slider.value = value; + } + anchors { + right: button.left + rightMargin: 10 } colorScheme: hifi.colorSchemes.dark } + Button { + id: button + onClicked: { + if(spinner.maximumValue >= 1) { + spinner.value = 1 + slider.value = 1 + } else { + spinner.value = spinner.maximumValue + slider.value = spinner.maximumValue + } + } + width: 50 + text: "Reset" + anchors { + right: parent.right + } + } } -} +} \ No newline at end of file diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 333c33ba3b..728fba2fc7 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -21,6 +21,7 @@ #include +#include #include #include #include @@ -38,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -86,19 +88,30 @@ const float MyAvatar::ZOOM_MAX = 25.0f; const float MyAvatar::ZOOM_DEFAULT = 1.5f; // default values, used when avatar is missing joints... (avatar space) -// static const glm::quat DEFAULT_AVATAR_MIDDLE_EYE_ROT { Quaternions::Y_180 }; +static const glm::quat DEFAULT_AVATAR_MIDDLE_EYE_ROT { Quaternions::Y_180 }; static const glm::vec3 DEFAULT_AVATAR_MIDDLE_EYE_POS { 0.0f, 0.6f, 0.0f }; static const glm::vec3 DEFAULT_AVATAR_HEAD_POS { 0.0f, 0.53f, 0.0f }; +static const glm::quat DEFAULT_AVATAR_HEAD_ROT { Quaternions::Y_180 }; +static const glm::vec3 DEFAULT_AVATAR_RIGHTARM_POS { -0.134824f, 0.396348f, -0.0515777f }; +static const glm::quat DEFAULT_AVATAR_RIGHTARM_ROT { -0.536241f, 0.536241f, -0.460918f, -0.460918f }; +static const glm::vec3 DEFAULT_AVATAR_LEFTARM_POS { 0.134795f, 0.396349f, -0.0515881f }; +static const glm::quat DEFAULT_AVATAR_LEFTARM_ROT { 0.536257f, 0.536258f, -0.460899f, 0.4609f }; +static const glm::vec3 DEFAULT_AVATAR_RIGHTHAND_POS { -0.72768f, 0.396349f, -0.0515779f }; +static const glm::quat DEFAULT_AVATAR_RIGHTHAND_ROT { 0.479184f, -0.520013f, 0.522537f, 0.476365f}; +static const glm::vec3 DEFAULT_AVATAR_LEFTHAND_POS { 0.727588f, 0.39635f, -0.0515878f }; +static const glm::quat DEFAULT_AVATAR_LEFTHAND_ROT { -0.479181f, -0.52001f, 0.52254f, -0.476369f }; static const glm::vec3 DEFAULT_AVATAR_NECK_POS { 0.0f, 0.445f, 0.025f }; static const glm::vec3 DEFAULT_AVATAR_SPINE2_POS { 0.0f, 0.32f, 0.02f }; +static const glm::quat DEFAULT_AVATAR_SPINE2_ROT { Quaternions::Y_180 }; static const glm::vec3 DEFAULT_AVATAR_HIPS_POS { 0.0f, 0.0f, 0.0f }; +static const glm::quat DEFAULT_AVATAR_HIPS_ROT { Quaternions::Y_180 }; static const glm::vec3 DEFAULT_AVATAR_LEFTFOOT_POS { -0.08f, -0.96f, 0.029f}; static const glm::quat DEFAULT_AVATAR_LEFTFOOT_ROT { -0.40167322754859924f, 0.9154590368270874f, -0.005437685176730156f, -0.023744143545627594f }; static const glm::vec3 DEFAULT_AVATAR_RIGHTFOOT_POS { 0.08f, -0.96f, 0.029f }; static const glm::quat DEFAULT_AVATAR_RIGHTFOOT_ROT { -0.4016716778278351f, 0.9154615998268127f, 0.0053307069465518f, 0.023696165531873703f }; -MyAvatar::MyAvatar(QThread* thread, RigPointer rig) : - Avatar(thread, rig), +MyAvatar::MyAvatar(QThread* thread) : + Avatar(thread), _yawSpeed(YAW_SPEED_DEFAULT), _pitchSpeed(PITCH_SPEED_DEFAULT), _scriptedMotorTimescale(DEFAULT_SCRIPTED_MOTOR_TIMESCALE), @@ -109,6 +122,9 @@ MyAvatar::MyAvatar(QThread* thread, RigPointer rig) : _realWorldFieldOfView("realWorldFieldOfView", DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES), _useAdvancedMovementControls("advancedMovementForHandControllersIsChecked", false), + _smoothOrientationTimer(std::numeric_limits::max()), + _smoothOrientationInitial(), + _smoothOrientationTarget(), _hmdSensorMatrix(), _hmdSensorOrientation(), _hmdSensorPosition(), @@ -116,7 +132,6 @@ MyAvatar::MyAvatar(QThread* thread, RigPointer rig) : _goToPending(false), _goToPosition(), _goToOrientation(), - _rig(rig), _prevShouldDrawHead(true), _audioListenerMode(FROM_HEAD), _hmdAtRestDetector(glm::vec3(0), glm::quat()) @@ -125,7 +140,7 @@ MyAvatar::MyAvatar(QThread* thread, RigPointer rig) : // give the pointer to our head to inherited _headData variable from AvatarData _headData = new MyHead(this); - _skeletonModel = std::make_shared(this, nullptr, rig); + _skeletonModel = std::make_shared(this, nullptr); connect(_skeletonModel.get(), &Model::setURLFinished, this, &Avatar::setModelURLFinished); @@ -176,9 +191,7 @@ MyAvatar::MyAvatar(QThread* thread, RigPointer rig) : auto audioIO = DependencyManager::get(); audioIO->setIsPlayingBackRecording(isPlaying); - if (_rig) { - _rig->setEnableAnimations(!isPlaying); - } + _skeletonModel->getRig().setEnableAnimations(!isPlaying); }); connect(recorder.data(), &Recorder::recordingStateChanged, [=] { @@ -229,12 +242,13 @@ MyAvatar::MyAvatar(QThread* thread, RigPointer rig) : } auto jointData = dummyAvatar.getRawJointData(); - if (jointData.length() > 0 && _rig) { - _rig->copyJointsFromJointData(jointData); + if (jointData.length() > 0) { + _skeletonModel->getRig().copyJointsFromJointData(jointData); } }); - connect(rig.get(), SIGNAL(onLoadComplete()), this, SIGNAL(onLoadComplete())); + connect(&(_skeletonModel->getRig()), SIGNAL(onLoadComplete()), this, SIGNAL(onLoadComplete())); + _characterController.setDensity(_density); } MyAvatar::~MyAvatar() { @@ -264,15 +278,27 @@ QVariant MyAvatar::getOrientationVar() const { return quatToVariant(Avatar::getOrientation()); } +glm::quat MyAvatar::getOrientationOutbound() const { + // Allows MyAvatar to send out smoothed data to remote agents if required. + if (_smoothOrientationTimer > SMOOTH_TIME_ORIENTATION) { + return (getLocalOrientation()); + } + + // Smooth the remote avatar movement. + float t = _smoothOrientationTimer / SMOOTH_TIME_ORIENTATION; + float interp = Interpolate::easeInOutQuad(glm::clamp(t, 0.0f, 1.0f)); + return (slerp(_smoothOrientationInitial, _smoothOrientationTarget, interp)); +} // virtual void MyAvatar::simulateAttachments(float deltaTime) { // don't update attachments here, do it in harvestResultsFromPhysicsSimulation() } -QByteArray MyAvatar::toByteArrayStateful(AvatarDataDetail dataDetail) { +QByteArray MyAvatar::toByteArrayStateful(AvatarDataDetail dataDetail, bool dropFaceTracking) { CameraMode mode = qApp->getCamera().getMode(); _globalPosition = getPosition(); + // This might not be right! Isn't the capsule local offset in avatar space, and don't we need to add the radius to the y as well? -HRS 5/26/17 _globalBoundingBoxDimensions.x = _characterController.getCapsuleRadius(); _globalBoundingBoxDimensions.y = _characterController.getCapsuleHalfHeight(); _globalBoundingBoxDimensions.z = _characterController.getCapsuleRadius(); @@ -290,6 +316,11 @@ QByteArray MyAvatar::toByteArrayStateful(AvatarDataDetail dataDetail) { } void MyAvatar::resetSensorsAndBody() { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "resetSensorsAndBody"); + return; + } + qApp->getActiveDisplayPlugin()->resetSensors(); reset(true, false, true); } @@ -334,9 +365,7 @@ void MyAvatar::clearIKJointLimitHistory() { return; } - if (_rig) { - _rig->clearIKJointLimitHistory(); - } + _skeletonModel->getRig().clearIKJointLimitHistory(); } void MyAvatar::reset(bool andRecenter, bool andReload, bool andHead) { @@ -385,19 +414,26 @@ void MyAvatar::update(float deltaTime) { // update moving average of HMD facing in xz plane. const float HMD_FACING_TIMESCALE = 4.0f; // very slow average float tau = deltaTime / HMD_FACING_TIMESCALE; - _hmdSensorFacingMovingAverage = lerp(_hmdSensorFacingMovingAverage, _hmdSensorFacing, tau); + _headControllerFacingMovingAverage = lerp(_headControllerFacingMovingAverage, _headControllerFacing, tau); + + if (_smoothOrientationTimer < SMOOTH_TIME_ORIENTATION) { + _rotationChanged = usecTimestampNow(); + _smoothOrientationTimer += deltaTime; + } #ifdef DEBUG_DRAW_HMD_MOVING_AVERAGE - glm::vec3 p = transformPoint(getSensorToWorldMatrix(), _hmdSensorPosition + glm::vec3(_hmdSensorFacingMovingAverage.x, 0.0f, _hmdSensorFacingMovingAverage.y)); + glm::vec3 p = transformPoint(getSensorToWorldMatrix(), getHeadControllerPoseInAvatarFrame() * + glm::vec3(_headControllerFacingMovingAverage.x, 0.0f, _headControllerFacingMovingAverage.y)); DebugDraw::getInstance().addMarker("facing-avg", getOrientation(), p, glm::vec4(1.0f)); - p = transformPoint(getSensorToWorldMatrix(), _hmdSensorPosition + glm::vec3(_hmdSensorFacing.x, 0.0f, _hmdSensorFacing.y)); + p = transformPoint(getSensorToWorldMatrix(), getHMDSensorPosition() + + glm::vec3(_headControllerFacing.x, 0.0f, _headControllerFacing.y)); DebugDraw::getInstance().addMarker("facing", getOrientation(), p, glm::vec4(1.0f)); #endif if (_goToPending) { setPosition(_goToPosition); setOrientation(_goToOrientation); - _hmdSensorFacingMovingAverage = _hmdSensorFacing; // reset moving average + _headControllerFacingMovingAverage = _headControllerFacing; // reset moving average _goToPending = false; // updateFromHMDSensorMatrix (called from paintGL) expects that the sensorToWorldMatrix is updated for any position changes // that happen between render and Application::update (which calls updateSensorToWorldMatrix to do so). @@ -405,6 +441,13 @@ void MyAvatar::update(float deltaTime) { // so we update now. It's ok if it updates again in the normal way. updateSensorToWorldMatrix(); emit positionGoneTo(); + // Run safety tests as soon as we can after goToLocation, or clear if we're not colliding. + _physicsSafetyPending = getCollisionsEnabled(); + } + if (_physicsSafetyPending && qApp->isPhysicsEnabled() && _characterController.isEnabledAndReady()) { + // When needed and ready, arrange to check and fix. + _physicsSafetyPending = false; + safeLanding(_goToPosition); // no-op if already safe } Head* head = getHead(); @@ -419,6 +462,7 @@ void MyAvatar::update(float deltaTime) { setAudioAverageLoudness(audio->getAudioAverageInputLoudness()); glm::vec3 halfBoundingBoxDimensions(_characterController.getCapsuleRadius(), _characterController.getCapsuleHalfHeight(), _characterController.getCapsuleRadius()); + // This might not be right! Isn't the capsule local offset in avatar space? -HRS 5/26/17 halfBoundingBoxDimensions += _characterController.getCapsuleLocalOffset(); QMetaObject::invokeMethod(audio.data(), "setAvatarBoundingBoxParameters", Q_ARG(glm::vec3, (getPosition() - halfBoundingBoxDimensions)), @@ -502,10 +546,9 @@ void MyAvatar::simulate(float deltaTime) { { PerformanceTimer perfTimer("skeleton"); - if (_rig) { - _rig->setEnableDebugDrawIKTargets(_enableDebugDrawIKTargets); - } - + _skeletonModel->getRig().setEnableDebugDrawIKTargets(_enableDebugDrawIKTargets); + _skeletonModel->getRig().setEnableDebugDrawIKConstraints(_enableDebugDrawIKConstraints); + _skeletonModel->getRig().setEnableDebugDrawIKChains(_enableDebugDrawIKChains); _skeletonModel->simulate(deltaTime); } @@ -523,7 +566,7 @@ void MyAvatar::simulate(float deltaTime) { PerformanceTimer perfTimer("joints"); // copy out the skeleton joints from the model if (_rigEnabled) { - _rig->copyJointsIntoJointData(_jointData); + _skeletonModel->getRig().copyJointsIntoJointData(_jointData); } } @@ -551,12 +594,12 @@ void MyAvatar::simulate(float deltaTime) { auto entityTreeRenderer = qApp->getEntities(); EntityTreePointer entityTree = entityTreeRenderer ? entityTreeRenderer->getTree() : nullptr; if (entityTree) { - bool flyingAllowed = true; + bool zoneAllowsFlying = true; bool collisionlessAllowed = true; entityTree->withWriteLock([&] { std::shared_ptr zone = entityTreeRenderer->myAvatarZone(); if (zone) { - flyingAllowed = zone->getFlyingAllowed(); + zoneAllowsFlying = zone->getFlyingAllowed(); collisionlessAllowed = zone->getGhostingAllowed(); } auto now = usecTimestampNow(); @@ -587,7 +630,7 @@ void MyAvatar::simulate(float deltaTime) { entityTree->recurseTreeWithOperator(&moveOperator); } }); - _characterController.setFlyingAllowed(flyingAllowed); + _characterController.setFlyingAllowed(zoneAllowsFlying && _enableFlying); _characterController.setCollisionlessAllowed(collisionlessAllowed); } @@ -605,15 +648,21 @@ void MyAvatar::updateFromHMDSensorMatrix(const glm::mat4& hmdSensorMatrix) { _hmdSensorMatrix = hmdSensorMatrix; auto newHmdSensorPosition = extractTranslation(hmdSensorMatrix); - if (newHmdSensorPosition != _hmdSensorPosition && + if (newHmdSensorPosition != getHMDSensorPosition() && glm::length(newHmdSensorPosition) > MAX_HMD_ORIGIN_DISTANCE) { qWarning() << "Invalid HMD sensor position " << newHmdSensorPosition; // Ignore unreasonable HMD sensor data return; } + _hmdSensorPosition = newHmdSensorPosition; _hmdSensorOrientation = glm::quat_cast(hmdSensorMatrix); - _hmdSensorFacing = getFacingDir2D(_hmdSensorOrientation); + auto headPose = _headControllerPoseInSensorFrameCache.get(); + if (headPose.isValid()) { + _headControllerFacing = getFacingDir2D(headPose.rotation); + } else { + _headControllerFacing = glm::vec2(1.0f, 0.0f); + } } void MyAvatar::updateJointFromController(controller::Action poseKey, ThreadSafeValueCache& matrixCache) { @@ -651,7 +700,7 @@ void MyAvatar::updateSensorToWorldMatrix() { // Update avatar head rotation with sensor data void MyAvatar::updateFromTrackers(float deltaTime) { - glm::vec3 estimatedPosition, estimatedRotation; + glm::vec3 estimatedRotation; bool inHmd = qApp->isHMDMode(); bool playing = DependencyManager::get()->isPlaying(); @@ -662,11 +711,7 @@ void MyAvatar::updateFromTrackers(float deltaTime) { FaceTracker* tracker = qApp->getActiveFaceTracker(); bool inFacetracker = tracker && !FaceTracker::isMuted(); - if (inHmd) { - estimatedPosition = extractTranslation(getHMDSensorMatrix()); - estimatedPosition.x *= -1.0f; - } else if (inFacetracker) { - estimatedPosition = tracker->getHeadTranslation(); + if (inFacetracker) { estimatedRotation = glm::degrees(safeEulerAngles(tracker->getHeadRotation())); } @@ -753,6 +798,77 @@ controller::Pose MyAvatar::getRightHandTipPose() const { return pose; } +glm::vec3 MyAvatar::worldToJointPoint(const glm::vec3& position, const int jointIndex) const { + glm::vec3 jointPos = getPosition();//default value if no or invalid joint specified + glm::quat jointRot = getRotation();//default value if no or invalid joint specified + if (jointIndex != -1) { + if (_skeletonModel->getJointPositionInWorldFrame(jointIndex, jointPos)) { + _skeletonModel->getJointRotationInWorldFrame(jointIndex, jointRot); + } else { + qWarning() << "Invalid joint index specified: " << jointIndex; + } + } + glm::vec3 modelOffset = position - jointPos; + glm::vec3 jointSpacePosition = glm::inverse(jointRot) * modelOffset; + + return jointSpacePosition; +} + +glm::vec3 MyAvatar::worldToJointDirection(const glm::vec3& worldDir, const int jointIndex) const { + glm::quat jointRot = getRotation();//default value if no or invalid joint specified + if ((jointIndex != -1) && (!_skeletonModel->getJointRotationInWorldFrame(jointIndex, jointRot))) { + qWarning() << "Invalid joint index specified: " << jointIndex; + } + + glm::vec3 jointSpaceDir = glm::inverse(jointRot) * worldDir; + return jointSpaceDir; +} + +glm::quat MyAvatar::worldToJointRotation(const glm::quat& worldRot, const int jointIndex) const { + glm::quat jointRot = getRotation();//default value if no or invalid joint specified + if ((jointIndex != -1) && (!_skeletonModel->getJointRotationInWorldFrame(jointIndex, jointRot))) { + qWarning() << "Invalid joint index specified: " << jointIndex; + } + glm::quat jointSpaceRot = glm::inverse(jointRot) * worldRot; + return jointSpaceRot; +} + +glm::vec3 MyAvatar::jointToWorldPoint(const glm::vec3& jointSpacePos, const int jointIndex) const { + glm::vec3 jointPos = getPosition();//default value if no or invalid joint specified + glm::quat jointRot = getRotation();//default value if no or invalid joint specified + + if (jointIndex != -1) { + if (_skeletonModel->getJointPositionInWorldFrame(jointIndex, jointPos)) { + _skeletonModel->getJointRotationInWorldFrame(jointIndex, jointRot); + } else { + qWarning() << "Invalid joint index specified: " << jointIndex; + } + } + + glm::vec3 worldOffset = jointRot * jointSpacePos; + glm::vec3 worldPos = jointPos + worldOffset; + + return worldPos; +} + +glm::vec3 MyAvatar::jointToWorldDirection(const glm::vec3& jointSpaceDir, const int jointIndex) const { + glm::quat jointRot = getRotation();//default value if no or invalid joint specified + if ((jointIndex != -1) && (!_skeletonModel->getJointRotationInWorldFrame(jointIndex, jointRot))) { + qWarning() << "Invalid joint index specified: " << jointIndex; + } + glm::vec3 worldDir = jointRot * jointSpaceDir; + return worldDir; +} + +glm::quat MyAvatar::jointToWorldRotation(const glm::quat& jointSpaceRot, const int jointIndex) const { + glm::quat jointRot = getRotation();//default value if no or invalid joint specified + if ((jointIndex != -1) && (!_skeletonModel->getJointRotationInWorldFrame(jointIndex, jointRot))) { + qWarning() << "Invalid joint index specified: " << jointIndex; + } + glm::quat worldRot = jointRot * jointSpaceRot; + return worldRot; +} + // virtual void MyAvatar::render(RenderArgs* renderArgs) { // don't render if we've been asked to disable local rendering @@ -768,7 +884,7 @@ void MyAvatar::overrideAnimation(const QString& url, float fps, bool loop, float Q_ARG(bool, loop), Q_ARG(float, firstFrame), Q_ARG(float, lastFrame)); return; } - _rig->overrideAnimation(url, fps, loop, firstFrame, lastFrame); + _skeletonModel->getRig().overrideAnimation(url, fps, loop, firstFrame, lastFrame); } void MyAvatar::restoreAnimation() { @@ -776,16 +892,16 @@ void MyAvatar::restoreAnimation() { QMetaObject::invokeMethod(this, "restoreAnimation"); return; } - _rig->restoreAnimation(); + _skeletonModel->getRig().restoreAnimation(); } QStringList MyAvatar::getAnimationRoles() { if (QThread::currentThread() != thread()) { QStringList result; - QMetaObject::invokeMethod(this, "getAnimationRoles", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QStringList, result)); + BLOCKING_INVOKE_METHOD(this, "getAnimationRoles", Q_RETURN_ARG(QStringList, result)); return result; } - return _rig->getAnimationRoles(); + return _skeletonModel->getRig().getAnimationRoles(); } void MyAvatar::overrideRoleAnimation(const QString& role, const QString& url, float fps, bool loop, @@ -795,7 +911,7 @@ void MyAvatar::overrideRoleAnimation(const QString& role, const QString& url, fl Q_ARG(float, fps), Q_ARG(bool, loop), Q_ARG(float, firstFrame), Q_ARG(float, lastFrame)); return; } - _rig->overrideRoleAnimation(role, url, fps, loop, firstFrame, lastFrame); + _skeletonModel->getRig().overrideRoleAnimation(role, url, fps, loop, firstFrame, lastFrame); } void MyAvatar::restoreRoleAnimation(const QString& role) { @@ -803,7 +919,7 @@ void MyAvatar::restoreRoleAnimation(const QString& role) { QMetaObject::invokeMethod(this, "restoreRoleAnimation", Q_ARG(const QString&, role)); return; } - _rig->restoreRoleAnimation(role); + _skeletonModel->getRig().restoreRoleAnimation(role); } void MyAvatar::saveData() { @@ -814,10 +930,15 @@ void MyAvatar::saveData() { settings.setValue("scale", _targetScale); - settings.setValue("fullAvatarURL", + // only save the fullAvatarURL if it has not been overwritten on command line + // (so the overrideURL is not valid), or it was overridden _and_ we specified + // --replaceAvatarURL (so _saveAvatarOverrideUrl is true) + if (qApp->getSaveAvatarOverrideUrl() || !qApp->getAvatarOverrideUrl().isValid() ) { + settings.setValue("fullAvatarURL", _fullAvatarURLFromPreferences == AvatarData::defaultFullAvatarModelUrl() ? "" : _fullAvatarURLFromPreferences.toString()); + } settings.setValue("fullAvatarModelName", _fullAvatarModelName); @@ -927,6 +1048,14 @@ void MyAvatar::setEnableDebugDrawIKTargets(bool isEnabled) { _enableDebugDrawIKTargets = isEnabled; } +void MyAvatar::setEnableDebugDrawIKConstraints(bool isEnabled) { + _enableDebugDrawIKConstraints = isEnabled; +} + +void MyAvatar::setEnableDebugDrawIKChains(bool isEnabled) { + _enableDebugDrawIKChains = isEnabled; +} + void MyAvatar::setEnableMeshVisible(bool isEnabled) { _skeletonModel->setVisibleInScene(isEnabled, qApp->getMain3DScene()); } @@ -937,7 +1066,7 @@ void MyAvatar::setUseAnimPreAndPostRotations(bool isEnabled) { } void MyAvatar::setEnableInverseKinematics(bool isEnabled) { - _rig->setEnableInverseKinematics(isEnabled); + _skeletonModel->getRig().setEnableInverseKinematics(isEnabled); } void MyAvatar::loadData() { @@ -1186,7 +1315,7 @@ void MyAvatar::setJointData(int index, const glm::quat& rotation, const glm::vec return; } // HACK: ATM only JS scripts call setJointData() on MyAvatar so we hardcode the priority - _rig->setJointState(index, true, rotation, translation, SCRIPT_PRIORITY); + _skeletonModel->getRig().setJointState(index, true, rotation, translation, SCRIPT_PRIORITY); } void MyAvatar::setJointRotation(int index, const glm::quat& rotation) { @@ -1195,7 +1324,7 @@ void MyAvatar::setJointRotation(int index, const glm::quat& rotation) { return; } // HACK: ATM only JS scripts call setJointData() on MyAvatar so we hardcode the priority - _rig->setJointRotation(index, true, rotation, SCRIPT_PRIORITY); + _skeletonModel->getRig().setJointRotation(index, true, rotation, SCRIPT_PRIORITY); } void MyAvatar::setJointTranslation(int index, const glm::vec3& translation) { @@ -1204,7 +1333,7 @@ void MyAvatar::setJointTranslation(int index, const glm::vec3& translation) { return; } // HACK: ATM only JS scripts call setJointData() on MyAvatar so we hardcode the priority - _rig->setJointTranslation(index, true, translation, SCRIPT_PRIORITY); + _skeletonModel->getRig().setJointTranslation(index, true, translation, SCRIPT_PRIORITY); } void MyAvatar::clearJointData(int index) { @@ -1212,7 +1341,7 @@ void MyAvatar::clearJointData(int index) { QMetaObject::invokeMethod(this, "clearJointData", Q_ARG(int, index)); return; } - _rig->clearJointAnimationPriority(index); + _skeletonModel->getRig().clearJointAnimationPriority(index); } void MyAvatar::clearJointsData() { @@ -1220,13 +1349,14 @@ void MyAvatar::clearJointsData() { QMetaObject::invokeMethod(this, "clearJointsData"); return; } - _rig->clearJointStates(); + _skeletonModel->getRig().clearJointStates(); } void MyAvatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { Avatar::setSkeletonModelURL(skeletonModelURL); _skeletonModel->setVisibleInScene(true, qApp->getMain3DScene()); _headBoneSet.clear(); + emit skeletonChanged(); } @@ -1240,7 +1370,7 @@ void MyAvatar::resetFullAvatarURL() { void MyAvatar::useFullAvatarURL(const QUrl& fullAvatarURL, const QString& modelName) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "useFullAvatarURL", Qt::BlockingQueuedConnection, + BLOCKING_INVOKE_METHOD(this, "useFullAvatarURL", Q_ARG(const QUrl&, fullAvatarURL), Q_ARG(const QString&, modelName)); return; @@ -1266,7 +1396,7 @@ void MyAvatar::useFullAvatarURL(const QUrl& fullAvatarURL, const QString& modelN void MyAvatar::setAttachmentData(const QVector& attachmentData) { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "setAttachmentData", Qt::BlockingQueuedConnection, + BLOCKING_INVOKE_METHOD(this, "setAttachmentData", Q_ARG(const QVector, attachmentData)); return; } @@ -1295,28 +1425,10 @@ void MyAvatar::rebuildCollisionShape() { _characterController.setLocalBoundingBox(corner, diagonal); } -static controller::Pose applyLowVelocityFilter(const controller::Pose& oldPose, const controller::Pose& newPose) { - controller::Pose finalPose = newPose; - if (newPose.isValid()) { - // Use a velocity sensitive filter to damp small motions and preserve large ones with - // no latency. - float velocityFilter = glm::clamp(1.0f - glm::length(oldPose.getVelocity()), 0.0f, 1.0f); - finalPose.translation = oldPose.getTranslation() * velocityFilter + newPose.getTranslation() * (1.0f - velocityFilter); - finalPose.rotation = safeMix(oldPose.getRotation(), newPose.getRotation(), 1.0f - velocityFilter); - } - return finalPose; -} void MyAvatar::setHandControllerPosesInSensorFrame(const controller::Pose& left, const controller::Pose& right) { - if (controller::InputDevice::getLowVelocityFilter()) { - auto oldLeftPose = getLeftHandControllerPoseInSensorFrame(); - auto oldRightPose = getRightHandControllerPoseInSensorFrame(); - _leftHandControllerPoseInSensorFrameCache.set(applyLowVelocityFilter(oldLeftPose, left)); - _rightHandControllerPoseInSensorFrameCache.set(applyLowVelocityFilter(oldRightPose, right)); - } else { - _leftHandControllerPoseInSensorFrameCache.set(left); - _rightHandControllerPoseInSensorFrameCache.set(right); - } + _leftHandControllerPoseInSensorFrameCache.set(left); + _rightHandControllerPoseInSensorFrameCache.set(right); } controller::Pose MyAvatar::getLeftHandControllerPoseInSensorFrame() const { @@ -1345,16 +1457,22 @@ controller::Pose MyAvatar::getRightHandControllerPoseInAvatarFrame() const { return getRightHandControllerPoseInWorldFrame().transform(invAvatarMatrix); } +void MyAvatar::setFingerControllerPosesInSensorFrame(const FingerPosesMap& left, const FingerPosesMap& right) { + _leftHandFingerPosesInSensorFramceCache.set(left); + _rightHandFingerPosesInSensorFramceCache.set(right); +} + +MyAvatar::FingerPosesMap MyAvatar::getLeftHandFingerControllerPosesInSensorFrame() const { + return _leftHandFingerPosesInSensorFramceCache.get(); +} + +MyAvatar::FingerPosesMap MyAvatar::getRightHandFingerControllerPosesInSensorFrame() const { + return _rightHandFingerPosesInSensorFramceCache.get(); +} + void MyAvatar::setFootControllerPosesInSensorFrame(const controller::Pose& left, const controller::Pose& right) { - if (controller::InputDevice::getLowVelocityFilter()) { - auto oldLeftPose = getLeftFootControllerPoseInSensorFrame(); - auto oldRightPose = getRightFootControllerPoseInSensorFrame(); - _leftFootControllerPoseInSensorFrameCache.set(applyLowVelocityFilter(oldLeftPose, left)); - _rightFootControllerPoseInSensorFrameCache.set(applyLowVelocityFilter(oldRightPose, right)); - } else { - _leftFootControllerPoseInSensorFrameCache.set(left); - _rightFootControllerPoseInSensorFrameCache.set(right); - } + _leftFootControllerPoseInSensorFrameCache.set(left); + _rightFootControllerPoseInSensorFrameCache.set(right); } controller::Pose MyAvatar::getLeftFootControllerPoseInSensorFrame() const { @@ -1384,15 +1502,8 @@ controller::Pose MyAvatar::getRightFootControllerPoseInAvatarFrame() const { } void MyAvatar::setSpineControllerPosesInSensorFrame(const controller::Pose& hips, const controller::Pose& spine2) { - if (controller::InputDevice::getLowVelocityFilter()) { - auto oldHipsPose = getHipsControllerPoseInSensorFrame(); - auto oldSpine2Pose = getSpine2ControllerPoseInSensorFrame(); - _hipsControllerPoseInSensorFrameCache.set(applyLowVelocityFilter(oldHipsPose, hips)); - _spine2ControllerPoseInSensorFrameCache.set(applyLowVelocityFilter(oldSpine2Pose, spine2)); - } else { - _hipsControllerPoseInSensorFrameCache.set(hips); - _spine2ControllerPoseInSensorFrameCache.set(spine2); - } + _hipsControllerPoseInSensorFrameCache.set(hips); + _spine2ControllerPoseInSensorFrameCache.set(spine2); } controller::Pose MyAvatar::getHipsControllerPoseInSensorFrame() const { @@ -1422,12 +1533,7 @@ controller::Pose MyAvatar::getSpine2ControllerPoseInAvatarFrame() const { } void MyAvatar::setHeadControllerPoseInSensorFrame(const controller::Pose& head) { - if (controller::InputDevice::getLowVelocityFilter()) { - auto oldHeadPose = getHeadControllerPoseInSensorFrame(); - _headControllerPoseInSensorFrameCache.set(applyLowVelocityFilter(oldHeadPose, head)); - } else { - _headControllerPoseInSensorFrameCache.set(head); - } + _headControllerPoseInSensorFrameCache.set(head); } controller::Pose MyAvatar::getHeadControllerPoseInSensorFrame() const { @@ -1443,18 +1549,49 @@ controller::Pose MyAvatar::getHeadControllerPoseInAvatarFrame() const { return getHeadControllerPoseInWorldFrame().transform(invAvatarMatrix); } +void MyAvatar::setArmControllerPosesInSensorFrame(const controller::Pose& left, const controller::Pose& right) { + _leftArmControllerPoseInSensorFrameCache.set(left); + _rightArmControllerPoseInSensorFrameCache.set(right); +} + +controller::Pose MyAvatar::getLeftArmControllerPoseInSensorFrame() const { + return _leftArmControllerPoseInSensorFrameCache.get(); +} + +controller::Pose MyAvatar::getRightArmControllerPoseInSensorFrame() const { + return _rightArmControllerPoseInSensorFrameCache.get(); +} + +controller::Pose MyAvatar::getLeftArmControllerPoseInWorldFrame() const { + return getLeftArmControllerPoseInSensorFrame().transform(getSensorToWorldMatrix()); +} + +controller::Pose MyAvatar::getRightArmControllerPoseInWorldFrame() const { + return getRightArmControllerPoseInSensorFrame().transform(getSensorToWorldMatrix()); +} + +controller::Pose MyAvatar::getLeftArmControllerPoseInAvatarFrame() const { + glm::mat4 worldToAvatarMat = glm::inverse(createMatFromQuatAndPos(getOrientation(), getPosition())); + return getLeftArmControllerPoseInWorldFrame().transform(worldToAvatarMat); +} + +controller::Pose MyAvatar::getRightArmControllerPoseInAvatarFrame() const { + glm::mat4 worldToAvatarMat = glm::inverse(createMatFromQuatAndPos(getOrientation(), getPosition())); + return getRightArmControllerPoseInWorldFrame().transform(worldToAvatarMat); +} + void MyAvatar::updateMotors() { _characterController.clearMotors(); glm::quat motorRotation; if (_motionBehaviors & AVATAR_MOTION_ACTION_MOTOR_ENABLED) { if (_characterController.getState() == CharacterController::State::Hover || _characterController.computeCollisionGroup() == BULLET_COLLISION_GROUP_COLLISIONLESS) { - motorRotation = getMyHead()->getCameraOrientation(); + motorRotation = getMyHead()->getHeadOrientation(); } else { // non-hovering = walking: follow camera twist about vertical but not lift // so we decompose camera's rotation and store the twist part in motorRotation glm::quat liftRotation; - swingTwistDecomposition(getMyHead()->getCameraOrientation(), _worldUpDirection, liftRotation, motorRotation); + swingTwistDecomposition(getMyHead()->getHeadOrientation(), _worldUpDirection, liftRotation, motorRotation); } const float DEFAULT_MOTOR_TIMESCALE = 0.2f; const float INVALID_MOTOR_TIMESCALE = 1.0e6f; @@ -1468,7 +1605,7 @@ void MyAvatar::updateMotors() { } if (_motionBehaviors & AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED) { if (_scriptedMotorFrame == SCRIPTED_MOTOR_CAMERA_FRAME) { - motorRotation = getMyHead()->getCameraOrientation() * glm::angleAxis(PI, Vectors::UNIT_Y); + motorRotation = getMyHead()->getHeadOrientation() * glm::angleAxis(PI, Vectors::UNIT_Y); } else if (_scriptedMotorFrame == SCRIPTED_MOTOR_AVATAR_FRAME) { motorRotation = getOrientation() * glm::angleAxis(PI, Vectors::UNIT_Y); } else { @@ -1498,7 +1635,8 @@ void MyAvatar::prepareForPhysicsSimulation() { _characterController.setParentVelocity(parentVelocity); _characterController.setPositionAndOrientation(getPosition(), getOrientation()); - if (qApp->isHMDMode()) { + auto headPose = getHeadControllerPoseInAvatarFrame(); + if (headPose.isValid()) { _follow.prePhysicsUpdate(*this, deriveBodyFromHMDSensor(), _bodySensorMatrix, hasDriveInput()); } else { _follow.deactivate(); @@ -1518,6 +1656,10 @@ void MyAvatar::harvestResultsFromPhysicsSimulation(float deltaTime) { if (_characterController.isEnabledAndReady()) { setVelocity(_characterController.getLinearVelocity() + _characterController.getFollowVelocity()); + if (_characterController.isStuck()) { + _physicsSafetyPending = true; + _goToPosition = getPosition(); + } } else { setVelocity(getVelocity() + _characterController.getFollowVelocity()); } @@ -1663,7 +1805,7 @@ void MyAvatar::setAnimGraphUrl(const QUrl& url) { _skeletonModel->reset(); // Why is this necessary? Without this, we crash in the next render. _currentAnimGraphUrl.set(url); - _rig->initAnimGraph(url); + _skeletonModel->getRig().initAnimGraph(url); _bodySensorMatrix = deriveBodyFromHMDSensor(); // Based on current cached HMD position/rotation.. updateSensorToWorldMatrix(); // Uses updated position/orientation and _bodySensorMatrix changes @@ -1679,7 +1821,7 @@ void MyAvatar::initAnimGraph() { graphUrl = QUrl::fromLocalFile(PathUtils::resourcesPath() + "avatar/avatar-animation.json"); } - _rig->initAnimGraph(graphUrl); + _skeletonModel->getRig().initAnimGraph(graphUrl); _currentAnimGraphUrl.set(graphUrl); _bodySensorMatrix = deriveBodyFromHMDSensor(); // Based on current cached HMD position/rotation.. @@ -1687,7 +1829,7 @@ void MyAvatar::initAnimGraph() { } void MyAvatar::destroyAnimGraph() { - _rig->destroyAnimGraph(); + _skeletonModel->getRig().destroyAnimGraph(); } void MyAvatar::postUpdate(float deltaTime) { @@ -1703,22 +1845,23 @@ void MyAvatar::postUpdate(float deltaTime) { if (_enableDebugDrawDefaultPose || _enableDebugDrawAnimPose) { - auto animSkeleton = _rig->getAnimSkeleton(); + auto animSkeleton = _skeletonModel->getRig().getAnimSkeleton(); // the rig is in the skeletonModel frame AnimPose xform(glm::vec3(1), _skeletonModel->getRotation(), _skeletonModel->getTranslation()); if (_enableDebugDrawDefaultPose && animSkeleton) { glm::vec4 gray(0.2f, 0.2f, 0.2f, 0.2f); - AnimDebugDraw::getInstance().addAbsolutePoses("myAvatarDefaultPoses", animSkeleton, _rig->getAbsoluteDefaultPoses(), xform, gray); + AnimDebugDraw::getInstance().addAbsolutePoses("myAvatarDefaultPoses", animSkeleton, _skeletonModel->getRig().getAbsoluteDefaultPoses(), xform, gray); } if (_enableDebugDrawAnimPose && animSkeleton) { // build absolute AnimPoseVec from rig AnimPoseVec absPoses; - absPoses.reserve(_rig->getJointStateCount()); - for (int i = 0; i < _rig->getJointStateCount(); i++) { - absPoses.push_back(AnimPose(_rig->getJointTransform(i))); + const Rig& rig = _skeletonModel->getRig(); + absPoses.reserve(rig.getJointStateCount()); + for (int i = 0; i < rig.getJointStateCount(); i++) { + absPoses.push_back(AnimPose(rig.getJointTransform(i))); } glm::vec4 cyan(0.1f, 0.6f, 0.6f, 1.0f); AnimDebugDraw::getInstance().addAbsolutePoses("myAvatarAnimPoses", animSkeleton, absPoses, xform, cyan); @@ -1762,15 +1905,14 @@ void MyAvatar::preDisplaySide(RenderArgs* renderArgs) { const float RENDER_HEAD_CUTOFF_DISTANCE = 0.3f; -bool MyAvatar::cameraInsideHead() const { - const glm::vec3 cameraPosition = qApp->getCamera().getPosition(); +bool MyAvatar::cameraInsideHead(const glm::vec3& cameraPosition) const { return glm::length(cameraPosition - getHeadPosition()) < (RENDER_HEAD_CUTOFF_DISTANCE * getUniformScale()); } bool MyAvatar::shouldRenderHead(const RenderArgs* renderArgs) const { bool defaultMode = renderArgs->_renderMode == RenderArgs::DEFAULT_RENDER_MODE; bool firstPerson = qApp->getCamera().getMode() == CAMERA_MODE_FIRST_PERSON; - bool insideHead = cameraInsideHead(); + bool insideHead = cameraInsideHead(renderArgs->getViewFrustum().getPosition()); return !defaultMode || !firstPerson || !insideHead; } @@ -1806,15 +1948,17 @@ void MyAvatar::updateOrientation(float deltaTime) { // Comfort Mode: If you press any of the left/right rotation drive keys or input, you'll // get an instantaneous 15 degree turn. If you keep holding the key down you'll get another // snap turn every half second. + bool snapTurn = false; if (getDriveKey(STEP_YAW) != 0.0f) { totalBodyYaw += getDriveKey(STEP_YAW); + snapTurn = true; } // use head/HMD orientation to turn while flying if (getCharacterController()->getState() == CharacterController::State::Hover) { // This is the direction the user desires to fly in. - glm::vec3 desiredFacing = getMyHead()->getCameraOrientation() * Vectors::UNIT_Z; + glm::vec3 desiredFacing = getMyHead()->getHeadOrientation() * Vectors::UNIT_Z; desiredFacing.y = 0.0f; // This is our reference frame, it is captured when the user begins to move. @@ -1840,17 +1984,48 @@ void MyAvatar::updateOrientation(float deltaTime) { totalBodyYaw += (speedFactor * deltaAngle * (180.0f / PI)); } + // Use head/HMD roll to turn while walking or flying. + if (qApp->isHMDMode() && _hmdRollControlEnabled) { + // Turn with head roll. + const float MIN_CONTROL_SPEED = 0.01f; + float speed = glm::length(getVelocity()); + if (speed >= MIN_CONTROL_SPEED) { + // Feather turn when stopping moving. + float speedFactor; + if (getDriveKey(TRANSLATE_Z) != 0.0f || _lastDrivenSpeed == 0.0f) { + _lastDrivenSpeed = speed; + speedFactor = 1.0f; + } else { + speedFactor = glm::min(speed / _lastDrivenSpeed, 1.0f); + } + + float direction = glm::dot(getVelocity(), getRotation() * Vectors::UNIT_NEG_Z) > 0.0f ? 1.0f : -1.0f; + + float rollAngle = glm::degrees(asinf(glm::dot(IDENTITY_UP, _hmdSensorOrientation * IDENTITY_RIGHT))); + float rollSign = rollAngle < 0.0f ? -1.0f : 1.0f; + rollAngle = fabsf(rollAngle); + rollAngle = rollAngle > _hmdRollControlDeadZone ? rollSign * (rollAngle - _hmdRollControlDeadZone) : 0.0f; + + totalBodyYaw += speedFactor * direction * rollAngle * deltaTime * _hmdRollControlRate; + } + } // update body orientation by movement inputs + glm::quat initialOrientation = getOrientationOutbound(); setOrientation(getOrientation() * glm::quat(glm::radians(glm::vec3(0.0f, totalBodyYaw, 0.0f)))); + if (snapTurn) { + // Whether or not there is an existing smoothing going on, just reset the smoothing timer and set the starting position as the avatar's current position, then smooth to the new position. + _smoothOrientationInitial = initialOrientation; + _smoothOrientationTarget = getOrientation(); + _smoothOrientationTimer = 0.0f; + } + getHead()->setBasePitch(getHead()->getBasePitch() + getDriveKey(PITCH) * _pitchSpeed * deltaTime); - if (qApp->isHMDMode()) { - glm::quat orientation = glm::quat_cast(getSensorToWorldMatrix()) * getHMDSensorOrientation(); - glm::quat bodyOrientation = getWorldBodyOrientation(); - glm::quat localOrientation = glm::inverse(bodyOrientation) * orientation; - + auto headPose = getHeadControllerPoseInAvatarFrame(); + if (headPose.isValid()) { + glm::quat localOrientation = headPose.rotation * Quaternions::Y_180; // these angles will be in radians // ... so they need to be converted to degrees before we do math... glm::vec3 euler = glm::eulerAngles(localOrientation) * DEGREES_PER_RADIAN; @@ -1964,11 +2139,14 @@ void MyAvatar::updatePosition(float deltaTime) { } // capture the head rotation, in sensor space, when the user first indicates they would like to move/fly. - if (!_hoverReferenceCameraFacingIsCaptured && (fabs(getDriveKey(TRANSLATE_Z)) > 0.1f || fabs(getDriveKey(TRANSLATE_X)) > 0.1f)) { + if (!_hoverReferenceCameraFacingIsCaptured && + (fabs(getDriveKey(TRANSLATE_Z)) > 0.1f || fabs(getDriveKey(TRANSLATE_X)) > 0.1f)) { _hoverReferenceCameraFacingIsCaptured = true; // transform the camera facing vector into sensor space. - _hoverReferenceCameraFacing = transformVectorFast(glm::inverse(_sensorToWorldMatrix), getMyHead()->getCameraOrientation() * Vectors::UNIT_Z); - } else if (_hoverReferenceCameraFacingIsCaptured && (fabs(getDriveKey(TRANSLATE_Z)) <= 0.1f && fabs(getDriveKey(TRANSLATE_X)) <= 0.1f)) { + _hoverReferenceCameraFacing = transformVectorFast(glm::inverse(_sensorToWorldMatrix), + getMyHead()->getHeadOrientation() * Vectors::UNIT_Z); + } else if (_hoverReferenceCameraFacingIsCaptured && + (fabs(getDriveKey(TRANSLATE_Z)) <= 0.1f && fabs(getDriveKey(TRANSLATE_X)) <= 0.1f)) { _hoverReferenceCameraFacingIsCaptured = false; } } @@ -2049,6 +2227,14 @@ void MyAvatar::clampScaleChangeToDomainLimits(float desiredScale) { qCDebug(interfaceapp, "Changed scale to %f", (double)_targetScale); } +float MyAvatar::getDomainMinScale() { + return _domainMinimumScale; +} + +float MyAvatar::getDomainMaxScale() { + return _domainMaximumScale; +} + void MyAvatar::increaseSize() { // make sure we're starting from an allowable scale clampTargetScaleToDomainLimits(); @@ -2179,6 +2365,144 @@ void MyAvatar::goToLocation(const glm::vec3& newPosition, emit transformChanged(); } +void MyAvatar::goToLocationAndEnableCollisions(const glm::vec3& position) { // See use case in safeLanding. + goToLocation(position); + QMetaObject::invokeMethod(this, "setCollisionsEnabled", Qt::QueuedConnection, Q_ARG(bool, true)); +} +bool MyAvatar::safeLanding(const glm::vec3& position) { + // Considers all collision hull or non-collisionless primitive intersections on a vertical line through the point. + // There needs to be a "landing" if: + // a) the closest above and the closest below are less than the avatar capsule height apart, or + // b) the above point is the top surface of an entity, indicating that we are inside it. + // If no landing is required, we go to that point directly and return false; + // When a landing is required by a, we find the highest intersection on that closest-agbove entity + // (which may be that same "nearest above intersection"). That highest intersection is the candidate landing point. + // For b, use that top surface point. + // We then place our feet there, recurse with new capsule center point, and return true. + + if (QThread::currentThread() != thread()) { + bool result; + BLOCKING_INVOKE_METHOD(this, "safeLanding", Q_RETURN_ARG(bool, result), Q_ARG(const glm::vec3&, position)); + return result; + } + glm::vec3 better; + if (!requiresSafeLanding(position, better)) { + return false; + } + if (!getCollisionsEnabled()) { + goToLocation(better); // recurses on next update + } else { // If you try to go while stuck, physics will keep you stuck. + setCollisionsEnabled(false); + // Don't goToLocation just yet. Yield so that physics can act on the above. + QMetaObject::invokeMethod(this, "goToLocationAndEnableCollisions", Qt::QueuedConnection, // The equivalent of javascript nextTick + Q_ARG(glm::vec3, better)); + } + return true; +} + +// If position is not reliably safe from being stuck by physics, answer true and place a candidate better position in betterPositionOut. +bool MyAvatar::requiresSafeLanding(const glm::vec3& positionIn, glm::vec3& betterPositionOut) { + // We begin with utilities and tests. The Algorithm in four parts is below. + auto halfHeight = _characterController.getCapsuleHalfHeight() + _characterController.getCapsuleRadius(); + if (halfHeight == 0) { + return false; // zero height avatar + } + auto entityTree = DependencyManager::get()->getTree(); + if (!entityTree) { + return false; // no entity tree + } + // More utilities. + const auto offset = getOrientation() *_characterController.getCapsuleLocalOffset(); + const auto capsuleCenter = positionIn + offset; + const auto up = _worldUpDirection, down = -up; + glm::vec3 upperIntersection, upperNormal, lowerIntersection, lowerNormal; + EntityItemID upperId, lowerId; + QVector include{}, ignore{}; + auto mustMove = [&] { // Place bottom of capsule at the upperIntersection, and check again based on the capsule center. + betterPositionOut = upperIntersection + (up * halfHeight) - offset; + return true; + }; + auto findIntersection = [&](const glm::vec3& startPointIn, const glm::vec3& directionIn, glm::vec3& intersectionOut, EntityItemID& entityIdOut, glm::vec3& normalOut) { + OctreeElementPointer element; + EntityItemPointer intersectedEntity = NULL; + float distance; + BoxFace face; + const bool visibleOnly = false; + // This isn't quite what we really want here. findRayIntersection always works on mesh, skipping entirely based on collidable. + // What we really want is to use the collision hull! + // See https://highfidelity.fogbugz.com/f/cases/5003/findRayIntersection-has-option-to-use-collidableOnly-but-doesn-t-actually-use-colliders + const bool collidableOnly = true; + const bool precisionPicking = true; + const auto lockType = Octree::Lock; // Should we refactor to take a lock just once? + bool* accurateResult = NULL; + + bool intersects = entityTree->findRayIntersection(startPointIn, directionIn, include, ignore, visibleOnly, collidableOnly, precisionPicking, + element, distance, face, normalOut, (void**)&intersectedEntity, lockType, accurateResult); + if (!intersects || !intersectedEntity) { + return false; + } + intersectionOut = startPointIn + (directionIn * distance); + entityIdOut = intersectedEntity->getEntityItemID(); + return true; + }; + + // The Algorithm, in four parts: + + if (!findIntersection(capsuleCenter, up, upperIntersection, upperId, upperNormal)) { + // We currently believe that physics will reliably push us out if our feet are embedded, + // as long as our capsule center is out and there's room above us. Here we have those + // conditions, so no need to check our feet below. + return false; // nothing above + } + + if (!findIntersection(capsuleCenter, down, lowerIntersection, lowerId, lowerNormal)) { + // Our head may be embedded, but our center is out and there's room below. See corresponding comment above. + return false; // nothing below + } + + // See if we have room between entities above and below, but that we are not contained. + // First check if the surface above us is the bottom of something, and the surface below us it the top of something. + // I.e., we are in a clearing between two objects. + if (isDown(upperNormal) && isUp(lowerNormal)) { + auto spaceBetween = glm::distance(upperIntersection, lowerIntersection); + const float halfHeightFactor = 2.5f; // Until case 5003 is fixed (and maybe after?), we need a fudge factor. Also account for content modelers not being precise. + if (spaceBetween > (halfHeightFactor * halfHeight)) { + // There is room for us to fit in that clearing. If there wasn't, physics would oscilate us between the objects above and below. + // We're now going to iterate upwards through successive upperIntersections, testing to see if we're contained within the top surface of some entity. + // There will be one of two outcomes: + // a) We're not contained, so we have enough room and our position is good. + // b) We are contained, so we'll bail out of this but try again at a position above the containing entity. + const int iterationLimit = 1000; + for (int counter = 0; counter < iterationLimit; counter++) { + ignore.push_back(upperId); + if (!findIntersection(upperIntersection, up, upperIntersection, upperId, upperNormal)) { + // We're not inside an entity, and from the nested tests, we have room between what is above and below. So position is good! + return false; // enough room + } + if (isUp(upperNormal)) { + // This new intersection is the top surface of an entity that we have not yet seen, which means we're contained within it. + // We could break here and recurse from the top of the original ceiling, but since we've already done the work to find the top + // of the enclosing entity, let's put our feet at upperIntersection and start over. + return mustMove(); + } + // We found a new bottom surface, which we're not interested in. + // But there could still be a top surface above us for an entity we haven't seen, so keep looking upward. + } + qCDebug(interfaceapp) << "Loop in requiresSafeLanding. Floor/ceiling do not make sense."; + } + } + + include.push_back(upperId); // We're now looking for the intersection from above onto this entity. + const float big = (float)TREE_SCALE; + const auto skyHigh = up * big; + auto fromAbove = capsuleCenter + skyHigh; + if (!findIntersection(fromAbove, down, upperIntersection, upperId, upperNormal)) { + return false; // Unable to find a landing + } + // Our arbitrary rule is to always go up. There's no need to look down or sideways for a "closer" safe candidate. + return mustMove(); +} + void MyAvatar::updateMotionBehaviorFromMenu() { if (QThread::currentThread() != thread()) { @@ -2200,6 +2524,45 @@ void MyAvatar::updateMotionBehaviorFromMenu() { setCollisionsEnabled(menu->isOptionChecked(MenuOption::EnableAvatarCollisions)); } +void MyAvatar::setFlyingEnabled(bool enabled) { + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setFlyingEnabled", Q_ARG(bool, enabled)); + return; + } + + _enableFlying = enabled; +} + +bool MyAvatar::isFlying() { + // Avatar is Flying, and is not Falling, or Taking off + return _characterController.getState() == CharacterController::State::Hover; +} + +bool MyAvatar::isInAir() { + // If Avatar is Hover, Falling, or Taking off, they are in Air. + return _characterController.getState() != CharacterController::State::Ground; +} + +bool MyAvatar::getFlyingEnabled() { + // May return true even if client is not allowed to fly in the zone. + return _enableFlying; +} + +// Public interface for targetscale +float MyAvatar::getAvatarScale() { + return getTargetScale(); +} + +void MyAvatar::setAvatarScale(float val) { + + if (QThread::currentThread() != thread()) { + QMetaObject::invokeMethod(this, "setAvatarScale", Q_ARG(float, val)); + return; + } + + setTargetScale(val); +} + void MyAvatar::setCollisionsEnabled(bool enabled) { if (QThread::currentThread() != thread()) { @@ -2282,35 +2645,27 @@ bool MyAvatar::isDriveKeyDisabled(DriveKeys key) const { } } -glm::vec3 MyAvatar::getWorldBodyPosition() const { - return transformPoint(_sensorToWorldMatrix, extractTranslation(_bodySensorMatrix)); -} - -glm::quat MyAvatar::getWorldBodyOrientation() const { - return glm::quat_cast(_sensorToWorldMatrix * _bodySensorMatrix); -} - // old school meat hook style glm::mat4 MyAvatar::deriveBodyFromHMDSensor() const { - - // HMD is in sensor space. - const glm::vec3 hmdPosition = getHMDSensorPosition(); - const glm::quat hmdOrientation = getHMDSensorOrientation(); - const glm::quat hmdOrientationYawOnly = cancelOutRollAndPitch(hmdOrientation); - - int rightEyeIndex = _rig->indexOfJoint("RightEye"); - int leftEyeIndex = _rig->indexOfJoint("LeftEye"); - int neckIndex = _rig->indexOfJoint("Neck"); - int hipsIndex = _rig->indexOfJoint("Hips"); - - glm::vec3 rigMiddleEyePos = DEFAULT_AVATAR_MIDDLE_EYE_POS; - if (leftEyeIndex >= 0 && rightEyeIndex >= 0) { - rigMiddleEyePos = (_rig->getAbsoluteDefaultPose(leftEyeIndex).trans() + _rig->getAbsoluteDefaultPose(rightEyeIndex).trans()) / 2.0f; + glm::vec3 headPosition; + glm::quat headOrientation; + auto headPose = getHeadControllerPoseInSensorFrame(); + if (headPose.isValid()) { + headPosition = getHeadControllerPoseInSensorFrame().translation; + headOrientation = getHeadControllerPoseInSensorFrame().rotation * Quaternions::Y_180; } - glm::vec3 rigNeckPos = neckIndex != -1 ? _rig->getAbsoluteDefaultPose(neckIndex).trans() : DEFAULT_AVATAR_NECK_POS; - glm::vec3 rigHipsPos = hipsIndex != -1 ? _rig->getAbsoluteDefaultPose(hipsIndex).trans() : DEFAULT_AVATAR_HIPS_POS; + const glm::quat headOrientationYawOnly = cancelOutRollAndPitch(headOrientation); - glm::vec3 localEyes = (rigMiddleEyePos - rigHipsPos); + const Rig& rig = _skeletonModel->getRig(); + int headIndex = rig.indexOfJoint("Head"); + int neckIndex = rig.indexOfJoint("Neck"); + int hipsIndex = rig.indexOfJoint("Hips"); + + glm::vec3 rigHeadPos = headIndex != -1 ? rig.getAbsoluteDefaultPose(headIndex).trans() : DEFAULT_AVATAR_HEAD_POS; + glm::vec3 rigNeckPos = neckIndex != -1 ? rig.getAbsoluteDefaultPose(neckIndex).trans() : DEFAULT_AVATAR_NECK_POS; + glm::vec3 rigHipsPos = hipsIndex != -1 ? rig.getAbsoluteDefaultPose(hipsIndex).trans() : DEFAULT_AVATAR_HIPS_POS; + + glm::vec3 localHead = (rigHeadPos - rigHipsPos); glm::vec3 localNeck = (rigNeckPos - rigHipsPos); // apply simplistic head/neck model @@ -2319,11 +2674,11 @@ glm::mat4 MyAvatar::deriveBodyFromHMDSensor() const { // eyeToNeck offset is relative full HMD orientation. // while neckToRoot offset is only relative to HMDs yaw. // Y_180 is necessary because rig is z forward and hmdOrientation is -z forward - glm::vec3 eyeToNeck = hmdOrientation * Quaternions::Y_180 * (localNeck - localEyes); - glm::vec3 neckToRoot = hmdOrientationYawOnly * Quaternions::Y_180 * -localNeck; - glm::vec3 bodyPos = hmdPosition + eyeToNeck + neckToRoot; + glm::vec3 headToNeck = headOrientation * Quaternions::Y_180 * (localNeck - localHead); + glm::vec3 neckToRoot = headOrientationYawOnly * Quaternions::Y_180 * -localNeck; + glm::vec3 bodyPos = headPosition + headToNeck + neckToRoot; - return createMatFromQuatAndPos(hmdOrientationYawOnly, bodyPos); + return createMatFromQuatAndPos(headOrientationYawOnly, bodyPos); } glm::vec3 MyAvatar::getPositionForAudio() { @@ -2439,7 +2794,7 @@ bool MyAvatar::FollowHelper::shouldActivateRotation(const MyAvatar& myAvatar, co } else { const float FOLLOW_ROTATION_THRESHOLD = cosf(PI / 6.0f); // 30 degrees glm::vec2 bodyFacing = getFacingDir2D(currentBodyMatrix); - return glm::dot(myAvatar.getHMDSensorFacingMovingAverage(), bodyFacing) < FOLLOW_ROTATION_THRESHOLD; + return glm::dot(-myAvatar.getHeadControllerFacingMovingAverage(), bodyFacing) < FOLLOW_ROTATION_THRESHOLD; } } @@ -2476,11 +2831,11 @@ bool MyAvatar::FollowHelper::shouldActivateVertical(const MyAvatar& myAvatar, co return (offset.y > CYLINDER_TOP) || (offset.y < CYLINDER_BOTTOM); } -void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, const glm::mat4& currentBodyMatrix, bool hasDriveInput) { - _desiredBodyMatrix = desiredBodyMatrix; +void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, const glm::mat4& desiredBodyMatrix, + const glm::mat4& currentBodyMatrix, bool hasDriveInput) { if (myAvatar.getHMDLeanRecenterEnabled()) { - if (!isActive(Rotation) && shouldActivateRotation(myAvatar, desiredBodyMatrix, currentBodyMatrix)) { + if (!isActive(Rotation) && (shouldActivateRotation(myAvatar, desiredBodyMatrix, currentBodyMatrix) || hasDriveInput)) { activate(Rotation); } if (!isActive(Horizontal) && shouldActivateHorizontal(myAvatar, desiredBodyMatrix, currentBodyMatrix)) { @@ -2491,7 +2846,7 @@ void MyAvatar::FollowHelper::prePhysicsUpdate(MyAvatar& myAvatar, const glm::mat } } - glm::mat4 desiredWorldMatrix = myAvatar.getSensorToWorldMatrix() * _desiredBodyMatrix; + glm::mat4 desiredWorldMatrix = myAvatar.getSensorToWorldMatrix() * desiredBodyMatrix; glm::mat4 currentWorldMatrix = myAvatar.getSensorToWorldMatrix() * currentBodyMatrix; AnimPose followWorldPose(currentWorldMatrix); @@ -2586,9 +2941,10 @@ glm::mat4 MyAvatar::computeCameraRelativeHandControllerMatrix(const glm::mat4& c cameraWorldMatrix *= createMatFromScaleQuatAndPos(vec3(-1.0f, 1.0f, 1.0f), glm::quat(), glm::vec3()); } - // compute a NEW sensorToWorldMatrix for the camera. The equation is cameraWorldMatrix = cameraSensorToWorldMatrix * _hmdSensorMatrix. + // compute a NEW sensorToWorldMatrix for the camera. + // The equation is cameraWorldMatrix = cameraSensorToWorldMatrix * _hmdSensorMatrix. // here we solve for the unknown cameraSensorToWorldMatrix. - glm::mat4 cameraSensorToWorldMatrix = cameraWorldMatrix * glm::inverse(_hmdSensorMatrix); + glm::mat4 cameraSensorToWorldMatrix = cameraWorldMatrix * glm::inverse(getHMDSensorMatrix()); // Using the new cameraSensorToWorldMatrix, compute where the controller is in world space. glm::mat4 controllerWorldMatrix = cameraSensorToWorldMatrix * controllerSensorMatrix; @@ -2674,74 +3030,119 @@ glm::vec3 MyAvatar::getAbsoluteJointTranslationInObjectFrame(int index) const { glm::mat4 MyAvatar::getCenterEyeCalibrationMat() const { // TODO: as an optimization cache this computation, then invalidate the cache when the avatar model is changed. - int rightEyeIndex = _rig->indexOfJoint("RightEye"); - int leftEyeIndex = _rig->indexOfJoint("LeftEye"); + int rightEyeIndex = _skeletonModel->getRig().indexOfJoint("RightEye"); + int leftEyeIndex = _skeletonModel->getRig().indexOfJoint("LeftEye"); if (rightEyeIndex >= 0 && leftEyeIndex >= 0) { auto centerEyePos = (getAbsoluteDefaultJointTranslationInObjectFrame(rightEyeIndex) + getAbsoluteDefaultJointTranslationInObjectFrame(leftEyeIndex)) * 0.5f; auto centerEyeRot = Quaternions::Y_180; return createMatFromQuatAndPos(centerEyeRot, centerEyePos); } else { - return createMatFromQuatAndPos(DEFAULT_AVATAR_MIDDLE_EYE_POS, DEFAULT_AVATAR_MIDDLE_EYE_POS); + return createMatFromQuatAndPos(DEFAULT_AVATAR_MIDDLE_EYE_ROT, DEFAULT_AVATAR_MIDDLE_EYE_POS); } } glm::mat4 MyAvatar::getHeadCalibrationMat() const { // TODO: as an optimization cache this computation, then invalidate the cache when the avatar model is changed. - int headIndex = _rig->indexOfJoint("Head"); + int headIndex = _skeletonModel->getRig().indexOfJoint("Head"); if (headIndex >= 0) { auto headPos = getAbsoluteDefaultJointTranslationInObjectFrame(headIndex); auto headRot = getAbsoluteDefaultJointRotationInObjectFrame(headIndex); return createMatFromQuatAndPos(headRot, headPos); } else { - return createMatFromQuatAndPos(DEFAULT_AVATAR_HEAD_POS, DEFAULT_AVATAR_HEAD_POS); + return createMatFromQuatAndPos(DEFAULT_AVATAR_HEAD_ROT, DEFAULT_AVATAR_HEAD_POS); } } glm::mat4 MyAvatar::getSpine2CalibrationMat() const { // TODO: as an optimization cache this computation, then invalidate the cache when the avatar model is changed. - int spine2Index = _rig->indexOfJoint("Spine2"); + int spine2Index = _skeletonModel->getRig().indexOfJoint("Spine2"); if (spine2Index >= 0) { auto spine2Pos = getAbsoluteDefaultJointTranslationInObjectFrame(spine2Index); auto spine2Rot = getAbsoluteDefaultJointRotationInObjectFrame(spine2Index); return createMatFromQuatAndPos(spine2Rot, spine2Pos); } else { - return createMatFromQuatAndPos(DEFAULT_AVATAR_SPINE2_POS, DEFAULT_AVATAR_SPINE2_POS); + return createMatFromQuatAndPos(DEFAULT_AVATAR_SPINE2_ROT, DEFAULT_AVATAR_SPINE2_POS); } } glm::mat4 MyAvatar::getHipsCalibrationMat() const { // TODO: as an optimization cache this computation, then invalidate the cache when the avatar model is changed. - int hipsIndex = _rig->indexOfJoint("Hips"); + int hipsIndex = _skeletonModel->getRig().indexOfJoint("Hips"); if (hipsIndex >= 0) { auto hipsPos = getAbsoluteDefaultJointTranslationInObjectFrame(hipsIndex); auto hipsRot = getAbsoluteDefaultJointRotationInObjectFrame(hipsIndex); return createMatFromQuatAndPos(hipsRot, hipsPos); } else { - return createMatFromQuatAndPos(DEFAULT_AVATAR_HIPS_POS, DEFAULT_AVATAR_HIPS_POS); + return createMatFromQuatAndPos(DEFAULT_AVATAR_HIPS_ROT, DEFAULT_AVATAR_HIPS_POS); } } glm::mat4 MyAvatar::getLeftFootCalibrationMat() const { // TODO: as an optimization cache this computation, then invalidate the cache when the avatar model is changed. - int leftFootIndex = _rig->indexOfJoint("LeftFoot"); + int leftFootIndex = _skeletonModel->getRig().indexOfJoint("LeftFoot"); if (leftFootIndex >= 0) { auto leftFootPos = getAbsoluteDefaultJointTranslationInObjectFrame(leftFootIndex); auto leftFootRot = getAbsoluteDefaultJointRotationInObjectFrame(leftFootIndex); return createMatFromQuatAndPos(leftFootRot, leftFootPos); } else { - return createMatFromQuatAndPos(DEFAULT_AVATAR_LEFTFOOT_POS, DEFAULT_AVATAR_LEFTFOOT_POS); + return createMatFromQuatAndPos(DEFAULT_AVATAR_LEFTFOOT_ROT, DEFAULT_AVATAR_LEFTFOOT_POS); } } glm::mat4 MyAvatar::getRightFootCalibrationMat() const { // TODO: as an optimization cache this computation, then invalidate the cache when the avatar model is changed. - int rightFootIndex = _rig->indexOfJoint("RightFoot"); + int rightFootIndex = _skeletonModel->getRig().indexOfJoint("RightFoot"); if (rightFootIndex >= 0) { auto rightFootPos = getAbsoluteDefaultJointTranslationInObjectFrame(rightFootIndex); auto rightFootRot = getAbsoluteDefaultJointRotationInObjectFrame(rightFootIndex); return createMatFromQuatAndPos(rightFootRot, rightFootPos); } else { - return createMatFromQuatAndPos(DEFAULT_AVATAR_RIGHTFOOT_POS, DEFAULT_AVATAR_RIGHTFOOT_POS); + return createMatFromQuatAndPos(DEFAULT_AVATAR_RIGHTFOOT_ROT, DEFAULT_AVATAR_RIGHTFOOT_POS); + } +} + + +glm::mat4 MyAvatar::getRightArmCalibrationMat() const { + int rightArmIndex = _skeletonModel->getRig().indexOfJoint("RightArm"); + if (rightArmIndex >= 0) { + auto rightArmPos = getAbsoluteDefaultJointTranslationInObjectFrame(rightArmIndex); + auto rightArmRot = getAbsoluteDefaultJointRotationInObjectFrame(rightArmIndex); + return createMatFromQuatAndPos(rightArmRot, rightArmPos); + } else { + return createMatFromQuatAndPos(DEFAULT_AVATAR_RIGHTARM_ROT, DEFAULT_AVATAR_RIGHTARM_POS); + } +} + +glm::mat4 MyAvatar::getLeftArmCalibrationMat() const { + int leftArmIndex = _skeletonModel->getRig().indexOfJoint("LeftArm"); + if (leftArmIndex >= 0) { + auto leftArmPos = getAbsoluteDefaultJointTranslationInObjectFrame(leftArmIndex); + auto leftArmRot = getAbsoluteDefaultJointRotationInObjectFrame(leftArmIndex); + return createMatFromQuatAndPos(leftArmRot, leftArmPos); + } else { + return createMatFromQuatAndPos(DEFAULT_AVATAR_LEFTARM_ROT, DEFAULT_AVATAR_LEFTARM_POS); + } +} + +glm::mat4 MyAvatar::getRightHandCalibrationMat() const { + int rightHandIndex = _skeletonModel->getRig().indexOfJoint("RightHand"); + if (rightHandIndex >= 0) { + auto rightHandPos = getAbsoluteDefaultJointTranslationInObjectFrame(rightHandIndex); + auto rightHandRot = getAbsoluteDefaultJointRotationInObjectFrame(rightHandIndex); + return createMatFromQuatAndPos(rightHandRot, rightHandPos); + } else { + return createMatFromQuatAndPos(DEFAULT_AVATAR_RIGHTHAND_ROT, DEFAULT_AVATAR_RIGHTHAND_POS); + } +} + +glm::mat4 MyAvatar::getLeftHandCalibrationMat() const { + int leftHandIndex = _skeletonModel->getRig().indexOfJoint("LeftHand"); + if (leftHandIndex >= 0) { + auto leftHandPos = getAbsoluteDefaultJointTranslationInObjectFrame(leftHandIndex); + auto leftHandRot = getAbsoluteDefaultJointRotationInObjectFrame(leftHandIndex); + return createMatFromQuatAndPos(leftHandRot, leftHandPos); + } else { + return createMatFromQuatAndPos(DEFAULT_AVATAR_LEFTHAND_ROT, DEFAULT_AVATAR_LEFTHAND_POS); } } @@ -2755,7 +3156,7 @@ bool MyAvatar::pinJoint(int index, const glm::vec3& position, const glm::quat& o slamPosition(position); setOrientation(orientation); - _rig->setMaxHipsOffsetLength(0.05f); + _skeletonModel->getRig().setMaxHipsOffsetLength(0.05f); auto it = std::find(_pinnedJoints.begin(), _pinnedJoints.end(), index); if (it == _pinnedJoints.end()) { @@ -2772,7 +3173,7 @@ bool MyAvatar::clearPinOnJoint(int index) { auto hipsIndex = getJointIndex("Hips"); if (index == hipsIndex) { - _rig->setMaxHipsOffsetLength(FLT_MAX); + _skeletonModel->getRig().setMaxHipsOffsetLength(FLT_MAX); } return true; @@ -2781,7 +3182,7 @@ bool MyAvatar::clearPinOnJoint(int index) { } float MyAvatar::getIKErrorOnLastSolve() const { - return _rig->getIKErrorOnLastSolve(); + return _skeletonModel->getRig().getIKErrorOnLastSolve(); } // thread-safe @@ -2817,6 +3218,6 @@ void MyAvatar::updateHoldActions(const AnimPose& prePhysicsPose, const AnimPose& } } -const MyHead* MyAvatar::getMyHead() const { - return static_cast(getHead()); +const MyHead* MyAvatar::getMyHead() const { + return static_cast(getHead()); } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 04fa37cb1d..648a5b5f29 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -56,6 +56,7 @@ class MyAvatar : public Avatar { * * @namespace MyAvatar * @augments Avatar + * @property qmlPosition {Vec3} Used as a stopgap for position access by QML, as glm::vec3 is unavailable outside of scripts * @property shouldRenderLocally {bool} Set it to true if you would like to see MyAvatar in your local interface, * and false if you would not like to see MyAvatar in your local interface. * @property motorVelocity {Vec3} Can be used to move the avatar with this velocity. @@ -101,6 +102,10 @@ class MyAvatar : public Avatar { * "scripts/system/controllers/toggleAdvancedMovementForHandControllers.js". */ + // FIXME: `glm::vec3 position` is not accessible from QML, so this exposes position in a QML-native type + Q_PROPERTY(QVector3D qmlPosition READ getQmlPosition) + QVector3D getQmlPosition() { auto p = getPosition(); return QVector3D(p.x, p.y, p.z); } + Q_PROPERTY(bool shouldRenderLocally READ getShouldRenderLocally WRITE setShouldRenderLocally) Q_PROPERTY(glm::vec3 motorVelocity READ getScriptedMotorVelocity WRITE setScriptedMotorVelocity) Q_PROPERTY(float motorTimescale READ getScriptedMotorTimescale WRITE setScriptedMotorTimescale) @@ -125,13 +130,17 @@ class MyAvatar : public Avatar { Q_PROPERTY(controller::Pose rightHandTipPose READ getRightHandTipPose) Q_PROPERTY(float energy READ getEnergy WRITE setEnergy) - Q_PROPERTY(float isAway READ getIsAway WRITE setAway) + Q_PROPERTY(bool isAway READ getIsAway WRITE setAway) Q_PROPERTY(bool hmdLeanRecenterEnabled READ getHMDLeanRecenterEnabled WRITE setHMDLeanRecenterEnabled) Q_PROPERTY(bool collisionsEnabled READ getCollisionsEnabled WRITE setCollisionsEnabled) Q_PROPERTY(bool characterControllerEnabled READ getCharacterControllerEnabled WRITE setCharacterControllerEnabled) Q_PROPERTY(bool useAdvancedMovementControls READ useAdvancedMovementControls WRITE setUseAdvancedMovementControls) + Q_PROPERTY(bool hmdRollControlEnabled READ getHMDRollControlEnabled WRITE setHMDRollControlEnabled) + Q_PROPERTY(float hmdRollControlDeadZone READ getHMDRollControlDeadZone WRITE setHMDRollControlDeadZone) + Q_PROPERTY(float hmdRollControlRate READ getHMDRollControlRate WRITE setHMDRollControlRate) + public: enum DriveKeys { TRANSLATE_X = 0, @@ -148,7 +157,7 @@ public: }; Q_ENUM(DriveKeys) - explicit MyAvatar(QThread* thread, RigPointer rig); + explicit MyAvatar(QThread* thread); ~MyAvatar(); void instantiableAvatar() override {}; @@ -185,11 +194,12 @@ public: const glm::mat4& getHMDSensorMatrix() const { return _hmdSensorMatrix; } const glm::vec3& getHMDSensorPosition() const { return _hmdSensorPosition; } const glm::quat& getHMDSensorOrientation() const { return _hmdSensorOrientation; } - const glm::vec2& getHMDSensorFacingMovingAverage() const { return _hmdSensorFacingMovingAverage; } Q_INVOKABLE void setOrientationVar(const QVariant& newOrientationVar); Q_INVOKABLE QVariant getOrientationVar() const; + // A method intended to be overriden by MyAvatar for polling orientation for network transmission. + glm::quat getOrientationOutbound() const override; // Pass a recent sample of the HMD to the avatar. // This can also update the avatar's position to follow the HMD @@ -320,9 +330,9 @@ public: // adding one of the other handlers. While any handler may change a value in animStateDictionaryIn (or supply different values in animStateDictionaryOut) // a handler must not remove properties from animStateDictionaryIn, nor change property values that it does not intend to change. // It is not specified in what order multiple handlers are called. - Q_INVOKABLE QScriptValue addAnimationStateHandler(QScriptValue handler, QScriptValue propertiesList) { return _rig->addAnimationStateHandler(handler, propertiesList); } + Q_INVOKABLE QScriptValue addAnimationStateHandler(QScriptValue handler, QScriptValue propertiesList) { return _skeletonModel->getRig().addAnimationStateHandler(handler, propertiesList); } // Removes a handler previously added by addAnimationStateHandler. - Q_INVOKABLE void removeAnimationStateHandler(QScriptValue handler) { _rig->removeAnimationStateHandler(handler); } + Q_INVOKABLE void removeAnimationStateHandler(QScriptValue handler) { _skeletonModel->getRig().removeAnimationStateHandler(handler); } Q_INVOKABLE bool getSnapTurn() const { return _useSnapTurn; } Q_INVOKABLE void setSnapTurn(bool on) { _useSnapTurn = on; } @@ -336,6 +346,13 @@ public: void setUseAdvancedMovementControls(bool useAdvancedMovementControls) { _useAdvancedMovementControls.set(useAdvancedMovementControls); } + void setHMDRollControlEnabled(bool value) { _hmdRollControlEnabled = value; } + bool getHMDRollControlEnabled() const { return _hmdRollControlEnabled; } + void setHMDRollControlDeadZone(float value) { _hmdRollControlDeadZone = value; } + float getHMDRollControlDeadZone() const { return _hmdRollControlDeadZone; } + void setHMDRollControlRate(float value) { _hmdRollControlRate = value; } + float getHMDRollControlRate() const { return _hmdRollControlRate; } + // get/set avatar data void saveData(); void loadData(); @@ -349,7 +366,7 @@ public: float getDriveKey(DriveKeys key) const; Q_INVOKABLE float getRawDriveKey(DriveKeys key) const; void relayDriveKeysToCharacterController(); - + Q_INVOKABLE void disableDriveKey(DriveKeys key); Q_INVOKABLE void enableDriveKey(DriveKeys key); Q_INVOKABLE bool isDriveKeyDisabled(DriveKeys key) const; @@ -377,6 +394,15 @@ public: Q_INVOKABLE controller::Pose getLeftHandTipPose() const; Q_INVOKABLE controller::Pose getRightHandTipPose() const; + // world-space to avatar-space rigconversion functions + Q_INVOKABLE glm::vec3 worldToJointPoint(const glm::vec3& position, const int jointIndex = -1) const; + Q_INVOKABLE glm::vec3 worldToJointDirection(const glm::vec3& direction, const int jointIndex = -1) const; + Q_INVOKABLE glm::quat worldToJointRotation(const glm::quat& rotation, const int jointIndex = -1) const; + + Q_INVOKABLE glm::vec3 jointToWorldPoint(const glm::vec3& position, const int jointIndex = -1) const; + Q_INVOKABLE glm::vec3 jointToWorldDirection(const glm::vec3& direction, const int jointIndex = -1) const; + Q_INVOKABLE glm::quat jointToWorldRotation(const glm::quat& rotation, const int jointIndex = -1) const; + AvatarWeakPointer getLookAtTargetAvatar() const { return _lookAtTargetAvatar; } void updateLookAtTargetAvatar(); void clearLookAtTargetAvatar(); @@ -448,6 +474,11 @@ public: controller::Pose getLeftHandControllerPoseInAvatarFrame() const; controller::Pose getRightHandControllerPoseInAvatarFrame() const; + typedef std::map> FingerPosesMap; + void setFingerControllerPosesInSensorFrame(const FingerPosesMap& left, const FingerPosesMap& right); + FingerPosesMap getLeftHandFingerControllerPosesInSensorFrame() const; + FingerPosesMap getRightHandFingerControllerPosesInSensorFrame() const; + void setFootControllerPosesInSensorFrame(const controller::Pose& left, const controller::Pose& right); controller::Pose getLeftFootControllerPoseInSensorFrame() const; controller::Pose getRightFootControllerPoseInSensorFrame() const; @@ -468,9 +499,27 @@ public: controller::Pose getHeadControllerPoseInSensorFrame() const; controller::Pose getHeadControllerPoseInWorldFrame() const; controller::Pose getHeadControllerPoseInAvatarFrame() const; + const glm::vec2& getHeadControllerFacingMovingAverage() const { return _headControllerFacingMovingAverage; } + + + void setArmControllerPosesInSensorFrame(const controller::Pose& left, const controller::Pose& right); + controller::Pose getLeftArmControllerPoseInSensorFrame() const; + controller::Pose getRightArmControllerPoseInSensorFrame() const; + controller::Pose getLeftArmControllerPoseInWorldFrame() const; + controller::Pose getRightArmControllerPoseInWorldFrame() const; + controller::Pose getLeftArmControllerPoseInAvatarFrame() const; + controller::Pose getRightArmControllerPoseInAvatarFrame() const; bool hasDriveInput() const; + Q_INVOKABLE bool isFlying(); + Q_INVOKABLE bool isInAir(); + Q_INVOKABLE void setFlyingEnabled(bool enabled); + Q_INVOKABLE bool getFlyingEnabled(); + + Q_INVOKABLE float getAvatarScale(); + Q_INVOKABLE void setAvatarScale(float scale); + Q_INVOKABLE void setCollisionsEnabled(bool enabled); Q_INVOKABLE bool getCollisionsEnabled(); Q_INVOKABLE void setCharacterControllerEnabled(bool enabled); // deprecated @@ -486,6 +535,10 @@ public: glm::mat4 getHipsCalibrationMat() const; glm::mat4 getLeftFootCalibrationMat() const; glm::mat4 getRightFootCalibrationMat() const; + glm::mat4 getRightArmCalibrationMat() const; + glm::mat4 getLeftArmCalibrationMat() const; + glm::mat4 getLeftHandCalibrationMat() const; + glm::mat4 getRightHandCalibrationMat() const; void addHoldAction(AvatarActionHold* holdAction); // thread-safe void removeHoldAction(AvatarActionHold* holdAction); // thread-safe @@ -495,15 +548,23 @@ public: // results are in HMD frame glm::mat4 deriveBodyFromHMDSensor() const; + Q_INVOKABLE bool isUp(const glm::vec3& direction) { return glm::dot(direction, _worldUpDirection) > 0.0f; }; // true iff direction points up wrt avatar's definition of up. + Q_INVOKABLE bool isDown(const glm::vec3& direction) { return glm::dot(direction, _worldUpDirection) < 0.0f; }; + + public slots: void increaseSize(); void decreaseSize(); void resetSize(); + float getDomainMinScale(); + float getDomainMaxScale(); void goToLocation(const glm::vec3& newPosition, bool hasOrientation = false, const glm::quat& newOrientation = glm::quat(), bool shouldFaceLocation = false); void goToLocation(const QVariant& properties); + void goToLocationAndEnableCollisions(const glm::vec3& newPosition); + bool safeLanding(const glm::vec3& position); void restrictScaleFromDomainSettings(const QJsonObject& domainSettingsObject); void clearScaleRestriction(); @@ -521,6 +582,9 @@ public slots: void setEnableDebugDrawHandControllers(bool isEnabled); void setEnableDebugDrawSensorToWorldMatrix(bool isEnabled); void setEnableDebugDrawIKTargets(bool isEnabled); + void setEnableDebugDrawIKConstraints(bool isEnabled); + void setEnableDebugDrawIKChains(bool isEnabled); + bool getEnableMeshVisible() const { return _skeletonModel->isVisible(); } void setEnableMeshVisible(bool isEnabled); void setUseAnimPreAndPostRotations(bool isEnabled); @@ -544,14 +608,13 @@ signals: void onLoadComplete(); void wentAway(); void wentActive(); + void skeletonChanged(); private: - glm::vec3 getWorldBodyPosition() const; - glm::quat getWorldBodyOrientation() const; + bool requiresSafeLanding(const glm::vec3& positionIn, glm::vec3& positionOut); - - virtual QByteArray toByteArrayStateful(AvatarDataDetail dataDetail) override; + virtual QByteArray toByteArrayStateful(AvatarDataDetail dataDetail, bool dropFaceTracking) override; void simulate(float deltaTime); void updateFromTrackers(float deltaTime); @@ -574,7 +637,7 @@ private: float scale = 1.0f, bool isSoft = false, bool allowDuplicates = false, bool useSaved = true) override; - bool cameraInsideHead() const; + bool cameraInsideHead(const glm::vec3& cameraPosition) const; void updateEyeContactTarget(float deltaTime); @@ -595,6 +658,7 @@ private: std::array _driveKeys; std::bitset _disabledDriveKeys; + bool _enableFlying { true }; bool _wasPushing { false }; bool _isPushing { false }; bool _isBeingPushed { false }; @@ -632,6 +696,14 @@ private: Setting::Handle _realWorldFieldOfView; Setting::Handle _useAdvancedMovementControls; + // Smoothing. + const float SMOOTH_TIME_ORIENTATION = 0.5f; + + // Smoothing data for blending from one position/orientation to another on remote agents. + float _smoothOrientationTimer; + glm::quat _smoothOrientationInitial; + glm::quat _smoothOrientationTarget; + // private methods void updateOrientation(float deltaTime); void updateActionMotor(float deltaTime); @@ -649,16 +721,23 @@ private: bool _useSnapTurn { true }; bool _clearOverlayWhenMoving { true }; + const float ROLL_CONTROL_DEAD_ZONE_DEFAULT = 8.0f; // deg + const float ROLL_CONTROL_RATE_DEFAULT = 2.5f; // deg/sec/deg + bool _hmdRollControlEnabled { true }; + float _hmdRollControlDeadZone { ROLL_CONTROL_DEAD_ZONE_DEFAULT }; + float _hmdRollControlRate { ROLL_CONTROL_RATE_DEFAULT }; + float _lastDrivenSpeed { 0.0f }; + // working copies -- see AvatarData for thread-safe _sensorToWorldMatrixCache, used for outward facing access glm::mat4 _sensorToWorldMatrix { glm::mat4() }; - // cache of the current HMD sensor position and orientation - // in sensor space. + // cache of the current HMD sensor position and orientation in sensor space. glm::mat4 _hmdSensorMatrix; glm::quat _hmdSensorOrientation; glm::vec3 _hmdSensorPosition; - glm::vec2 _hmdSensorFacing; // facing vector in xz plane - glm::vec2 _hmdSensorFacingMovingAverage { 0, 0 }; // facing vector in xz plane + // cache head controller pose in sensor space + glm::vec2 _headControllerFacing; // facing vector in xz plane + glm::vec2 _headControllerFacingMovingAverage { 0, 0 }; // facing vector in xz plane // cache of the current body position and orientation of the avatar's body, // in sensor space. @@ -673,7 +752,6 @@ private: Vertical, NumFollowTypes }; - glm::mat4 _desiredBodyMatrix; float _timeRemaining[NumFollowTypes]; void deactivate(); @@ -692,12 +770,12 @@ private: }; FollowHelper _follow; - bool _goToPending; + bool _goToPending { false }; + bool _physicsSafetyPending { false }; glm::vec3 _goToPosition; glm::quat _goToOrientation; std::unordered_set _headBoneSet; - RigPointer _rig; bool _prevShouldDrawHead; bool _rigEnabled { true }; @@ -706,6 +784,8 @@ private: bool _enableDebugDrawHandControllers { false }; bool _enableDebugDrawSensorToWorldMatrix { false }; bool _enableDebugDrawIKTargets { false }; + bool _enableDebugDrawIKConstraints { false }; + bool _enableDebugDrawIKChains { false }; AudioListenerMode _audioListenerMode; glm::vec3 _customListenPosition; @@ -719,14 +799,17 @@ private: // These are stored in SENSOR frame ThreadSafeValueCache _leftHandControllerPoseInSensorFrameCache { controller::Pose() }; ThreadSafeValueCache _rightHandControllerPoseInSensorFrameCache { controller::Pose() }; - ThreadSafeValueCache _leftFootControllerPoseInSensorFrameCache{ controller::Pose() }; - ThreadSafeValueCache _rightFootControllerPoseInSensorFrameCache{ controller::Pose() }; - ThreadSafeValueCache _hipsControllerPoseInSensorFrameCache{ controller::Pose() }; - ThreadSafeValueCache _spine2ControllerPoseInSensorFrameCache{ controller::Pose() }; - ThreadSafeValueCache _headControllerPoseInSensorFrameCache{ controller::Pose() }; + ThreadSafeValueCache _leftHandFingerPosesInSensorFramceCache { }; + ThreadSafeValueCache _rightHandFingerPosesInSensorFramceCache { }; + ThreadSafeValueCache _leftFootControllerPoseInSensorFrameCache { controller::Pose() }; + ThreadSafeValueCache _rightFootControllerPoseInSensorFrameCache { controller::Pose() }; + ThreadSafeValueCache _hipsControllerPoseInSensorFrameCache { controller::Pose() }; + ThreadSafeValueCache _spine2ControllerPoseInSensorFrameCache { controller::Pose() }; + ThreadSafeValueCache _headControllerPoseInSensorFrameCache { controller::Pose() }; + ThreadSafeValueCache _leftArmControllerPoseInSensorFrameCache { controller::Pose() }; + ThreadSafeValueCache _rightArmControllerPoseInSensorFrameCache { controller::Pose() }; bool _hmdLeanRecenterEnabled = true; - AnimPose _prePhysicsRoomPose; std::mutex _holdActionsMutex; std::vector _holdActions; diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 9c1b3e8c70..acbfc8edf3 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -184,14 +184,10 @@ void setupPreferences() { { auto getter = [=]()->float { return myAvatar->getUniformScale(); }; auto setter = [=](float value) { myAvatar->setTargetScale(value); }; - - auto scaleSpinner = new SpinnerSliderPreference(AVATAR_TUNING, "Avatar Scale", getter, setter); - scaleSpinner->setMin(0.01f); - scaleSpinner->setMax(99.9f); - scaleSpinner->setDecimals(2); - scaleSpinner->setStep(1); - - preferences->addPreference(scaleSpinner); + auto preference = new SpinnerSliderPreference(AVATAR_TUNING, "Avatar Scale", getter, setter); + preference->setStep(0.1); + preference->setDecimals(2); + preferences->addPreference(preference); } { auto getter = []()->float { return DependencyManager::get()->getEyeClosingThreshold(); }; diff --git a/libraries/shared/src/Preferences.h b/libraries/shared/src/Preferences.h index 271df58951..6093cd3c8a 100644 --- a/libraries/shared/src/Preferences.h +++ b/libraries/shared/src/Preferences.h @@ -52,7 +52,7 @@ public: Browsable, Slider, Spinner, - SpinnerSlider, + SpinnerSlider, Checkbox, Button, ComboBox, From 5329c1ce420d93d362b8ccb6ac674a2771f09dc0 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Thu, 13 Jul 2017 19:23:28 +0100 Subject: [PATCH 0932/1049] Fixed Indentation, removed old debug code --- interface/resources/qml/dialogs/preferences/Section.qml | 4 +--- .../qml/dialogs/preferences/SpinnerSliderPreference.qml | 4 ++-- interface/src/ui/PreferencesDialog.cpp | 6 +++--- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/interface/resources/qml/dialogs/preferences/Section.qml b/interface/resources/qml/dialogs/preferences/Section.qml index a2bfa9ba0e..95372cf9d0 100644 --- a/interface/resources/qml/dialogs/preferences/Section.qml +++ b/interface/resources/qml/dialogs/preferences/Section.qml @@ -72,7 +72,7 @@ Preference { property var avatarBuilder: Component { AvatarPreference { } } property var buttonBuilder: Component { ButtonPreference { } } property var comboBoxBuilder: Component { ComboBoxPreference { } } - property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } + property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } property var preferences: [] property int checkBoxCount: 0 @@ -128,13 +128,11 @@ Preference { case Preference.ComboBox: checkBoxCount = 0; builder = comboBoxBuilder; - console.log("Built COMBOBOX"); break; case Preference.SpinnerSlider: checkBoxCount = 0; builder = spinnerSliderBuilder; - console.log("Built SPINNERSLIDER"); break; }; diff --git a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml index 5b9e70a42a..13a4696fd3 100644 --- a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml +++ b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml @@ -60,7 +60,7 @@ Preference { width: 100 minimumValue: MyAvatar.getDomainMinScale() maximumValue: MyAvatar.getDomainMaxScale() - stepSize: preference.step + stepSize: preference.step onValueChanged: { spinner.value = value } @@ -72,7 +72,7 @@ Preference { SpinBox { id: spinner decimals: preference.decimals - value: preference.value + value: preference.value minimumValue: MyAvatar.getDomainMinScale() maximumValue: MyAvatar.getDomainMaxScale() width: 100 diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index acbfc8edf3..558f6fd1b8 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -182,9 +182,9 @@ void setupPreferences() { preferences->addPreference(preference); } { - auto getter = [=]()->float { return myAvatar->getUniformScale(); }; - auto setter = [=](float value) { myAvatar->setTargetScale(value); }; - auto preference = new SpinnerSliderPreference(AVATAR_TUNING, "Avatar Scale", getter, setter); + auto getter = [=]()->float { return myAvatar->getUniformScale(); }; + auto setter = [=](float value) { myAvatar->setTargetScale(value); }; + auto preference = new SpinnerSliderPreference(AVATAR_TUNING, "Avatar Scale", getter, setter); preference->setStep(0.1); preference->setDecimals(2); preferences->addPreference(preference); From 092725ad1a200cc5d78f50f00bb7d405fd6ba19c Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Thu, 13 Jul 2017 19:24:30 +0100 Subject: [PATCH 0933/1049] a thing --- interface/resources/qml/dialogs/preferences/Section.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/dialogs/preferences/Section.qml b/interface/resources/qml/dialogs/preferences/Section.qml index 95372cf9d0..2b90d402bc 100644 --- a/interface/resources/qml/dialogs/preferences/Section.qml +++ b/interface/resources/qml/dialogs/preferences/Section.qml @@ -72,7 +72,7 @@ Preference { property var avatarBuilder: Component { AvatarPreference { } } property var buttonBuilder: Component { ButtonPreference { } } property var comboBoxBuilder: Component { ComboBoxPreference { } } - property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } + property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } property var preferences: [] property int checkBoxCount: 0 From 247e7b8bed5a6b9b4969d54b604dc7d1c7878954 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Thu, 13 Jul 2017 19:25:31 +0100 Subject: [PATCH 0934/1049] indentation!!! --- .../qml/hifi/tablet/tabletWindows/preferences/Section.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml index 25279bb6bf..af1fbd0070 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml @@ -81,7 +81,7 @@ Preference { property var avatarBuilder: Component { AvatarPreference { } } property var buttonBuilder: Component { ButtonPreference { } } property var comboBoxBuilder: Component { ComboBoxPreference { } } - property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } + property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } property var preferences: [] property int checkBoxCount: 0 From 677b177dce38c63230930326adf0792ebac0fe1a Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Thu, 13 Jul 2017 20:29:52 +0100 Subject: [PATCH 0935/1049] Build error fix --- interface/src/ui/PreferencesDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 558f6fd1b8..e80b7f7f34 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -185,7 +185,7 @@ void setupPreferences() { auto getter = [=]()->float { return myAvatar->getUniformScale(); }; auto setter = [=](float value) { myAvatar->setTargetScale(value); }; auto preference = new SpinnerSliderPreference(AVATAR_TUNING, "Avatar Scale", getter, setter); - preference->setStep(0.1); + preference->setStep(0.1f); preference->setDecimals(2); preferences->addPreference(preference); } From 2c94917fb8d32cbe41828452df0b4b3779abc429 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 13 Jul 2017 12:58:47 -0700 Subject: [PATCH 0936/1049] Add necessary button protection --- .../marketplace/spectator-camera/spectatorCamera.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js index 5c5eb5f33b..f0b943ad92 100644 --- a/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js +++ b/unpublishedScripts/marketplace/spectator-camera/spectatorCamera.js @@ -109,12 +109,13 @@ // from the "Window.domainChanged()" signal. var WAIT_AFTER_DOMAIN_SWITCH_BEFORE_CAMERA_DELETE_MS = 1 * 1000; function spectatorCameraOff(isChangingDomains) { - function deleteCamera() { Entities.deleteEntity(camera); camera = false; - // Change button to active when window is first openend OR if the camera is on, false otherwise. - button.editProperties({ isActive: onSpectatorCameraScreen || camera }); + if (button) { + // Change button to active when window is first openend OR if the camera is on, false otherwise. + button.editProperties({ isActive: onSpectatorCameraScreen || camera }); + } } spectatorCameraConfig.attachedEntityId = false; From 12f52e8f20f3525586ff0ec351bc46bbac7bc217 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 13 Jul 2017 13:18:21 -0700 Subject: [PATCH 0937/1049] don't do SoftAttachmentModel::updateClusterMatrices if geometry isn't ready --- libraries/render-utils/src/SoftAttachmentModel.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/render-utils/src/SoftAttachmentModel.cpp b/libraries/render-utils/src/SoftAttachmentModel.cpp index f15b696006..63b18d49b8 100644 --- a/libraries/render-utils/src/SoftAttachmentModel.cpp +++ b/libraries/render-utils/src/SoftAttachmentModel.cpp @@ -35,6 +35,10 @@ void SoftAttachmentModel::updateClusterMatrices() { if (!_needsUpdateClusterMatrices) { return; } + if (!isLoaded()) { + return; + } + _needsUpdateClusterMatrices = false; const FBXGeometry& geometry = getFBXGeometry(); From 7ea1e7285f0e6697309d34db73e37e48a6fb6af1 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 28 Jun 2017 14:59:46 -0700 Subject: [PATCH 0938/1049] map EntityItemID to EntityItemPointer --- libraries/entities/src/AddEntityOperator.cpp | 4 +- .../entities/src/DeleteEntityOperator.cpp | 2 +- libraries/entities/src/EntityTree.cpp | 82 ++++++++++--------- libraries/entities/src/EntityTree.h | 15 ++-- libraries/entities/src/EntityTreeElement.cpp | 3 +- .../entities/src/MovingEntitiesOperator.cpp | 3 +- .../entities/src/UpdateEntityOperator.cpp | 10 +-- 7 files changed, 59 insertions(+), 60 deletions(-) diff --git a/libraries/entities/src/AddEntityOperator.cpp b/libraries/entities/src/AddEntityOperator.cpp index e86e70dd80..78d986f538 100644 --- a/libraries/entities/src/AddEntityOperator.cpp +++ b/libraries/entities/src/AddEntityOperator.cpp @@ -46,10 +46,8 @@ bool AddEntityOperator::preRecursion(const OctreeElementPointer& element) { // If this element is the best fit for the new entity properties, then add/or update it if (entityTreeElement->bestFitBounds(_newEntityBox)) { - + _tree->addEntityMapEntry(_newEntity); entityTreeElement->addEntityItem(_newEntity); - _tree->setContainingElement(_newEntity->getEntityItemID(), entityTreeElement); - _foundNew = true; keepSearching = false; } else { diff --git a/libraries/entities/src/DeleteEntityOperator.cpp b/libraries/entities/src/DeleteEntityOperator.cpp index 709c281341..cbd0ad7839 100644 --- a/libraries/entities/src/DeleteEntityOperator.cpp +++ b/libraries/entities/src/DeleteEntityOperator.cpp @@ -96,7 +96,7 @@ bool DeleteEntityOperator::preRecursion(const OctreeElementPointer& element) { bool entityDeleted = entityTreeElement->removeEntityItem(theEntity); // remove it from the element assert(entityDeleted); (void)entityDeleted; // quite warning - _tree->setContainingElement(details.entity->getEntityItemID(), NULL); // update or id to element lookup + _tree->clearEntityMapEntry(details.entity->getEntityItemID()); _foundCount++; } } diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 4773f45af7..31b96ebfc4 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -91,11 +91,14 @@ void EntityTree::eraseAllOctreeElements(bool createNewRoot) { _simulation->clearEntities(); } { - QWriteLocker locker(&_entityToElementLock); - foreach(EntityTreeElementPointer element, _entityToElementMap) { - element->cleanupEntities(); + QWriteLocker locker(&_entityMapLock); + foreach(EntityItemPointer entity, _entityMap) { + EntityTreeElementPointer element = entity->getElement(); + if (element) { + element->cleanupEntities(); + } } - _entityToElementMap.clear(); + _entityMap.clear(); } Octree::eraseAllOctreeElements(createNewRoot); @@ -136,29 +139,24 @@ void EntityTree::postAddEntity(EntityItemPointer entity) { } bool EntityTree::updateEntity(const EntityItemID& entityID, const EntityItemProperties& properties, const SharedNodePointer& senderNode) { - EntityTreeElementPointer containingElement = getContainingElement(entityID); + EntityItemPointer entity; + { + QReadLocker locker(&_entityMapLock); + entity = _entityMap.value(entityID); + } + if (!entity) { + return false; + } + return updateEntity(entity, properties, senderNode); +} + +bool EntityTree::updateEntity(EntityItemPointer entity, const EntityItemProperties& origProperties, + const SharedNodePointer& senderNode) { + EntityTreeElementPointer containingElement = entity->getElement(); if (!containingElement) { return false; } - EntityItemPointer existingEntity = containingElement->getEntityWithEntityItemID(entityID); - if (!existingEntity) { - return false; - } - - return updateEntityWithElement(existingEntity, properties, containingElement, senderNode); -} - -bool EntityTree::updateEntity(EntityItemPointer entity, const EntityItemProperties& properties, const SharedNodePointer& senderNode) { - EntityTreeElementPointer containingElement = getContainingElement(entity->getEntityItemID()); - if (!containingElement) { - return false; - } - return updateEntityWithElement(entity, properties, containingElement, senderNode); -} - -bool EntityTree::updateEntityWithElement(EntityItemPointer entity, const EntityItemProperties& origProperties, - EntityTreeElementPointer containingElement, const SharedNodePointer& senderNode) { EntityItemProperties properties = origProperties; bool allowLockChange; @@ -331,8 +329,7 @@ bool EntityTree::updateEntityWithElement(EntityItemPointer entity, const EntityI } // TODO: this final containingElement check should eventually be removed (or wrapped in an #ifdef DEBUG). - containingElement = getContainingElement(entity->getEntityItemID()); - if (!containingElement) { + if (!entity->getElement()) { qCDebug(entities) << "UNEXPECTED!!!! after updateEntity() we no longer have a containing element??? entityID=" << entity->getEntityItemID(); return false; @@ -1502,27 +1499,38 @@ int EntityTree::processEraseMessageDetails(const QByteArray& dataByteArray, cons } EntityTreeElementPointer EntityTree::getContainingElement(const EntityItemID& entityItemID) /*const*/ { - QReadLocker locker(&_entityToElementLock); - EntityTreeElementPointer element = _entityToElementMap.value(entityItemID); - return element; + QReadLocker locker(&_entityMapLock); + EntityItemPointer entity = _entityMap.value(entityItemID); + if (entity) { + return entity->getElement(); + } + return EntityTreeElementPointer(nullptr); } -void EntityTree::setContainingElement(const EntityItemID& entityItemID, EntityTreeElementPointer element) { - QWriteLocker locker(&_entityToElementLock); - if (element) { - _entityToElementMap[entityItemID] = element; - } else { - _entityToElementMap.remove(entityItemID); +void EntityTree::addEntityMapEntry(EntityItemPointer entity) { + EntityItemID id = entity->getEntityItemID(); + QWriteLocker locker(&_entityMapLock); + EntityItemPointer otherEntity = _entityMap.value(id); + if (otherEntity) { + qCDebug(entities) << "EntityTree::addEntityMapEntry() found pre-existing id " << id; + assert(false); + return; } + _entityMap.insert(id, entity); +} + +void EntityTree::clearEntityMapEntry(const EntityItemID& id) { + QWriteLocker locker(&_entityMapLock); + _entityMap.remove(id); } void EntityTree::debugDumpMap() { qCDebug(entities) << "EntityTree::debugDumpMap() --------------------------"; - QReadLocker locker(&_entityToElementLock); - QHashIterator i(_entityToElementMap); + QReadLocker locker(&_entityMapLock); + QHashIterator i(_entityMap); while (i.hasNext()) { i.next(); - qCDebug(entities) << i.key() << ": " << i.value().get(); + qCDebug(entities) << i.key() << ": " << i.value()->getElement().get(); } qCDebug(entities) << "-----------------------------------------------------"; } diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index 24e6c364b1..efb8cf81ba 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -119,9 +119,6 @@ public: // use this method if you only know the entityID bool updateEntity(const EntityItemID& entityID, const EntityItemProperties& properties, const SharedNodePointer& senderNode = SharedNodePointer(nullptr)); - // use this method if you have a pointer to the entity (avoid an extra entity lookup) - bool updateEntity(EntityItemPointer entity, const EntityItemProperties& properties, const SharedNodePointer& senderNode = SharedNodePointer(nullptr)); - // check if the avatar is a child of this entity, If so set the avatar parentID to null void unhookChildAvatar(const EntityItemID entityID); void deleteEntity(const EntityItemID& entityID, bool force = false, bool ignoreWarnings = true); @@ -183,7 +180,8 @@ public: int processEraseMessageDetails(const QByteArray& buffer, const SharedNodePointer& sourceNode); EntityTreeElementPointer getContainingElement(const EntityItemID& entityItemID) /*const*/; - void setContainingElement(const EntityItemID& entityItemID, EntityTreeElementPointer element); + void addEntityMapEntry(EntityItemPointer entity); + void clearEntityMapEntry(const EntityItemID& id); void debugDumpMap(); virtual void dumpTree() override; virtual void pruneTree() override; @@ -275,9 +273,8 @@ signals: protected: void processRemovedEntities(const DeleteEntityOperator& theOperator); - bool updateEntityWithElement(EntityItemPointer entity, const EntityItemProperties& properties, - EntityTreeElementPointer containingElement, - const SharedNodePointer& senderNode = SharedNodePointer(nullptr)); + bool updateEntity(EntityItemPointer entity, const EntityItemProperties& properties, + const SharedNodePointer& senderNode = SharedNodePointer(nullptr)); static bool findNearPointOperation(const OctreeElementPointer& element, void* extraData); static bool findInSphereOperation(const OctreeElementPointer& element, void* extraData); static bool findInCubeOperation(const OctreeElementPointer& element, void* extraData); @@ -309,8 +306,8 @@ protected: _deletedEntityItemIDs << id; } - mutable QReadWriteLock _entityToElementLock; - QHash _entityToElementMap; + mutable QReadWriteLock _entityMapLock; + QHash _entityMap; EntitySimulationPointer _simulation; diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index cce7ee006f..4177724d1e 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -1001,7 +1001,6 @@ int EntityTreeElement::readElementDataFromBuffer(const unsigned char* data, int if (currentContainingElement.get() != this) { currentContainingElement->removeEntityItem(entityItem); addEntityItem(entityItem); - _myTree->setContainingElement(entityItemID, getThisPointer()); } } } @@ -1032,9 +1031,9 @@ int EntityTreeElement::readElementDataFromBuffer(const unsigned char* data, int // don't add if we've recently deleted.... if (!_myTree->isDeletedEntity(entityItem->getID())) { + _myTree->addEntityMapEntry(entityItem); addEntityItem(entityItem); // add this new entity to this elements entities entityItemID = entityItem->getEntityItemID(); - _myTree->setContainingElement(entityItemID, getThisPointer()); _myTree->postAddEntity(entityItem); if (entityItem->getCreated() == UNKNOWN_CREATED_TIME) { entityItem->recordCreationTime(); diff --git a/libraries/entities/src/MovingEntitiesOperator.cpp b/libraries/entities/src/MovingEntitiesOperator.cpp index ab97c67aa2..b9d5b681f6 100644 --- a/libraries/entities/src/MovingEntitiesOperator.cpp +++ b/libraries/entities/src/MovingEntitiesOperator.cpp @@ -51,7 +51,7 @@ MovingEntitiesOperator::~MovingEntitiesOperator() { void MovingEntitiesOperator::addEntityToMoveList(EntityItemPointer entity, const AACube& newCube) { - EntityTreeElementPointer oldContainingElement = _tree->getContainingElement(entity->getEntityItemID()); + EntityTreeElementPointer oldContainingElement = entity->getElement(); AABox newCubeClamped = newCube.clamp((float)-HALF_TREE_SCALE, (float)HALF_TREE_SCALE); if (_wantDebug) { @@ -201,7 +201,6 @@ bool MovingEntitiesOperator::preRecursion(const OctreeElementPointer& element) { oldElement->removeEntityItem(details.entity); } entityTreeElement->addEntityItem(details.entity); - _tree->setContainingElement(entityItemID, entityTreeElement); } _foundNewCount++; //details.newFound = true; // TODO: would be nice to add this optimization diff --git a/libraries/entities/src/UpdateEntityOperator.cpp b/libraries/entities/src/UpdateEntityOperator.cpp index ec6051af04..7a5c87187a 100644 --- a/libraries/entities/src/UpdateEntityOperator.cpp +++ b/libraries/entities/src/UpdateEntityOperator.cpp @@ -138,8 +138,8 @@ bool UpdateEntityOperator::preRecursion(const OctreeElementPointer& element) { qCDebug(entities) << " _foundNew=" << _foundNew; } - // If we haven't yet found the old entity, and this subTreeContains our old - // entity, then we need to keep searching. + // If we haven't yet found the old element, and this subTreeContains our old element, + // then we need to keep searching. if (!_foundOld && subtreeContainsOld) { if (_wantDebug) { @@ -169,7 +169,6 @@ bool UpdateEntityOperator::preRecursion(const OctreeElementPointer& element) { // NOTE: we know we haven't yet added it to its new element because _removeOld is true EntityTreeElementPointer oldElement = _existingEntity->getElement(); oldElement->removeEntityItem(_existingEntity); - _tree->setContainingElement(_entityItemID, NULL); if (oldElement != _containingElement) { qCDebug(entities) << "WARNING entity moved during UpdateEntityOperator recursion"; @@ -187,8 +186,8 @@ bool UpdateEntityOperator::preRecursion(const OctreeElementPointer& element) { } } - // If we haven't yet found the new entity, and this subTreeContains our new - // entity, then we need to keep searching. + // If we haven't yet found the new element, and this subTreeContains our new element, + // then we need to keep searching. if (!_foundNew && subtreeContainsNew) { if (_wantDebug) { @@ -221,7 +220,6 @@ bool UpdateEntityOperator::preRecursion(const OctreeElementPointer& element) { } } entityTreeElement->addEntityItem(_existingEntity); - _tree->setContainingElement(_entityItemID, entityTreeElement); } _foundNew = true; // we found the new element _removeOld = false; // and it has already been removed from the old From 39e5259e034e1251a857778baef83efcf75222a4 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Wed, 28 Jun 2017 16:01:12 -0700 Subject: [PATCH 0939/1049] remove unused variable --- libraries/entities/src/MovingEntitiesOperator.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/entities/src/MovingEntitiesOperator.cpp b/libraries/entities/src/MovingEntitiesOperator.cpp index b9d5b681f6..42e5a2ece5 100644 --- a/libraries/entities/src/MovingEntitiesOperator.cpp +++ b/libraries/entities/src/MovingEntitiesOperator.cpp @@ -193,7 +193,6 @@ bool MovingEntitiesOperator::preRecursion(const OctreeElementPointer& element) { // If this element is the best fit for the new bounds of this entity then add the entity to the element if (!details.newFound && entityTreeElement->bestFitBounds(details.newCube)) { - EntityItemID entityItemID = details.entity->getEntityItemID(); // remove from the old before adding EntityTreeElementPointer oldElement = details.entity->getElement(); if (oldElement != entityTreeElement) { From a0c6c49360373d0d0509498c7299069168ce7044 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 29 Jun 2017 10:20:47 -0700 Subject: [PATCH 0940/1049] bump some "debug" messages to "warning" status --- libraries/entities/src/EntityTree.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 31b96ebfc4..5cb47d7a1e 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -188,7 +188,7 @@ bool EntityTree::updateEntity(EntityItemPointer entity, const EntityItemProperti bool success; AACube queryCube = entity->getQueryAACube(success); if (!success) { - qCDebug(entities) << "Warning -- failed to get query-cube for" << entity->getID(); + qCWarning(entities) << "failed to get query-cube for" << entity->getID(); } UpdateEntityOperator theOperator(getThisPointer(), containingElement, entity, queryCube); recurseTreeWithOperator(&theOperator); @@ -1512,7 +1512,7 @@ void EntityTree::addEntityMapEntry(EntityItemPointer entity) { QWriteLocker locker(&_entityMapLock); EntityItemPointer otherEntity = _entityMap.value(id); if (otherEntity) { - qCDebug(entities) << "EntityTree::addEntityMapEntry() found pre-existing id " << id; + qCWarning(entities) << "EntityTree::addEntityMapEntry() found pre-existing id " << id; assert(false); return; } From fe79514b08eeeef0333abdefe7da8b058c342632 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Fri, 30 Jun 2017 10:22:16 -0700 Subject: [PATCH 0941/1049] lock when changing EntityTree elements --- libraries/entities/src/EntityTree.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 5cb47d7a1e..26dc678347 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -90,16 +90,17 @@ void EntityTree::eraseAllOctreeElements(bool createNewRoot) { if (_simulation) { _simulation->clearEntities(); } - { - QWriteLocker locker(&_entityMapLock); - foreach(EntityItemPointer entity, _entityMap) { + QHash localMap; + localMap.swap(_entityMap); + this->withWriteLock([&] { + foreach(EntityItemPointer entity, localMap) { EntityTreeElementPointer element = entity->getElement(); if (element) { element->cleanupEntities(); } } - _entityMap.clear(); - } + }); + localMap.clear(); Octree::eraseAllOctreeElements(createNewRoot); resetClientEditStats(); From f71ef554b731eb2bcf701dffa2b6eae4d2d0aef1 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Fri, 30 Jun 2017 10:23:33 -0700 Subject: [PATCH 0942/1049] use copy of _entityMap for debug logging --- libraries/entities/src/EntityTree.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 26dc678347..f0e94246b5 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1526,9 +1526,11 @@ void EntityTree::clearEntityMapEntry(const EntityItemID& id) { } void EntityTree::debugDumpMap() { + // QHash's are implicitly shared, so we make a shared copy and use that instead. + // This way we might be able to avoid both a lock and a true copy. + QHash localMap(_entityMap); qCDebug(entities) << "EntityTree::debugDumpMap() --------------------------"; - QReadLocker locker(&_entityMapLock); - QHashIterator i(_entityMap); + QHashIterator i(localMap); while (i.hasNext()) { i.next(); qCDebug(entities) << i.key() << ": " << i.value()->getElement().get(); From 02bc9b9610e9f9fab7243579019cb35b2167b1ac Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Fri, 30 Jun 2017 10:28:43 -0700 Subject: [PATCH 0943/1049] minimize the lock context --- libraries/entities/src/EntityTree.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index f0e94246b5..e359340a5f 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1500,8 +1500,11 @@ int EntityTree::processEraseMessageDetails(const QByteArray& dataByteArray, cons } EntityTreeElementPointer EntityTree::getContainingElement(const EntityItemID& entityItemID) /*const*/ { - QReadLocker locker(&_entityMapLock); - EntityItemPointer entity = _entityMap.value(entityItemID); + EntityItemPointer entity; + { + QReadLocker locker(&_entityMapLock); + entity = _entityMap.value(entityItemID); + } if (entity) { return entity->getElement(); } From 8fc4d1f43e7e6369223b94d8cf96ad1b71e83a57 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 3 Jul 2017 09:20:44 -0700 Subject: [PATCH 0944/1049] make UNEXPECTED logs warnings --- libraries/entities/src/EntityTree.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index e359340a5f..5e58736477 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -331,7 +331,7 @@ bool EntityTree::updateEntity(EntityItemPointer entity, const EntityItemProperti // TODO: this final containingElement check should eventually be removed (or wrapped in an #ifdef DEBUG). if (!entity->getElement()) { - qCDebug(entities) << "UNEXPECTED!!!! after updateEntity() we no longer have a containing element??? entityID=" + qCWarning(entities) << "EntityTree::updateEntity() we no longer have a containing element for entityID=" << entity->getEntityItemID(); return false; } @@ -364,7 +364,7 @@ EntityItemPointer EntityTree::addEntity(const EntityItemID& entityID, const Enti // You should not call this on existing entities that are already part of the tree! Call updateEntity() EntityTreeElementPointer containingElement = getContainingElement(entityID); if (containingElement) { - qCDebug(entities) << "UNEXPECTED!!! ----- don't call addEntity() on existing entity items. entityID=" << entityID + qCWarning(entities) << "EntityTree::addEntity() on existing entity item with entityID=" << entityID << "containingElement=" << containingElement.get(); return result; } @@ -420,7 +420,7 @@ void EntityTree::deleteEntity(const EntityItemID& entityID, bool force, bool ign EntityTreeElementPointer containingElement = getContainingElement(entityID); if (!containingElement) { if (!ignoreWarnings) { - qCDebug(entities) << "UNEXPECTED!!!! EntityTree::deleteEntity() entityID doesn't exist!!! entityID=" << entityID; + qCWarning(entities) << "EntityTree::deleteEntity() on non-existent entityID=" << entityID; } return; } @@ -428,8 +428,7 @@ void EntityTree::deleteEntity(const EntityItemID& entityID, bool force, bool ign EntityItemPointer existingEntity = containingElement->getEntityWithEntityItemID(entityID); if (!existingEntity) { if (!ignoreWarnings) { - qCDebug(entities) << "UNEXPECTED!!!! don't call EntityTree::deleteEntity() on entity items that don't exist. " - "entityID=" << entityID; + qCWarning(entities) << "EntityTree::deleteEntity() on non-existant entity item with entityID=" << entityID; } return; } @@ -476,7 +475,7 @@ void EntityTree::deleteEntities(QSet entityIDs, bool force, bool i EntityTreeElementPointer containingElement = getContainingElement(entityID); if (!containingElement) { if (!ignoreWarnings) { - qCDebug(entities) << "UNEXPECTED!!!! EntityTree::deleteEntities() entityID doesn't exist!!! entityID=" << entityID; + qCWarning(entities) << "EntityTree::deleteEntities() on non-existent entityID=" << entityID; } continue; } @@ -484,8 +483,7 @@ void EntityTree::deleteEntities(QSet entityIDs, bool force, bool i EntityItemPointer existingEntity = containingElement->getEntityWithEntityItemID(entityID); if (!existingEntity) { if (!ignoreWarnings) { - qCDebug(entities) << "UNEXPECTED!!!! don't call EntityTree::deleteEntities() on entity items that don't exist. " - "entityID=" << entityID; + qCWarning(entities) << "EntityTree::deleteEntities() on non-existent entity item with entityID=" << entityID; } continue; } @@ -973,7 +971,7 @@ int EntityTree::processEditPacketData(ReceivedMessage& message, const unsigned c const SharedNodePointer& senderNode) { if (!getIsServer()) { - qCDebug(entities) << "UNEXPECTED!!! processEditPacketData() should only be called on a server tree."; + qCWarning(entities) << "EntityTree::processEditPacketData() should only be called on a server tree."; return 0; } From c7ec82f98ab31e81a1224af5fe9d23684ec13fa3 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 3 Jul 2017 10:59:41 -0700 Subject: [PATCH 0945/1049] use local copy of _element for thread safety --- libraries/entities/src/EntityItem.cpp | 11 +++++++---- libraries/entities/src/EntityTreeElement.cpp | 4 +++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 23ce097cc2..5996327e87 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -89,7 +89,8 @@ EntityItem::EntityItem(const EntityItemID& entityItemID) : EntityItem::~EntityItem() { // clear out any left-over actions - EntityTreePointer entityTree = _element ? _element->getTree() : nullptr; + EntityTreeElementPointer element = _element; // use local copy of _element for logic below + EntityTreePointer entityTree = element ? element->getTree() : nullptr; EntitySimulationPointer simulation = entityTree ? entityTree->getSimulation() : nullptr; if (simulation) { clearActions(simulation); @@ -880,8 +881,9 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef // Tracking for editing roundtrips here. We will tell our EntityTree that we just got incoming data about // and entity that was edited at some time in the past. The tree will determine how it wants to track this // information. - if (_element && _element->getTree()) { - _element->getTree()->trackIncomingEntityLastEdited(lastEditedFromBufferAdjusted, bytesRead); + EntityTreeElementPointer element = _element; // use local copy of _element for logic below + if (element && element->getTree()) { + element->getTree()->trackIncomingEntityLastEdited(lastEditedFromBufferAdjusted, bytesRead); } @@ -2056,7 +2058,8 @@ bool EntityItem::removeActionInternal(const QUuid& actionID, EntitySimulationPoi _previouslyDeletedActions.insert(actionID, usecTimestampNow()); if (_objectActions.contains(actionID)) { if (!simulation) { - EntityTreePointer entityTree = _element ? _element->getTree() : nullptr; + EntityTreeElementPointer element = _element; // use local copy of _element for logic below + EntityTreePointer entityTree = element ? element->getTree() : nullptr; simulation = entityTree ? entityTree->getSimulation() : nullptr; } diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index 4177724d1e..108cb39222 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -885,10 +885,10 @@ EntityItemPointer EntityTreeElement::getEntityWithEntityItemID(const EntityItemI void EntityTreeElement::cleanupEntities() { withWriteLock([&] { foreach(EntityItemPointer entity, _entityItems) { + // NOTE: only EntityTreeElement should ever be changing the value of entity->_element // NOTE: We explicitly don't delete the EntityItem here because since we only // access it by smart pointers, when we remove it from the _entityItems // we know that it will be deleted. - //delete entity; entity->_element = NULL; } _entityItems.clear(); @@ -903,6 +903,7 @@ bool EntityTreeElement::removeEntityWithEntityItemID(const EntityItemID& id) { EntityItemPointer& entity = _entityItems[i]; if (entity->getEntityItemID() == id) { foundEntity = true; + // NOTE: only EntityTreeElement should ever be changing the value of entity->_element entity->_element = NULL; _entityItems.removeAt(i); break; @@ -918,6 +919,7 @@ bool EntityTreeElement::removeEntityItem(EntityItemPointer entity) { numEntries = _entityItems.removeAll(entity); }); if (numEntries > 0) { + // NOTE: only EntityTreeElement should ever be changing the value of entity->_element assert(entity->_element.get() == this); entity->_element = NULL; return true; From de2139106245304cf0703d12df63c8b91d89ec61 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Fri, 7 Jul 2017 09:59:13 -0700 Subject: [PATCH 0946/1049] add script to measure cost of entity lookup by id --- .../tests/entityLookupCostMeasurement.js | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 scripts/developer/tests/entityLookupCostMeasurement.js diff --git a/scripts/developer/tests/entityLookupCostMeasurement.js b/scripts/developer/tests/entityLookupCostMeasurement.js new file mode 100644 index 0000000000..15697fe13d --- /dev/null +++ b/scripts/developer/tests/entityLookupCostMeasurement.js @@ -0,0 +1,104 @@ +// Creates a large number of entities on the cardinal planes of the octree (all +// objects will live in the root octree element). Measures how long it takes +// to update the properties of the first and last entity. The difference +// between the two measurements shows how the cost of lookup changes as a +// function of the number of entities. For best results run this in an +// otherwise empty domain. + +var firstId; +var lastId; +var NUM_ENTITIES_ON_SIDE = 25; + +// create the objects +createObjects = function () { + var STRIDE = 0.75; + var WIDTH = 0.5; + var DIMENSIONS = { x: WIDTH, y: WIDTH, z: WIDTH }; + var LIFETIME = 20; + + var properties = { + name: "", + type : "Box", + dimensions : DIMENSIONS, + position : { x: 0, y: 0, z: 0}, + lifetime : LIFETIME, + color : { red:255, green: 64, blue: 255 } + }; + + // xy + var planeName = "xy"; + for (var i = 0; i < NUM_ENTITIES_ON_SIDE; ++i) { + for (var j = 0; j < NUM_ENTITIES_ON_SIDE; ++j) { + properties.name = "Box-" + planeName + "-" + i + "." + j; + properties.position = { x: i * STRIDE, y: j * STRIDE, z: 0 }; + var red = i * 255 / NUM_ENTITIES_ON_SIDE; + var green = j * 255 / NUM_ENTITIES_ON_SIDE; + var blue = 0; + properties.color = { red: red, green: green, blue: blue }; + if (i == 0 && j == 0) { + firstId = Entities.addEntity(properties); + } else { + Entities.addEntity(properties); + } + } + } + + // yz + var planeName = "yz"; + for (var i = 0; i < NUM_ENTITIES_ON_SIDE; ++i) { + for (var j = 0; j < NUM_ENTITIES_ON_SIDE; ++j) { + properties.name = "Box-" + planeName + "-" + i + "." + j; + properties.position = { x: 0, y: i * STRIDE, z: j * STRIDE }; + var red = 0; + var green = i * 255 / NUM_ENTITIES_ON_SIDE; + var blue = j * 255 / NUM_ENTITIES_ON_SIDE; + properties.color = { red: red, green: green, blue: blue }; + Entities.addEntity(properties); + } + } + + // zx + var planeName = "zx"; + for (var i = 0; i < NUM_ENTITIES_ON_SIDE; ++i) { + for (var j = 0; j < NUM_ENTITIES_ON_SIDE; ++j) { + properties.name = "Box-" + planeName + "-" + i + "." + j; + properties.position = { x: j * STRIDE, y: 0, z: i * STRIDE }; + var red = j * 255 / NUM_ENTITIES_ON_SIDE; + var green = 0; + var blue = i * 255 / NUM_ENTITIES_ON_SIDE; + properties.color = { red: red, green: green, blue: blue }; + lastId = Entities.addEntity(properties); + } + } +}; + +createObjects(); + +// measure the time it takes to edit the first and last entities many times +// (requires a lookup by entityId each time) +changeProperties = function (id) { + var newProperties = { color : { red: 255, green: 255, blue: 255 } }; + Entities.editEntity(id, newProperties); +} + +// first +var NUM_CHANGES = 10000; +var firstStart = Date.now(); +for (var k = 0; k < NUM_CHANGES; ++k) { + changeProperties(firstId); +} +var firstEnd = Date.now(); +var firstDt = firstEnd - firstStart; + +// last +var lastStart = Date.now(); +for (var k = 0; k < NUM_CHANGES; ++k) { + changeProperties(lastId); +} +var lastEnd = Date.now(); +var lastDt = lastEnd - lastStart; + +// print the results +var numEntities = 3 * NUM_ENTITIES_ON_SIDE * NUM_ENTITIES_ON_SIDE; +print("numEntities = " + numEntities + " numEdits = " + NUM_CHANGES + " firstDt = " + firstDt + " lastDt = " + lastDt); + From 60300f5d7b7c36dc25fb761787d4eea00bbd82a8 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Thu, 13 Jul 2017 22:06:44 +0100 Subject: [PATCH 0947/1049] changed to icon (hopefully) --- .../qml/dialogs/preferences/SpinnerSliderPreference.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml index 13a4696fd3..ea8109397e 100644 --- a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml +++ b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml @@ -97,7 +97,8 @@ Preference { } } width: 50 - text: "Reset" + font.family: hiFiGlyphs.name + text: "a" anchors { right: parent.right } From d74c834f1237c96326900112d7648ad69671fc61 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Thu, 13 Jul 2017 22:40:37 +0100 Subject: [PATCH 0948/1049] Fixed colour scheming and changed to a reload icon --- .../qml/dialogs/preferences/SpinnerSliderPreference.qml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml index ea8109397e..85caa1befc 100644 --- a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml +++ b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml @@ -68,6 +68,7 @@ Preference { right: spinner.left rightMargin: 10 } + colorScheme: hifi.colorSchemes.dark } SpinBox { id: spinner @@ -85,7 +86,7 @@ Preference { } colorScheme: hifi.colorSchemes.dark } - Button { + GlyphButton { id: button onClicked: { if(spinner.maximumValue >= 1) { @@ -96,12 +97,12 @@ Preference { slider.value = spinner.maximumValue } } - width: 50 - font.family: hiFiGlyphs.name - text: "a" + width: 30 + glyph: hifi.glyphs.reload anchors { right: parent.right } + colorScheme: hifi.colorSchemes.dark } } } \ No newline at end of file From 72c3e789e9f399d1e0f8e5c1cf268566e5f30b0e Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Thu, 13 Jul 2017 23:42:20 +0100 Subject: [PATCH 0949/1049] More Spaces! --- interface/src/ui/PreferencesDialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index e80b7f7f34..4db83aab7a 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -181,14 +181,14 @@ void setupPreferences() { preference->setStep(1); preferences->addPreference(preference); } - { + { auto getter = [=]()->float { return myAvatar->getUniformScale(); }; auto setter = [=](float value) { myAvatar->setTargetScale(value); }; auto preference = new SpinnerSliderPreference(AVATAR_TUNING, "Avatar Scale", getter, setter); preference->setStep(0.1f); preference->setDecimals(2); preferences->addPreference(preference); - } + } { auto getter = []()->float { return DependencyManager::get()->getEyeClosingThreshold(); }; auto setter = [](float value) { DependencyManager::get()->setEyeClosingThreshold(value); }; From 4f8d958831e3556255d5cc0c9bcfba29b150ab38 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Fri, 14 Jul 2017 00:56:42 +0100 Subject: [PATCH 0950/1049] Some code cleaning, added comment for reasoning of specifying min and max in the qml --- .../resources/qml/controls-uit/Slider.qml | 2 +- .../qml/dialogs/preferences/Section.qml | 8 ++-- .../preferences/SpinnerSliderPreference.qml | 47 ++++++++++--------- interface/src/ui/PreferencesDialog.cpp | 3 ++ 4 files changed, 33 insertions(+), 27 deletions(-) diff --git a/interface/resources/qml/controls-uit/Slider.qml b/interface/resources/qml/controls-uit/Slider.qml index 18d0d33fe2..89bae9bcde 100644 --- a/interface/resources/qml/controls-uit/Slider.qml +++ b/interface/resources/qml/controls-uit/Slider.qml @@ -36,7 +36,7 @@ Slider { Rectangle { width: parent.height - 2 - height: slider.width * (slider.value - slider.minimumValue)/(slider.maximumValue-slider.minimumValue)-1 + height: slider.width * (slider.value - slider.minimumValue) / (slider.maximumValue - slider.minimumValue) - 1 radius: height / 2 anchors { top: parent.top diff --git a/interface/resources/qml/dialogs/preferences/Section.qml b/interface/resources/qml/dialogs/preferences/Section.qml index 2b90d402bc..3985c7d6f6 100644 --- a/interface/resources/qml/dialogs/preferences/Section.qml +++ b/interface/resources/qml/dialogs/preferences/Section.qml @@ -130,10 +130,10 @@ Preference { builder = comboBoxBuilder; break; - case Preference.SpinnerSlider: - checkBoxCount = 0; - builder = spinnerSliderBuilder; - break; + case Preference.SpinnerSlider: + checkBoxCount = 0; + builder = spinnerSliderBuilder; + break; }; if (builder) { diff --git a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml index 85caa1befc..f5dfa3a795 100644 --- a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml +++ b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml @@ -16,10 +16,12 @@ import "../../controls-uit" Preference { id: root property alias slider: slider + property alias spinner: spinner height: control.height + hifi.dimensions.controlInterlineHeight Component.onCompleted: { slider.value = preference.value; + spinner.value = preference.value; } function save() { @@ -27,10 +29,6 @@ Preference { preference.save(); } - function sliderToAvatarScale(sliderValue) { - return MyAvatar.getDomainMinScale() + (MyAvatar.getDomainMaxScale()-MyAvatar.getDomainMinScale())*value; - } - Item { id: control anchors { @@ -38,7 +36,7 @@ Preference { right: parent.right bottom: parent.bottom } - height: Math.max(labelText.height, slider.height) + height: Math.max(labelText.height, slider.height, spinner.height, button.height) Label { id: labelText @@ -67,9 +65,11 @@ Preference { anchors { right: spinner.left rightMargin: 10 + verticalCenter: parent.verticalCenter } colorScheme: hifi.colorSchemes.dark } + SpinBox { id: spinner decimals: preference.decimals @@ -83,26 +83,29 @@ Preference { anchors { right: button.left rightMargin: 10 + verticalCenter: parent.verticalCenter } colorScheme: hifi.colorSchemes.dark } - GlyphButton { - id: button - onClicked: { - if(spinner.maximumValue >= 1) { - spinner.value = 1 - slider.value = 1 - } else { - spinner.value = spinner.maximumValue - slider.value = spinner.maximumValue - } - } - width: 30 - glyph: hifi.glyphs.reload - anchors { - right: parent.right - } + + GlyphButton { + id: button + onClicked: { + if (spinner.maximumValue >= 1) { + spinner.value = 1 + slider.value = 1 + } else { + spinner.value = spinner.maximumValue + slider.value = spinner.maximumValue + } + } + width: 30 + glyph: hifi.glyphs.reload + anchors { + right: parent.right + verticalCenter: parent.verticalCenter + } colorScheme: hifi.colorSchemes.dark - } + } } } \ No newline at end of file diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 4db83aab7a..802bb2fd84 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -188,6 +188,9 @@ void setupPreferences() { preference->setStep(0.1f); preference->setDecimals(2); preferences->addPreference(preference); + + // When the Interface is first loaded, this section setupPreferences(); is loaded - causing the myAvatar->getDomainMinScale() and myAvatar->getDomainMaxScale() to get set to incorrect values which can't be changed across domain switches. + // Having these values loaded up when you load the Dialog each time is a way around this, therefore they're not specified here but in the QML. } { auto getter = []()->float { return DependencyManager::get()->getEyeClosingThreshold(); }; From c60c8c7b13238c03f3f94945b11dfc3720071019 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Fri, 14 Jul 2017 00:59:25 +0100 Subject: [PATCH 0951/1049] Missed two tabs.. --- .../qml/dialogs/preferences/SpinnerSliderPreference.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml index f5dfa3a795..3cba67bc82 100644 --- a/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml +++ b/interface/resources/qml/dialogs/preferences/SpinnerSliderPreference.qml @@ -64,12 +64,12 @@ Preference { } anchors { right: spinner.left - rightMargin: 10 + rightMargin: 10 verticalCenter: parent.verticalCenter } colorScheme: hifi.colorSchemes.dark } - + SpinBox { id: spinner decimals: preference.decimals @@ -82,7 +82,7 @@ Preference { } anchors { right: button.left - rightMargin: 10 + rightMargin: 10 verticalCenter: parent.verticalCenter } colorScheme: hifi.colorSchemes.dark From f692a2e4bf7f202fb67ae34111e4afc5ccc58778 Mon Sep 17 00:00:00 2001 From: elmanytas Date: Fri, 14 Jul 2017 08:44:59 +0200 Subject: [PATCH 0952/1049] Create ubuntu specific documentation based on https://forums.highfidelity.com/t/how-to-compile-a-stable-build-of-the-linux-server-stack-on-ubuntu-16-04-lts/11528/16 and tested yesterday. --- BUILD_LINUX.md | 91 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/BUILD_LINUX.md b/BUILD_LINUX.md index d40576a75d..038f53154c 100644 --- a/BUILD_LINUX.md +++ b/BUILD_LINUX.md @@ -1,7 +1,96 @@ +# Linux build guide + Please read the [general build guide](BUILD.md) for information on dependencies required for all platforms. Only Linux specific instructions are found in this file. -### Qt5 Dependencies +## Qt5 Dependencies Should you choose not to install Qt5 via a package manager that handles dependencies for you, you may be missing some Qt5 dependencies. On Ubuntu, for example, the following additional packages are required: libasound2 libxmu-dev libxi-dev freeglut3-dev libasound2-dev libjack0 libjack-dev libxrandr-dev libudev-dev libssl-dev + +## Ubuntu 16.04 specific build guide + +### Prepare environment + +Install qt: +```bash +wget http://debian.highfidelity.com/pool/h/hi/hifi-qt5.6.1_5.6.1_amd64.deb +sudo dpkg -i hifi-qt5.6.1_5.6.1_amd64.deb +``` + +Install build dependencies: +```bash +sudo apt-get install libasound2 libxmu-dev libxi-dev freeglut3-dev libasound2-dev libjack0 libjack-dev libxrandr-dev libudev-dev libssl-dev +``` + +To compile interface in a server you must install: +```bash +sudo apt -y install libpulse0 libnss3 libnspr4 libfontconfig1 libxcursor1 libxcomposite1 libxtst6 libxslt1.1 +``` + +Install build tools: +```bash +sudo apt install cmake +``` + +### Get code and checkout the tag you need + +Clone this repository: +```bash +git clone https://github.com/highfidelity/hifi.git +``` + +To compile a RELEASE version checkout the tag you need getting a list of all tags: +```bash +git fetch -a +git tags +``` + +Then checkout last tag with: +```bash +git checkout tags/RELEASE-6819 +``` + +Or go to the highfidelity download page (https://highfidelity.com/download) to get the release version. For example, if there is a BETA 6731 type: +```bash +git checkout tags/RELEASE-6731 +``` + +### Compiling + +Create the build directory: +```bash +mkdir -p hifi/build +cd hifi/build +``` + +Prepare makefiles: +```bash +cmake -DQT_CMAKE_PREFIX_PATH=/usr/local/Qt5.6.1/5.6/gcc_64/lib/cmake .. +``` + +Start compilation and get a cup of coffee: +```bash +make domain-server assignment-client interface +``` + +In a server does not make sense to compile interface + +### Running the software + +Running domain server: +```bash +./domain-server/domain-server +``` + +Running assignment client: +```bash +./assignment-client/assignment-client -n 6 +``` + +Running interface: +```bash +./interface/interface +``` + +Go to localhost in running interface. From ee1f37190280bd2a095605a84e66c013618d7b9f Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Fri, 14 Jul 2017 16:29:19 +0100 Subject: [PATCH 0953/1049] Fixed step counted not resetting to 1 properly --- interface/src/ui/PreferencesDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 802bb2fd84..bbdbb0187b 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -185,7 +185,7 @@ void setupPreferences() { auto getter = [=]()->float { return myAvatar->getUniformScale(); }; auto setter = [=](float value) { myAvatar->setTargetScale(value); }; auto preference = new SpinnerSliderPreference(AVATAR_TUNING, "Avatar Scale", getter, setter); - preference->setStep(0.1f); + preference->setStep(0.05f); preference->setDecimals(2); preferences->addPreference(preference); From b7ed3ce65920bcdb4a9846dca006617d2079af0c Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Fri, 14 Jul 2017 17:33:17 +0100 Subject: [PATCH 0954/1049] Prettified the Comment --- interface/src/ui/PreferencesDialog.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index bbdbb0187b..87131e4f5c 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -189,8 +189,10 @@ void setupPreferences() { preference->setDecimals(2); preferences->addPreference(preference); - // When the Interface is first loaded, this section setupPreferences(); is loaded - causing the myAvatar->getDomainMinScale() and myAvatar->getDomainMaxScale() to get set to incorrect values which can't be changed across domain switches. - // Having these values loaded up when you load the Dialog each time is a way around this, therefore they're not specified here but in the QML. + // When the Interface is first loaded, this section setupPreferences(); is loaded - + // causing the myAvatar->getDomainMinScale() and myAvatar->getDomainMaxScale() to get set to incorrect values + // which can't be changed across domain switches. Having these values loaded up when you load the Dialog each time + // is a way around this, therefore they're not specified here but in the QML. } { auto getter = []()->float { return DependencyManager::get()->getEyeClosingThreshold(); }; From de199bff9df9f42c164bf77ef501811eb2b0bbf4 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 14 Jul 2017 09:47:37 -0700 Subject: [PATCH 0955/1049] code review feedback --- libraries/animation/src/AnimInverseKinematics.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index 20b62c2724..57c00e7183 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -930,7 +930,7 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars } } - // identity joint chains that have changed types this frame. + // identify joint chains that have changed types this frame. _prevJointChainInfoVec.resize(jointChainInfoVec.size()); for (size_t i = 0; i < _prevJointChainInfoVec.size(); i++) { if (_prevJointChainInfoVec[i].timer <= 0.0f && @@ -944,7 +944,9 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars { PROFILE_RANGE_EX(simulation_animation, "ik/shiftHips", 0xffff00ff, 0); - if (_hipsTargetIndex >= 0 && _hipsTargetIndex >= 0 && _hipsTargetIndex < (int)targets.size()) { + if (_hipsTargetIndex >= 0) { + assert(_hipsTargetIndex < (int)targets.size()); + // slam the hips to match the _hipsTarget AnimPose absPose = targets[_hipsTargetIndex].getPose(); From 68fa426da97c3288bd74b94c31aeaaefb81dba90 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 14 Jul 2017 18:17:13 +0100 Subject: [PATCH 0956/1049] set file url as higher priority --- libraries/networking/src/ResourceCache.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libraries/networking/src/ResourceCache.cpp b/libraries/networking/src/ResourceCache.cpp index 43f0e9335d..fbdfa4b87a 100644 --- a/libraries/networking/src/ResourceCache.cpp +++ b/libraries/networking/src/ResourceCache.cpp @@ -102,6 +102,8 @@ QSharedPointer ResourceCacheSharedItems::getHighestPendingRequest() { QSharedPointer highestResource; Lock lock(_mutex); + bool currentHighestIsFile = false; + for (int i = 0; i < _pendingRequests.size();) { // Clear any freed resources auto resource = _pendingRequests.at(i).lock(); @@ -112,10 +114,12 @@ QSharedPointer ResourceCacheSharedItems::getHighestPendingRequest() { // Check load priority float priority = resource->getLoadPriority(); - if (priority >= highestPriority) { + bool isFile = resource->getURL().scheme() == URL_SCHEME_FILE; + if (priority >= highestPriority && (isFile || !currentHighestIsFile)) { highestPriority = priority; highestIndex = i; highestResource = resource; + currentHighestIsFile = isFile; } i++; } From 93d1725b3c87333ce3055cd4f748ff8086aa05a7 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Fri, 14 Jul 2017 19:30:35 +0100 Subject: [PATCH 0957/1049] make cursor position change based on mouse click position --- interface/resources/qml/hifi/tablet/NewModelDialog.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/NewModelDialog.qml b/interface/resources/qml/hifi/tablet/NewModelDialog.qml index 5040c043f4..d47c981440 100644 --- a/interface/resources/qml/hifi/tablet/NewModelDialog.qml +++ b/interface/resources/qml/hifi/tablet/NewModelDialog.qml @@ -65,7 +65,8 @@ Rectangle { onClicked: { newModelDialog.keyboardEnabled = HMD.active parent.focus = true; - parent.forceActiveFocus() + parent.forceActiveFocus(); + modelURL.cursorPosition = modelURL.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters); } } } From 366ce69e6649892825b192614ad85983cc609cb5 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 13 Jul 2017 13:19:40 -0700 Subject: [PATCH 0958/1049] Add info on how the child AC finished --- .../src/AssignmentClientMonitor.cpp | 21 ++++++++++++++++--- .../src/AssignmentClientMonitor.h | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/assignment-client/src/AssignmentClientMonitor.cpp b/assignment-client/src/AssignmentClientMonitor.cpp index 070034d54b..5539d6a0bb 100644 --- a/assignment-client/src/AssignmentClientMonitor.cpp +++ b/assignment-client/src/AssignmentClientMonitor.cpp @@ -91,9 +91,22 @@ void AssignmentClientMonitor::simultaneousWaitOnChildren(int waitMsecs) { } } -void AssignmentClientMonitor::childProcessFinished(qint64 pid) { +void AssignmentClientMonitor::childProcessFinished(qint64 pid, int exitCode, QProcess::ExitStatus exitStatus) { + auto message = "Child process " + QString::number(pid) + " has %1 with exit code " + QString::number(exitCode) + "."; + if (_childProcesses.remove(pid)) { - qDebug() << "Child process" << pid << "has finished. Removed from internal map."; + message.append(" Removed from internal map."); + } else { + message.append(" Could not find process in internal map."); + } + + switch (exitStatus) { + case QProcess::NormalExit: + qDebug() << qPrintable(message.arg("returned")); + break; + case QProcess::CrashExit: + qCritical() << qPrintable(message.arg("crashed")); + break; } } @@ -221,7 +234,9 @@ void AssignmentClientMonitor::spawnChildClient() { auto pid = assignmentClient->processId(); // make sure we hear that this process has finished when it does connect(assignmentClient, static_cast(&QProcess::finished), - this, [this, pid]() { childProcessFinished(pid); }); + this, [this, pid](int exitCode, QProcess::ExitStatus exitStatus) { + childProcessFinished(pid, exitCode, exitStatus); + }); qDebug() << "Spawned a child client with PID" << assignmentClient->processId(); diff --git a/assignment-client/src/AssignmentClientMonitor.h b/assignment-client/src/AssignmentClientMonitor.h index a7f69a559b..8848d503ae 100644 --- a/assignment-client/src/AssignmentClientMonitor.h +++ b/assignment-client/src/AssignmentClientMonitor.h @@ -44,7 +44,7 @@ public: void stopChildProcesses(); private slots: void checkSpares(); - void childProcessFinished(qint64 pid); + void childProcessFinished(qint64 pid, int exitCode, QProcess::ExitStatus exitStatus); void handleChildStatusPacket(QSharedPointer message); bool handleHTTPRequest(HTTPConnection* connection, const QUrl& url, bool skipSubHandler = false) override; From 2d246d25637edc69902a8ebe0ac2d639ca523cfb Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 13 Jul 2017 13:34:50 -0700 Subject: [PATCH 0959/1049] Implement shutdown with parent for Mac and Linux --- libraries/shared/src/SharedUtil.cpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/libraries/shared/src/SharedUtil.cpp b/libraries/shared/src/SharedUtil.cpp index 58b8aead45..99bdfc4d90 100644 --- a/libraries/shared/src/SharedUtil.cpp +++ b/libraries/shared/src/SharedUtil.cpp @@ -47,6 +47,7 @@ extern "C" FILE * __cdecl __iob_func(void) { #include #include #include +#include #include #include #include @@ -1077,14 +1078,20 @@ void setMaxCores(uint8_t maxCores) { #endif } -#ifdef Q_OS_WIN -VOID CALLBACK parentDiedCallback(PVOID lpParameter, BOOLEAN timerOrWaitFired) { - if (!timerOrWaitFired && qApp) { +void quitWithParentProcess() { + if (qApp) { qDebug() << "Parent process died, quitting"; qApp->quit(); } } +#ifdef Q_OS_WIN +VOID CALLBACK parentDiedCallback(PVOID lpParameter, BOOLEAN timerOrWaitFired) { + if (!timerOrWaitFired) { + quitWithParentProcess(); + } +} + void watchParentProcess(int parentPID) { DWORD processID = parentPID; HANDLE procHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID); @@ -1092,8 +1099,17 @@ void watchParentProcess(int parentPID) { HANDLE newHandle; RegisterWaitForSingleObject(&newHandle, procHandle, parentDiedCallback, NULL, INFINITE, WT_EXECUTEONLYONCE); } -#else +#elif defined(Q_OS_MAC) || defined(Q_OS_LINUX) void watchParentProcess(int parentPID) { - qWarning() << "Parent PID option not implemented on this plateform"; + auto timer = new QTimer(qApp); + timer->setInterval(MSECS_PER_SECOND); + QObject::connect(timer, &QTimer::timeout, qApp, [parentPID]() { + auto ppid = getppid(); + if (parentPID != ppid) { + // If the PPID changed, then that means our parent process died. + quitWithParentProcess(); + } + }); + timer->start(); } -#endif // Q_OS_WIN \ No newline at end of file +#endif From e602d3610e0aacd53b4508f8d34e7f149e316f70 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Fri, 14 Jul 2017 15:44:31 -0700 Subject: [PATCH 0960/1049] Initial commit for HoverOverlayInterface --- interface/src/Application.cpp | 2 + .../src/EntityTreeRenderer.cpp | 7 +++ .../entities/src/HoverOverlayInterface.cpp | 26 +++++++++++ .../entities/src/HoverOverlayInterface.h | 43 +++++++++++++++++++ 4 files changed, 78 insertions(+) create mode 100644 libraries/entities/src/HoverOverlayInterface.cpp create mode 100644 libraries/entities/src/HoverOverlayInterface.h diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e03b4e340e..749feb27ef 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -69,6 +69,7 @@ #include #include #include +#include #include #include #include @@ -588,6 +589,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); return previousSessionCrashed; } diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index a8eca41077..19fea69ddd 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include "RenderableEntityItem.h" @@ -452,6 +453,8 @@ RayToEntityIntersectionResult EntityTreeRenderer::findRayIntersectionWorker(cons void EntityTreeRenderer::connectSignalsToSlots(EntityScriptingInterface* entityScriptingInterface) { + auto hoverOverlayInterface = DependencyManager::get().data(); + connect(this, &EntityTreeRenderer::mousePressOnEntity, entityScriptingInterface, &EntityScriptingInterface::mousePressOnEntity); connect(this, &EntityTreeRenderer::mouseMoveOnEntity, entityScriptingInterface, &EntityScriptingInterface::mouseMoveOnEntity); connect(this, &EntityTreeRenderer::mouseReleaseOnEntity, entityScriptingInterface, &EntityScriptingInterface::mouseReleaseOnEntity); @@ -461,8 +464,12 @@ void EntityTreeRenderer::connectSignalsToSlots(EntityScriptingInterface* entityS connect(this, &EntityTreeRenderer::clickReleaseOnEntity, entityScriptingInterface, &EntityScriptingInterface::clickReleaseOnEntity); connect(this, &EntityTreeRenderer::hoverEnterEntity, entityScriptingInterface, &EntityScriptingInterface::hoverEnterEntity); + connect(this, &EntityTreeRenderer::hoverEnterEntity, hoverOverlayInterface, &HoverOverlayInterface::createHoverOverlay); + connect(this, &EntityTreeRenderer::hoverOverEntity, entityScriptingInterface, &EntityScriptingInterface::hoverOverEntity); + connect(this, &EntityTreeRenderer::hoverLeaveEntity, entityScriptingInterface, &EntityScriptingInterface::hoverLeaveEntity); + connect(this, &EntityTreeRenderer::hoverEnterEntity, hoverOverlayInterface, &HoverOverlayInterface::destroyHoverOverlay); connect(this, &EntityTreeRenderer::enterEntity, entityScriptingInterface, &EntityScriptingInterface::enterEntity); connect(this, &EntityTreeRenderer::leaveEntity, entityScriptingInterface, &EntityScriptingInterface::leaveEntity); diff --git a/libraries/entities/src/HoverOverlayInterface.cpp b/libraries/entities/src/HoverOverlayInterface.cpp new file mode 100644 index 0000000000..4004c3170a --- /dev/null +++ b/libraries/entities/src/HoverOverlayInterface.cpp @@ -0,0 +1,26 @@ +// +// HoverOverlayInterface.cpp +// libraries/entities/src +// +// Created by Zach Fox on 2017-07-14. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "HoverOverlayInterface.h" + +HoverOverlayInterface::HoverOverlayInterface() { + +} + +void HoverOverlayInterface::createHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event) { + qDebug() << "ZACH FOX HOVER ENTER" << entityItemID; + setCurrentHoveredEntity(entityItemID); +} + +void HoverOverlayInterface::destroyHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event) { + qDebug() << "ZACH FOX HOVER LEAVE" << entityItemID; + setCurrentHoveredEntity(QUuid()); +} diff --git a/libraries/entities/src/HoverOverlayInterface.h b/libraries/entities/src/HoverOverlayInterface.h new file mode 100644 index 0000000000..df6d64b4c6 --- /dev/null +++ b/libraries/entities/src/HoverOverlayInterface.h @@ -0,0 +1,43 @@ +// +// HoverOverlayInterface.h +// libraries/entities/src +// +// Created by Zach Fox on 2017-07-14. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_HoverOverlayInterface_h +#define hifi_HoverOverlayInterface_h + +#include +#include + +#include +#include +#include + +#include "EntityTree.h" + + +class HoverOverlayInterface : public QObject, public Dependency { + Q_OBJECT + + Q_PROPERTY(QUuid currentHoveredEntity READ getCurrentHoveredEntity WRITE setCurrentHoveredEntity) +public: + HoverOverlayInterface(); + + Q_INVOKABLE QUuid getCurrentHoveredEntity() { return _currentHoveredEntity; } + void setCurrentHoveredEntity(const QUuid entityID) { _currentHoveredEntity = entityID; } + +public slots: + void createHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event); + void destroyHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event); + +private: + QUuid _currentHoveredEntity{}; +}; + +#endif // hifi_HoverOverlayInterface_h From 19d5b8750a08e32931887b0869477db6aab9ebf6 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 17 Jul 2017 09:51:00 -0700 Subject: [PATCH 0961/1049] Cleanup logging --- libraries/entities/src/HoverOverlayInterface.cpp | 8 ++++++-- libraries/entities/src/HoverOverlayInterface.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/HoverOverlayInterface.cpp b/libraries/entities/src/HoverOverlayInterface.cpp index 4004c3170a..5cbdadbf6f 100644 --- a/libraries/entities/src/HoverOverlayInterface.cpp +++ b/libraries/entities/src/HoverOverlayInterface.cpp @@ -16,11 +16,15 @@ HoverOverlayInterface::HoverOverlayInterface() { } void HoverOverlayInterface::createHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event) { - qDebug() << "ZACH FOX HOVER ENTER" << entityItemID; + if (_verboseLogging) { + qDebug() << "Creating Hover Overlay on top of entity with ID: " << entityItemID; + } setCurrentHoveredEntity(entityItemID); } void HoverOverlayInterface::destroyHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event) { - qDebug() << "ZACH FOX HOVER LEAVE" << entityItemID; + if (_verboseLogging) { + qDebug() << "Destroying Hover Overlay on top of entity with ID: " << entityItemID; + } setCurrentHoveredEntity(QUuid()); } diff --git a/libraries/entities/src/HoverOverlayInterface.h b/libraries/entities/src/HoverOverlayInterface.h index df6d64b4c6..84fdac3ca4 100644 --- a/libraries/entities/src/HoverOverlayInterface.h +++ b/libraries/entities/src/HoverOverlayInterface.h @@ -37,6 +37,7 @@ public slots: void destroyHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event); private: + bool _verboseLogging { true }; QUuid _currentHoveredEntity{}; }; From 147474e19a1995f03b53361d19da5bfcbca02ff6 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 17 Jul 2017 11:17:59 -0700 Subject: [PATCH 0962/1049] Logging category and filter --- .../src/EntityTreeRenderer.cpp | 2 +- .../entities/src/HoverOverlayInterface.cpp | 10 +++------- .../entities/src/HoverOverlayInterface.h | 2 +- .../entities/src/HoverOverlayLogging.cpp | 14 ++++++++++++++ libraries/entities/src/HoverOverlayLogging.h | 19 +++++++++++++++++++ 5 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 libraries/entities/src/HoverOverlayLogging.cpp create mode 100644 libraries/entities/src/HoverOverlayLogging.h diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 19fea69ddd..475471b0fb 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -469,7 +469,7 @@ void EntityTreeRenderer::connectSignalsToSlots(EntityScriptingInterface* entityS connect(this, &EntityTreeRenderer::hoverOverEntity, entityScriptingInterface, &EntityScriptingInterface::hoverOverEntity); connect(this, &EntityTreeRenderer::hoverLeaveEntity, entityScriptingInterface, &EntityScriptingInterface::hoverLeaveEntity); - connect(this, &EntityTreeRenderer::hoverEnterEntity, hoverOverlayInterface, &HoverOverlayInterface::destroyHoverOverlay); + connect(this, &EntityTreeRenderer::hoverLeaveEntity, hoverOverlayInterface, &HoverOverlayInterface::destroyHoverOverlay); connect(this, &EntityTreeRenderer::enterEntity, entityScriptingInterface, &EntityScriptingInterface::enterEntity); connect(this, &EntityTreeRenderer::leaveEntity, entityScriptingInterface, &EntityScriptingInterface::leaveEntity); diff --git a/libraries/entities/src/HoverOverlayInterface.cpp b/libraries/entities/src/HoverOverlayInterface.cpp index 5cbdadbf6f..5737dbfa91 100644 --- a/libraries/entities/src/HoverOverlayInterface.cpp +++ b/libraries/entities/src/HoverOverlayInterface.cpp @@ -12,19 +12,15 @@ #include "HoverOverlayInterface.h" HoverOverlayInterface::HoverOverlayInterface() { - + QLoggingCategory::setFilterRules(QStringLiteral("hifi.hover_overlay.debug=false")); } void HoverOverlayInterface::createHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event) { - if (_verboseLogging) { - qDebug() << "Creating Hover Overlay on top of entity with ID: " << entityItemID; - } + qCDebug(hover_overlay) << "Creating Hover Overlay on top of entity with ID: " << entityItemID; setCurrentHoveredEntity(entityItemID); } void HoverOverlayInterface::destroyHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event) { - if (_verboseLogging) { - qDebug() << "Destroying Hover Overlay on top of entity with ID: " << entityItemID; - } + qCDebug(hover_overlay) << "Destroying Hover Overlay on top of entity with ID: " << entityItemID; setCurrentHoveredEntity(QUuid()); } diff --git a/libraries/entities/src/HoverOverlayInterface.h b/libraries/entities/src/HoverOverlayInterface.h index 84fdac3ca4..7bf55f2ab8 100644 --- a/libraries/entities/src/HoverOverlayInterface.h +++ b/libraries/entities/src/HoverOverlayInterface.h @@ -20,7 +20,7 @@ #include #include "EntityTree.h" - +#include "HoverOverlayLogging.h" class HoverOverlayInterface : public QObject, public Dependency { Q_OBJECT diff --git a/libraries/entities/src/HoverOverlayLogging.cpp b/libraries/entities/src/HoverOverlayLogging.cpp new file mode 100644 index 0000000000..99a2dff782 --- /dev/null +++ b/libraries/entities/src/HoverOverlayLogging.cpp @@ -0,0 +1,14 @@ +// +// HoverOverlayLogging.cpp +// libraries/entities/src +// +// Created by Zach Fox on 2017-07-17 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "HoverOverlayLogging.h" + +Q_LOGGING_CATEGORY(hover_overlay, "hifi.hover_overlay") diff --git a/libraries/entities/src/HoverOverlayLogging.h b/libraries/entities/src/HoverOverlayLogging.h new file mode 100644 index 0000000000..c0c6268993 --- /dev/null +++ b/libraries/entities/src/HoverOverlayLogging.h @@ -0,0 +1,19 @@ +// +// HoverOverlayLogging.h +// libraries/entities/src +// +// Created by Zach Fox on 2017-07-17 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_HoverOverlayLogging_h +#define hifi_HoverOverlayLogging_h + +#include + +Q_DECLARE_LOGGING_CATEGORY(hover_overlay) + +#endif // hifi_HoverOverlayLogging_h From 0a4ab23356533369a42e09d3834a47f2d5fdea77 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 17 Jul 2017 11:32:47 -0700 Subject: [PATCH 0963/1049] Remove unnecessary include --- libraries/entities/src/HoverOverlayInterface.h | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/entities/src/HoverOverlayInterface.h b/libraries/entities/src/HoverOverlayInterface.h index 7bf55f2ab8..f5b8741eee 100644 --- a/libraries/entities/src/HoverOverlayInterface.h +++ b/libraries/entities/src/HoverOverlayInterface.h @@ -16,7 +16,6 @@ #include #include -#include #include #include "EntityTree.h" From 4b9797c1793f2c838406413e67b5798ef1fd6de8 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 17 Jul 2017 11:35:27 -0700 Subject: [PATCH 0964/1049] Comment explaining category debugs --- libraries/entities/src/HoverOverlayInterface.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/entities/src/HoverOverlayInterface.cpp b/libraries/entities/src/HoverOverlayInterface.cpp index 5737dbfa91..85b2738fc4 100644 --- a/libraries/entities/src/HoverOverlayInterface.cpp +++ b/libraries/entities/src/HoverOverlayInterface.cpp @@ -12,6 +12,10 @@ #include "HoverOverlayInterface.h" HoverOverlayInterface::HoverOverlayInterface() { + // "hover_overlay" debug log category disabled by default. + // Create your own "qtlogging.ini" file and set your "QT_LOGGING_CONF" environment variable + // if you'd like to enable/disable certain categories. + // More details: http://doc.qt.io/qt-5/qloggingcategory.html#configuring-categories QLoggingCategory::setFilterRules(QStringLiteral("hifi.hover_overlay.debug=false")); } From 9c610f52eca11a94a637a9f408fb6f0c597a0628 Mon Sep 17 00:00:00 2001 From: humbletim Date: Mon, 17 Jul 2017 15:34:41 -0400 Subject: [PATCH 0965/1049] switch history file format to JSON --- interface/src/ui/JSConsole.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/interface/src/ui/JSConsole.cpp b/interface/src/ui/JSConsole.cpp index 820ed4207d..ef38ea6d29 100644 --- a/interface/src/ui/JSConsole.cpp +++ b/interface/src/ui/JSConsole.cpp @@ -24,7 +24,7 @@ const int NO_CURRENT_HISTORY_COMMAND = -1; const int MAX_HISTORY_SIZE = 256; -const QString HISTORY_FILENAME = "JSConsole.history.txt"; +const QString HISTORY_FILENAME = "JSConsole.history.json"; const QString COMMAND_STYLE = "color: #266a9b;"; @@ -38,16 +38,25 @@ const QString GUTTER_ERROR = "X"; const QString JSConsole::_consoleFileName { "about:console" }; +const QString JSON_KEY = "entries"; QList _readLines(const QString& filename) { QFile file(filename); file.open(QFile::ReadOnly); - return QTextStream(&file).readAll().split("\r\n"); + auto json = QTextStream(&file).readAll().toUtf8(); + auto root = QJsonDocument::fromJson(json).object(); + // TODO: check root["version"] + return root[JSON_KEY].toVariant().toStringList(); } void _writeLines(const QString& filename, const QList& lines) { QFile file(filename); file.open(QFile::WriteOnly); - QTextStream(&file) << lines.join("\r\n"); + auto root = QJsonObject(); + root["version"] = 1.0; + root["last-modified"] = QDateTime::currentDateTime().toTimeSpec(Qt::OffsetFromUTC).toString(Qt::ISODate); + root[JSON_KEY] = QJsonArray::fromStringList(lines); + auto json = QJsonDocument(root).toJson(); + QTextStream(&file) << json; } JSConsole::JSConsole(QWidget* parent, ScriptEngine* scriptEngine) : From 19b42b01800e13f9b7312caeebe3f639262234e8 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 17 Jul 2017 13:15:23 -0700 Subject: [PATCH 0966/1049] CR feedback --- libraries/entities/src/HoverOverlayInterface.h | 3 ++- libraries/entities/src/HoverOverlayLogging.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/HoverOverlayInterface.h b/libraries/entities/src/HoverOverlayInterface.h index f5b8741eee..1e56cc03dd 100644 --- a/libraries/entities/src/HoverOverlayInterface.h +++ b/libraries/entities/src/HoverOverlayInterface.h @@ -9,6 +9,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#pragma once #ifndef hifi_HoverOverlayInterface_h #define hifi_HoverOverlayInterface_h @@ -29,7 +30,7 @@ public: HoverOverlayInterface(); Q_INVOKABLE QUuid getCurrentHoveredEntity() { return _currentHoveredEntity; } - void setCurrentHoveredEntity(const QUuid entityID) { _currentHoveredEntity = entityID; } + void setCurrentHoveredEntity(const QUuid& entityID) { _currentHoveredEntity = entityID; } public slots: void createHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event); diff --git a/libraries/entities/src/HoverOverlayLogging.h b/libraries/entities/src/HoverOverlayLogging.h index c0c6268993..f0a024bba9 100644 --- a/libraries/entities/src/HoverOverlayLogging.h +++ b/libraries/entities/src/HoverOverlayLogging.h @@ -9,6 +9,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#pragma once #ifndef hifi_HoverOverlayLogging_h #define hifi_HoverOverlayLogging_h From 974dff36b0ec6ecf0c5de1a34440a6a37bbe55a0 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 17 Jul 2017 13:03:56 -0700 Subject: [PATCH 0967/1049] Make hover overlays work for hand controller lasers --- interface/src/Application.cpp | 2 ++ .../entities-renderer/src/EntityTreeRenderer.cpp | 4 ++-- libraries/entities/src/HoverOverlayInterface.cpp | 8 ++++++++ libraries/entities/src/HoverOverlayInterface.h | 5 +++++ scripts/system/controllers/handControllerGrab.js | 11 +++++++++++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 707fc7b98b..8e487a8196 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2116,6 +2116,7 @@ void Application::initializeUi() { surfaceContext->setContextProperty("ApplicationCompositor", &getApplicationCompositor()); surfaceContext->setContextProperty("AvatarInputs", AvatarInputs::getInstance()); + surfaceContext->setContextProperty("HoverOverlay", DependencyManager::get().data()); if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { surfaceContext->setContextProperty("Steam", new SteamScriptingInterface(engine, steamClient.get())); @@ -5818,6 +5819,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri auto entityScriptServerLog = DependencyManager::get(); scriptEngine->registerGlobalObject("EntityScriptServerLog", entityScriptServerLog.data()); scriptEngine->registerGlobalObject("AvatarInputs", AvatarInputs::getInstance()); + scriptEngine->registerGlobalObject("HoverOverlay", DependencyManager::get().data()); qScriptRegisterMetaType(scriptEngine, OverlayIDtoScriptValue, OverlayIDfromScriptValue); diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 475471b0fb..987d3118f7 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -464,12 +464,12 @@ void EntityTreeRenderer::connectSignalsToSlots(EntityScriptingInterface* entityS connect(this, &EntityTreeRenderer::clickReleaseOnEntity, entityScriptingInterface, &EntityScriptingInterface::clickReleaseOnEntity); connect(this, &EntityTreeRenderer::hoverEnterEntity, entityScriptingInterface, &EntityScriptingInterface::hoverEnterEntity); - connect(this, &EntityTreeRenderer::hoverEnterEntity, hoverOverlayInterface, &HoverOverlayInterface::createHoverOverlay); + connect(this, SIGNAL(hoverEnterEntity(const EntityItemID&, const PointerEvent&)), hoverOverlayInterface, SLOT(createHoverOverlay(const EntityItemID&, const PointerEvent&))); connect(this, &EntityTreeRenderer::hoverOverEntity, entityScriptingInterface, &EntityScriptingInterface::hoverOverEntity); connect(this, &EntityTreeRenderer::hoverLeaveEntity, entityScriptingInterface, &EntityScriptingInterface::hoverLeaveEntity); - connect(this, &EntityTreeRenderer::hoverLeaveEntity, hoverOverlayInterface, &HoverOverlayInterface::destroyHoverOverlay); + connect(this, SIGNAL(hoverLeaveEntity(const EntityItemID&, const PointerEvent&)), hoverOverlayInterface, SLOT(destroyHoverOverlay(const EntityItemID&, const PointerEvent&))); connect(this, &EntityTreeRenderer::enterEntity, entityScriptingInterface, &EntityScriptingInterface::enterEntity); connect(this, &EntityTreeRenderer::leaveEntity, entityScriptingInterface, &EntityScriptingInterface::leaveEntity); diff --git a/libraries/entities/src/HoverOverlayInterface.cpp b/libraries/entities/src/HoverOverlayInterface.cpp index 85b2738fc4..dcfde41e39 100644 --- a/libraries/entities/src/HoverOverlayInterface.cpp +++ b/libraries/entities/src/HoverOverlayInterface.cpp @@ -24,7 +24,15 @@ void HoverOverlayInterface::createHoverOverlay(const EntityItemID& entityItemID, setCurrentHoveredEntity(entityItemID); } +void HoverOverlayInterface::createHoverOverlay(const EntityItemID& entityItemID) { + HoverOverlayInterface::createHoverOverlay(entityItemID, PointerEvent()); +} + void HoverOverlayInterface::destroyHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event) { qCDebug(hover_overlay) << "Destroying Hover Overlay on top of entity with ID: " << entityItemID; setCurrentHoveredEntity(QUuid()); } + +void HoverOverlayInterface::destroyHoverOverlay(const EntityItemID& entityItemID) { + HoverOverlayInterface::destroyHoverOverlay(entityItemID, PointerEvent()); +} diff --git a/libraries/entities/src/HoverOverlayInterface.h b/libraries/entities/src/HoverOverlayInterface.h index 1e56cc03dd..a39faab819 100644 --- a/libraries/entities/src/HoverOverlayInterface.h +++ b/libraries/entities/src/HoverOverlayInterface.h @@ -22,6 +22,9 @@ #include "EntityTree.h" #include "HoverOverlayLogging.h" +/**jsdoc +* @namespace HoverOverlay +*/ class HoverOverlayInterface : public QObject, public Dependency { Q_OBJECT @@ -34,7 +37,9 @@ public: public slots: void createHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event); + void createHoverOverlay(const EntityItemID& entityItemID); void destroyHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event); + void destroyHoverOverlay(const EntityItemID& entityItemID); private: bool _verboseLogging { true }; diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 04921fe14d..fae3e91c01 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -187,6 +187,8 @@ var DEFAULT_GRABBABLE_DATA = { var USE_BLACKLIST = true; var blacklist = []; +var entitiesWithHoverOverlays = []; + var FORBIDDEN_GRAB_NAMES = ["Grab Debug Entity", "grab pointer"]; var FORBIDDEN_GRAB_TYPES = ["Unknown", "Light", "PolyLine", "Zone"]; @@ -2201,6 +2203,15 @@ function MyController(hand) { entityPropertiesCache.addEntity(rayPickInfo.entityID); } + if (rayPickInfo.entityID && entitiesWithHoverOverlays.indexOf(rayPickInfo.entityID) == -1) { + entitiesWithHoverOverlays.forEach(function (element) { + HoverOverlay.destroyHoverOverlay(element); + }); + entitiesWithHoverOverlays = []; + HoverOverlay.createHoverOverlay(rayPickInfo.entityID); + entitiesWithHoverOverlays.push(rayPickInfo.entityID); + } + var candidateHotSpotEntities = Entities.findEntities(handPosition, MAX_EQUIP_HOTSPOT_RADIUS); entityPropertiesCache.addEntities(candidateHotSpotEntities); From f6208a394cfeb0a3f31eacf443b73cce2e28b30c Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Mon, 17 Jul 2017 21:27:55 +0100 Subject: [PATCH 0968/1049] delete avatar entity when switching domains --- libraries/avatars/src/AvatarData.h | 1 + libraries/entities/src/EntityScriptingInterface.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index f64d9dc2d1..4a22d4e308 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -615,6 +615,7 @@ public: Q_INVOKABLE AvatarEntityMap getAvatarEntityData() const; Q_INVOKABLE void setAvatarEntityData(const AvatarEntityMap& avatarEntityData); void setAvatarEntityDataChanged(bool value) { _avatarEntityDataChanged = value; } + void insertDetachedEntityID(const QUuid entityID) { _avatarEntityDetached.insert(entityID); } AvatarEntityIDs getAndClearRecentlyDetachedIDs(); // thread safe diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index f22631d363..193a0135c6 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include "EntityItemID.h" #include "EntitiesLogging.h" @@ -497,8 +498,11 @@ void EntityScriptingInterface::deleteEntity(QUuid id) { auto nodeList = DependencyManager::get(); const QUuid myNodeID = nodeList->getSessionUUID(); + auto avatarHashMap = DependencyManager::get(); + AvatarSharedPointer myAvatar = avatarHashMap->getAvatarBySessionID(myNodeID); if (entity->getClientOnly() && entity->getOwningAvatarID() != myNodeID) { // don't delete other avatar's avatarEntities + myAvatar->insertDetachedEntityID(id); shouldDelete = false; return; } From 21d760a533027610c8717c626a3052c7177b770d Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Mon, 17 Jul 2017 22:11:05 +0100 Subject: [PATCH 0969/1049] make sure to lock data --- libraries/avatars/src/AvatarData.cpp | 6 ++++++ libraries/avatars/src/AvatarData.h | 2 +- libraries/entities/src/EntityScriptingInterface.cpp | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 5e63619c41..6fdb4d1ef6 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -2366,6 +2366,12 @@ AvatarEntityMap AvatarData::getAvatarEntityData() const { return result; } +void AvatarData::insertDetachedEntityID(const QUuid entityID) { + _avatarEntitiesLock.withWriteLock([&] { + _avatarEntityDetached.insert(entityID); + }); +} + void AvatarData::setAvatarEntityData(const AvatarEntityMap& avatarEntityData) { if (avatarEntityData.size() > MAX_NUM_AVATAR_ENTITIES) { // the data is suspect diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 4a22d4e308..16768ec62a 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -615,7 +615,7 @@ public: Q_INVOKABLE AvatarEntityMap getAvatarEntityData() const; Q_INVOKABLE void setAvatarEntityData(const AvatarEntityMap& avatarEntityData); void setAvatarEntityDataChanged(bool value) { _avatarEntityDataChanged = value; } - void insertDetachedEntityID(const QUuid entityID) { _avatarEntityDetached.insert(entityID); } + void insertDetachedEntityID(const QUuid entityID); AvatarEntityIDs getAndClearRecentlyDetachedIDs(); // thread safe diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 193a0135c6..730677d85d 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -502,6 +502,8 @@ void EntityScriptingInterface::deleteEntity(QUuid id) { AvatarSharedPointer myAvatar = avatarHashMap->getAvatarBySessionID(myNodeID); if (entity->getClientOnly() && entity->getOwningAvatarID() != myNodeID) { // don't delete other avatar's avatarEntities + // If you actually own the entity but the onwership is not set because of a domain switch + // the line below make sure the entity is deleted. myAvatar->insertDetachedEntityID(id); shouldDelete = false; return; From a37f0137e7529cc31e38e14bcadec5eb5bc3a7d0 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Mon, 17 Jul 2017 14:29:43 -0700 Subject: [PATCH 0970/1049] Destroy overlays when trigger released --- scripts/system/controllers/handControllerGrab.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index fae3e91c01..78c4b2960e 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -3774,6 +3774,11 @@ function MyController(hand) { this.release = function() { this.turnOffVisualizations(); + entitiesWithHoverOverlays.forEach(function (element) { + HoverOverlay.destroyHoverOverlay(element); + }); + entitiesWithHoverOverlays = []; + if (this.grabbedThingID !== null) { Messages.sendMessage('Hifi-Teleport-Ignore-Remove', this.grabbedThingID); From 061f084d9faf91123d9326dd4afbd186b2751642 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Mon, 17 Jul 2017 15:08:30 -0700 Subject: [PATCH 0971/1049] Get marketplaceID into imported entities Rather than doing this on the backend, we can do it here at the time we import. Later we will have some support for getting an entities identity hash and querying the backend to get a marketplaceID for them as needed. However for now this is enough to get us moving forward. --- libraries/octree/src/Octree.cpp | 60 ++++++++++++++++++++++++++++++--- libraries/octree/src/Octree.h | 16 ++++----- 2 files changed, 64 insertions(+), 12 deletions(-) diff --git a/libraries/octree/src/Octree.cpp b/libraries/octree/src/Octree.cpp index 2e93f3515f..c0d8ce33ab 100644 --- a/libraries/octree/src/Octree.cpp +++ b/libraries/octree/src/Octree.cpp @@ -29,8 +29,12 @@ #include #include #include +#include +#include #include #include +#include +#include #include #include @@ -1667,7 +1671,30 @@ bool Octree::readJSONFromGzippedFile(QString qFileName) { return readJSONFromStream(-1, jsonStream); } +// hack to get the marketplace id into the entities. We will create a way to get this from a hash of +// the entity later, but this helps us move things along for now +QString getMarketplaceID(const QString& urlString) { + // the url should be http://mpassets.highfidelity.com/-v1/.extension + // a regex for the this is a PITA as there are several valid versions of uuids, and so + // lets strip out the uuid (if any) and try to create a UUID from the string, relying on + // QT to parse it + static const QRegularExpression re("^http:\\/\\/mpassets.highfidelity.com\\/([0-9A-Fa-f\\-]+)v[\\d]+\\/.*"); + QRegularExpressionMatch match = re.match(urlString); + if (match.hasMatch()) { + QString matched = match.captured(1); + // strip the hyphen off the end because my regex is crap + matched.truncate(matched.size()-1); + if (QUuid() == QUuid(matched)) { + qDebug() << "invalid uuid for marketplaceID"; + } else { + return matched; + } + } + return QString(); +} + bool Octree::readFromURL(const QString& urlString) { + QString marketplaceID = getMarketplaceID(urlString); auto request = std::unique_ptr(DependencyManager::get()->createResourceRequest(this, urlString)); @@ -1686,11 +1713,11 @@ bool Octree::readFromURL(const QString& urlString) { auto data = request->getData(); QDataStream inputStream(data); - return readFromStream(data.size(), inputStream); + return readFromStream(data.size(), inputStream, marketplaceID); } -bool Octree::readFromStream(unsigned long streamLength, QDataStream& inputStream) { +bool Octree::readFromStream(unsigned long streamLength, QDataStream& inputStream, const QString& marketplaceID) { // decide if this is binary SVO or JSON-formatted SVO QIODevice *device = inputStream.device(); char firstChar; @@ -1702,7 +1729,7 @@ bool Octree::readFromStream(unsigned long streamLength, QDataStream& inputStream return readSVOFromStream(streamLength, inputStream); } else { qCDebug(octree) << "Reading from JSON SVO Stream length:" << streamLength; - return readJSONFromStream(streamLength, inputStream); + return readJSONFromStream(streamLength, inputStream, marketplaceID); } } @@ -1838,9 +1865,31 @@ bool Octree::readSVOFromStream(unsigned long streamLength, QDataStream& inputStr return fileOk; } +// hack to get the marketplace id into the entities. We will create a way to get this from a hash of +// the entity later, but this helps us move things along for now +QJsonDocument addMarketplaceIDToDocumentEntities(QJsonDocument& doc, const QString& marketplaceID) { + if (!marketplaceID.isEmpty()) { + QJsonDocument newDoc; + QJsonObject rootObj = doc.object(); + QJsonArray newEntitiesArray; + + // build a new entities array + auto entitiesArray = rootObj["Entities"].toArray(); + for(auto it = entitiesArray.begin(); it != entitiesArray.end(); it++) { + auto entity = (*it).toObject(); + entity["marketplaceID"] = marketplaceID; + newEntitiesArray.append(entity); + } + rootObj["Entities"] = newEntitiesArray; + newDoc.setObject(rootObj); + return newDoc; + } + return doc; +} + const int READ_JSON_BUFFER_SIZE = 2048; -bool Octree::readJSONFromStream(unsigned long streamLength, QDataStream& inputStream) { +bool Octree::readJSONFromStream(unsigned long streamLength, QDataStream& inputStream, const QString& marketplaceID /*=""*/) { // if the data is gzipped we may not have a useful bytesAvailable() result, so just keep reading until // we get an eof. Leave streamLength parameter for consistency. @@ -1860,6 +1909,9 @@ bool Octree::readJSONFromStream(unsigned long streamLength, QDataStream& inputSt } QJsonDocument asDocument = QJsonDocument::fromJson(jsonBuffer); + if (!marketplaceID.isEmpty()) { + asDocument = addMarketplaceIDToDocumentEntities(asDocument, marketplaceID); + } QVariant asVariant = asDocument.toVariant(); QVariantMap asMap = asVariant.toMap(); bool success = readFromMap(asMap); diff --git a/libraries/octree/src/Octree.h b/libraries/octree/src/Octree.h index 512a0ab64e..38454d20b5 100644 --- a/libraries/octree/src/Octree.h +++ b/libraries/octree/src/Octree.h @@ -212,14 +212,14 @@ public: virtual bool handlesEditPacketType(PacketType packetType) const { return false; } virtual int processEditPacketData(ReceivedMessage& message, const unsigned char* editData, int maxLength, const SharedNodePointer& sourceNode) { return 0; } - + virtual bool recurseChildrenWithData() const { return true; } virtual bool rootElementHasData() const { return false; } virtual int minimumRequiredRootDataBytes() const { return 0; } virtual bool suppressEmptySubtrees() const { return true; } virtual void releaseSceneEncodeData(OctreeElementExtraEncodeData* extraEncodeData) const { } virtual bool mustIncludeAllChildData() const { return true; } - + /// some versions of the SVO file will include breaks with buffer lengths between each buffer chunk in the SVO /// file. If the Octree subclass expects this for this particular version of the file, it should override this /// method and return true. @@ -236,15 +236,15 @@ public: void reaverageOctreeElements(OctreeElementPointer startElement = OctreeElementPointer()); void deleteOctreeElementAt(float x, float y, float z, float s); - + /// Find the voxel at position x,y,z,s /// \return pointer to the OctreeElement or NULL if none at x,y,z,s. OctreeElementPointer getOctreeElementAt(float x, float y, float z, float s) const; - + /// Find the voxel at position x,y,z,s /// \return pointer to the OctreeElement or to the smallest enclosing parent if none at x,y,z,s. OctreeElementPointer getOctreeEnclosingElementAt(float x, float y, float z, float s) const; - + OctreeElementPointer getOrCreateChildElementAt(float x, float y, float z, float s); OctreeElementPointer getOrCreateChildElementContaining(const AACube& box); @@ -261,7 +261,7 @@ public: int encodeTreeBitstream(const OctreeElementPointer& element, OctreePacketData* packetData, OctreeElementBag& bag, EncodeBitstreamParams& params) ; - + bool isDirty() const { return _isDirty; } void clearDirtyBit() { _isDirty = false; } void setDirtyBit() { _isDirty = true; } @@ -301,9 +301,9 @@ public: // Octree importers bool readFromFile(const char* filename); bool readFromURL(const QString& url); // will support file urls as well... - bool readFromStream(unsigned long streamLength, QDataStream& inputStream); + bool readFromStream(unsigned long streamLength, QDataStream& inputStream, const QString& marketplaceID=""); bool readSVOFromStream(unsigned long streamLength, QDataStream& inputStream); - bool readJSONFromStream(unsigned long streamLength, QDataStream& inputStream); + bool readJSONFromStream(unsigned long streamLength, QDataStream& inputStream, const QString& marketplaceID=""); bool readJSONFromGzippedFile(QString qFileName); virtual bool readFromMap(QVariantMap& entityDescription) = 0; From f5abb4a090f2b413ca36a1e2599096d18bb19e85 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Mon, 17 Jul 2017 23:18:16 +0100 Subject: [PATCH 0972/1049] trying new tablet position spwan --- scripts/system/libraries/WebTablet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index 142ed6e7b6..53f88ea62d 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -76,7 +76,7 @@ function calcSpawnInfo(hand, tabletHeight) { var TABLET_RAKE_ANGLE = 30; rotation = Quat.multiply(Quat.angleAxis(TABLET_RAKE_ANGLE, Vec3.multiplyQbyV(lookAt, Vec3.UNIT_X)), lookAt); - var RELATIVE_SPAWN_OFFSET = { x: 0, y: 0.4, z: 0.05 }; + var RELATIVE_SPAWN_OFFSET = { x: 0, y: 0.6, z: 0.1 }; position = Vec3.sum(position, Vec3.multiplyQbyV(rotation, Vec3.multiply(tabletHeight, RELATIVE_SPAWN_OFFSET))); return { From 91d65469a0a92015e07e9de222cfe220060dd145 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 14 Jul 2017 11:32:47 -0700 Subject: [PATCH 0973/1049] Use timer instead of dedicated thread to tick avatar --- assignment-client/src/Agent.cpp | 29 +++++++++-------- assignment-client/src/Agent.h | 5 +-- assignment-client/src/AvatarAudioTimer.cpp | 36 ---------------------- assignment-client/src/AvatarAudioTimer.h | 31 ------------------- 4 files changed, 15 insertions(+), 86 deletions(-) delete mode 100644 assignment-client/src/AvatarAudioTimer.cpp delete mode 100644 assignment-client/src/AvatarAudioTimer.h diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 7dd7200785..c44fdf74ff 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -51,14 +51,14 @@ #include "RecordingScriptingInterface.h" #include "AbstractAudioInterface.h" -#include "AvatarAudioTimer.h" static const int RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES = 10; Agent::Agent(ReceivedMessage& message) : ThreadedAssignment(message), _receivedAudioStream(RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES, RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES), - _audioGate(AudioConstants::SAMPLE_RATE, AudioConstants::MONO) + _audioGate(AudioConstants::SAMPLE_RATE, AudioConstants::MONO), + _avatarAudioTimer(this) { _entityEditSender.setPacketsPerSecond(DEFAULT_ENTITY_PPS_PER_SCRIPT); DependencyManager::get()->setPacketSender(&_entityEditSender); @@ -96,6 +96,14 @@ Agent::Agent(ReceivedMessage& message) : this, "handleOctreePacket"); packetReceiver.registerListener(PacketType::Jurisdiction, this, "handleJurisdictionPacket"); packetReceiver.registerListener(PacketType::SelectedAudioFormat, this, "handleSelectedAudioFormat"); + + + // 100Hz timer for audio + const int TARGET_INTERVAL_MSEC = 10; // 10ms + connect(&_avatarAudioTimer, &QTimer::timeout, this, &Agent::processAgentAvatarAudio); + _avatarAudioTimer.setSingleShot(false); + _avatarAudioTimer.setInterval(TARGET_INTERVAL_MSEC); + _avatarAudioTimer.setTimerType(Qt::PreciseTimer); } void Agent::playAvatarSound(SharedSoundPointer sound) { @@ -475,14 +483,7 @@ void Agent::executeScript() { DependencyManager::set(_entityViewer.getTree()); - // 100Hz timer for audio - AvatarAudioTimer* audioTimerWorker = new AvatarAudioTimer(); - audioTimerWorker->moveToThread(&_avatarAudioTimerThread); - connect(audioTimerWorker, &AvatarAudioTimer::avatarTick, this, &Agent::processAgentAvatarAudio); - connect(this, &Agent::startAvatarAudioTimer, audioTimerWorker, &AvatarAudioTimer::start); - connect(this, &Agent::stopAvatarAudioTimer, audioTimerWorker, &AvatarAudioTimer::stop); - connect(&_avatarAudioTimerThread, &QThread::finished, audioTimerWorker, &QObject::deleteLater); - _avatarAudioTimerThread.start(); + QMetaObject::invokeMethod(&_avatarAudioTimer, "start"); // Agents should run at 45hz static const int AVATAR_DATA_HZ = 45; @@ -561,7 +562,7 @@ void Agent::setIsAvatar(bool isAvatar) { _avatarIdentityTimer->start(AVATAR_IDENTITY_PACKET_SEND_INTERVAL_MSECS); // FIXME - we shouldn't really need to constantly send identity packets // tell the avatarAudioTimer to start ticking - emit startAvatarAudioTimer(); + QMetaObject::invokeMethod(&_avatarAudioTimer, "start"); } @@ -590,7 +591,7 @@ void Agent::setIsAvatar(bool isAvatar) { nodeList->sendPacket(std::move(packet), *node); }); } - emit stopAvatarAudioTimer(); + QMetaObject::invokeMethod(&_avatarAudioTimer, "stop"); } } @@ -818,9 +819,7 @@ void Agent::aboutToFinish() { DependencyManager::destroy(); DependencyManager::destroy(); - emit stopAvatarAudioTimer(); - _avatarAudioTimerThread.quit(); - _avatarAudioTimerThread.wait(); + QMetaObject::invokeMethod(&_avatarAudioTimer, "stop"); // cleanup codec & encoder if (_codec && _encoder) { diff --git a/assignment-client/src/Agent.h b/assignment-client/src/Agent.h index 549a0858b7..a549df5fb3 100644 --- a/assignment-client/src/Agent.h +++ b/assignment-client/src/Agent.h @@ -81,9 +81,6 @@ private slots: void processAgentAvatar(); void processAgentAvatarAudio(); -signals: - void startAvatarAudioTimer(); - void stopAvatarAudioTimer(); private: void negotiateAudioFormat(); void selectAudioFormat(const QString& selectedCodecName); @@ -118,7 +115,7 @@ private: CodecPluginPointer _codec; QString _selectedCodecName; Encoder* _encoder { nullptr }; - QThread _avatarAudioTimerThread; + QTimer _avatarAudioTimer; bool _flushEncoder { false }; }; diff --git a/assignment-client/src/AvatarAudioTimer.cpp b/assignment-client/src/AvatarAudioTimer.cpp deleted file mode 100644 index d031b9d9f6..0000000000 --- a/assignment-client/src/AvatarAudioTimer.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// -// AvatarAudioTimer.cpp -// assignment-client/src -// -// Created by David Kelly on 10/12/13. -// Copyright 2016 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// -#include -#include -#include "AvatarAudioTimer.h" - -// this should send a signal every 10ms, with pretty good precision. Hardcoding -// to 10ms since that's what you'd want for audio. -void AvatarAudioTimer::start() { - auto startTime = usecTimestampNow(); - quint64 frameCounter = 0; - const int TARGET_INTERVAL_USEC = 10000; // 10ms - while (!_quit) { - ++frameCounter; - - // tick every 10ms from startTime - quint64 targetTime = startTime + frameCounter * TARGET_INTERVAL_USEC; - quint64 now = usecTimestampNow(); - - // avoid quint64 underflow - if (now < targetTime) { - usleep(targetTime - now); - } - - emit avatarTick(); - } - qDebug() << "AvatarAudioTimer is finished"; -} diff --git a/assignment-client/src/AvatarAudioTimer.h b/assignment-client/src/AvatarAudioTimer.h deleted file mode 100644 index 1f6381b030..0000000000 --- a/assignment-client/src/AvatarAudioTimer.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// AvatarAudioTimer.h -// assignment-client/src -// -// Created by David Kelly on 10/12/13. -// Copyright 2016 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#ifndef hifi_AvatarAudioTimer_h -#define hifi_AvatarAudioTimer_h - -#include - -class AvatarAudioTimer : public QObject { - Q_OBJECT - -signals: - void avatarTick(); - -public slots: - void start(); - void stop() { _quit = true; } - -private: - bool _quit { false }; -}; - -#endif //hifi_AvatarAudioTimer_h From aab56cf2a9c6e741a8bb782ec3382bdd15048feb Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 17 Jul 2017 16:21:28 -0700 Subject: [PATCH 0974/1049] Trying to resolve QML / Audio deadlocks --- interface/resources/qml/hifi/audio/Audio.qml | 52 +++++++++++--------- interface/src/scripting/Audio.cpp | 16 +++++- interface/src/scripting/Audio.h | 2 + interface/src/scripting/AudioDevices.cpp | 5 +- 4 files changed, 51 insertions(+), 24 deletions(-) diff --git a/interface/resources/qml/hifi/audio/Audio.qml b/interface/resources/qml/hifi/audio/Audio.qml index 519499e35c..03d27e3831 100644 --- a/interface/resources/qml/hifi/audio/Audio.qml +++ b/interface/resources/qml/hifi/audio/Audio.qml @@ -117,26 +117,28 @@ Rectangle { delegate: Item { width: parent.width; height: 36; + + AudioControls.CheckBox { + id: checkbox + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + text: display; + wrap: false; + checked: selected; + enabled: false; + } - RowLayout { - width: parent.width; + MouseArea { + anchors.fill: checkbox + onClicked: Audio.setInputDevice(info); + } - AudioControls.CheckBox { - Layout.maximumWidth: parent.width - level.width - 40; - text: display; - wrap: false; - checked: selected; - onClicked: { - selected = checked; - checked = Qt.binding(function() { return selected; }); // restore binding - } - } - InputLevel { - id: level; - Layout.alignment: Qt.AlignRight; - Layout.rightMargin: 30; - visible: selected; - } + InputLevel { + id: level; + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 30 + visible: selected; } } } @@ -174,13 +176,19 @@ Rectangle { delegate: Item { width: parent.width; height: 36; + AudioControls.CheckBox { + id: checkbox + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left text: display; checked: selected; - onClicked: { - selected = checked; - checked = Qt.binding(function() { return selected; }); // restore binding - } + enabled: false; + } + + MouseArea { + anchors.fill: checkbox + onClicked: Audio.setOutputDevice(info); } } } diff --git a/interface/src/scripting/Audio.cpp b/interface/src/scripting/Audio.cpp index 8125f9a9f0..860fe4f2a5 100644 --- a/interface/src/scripting/Audio.cpp +++ b/interface/src/scripting/Audio.cpp @@ -133,4 +133,18 @@ void Audio::setReverb(bool enable) { void Audio::setReverbOptions(const AudioEffectOptions* options) { DependencyManager::get()->setReverbOptions(options); -} \ No newline at end of file +} + +void Audio::setInputDevice(const QAudioDeviceInfo& device) { + auto client = DependencyManager::get(); + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", + Q_ARG(QAudio::Mode, QAudio::AudioInput), + Q_ARG(const QAudioDeviceInfo&, device)); +} + +void Audio::setOutputDevice(const QAudioDeviceInfo& device) { + auto client = DependencyManager::get(); + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", + Q_ARG(QAudio::Mode, QAudio::AudioOutput), + Q_ARG(const QAudioDeviceInfo&, device)); +} diff --git a/interface/src/scripting/Audio.h b/interface/src/scripting/Audio.h index ca89521489..acf101159b 100644 --- a/interface/src/scripting/Audio.h +++ b/interface/src/scripting/Audio.h @@ -50,6 +50,8 @@ public: void showMicMeter(bool show); void setInputVolume(float volume); + Q_INVOKABLE void setInputDevice(const QAudioDeviceInfo& device); + Q_INVOKABLE void setOutputDevice(const QAudioDeviceInfo& device); Q_INVOKABLE void setReverb(bool enable); Q_INVOKABLE void setReverbOptions(const AudioEffectOptions* options); diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index e26ebac3f1..2813f75110 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -38,7 +38,8 @@ Setting::Handle& getSetting(bool contextIsHMD, QAudio::Mode mode) { QHash AudioDeviceList::_roles { { Qt::DisplayRole, "display" }, - { Qt::CheckStateRole, "selected" } + { Qt::CheckStateRole, "selected" }, + { Qt::UserRole, "info" } }; Qt::ItemFlags AudioDeviceList::_flags { Qt::ItemIsSelectable | Qt::ItemIsEnabled }; @@ -51,6 +52,8 @@ QVariant AudioDeviceList::data(const QModelIndex& index, int role) const { return _devices.at(index.row()).display; } else if (role == Qt::CheckStateRole) { return _devices.at(index.row()).selected; + } else if (role == Qt::UserRole) { + return QVariant::fromValue(_devices.at(index.row()).info); } else { return QVariant(); } From d43432bd7127c5ec08959cbd2d7fb6ef5149e809 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 17 Jul 2017 18:54:52 -0700 Subject: [PATCH 0975/1049] Cleanup dead code, fix startup behavior --- interface/src/scripting/Audio.cpp | 10 +- interface/src/scripting/AudioDevices.cpp | 114 ++++++++--------------- interface/src/scripting/AudioDevices.h | 10 +- 3 files changed, 43 insertions(+), 91 deletions(-) diff --git a/interface/src/scripting/Audio.cpp b/interface/src/scripting/Audio.cpp index 860fe4f2a5..9719c23885 100644 --- a/interface/src/scripting/Audio.cpp +++ b/interface/src/scripting/Audio.cpp @@ -136,15 +136,9 @@ void Audio::setReverbOptions(const AudioEffectOptions* options) { } void Audio::setInputDevice(const QAudioDeviceInfo& device) { - auto client = DependencyManager::get(); - QMetaObject::invokeMethod(client.data(), "switchAudioDevice", - Q_ARG(QAudio::Mode, QAudio::AudioInput), - Q_ARG(const QAudioDeviceInfo&, device)); + _devices.chooseInputDevice(device); } void Audio::setOutputDevice(const QAudioDeviceInfo& device) { - auto client = DependencyManager::get(); - QMetaObject::invokeMethod(client.data(), "switchAudioDevice", - Q_ARG(QAudio::Mode, QAudio::AudioOutput), - Q_ARG(const QAudioDeviceInfo&, device)); + _devices.chooseOutputDevice(device); } diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index 2813f75110..a284e38dac 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -59,61 +59,17 @@ QVariant AudioDeviceList::data(const QModelIndex& index, int role) const { } } -bool AudioDeviceList::setData(const QModelIndex& index, const QVariant& value, int role) { - if (!index.isValid() || index.row() >= _devices.size() || role != Qt::CheckStateRole) { - return false; - } - - // only allow switching to a new device, not deactivating an in-use device - auto selected = value.toBool(); - if (!selected) { - return false; - } - - return setDevice(index.row(), true); -} - -bool AudioDeviceList::setDevice(int row, bool fromUser) { - bool success = false; - auto& device = _devices[row]; - _userSelection = fromUser; - - // skip if already selected - if (!device.selected) { - auto client = DependencyManager::get(); - QMetaObject::invokeMethod(client.data(), "switchAudioDevice", - Q_ARG(QAudio::Mode, _mode), - Q_ARG(const QAudioDeviceInfo&, device.info)); - } - - emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, 0)); - return success; -} void AudioDeviceList::resetDevice(bool contextIsHMD, const QString& device) { - bool success { false }; - - // try to set the last selected device - if (!device.isNull()) { - auto i = 0; - for (; i < rowCount(); ++i) { - if (device == _devices[i].info.deviceName()) { - break; - } - } - if (i < rowCount()) { - success = setDevice(i, false); - } - - // the selection failed - reset it - if (!success) { - emit deviceSelected(); - } - } + auto client = DependencyManager::get().data(); + auto deviceName = getSetting(contextIsHMD, _mode).get(); + bool switchResult = false; + QMetaObject::invokeMethod(client, "switchAudioDevice", Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, switchResult), + Q_ARG(QAudio::Mode, _mode), Q_ARG(QString, deviceName)); // try to set to the default device for this mode - if (!success) { - auto client = DependencyManager::get().data(); + if (!switchResult) { if (contextIsHMD) { QString deviceName; if (_mode == QAudio::AudioInput) { @@ -144,11 +100,6 @@ void AudioDeviceList::onDeviceChanged(const QAudioDeviceInfo& device) { } } - if (_userSelection) { - _userSelection = false; - emit deviceSelected(_selectedDevice, oldDevice); - } - emit deviceChanged(_selectedDevice); emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, 0)); } @@ -183,13 +134,6 @@ AudioDevices::AudioDevices(bool& contextIsHMD) : _contextIsHMD(contextIsHMD) { _outputs.onDeviceChanged(client->getActiveAudioDevice(QAudio::AudioOutput)); _inputs.onDevicesChanged(client->getAudioDevices(QAudio::AudioInput)); _outputs.onDevicesChanged(client->getAudioDevices(QAudio::AudioOutput)); - - connect(&_inputs, &AudioDeviceList::deviceSelected, [&](const QAudioDeviceInfo& device, const QAudioDeviceInfo& previousDevice) { - onDeviceSelected(QAudio::AudioInput, device, previousDevice); - }); - connect(&_outputs, &AudioDeviceList::deviceSelected, [&](const QAudioDeviceInfo& device, const QAudioDeviceInfo& previousDevice) { - onDeviceSelected(QAudio::AudioOutput, device, previousDevice); - }); } void AudioDevices::onContextChanged(const QString& context) { @@ -245,22 +189,40 @@ void AudioDevices::onDeviceChanged(QAudio::Mode mode, const QAudioDeviceInfo& de } void AudioDevices::onDevicesChanged(QAudio::Mode mode, const QList& devices) { - static bool initialized { false }; - auto initialize = [&]{ - if (initialized) { - onContextChanged(QString()); - } else { - initialized = true; - } - }; - + static std::once_flag once; if (mode == QAudio::AudioInput) { _inputs.onDevicesChanged(devices); - static std::once_flag inputFlag; - std::call_once(inputFlag, initialize); } else { // if (mode == QAudio::AudioOutput) _outputs.onDevicesChanged(devices); - static std::once_flag outputFlag; - std::call_once(outputFlag, initialize); + } + std::call_once(once, [&] { onContextChanged(QString()); }); +} + + +void AudioDevices::chooseInputDevice(const QAudioDeviceInfo& device) { + auto client = DependencyManager::get(); + bool success = false; + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, success), + Q_ARG(QAudio::Mode, QAudio::AudioInput), + Q_ARG(const QAudioDeviceInfo&, device)); + + if (success) { + onDeviceSelected(QAudio::AudioInput, device, _inputs._selectedDevice); + } +} + +void AudioDevices::chooseOutputDevice(const QAudioDeviceInfo& device) { + auto client = DependencyManager::get(); + bool success = false; + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, success), + Q_ARG(QAudio::Mode, QAudio::AudioOutput), + Q_ARG(const QAudioDeviceInfo&, device)); + + if (success) { + onDeviceSelected(QAudio::AudioOutput, device, _outputs._selectedDevice); } } diff --git a/interface/src/scripting/AudioDevices.h b/interface/src/scripting/AudioDevices.h index 8e82ddc4fb..a17c577535 100644 --- a/interface/src/scripting/AudioDevices.h +++ b/interface/src/scripting/AudioDevices.h @@ -37,14 +37,11 @@ public: // get/set devices through a QML ListView QVariant data(const QModelIndex& index, int role) const override; - bool setData(const QModelIndex& index, const QVariant &value, int role) override; // reset device to the last selected device in this context, or the default void resetDevice(bool contextIsHMD, const QString& device); signals: - void deviceSelected(const QAudioDeviceInfo& device = QAudioDeviceInfo(), - const QAudioDeviceInfo& previousDevice = QAudioDeviceInfo()); void deviceChanged(const QAudioDeviceInfo& device); private slots: @@ -54,12 +51,9 @@ private slots: private: friend class AudioDevices; - bool setDevice(int index, bool fromUser); - static QHash _roles; static Qt::ItemFlags _flags; - bool _userSelection { false }; - QAudio::Mode _mode; + const QAudio::Mode _mode; QAudioDeviceInfo _selectedDevice; QList _devices; }; @@ -73,6 +67,8 @@ class AudioDevices : public QObject { public: AudioDevices(bool& contextIsHMD); + void chooseInputDevice(const QAudioDeviceInfo& device); + void chooseOutputDevice(const QAudioDeviceInfo& device); signals: void nop(); From ff51fa71990153733ca61eeed396a8ed5e08ba36 Mon Sep 17 00:00:00 2001 From: NeetBhagat Date: Tue, 18 Jul 2017 10:42:01 +0530 Subject: [PATCH 0976/1049] Resolved review comments. --- interface/src/avatar/MyAvatar.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 6ccc0ab516..5c56d2607c 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2276,15 +2276,16 @@ void MyAvatar::restrictScaleFromDomainSettings(const QJsonObject& domainSettings settings.beginGroup("Avatar"); _targetScale = loadSetting(settings, "scale", 1.0f); - qCDebug(interfaceapp, "This domain requires a minimum avatar scale of %f and a maximum avatar scale of %f. Current avatar scale is %f", - _domainMinimumScale, _domainMaximumScale, _targetScale); + qCDebug(interfaceapp) << "This domain requires a minimum avatar scale of " << _domainMinimumScale + << " and a maximum avatar scale of " << _domainMaximumScale + << ". Current avatar scale is " << _targetScale; // debug to log if this avatar's scale in this domain will be clamped float clampedScale = glm::clamp(_targetScale, _domainMinimumScale, _domainMaximumScale); if (_targetScale != clampedScale) { - qCDebug(interfaceapp, "Current avatar scale is clamped to %f because %f is not allowed by current domain", - clampedScale, _targetScale); + qCDebug(interfaceapp) << "Current avatar scale is clamped to " << clampedScale + << " because " << _targetScale << " is not allowed by current domain"; // The current scale of avatar should not be more than domain's max_avatar_scale and not less than domain's min_avatar_scale . _targetScale = clampedScale; } From d5040006040681e6fe430b07fe197c85ff9efc2f Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 18 Jul 2017 16:51:21 +0100 Subject: [PATCH 0977/1049] made requested changes --- libraries/entities/src/EntityScriptingInterface.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 730677d85d..2cefd647cb 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -498,12 +498,12 @@ void EntityScriptingInterface::deleteEntity(QUuid id) { auto nodeList = DependencyManager::get(); const QUuid myNodeID = nodeList->getSessionUUID(); - auto avatarHashMap = DependencyManager::get(); - AvatarSharedPointer myAvatar = avatarHashMap->getAvatarBySessionID(myNodeID); if (entity->getClientOnly() && entity->getOwningAvatarID() != myNodeID) { // don't delete other avatar's avatarEntities - // If you actually own the entity but the onwership is not set because of a domain switch - // the line below make sure the entity is deleted. + // If you actually own the entity but the onwership property is not set because of a domain switch + // The lines below makes sure the entity is deleted once its properties are set. + auto avatarHashMap = DependencyManager::get(); + AvatarSharedPointer myAvatar = avatarHashMap->getAvatarBySessionID(myNodeID); myAvatar->insertDetachedEntityID(id); shouldDelete = false; return; From 9f13533560bc6e425ba688b632e1827cad7edc4b Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 18 Jul 2017 08:58:17 -0700 Subject: [PATCH 0978/1049] Ensure input and output device containers are protected by mutex --- libraries/audio-client/src/AudioClient.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 3d9b1de10f..bc02da1cc4 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -92,6 +92,7 @@ void AudioClient::checkDevices() { auto inputDevices = getAvailableDevices(QAudio::AudioInput); auto outputDevices = getAvailableDevices(QAudio::AudioOutput); + Lock lock(_deviceMutex); if (inputDevices != _inputDevices) { _inputDevices.swap(inputDevices); emit devicesChanged(QAudio::AudioInput, _inputDevices); From 976fec66f8e34b5ea72216d624134ab46169d593 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 18 Jul 2017 17:59:42 +0100 Subject: [PATCH 0979/1049] fixed loading script whitespace --- interface/src/Application.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 2020b0a490..e8a4a039eb 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -6599,11 +6599,11 @@ void Application::setPreviousScriptLocation(const QString& location) { } void Application::loadScriptURLDialog() const { - auto newScript = OffscreenUi::getText(OffscreenUi::ICON_NONE, "Open and Run Script", "Script URL"); + QString newScript = OffscreenUi::getText(OffscreenUi::ICON_NONE, "Open and Run Script", "Script URL"); if (QUrl(newScript).scheme() == "atp") { OffscreenUi::warning("Error Loading Script", "Cannot load client script over ATP"); } else if (!newScript.isEmpty()) { - DependencyManager::get()->loadScript(newScript); + DependencyManager::get()->loadScript(newScript.trimmed()); } } From c4d5d16eb3de7065f49f55f2c90ccec624e07347 Mon Sep 17 00:00:00 2001 From: David Kelly Date: Tue, 18 Jul 2017 11:12:06 -0700 Subject: [PATCH 0980/1049] cr feedback --- libraries/octree/src/Octree.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libraries/octree/src/Octree.cpp b/libraries/octree/src/Octree.cpp index c0d8ce33ab..cceecaeed9 100644 --- a/libraries/octree/src/Octree.cpp +++ b/libraries/octree/src/Octree.cpp @@ -1678,13 +1678,11 @@ QString getMarketplaceID(const QString& urlString) { // a regex for the this is a PITA as there are several valid versions of uuids, and so // lets strip out the uuid (if any) and try to create a UUID from the string, relying on // QT to parse it - static const QRegularExpression re("^http:\\/\\/mpassets.highfidelity.com\\/([0-9A-Fa-f\\-]+)v[\\d]+\\/.*"); + static const QRegularExpression re("^http:\\/\\/mpassets.highfidelity.com\\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})-v[\\d]+\\/.*"); QRegularExpressionMatch match = re.match(urlString); if (match.hasMatch()) { QString matched = match.captured(1); - // strip the hyphen off the end because my regex is crap - matched.truncate(matched.size()-1); - if (QUuid() == QUuid(matched)) { + if (QUuid(matched).isNull()) { qDebug() << "invalid uuid for marketplaceID"; } else { return matched; From 06a69c8bd72ca1f01cc3e60303530249ae590e34 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 18 Jul 2017 20:27:55 +0100 Subject: [PATCH 0981/1049] fixed another tablet stuck on help screen --- libraries/ui/src/ui/TabletScriptingInterface.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index 76f290f17e..496095de79 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -226,9 +226,12 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { // forward qml surface events to interface js connect(tabletRootWindow, &QmlWindowClass::fromQml, this, &TabletProxy::fromQml); + loadHomeScreen(true); + emit screenChanged(QVariant("Home"), QVariant(TABLET_SOURCE_URL)); } else { removeButtonsFromToolbar(); addButtonsToHomeScreen(); + loadHomeScreen(true); emit screenChanged(QVariant("Home"), QVariant(TABLET_SOURCE_URL)); // destroy desktop window From 1aee8f1f4d20cdc60b110320bd09e0dd1ce4c257 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 18 Jul 2017 13:44:58 -0700 Subject: [PATCH 0982/1049] Ensure we continue calling idle when minimized --- interface/src/Application.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e8a4a039eb..dbb94cfdae 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2751,6 +2751,16 @@ bool Application::event(QEvent* event) { static_cast(event)->call(); return true; + // Explicit idle keeps the idle running at a lower interval, but without any rendering + // see (windowMinimizedChanged) + case Event::Idle: + { + float nsecsElapsed = (float)_lastTimeUpdated.nsecsElapsed(); + _lastTimeUpdated.start(); + idle(nsecsElapsed); + } + return true; + case Event::Present: if (!_renderRequested) { float nsecsElapsed = (float)_lastTimeUpdated.nsecsElapsed(); @@ -5439,9 +5449,9 @@ void Application::updateWindowTitle() const { #endif _window->setWindowTitle(title); - // updateTitleWindow gets called whenever there's a change regarding the domain, so rather - // than placing this within domainChanged, it's placed here to cover the other potential cases. - DependencyManager::get< MessagesClient >()->sendLocalMessage("Toolbar-DomainChanged", ""); + // updateTitleWindow gets called whenever there's a change regarding the domain, so rather + // than placing this within domainChanged, it's placed here to cover the other potential cases. + DependencyManager::get< MessagesClient >()->sendLocalMessage("Toolbar-DomainChanged", ""); } void Application::clearDomainOctreeDetails() { From 497fd7f714f4f9e0250febbb6b1153a2ab33718c Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 18 Jul 2017 13:29:03 -0700 Subject: [PATCH 0983/1049] Pin File pointer during eject --- libraries/shared/src/shared/FileCache.cpp | 3 ++- libraries/shared/src/shared/FileCache.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/shared/src/shared/FileCache.cpp b/libraries/shared/src/shared/FileCache.cpp index 695336847e..9957c6bfc6 100644 --- a/libraries/shared/src/shared/FileCache.cpp +++ b/libraries/shared/src/shared/FileCache.cpp @@ -258,7 +258,8 @@ namespace cache { }; } -void FileCache::eject(const FilePointer& file) { +// Take file pointer by value to insure it doesn't get destructed during the "erase()" calls +void FileCache::eject(FilePointer file) { file->_locked = false; const auto& length = file->getLength(); const auto& key = file->getKey(); diff --git a/libraries/shared/src/shared/FileCache.h b/libraries/shared/src/shared/FileCache.h index 1580674ca0..94fa57457a 100644 --- a/libraries/shared/src/shared/FileCache.h +++ b/libraries/shared/src/shared/FileCache.h @@ -119,7 +119,7 @@ private: void clean(); void clear(); // Remove a file from the cache - void eject(const FilePointer& file); + void eject(FilePointer file); size_t getOverbudgetAmount() const; From 4ad36ccec9bdf1bd8951fd41cfe15063409c1b32 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 17 Jul 2017 16:21:28 -0700 Subject: [PATCH 0984/1049] Trying to resolve QML / Audio deadlocks --- interface/resources/qml/hifi/audio/Audio.qml | 52 +++++++++++--------- interface/src/scripting/Audio.cpp | 16 +++++- interface/src/scripting/Audio.h | 2 + interface/src/scripting/AudioDevices.cpp | 5 +- 4 files changed, 51 insertions(+), 24 deletions(-) diff --git a/interface/resources/qml/hifi/audio/Audio.qml b/interface/resources/qml/hifi/audio/Audio.qml index 519499e35c..03d27e3831 100644 --- a/interface/resources/qml/hifi/audio/Audio.qml +++ b/interface/resources/qml/hifi/audio/Audio.qml @@ -117,26 +117,28 @@ Rectangle { delegate: Item { width: parent.width; height: 36; + + AudioControls.CheckBox { + id: checkbox + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + text: display; + wrap: false; + checked: selected; + enabled: false; + } - RowLayout { - width: parent.width; + MouseArea { + anchors.fill: checkbox + onClicked: Audio.setInputDevice(info); + } - AudioControls.CheckBox { - Layout.maximumWidth: parent.width - level.width - 40; - text: display; - wrap: false; - checked: selected; - onClicked: { - selected = checked; - checked = Qt.binding(function() { return selected; }); // restore binding - } - } - InputLevel { - id: level; - Layout.alignment: Qt.AlignRight; - Layout.rightMargin: 30; - visible: selected; - } + InputLevel { + id: level; + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 30 + visible: selected; } } } @@ -174,13 +176,19 @@ Rectangle { delegate: Item { width: parent.width; height: 36; + AudioControls.CheckBox { + id: checkbox + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left text: display; checked: selected; - onClicked: { - selected = checked; - checked = Qt.binding(function() { return selected; }); // restore binding - } + enabled: false; + } + + MouseArea { + anchors.fill: checkbox + onClicked: Audio.setOutputDevice(info); } } } diff --git a/interface/src/scripting/Audio.cpp b/interface/src/scripting/Audio.cpp index 8125f9a9f0..860fe4f2a5 100644 --- a/interface/src/scripting/Audio.cpp +++ b/interface/src/scripting/Audio.cpp @@ -133,4 +133,18 @@ void Audio::setReverb(bool enable) { void Audio::setReverbOptions(const AudioEffectOptions* options) { DependencyManager::get()->setReverbOptions(options); -} \ No newline at end of file +} + +void Audio::setInputDevice(const QAudioDeviceInfo& device) { + auto client = DependencyManager::get(); + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", + Q_ARG(QAudio::Mode, QAudio::AudioInput), + Q_ARG(const QAudioDeviceInfo&, device)); +} + +void Audio::setOutputDevice(const QAudioDeviceInfo& device) { + auto client = DependencyManager::get(); + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", + Q_ARG(QAudio::Mode, QAudio::AudioOutput), + Q_ARG(const QAudioDeviceInfo&, device)); +} diff --git a/interface/src/scripting/Audio.h b/interface/src/scripting/Audio.h index ca89521489..acf101159b 100644 --- a/interface/src/scripting/Audio.h +++ b/interface/src/scripting/Audio.h @@ -50,6 +50,8 @@ public: void showMicMeter(bool show); void setInputVolume(float volume); + Q_INVOKABLE void setInputDevice(const QAudioDeviceInfo& device); + Q_INVOKABLE void setOutputDevice(const QAudioDeviceInfo& device); Q_INVOKABLE void setReverb(bool enable); Q_INVOKABLE void setReverbOptions(const AudioEffectOptions* options); diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index e26ebac3f1..2813f75110 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -38,7 +38,8 @@ Setting::Handle& getSetting(bool contextIsHMD, QAudio::Mode mode) { QHash AudioDeviceList::_roles { { Qt::DisplayRole, "display" }, - { Qt::CheckStateRole, "selected" } + { Qt::CheckStateRole, "selected" }, + { Qt::UserRole, "info" } }; Qt::ItemFlags AudioDeviceList::_flags { Qt::ItemIsSelectable | Qt::ItemIsEnabled }; @@ -51,6 +52,8 @@ QVariant AudioDeviceList::data(const QModelIndex& index, int role) const { return _devices.at(index.row()).display; } else if (role == Qt::CheckStateRole) { return _devices.at(index.row()).selected; + } else if (role == Qt::UserRole) { + return QVariant::fromValue(_devices.at(index.row()).info); } else { return QVariant(); } From aeabfe84f0cec8ea0f908da96eeda84f3bbd277d Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 17 Jul 2017 18:54:52 -0700 Subject: [PATCH 0985/1049] Cleanup dead code, fix startup behavior --- interface/src/scripting/Audio.cpp | 10 +- interface/src/scripting/AudioDevices.cpp | 114 ++++++++--------------- interface/src/scripting/AudioDevices.h | 10 +- 3 files changed, 43 insertions(+), 91 deletions(-) diff --git a/interface/src/scripting/Audio.cpp b/interface/src/scripting/Audio.cpp index 860fe4f2a5..9719c23885 100644 --- a/interface/src/scripting/Audio.cpp +++ b/interface/src/scripting/Audio.cpp @@ -136,15 +136,9 @@ void Audio::setReverbOptions(const AudioEffectOptions* options) { } void Audio::setInputDevice(const QAudioDeviceInfo& device) { - auto client = DependencyManager::get(); - QMetaObject::invokeMethod(client.data(), "switchAudioDevice", - Q_ARG(QAudio::Mode, QAudio::AudioInput), - Q_ARG(const QAudioDeviceInfo&, device)); + _devices.chooseInputDevice(device); } void Audio::setOutputDevice(const QAudioDeviceInfo& device) { - auto client = DependencyManager::get(); - QMetaObject::invokeMethod(client.data(), "switchAudioDevice", - Q_ARG(QAudio::Mode, QAudio::AudioOutput), - Q_ARG(const QAudioDeviceInfo&, device)); + _devices.chooseOutputDevice(device); } diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index 2813f75110..a284e38dac 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -59,61 +59,17 @@ QVariant AudioDeviceList::data(const QModelIndex& index, int role) const { } } -bool AudioDeviceList::setData(const QModelIndex& index, const QVariant& value, int role) { - if (!index.isValid() || index.row() >= _devices.size() || role != Qt::CheckStateRole) { - return false; - } - - // only allow switching to a new device, not deactivating an in-use device - auto selected = value.toBool(); - if (!selected) { - return false; - } - - return setDevice(index.row(), true); -} - -bool AudioDeviceList::setDevice(int row, bool fromUser) { - bool success = false; - auto& device = _devices[row]; - _userSelection = fromUser; - - // skip if already selected - if (!device.selected) { - auto client = DependencyManager::get(); - QMetaObject::invokeMethod(client.data(), "switchAudioDevice", - Q_ARG(QAudio::Mode, _mode), - Q_ARG(const QAudioDeviceInfo&, device.info)); - } - - emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, 0)); - return success; -} void AudioDeviceList::resetDevice(bool contextIsHMD, const QString& device) { - bool success { false }; - - // try to set the last selected device - if (!device.isNull()) { - auto i = 0; - for (; i < rowCount(); ++i) { - if (device == _devices[i].info.deviceName()) { - break; - } - } - if (i < rowCount()) { - success = setDevice(i, false); - } - - // the selection failed - reset it - if (!success) { - emit deviceSelected(); - } - } + auto client = DependencyManager::get().data(); + auto deviceName = getSetting(contextIsHMD, _mode).get(); + bool switchResult = false; + QMetaObject::invokeMethod(client, "switchAudioDevice", Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, switchResult), + Q_ARG(QAudio::Mode, _mode), Q_ARG(QString, deviceName)); // try to set to the default device for this mode - if (!success) { - auto client = DependencyManager::get().data(); + if (!switchResult) { if (contextIsHMD) { QString deviceName; if (_mode == QAudio::AudioInput) { @@ -144,11 +100,6 @@ void AudioDeviceList::onDeviceChanged(const QAudioDeviceInfo& device) { } } - if (_userSelection) { - _userSelection = false; - emit deviceSelected(_selectedDevice, oldDevice); - } - emit deviceChanged(_selectedDevice); emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, 0)); } @@ -183,13 +134,6 @@ AudioDevices::AudioDevices(bool& contextIsHMD) : _contextIsHMD(contextIsHMD) { _outputs.onDeviceChanged(client->getActiveAudioDevice(QAudio::AudioOutput)); _inputs.onDevicesChanged(client->getAudioDevices(QAudio::AudioInput)); _outputs.onDevicesChanged(client->getAudioDevices(QAudio::AudioOutput)); - - connect(&_inputs, &AudioDeviceList::deviceSelected, [&](const QAudioDeviceInfo& device, const QAudioDeviceInfo& previousDevice) { - onDeviceSelected(QAudio::AudioInput, device, previousDevice); - }); - connect(&_outputs, &AudioDeviceList::deviceSelected, [&](const QAudioDeviceInfo& device, const QAudioDeviceInfo& previousDevice) { - onDeviceSelected(QAudio::AudioOutput, device, previousDevice); - }); } void AudioDevices::onContextChanged(const QString& context) { @@ -245,22 +189,40 @@ void AudioDevices::onDeviceChanged(QAudio::Mode mode, const QAudioDeviceInfo& de } void AudioDevices::onDevicesChanged(QAudio::Mode mode, const QList& devices) { - static bool initialized { false }; - auto initialize = [&]{ - if (initialized) { - onContextChanged(QString()); - } else { - initialized = true; - } - }; - + static std::once_flag once; if (mode == QAudio::AudioInput) { _inputs.onDevicesChanged(devices); - static std::once_flag inputFlag; - std::call_once(inputFlag, initialize); } else { // if (mode == QAudio::AudioOutput) _outputs.onDevicesChanged(devices); - static std::once_flag outputFlag; - std::call_once(outputFlag, initialize); + } + std::call_once(once, [&] { onContextChanged(QString()); }); +} + + +void AudioDevices::chooseInputDevice(const QAudioDeviceInfo& device) { + auto client = DependencyManager::get(); + bool success = false; + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, success), + Q_ARG(QAudio::Mode, QAudio::AudioInput), + Q_ARG(const QAudioDeviceInfo&, device)); + + if (success) { + onDeviceSelected(QAudio::AudioInput, device, _inputs._selectedDevice); + } +} + +void AudioDevices::chooseOutputDevice(const QAudioDeviceInfo& device) { + auto client = DependencyManager::get(); + bool success = false; + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, success), + Q_ARG(QAudio::Mode, QAudio::AudioOutput), + Q_ARG(const QAudioDeviceInfo&, device)); + + if (success) { + onDeviceSelected(QAudio::AudioOutput, device, _outputs._selectedDevice); } } diff --git a/interface/src/scripting/AudioDevices.h b/interface/src/scripting/AudioDevices.h index 8e82ddc4fb..a17c577535 100644 --- a/interface/src/scripting/AudioDevices.h +++ b/interface/src/scripting/AudioDevices.h @@ -37,14 +37,11 @@ public: // get/set devices through a QML ListView QVariant data(const QModelIndex& index, int role) const override; - bool setData(const QModelIndex& index, const QVariant &value, int role) override; // reset device to the last selected device in this context, or the default void resetDevice(bool contextIsHMD, const QString& device); signals: - void deviceSelected(const QAudioDeviceInfo& device = QAudioDeviceInfo(), - const QAudioDeviceInfo& previousDevice = QAudioDeviceInfo()); void deviceChanged(const QAudioDeviceInfo& device); private slots: @@ -54,12 +51,9 @@ private slots: private: friend class AudioDevices; - bool setDevice(int index, bool fromUser); - static QHash _roles; static Qt::ItemFlags _flags; - bool _userSelection { false }; - QAudio::Mode _mode; + const QAudio::Mode _mode; QAudioDeviceInfo _selectedDevice; QList _devices; }; @@ -73,6 +67,8 @@ class AudioDevices : public QObject { public: AudioDevices(bool& contextIsHMD); + void chooseInputDevice(const QAudioDeviceInfo& device); + void chooseOutputDevice(const QAudioDeviceInfo& device); signals: void nop(); From 02363e06de87f32a9997d4df62deba6c99a30007 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 18 Jul 2017 08:58:17 -0700 Subject: [PATCH 0986/1049] Ensure input and output device containers are protected by mutex --- libraries/audio-client/src/AudioClient.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 3d9b1de10f..bc02da1cc4 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -92,6 +92,7 @@ void AudioClient::checkDevices() { auto inputDevices = getAvailableDevices(QAudio::AudioInput); auto outputDevices = getAvailableDevices(QAudio::AudioOutput); + Lock lock(_deviceMutex); if (inputDevices != _inputDevices) { _inputDevices.swap(inputDevices); emit devicesChanged(QAudio::AudioInput, _inputDevices); From 8cbe63f2960d83eef20e6519f44d84f48b00de93 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 18 Jul 2017 22:45:54 +0100 Subject: [PATCH 0987/1049] removed search laser in edit mode for 2d mode --- scripts/system/controllers/handControllerGrab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 78c4b2960e..fe4904c599 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -1801,7 +1801,7 @@ function MyController(hand) { this.processStylus(); - if (isInEditMode() && !this.isNearStylusTarget && HMD.isHandControllerAvailable()) { + if (isInEditMode() && !this.isNearStylusTarget && HMD.isHandControllerAvailable() && HMD.active) { // Always showing lasers while in edit mode and hands/stylus is not active. var rayPickInfo = this.calcRayPickInfo(this.hand); this.intersectionDistance = (rayPickInfo.entityID || rayPickInfo.overlayID) ? rayPickInfo.distance : 0; From 4b94d24c2922a3028cf9898f367b6b7077530260 Mon Sep 17 00:00:00 2001 From: vladest Date: Tue, 18 Jul 2017 23:51:19 +0200 Subject: [PATCH 0988/1049] Change default mouse speeds for avatar --- interface/src/avatar/MyAvatar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index f9a4d491c8..a6958c9089 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -69,8 +69,8 @@ const float MAX_BOOST_SPEED = 0.5f * MAX_WALKING_SPEED; // action motor gets add const float MIN_AVATAR_SPEED = 0.05f; const float MIN_AVATAR_SPEED_SQUARED = MIN_AVATAR_SPEED * MIN_AVATAR_SPEED; // speed is set to zero below this -const float YAW_SPEED_DEFAULT = 120.0f; // degrees/sec -const float PITCH_SPEED_DEFAULT = 90.0f; // degrees/sec +const float YAW_SPEED_DEFAULT = 60.0f; // degrees/sec +const float PITCH_SPEED_DEFAULT = 45.0f; // degrees/sec // TODO: normalize avatar speed for standard avatar size, then scale all motion logic // to properly follow avatar size. From b3ec306063469eea47ee1efbbac3fab5140df74e Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 18 Jul 2017 23:48:21 +0100 Subject: [PATCH 0989/1049] better version --- scripts/system/controllers/handControllerGrab.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index fe4904c599..e2de13d4b1 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -1801,11 +1801,16 @@ function MyController(hand) { this.processStylus(); - if (isInEditMode() && !this.isNearStylusTarget && HMD.isHandControllerAvailable() && HMD.active) { + if (isInEditMode() && !this.isNearStylusTarget && HMD.isHandControllerAvailable()) { // Always showing lasers while in edit mode and hands/stylus is not active. + var rayPickInfo = this.calcRayPickInfo(this.hand); - this.intersectionDistance = (rayPickInfo.entityID || rayPickInfo.overlayID) ? rayPickInfo.distance : 0; - this.searchIndicatorOn(rayPickInfo.searchRay); + if (rayPickInfo.isValid) { + this.intersectionDistance = (rayPickInfo.entityID || rayPickInfo.overlayID) ? rayPickInfo.distance : 0; + this.searchIndicatorOn(rayPickInfo.searchRay); + } else { + this.searchIndicatorOff(); + } } else { this.searchIndicatorOff(); } @@ -1854,12 +1859,14 @@ function MyController(hand) { this.calcRayPickInfo = function(hand, pickRayOverride) { var pickRay; + var valid = true if (pickRayOverride) { pickRay = pickRayOverride; } else { var controllerLocation = getControllerWorldLocation(this.handToController(), true); var worldHandPosition = controllerLocation.position; var worldHandRotation = controllerLocation.orientation; + valid = !(worldHandPosition === undefined); pickRay = { origin: PICK_WITH_HAND_RAY ? worldHandPosition : Camera.position, @@ -1874,7 +1881,8 @@ function MyController(hand) { entityID: null, overlayID: null, searchRay: pickRay, - distance: PICK_MAX_DISTANCE + distance: PICK_MAX_DISTANCE, + isValid: valid }; var now = Date.now(); From 8dafc30bf963f8362bf9c435fd10f463443c6704 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 18 Jul 2017 15:57:00 -0700 Subject: [PATCH 0990/1049] fix debug build: stub pure virtual function --- .../display-plugins/src/display-plugins/NullDisplayPlugin.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h index 1da0441d8f..8d01539e8a 100644 --- a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h @@ -19,6 +19,7 @@ public: bool hasFocus() const override; void submitFrame(const gpu::FramePointer& newFrame) override; QImage getScreenshot(float aspectRatio = 0.0f) const override; + void copyTextureToQuickFramebuffer(NetworkTexturePointer source, QOpenGLFramebufferObject* target, GLsync* fenceSync) override {}; private: static const QString NAME; }; From 009df176c511a7acde67a4baaa709263bfe0936d Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 18 Jul 2017 13:44:58 -0700 Subject: [PATCH 0991/1049] Ensure we continue calling idle when minimized Conflicts: interface/src/Application.cpp --- interface/src/Application.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a214068239..0cb4b90174 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2742,6 +2742,16 @@ bool Application::event(QEvent* event) { static_cast(event)->call(); return true; + // Explicit idle keeps the idle running at a lower interval, but without any rendering + // see (windowMinimizedChanged) + case Event::Idle: + { + float nsecsElapsed = (float)_lastTimeUpdated.nsecsElapsed(); + _lastTimeUpdated.start(); + idle(nsecsElapsed); + } + return true; + case Event::Present: if (!_renderRequested) { float nsecsElapsed = (float)_lastTimeUpdated.nsecsElapsed(); From fdfeab77eb919568a5d3444c6aea6b76235dc8ec Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Wed, 19 Jul 2017 16:28:16 +0100 Subject: [PATCH 0992/1049] made requested changes --- libraries/ui/src/ui/TabletScriptingInterface.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index 496095de79..6ff5e46cea 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -226,13 +226,9 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { // forward qml surface events to interface js connect(tabletRootWindow, &QmlWindowClass::fromQml, this, &TabletProxy::fromQml); - loadHomeScreen(true); - emit screenChanged(QVariant("Home"), QVariant(TABLET_SOURCE_URL)); } else { removeButtonsFromToolbar(); addButtonsToHomeScreen(); - loadHomeScreen(true); - emit screenChanged(QVariant("Home"), QVariant(TABLET_SOURCE_URL)); // destroy desktop window if (_desktopWindow) { @@ -240,6 +236,8 @@ void TabletProxy::setToolbarMode(bool toolbarMode) { _desktopWindow = nullptr; } } + loadHomeScreen(true); + emit screenChanged(QVariant("Home"), QVariant(TABLET_SOURCE_URL)); } static void addButtonProxyToQmlTablet(QQuickItem* qmlTablet, TabletButtonProxy* buttonProxy) { From a8698c2fbc164071320a64df805e64ca50ad9dde Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 19 Jul 2017 08:59:09 -0700 Subject: [PATCH 0993/1049] EntityScriptingInterface::getMeshes support for Model entities --- .../src/RenderableModelEntityItem.cpp | 7 ++++ .../src/RenderableModelEntityItem.h | 2 ++ libraries/model/src/model/Geometry.cpp | 2 +- libraries/model/src/model/Geometry.h | 2 +- libraries/render-utils/src/Model.cpp | 35 +++++++++++++++++++ libraries/render-utils/src/Model.h | 2 ++ 6 files changed, 48 insertions(+), 2 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 0b6271a6b1..5c0c6101a3 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1282,3 +1282,10 @@ void RenderableModelEntityItem::mapJoints(const QStringList& modelJointNames) { } } } + +bool RenderableModelEntityItem::getMeshes(MeshProxyList& result) { + if (!_model || !_model->isLoaded()) { + return false; + } + return _model->getMeshes(result); +} diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 2d240c01a6..a5ba7bedda 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -116,6 +116,8 @@ public: return _animation; } + bool getMeshes(MeshProxyList& result) override; + private: QVariantMap parseTexturesToMap(QString textures); void remapTextures(); diff --git a/libraries/model/src/model/Geometry.cpp b/libraries/model/src/model/Geometry.cpp index f88c8233ea..ac4c5dc188 100755 --- a/libraries/model/src/model/Geometry.cpp +++ b/libraries/model/src/model/Geometry.cpp @@ -137,7 +137,7 @@ Box Mesh::evalPartsBound(int partStart, int partEnd) const { model::MeshPointer Mesh::map(std::function vertexFunc, std::function normalFunc, - std::function indexFunc) { + std::function indexFunc) const { // vertex data const gpu::BufferView& vertexBufferView = getVertexBuffer(); gpu::BufferView::Index numVertices = (gpu::BufferView::Index)getNumVertices(); diff --git a/libraries/model/src/model/Geometry.h b/libraries/model/src/model/Geometry.h index a3198eed26..f273435545 100755 --- a/libraries/model/src/model/Geometry.h +++ b/libraries/model/src/model/Geometry.h @@ -124,7 +124,7 @@ public: // create a copy of this mesh after passing its vertices, normals, and indexes though the provided functions MeshPointer map(std::function vertexFunc, std::function normalFunc, - std::function indexFunc); + std::function indexFunc) const; void forEach(std::function vertexFunc, std::function normalFunc, diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 45be09b701..5e3c9c8ecd 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include "AbstractViewStateInterface.h" #include "MeshPartPayload.h" @@ -462,6 +463,40 @@ bool Model::convexHullContains(glm::vec3 point) { return false; } +bool Model::getMeshes(MeshProxyList& result) { + const Geometry::Pointer& renderGeometry = getGeometry(); + const Geometry::GeometryMeshes& meshes = renderGeometry->getMeshes(); + + if (!isLoaded()) { + return false; + } + + Transform offset; + offset.setScale(_scale); + // not set -- far to the right + // offset.postTranslate(_offset); // far to right + // offset.postTranslate(-_offset); // a bit to left + glm::mat4 offsetMat = offset.getMatrix(); + + for (std::shared_ptr mesh : meshes) { + if (!mesh) { + continue; + } + + MeshProxy* meshProxy = new SimpleMeshProxy( + mesh->map([=](glm::vec3 position) { + const glm::vec3 DEFAULT_ENTITY_REGISTRATION_POINT = glm::vec3(0.5f, 0.5f, 0.5f); + glm::vec3 regis = _registrationPoint - DEFAULT_ENTITY_REGISTRATION_POINT; + return glm::vec3(offsetMat * glm::vec4(position + _offset, 1.0f)) + regis; // very close + }, + [=](glm::vec3 normal){ return glm::normalize(glm::vec3(offsetMat * glm::vec4(normal, 0.0f))); }, + [&](uint32_t index){ return index; })); + result << meshProxy; + } + + return true; +} + void Model::calculateTriangleSets() { PROFILE_RANGE(render, __FUNCTION__); diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 3eb796b763..1738af661b 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -257,6 +257,8 @@ public: int getResourceDownloadAttempts() { return _renderWatcher.getResourceDownloadAttempts(); } int getResourceDownloadAttemptsRemaining() { return _renderWatcher.getResourceDownloadAttemptsRemaining(); } + bool getMeshes(MeshProxyList& result); + public slots: void loadURLFinished(bool success); From 750b7192afb70e582e4978f6e7bced1d07b6f488 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 19 Jul 2017 13:58:03 -0700 Subject: [PATCH 0994/1049] trying to get the resulting model to line up with the originals --- .../entities/src/EntityScriptingInterface.cpp | 2 +- libraries/render-utils/src/Model.cpp | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 2cefd647cb..1dc3cf8f75 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -1738,7 +1738,7 @@ glm::mat4 EntityScriptingInterface::getEntityTransform(const QUuid& entityID) { glm::mat4 rotation = glm::mat4_cast(entity->getRotation()); glm::mat4 registration = glm::translate(ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - entity->getRegistrationPoint()); - result = translation * rotation * registration; + result = translation * rotation /* * registration */; } }); } diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 5e3c9c8ecd..6219e83bf1 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -473,11 +473,16 @@ bool Model::getMeshes(MeshProxyList& result) { Transform offset; offset.setScale(_scale); - // not set -- far to the right - // offset.postTranslate(_offset); // far to right - // offset.postTranslate(-_offset); // a bit to left + // offset.postTranslate(_offset); glm::mat4 offsetMat = offset.getMatrix(); + Extents modelExtents = getUnscaledMeshExtents(); + glm::vec3 dimensions = modelExtents.maximum - modelExtents.minimum; + + const glm::vec3 DEFAULT_ENTITY_REGISTRATION_POINT = glm::vec3(0.5f, 0.5f, 0.5f); + glm::vec3 regis = (DEFAULT_ENTITY_REGISTRATION_POINT - _registrationPoint); + glm::vec3 regisOffset = dimensions * regis; + for (std::shared_ptr mesh : meshes) { if (!mesh) { continue; @@ -485,9 +490,7 @@ bool Model::getMeshes(MeshProxyList& result) { MeshProxy* meshProxy = new SimpleMeshProxy( mesh->map([=](glm::vec3 position) { - const glm::vec3 DEFAULT_ENTITY_REGISTRATION_POINT = glm::vec3(0.5f, 0.5f, 0.5f); - glm::vec3 regis = _registrationPoint - DEFAULT_ENTITY_REGISTRATION_POINT; - return glm::vec3(offsetMat * glm::vec4(position + _offset, 1.0f)) + regis; // very close + return glm::vec3(offsetMat * glm::vec4(position, 1.0f)); }, [=](glm::vec3 normal){ return glm::normalize(glm::vec3(offsetMat * glm::vec4(normal, 0.0f))); }, [&](uint32_t index){ return index; })); From be48268be827edecf9702b556353cd5f0928dcbb Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 19 Jul 2017 15:02:40 -0700 Subject: [PATCH 0995/1049] getMeshes handles registration point --- libraries/entities/src/EntityScriptingInterface.cpp | 8 ++------ libraries/render-utils/src/Model.cpp | 9 +-------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 1dc3cf8f75..9d2cb30c6e 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -1736,9 +1736,7 @@ glm::mat4 EntityScriptingInterface::getEntityTransform(const QUuid& entityID) { if (entity) { glm::mat4 translation = glm::translate(entity->getPosition()); glm::mat4 rotation = glm::mat4_cast(entity->getRotation()); - glm::mat4 registration = glm::translate(ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - - entity->getRegistrationPoint()); - result = translation * rotation /* * registration */; + result = translation * rotation; } }); } @@ -1753,9 +1751,7 @@ glm::mat4 EntityScriptingInterface::getEntityLocalTransform(const QUuid& entityI if (entity) { glm::mat4 translation = glm::translate(entity->getLocalPosition()); glm::mat4 rotation = glm::mat4_cast(entity->getLocalOrientation()); - glm::mat4 registration = glm::translate(ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - - entity->getRegistrationPoint()); - result = translation * rotation * registration; + result = translation * rotation; } }); } diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 6219e83bf1..e38a556487 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -473,16 +473,9 @@ bool Model::getMeshes(MeshProxyList& result) { Transform offset; offset.setScale(_scale); - // offset.postTranslate(_offset); + offset.postTranslate(_offset); glm::mat4 offsetMat = offset.getMatrix(); - Extents modelExtents = getUnscaledMeshExtents(); - glm::vec3 dimensions = modelExtents.maximum - modelExtents.minimum; - - const glm::vec3 DEFAULT_ENTITY_REGISTRATION_POINT = glm::vec3(0.5f, 0.5f, 0.5f); - glm::vec3 regis = (DEFAULT_ENTITY_REGISTRATION_POINT - _registrationPoint); - glm::vec3 regisOffset = dimensions * regis; - for (std::shared_ptr mesh : meshes) { if (!mesh) { continue; From ce5ff23e7082b6afbe5652a093473c45816e3311 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Wed, 19 Jul 2017 16:15:34 -0700 Subject: [PATCH 0996/1049] made changes to size of content to dosplay 'choose file' button --- interface/resources/qml/hifi/dialogs/TabletAssetServer.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml b/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml index 47c9af1f57..0256805422 100644 --- a/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml +++ b/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml @@ -506,7 +506,7 @@ Rectangle { } HifiControls.Tree { id: treeView - height: 430 + height: 290 anchors.leftMargin: hifi.dimensions.contentMargin.x + 2 // Extra for border anchors.rightMargin: hifi.dimensions.contentMargin.x + 2 // Extra for border anchors.left: parent.left From 70a5916ef35fadec9aadb456710f753682b096c8 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 19 Jul 2017 16:18:01 -0700 Subject: [PATCH 0997/1049] Fix debug builds startup crash --- libraries/audio/src/AudioInjector.cpp | 2 -- libraries/audio/src/AudioInjector.h | 2 -- 2 files changed, 4 deletions(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index ee57e42e77..9f32372a8e 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -27,8 +27,6 @@ #include "AudioSRC.h" #include "AudioHelpers.h" -int audioInjectorPtrMetaTypeId = qRegisterMetaType(); - AbstractAudioInterface* AudioInjector::_localAudioInterface{ nullptr }; AudioInjectorState operator& (AudioInjectorState lhs, AudioInjectorState rhs) { diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index aed51c5f85..fc197f7ba0 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -125,6 +125,4 @@ private: friend class AudioInjectorManager; }; -Q_DECLARE_METATYPE(AudioInjectorPointer) - #endif // hifi_AudioInjector_h From 3936ee93f0e08da594a3279fe7505c09994658f5 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 19 Jul 2017 16:34:04 -0700 Subject: [PATCH 0998/1049] use default scripts path in EditTabView to fix load on OS X --- .../resources/qml/hifi/tablet/EditTabView.qml | 20 +++++++++---------- libraries/shared/src/PathUtils.h | 3 +++ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/EditTabView.qml b/interface/resources/qml/hifi/tablet/EditTabView.qml index e4a20a0316..e94325f399 100644 --- a/interface/resources/qml/hifi/tablet/EditTabView.qml +++ b/interface/resources/qml/hifi/tablet/EditTabView.qml @@ -21,7 +21,7 @@ TabView { enabled: true property string originalUrl: "" - Rectangle { + Rectangle { color: "#404040" Text { @@ -180,7 +180,7 @@ TabView { WebView { id: entityListToolWebView - url: "../../../../../scripts/system/html/entityList.html" + url: Paths.defaultScripts + "/system/html/entityList.html" anchors.fill: parent enabled: true } @@ -194,7 +194,7 @@ TabView { WebView { id: entityPropertiesWebView - url: "../../../../../scripts/system/html/entityProperties.html" + url: Paths.defaultScripts + "/system/html/entityProperties.html" anchors.fill: parent enabled: true } @@ -208,7 +208,7 @@ TabView { WebView { id: gridControlsWebView - url: "../../../../../scripts/system/html/gridControls.html" + url: Paths.defaultScripts + "/system/html/gridControls.html" anchors.fill: parent enabled: true } @@ -222,7 +222,7 @@ TabView { WebView { id: particleExplorerWebView - url: "../../../../../scripts/system/particle_explorer/particleExplorer.html" + url: Paths.defaultScripts + "/system/particle_explorer/particleExplorer.html" anchors.fill: parent enabled: true } @@ -293,16 +293,16 @@ TabView { break; case 'list': editTabView.currentIndex = 1; - break; + break; case 'properties': editTabView.currentIndex = 2; - break; + break; case 'grid': editTabView.currentIndex = 3; - break; + break; case 'particle': editTabView.currentIndex = 4; - break; + break; default: console.warn('Attempt to switch to invalid tab:', id); } @@ -310,4 +310,4 @@ TabView { console.warn('Attempt to switch tabs with invalid input:', JSON.stringify(id)); } } -} \ No newline at end of file +} diff --git a/libraries/shared/src/PathUtils.h b/libraries/shared/src/PathUtils.h index 14eb81dd9a..577c215c9e 100644 --- a/libraries/shared/src/PathUtils.h +++ b/libraries/shared/src/PathUtils.h @@ -13,6 +13,8 @@ #define hifi_PathUtils_h #include +#include + #include "DependencyManager.h" /**jsdoc @@ -24,6 +26,7 @@ class PathUtils : public QObject, public Dependency { Q_OBJECT SINGLETON_DEPENDENCY Q_PROPERTY(QString resources READ resourcesPath) + Q_PROPERTY(QUrl defaultScripts READ defaultScriptsLocation) public: static const QString& resourcesPath(); From 091b666d7e492b0a57ba9e74014b5b49bc743407 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 20 Jul 2017 12:06:19 +1200 Subject: [PATCH 0999/1049] Fix noise reduction checkbox not always working --- interface/src/scripting/Audio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/scripting/Audio.h b/interface/src/scripting/Audio.h index acf101159b..bd40de4303 100644 --- a/interface/src/scripting/Audio.h +++ b/interface/src/scripting/Audio.h @@ -81,7 +81,7 @@ private: float _inputVolume { 1.0f }; float _inputLevel { 0.0f }; bool _isMuted { false }; - bool _enableNoiseReduction; + bool _enableNoiseReduction { true }; // Match default value of AudioClient::_isNoiseGateEnabled. bool _contextIsHMD { false }; AudioDevices* getDevices() { return &_devices; } From 13274fb9a390f95591432edfd3242f0097a484f4 Mon Sep 17 00:00:00 2001 From: MiladNazeri Date: Thu, 20 Jul 2017 10:20:56 -0400 Subject: [PATCH 1000/1049] Update CONTRIBUTING.md Same issue as the readme.md change. --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a0d867ade9..4654c311cc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,7 +16,7 @@ Contributing git checkout -b new_branch_name ``` 4. Code - * Follow the [coding standard](https://wiki.highfidelity.com/wiki/Coding_Standards) + * Follow the [coding standard](https://docs.highfidelity.com/build-guide/coding-standards) 5. Commit * Use [well formed commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) 6. Update your branch From 3805228b70635e4c18332fd1f941bffb8d6539a5 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Thu, 20 Jul 2017 16:26:51 +0100 Subject: [PATCH 1001/1049] fixed grab the tablet in third person --- scripts/system/controllers/handControllerGrab.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index e2de13d4b1..6b671d366f 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -1034,9 +1034,18 @@ EquipHotspotBuddy.prototype.update = function(deltaTime, timestamp) { function getControllerJointIndex(hand) { if (HMD.isHandControllerAvailable()) { - return MyAvatar.getJointIndex(hand === RIGHT_HAND ? - "_CONTROLLER_RIGHTHAND" : - "_CONTROLLER_LEFTHAND"); + var controllerJointIndex = -1; + if (Camera.mode === "first person") { + controllerJointIndex = MyAvatar.getJointIndex(hand === RIGHT_HAND ? + "_CONTROLLER_RIGHTHAND" : + "_CONTROLLER_LEFTHAND"); + } else if (Camera.mode === "third person") { + controllerJointIndex = MyAvatar.getJointIndex(hand === RIGHT_HAND ? + "_CAMERA_RELATIVE_CONTROLLER_RIGHTHAND" : + "_CAMERA_RELATIVE_CONTROLLER_LEFTHAND"); + } + + return controllerJointIndex; } return MyAvatar.getJointIndex("Head"); From d71b0802a7181a744721e54776125275a80d5767 Mon Sep 17 00:00:00 2001 From: trent Date: Thu, 20 Jul 2017 11:38:42 -0400 Subject: [PATCH 1002/1049] Added vertex color support to OBJReader.h|cpp. --- libraries/fbx/src/OBJReader.cpp | 60 ++++++++++++++++++++++++++++++--- libraries/fbx/src/OBJReader.h | 8 +++-- 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/libraries/fbx/src/OBJReader.cpp b/libraries/fbx/src/OBJReader.cpp index 417901b9ab..5beec4c1f4 100644 --- a/libraries/fbx/src/OBJReader.cpp +++ b/libraries/fbx/src/OBJReader.cpp @@ -123,6 +123,33 @@ glm::vec3 OBJTokenizer::getVec3() { } return v; } +bool OBJTokenizer::getVec3Vec3(glm::vec3& vertex, glm::vec3& vertexColor) { + // Used for vertices which may also have a vertex color (RGB [0,1]) to follow. + // NOTE: Returns true if there is a vertex color. + auto x = getFloat(); // N.B.: getFloat() has side-effect + auto y = getFloat(); // And order of arguments is different on Windows/Linux. + auto z = getFloat(); + vertex = glm::vec3(x, y, z); + + auto r = 1.0f, g = 1.0f, b = 1.0f; + bool hasVertexColor = false; + if (isNextTokenFloat()) { + // If there's another float it's one of two things: a W component or an R component. The standard OBJ spec doesn't output a W component, + // so we're making the assumption that if a float follows (unless it's only a single value) that it's a vertex color. + r = getFloat(); + if(isNextTokenFloat()) { + // Safe to assume the following values are the green/blue components. + g = getFloat(); + b = getFloat(); + + hasVertexColor = true; + } + + vertexColor = glm::vec3(r, g, b); + } + + return hasVertexColor; +} glm::vec2 OBJTokenizer::getVec2() { float uCoord = getFloat(); float vCoord = 1.0f - getFloat(); @@ -140,7 +167,8 @@ void setMeshPartDefaults(FBXMeshPart& meshPart, QString materialID) { } // OBJFace -bool OBJFace::add(const QByteArray& vertexIndex, const QByteArray& textureIndex, const QByteArray& normalIndex, const QVector& vertices) { +// NOTE (trent, 7/20/17): The vertexColors vector being passed-in isn't necessary here, but I'm just pairing it with the vertices vector for consistency. +bool OBJFace::add(const QByteArray& vertexIndex, const QByteArray& textureIndex, const QByteArray& normalIndex, const QVector& vertices, const QVector& vertexColors) { bool ok; int index = vertexIndex.toInt(&ok); if (!ok) { @@ -382,7 +410,14 @@ bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mappi #endif } } else if (token == "v") { - vertices.append(tokenizer.getVec3()); + glm::vec3 vertex, vertexColor; + + bool hasVertexColor = tokenizer.getVec3Vec3(vertex, vertexColor); + vertices.append(vertex); + + if(hasVertexColor) { + vertexColors.append(vertexColor); + } } else if (token == "vn") { normals.append(tokenizer.getVec3()); } else if (token == "vt") { @@ -410,7 +445,7 @@ bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mappi assert(parts.count() >= 1); assert(parts.count() <= 3); const QByteArray noData {}; - face.add(parts[0], (parts.count() > 1) ? parts[1] : noData, (parts.count() > 2) ? parts[2] : noData, vertices); + face.add(parts[0], (parts.count() > 1) ? parts[1] : noData, (parts.count() > 2) ? parts[2] : noData, vertices, vertexColors); face.groupName = currentGroup; face.materialName = currentMaterialName; } @@ -540,6 +575,15 @@ FBXGeometry* OBJReader::readOBJ(QByteArray& model, const QVariantHash& mapping, glm::vec3 v1 = checked_at(vertices, face.vertexIndices[1]); glm::vec3 v2 = checked_at(vertices, face.vertexIndices[2]); + glm::vec3 vc0, vc1, vc2; + bool hasVertexColors = ( vertexColors.size( ) > 0 ); + if(hasVertexColors) { + // If there are any vertex colors, it's safe to assume all meshes had them exported. + vc0 = checked_at(vertexColors, face.vertexIndices[0]); + vc1 = checked_at(vertexColors, face.vertexIndices[1]); + vc2 = checked_at(vertexColors, face.vertexIndices[2]); + } + // Scale the vertices if the OBJ file scale is specified as non-one. if (scaleGuess != 1.0f) { v0 *= scaleGuess; @@ -555,6 +599,13 @@ FBXGeometry* OBJReader::readOBJ(QByteArray& model, const QVariantHash& mapping, meshPart.triangleIndices.append(mesh.vertices.count()); mesh.vertices << v2; + if( hasVertexColors ) { + // Add vertex colors. + mesh.colors << vc0; + mesh.colors << vc1; + mesh.colors << vc2; + } + glm::vec3 n0, n1, n2; if (face.normalIndices.count()) { n0 = checked_at(normals, face.normalIndices[0]); @@ -689,7 +740,8 @@ void fbxDebugDump(const FBXGeometry& fbxgeo) { qCDebug(modelformat) << " offset =" << fbxgeo.offset; qCDebug(modelformat) << " meshes.count() =" << fbxgeo.meshes.count(); foreach (FBXMesh mesh, fbxgeo.meshes) { - qCDebug(modelformat) << " vertices.count() =" << mesh.vertices.count(); + qCDebug(modelformat) << " vertices.count() =" << mesh.vertices.count(); + qCDebug(modelformat) << " colors.count() =" << mesh.colors.count(); qCDebug(modelformat) << " normals.count() =" << mesh.normals.count(); /*if (mesh.normals.count() == mesh.vertices.count()) { for (int i = 0; i < mesh.normals.count(); i++) { diff --git a/libraries/fbx/src/OBJReader.h b/libraries/fbx/src/OBJReader.h index 18a4b89f1e..6765be9076 100644 --- a/libraries/fbx/src/OBJReader.h +++ b/libraries/fbx/src/OBJReader.h @@ -19,7 +19,8 @@ public: void pushBackToken(int token) { _pushedBackToken = token; } void ungetChar(char ch) { _device->ungetChar(ch); } const QString getComment() const { return _comment; } - glm::vec3 getVec3(); + glm::vec3 getVec3(); + bool getVec3Vec3(glm::vec3& vertex, glm::vec3& vertexColor); glm::vec2 getVec2(); float getFloat() { return std::stof((nextToken() != OBJTokenizer::DATUM_TOKEN) ? nullptr : getDatum().data()); } @@ -38,7 +39,7 @@ public: QString groupName; // We don't make use of hierarchical structure, but it can be preserved for debugging and future use. QString materialName; // Add one more set of vertex data. Answers true if successful - bool add(const QByteArray& vertexIndex, const QByteArray& textureIndex, const QByteArray& normalIndex, const QVector& vertices); + bool add(const QByteArray& vertexIndex, const QByteArray& textureIndex, const QByteArray& normalIndex, const QVector& vertices, const QVector& vertexColors); // Return a set of one or more OBJFaces from this one, in which each is just a triangle. // Even though FBXMeshPart can handle quads, it would be messy to try to keep track of mixed-size faces, so we treat everything as triangles. QVector triangulate(); @@ -65,7 +66,8 @@ class OBJReader: public QObject { // QObject so we can make network requests. Q_OBJECT public: typedef QVector FaceGroup; - QVector vertices; // all that we ever encounter while reading + QVector vertices; + QVector vertexColors; QVector textureUVs; QVector normals; QVector faceGroups; From ff3e9263efa1cee146d262b80f686c8d64ffc628 Mon Sep 17 00:00:00 2001 From: trent Date: Thu, 20 Jul 2017 11:40:42 -0400 Subject: [PATCH 1003/1049] Stupid tabs. --- libraries/fbx/src/OBJReader.cpp | 86 ++++++++++++++++----------------- libraries/fbx/src/OBJReader.h | 8 +-- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/libraries/fbx/src/OBJReader.cpp b/libraries/fbx/src/OBJReader.cpp index 5beec4c1f4..d711ef87a3 100644 --- a/libraries/fbx/src/OBJReader.cpp +++ b/libraries/fbx/src/OBJReader.cpp @@ -124,31 +124,31 @@ glm::vec3 OBJTokenizer::getVec3() { return v; } bool OBJTokenizer::getVec3Vec3(glm::vec3& vertex, glm::vec3& vertexColor) { - // Used for vertices which may also have a vertex color (RGB [0,1]) to follow. - // NOTE: Returns true if there is a vertex color. - auto x = getFloat(); // N.B.: getFloat() has side-effect - auto y = getFloat(); // And order of arguments is different on Windows/Linux. - auto z = getFloat(); - vertex = glm::vec3(x, y, z); + // Used for vertices which may also have a vertex color (RGB [0,1]) to follow. + // NOTE: Returns true if there is a vertex color. + auto x = getFloat(); // N.B.: getFloat() has side-effect + auto y = getFloat(); // And order of arguments is different on Windows/Linux. + auto z = getFloat(); + vertex = glm::vec3(x, y, z); - auto r = 1.0f, g = 1.0f, b = 1.0f; - bool hasVertexColor = false; - if (isNextTokenFloat()) { - // If there's another float it's one of two things: a W component or an R component. The standard OBJ spec doesn't output a W component, - // so we're making the assumption that if a float follows (unless it's only a single value) that it's a vertex color. - r = getFloat(); - if(isNextTokenFloat()) { - // Safe to assume the following values are the green/blue components. - g = getFloat(); - b = getFloat(); + auto r = 1.0f, g = 1.0f, b = 1.0f; + bool hasVertexColor = false; + if (isNextTokenFloat()) { + // If there's another float it's one of two things: a W component or an R component. The standard OBJ spec doesn't output a W component, + // so we're making the assumption that if a float follows (unless it's only a single value) that it's a vertex color. + r = getFloat(); + if(isNextTokenFloat()) { + // Safe to assume the following values are the green/blue components. + g = getFloat(); + b = getFloat(); - hasVertexColor = true; - } + hasVertexColor = true; + } - vertexColor = glm::vec3(r, g, b); - } + vertexColor = glm::vec3(r, g, b); + } - return hasVertexColor; + return hasVertexColor; } glm::vec2 OBJTokenizer::getVec2() { float uCoord = getFloat(); @@ -410,14 +410,14 @@ bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mappi #endif } } else if (token == "v") { - glm::vec3 vertex, vertexColor; + glm::vec3 vertex, vertexColor; - bool hasVertexColor = tokenizer.getVec3Vec3(vertex, vertexColor); + bool hasVertexColor = tokenizer.getVec3Vec3(vertex, vertexColor); vertices.append(vertex); - - if(hasVertexColor) { - vertexColors.append(vertexColor); - } + + if(hasVertexColor) { + vertexColors.append(vertexColor); + } } else if (token == "vn") { normals.append(tokenizer.getVec3()); } else if (token == "vt") { @@ -575,14 +575,14 @@ FBXGeometry* OBJReader::readOBJ(QByteArray& model, const QVariantHash& mapping, glm::vec3 v1 = checked_at(vertices, face.vertexIndices[1]); glm::vec3 v2 = checked_at(vertices, face.vertexIndices[2]); - glm::vec3 vc0, vc1, vc2; - bool hasVertexColors = ( vertexColors.size( ) > 0 ); - if(hasVertexColors) { - // If there are any vertex colors, it's safe to assume all meshes had them exported. - vc0 = checked_at(vertexColors, face.vertexIndices[0]); - vc1 = checked_at(vertexColors, face.vertexIndices[1]); - vc2 = checked_at(vertexColors, face.vertexIndices[2]); - } + glm::vec3 vc0, vc1, vc2; + bool hasVertexColors = ( vertexColors.size( ) > 0 ); + if(hasVertexColors) { + // If there are any vertex colors, it's safe to assume all meshes had them exported. + vc0 = checked_at(vertexColors, face.vertexIndices[0]); + vc1 = checked_at(vertexColors, face.vertexIndices[1]); + vc2 = checked_at(vertexColors, face.vertexIndices[2]); + } // Scale the vertices if the OBJ file scale is specified as non-one. if (scaleGuess != 1.0f) { @@ -599,12 +599,12 @@ FBXGeometry* OBJReader::readOBJ(QByteArray& model, const QVariantHash& mapping, meshPart.triangleIndices.append(mesh.vertices.count()); mesh.vertices << v2; - if( hasVertexColors ) { - // Add vertex colors. - mesh.colors << vc0; - mesh.colors << vc1; - mesh.colors << vc2; - } + if( hasVertexColors ) { + // Add vertex colors. + mesh.colors << vc0; + mesh.colors << vc1; + mesh.colors << vc2; + } glm::vec3 n0, n1, n2; if (face.normalIndices.count()) { @@ -740,8 +740,8 @@ void fbxDebugDump(const FBXGeometry& fbxgeo) { qCDebug(modelformat) << " offset =" << fbxgeo.offset; qCDebug(modelformat) << " meshes.count() =" << fbxgeo.meshes.count(); foreach (FBXMesh mesh, fbxgeo.meshes) { - qCDebug(modelformat) << " vertices.count() =" << mesh.vertices.count(); - qCDebug(modelformat) << " colors.count() =" << mesh.colors.count(); + qCDebug(modelformat) << " vertices.count() =" << mesh.vertices.count(); + qCDebug(modelformat) << " colors.count() =" << mesh.colors.count(); qCDebug(modelformat) << " normals.count() =" << mesh.normals.count(); /*if (mesh.normals.count() == mesh.vertices.count()) { for (int i = 0; i < mesh.normals.count(); i++) { diff --git a/libraries/fbx/src/OBJReader.h b/libraries/fbx/src/OBJReader.h index 6765be9076..2b81986361 100644 --- a/libraries/fbx/src/OBJReader.h +++ b/libraries/fbx/src/OBJReader.h @@ -19,8 +19,8 @@ public: void pushBackToken(int token) { _pushedBackToken = token; } void ungetChar(char ch) { _device->ungetChar(ch); } const QString getComment() const { return _comment; } - glm::vec3 getVec3(); - bool getVec3Vec3(glm::vec3& vertex, glm::vec3& vertexColor); + glm::vec3 getVec3(); + bool getVec3Vec3(glm::vec3& vertex, glm::vec3& vertexColor); glm::vec2 getVec2(); float getFloat() { return std::stof((nextToken() != OBJTokenizer::DATUM_TOKEN) ? nullptr : getDatum().data()); } @@ -66,8 +66,8 @@ class OBJReader: public QObject { // QObject so we can make network requests. Q_OBJECT public: typedef QVector FaceGroup; - QVector vertices; - QVector vertexColors; + QVector vertices; + QVector vertexColors; QVector textureUVs; QVector normals; QVector faceGroups; From 559e2e0ebb62071ef2885b984630e5ebaf2483b1 Mon Sep 17 00:00:00 2001 From: trent Date: Thu, 20 Jul 2017 13:09:17 -0400 Subject: [PATCH 1004/1049] Fixing formatting issues; renamed ::getVec3Vec3 to ::getVertex. --- libraries/fbx/src/OBJReader.cpp | 23 +++++++++++++---------- libraries/fbx/src/OBJReader.h | 5 +++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/libraries/fbx/src/OBJReader.cpp b/libraries/fbx/src/OBJReader.cpp index d711ef87a3..a171f92907 100644 --- a/libraries/fbx/src/OBJReader.cpp +++ b/libraries/fbx/src/OBJReader.cpp @@ -123,7 +123,7 @@ glm::vec3 OBJTokenizer::getVec3() { } return v; } -bool OBJTokenizer::getVec3Vec3(glm::vec3& vertex, glm::vec3& vertexColor) { +bool OBJTokenizer::getVertex(glm::vec3& vertex, glm::vec3& vertexColor) { // Used for vertices which may also have a vertex color (RGB [0,1]) to follow. // NOTE: Returns true if there is a vertex color. auto x = getFloat(); // N.B.: getFloat() has side-effect @@ -134,10 +134,11 @@ bool OBJTokenizer::getVec3Vec3(glm::vec3& vertex, glm::vec3& vertexColor) { auto r = 1.0f, g = 1.0f, b = 1.0f; bool hasVertexColor = false; if (isNextTokenFloat()) { - // If there's another float it's one of two things: a W component or an R component. The standard OBJ spec doesn't output a W component, - // so we're making the assumption that if a float follows (unless it's only a single value) that it's a vertex color. + // If there's another float it's one of two things: a W component or an R component. The standard OBJ spec + // doesn't output a W component, so we're making the assumption that if a float follows (unless it's + // only a single value) that it's a vertex color. r = getFloat(); - if(isNextTokenFloat()) { + if (isNextTokenFloat()) { // Safe to assume the following values are the green/blue components. g = getFloat(); b = getFloat(); @@ -167,7 +168,8 @@ void setMeshPartDefaults(FBXMeshPart& meshPart, QString materialID) { } // OBJFace -// NOTE (trent, 7/20/17): The vertexColors vector being passed-in isn't necessary here, but I'm just pairing it with the vertices vector for consistency. +// NOTE (trent, 7/20/17): The vertexColors vector being passed-in isn't necessary here, but I'm just +// pairing it with the vertices vector for consistency. bool OBJFace::add(const QByteArray& vertexIndex, const QByteArray& textureIndex, const QByteArray& normalIndex, const QVector& vertices, const QVector& vertexColors) { bool ok; int index = vertexIndex.toInt(&ok); @@ -412,7 +414,7 @@ bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mappi } else if (token == "v") { glm::vec3 vertex, vertexColor; - bool hasVertexColor = tokenizer.getVec3Vec3(vertex, vertexColor); + bool hasVertexColor = tokenizer.getVertex(vertex, vertexColor); vertices.append(vertex); if(hasVertexColor) { @@ -445,7 +447,8 @@ bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mappi assert(parts.count() >= 1); assert(parts.count() <= 3); const QByteArray noData {}; - face.add(parts[0], (parts.count() > 1) ? parts[1] : noData, (parts.count() > 2) ? parts[2] : noData, vertices, vertexColors); + face.add(parts[0], (parts.count() > 1) ? parts[1] : noData, (parts.count() > 2) ? parts[2] : noData, + vertices, vertexColors); face.groupName = currentGroup; face.materialName = currentMaterialName; } @@ -576,8 +579,8 @@ FBXGeometry* OBJReader::readOBJ(QByteArray& model, const QVariantHash& mapping, glm::vec3 v2 = checked_at(vertices, face.vertexIndices[2]); glm::vec3 vc0, vc1, vc2; - bool hasVertexColors = ( vertexColors.size( ) > 0 ); - if(hasVertexColors) { + bool hasVertexColors = (vertexColors.size() > 0); + if (hasVertexColors) { // If there are any vertex colors, it's safe to assume all meshes had them exported. vc0 = checked_at(vertexColors, face.vertexIndices[0]); vc1 = checked_at(vertexColors, face.vertexIndices[1]); @@ -599,7 +602,7 @@ FBXGeometry* OBJReader::readOBJ(QByteArray& model, const QVariantHash& mapping, meshPart.triangleIndices.append(mesh.vertices.count()); mesh.vertices << v2; - if( hasVertexColors ) { + if (hasVertexColors) { // Add vertex colors. mesh.colors << vc0; mesh.colors << vc1; diff --git a/libraries/fbx/src/OBJReader.h b/libraries/fbx/src/OBJReader.h index 2b81986361..9a32871590 100644 --- a/libraries/fbx/src/OBJReader.h +++ b/libraries/fbx/src/OBJReader.h @@ -20,7 +20,7 @@ public: void ungetChar(char ch) { _device->ungetChar(ch); } const QString getComment() const { return _comment; } glm::vec3 getVec3(); - bool getVec3Vec3(glm::vec3& vertex, glm::vec3& vertexColor); + bool getVertex(glm::vec3& vertex, glm::vec3& vertexColor); glm::vec2 getVec2(); float getFloat() { return std::stof((nextToken() != OBJTokenizer::DATUM_TOKEN) ? nullptr : getDatum().data()); } @@ -39,7 +39,8 @@ public: QString groupName; // We don't make use of hierarchical structure, but it can be preserved for debugging and future use. QString materialName; // Add one more set of vertex data. Answers true if successful - bool add(const QByteArray& vertexIndex, const QByteArray& textureIndex, const QByteArray& normalIndex, const QVector& vertices, const QVector& vertexColors); + bool add(const QByteArray& vertexIndex, const QByteArray& textureIndex, const QByteArray& normalIndex, + const QVector& vertices, const QVector& vertexColors); // Return a set of one or more OBJFaces from this one, in which each is just a triangle. // Even though FBXMeshPart can handle quads, it would be messy to try to keep track of mixed-size faces, so we treat everything as triangles. QVector triangulate(); From c0da0cb43904773a0f46a11574fa48cdd1f33dd1 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 20 Jul 2017 11:56:41 -0700 Subject: [PATCH 1005/1049] Update sit script in the repo --- scripts/tutorials/entity_scripts/sit.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/tutorials/entity_scripts/sit.js b/scripts/tutorials/entity_scripts/sit.js index 3d3bc10fb1..d517f04c29 100644 --- a/scripts/tutorials/entity_scripts/sit.js +++ b/scripts/tutorials/entity_scripts/sit.js @@ -12,9 +12,9 @@ Script.include("/~/system/libraries/utils.js"); if (!String.prototype.startsWith) { String.prototype.startsWith = function(searchString, position){ - position = position || 0; - return this.substr(position, searchString.length) === searchString; - }; + position = position || 0; + return this.substr(position, searchString.length) === searchString; + }; } var SETTING_KEY = "com.highfidelity.avatar.isSitting"; @@ -122,7 +122,7 @@ this.rolesToOverride = function() { return MyAvatar.getAnimationRoles().filter(function(role) { - return role === "fly" || role.startsWith("inAir"); + return !(role.startsWith("right") || role.startsWith("left")); }); } @@ -331,7 +331,7 @@ } this.cleanupOverlay(); } - + this.clickDownOnEntity = function (id, event) { if (isInEditMode()) { return; From 3a31805dff12d499be937c9f1a798cf1e0720e69 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 14 Jun 2017 17:12:25 -0700 Subject: [PATCH 1006/1049] Fix warnings in Qt 59 / VS 2017 build --- CMakeLists.txt | 27 +++++++++++-------- cmake/externals/quazip/CMakeLists.txt | 4 +-- cmake/macros/SetPackagingParameters.cmake | 10 +++++-- .../gpu-gl/src/gpu/gl41/GL41BackendInput.cpp | 2 +- libraries/shared/src/shared/Storage.cpp | 5 ++-- plugins/openvr/src/OpenVrDisplayPlugin.cpp | 4 +-- plugins/openvr/src/OpenVrHelpers.cpp | 2 +- 7 files changed, 32 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c90256134..9712b2d32e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,8 @@ -cmake_minimum_required(VERSION 3.2) +if (WIN32) + cmake_minimum_required(VERSION 3.7) +else() + cmake_minimum_required(VERSION 3.2) +endif() if (USE_ANDROID_TOOLCHAIN) set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/android/android.toolchain.cmake") @@ -33,6 +37,10 @@ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") find_package( Threads ) if (WIN32) + if (NOT "${CMAKE_SIZEOF_VOID_P}" EQUAL "8") + message( FATAL_ERROR "Only 64 bit builds supported." ) + endif() + add_definitions(-DNOMINMAX -D_CRT_SECURE_NO_WARNINGS) if (NOT WINDOW_SDK_PATH) @@ -41,16 +49,13 @@ if (WIN32) # sets path for Microsoft SDKs # if you get build error about missing 'glu32' this path is likely wrong - if (MSVC10) - set(WINDOW_SDK_PATH "C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1 " CACHE PATH "Windows SDK PATH") - elseif (MSVC12) - if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") - set(WINDOW_SDK_FOLDER "x64") - else() - set(WINDOW_SDK_FOLDER "x86") - endif() + if (MSVC_VERSION GREATER_EQUAL 1910) # VS 2017 + set(WINDOW_SDK_PATH "C:/Program Files (x86)/Windows Kits/10/Lib/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/x64" CACHE PATH "Windows SDK PATH") + elseif (MSVC_VERSION GREATER_EQUAL 1800) # VS 2013 set(WINDOW_SDK_PATH "C:\\Program Files (x86)\\Windows Kits\\8.1\\Lib\\winv6.3\\um\\${WINDOW_SDK_FOLDER}" CACHE PATH "Windows SDK PATH") - endif () + else() + message( FATAL_ERROR "Visual Studio 2013 or higher required." ) + endif() if (DEBUG_DISCOVERED_SDK_PATH) message(STATUS "The discovered Windows SDK path is ${WINDOW_SDK_PATH}") @@ -103,7 +108,7 @@ else () endif () if (APPLE) - set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++0x") + set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --stdlib=libc++") endif () diff --git a/cmake/externals/quazip/CMakeLists.txt b/cmake/externals/quazip/CMakeLists.txt index 7af13dafa7..d44c9ffde3 100644 --- a/cmake/externals/quazip/CMakeLists.txt +++ b/cmake/externals/quazip/CMakeLists.txt @@ -21,8 +21,8 @@ endif () ExternalProject_Add( ${EXTERNAL_NAME} - URL https://s3-us-west-1.amazonaws.com/hifi-production/dependencies/quazip-0.7.2.zip - URL_MD5 2955176048a31262c09259ca8d309d19 + URL https://s3.amazonaws.com/Oculus/quazip-0.7.3.zip + URL_MD5 ed03754d39b9da1775771819b8001d45 BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build CMAKE_ARGS ${QUAZIP_CMAKE_ARGS} LOG_DOWNLOAD 1 diff --git a/cmake/macros/SetPackagingParameters.cmake b/cmake/macros/SetPackagingParameters.cmake index 82a4a7d080..6f35b76f1d 100644 --- a/cmake/macros/SetPackagingParameters.cmake +++ b/cmake/macros/SetPackagingParameters.cmake @@ -126,8 +126,14 @@ macro(SET_PACKAGING_PARAMETERS) # check if we need to find signtool if (PRODUCTION_BUILD OR PR_BUILD) - find_program(SIGNTOOL_EXECUTABLE signtool PATHS "C:/Program Files (x86)/Windows Kits/8.1" PATH_SUFFIXES "bin/x64") - + if (MSVC_VERSION GREATER_EQUAL 1910) # VS 2017 + find_program(SIGNTOOL_EXECUTABLE signtool PATHS "C:/Program Files (x86)/Windows Kits/10" PATH_SUFFIXES "bin/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/x64") + elseif (MSVC_VERSION GREATER_EQUAL 1800) # VS 2013 + find_program(SIGNTOOL_EXECUTABLE signtool PATHS "C:/Program Files (x86)/Windows Kits/8.1" PATH_SUFFIXES "bin/x64") + else() + message( FATAL_ERROR "Visual Studio 2013 or higher required." ) + endif() + if (NOT SIGNTOOL_EXECUTABLE) message(FATAL_ERROR "Code signing of executables was requested but signtool.exe could not be found.") endif () diff --git a/libraries/gpu-gl/src/gpu/gl41/GL41BackendInput.cpp b/libraries/gpu-gl/src/gpu/gl41/GL41BackendInput.cpp index 43b48f721f..e8ebcbe05c 100644 --- a/libraries/gpu-gl/src/gpu/gl41/GL41BackendInput.cpp +++ b/libraries/gpu-gl/src/gpu/gl41/GL41BackendInput.cpp @@ -95,7 +95,7 @@ void GL41Backend::updateInput() { // GLenum perLocationStride = strides[bufferNum]; GLenum perLocationStride = attrib._element.getLocationSize(); GLuint stride = (GLuint)strides[bufferNum]; - GLuint pointer = (GLuint)(attrib._offset + offsets[bufferNum]); + uintptr_t pointer = (uintptr_t)(attrib._offset + offsets[bufferNum]); GLboolean isNormalized = attrib._element.isNormalized(); for (size_t locNum = 0; locNum < locationCount; ++locNum) { diff --git a/libraries/shared/src/shared/Storage.cpp b/libraries/shared/src/shared/Storage.cpp index b07f896df0..7e9f86b049 100644 --- a/libraries/shared/src/shared/Storage.cpp +++ b/libraries/shared/src/shared/Storage.cpp @@ -92,9 +92,8 @@ FileStorage::FileStorage(const QString& filename) : _file(filename) { FileStorage::~FileStorage() { if (_mapped) { - if (!_file.unmap(_mapped)) { - throw std::runtime_error("Unable to unmap file"); - } + _file.unmap(_mapped); + _mapped = nullptr; } if (_file.isOpen()) { _file.close(); diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index 7a73c91c7d..b31f55edeb 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -282,7 +282,7 @@ public: static const vr::VRTextureBounds_t leftBounds{ 0, 0, 0.5f, 1 }; static const vr::VRTextureBounds_t rightBounds{ 0.5f, 0, 1, 1 }; - vr::Texture_t texture{ (void*)_colors[currentColorBuffer], vr::TextureType_OpenGL, vr::ColorSpace_Auto }; + vr::Texture_t texture{ (void*)(uintptr_t)_colors[currentColorBuffer], vr::TextureType_OpenGL, vr::ColorSpace_Auto }; vr::VRCompositor()->Submit(vr::Eye_Left, &texture, &leftBounds); vr::VRCompositor()->Submit(vr::Eye_Right, &texture, &rightBounds); _plugin._presentRate.increment(); @@ -643,7 +643,7 @@ void OpenVrDisplayPlugin::hmdPresent() { _submitThread->waitForPresent(); } else { GLuint glTexId = getGLBackend()->getTextureID(_compositeFramebuffer->getRenderBuffer(0)); - vr::Texture_t vrTexture { (void*)glTexId, vr::TextureType_OpenGL, vr::ColorSpace_Auto }; + vr::Texture_t vrTexture { (void*)(uintptr_t)glTexId, vr::TextureType_OpenGL, vr::ColorSpace_Auto }; vr::VRCompositor()->Submit(vr::Eye_Left, &vrTexture, &OPENVR_TEXTURE_BOUNDS_LEFT); vr::VRCompositor()->Submit(vr::Eye_Right, &vrTexture, &OPENVR_TEXTURE_BOUNDS_RIGHT); vr::VRCompositor()->PostPresentHandoff(); diff --git a/plugins/openvr/src/OpenVrHelpers.cpp b/plugins/openvr/src/OpenVrHelpers.cpp index 7e287a16c3..c8a0cb5f8b 100644 --- a/plugins/openvr/src/OpenVrHelpers.cpp +++ b/plugins/openvr/src/OpenVrHelpers.cpp @@ -129,7 +129,7 @@ void releaseOpenVrSystem() { #endif // HACK: workaround openvr crash, call submit with an invalid texture, right before VR_Shutdown. - const GLuint INVALID_GL_TEXTURE_HANDLE = -1; + const void* INVALID_GL_TEXTURE_HANDLE = (void*)(uintptr_t)-1; vr::Texture_t vrTexture{ (void*)INVALID_GL_TEXTURE_HANDLE, vr::TextureType_OpenGL, vr::ColorSpace_Auto }; static vr::VRTextureBounds_t OPENVR_TEXTURE_BOUNDS_LEFT{ 0, 0, 0.5f, 1 }; static vr::VRTextureBounds_t OPENVR_TEXTURE_BOUNDS_RIGHT{ 0.5f, 0, 1, 1 }; From cc0ed9ead49b48ccae2e741b9719700e16c38d11 Mon Sep 17 00:00:00 2001 From: "rick@ghostpunch.com" Date: Thu, 20 Jul 2017 15:26:12 -0400 Subject: [PATCH 1007/1049] Corrected typo in role name search filter. Removed commented out debug print --- scripts/tutorials/entity_scripts/sit.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/tutorials/entity_scripts/sit.js b/scripts/tutorials/entity_scripts/sit.js index a532195041..145188380e 100644 --- a/scripts/tutorials/entity_scripts/sit.js +++ b/scripts/tutorials/entity_scripts/sit.js @@ -122,7 +122,7 @@ this.rolesToOverride = function() { return MyAvatar.getAnimationRoles().filter(function(role) { - return role === "right" || role.startsWith("left"); + return !(role === "right" && role.startsWith("left")); }); } @@ -132,7 +132,6 @@ print("Sitter's model has FINISHED changing. Reapply anim role overrides."); var roles = this.rolesToOverride(); for (i in roles) { - //print("Overriding role animation " + roles[i]); MyAvatar.overrideRoleAnimation(roles[i], ANIMATION_URL, ANIMATION_FPS, true, ANIMATION_FIRST_FRAME, ANIMATION_LAST_FRAME); } } From 2b9da2bcba83cb168e28b63992c105e3d81f2171 Mon Sep 17 00:00:00 2001 From: "rick@ghostpunch.com" Date: Thu, 20 Jul 2017 15:44:59 -0400 Subject: [PATCH 1008/1049] Fix another typo. Sigh... --- scripts/tutorials/entity_scripts/sit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/tutorials/entity_scripts/sit.js b/scripts/tutorials/entity_scripts/sit.js index 145188380e..716a5a177f 100644 --- a/scripts/tutorials/entity_scripts/sit.js +++ b/scripts/tutorials/entity_scripts/sit.js @@ -122,7 +122,7 @@ this.rolesToOverride = function() { return MyAvatar.getAnimationRoles().filter(function(role) { - return !(role === "right" && role.startsWith("left")); + return !(role === "right" || role.startsWith("left")); }); } From 451b7ec1def2d418eaa539121bfaf45fb39bb666 Mon Sep 17 00:00:00 2001 From: "rick@ghostpunch.com" Date: Thu, 20 Jul 2017 17:01:02 -0400 Subject: [PATCH 1009/1049] Revert the role name filter change as it has already been added to the repo --- scripts/tutorials/entity_scripts/sit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/tutorials/entity_scripts/sit.js b/scripts/tutorials/entity_scripts/sit.js index 716a5a177f..93e765910b 100644 --- a/scripts/tutorials/entity_scripts/sit.js +++ b/scripts/tutorials/entity_scripts/sit.js @@ -122,7 +122,7 @@ this.rolesToOverride = function() { return MyAvatar.getAnimationRoles().filter(function(role) { - return !(role === "right" || role.startsWith("left")); + return role === "fly" || role.startsWith("inAir"); }); } From 72e5fecb4e6feb98786651a7dd04df66504e38ab Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 20 Jul 2017 16:34:34 -0700 Subject: [PATCH 1010/1049] do Model::getMeshes on the correct thread. added ModelScriptingInterface::getVertexCount and ModelScriptingInterface::getVertex --- .../src/RenderableModelEntityItem.cpp | 4 ++- libraries/render-utils/src/Model.cpp | 7 ++-- libraries/render-utils/src/Model.h | 2 +- .../src/ModelScriptingInterface.cpp | 35 +++++++++++++++++++ .../src/ModelScriptingInterface.h | 2 ++ 5 files changed, 45 insertions(+), 5 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 5c0c6101a3..9884debcce 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include "EntityTreeRenderer.h" #include "EntitiesRendererLogging.h" @@ -1287,5 +1288,6 @@ bool RenderableModelEntityItem::getMeshes(MeshProxyList& result) { if (!_model || !_model->isLoaded()) { return false; } - return _model->getMeshes(result); + BLOCKING_INVOKE_METHOD(_model.get(), "getMeshes", Q_RETURN_ARG(MeshProxyList, result)); + return !result.isEmpty(); } diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index e38a556487..3755ca7cfc 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -463,12 +463,13 @@ bool Model::convexHullContains(glm::vec3 point) { return false; } -bool Model::getMeshes(MeshProxyList& result) { +MeshProxyList Model::getMeshes() { + MeshProxyList result; const Geometry::Pointer& renderGeometry = getGeometry(); const Geometry::GeometryMeshes& meshes = renderGeometry->getMeshes(); if (!isLoaded()) { - return false; + return result; } Transform offset; @@ -490,7 +491,7 @@ bool Model::getMeshes(MeshProxyList& result) { result << meshProxy; } - return true; + return result; } void Model::calculateTriangleSets() { diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 1738af661b..da8677aeed 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -257,7 +257,7 @@ public: int getResourceDownloadAttempts() { return _renderWatcher.getResourceDownloadAttempts(); } int getResourceDownloadAttemptsRemaining() { return _renderWatcher.getResourceDownloadAttemptsRemaining(); } - bool getMeshes(MeshProxyList& result); + Q_INVOKABLE MeshProxyList getMeshes(); public slots: void loadURLFinished(bool success); diff --git a/libraries/script-engine/src/ModelScriptingInterface.cpp b/libraries/script-engine/src/ModelScriptingInterface.cpp index 762d9ffb29..64fb365d0c 100644 --- a/libraries/script-engine/src/ModelScriptingInterface.cpp +++ b/libraries/script-engine/src/ModelScriptingInterface.cpp @@ -138,6 +138,41 @@ QScriptValue ModelScriptingInterface::transformMesh(glm::mat4 transform, MeshPro return meshToScriptValue(_modelScriptEngine, resultProxy); } +QScriptValue ModelScriptingInterface::getVertexCount(MeshProxy* meshProxy) { + if (!meshProxy) { + return QScriptValue(false); + } + MeshPointer mesh = meshProxy->getMeshPointer(); + if (!mesh) { + return QScriptValue(false); + } + + gpu::BufferView::Index numVertices = (gpu::BufferView::Index)mesh->getNumVertices(); + + return numVertices; +} + +QScriptValue ModelScriptingInterface::getVertex(MeshProxy* meshProxy, int vertexIndex) { + if (!meshProxy) { + return QScriptValue(false); + } + MeshPointer mesh = meshProxy->getMeshPointer(); + if (!mesh) { + return QScriptValue(false); + } + + const gpu::BufferView& vertexBufferView = mesh->getVertexBuffer(); + gpu::BufferView::Index numVertices = (gpu::BufferView::Index)mesh->getNumVertices(); + + if (vertexIndex < 0 || vertexIndex >= numVertices) { + return QScriptValue(false); + } + + glm::vec3 pos = vertexBufferView.get(vertexIndex); + return vec3toScriptValue(_modelScriptEngine, pos); +} + + QScriptValue ModelScriptingInterface::newMesh(const QVector& vertices, const QVector& normals, const QVector& faces) { diff --git a/libraries/script-engine/src/ModelScriptingInterface.h b/libraries/script-engine/src/ModelScriptingInterface.h index ba23623acf..3c239f006f 100644 --- a/libraries/script-engine/src/ModelScriptingInterface.h +++ b/libraries/script-engine/src/ModelScriptingInterface.h @@ -29,6 +29,8 @@ public: Q_INVOKABLE QScriptValue newMesh(const QVector& vertices, const QVector& normals, const QVector& faces); + Q_INVOKABLE QScriptValue getVertexCount(MeshProxy* meshProxy); + Q_INVOKABLE QScriptValue getVertex(MeshProxy* meshProxy, int vertexIndex); private: QScriptEngine* _modelScriptEngine { nullptr }; From 26cc8134eba5d1e1a49ef0a3a7778efdea631968 Mon Sep 17 00:00:00 2001 From: Leander Hasty <1p-cusack@1stplayable.com> Date: Fri, 21 Jul 2017 10:56:24 -0400 Subject: [PATCH 1011/1049] WL21463 - entitySelectionTool: use multiarg findRayIntersection instead of editOverlay. We're seeing the ignoreRayIntersection flag not take effect before findRayIntersection calls. This may be due to editOverlay and editOverlays becoming non-blocking in 1f7d2b2 . This altered the flow in mousePressEvent significantly; the first block, intended to handle scale/clone only, started handling rotation (should have been second block) and sometimes selection (should have been third block). Similarly, in the various rotate grabbers' onMove methods, the pickRay will no longer intersect anything other than rotateOverlayTarget; this avoids some awful behavior when scrubbing over the size and clone grabbers. This also reverts unnecessary parts of the prior commits to keep the diff for this WL cleaner, and adds a few TODO comments to revisit about redundant statements and incorrect names. In addition, we've noticed but not fixed herein: * There is a minor edgecase near 0 and 180, where it's difficult to get within a degree or two of the poles occasionally. * The scale/clone grabbers don't stay disappeared for rotation in some cases. This doesn't impact usability anymore, but it'd be nice to determine why they come back when they hide briefly. * The addGrabbers for yaw/pitch/roll could be deduplicated, and yaw has some multiselect "reposition" enable/disable logic that pitch and roll lack. Reviewed-by: LaShonda Hopper --- .../system/libraries/entitySelectionTool.js | 61 ++++--------------- 1 file changed, 12 insertions(+), 49 deletions(-) diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 725803f824..2d1853fae2 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -1560,7 +1560,6 @@ SelectionDisplay = (function() { visible: rotationOverlaysVisible }); - // TODO: we have not implemented the rotating handle/controls yet... so for now, these handles are hidden Overlays.editOverlay(yawHandle, { visible: rotateHandlesVisible, position: yawCorner, @@ -3615,24 +3614,21 @@ SelectionDisplay = (function() { onMove: function(event) { var pickRay = generalComputePickRay(event.x, event.y); Overlays.editOverlay(selectionBox, { - ignoreRayIntersection: true, visible: false }); Overlays.editOverlay(baseOfEntityProjectionOverlay, { - ignoreRayIntersection: true, visible: false }); - Overlays.editOverlay(rotateOverlayTarget, { - ignoreRayIntersection: false - }); - var result = Overlays.findRayIntersection(pickRay); + var result = Overlays.findRayIntersection(pickRay, true, [rotateOverlayTarget]); if (result.intersects) { var center = yawCenter; var zero = yawZero; + // TODO: these vectors are backwards to their names, doesn't matter for this use case (inverted vectors still give same angle) var centerToZero = Vec3.subtract(center, zero); var centerToIntersect = Vec3.subtract(center, result.intersection); + // TODO: orientedAngle wants normalized centerToZero and centerToIntersect var angleFromZero = Vec3.orientedAngle(centerToZero, centerToIntersect, rotationNormal); var distanceFromCenter = Vec3.distance(center, result.intersection); var snapToInner = distanceFromCenter < innerRadius; @@ -3785,17 +3781,12 @@ SelectionDisplay = (function() { onMove: function(event) { var pickRay = generalComputePickRay(event.x, event.y); Overlays.editOverlay(selectionBox, { - ignoreRayIntersection: true, visible: false }); Overlays.editOverlay(baseOfEntityProjectionOverlay, { - ignoreRayIntersection: true, visible: false }); - Overlays.editOverlay(rotateOverlayTarget, { - ignoreRayIntersection: false - }); - var result = Overlays.findRayIntersection(pickRay); + var result = Overlays.findRayIntersection(pickRay, true, [rotateOverlayTarget]); if (result.intersects) { var properties = Entities.getEntityProperties(selectionManager.selections[0]); @@ -3947,17 +3938,12 @@ SelectionDisplay = (function() { onMove: function(event) { var pickRay = generalComputePickRay(event.x, event.y); Overlays.editOverlay(selectionBox, { - ignoreRayIntersection: true, visible: false }); Overlays.editOverlay(baseOfEntityProjectionOverlay, { - ignoreRayIntersection: true, visible: false }); - Overlays.editOverlay(rotateOverlayTarget, { - ignoreRayIntersection: false - }); - var result = Overlays.findRayIntersection(pickRay); + var result = Overlays.findRayIntersection(pickRay, true, [rotateOverlayTarget]); if (result.intersects) { var properties = Entities.getEntityProperties(selectionManager.selections[0]); @@ -4074,21 +4060,8 @@ SelectionDisplay = (function() { return false; } - // before we do a ray test for grabbers, disable the ray intersection for our selection box - Overlays.editOverlay(selectionBox, { - ignoreRayIntersection: true - }); - Overlays.editOverlay(yawHandle, { - ignoreRayIntersection: true - }); - Overlays.editOverlay(pitchHandle, { - ignoreRayIntersection: true - }); - Overlays.editOverlay(rollHandle, { - ignoreRayIntersection: true - }); - - result = Overlays.findRayIntersection(pickRay); + // ignore ray intersection for our selection box and yaw/pitch/roll + result = Overlays.findRayIntersection(pickRay, true, null, [ yawHandle, pitchHandle, rollHandle, selectionBox ] ); if (result.intersects) { if (wantDebug) { print("something intersects... "); @@ -4191,17 +4164,8 @@ SelectionDisplay = (function() { } - // After testing our stretch handles, then check out rotate handles - Overlays.editOverlay(yawHandle, { - ignoreRayIntersection: false - }); - Overlays.editOverlay(pitchHandle, { - ignoreRayIntersection: false - }); - Overlays.editOverlay(rollHandle, { - ignoreRayIntersection: false - }); - var result = Overlays.findRayIntersection(pickRay); + // Only intersect versus yaw/pitch/roll. + var result = Overlays.findRayIntersection(pickRay, true, [ yawHandle, pitchHandle, rollHandle ] ); var overlayOrientation; var overlayCenter; @@ -4306,6 +4270,7 @@ SelectionDisplay = (function() { }); + // TODO: these three duplicate prior three, remove them. Overlays.editOverlay(yawHandle, { visible: false }); @@ -4402,10 +4367,8 @@ SelectionDisplay = (function() { } if (!somethingClicked) { - Overlays.editOverlay(selectionBox, { - ignoreRayIntersection: false - }); - var result = Overlays.findRayIntersection(pickRay); + // Only intersect versus selectionBox. + var result = Overlays.findRayIntersection(pickRay, true, [selectionBox]); if (result.intersects) { switch (result.overlayID) { case selectionBox: From 33a8ab2d58eead3f286ccf3763fd242cb215a613 Mon Sep 17 00:00:00 2001 From: vladest Date: Fri, 21 Jul 2017 18:18:23 +0200 Subject: [PATCH 1012/1049] Adjusted according discussion in PR --- .../resources/controllers/keyboardMouse.json | 21 ++++++++++++++++--- interface/src/avatar/MyAvatar.cpp | 4 ++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/interface/resources/controllers/keyboardMouse.json b/interface/resources/controllers/keyboardMouse.json index 8baf56684a..2faabf0f91 100644 --- a/interface/resources/controllers/keyboardMouse.json +++ b/interface/resources/controllers/keyboardMouse.json @@ -81,7 +81,11 @@ { "from": { "makeAxis" : ["Keyboard.MouseMoveLeft", "Keyboard.MouseMoveRight"] }, "when": "Keyboard.RightMouseButton", - "to": "Actions.Yaw" + "to": "Actions.Yaw", + "filters": + [ + { "type": "scale", "scale": 0.1 } + ] }, { "from": "Keyboard.W", "to": "Actions.LONGITUDINAL_FORWARD" }, @@ -102,8 +106,19 @@ { "from": "Keyboard.PgDown", "to": "Actions.VERTICAL_DOWN" }, { "from": "Keyboard.PgUp", "to": "Actions.VERTICAL_UP" }, - { "from": "Keyboard.MouseMoveUp", "when": "Keyboard.RightMouseButton", "to": "Actions.PITCH_UP" }, - { "from": "Keyboard.MouseMoveDown", "when": "Keyboard.RightMouseButton", "to": "Actions.PITCH_DOWN" }, + { "from": "Keyboard.MouseMoveUp", "when": "Keyboard.RightMouseButton", "to": "Actions.PITCH_UP", + "filters": + [ + { "type": "scale", "scale": 0.1 } + ] + + }, + { "from": "Keyboard.MouseMoveDown", "when": "Keyboard.RightMouseButton", "to": "Actions.PITCH_DOWN", + "filters": + [ + { "type": "scale", "scale": 0.1 } + ] + }, { "from": "Keyboard.TouchpadDown", "to": "Actions.PITCH_DOWN" }, { "from": "Keyboard.TouchpadUp", "to": "Actions.PITCH_UP" }, diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index a6958c9089..b32ef4024e 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -69,8 +69,8 @@ const float MAX_BOOST_SPEED = 0.5f * MAX_WALKING_SPEED; // action motor gets add const float MIN_AVATAR_SPEED = 0.05f; const float MIN_AVATAR_SPEED_SQUARED = MIN_AVATAR_SPEED * MIN_AVATAR_SPEED; // speed is set to zero below this -const float YAW_SPEED_DEFAULT = 60.0f; // degrees/sec -const float PITCH_SPEED_DEFAULT = 45.0f; // degrees/sec +const float YAW_SPEED_DEFAULT = 100.0f; // degrees/sec +const float PITCH_SPEED_DEFAULT = 75.0f; // degrees/sec // TODO: normalize avatar speed for standard avatar size, then scale all motion logic // to properly follow avatar size. From d1c2218a31e52305dbabfa151e4499c90b3a631c Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 20 Jul 2017 17:06:36 -0700 Subject: [PATCH 1013/1049] Temporary patch for deadlock --- interface/src/scripting/AudioDevices.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index a284e38dac..3416366558 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -63,6 +63,14 @@ QVariant AudioDeviceList::data(const QModelIndex& index, int role) const { void AudioDeviceList::resetDevice(bool contextIsHMD, const QString& device) { auto client = DependencyManager::get().data(); auto deviceName = getSetting(contextIsHMD, _mode).get(); + + // FIXME hack to prevent deadlock on startup. The real fix will be to have the + // audio client emit success and failure messages in response to audio device + // switches made here +#if 1 + QMetaObject::invokeMethod(client, "switchAudioDevice", + Q_ARG(QAudio::Mode, _mode), Q_ARG(QString, deviceName)); +#else bool switchResult = false; QMetaObject::invokeMethod(client, "switchAudioDevice", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, switchResult), @@ -85,6 +93,7 @@ void AudioDeviceList::resetDevice(bool contextIsHMD, const QString& device) { QMetaObject::invokeMethod(client, "switchAudioDevice", Q_ARG(QAudio::Mode, _mode)); } } +#endif } void AudioDeviceList::onDeviceChanged(const QAudioDeviceInfo& device) { @@ -201,6 +210,14 @@ void AudioDevices::onDevicesChanged(QAudio::Mode mode, const QList(); + + // FIXME hack to prevent deadlock on startup +#if 1 + QMetaObject::invokeMethod(client.data(), "switchAudioDevice", + Q_ARG(QAudio::Mode, QAudio::AudioInput), + Q_ARG(const QAudioDeviceInfo&, device)); + onDeviceSelected(QAudio::AudioInput, device, _inputs._selectedDevice); +#else bool success = false; QMetaObject::invokeMethod(client.data(), "switchAudioDevice", Qt::BlockingQueuedConnection, @@ -211,6 +228,7 @@ void AudioDevices::chooseInputDevice(const QAudioDeviceInfo& device) { if (success) { onDeviceSelected(QAudio::AudioInput, device, _inputs._selectedDevice); } +#endif } void AudioDevices::chooseOutputDevice(const QAudioDeviceInfo& device) { From 5b5e94700ecc20e0cfd939bec833e8f14a4e187d Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 20 Jul 2017 18:17:09 -0700 Subject: [PATCH 1014/1049] Additional audio fixes --- interface/src/scripting/AudioDevices.cpp | 70 +++++++++++------------- interface/src/scripting/AudioDevices.h | 6 +- 2 files changed, 37 insertions(+), 39 deletions(-) diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index 3416366558..d02f4d8fcf 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -36,6 +36,21 @@ Setting::Handle& getSetting(bool contextIsHMD, QAudio::Mode mode) { } } +static QString getTargetDevice(bool hmd, QAudio::Mode mode) { + QString deviceName; + auto& setting = getSetting(hmd, mode); + if (setting.isSet()) { + deviceName = setting.get(); + } else if (hmd) { + if (mode == QAudio::AudioInput) { + deviceName = qApp->getActiveDisplayPlugin()->getPreferredAudioInDevice(); + } else { // if (_mode == QAudio::AudioOutput) + deviceName = qApp->getActiveDisplayPlugin()->getPreferredAudioOutDevice(); + } + } + return deviceName; +} + QHash AudioDeviceList::_roles { { Qt::DisplayRole, "display" }, { Qt::CheckStateRole, "selected" }, @@ -59,18 +74,15 @@ QVariant AudioDeviceList::data(const QModelIndex& index, int role) const { } } - -void AudioDeviceList::resetDevice(bool contextIsHMD, const QString& device) { +void AudioDeviceList::resetDevice(bool contextIsHMD) { auto client = DependencyManager::get().data(); - auto deviceName = getSetting(contextIsHMD, _mode).get(); - - // FIXME hack to prevent deadlock on startup. The real fix will be to have the - // audio client emit success and failure messages in response to audio device - // switches made here -#if 1 + QString deviceName = getTargetDevice(contextIsHMD, _mode); + // FIXME can't use blocking connections here, so we can't determine whether the switch succeeded or not + // We need to have the AudioClient emit signals on switch success / failure QMetaObject::invokeMethod(client, "switchAudioDevice", Q_ARG(QAudio::Mode, _mode), Q_ARG(QString, deviceName)); -#else + +#if 0 bool switchResult = false; QMetaObject::invokeMethod(client, "switchAudioDevice", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, switchResult), @@ -146,11 +158,8 @@ AudioDevices::AudioDevices(bool& contextIsHMD) : _contextIsHMD(contextIsHMD) { } void AudioDevices::onContextChanged(const QString& context) { - auto input = getSetting(_contextIsHMD, QAudio::AudioInput).get(); - auto output = getSetting(_contextIsHMD, QAudio::AudioOutput).get(); - - _inputs.resetDevice(_contextIsHMD, input); - _outputs.resetDevice(_contextIsHMD, output); + _inputs.resetDevice(_contextIsHMD); + _outputs.resetDevice(_contextIsHMD); } void AudioDevices::onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& device, const QAudioDeviceInfo& previousDevice) { @@ -191,8 +200,16 @@ void AudioDevices::onDeviceSelected(QAudio::Mode mode, const QAudioDeviceInfo& d void AudioDevices::onDeviceChanged(QAudio::Mode mode, const QAudioDeviceInfo& device) { if (mode == QAudio::AudioInput) { + if (_requestedInputDevice == device) { + onDeviceSelected(QAudio::AudioInput, device, _inputs._selectedDevice); + _requestedInputDevice = QAudioDeviceInfo(); + } _inputs.onDeviceChanged(device); } else { // if (mode == QAudio::AudioOutput) + if (_requestedOutputDevice == device) { + onDeviceSelected(QAudio::AudioOutput, device, _outputs._selectedDevice); + _requestedOutputDevice = QAudioDeviceInfo(); + } _outputs.onDeviceChanged(device); } } @@ -210,37 +227,16 @@ void AudioDevices::onDevicesChanged(QAudio::Mode mode, const QList(); - - // FIXME hack to prevent deadlock on startup -#if 1 + _requestedInputDevice = device; QMetaObject::invokeMethod(client.data(), "switchAudioDevice", Q_ARG(QAudio::Mode, QAudio::AudioInput), Q_ARG(const QAudioDeviceInfo&, device)); - onDeviceSelected(QAudio::AudioInput, device, _inputs._selectedDevice); -#else - bool success = false; - QMetaObject::invokeMethod(client.data(), "switchAudioDevice", - Qt::BlockingQueuedConnection, - Q_RETURN_ARG(bool, success), - Q_ARG(QAudio::Mode, QAudio::AudioInput), - Q_ARG(const QAudioDeviceInfo&, device)); - - if (success) { - onDeviceSelected(QAudio::AudioInput, device, _inputs._selectedDevice); - } -#endif } void AudioDevices::chooseOutputDevice(const QAudioDeviceInfo& device) { auto client = DependencyManager::get(); - bool success = false; + _requestedOutputDevice = device; QMetaObject::invokeMethod(client.data(), "switchAudioDevice", - Qt::BlockingQueuedConnection, - Q_RETURN_ARG(bool, success), Q_ARG(QAudio::Mode, QAudio::AudioOutput), Q_ARG(const QAudioDeviceInfo&, device)); - - if (success) { - onDeviceSelected(QAudio::AudioOutput, device, _outputs._selectedDevice); - } } diff --git a/interface/src/scripting/AudioDevices.h b/interface/src/scripting/AudioDevices.h index a17c577535..3278a53374 100644 --- a/interface/src/scripting/AudioDevices.h +++ b/interface/src/scripting/AudioDevices.h @@ -39,7 +39,7 @@ public: QVariant data(const QModelIndex& index, int role) const override; // reset device to the last selected device in this context, or the default - void resetDevice(bool contextIsHMD, const QString& device); + void resetDevice(bool contextIsHMD); signals: void deviceChanged(const QAudioDeviceInfo& device); @@ -87,8 +87,10 @@ private: AudioDeviceList _inputs { QAudio::AudioInput }; AudioDeviceList _outputs { QAudio::AudioOutput }; + QAudioDeviceInfo _requestedOutputDevice; + QAudioDeviceInfo _requestedInputDevice; - bool& _contextIsHMD; + const bool& _contextIsHMD; }; }; From 615a3c52e4f74599912021bd6e067b8ad1a35f47 Mon Sep 17 00:00:00 2001 From: vladest Date: Fri, 21 Jul 2017 21:26:33 +0200 Subject: [PATCH 1015/1049] Ooops.. --- interface/resources/controllers/keyboardMouse.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/resources/controllers/keyboardMouse.json b/interface/resources/controllers/keyboardMouse.json index 2faabf0f91..c384817ff6 100644 --- a/interface/resources/controllers/keyboardMouse.json +++ b/interface/resources/controllers/keyboardMouse.json @@ -84,7 +84,7 @@ "to": "Actions.Yaw", "filters": [ - { "type": "scale", "scale": 0.1 } + { "type": "scale", "scale": 0.6 } ] }, @@ -109,14 +109,14 @@ { "from": "Keyboard.MouseMoveUp", "when": "Keyboard.RightMouseButton", "to": "Actions.PITCH_UP", "filters": [ - { "type": "scale", "scale": 0.1 } + { "type": "scale", "scale": 0.6 } ] }, { "from": "Keyboard.MouseMoveDown", "when": "Keyboard.RightMouseButton", "to": "Actions.PITCH_DOWN", "filters": [ - { "type": "scale", "scale": 0.1 } + { "type": "scale", "scale": 0.6 } ] }, From 5e04e849535f484fc60902878886ded483f7fc34 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Sat, 22 Jul 2017 11:57:51 -0700 Subject: [PATCH 1016/1049] make OBJ reader able to handle files where some vertices have colors and others don't --- libraries/fbx/src/OBJReader.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/libraries/fbx/src/OBJReader.cpp b/libraries/fbx/src/OBJReader.cpp index a171f92907..5ec6a9023d 100644 --- a/libraries/fbx/src/OBJReader.cpp +++ b/libraries/fbx/src/OBJReader.cpp @@ -118,7 +118,7 @@ glm::vec3 OBJTokenizer::getVec3() { auto z = getFloat(); auto v = glm::vec3(x, y, z); while (isNextTokenFloat()) { - // the spec(s) get(s) vague here. might be w, might be a color... chop it off. + // ignore any following floats nextToken(); } return v; @@ -130,6 +130,7 @@ bool OBJTokenizer::getVertex(glm::vec3& vertex, glm::vec3& vertexColor) { auto y = getFloat(); // And order of arguments is different on Windows/Linux. auto z = getFloat(); vertex = glm::vec3(x, y, z); + vertexColor = glm::vec3(1.0f); // default, in case there is not color information auto r = 1.0f, g = 1.0f, b = 1.0f; bool hasVertexColor = false; @@ -139,7 +140,7 @@ bool OBJTokenizer::getVertex(glm::vec3& vertex, glm::vec3& vertexColor) { // only a single value) that it's a vertex color. r = getFloat(); if (isNextTokenFloat()) { - // Safe to assume the following values are the green/blue components. + // Safe to assume the following values are the green/blue components. g = getFloat(); b = getFloat(); @@ -351,6 +352,8 @@ bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mappi bool result = true; int originalFaceCountForDebugging = 0; QString currentGroup; + bool anyVertexColor { false }; + int vertexCount { 0 }; setMeshPartDefaults(meshPart, QString("dontknow") + QString::number(mesh.parts.count())); @@ -416,10 +419,20 @@ bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mappi bool hasVertexColor = tokenizer.getVertex(vertex, vertexColor); vertices.append(vertex); - - if(hasVertexColor) { + + // if any vertex has color, they all need to. + if (hasVertexColor && !anyVertexColor) { + // we've had a gap of zero or more vertices without color, followed + // by one that has color. catch up: + for (int i = 0; i < vertexCount; i++) { + vertexColors.append(glm::vec3(1.0f)); + } + anyVertexColor = true; + } + if (anyVertexColor) { vertexColors.append(vertexColor); } + vertexCount++; } else if (token == "vn") { normals.append(tokenizer.getVec3()); } else if (token == "vt") { From 6f86b266cbd8a972c8bf60ecd84d9f647c46c487 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Sun, 23 Jul 2017 08:04:34 -0700 Subject: [PATCH 1017/1049] support writing of vertex colors --- libraries/fbx/src/OBJWriter.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/libraries/fbx/src/OBJWriter.cpp b/libraries/fbx/src/OBJWriter.cpp index 034263eb53..e0d3d36b06 100644 --- a/libraries/fbx/src/OBJWriter.cpp +++ b/libraries/fbx/src/OBJWriter.cpp @@ -40,8 +40,6 @@ static QString formatFloat(double n) { } bool writeOBJToTextStream(QTextStream& out, QList meshes) { - int attributeTypeNormal = gpu::Stream::InputSlot::NORMAL; // libraries/gpu/src/gpu/Stream.h - // each mesh's vertices are numbered from zero. We're combining all their vertices into one list here, // so keep track of the start index for each mesh. QList meshVertexStartOffset; @@ -49,10 +47,15 @@ bool writeOBJToTextStream(QTextStream& out, QList meshes) { int currentVertexStartOffset = 0; int currentNormalStartOffset = 0; - // write out vertices + // write out vertices (and maybe colors) foreach (const MeshPointer& mesh, meshes) { meshVertexStartOffset.append(currentVertexStartOffset); const gpu::BufferView& vertexBuffer = mesh->getVertexBuffer(); + + const gpu::BufferView& colorsBufferView = mesh->getAttributeBuffer(gpu::Stream::COLOR); + gpu::BufferView::Index numColors = (gpu::BufferView::Index)colorsBufferView.getNumElements(); + gpu::BufferView::Index colorIndex = 0; + int vertexCount = 0; gpu::BufferView::Iterator vertexItr = vertexBuffer.cbegin(); while (vertexItr != vertexBuffer.cend()) { @@ -60,7 +63,15 @@ bool writeOBJToTextStream(QTextStream& out, QList meshes) { out << "v "; out << formatFloat(v[0]) << " "; out << formatFloat(v[1]) << " "; - out << formatFloat(v[2]) << "\n"; + out << formatFloat(v[2]); + if (colorIndex < numColors) { + glm::vec3 color = colorsBufferView.get(colorIndex); + out << " " << formatFloat(color[0]); + out << " " << formatFloat(color[1]); + out << " " << formatFloat(color[2]); + colorIndex++; + } + out << "\n"; vertexItr++; vertexCount++; } @@ -72,7 +83,7 @@ bool writeOBJToTextStream(QTextStream& out, QList meshes) { bool haveNormals = true; foreach (const MeshPointer& mesh, meshes) { meshNormalStartOffset.append(currentNormalStartOffset); - const gpu::BufferView& normalsBufferView = mesh->getAttributeBuffer(attributeTypeNormal); + const gpu::BufferView& normalsBufferView = mesh->getAttributeBuffer(gpu::Stream::InputSlot::NORMAL); gpu::BufferView::Index numNormals = (gpu::BufferView::Index)normalsBufferView.getNumElements(); for (gpu::BufferView::Index i = 0; i < numNormals; i++) { glm::vec3 normal = normalsBufferView.get(i); From 6e0394865e9ee2f2abc722be2bb6236d77fef53d Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Sun, 23 Jul 2017 08:05:09 -0700 Subject: [PATCH 1018/1049] fix bug in getNumElements that kept it from working on buffer-views with a non-zero offset --- libraries/gpu/src/gpu/Buffer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/gpu/src/gpu/Buffer.h b/libraries/gpu/src/gpu/Buffer.h index 2eb2267f0d..c5df94235c 100644 --- a/libraries/gpu/src/gpu/Buffer.h +++ b/libraries/gpu/src/gpu/Buffer.h @@ -192,7 +192,7 @@ public: BufferView(const BufferPointer& buffer, Size offset, Size size, const Element& element = DEFAULT_ELEMENT); BufferView(const BufferPointer& buffer, Size offset, Size size, uint16 stride, const Element& element = DEFAULT_ELEMENT); - Size getNumElements() const { return (_size - _offset) / _stride; } + Size getNumElements() const { return _size / _stride; } //Template iterator with random access on the buffer sysmem template From 47ea32f4d3ce94399f37547e25149e9d6f3a143a Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Sun, 23 Jul 2017 08:06:26 -0700 Subject: [PATCH 1019/1049] vertex color support in ModelScriptingInterface --- .../src/RenderablePolyVoxEntityItem.cpp | 1 + libraries/model/src/model/Geometry.cpp | 37 ++++++++++++++++++- libraries/model/src/model/Geometry.h | 2 + libraries/render-utils/src/Model.cpp | 12 +++--- .../src/ModelScriptingInterface.cpp | 28 ++++++++++++-- 5 files changed, 70 insertions(+), 10 deletions(-) diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index 1d309a8e14..6687d4e721 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -1663,6 +1663,7 @@ bool RenderablePolyVoxEntityItem::getMeshes(MeshProxyList& result) { // the mesh will be in voxel-space. transform it into object-space meshProxy = new SimpleMeshProxy( _mesh->map([=](glm::vec3 position){ return glm::vec3(transform * glm::vec4(position, 1.0f)); }, + [=](glm::vec3 color){ return color; }, [=](glm::vec3 normal){ return glm::normalize(glm::vec3(transform * glm::vec4(normal, 0.0f))); }, [&](uint32_t index){ return index; })); result << meshProxy; diff --git a/libraries/model/src/model/Geometry.cpp b/libraries/model/src/model/Geometry.cpp index ac4c5dc188..5a8f4de0ca 100755 --- a/libraries/model/src/model/Geometry.cpp +++ b/libraries/model/src/model/Geometry.cpp @@ -11,8 +11,6 @@ #include "Geometry.h" -#include - using namespace model; Mesh::Mesh() : @@ -136,11 +134,13 @@ Box Mesh::evalPartsBound(int partStart, int partEnd) const { model::MeshPointer Mesh::map(std::function vertexFunc, + std::function colorFunc, std::function normalFunc, std::function indexFunc) const { // vertex data const gpu::BufferView& vertexBufferView = getVertexBuffer(); gpu::BufferView::Index numVertices = (gpu::BufferView::Index)getNumVertices(); + gpu::Resource::Size vertexSize = numVertices * sizeof(glm::vec3); unsigned char* resultVertexData = new unsigned char[vertexSize]; unsigned char* vertexDataCursor = resultVertexData; @@ -151,6 +151,23 @@ model::MeshPointer Mesh::map(std::function vertexFunc, vertexDataCursor += sizeof(pos); } + // color data + // static const gpu::Element COLOR_ELEMENT { gpu::VEC4, gpu::NUINT8, gpu::RGBA }; + // int attributeTypeColor = gpu::Stream::InputSlot::COLOR; // libraries/gpu/src/gpu/Stream.h + int attributeTypeColor = gpu::Stream::COLOR; + const gpu::BufferView& colorsBufferView = getAttributeBuffer(attributeTypeColor); + gpu::BufferView::Index numColors = (gpu::BufferView::Index)colorsBufferView.getNumElements(); + + gpu::Resource::Size colorSize = numColors * sizeof(glm::vec3); + unsigned char* resultColorData = new unsigned char[colorSize]; + unsigned char* colorDataCursor = resultColorData; + + for (gpu::BufferView::Index i = 0; i < numColors; i++) { + glm::vec3 color = colorFunc(colorsBufferView.get(i)); + memcpy(colorDataCursor, &color, sizeof(color)); + colorDataCursor += sizeof(color); + } + // normal data int attributeTypeNormal = gpu::Stream::InputSlot::NORMAL; // libraries/gpu/src/gpu/Stream.h const gpu::BufferView& normalsBufferView = getAttributeBuffer(attributeTypeNormal); @@ -187,6 +204,12 @@ model::MeshPointer Mesh::map(std::function vertexFunc, gpu::BufferView resultVertexBufferView(resultVertexBufferPointer, vertexElement); result->setVertexBuffer(resultVertexBufferView); + gpu::Element colorElement = gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ); + gpu::Buffer* resultColorsBuffer = new gpu::Buffer(colorSize, resultColorData); + gpu::BufferPointer resultColorsBufferPointer(resultColorsBuffer); + gpu::BufferView resultColorsBufferView(resultColorsBufferPointer, colorElement); + result->addAttribute(attributeTypeColor, resultColorsBufferView); + gpu::Element normalElement = gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ); gpu::Buffer* resultNormalsBuffer = new gpu::Buffer(normalSize, resultNormalData); gpu::BufferPointer resultNormalsBufferPointer(resultNormalsBuffer); @@ -215,6 +238,7 @@ model::MeshPointer Mesh::map(std::function vertexFunc, void Mesh::forEach(std::function vertexFunc, + std::function colorFunc, std::function normalFunc, std::function indexFunc) { // vertex data @@ -224,6 +248,15 @@ void Mesh::forEach(std::function vertexFunc, vertexFunc(vertexBufferView.get(i)); } + // color data + int attributeTypeColor = gpu::Stream::InputSlot::COLOR; // libraries/gpu/src/gpu/Stream.h + // int attributeTypeColor = gpu::Stream::COLOR; + const gpu::BufferView& colorsBufferView = getAttributeBuffer(attributeTypeColor); + gpu::BufferView::Index numColors = (gpu::BufferView::Index)colorsBufferView.getNumElements(); + for (gpu::BufferView::Index i = 0; i < numColors; i++) { + colorFunc(colorsBufferView.get(i)); + } + // normal data int attributeTypeNormal = gpu::Stream::InputSlot::NORMAL; // libraries/gpu/src/gpu/Stream.h const gpu::BufferView& normalsBufferView = getAttributeBuffer(attributeTypeNormal); diff --git a/libraries/model/src/model/Geometry.h b/libraries/model/src/model/Geometry.h index f273435545..260de313ab 100755 --- a/libraries/model/src/model/Geometry.h +++ b/libraries/model/src/model/Geometry.h @@ -123,10 +123,12 @@ public: // create a copy of this mesh after passing its vertices, normals, and indexes though the provided functions MeshPointer map(std::function vertexFunc, + std::function colorFunc, std::function normalFunc, std::function indexFunc) const; void forEach(std::function vertexFunc, + std::function colorFunc, std::function normalFunc, std::function indexFunc); diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 3755ca7cfc..917d284f86 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -483,11 +483,13 @@ MeshProxyList Model::getMeshes() { } MeshProxy* meshProxy = new SimpleMeshProxy( - mesh->map([=](glm::vec3 position) { - return glm::vec3(offsetMat * glm::vec4(position, 1.0f)); - }, - [=](glm::vec3 normal){ return glm::normalize(glm::vec3(offsetMat * glm::vec4(normal, 0.0f))); }, - [&](uint32_t index){ return index; })); + mesh->map( + [=](glm::vec3 position) { + return glm::vec3(offsetMat * glm::vec4(position, 1.0f)); + }, + [=](glm::vec3 color) { return color; }, + [=](glm::vec3 normal) { return glm::normalize(glm::vec3(offsetMat * glm::vec4(normal, 0.0f))); }, + [&](uint32_t index) { return index; })); result << meshProxy; } diff --git a/libraries/script-engine/src/ModelScriptingInterface.cpp b/libraries/script-engine/src/ModelScriptingInterface.cpp index 64fb365d0c..3234a079ec 100644 --- a/libraries/script-engine/src/ModelScriptingInterface.cpp +++ b/libraries/script-engine/src/ModelScriptingInterface.cpp @@ -38,16 +38,22 @@ QString ModelScriptingInterface::meshToOBJ(MeshProxyList in) { QScriptValue ModelScriptingInterface::appendMeshes(MeshProxyList in) { // figure out the size of the resulting mesh size_t totalVertexCount { 0 }; - size_t totalAttributeCount { 0 }; + size_t totalColorCount { 0 }; + size_t totalNormalCount { 0 }; size_t totalIndexCount { 0 }; foreach (const MeshProxy* meshProxy, in) { MeshPointer mesh = meshProxy->getMeshPointer(); totalVertexCount += mesh->getNumVertices(); + int attributeTypeColor = gpu::Stream::InputSlot::COLOR; // libraries/gpu/src/gpu/Stream.h + const gpu::BufferView& colorsBufferView = mesh->getAttributeBuffer(attributeTypeColor); + gpu::BufferView::Index numColors = (gpu::BufferView::Index)colorsBufferView.getNumElements(); + totalColorCount += numColors; + int attributeTypeNormal = gpu::Stream::InputSlot::NORMAL; // libraries/gpu/src/gpu/Stream.h const gpu::BufferView& normalsBufferView = mesh->getAttributeBuffer(attributeTypeNormal); gpu::BufferView::Index numNormals = (gpu::BufferView::Index)normalsBufferView.getNumElements(); - totalAttributeCount += numNormals; + totalNormalCount += numNormals; totalIndexCount += mesh->getNumIndices(); } @@ -57,7 +63,11 @@ QScriptValue ModelScriptingInterface::appendMeshes(MeshProxyList in) { unsigned char* combinedVertexData = new unsigned char[combinedVertexSize]; unsigned char* combinedVertexDataCursor = combinedVertexData; - gpu::Resource::Size combinedNormalSize = totalAttributeCount * sizeof(glm::vec3); + gpu::Resource::Size combinedColorSize = totalColorCount * sizeof(glm::vec3); + unsigned char* combinedColorData = new unsigned char[combinedColorSize]; + unsigned char* combinedColorDataCursor = combinedColorData; + + gpu::Resource::Size combinedNormalSize = totalNormalCount * sizeof(glm::vec3); unsigned char* combinedNormalData = new unsigned char[combinedNormalSize]; unsigned char* combinedNormalDataCursor = combinedNormalData; @@ -74,6 +84,10 @@ QScriptValue ModelScriptingInterface::appendMeshes(MeshProxyList in) { memcpy(combinedVertexDataCursor, &position, sizeof(position)); combinedVertexDataCursor += sizeof(position); }, + [&](glm::vec3 color){ + memcpy(combinedColorDataCursor, &color, sizeof(color)); + combinedColorDataCursor += sizeof(color); + }, [&](glm::vec3 normal){ memcpy(combinedNormalDataCursor, &normal, sizeof(normal)); combinedNormalDataCursor += sizeof(normal); @@ -96,6 +110,13 @@ QScriptValue ModelScriptingInterface::appendMeshes(MeshProxyList in) { gpu::BufferView combinedVertexBufferView(combinedVertexBufferPointer, vertexElement); result->setVertexBuffer(combinedVertexBufferView); + int attributeTypeColor = gpu::Stream::InputSlot::COLOR; // libraries/gpu/src/gpu/Stream.h + gpu::Element colorElement = gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ); + gpu::Buffer* combinedColorsBuffer = new gpu::Buffer(combinedColorSize, combinedColorData); + gpu::BufferPointer combinedColorsBufferPointer(combinedColorsBuffer); + gpu::BufferView combinedColorsBufferView(combinedColorsBufferPointer, colorElement); + result->addAttribute(attributeTypeColor, combinedColorsBufferView); + int attributeTypeNormal = gpu::Stream::InputSlot::NORMAL; // libraries/gpu/src/gpu/Stream.h gpu::Element normalElement = gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ); gpu::Buffer* combinedNormalsBuffer = new gpu::Buffer(combinedNormalSize, combinedNormalData); @@ -132,6 +153,7 @@ QScriptValue ModelScriptingInterface::transformMesh(glm::mat4 transform, MeshPro } model::MeshPointer result = mesh->map([&](glm::vec3 position){ return glm::vec3(transform * glm::vec4(position, 1.0f)); }, + [&](glm::vec3 color){ return color; }, [&](glm::vec3 normal){ return glm::vec3(transform * glm::vec4(normal, 0.0f)); }, [&](uint32_t index){ return index; }); MeshProxy* resultProxy = new SimpleMeshProxy(result); From a1107deef19c713d84bf1a46c9234745bb6bf31f Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Sun, 23 Jul 2017 08:21:50 -0700 Subject: [PATCH 1020/1049] cleanups --- libraries/model/src/model/Geometry.cpp | 3 --- libraries/render-utils/src/Model.cpp | 4 +++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/libraries/model/src/model/Geometry.cpp b/libraries/model/src/model/Geometry.cpp index 5a8f4de0ca..5627746c43 100755 --- a/libraries/model/src/model/Geometry.cpp +++ b/libraries/model/src/model/Geometry.cpp @@ -152,8 +152,6 @@ model::MeshPointer Mesh::map(std::function vertexFunc, } // color data - // static const gpu::Element COLOR_ELEMENT { gpu::VEC4, gpu::NUINT8, gpu::RGBA }; - // int attributeTypeColor = gpu::Stream::InputSlot::COLOR; // libraries/gpu/src/gpu/Stream.h int attributeTypeColor = gpu::Stream::COLOR; const gpu::BufferView& colorsBufferView = getAttributeBuffer(attributeTypeColor); gpu::BufferView::Index numColors = (gpu::BufferView::Index)colorsBufferView.getNumElements(); @@ -250,7 +248,6 @@ void Mesh::forEach(std::function vertexFunc, // color data int attributeTypeColor = gpu::Stream::InputSlot::COLOR; // libraries/gpu/src/gpu/Stream.h - // int attributeTypeColor = gpu::Stream::COLOR; const gpu::BufferView& colorsBufferView = getAttributeBuffer(attributeTypeColor); gpu::BufferView::Index numColors = (gpu::BufferView::Index)colorsBufferView.getNumElements(); for (gpu::BufferView::Index i = 0; i < numColors; i++) { diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 917d284f86..095712f351 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -488,7 +488,9 @@ MeshProxyList Model::getMeshes() { return glm::vec3(offsetMat * glm::vec4(position, 1.0f)); }, [=](glm::vec3 color) { return color; }, - [=](glm::vec3 normal) { return glm::normalize(glm::vec3(offsetMat * glm::vec4(normal, 0.0f))); }, + [=](glm::vec3 normal) { + return glm::normalize(glm::vec3(offsetMat * glm::vec4(normal, 0.0f))); + }, [&](uint32_t index) { return index; })); result << meshProxy; } From 300b926464e1412be5744316252ba82a1caa8576 Mon Sep 17 00:00:00 2001 From: humbletim Date: Sun, 23 Jul 2017 14:11:59 -0400 Subject: [PATCH 1021/1049] only call QList::constFirst when history list isn't empty --- interface/src/ui/JSConsole.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/JSConsole.cpp b/interface/src/ui/JSConsole.cpp index ef38ea6d29..394b947372 100644 --- a/interface/src/ui/JSConsole.cpp +++ b/interface/src/ui/JSConsole.cpp @@ -122,7 +122,7 @@ void JSConsole::setScriptEngine(ScriptEngine* scriptEngine) { } void JSConsole::executeCommand(const QString& command) { - if (_commandHistory.constFirst() != command) { + if (_commandHistory.isEmpty() || _commandHistory.constFirst() != command) { _commandHistory.prepend(command); if (_commandHistory.length() > MAX_HISTORY_SIZE) { _commandHistory.removeLast(); From 630922dd95d39a3c6feeb6bf442f917ad847f92e Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 24 Jul 2017 05:25:52 +0100 Subject: [PATCH 1022/1049] Dominant Hands Branch Initial Commit Adds a new option in the Avatar Basics section of the Avatar Settings. API Accessible Functions: MyAvatar.getUseAlternativeHand() MyAvatar.setUseAlternativeHand() Defaults to false (Right Hand). Will return True if set to Left Hand. --- .../qml/controls-uit/RadioButton.qml | 71 ++++++++++++ .../preferences/PrimaryHandPreference.qml | 102 ++++++++++++++++++ .../qml/dialogs/preferences/Section.qml | 5 + interface/src/avatar/MyAvatar.cpp | 3 +- interface/src/avatar/MyAvatar.h | 5 +- interface/src/ui/PreferencesDialog.cpp | 6 ++ libraries/shared/src/Preferences.h | 9 ++ 7 files changed, 199 insertions(+), 2 deletions(-) create mode 100644 interface/resources/qml/controls-uit/RadioButton.qml create mode 100644 interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml diff --git a/interface/resources/qml/controls-uit/RadioButton.qml b/interface/resources/qml/controls-uit/RadioButton.qml new file mode 100644 index 0000000000..76b7902435 --- /dev/null +++ b/interface/resources/qml/controls-uit/RadioButton.qml @@ -0,0 +1,71 @@ +// +// RadioButton.qml +// +// Created by Cain Kilgore on 20th July 2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 as Original +import QtQuick.Controls.Styles 1.4 + +import "../styles-uit" +import "../controls-uit" as HifiControls + +Original.RadioButton { + id: radioButton + HifiConstants { id: hifi } + + property int colorScheme: hifi.colorSchemes.light + readonly property bool isLightColorScheme: colorScheme == hifi.colorSchemes.light + + readonly property int boxSize: 14 + readonly property int boxRadius: 3 + readonly property int checkSize: 10 + readonly property int checkRadius: 2 + + style: RadioButtonStyle { + indicator: Rectangle { + id: box + width: boxSize + height: boxSize + radius: boxRadius + gradient: Gradient { + GradientStop { + position: 0.2 + color: pressed || hovered + ? (radioButton.isLightColorScheme ? hifi.colors.checkboxDarkStart : hifi.colors.checkboxLightStart) + : (radioButton.isLightColorScheme ? hifi.colors.checkboxLightStart : hifi.colors.checkboxDarkStart) + } + GradientStop { + position: 1.0 + color: pressed || hovered + ? (radioButton.isLightColorScheme ? hifi.colors.checkboxDarkFinish : hifi.colors.checkboxLightFinish) + : (radioButton.isLightColorScheme ? hifi.colors.checkboxLightFinish : hifi.colors.checkboxDarkFinish) + } + } + + Rectangle { + id: check + width: checkSize + height: checkSize + radius: checkRadius + anchors.centerIn: parent + color: hifi.colors.checkBoxChecked + border.width: 1 + border.color: hifi.colors.checkBoxCheckedBorder + visible: checked && !pressed || !checked && pressed + } + } + + label: RalewaySemiBold { + text: control.text + size: hifi.fontSizes.inputLabel + color: isLightColorScheme ? hifi.colors.lightGray : hifi.colors.lightGrayText + x: radioButton.boxSize / 2 + } + } +} diff --git a/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml new file mode 100644 index 0000000000..74044ea27d --- /dev/null +++ b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml @@ -0,0 +1,102 @@ +// +// PrimaryHandPreference.qml +// +// Created by Cain Kilgore on 20th July 2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 + +import "../../controls-uit" + +Preference { + id: root + property alias box1: box1 + property alias box2: box2 + + height: control.height + hifi.dimensions.controlInterlineHeight + + Component.onCompleted: { + if(preference.value) { + box1.checked = true; + } else { + box2.checked = true; + } + } + + function save() { + // Box1 = True, Box2 = False (Right Hand for Default) + if(box1.checked && !box2.checked) { + preference.value = true; + } + if(!box1.checked && box2.checked) { + preference.value = false; + } + preference.save(); + } + + Item { + id: control + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + height: Math.max(labelName.height, box1.height, box2.height) + + Label { + id: labelName + text: root.label + ":" + colorScheme: hifi.colorSchemes.dark + anchors { + left: parent.left + right: box1.left + rightMargin: hifi.dimensions.labelPadding + verticalCenter: parent.verticalCenter + } + horizontalAlignment: Text.AlignRight + wrapMode: Text.Wrap + } + + RadioButton { + id: box1 + text: "Left" + width: 60 + anchors { + right: box2.left + verticalCenter: parent.verticalCenter + } + onClicked: { + if(box2.checked) { + box2.checked = false; + } + if(!box1.checked && !box2.checked) { + box2.checked = true; + } + } + colorScheme: hifi.colorSchemes.dark + } + + RadioButton { + id: box2 + text: "Right" + width: 60 + anchors { + right: parent.right + verticalCenter: parent.verticalCenter + } + onClicked: { + if(box1.checked) { + box1.checked = false; + } + if(!box1.checked && !box2.checked) { + box2.checked = true; + } + } + colorScheme: hifi.colorSchemes.dark + } + } +} diff --git a/interface/resources/qml/dialogs/preferences/Section.qml b/interface/resources/qml/dialogs/preferences/Section.qml index 3985c7d6f6..af2e58c875 100644 --- a/interface/resources/qml/dialogs/preferences/Section.qml +++ b/interface/resources/qml/dialogs/preferences/Section.qml @@ -73,6 +73,7 @@ Preference { property var buttonBuilder: Component { ButtonPreference { } } property var comboBoxBuilder: Component { ComboBoxPreference { } } property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } + property var primaryHandBuilder: Component { PrimaryHandPreference { } } property var preferences: [] property int checkBoxCount: 0 @@ -134,6 +135,10 @@ Preference { checkBoxCount = 0; builder = spinnerSliderBuilder; break; + case Preference.PrimaryHand: + checkBoxCount++; + builder = primaryHandBuilder; + break; }; if (builder) { diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index f9a4d491c8..0a3d9f4c74 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -926,6 +926,7 @@ void MyAvatar::saveData() { Settings settings; settings.beginGroup("Avatar"); + settings.setValue("useAlternativeHand", _useAlternativeHand); settings.setValue("headPitch", getHead()->getBasePitch()); settings.setValue("scale", _targetScale); @@ -1122,7 +1123,7 @@ void MyAvatar::loadData() { setCollisionSoundURL(settings.value("collisionSoundURL", DEFAULT_AVATAR_COLLISION_SOUND_URL).toString()); setSnapTurn(settings.value("useSnapTurn", _useSnapTurn).toBool()); setClearOverlayWhenMoving(settings.value("clearOverlayWhenMoving", _clearOverlayWhenMoving).toBool()); - + setUseAlternativeHand(settings.value("useAlternativeHand", _useAlternativeHand).toBool()); settings.endGroup(); setEnableMeshVisible(Menu::getInstance()->isOptionChecked(MenuOption::MeshVisible)); diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 648a5b5f29..8ff616b36b 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -339,6 +339,9 @@ public: Q_INVOKABLE bool getClearOverlayWhenMoving() const { return _clearOverlayWhenMoving; } Q_INVOKABLE void setClearOverlayWhenMoving(bool on) { _clearOverlayWhenMoving = on; } + Q_INVOKABLE void setUseAlternativeHand(bool hand) { _useAlternativeHand = hand; } + Q_INVOKABLE bool getUseAlternativeHand() const { return _useAlternativeHand; } + Q_INVOKABLE void setHMDLeanRecenterEnabled(bool value) { _hmdLeanRecenterEnabled = value; } Q_INVOKABLE bool getHMDLeanRecenterEnabled() const { return _hmdLeanRecenterEnabled; } @@ -424,7 +427,6 @@ public: Q_INVOKABLE QString getFullAvatarModelName() const { return _fullAvatarModelName; } void resetFullAvatarURL(); - virtual void setAttachmentData(const QVector& attachmentData) override; MyCharacterController* getCharacterController() { return &_characterController; } @@ -720,6 +722,7 @@ private: QUrl _fstAnimGraphOverrideUrl; bool _useSnapTurn { true }; bool _clearOverlayWhenMoving { true }; + bool _useAlternativeHand{ false }; // False defaults to right hand, true to left const float ROLL_CONTROL_DEAD_ZONE_DEFAULT = 8.0f; // deg const float ROLL_CONTROL_RATE_DEFAULT = 2.5f; // deg/sec/deg diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 87131e4f5c..b962b456af 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -67,6 +67,12 @@ void setupPreferences() { auto setter = [=](bool value) { myAvatar->setClearOverlayWhenMoving(value); }; preferences->addPreference(new CheckPreference(AVATAR_BASICS, "Clear overlays when moving", getter, setter)); } + { + auto getter = [=]()->bool { return myAvatar->getUseAlternativeHand(); }; + auto setter = [=](bool value) { myAvatar->setUseAlternativeHand(value); }; + preferences->addPreference(new PrimaryHandPreference(AVATAR_BASICS, "Dominant Hand", getter, setter)); + + } // UI static const QString UI_CATEGORY { "UI" }; diff --git a/libraries/shared/src/Preferences.h b/libraries/shared/src/Preferences.h index 6093cd3c8a..73cce1e909 100644 --- a/libraries/shared/src/Preferences.h +++ b/libraries/shared/src/Preferences.h @@ -56,6 +56,7 @@ public: Checkbox, Button, ComboBox, + PrimaryHand, // Special casing for an unusual preference Avatar }; @@ -339,6 +340,14 @@ public: Type getType() override { return Checkbox; } }; +class PrimaryHandPreference : public BoolPreference { + Q_OBJECT +public: + PrimaryHandPreference(const QString& category, const QString& name, Getter getter, Setter setter) + : BoolPreference(category, name, getter, setter) { } + Type getType() override { return PrimaryHand; } +}; + #endif From a4cf27402dcf541374c1b13d3e938517b3740b75 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 24 Jul 2017 06:27:14 +0100 Subject: [PATCH 1023/1049] Tabs and Cleanup of Code --- .../preferences/PrimaryHandPreference.qml | 20 +++++++++---------- .../qml/dialogs/preferences/Section.qml | 3 ++- interface/src/ui/PreferencesDialog.cpp | 1 - 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml index 74044ea27d..af9999ae7a 100644 --- a/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml +++ b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml @@ -20,7 +20,7 @@ Preference { height: control.height + hifi.dimensions.controlInterlineHeight Component.onCompleted: { - if(preference.value) { + if (preference.value) { box1.checked = true; } else { box2.checked = true; @@ -28,13 +28,13 @@ Preference { } function save() { - // Box1 = True, Box2 = False (Right Hand for Default) - if(box1.checked && !box2.checked) { - preference.value = true; - } - if(!box1.checked && box2.checked) { - preference.value = false; - } + // Box1 = True, Box2 = False (Right Hand for Default) + if (box1.checked && !box2.checked) { + preference.value = true; + } + if (!box1.checked && box2.checked) { + preference.value = false; + } preference.save(); } @@ -70,10 +70,10 @@ Preference { verticalCenter: parent.verticalCenter } onClicked: { - if(box2.checked) { + if (box2.checked) { box2.checked = false; } - if(!box1.checked && !box2.checked) { + if (!box1.checked && !box2.checked) { box2.checked = true; } } diff --git a/interface/resources/qml/dialogs/preferences/Section.qml b/interface/resources/qml/dialogs/preferences/Section.qml index af2e58c875..4a16036a69 100644 --- a/interface/resources/qml/dialogs/preferences/Section.qml +++ b/interface/resources/qml/dialogs/preferences/Section.qml @@ -73,7 +73,7 @@ Preference { property var buttonBuilder: Component { ButtonPreference { } } property var comboBoxBuilder: Component { ComboBoxPreference { } } property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } - property var primaryHandBuilder: Component { PrimaryHandPreference { } } + property var primaryHandBuilder: Component { PrimaryHandPreference { } } property var preferences: [] property int checkBoxCount: 0 @@ -135,6 +135,7 @@ Preference { checkBoxCount = 0; builder = spinnerSliderBuilder; break; + case Preference.PrimaryHand: checkBoxCount++; builder = primaryHandBuilder; diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index b962b456af..fe1663b98d 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -71,7 +71,6 @@ void setupPreferences() { auto getter = [=]()->bool { return myAvatar->getUseAlternativeHand(); }; auto setter = [=](bool value) { myAvatar->setUseAlternativeHand(value); }; preferences->addPreference(new PrimaryHandPreference(AVATAR_BASICS, "Dominant Hand", getter, setter)); - } // UI From 1ce1204a64805ca3fde7ed7430362cb649e53be0 Mon Sep 17 00:00:00 2001 From: milad Date: Mon, 24 Jul 2017 10:06:44 -0500 Subject: [PATCH 1024/1049] WORKLIST ISSUE # 21471 : FIX PARENT JOINT IN EDIT JS In entityPropeties.js line #1079 says: elParentJointIndex.addEventListener('change', createEmitNumberPropertyUpdateFunction('parentJointIndex')); The problem should be fixed by changing it to: elParentJointIndex.addEventListener('change', createEmitNumberPropertyUpdateFunction('parentJointIndex', 0)); createEmitNumberPropertyUpdateFunction() is parsing the value as a float to a default decimal position of 4. Looks like it only accepts integers. By adding in that 0 as a second argument, it should coerce the value to one that will be recognized by the UI/backend. --- scripts/system/html/js/entityProperties.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/html/js/entityProperties.js b/scripts/system/html/js/entityProperties.js index 777ef54085..70594d8f1e 100644 --- a/scripts/system/html/js/entityProperties.js +++ b/scripts/system/html/js/entityProperties.js @@ -1074,7 +1074,7 @@ function loaded() { elDimensionsZ.addEventListener('change', dimensionsChangeFunction); elParentID.addEventListener('change', createEmitTextPropertyUpdateFunction('parentID')); - elParentJointIndex.addEventListener('change', createEmitNumberPropertyUpdateFunction('parentJointIndex')); + elParentJointIndex.addEventListener('change', createEmitNumberPropertyUpdateFunction('parentJointIndex', 0)); var registrationChangeFunction = createEmitVec3PropertyUpdateFunction( 'registrationPoint', elRegistrationX, elRegistrationY, elRegistrationZ); From 42742ba1f9fda98db0fd11281a5b68b5a471fa09 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 24 Jul 2017 18:31:16 +0100 Subject: [PATCH 1025/1049] Changed the Return to a String "left/right" instead. --- .../qml/dialogs/preferences/PrimaryHandPreference.qml | 6 +++--- interface/src/avatar/MyAvatar.cpp | 4 ++-- interface/src/avatar/MyAvatar.h | 11 ++++++++--- interface/src/ui/PreferencesDialog.cpp | 4 ++-- libraries/shared/src/Preferences.h | 4 ++-- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml index af9999ae7a..c89756f678 100644 --- a/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml +++ b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml @@ -20,7 +20,7 @@ Preference { height: control.height + hifi.dimensions.controlInterlineHeight Component.onCompleted: { - if (preference.value) { + if (preference.value == "left") { box1.checked = true; } else { box2.checked = true; @@ -30,10 +30,10 @@ Preference { function save() { // Box1 = True, Box2 = False (Right Hand for Default) if (box1.checked && !box2.checked) { - preference.value = true; + preference.value = "left"; } if (!box1.checked && box2.checked) { - preference.value = false; + preference.value = "right"; } preference.save(); } diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 0a3d9f4c74..9b42310c3c 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -926,7 +926,7 @@ void MyAvatar::saveData() { Settings settings; settings.beginGroup("Avatar"); - settings.setValue("useAlternativeHand", _useAlternativeHand); + settings.setValue("dominantHand", _dominantHand); settings.setValue("headPitch", getHead()->getBasePitch()); settings.setValue("scale", _targetScale); @@ -1123,7 +1123,7 @@ void MyAvatar::loadData() { setCollisionSoundURL(settings.value("collisionSoundURL", DEFAULT_AVATAR_COLLISION_SOUND_URL).toString()); setSnapTurn(settings.value("useSnapTurn", _useSnapTurn).toBool()); setClearOverlayWhenMoving(settings.value("clearOverlayWhenMoving", _clearOverlayWhenMoving).toBool()); - setUseAlternativeHand(settings.value("useAlternativeHand", _useAlternativeHand).toBool()); + setDominantHand(settings.value("dominantHand", _dominantHand).toString().toLower()); settings.endGroup(); setEnableMeshVisible(Menu::getInstance()->isOptionChecked(MenuOption::MeshVisible)); diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 8ff616b36b..05af26416c 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -339,8 +339,13 @@ public: Q_INVOKABLE bool getClearOverlayWhenMoving() const { return _clearOverlayWhenMoving; } Q_INVOKABLE void setClearOverlayWhenMoving(bool on) { _clearOverlayWhenMoving = on; } - Q_INVOKABLE void setUseAlternativeHand(bool hand) { _useAlternativeHand = hand; } - Q_INVOKABLE bool getUseAlternativeHand() const { return _useAlternativeHand; } + Q_INVOKABLE void setDominantHand(const QString& hand) { + if (hand == "left" || hand == "right") { + _dominantHand = hand; + } + } + + Q_INVOKABLE QString getDominantHand() const { return _dominantHand; } Q_INVOKABLE void setHMDLeanRecenterEnabled(bool value) { _hmdLeanRecenterEnabled = value; } Q_INVOKABLE bool getHMDLeanRecenterEnabled() const { return _hmdLeanRecenterEnabled; } @@ -722,7 +727,7 @@ private: QUrl _fstAnimGraphOverrideUrl; bool _useSnapTurn { true }; bool _clearOverlayWhenMoving { true }; - bool _useAlternativeHand{ false }; // False defaults to right hand, true to left + QString _dominantHand{ "right" }; const float ROLL_CONTROL_DEAD_ZONE_DEFAULT = 8.0f; // deg const float ROLL_CONTROL_RATE_DEFAULT = 2.5f; // deg/sec/deg diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index fe1663b98d..fd0847c945 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -68,8 +68,8 @@ void setupPreferences() { preferences->addPreference(new CheckPreference(AVATAR_BASICS, "Clear overlays when moving", getter, setter)); } { - auto getter = [=]()->bool { return myAvatar->getUseAlternativeHand(); }; - auto setter = [=](bool value) { myAvatar->setUseAlternativeHand(value); }; + auto getter = [=]()->QString { return myAvatar->getDominantHand(); }; + auto setter = [=](const QString& value) { myAvatar->setDominantHand(value); }; preferences->addPreference(new PrimaryHandPreference(AVATAR_BASICS, "Dominant Hand", getter, setter)); } diff --git a/libraries/shared/src/Preferences.h b/libraries/shared/src/Preferences.h index 73cce1e909..6fa2cb9b1f 100644 --- a/libraries/shared/src/Preferences.h +++ b/libraries/shared/src/Preferences.h @@ -340,11 +340,11 @@ public: Type getType() override { return Checkbox; } }; -class PrimaryHandPreference : public BoolPreference { +class PrimaryHandPreference : public StringPreference { Q_OBJECT public: PrimaryHandPreference(const QString& category, const QString& name, Getter getter, Setter setter) - : BoolPreference(category, name, getter, setter) { } + : StringPreference(category, name, getter, setter) { } Type getType() override { return PrimaryHand; } }; From e6fd85f45ac4e748d54af6dbf749668e4c9b3a21 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 24 Jul 2017 19:02:40 +0100 Subject: [PATCH 1026/1049] Some code cleanup --- .../dialogs/preferences/PrimaryHandPreference.qml | 4 ++-- interface/src/avatar/MyAvatar.cpp | 12 ++++++++++++ interface/src/avatar/MyAvatar.h | 12 +++++++----- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml index c89756f678..d230f7e0da 100644 --- a/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml +++ b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml @@ -89,10 +89,10 @@ Preference { verticalCenter: parent.verticalCenter } onClicked: { - if(box1.checked) { + if (box1.checked) { box1.checked = false; } - if(!box1.checked && !box2.checked) { + if (!box1.checked && !box2.checked) { box2.checked = true; } } diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 9b42310c3c..90870f83c2 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -72,6 +72,9 @@ const float MIN_AVATAR_SPEED_SQUARED = MIN_AVATAR_SPEED * MIN_AVATAR_SPEED; // s const float YAW_SPEED_DEFAULT = 120.0f; // degrees/sec const float PITCH_SPEED_DEFAULT = 90.0f; // degrees/sec +const QString DOMINANT_HAND_LEFT = "left"; +const QString DOMINANT_HAND_RIGHT = "right"; + // TODO: normalize avatar speed for standard avatar size, then scale all motion logic // to properly follow avatar size. float MAX_AVATAR_SPEED = 30.0f; @@ -87,6 +90,9 @@ const float MyAvatar::ZOOM_MIN = 0.5f; const float MyAvatar::ZOOM_MAX = 25.0f; const float MyAvatar::ZOOM_DEFAULT = 1.5f; +const QString& DOMINANT_LEFT_HAND = "left"; +const QString& DOMINANT_RIGHT_HAND = "right"; + // default values, used when avatar is missing joints... (avatar space) static const glm::quat DEFAULT_AVATAR_MIDDLE_EYE_ROT { Quaternions::Y_180 }; static const glm::vec3 DEFAULT_AVATAR_MIDDLE_EYE_POS { 0.0f, 0.6f, 0.0f }; @@ -255,6 +261,12 @@ MyAvatar::~MyAvatar() { _lookAtTargetAvatar.reset(); } +void MyAvatar::setDominantHand(const QString& hand) { + if (hand == DOMINANT_HAND_LEFT || hand == DOMINANT_HAND_RIGHT) { + _dominantHand = hand; + } +} + void MyAvatar::registerMetaTypes(QScriptEngine* engine) { QScriptValue value = engine->newQObject(this, QScriptEngine::QtOwnership, QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects); engine->globalObject().setProperty("MyAvatar", value); diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 05af26416c..0f4d2c7464 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -43,6 +43,12 @@ enum AudioListenerMode { FROM_CAMERA, CUSTOM }; + +enum DominantHand { + LEFT_HAND, + RIGHT_HAND +}; + Q_DECLARE_METATYPE(AudioListenerMode); class MyAvatar : public Avatar { @@ -339,11 +345,7 @@ public: Q_INVOKABLE bool getClearOverlayWhenMoving() const { return _clearOverlayWhenMoving; } Q_INVOKABLE void setClearOverlayWhenMoving(bool on) { _clearOverlayWhenMoving = on; } - Q_INVOKABLE void setDominantHand(const QString& hand) { - if (hand == "left" || hand == "right") { - _dominantHand = hand; - } - } + Q_INVOKABLE void setDominantHand(const QString& hand); Q_INVOKABLE QString getDominantHand() const { return _dominantHand; } From fd2264f7c92d170b4ce34714e01e2d922e3f629a Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 24 Jul 2017 19:05:49 +0100 Subject: [PATCH 1027/1049] removed duplicate --- interface/src/avatar/MyAvatar.cpp | 3 --- interface/src/avatar/MyAvatar.h | 5 ----- 2 files changed, 8 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 90870f83c2..a0086723ae 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -72,9 +72,6 @@ const float MIN_AVATAR_SPEED_SQUARED = MIN_AVATAR_SPEED * MIN_AVATAR_SPEED; // s const float YAW_SPEED_DEFAULT = 120.0f; // degrees/sec const float PITCH_SPEED_DEFAULT = 90.0f; // degrees/sec -const QString DOMINANT_HAND_LEFT = "left"; -const QString DOMINANT_HAND_RIGHT = "right"; - // TODO: normalize avatar speed for standard avatar size, then scale all motion logic // to properly follow avatar size. float MAX_AVATAR_SPEED = 30.0f; diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 0f4d2c7464..1239989c05 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -44,11 +44,6 @@ enum AudioListenerMode { CUSTOM }; -enum DominantHand { - LEFT_HAND, - RIGHT_HAND -}; - Q_DECLARE_METATYPE(AudioListenerMode); class MyAvatar : public Avatar { From 64ba159adf325f5a00fc71b7e87d97242a34ce7a Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 24 Jul 2017 19:12:14 +0100 Subject: [PATCH 1028/1049] Updating Small Reference --- interface/src/avatar/MyAvatar.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 1239989c05..dc306bd09a 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -724,7 +724,7 @@ private: QUrl _fstAnimGraphOverrideUrl; bool _useSnapTurn { true }; bool _clearOverlayWhenMoving { true }; - QString _dominantHand{ "right" }; + QString _dominantHand{ DOMINANT_RIGHT_HAND }; const float ROLL_CONTROL_DEAD_ZONE_DEFAULT = 8.0f; // deg const float ROLL_CONTROL_RATE_DEFAULT = 2.5f; // deg/sec/deg From 9ff7891c880e94f593eba9db9d468c68fe188928 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 24 Jul 2017 19:56:02 +0100 Subject: [PATCH 1029/1049] Fixed reference error, Gustavo should build now. --- interface/src/avatar/MyAvatar.cpp | 5 +---- interface/src/avatar/MyAvatar.h | 6 ++++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index a0086723ae..081ab8e8f1 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -87,9 +87,6 @@ const float MyAvatar::ZOOM_MIN = 0.5f; const float MyAvatar::ZOOM_MAX = 25.0f; const float MyAvatar::ZOOM_DEFAULT = 1.5f; -const QString& DOMINANT_LEFT_HAND = "left"; -const QString& DOMINANT_RIGHT_HAND = "right"; - // default values, used when avatar is missing joints... (avatar space) static const glm::quat DEFAULT_AVATAR_MIDDLE_EYE_ROT { Quaternions::Y_180 }; static const glm::vec3 DEFAULT_AVATAR_MIDDLE_EYE_POS { 0.0f, 0.6f, 0.0f }; @@ -259,7 +256,7 @@ MyAvatar::~MyAvatar() { } void MyAvatar::setDominantHand(const QString& hand) { - if (hand == DOMINANT_HAND_LEFT || hand == DOMINANT_HAND_RIGHT) { + if (hand == DOMINANT_LEFT_HAND || hand == DOMINANT_RIGHT_HAND) { _dominantHand = hand; } } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index dc306bd09a..1657f78b26 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -142,6 +142,9 @@ class MyAvatar : public Avatar { Q_PROPERTY(float hmdRollControlDeadZone READ getHMDRollControlDeadZone WRITE setHMDRollControlDeadZone) Q_PROPERTY(float hmdRollControlRate READ getHMDRollControlRate WRITE setHMDRollControlRate) + const QString DOMINANT_LEFT_HAND = "left"; + const QString DOMINANT_RIGHT_HAND = "right"; + public: enum DriveKeys { TRANSLATE_X = 0, @@ -341,7 +344,6 @@ public: Q_INVOKABLE void setClearOverlayWhenMoving(bool on) { _clearOverlayWhenMoving = on; } Q_INVOKABLE void setDominantHand(const QString& hand); - Q_INVOKABLE QString getDominantHand() const { return _dominantHand; } Q_INVOKABLE void setHMDLeanRecenterEnabled(bool value) { _hmdLeanRecenterEnabled = value; } @@ -724,7 +726,7 @@ private: QUrl _fstAnimGraphOverrideUrl; bool _useSnapTurn { true }; bool _clearOverlayWhenMoving { true }; - QString _dominantHand{ DOMINANT_RIGHT_HAND }; + QString _dominantHand { DOMINANT_RIGHT_HAND }; const float ROLL_CONTROL_DEAD_ZONE_DEFAULT = 8.0f; // deg const float ROLL_CONTROL_RATE_DEFAULT = 2.5f; // deg/sec/deg From 9c152ddc6f7d0c86c88b8423a8ee64f295351a29 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 24 Jul 2017 22:30:43 +0100 Subject: [PATCH 1030/1049] Ticking left will keep it on left, not right --- .../resources/qml/dialogs/preferences/PrimaryHandPreference.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml index d230f7e0da..07b9c958dd 100644 --- a/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml +++ b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml @@ -74,7 +74,7 @@ Preference { box2.checked = false; } if (!box1.checked && !box2.checked) { - box2.checked = true; + box1.checked = true; } } colorScheme: hifi.colorSchemes.dark From 7c62ed6dac2c324097f18b9fd49efcd832be5b14 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Mon, 24 Jul 2017 14:46:32 -0700 Subject: [PATCH 1031/1049] made sendRequest depend on hasValidAccessToken being true --- domain-server/src/DomainGatekeeper.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/domain-server/src/DomainGatekeeper.cpp b/domain-server/src/DomainGatekeeper.cpp index 62f56184f4..6421a50fe3 100644 --- a/domain-server/src/DomainGatekeeper.cpp +++ b/domain-server/src/DomainGatekeeper.cpp @@ -927,9 +927,13 @@ void DomainGatekeeper::getDomainOwnerFriendsList() { callbackParams.errorCallbackMethod = "getDomainOwnerFriendsListErrorCallback"; const QString GET_FRIENDS_LIST_PATH = "api/v1/user/friends"; - DependencyManager::get()->sendRequest(GET_FRIENDS_LIST_PATH, AccountManagerAuth::Required, - QNetworkAccessManager::GetOperation, callbackParams, QByteArray(), - NULL, QVariantMap()); + if (DependencyManager::get()->hasValidAccessToken()) + { + DependencyManager::get()->sendRequest(GET_FRIENDS_LIST_PATH, AccountManagerAuth::Required, + QNetworkAccessManager::GetOperation, callbackParams, QByteArray(), + NULL, QVariantMap()); + } + } void DomainGatekeeper::getDomainOwnerFriendsListJSONCallback(QNetworkReply& requestReply) { From 884bdb3b7e776a21f2216ccd6e248c2e73a7b1b5 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Mon, 24 Jul 2017 14:57:22 -0700 Subject: [PATCH 1032/1049] Update DomainGatekeeper.cpp --- domain-server/src/DomainGatekeeper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/domain-server/src/DomainGatekeeper.cpp b/domain-server/src/DomainGatekeeper.cpp index 6421a50fe3..4c9f90b9ae 100644 --- a/domain-server/src/DomainGatekeeper.cpp +++ b/domain-server/src/DomainGatekeeper.cpp @@ -930,8 +930,8 @@ void DomainGatekeeper::getDomainOwnerFriendsList() { if (DependencyManager::get()->hasValidAccessToken()) { DependencyManager::get()->sendRequest(GET_FRIENDS_LIST_PATH, AccountManagerAuth::Required, - QNetworkAccessManager::GetOperation, callbackParams, QByteArray(), - NULL, QVariantMap()); + QNetworkAccessManager::GetOperation, callbackParams, QByteArray(), + NULL, QVariantMap()); } } From 84609f27e36e161d4fb36039823396ec659e5fdf Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Mon, 24 Jul 2017 23:53:03 +0100 Subject: [PATCH 1033/1049] Final Change - They're now Radio Boxes. --- interface/resources/qml/controls-uit/RadioButton.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/controls-uit/RadioButton.qml b/interface/resources/qml/controls-uit/RadioButton.qml index 76b7902435..3cc3db4e46 100644 --- a/interface/resources/qml/controls-uit/RadioButton.qml +++ b/interface/resources/qml/controls-uit/RadioButton.qml @@ -32,7 +32,7 @@ Original.RadioButton { id: box width: boxSize height: boxSize - radius: boxRadius + radius: 7 gradient: Gradient { GradientStop { position: 0.2 @@ -52,7 +52,7 @@ Original.RadioButton { id: check width: checkSize height: checkSize - radius: checkRadius + radius: 7 anchors.centerIn: parent color: hifi.colors.checkBoxChecked border.width: 1 From 5771ee27e1f510a563b4d25b39f8071d3e93d547 Mon Sep 17 00:00:00 2001 From: utkarshgautamnyu Date: Mon, 24 Jul 2017 17:33:01 -0700 Subject: [PATCH 1034/1049] Update DomainGatekeeper.cpp --- domain-server/src/DomainGatekeeper.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/domain-server/src/DomainGatekeeper.cpp b/domain-server/src/DomainGatekeeper.cpp index 4c9f90b9ae..da31fed387 100644 --- a/domain-server/src/DomainGatekeeper.cpp +++ b/domain-server/src/DomainGatekeeper.cpp @@ -927,8 +927,7 @@ void DomainGatekeeper::getDomainOwnerFriendsList() { callbackParams.errorCallbackMethod = "getDomainOwnerFriendsListErrorCallback"; const QString GET_FRIENDS_LIST_PATH = "api/v1/user/friends"; - if (DependencyManager::get()->hasValidAccessToken()) - { + if (DependencyManager::get()->hasValidAccessToken()) { DependencyManager::get()->sendRequest(GET_FRIENDS_LIST_PATH, AccountManagerAuth::Required, QNetworkAccessManager::GetOperation, callbackParams, QByteArray(), NULL, QVariantMap()); From 280a7a7e42e5dabf8c6b284bcce4595c660ccd5d Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Tue, 25 Jul 2017 01:48:55 +0100 Subject: [PATCH 1035/1049] Fixing Styling, added Preference to Tablet, Moved Location to Avatar Tuning --- interface/resources/qml/controls-uit/RadioButton.qml | 4 ++-- .../qml/dialogs/preferences/PrimaryHandPreference.qml | 1 - interface/src/ui/PreferencesDialog.cpp | 10 +++++----- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/interface/resources/qml/controls-uit/RadioButton.qml b/interface/resources/qml/controls-uit/RadioButton.qml index 3cc3db4e46..ab11ec68b1 100644 --- a/interface/resources/qml/controls-uit/RadioButton.qml +++ b/interface/resources/qml/controls-uit/RadioButton.qml @@ -54,9 +54,9 @@ Original.RadioButton { height: checkSize radius: 7 anchors.centerIn: parent - color: hifi.colors.checkBoxChecked + color: "#00B4EF" border.width: 1 - border.color: hifi.colors.checkBoxCheckedBorder + border.color: "#36CDFF" visible: checked && !pressed || !checked && pressed } } diff --git a/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml index 07b9c958dd..cfc2e94ed9 100644 --- a/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml +++ b/interface/resources/qml/dialogs/preferences/PrimaryHandPreference.qml @@ -28,7 +28,6 @@ Preference { } function save() { - // Box1 = True, Box2 = False (Right Hand for Default) if (box1.checked && !box2.checked) { preference.value = "left"; } diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index fd0847c945..bf99daab67 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -67,11 +67,6 @@ void setupPreferences() { auto setter = [=](bool value) { myAvatar->setClearOverlayWhenMoving(value); }; preferences->addPreference(new CheckPreference(AVATAR_BASICS, "Clear overlays when moving", getter, setter)); } - { - auto getter = [=]()->QString { return myAvatar->getDominantHand(); }; - auto setter = [=](const QString& value) { myAvatar->setDominantHand(value); }; - preferences->addPreference(new PrimaryHandPreference(AVATAR_BASICS, "Dominant Hand", getter, setter)); - } // UI static const QString UI_CATEGORY { "UI" }; @@ -186,6 +181,11 @@ void setupPreferences() { preference->setStep(1); preferences->addPreference(preference); } + { + auto getter = [=]()->QString { return myAvatar->getDominantHand(); }; + auto setter = [=](const QString& value) { myAvatar->setDominantHand(value); }; + preferences->addPreference(new PrimaryHandPreference(AVATAR_TUNING, "Dominant Hand", getter, setter)); + } { auto getter = [=]()->float { return myAvatar->getUniformScale(); }; auto setter = [=](float value) { myAvatar->setTargetScale(value); }; From e900dae70879852c2db0bf9133b8e1fd52d52ede Mon Sep 17 00:00:00 2001 From: Mike Moody Date: Mon, 24 Jul 2017 18:34:58 -0700 Subject: [PATCH 1036/1049] Created script for spherical gravity. --- unpublishedScripts/gravity.js | 55 +++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 unpublishedScripts/gravity.js diff --git a/unpublishedScripts/gravity.js b/unpublishedScripts/gravity.js new file mode 100644 index 0000000000..f468bfc717 --- /dev/null +++ b/unpublishedScripts/gravity.js @@ -0,0 +1,55 @@ +// +// gravity.js +// scripts/system/ +// +// Created by Alan-Michael Moody on 7/24/17 +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +(function () { + + var _entityID; + + this.preload = function (entityID) { + _entityID = entityID; + }; + + function update(deltatime) { + var planet = Entities.getEntityProperties(_entityID); + var direction = Vec3.normalize(Vec3.subtract(MyAvatar.position, planet.position)); + var localUp = Quat.getUp(MyAvatar.orientation); + + MyAvatar.orientation = Quat.multiply(Quat.rotationBetween(localUp, direction), MyAvatar.orientation); + } + + function init() { + Script.update.connect(update); + } + + function clean() { + Script.update.disconnect(update); + MyAvatar.orientation = Quat.fromVec3Degrees({ + x: 0, + y: 0, + z: 0 + }); + } + + var _switch = true; + + this.clickDownOnEntity = function(uuid, mouseEvent) { + + if (_switch) { + init(); + } else { + clean(); + } + _switch = !_switch; + }; + + Script.scriptEnding.connect(clean); + +}); \ No newline at end of file From 62efb32671652a9f6629c2fda1f80d396f8dc2c2 Mon Sep 17 00:00:00 2001 From: Mike Moody Date: Mon, 24 Jul 2017 18:39:09 -0700 Subject: [PATCH 1037/1049] Created script for spherical gravity. --- unpublishedScripts/gravity.js | 1 - 1 file changed, 1 deletion(-) diff --git a/unpublishedScripts/gravity.js b/unpublishedScripts/gravity.js index f468bfc717..a7ad5c889b 100644 --- a/unpublishedScripts/gravity.js +++ b/unpublishedScripts/gravity.js @@ -1,6 +1,5 @@ // // gravity.js -// scripts/system/ // // Created by Alan-Michael Moody on 7/24/17 // Copyright 2016 High Fidelity, Inc. From 1bf2855e9b5a4960333e5c777816a0dfadc8bd58 Mon Sep 17 00:00:00 2001 From: Mike Moody Date: Mon, 24 Jul 2017 18:47:24 -0700 Subject: [PATCH 1038/1049] Created script for spherical gravity. --- unpublishedScripts/gravity.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unpublishedScripts/gravity.js b/unpublishedScripts/gravity.js index a7ad5c889b..ea7ec83d67 100644 --- a/unpublishedScripts/gravity.js +++ b/unpublishedScripts/gravity.js @@ -2,7 +2,7 @@ // gravity.js // // Created by Alan-Michael Moody on 7/24/17 -// Copyright 2016 High Fidelity, Inc. +// Copyright 2017 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html From c4d909927a249824ecf73af4061bf36e9474bd2d Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 24 Jul 2017 19:23:39 -0700 Subject: [PATCH 1039/1049] make atp-client work again --- tools/atp-client/src/ATPClientApp.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/atp-client/src/ATPClientApp.cpp b/tools/atp-client/src/ATPClientApp.cpp index 3e2f8ca71d..7d091aec74 100644 --- a/tools/atp-client/src/ATPClientApp.cpp +++ b/tools/atp-client/src/ATPClientApp.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include "ATPClientApp.h" @@ -137,6 +138,7 @@ ATPClientApp::ATPClientApp(int argc, char* argv[]) : Setting::init(); DependencyManager::registerInheritance(); + DependencyManager::set(); DependencyManager::set([&]{ return QString(HIGH_FIDELITY_ATP_CLIENT_USER_AGENT); }); DependencyManager::set(); DependencyManager::set(NodeType::Agent, _listenPort); From a3f4aeb1826e2249a2f9e1332f0e108bcaf2d730 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Mon, 24 Jul 2017 19:41:30 -0700 Subject: [PATCH 1040/1049] code review --- libraries/fbx/src/OBJReader.cpp | 4 ++-- libraries/render-utils/src/Model.cpp | 2 +- libraries/render-utils/src/Model.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/fbx/src/OBJReader.cpp b/libraries/fbx/src/OBJReader.cpp index 5ec6a9023d..3099782588 100644 --- a/libraries/fbx/src/OBJReader.cpp +++ b/libraries/fbx/src/OBJReader.cpp @@ -130,7 +130,6 @@ bool OBJTokenizer::getVertex(glm::vec3& vertex, glm::vec3& vertexColor) { auto y = getFloat(); // And order of arguments is different on Windows/Linux. auto z = getFloat(); vertex = glm::vec3(x, y, z); - vertexColor = glm::vec3(1.0f); // default, in case there is not color information auto r = 1.0f, g = 1.0f, b = 1.0f; bool hasVertexColor = false; @@ -415,7 +414,8 @@ bool OBJReader::parseOBJGroup(OBJTokenizer& tokenizer, const QVariantHash& mappi #endif } } else if (token == "v") { - glm::vec3 vertex, vertexColor; + glm::vec3 vertex; + glm::vec3 vertexColor { glm::vec3(1.0f) }; bool hasVertexColor = tokenizer.getVertex(vertex, vertexColor); vertices.append(vertex); diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 095712f351..42bb91ce94 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -463,7 +463,7 @@ bool Model::convexHullContains(glm::vec3 point) { return false; } -MeshProxyList Model::getMeshes() { +MeshProxyList Model::getMeshes() const { MeshProxyList result; const Geometry::Pointer& renderGeometry = getGeometry(); const Geometry::GeometryMeshes& meshes = renderGeometry->getMeshes(); diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index da8677aeed..497346c138 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -257,7 +257,7 @@ public: int getResourceDownloadAttempts() { return _renderWatcher.getResourceDownloadAttempts(); } int getResourceDownloadAttemptsRemaining() { return _renderWatcher.getResourceDownloadAttemptsRemaining(); } - Q_INVOKABLE MeshProxyList getMeshes(); + Q_INVOKABLE MeshProxyList getMeshes() const; public slots: void loadURLFinished(bool success); From 2f857a6d1a8b58332eabc4e4329e30753abd17a3 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Tue, 25 Jul 2017 06:05:06 +0100 Subject: [PATCH 1041/1049] Forgot a file --- .../resources/qml/controls/RadioButton.qml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 interface/resources/qml/controls/RadioButton.qml diff --git a/interface/resources/qml/controls/RadioButton.qml b/interface/resources/qml/controls/RadioButton.qml new file mode 100644 index 0000000000..6bd9c860d2 --- /dev/null +++ b/interface/resources/qml/controls/RadioButton.qml @@ -0,0 +1,17 @@ +import QtQuick.Controls 1.3 as Original +import QtQuick.Controls.Styles 1.3 +import "../styles" +import "." +Original.RadioButton { + text: "Radio Button" + style: RadioButtonStyle { + indicator: FontAwesome { + text: control.checked ? "\uf046" : "\uf096" + } + label: Text { + text: control.text + renderType: Text.QtRendering + } + } + +} From dc53017dd4fb68dc63fe7b6c4854057facd63cb6 Mon Sep 17 00:00:00 2001 From: Mike Moody Date: Mon, 24 Jul 2017 23:17:13 -0700 Subject: [PATCH 1042/1049] Created script to let Snails eat brussel sprouts. --- .../DomainContent/Cupcake/eatable.js | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 unpublishedScripts/DomainContent/Cupcake/eatable.js diff --git a/unpublishedScripts/DomainContent/Cupcake/eatable.js b/unpublishedScripts/DomainContent/Cupcake/eatable.js new file mode 100644 index 0000000000..8b261b7ea2 --- /dev/null +++ b/unpublishedScripts/DomainContent/Cupcake/eatable.js @@ -0,0 +1,36 @@ +// +// eatable.js +// +// Created by Alan-Michael Moody on 7/24/2017 +// Copyright 2017 High Fidelity, Inc. +// +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +(function () { + var NOMNOM_SOUND = SoundCache.getSound('http://hifi-content.s3.amazonaws.com/DomainContent/production/audio/vegcrunch.wav'); + + var _entityID; + + this.preload = function (entityID) { + _entityID = entityID; + }; + + this.collisionWithEntity = function(entityUuid, collisionEntityID, collisionInfo) { + var entity = Entities.getEntityProperties(collisionEntityID, ['userData', 'name']); + var isClone = (entity.name.substring(1).split('-')[0] === 'clone'); + var isEatable = (JSON.parse(entity.userData).eatable); + + if (isEatable && isClone) { + Audio.playSound(NOMNOM_SOUND, { + position: Entities.getEntityProperties(_entityID, ['position']).position, + volume: 0.2, + localOnly: false + }); + + Entities.deleteEntity(collisionEntityID); + } + }; +}); \ No newline at end of file From 34594b914da0a3679878c47fc885769b910edeef Mon Sep 17 00:00:00 2001 From: Mike Moody Date: Mon, 24 Jul 2017 23:55:44 -0700 Subject: [PATCH 1043/1049] Added and removed different normalizations. --- unpublishedScripts/gravity.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/unpublishedScripts/gravity.js b/unpublishedScripts/gravity.js index ea7ec83d67..0ef7b0caa9 100644 --- a/unpublishedScripts/gravity.js +++ b/unpublishedScripts/gravity.js @@ -18,10 +18,12 @@ function update(deltatime) { var planet = Entities.getEntityProperties(_entityID); - var direction = Vec3.normalize(Vec3.subtract(MyAvatar.position, planet.position)); + + //normalization happens in rotationBetween. + var direction = Vec3.subtract(MyAvatar.position, planet.position); var localUp = Quat.getUp(MyAvatar.orientation); - MyAvatar.orientation = Quat.multiply(Quat.rotationBetween(localUp, direction), MyAvatar.orientation); + MyAvatar.orientation = Quat.normalize(Quat.multiply(Quat.rotationBetween(localUp, direction), MyAvatar.orientation)); } function init() { From f9204a7034d06a25391a74caf79cfb4ab272ab62 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Tue, 25 Jul 2017 09:03:47 +0100 Subject: [PATCH 1044/1049] Now it should appear.. --- .../qml/hifi/tablet/tabletWindows/preferences/Section.qml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml index af1fbd0070..8cf254809d 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml @@ -82,6 +82,7 @@ Preference { property var buttonBuilder: Component { ButtonPreference { } } property var comboBoxBuilder: Component { ComboBoxPreference { } } property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } } + property var primaryHandBuilder: Component { PrimaryHandPreference { } } property var preferences: [] property int checkBoxCount: 0 @@ -144,10 +145,16 @@ Preference { //to be not overlapped when drop down is active zpos = root.z + 1000 - itemNum break; + case Preference.SpinnerSlider: checkBoxCount = 0; builder = spinnerSliderBuilder; break; + + case Preference.PrimaryHand: + checkBoxCount++; + builder = primaryHandBuilder; + break; }; if (builder) { From 6817cf9db4572fb22dc79efd2a267826ee118d97 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 25 Jul 2017 10:59:03 -0700 Subject: [PATCH 1045/1049] Fix entity properties sometimes being resent When writing entity properties to a packet, we start off with a list of requested properties (`requestedProperties`) and keep track of which properties didn't fit (`propertiesDidntFit`) the packet, which is intialized to requestedProperties. As we pack the properties, we remove them from propertiesDidntFit if they didn't need to be written or were able to be packed. At the end we store propertiesDidntFit, and use it in the future as our requestedProperties when we try to pack more data into a packet. The bug: because of the order in which propertiesDidntFit is initialized, it ended up always being the list of all properties for that entity. This typically wasn't an issue because we usually go through and try to append all of the properties, and if we don't need to append them (because they aren't in requestedProperties) we remove them from our propertiesDidntFit list. When we don't have enough remaining space in the current packet for even the entity header, which is fairly small, we don't bother trying to append any of the properties. When this happens, propertiesDidntFit contains the full list of properties, which we save for the next pass through the entity, and use as our requestedProperties, causing us to resend entity data again. In the worst case we never end up sending all of the entity's data. --- libraries/entities/src/EntityItem.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 5996327e87..378f344d26 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -182,7 +182,6 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet EntityPropertyFlags propertyFlags(PROP_LAST_ITEM); EntityPropertyFlags requestedProperties = getEntityProperties(params); - EntityPropertyFlags propertiesDidntFit = requestedProperties; // If we are being called for a subsequent pass at appendEntityData() that failed to completely encode this item, // then our entityTreeElementExtraEncodeData should include data about which properties we need to append. @@ -190,6 +189,8 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet requestedProperties = entityTreeElementExtraEncodeData->entities.value(getEntityItemID()); } + EntityPropertyFlags propertiesDidntFit = requestedProperties; + LevelDetails entityLevel = packetData->startLevel(); quint64 lastEdited = getLastEdited(); From 2d0c5ff37a8624bc75f7b94a5409ff841c8b1df7 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 25 Jul 2017 11:41:34 -0700 Subject: [PATCH 1046/1049] remove preloading of allowed user keys since it happens on connect --- domain-server/src/DomainGatekeeper.cpp | 15 ++------------- domain-server/src/DomainGatekeeper.h | 2 -- domain-server/src/DomainServer.cpp | 4 +--- libraries/networking/src/NodeList.cpp | 2 +- 4 files changed, 4 insertions(+), 19 deletions(-) diff --git a/domain-server/src/DomainGatekeeper.cpp b/domain-server/src/DomainGatekeeper.cpp index da31fed387..957830bc7b 100644 --- a/domain-server/src/DomainGatekeeper.cpp +++ b/domain-server/src/DomainGatekeeper.cpp @@ -604,19 +604,6 @@ bool DomainGatekeeper::isWithinMaxCapacity() { return true; } - -void DomainGatekeeper::preloadAllowedUserPublicKeys() { - QStringList allowedUsers = _server->_settingsManager.getAllNames(); - - if (allowedUsers.size() > 0) { - // in the future we may need to limit how many requests here - for now assume that lists of allowed users are not - // going to create > 100 requests - foreach(const QString& username, allowedUsers) { - requestUserPublicKey(username); - } - } -} - void DomainGatekeeper::requestUserPublicKey(const QString& username) { // don't request public keys for the standard psuedo-account-names if (NodePermissions::standardNames.contains(username, Qt::CaseInsensitive)) { @@ -667,6 +654,8 @@ void DomainGatekeeper::publicKeyJSONCallback(QNetworkReply& requestReply) { const QString JSON_DATA_KEY = "data"; const QString JSON_PUBLIC_KEY_KEY = "public_key"; + qDebug() << "Extracted public key for" << username.toLower(); + _userPublicKeys[username.toLower()] = QByteArray::fromBase64(jsonObject[JSON_DATA_KEY].toObject()[JSON_PUBLIC_KEY_KEY].toString().toUtf8()); } diff --git a/domain-server/src/DomainGatekeeper.h b/domain-server/src/DomainGatekeeper.h index 163f255411..03a6292c55 100644 --- a/domain-server/src/DomainGatekeeper.h +++ b/domain-server/src/DomainGatekeeper.h @@ -39,8 +39,6 @@ public: const QUuid& walletUUID, const QString& nodeVersion); QUuid assignmentUUIDForPendingAssignment(const QUuid& tempUUID); - void preloadAllowedUserPublicKeys(); - void removeICEPeer(const QUuid& peerUUID) { _icePeers.remove(peerUUID); } static void sendProtocolMismatchConnectionDenial(const HifiSockAddr& senderSockAddr); diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index c5171620de..163bd48f1b 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -160,9 +160,7 @@ DomainServer::DomainServer(int argc, char* argv[]) : getTemporaryName(); } - _gatekeeper.preloadAllowedUserPublicKeys(); // so they can connect on first request - - //send signal to DomainMetadata when descriptors changed + // send signal to DomainMetadata when descriptors changed _metadata = new DomainMetadata(this); connect(&_settingsManager, &DomainServerSettingsManager::settingsUpdated, _metadata, &DomainMetadata::descriptorsChanged); diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 75c97cc205..48e5c8a62c 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -327,7 +327,7 @@ void NodeList::sendDomainServerCheckIn() { << "but no keypair is present. Waiting for keypair generation to complete."; accountManager->generateNewUserKeypair(); - // don't send the check in packet - wait for the keypair first + // don't send the check in packet - wait for the new public key to be available to the domain-server first return; } From b1aa6e19625f6e17c0f2c28cca494832cef2d96e Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 25 Jul 2017 13:42:29 -0700 Subject: [PATCH 1047/1049] Move hosting for quazip back to hifi S3 --- cmake/externals/quazip/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/externals/quazip/CMakeLists.txt b/cmake/externals/quazip/CMakeLists.txt index d44c9ffde3..01650a432d 100644 --- a/cmake/externals/quazip/CMakeLists.txt +++ b/cmake/externals/quazip/CMakeLists.txt @@ -21,7 +21,7 @@ endif () ExternalProject_Add( ${EXTERNAL_NAME} - URL https://s3.amazonaws.com/Oculus/quazip-0.7.3.zip + URL https://hifi-public.s3.amazonaws.com/dependencies/quazip-0.7.3.zip URL_MD5 ed03754d39b9da1775771819b8001d45 BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build CMAKE_ARGS ${QUAZIP_CMAKE_ARGS} From e9845784d5a5a6012b1b10c8729f5e5e6798ae94 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 25 Jul 2017 13:43:30 -0700 Subject: [PATCH 1048/1049] don't return error decrypting for optimistic public keys --- domain-server/src/DomainGatekeeper.cpp | 34 +++++++++++++++++--------- domain-server/src/DomainGatekeeper.h | 15 +++++++++--- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/domain-server/src/DomainGatekeeper.cpp b/domain-server/src/DomainGatekeeper.cpp index 957830bc7b..fc595be67e 100644 --- a/domain-server/src/DomainGatekeeper.cpp +++ b/domain-server/src/DomainGatekeeper.cpp @@ -385,7 +385,7 @@ SharedNodePointer DomainGatekeeper::processAgentConnectRequest(const NodeConnect // user is attempting to prove their identity to us, but we don't have enough information sendConnectionTokenPacket(username, nodeConnection.senderSockAddr); // ask for their public key right now to make sure we have it - requestUserPublicKey(username); + requestUserPublicKey(username, true); getGroupMemberships(username); // optimistically get started on group memberships #ifdef WANT_DEBUG qDebug() << "stalling login because we have no username-signature:" << username; @@ -521,7 +521,10 @@ bool DomainGatekeeper::verifyUserSignature(const QString& username, const HifiSockAddr& senderSockAddr) { // it's possible this user can be allowed to connect, but we need to check their username signature auto lowerUsername = username.toLower(); - QByteArray publicKeyArray = _userPublicKeys.value(lowerUsername); + KeyFlagPair publicKeyPair = _userPublicKeys.value(lowerUsername); + + QByteArray publicKeyArray = publicKeyPair.first; + bool isOptimisticKey = publicKeyPair.second; const QUuid& connectionToken = _connectionTokenHash.value(lowerUsername); @@ -555,10 +558,16 @@ bool DomainGatekeeper::verifyUserSignature(const QString& username, return true; } else { - if (!senderSockAddr.isNull()) { - qDebug() << "Error decrypting username signature for " << username << "- denying connection."; + // we only send back a LoginError if this wasn't an "optimistic" key + // (a key that we hoped would work but is probably stale) + + if (!senderSockAddr.isNull() && !isOptimisticKey) { + qDebug() << "Error decrypting username signature for" << username << "- denying connection."; sendConnectionDeniedPacket("Error decrypting username signature.", senderSockAddr, DomainHandler::ConnectionRefusedReason::LoginError); + } else if (!senderSockAddr.isNull()) { + qDebug() << "Error decrypting username signature for" << username << "with optimisitic key -" + << "re-requesting public key and delaying connection"; } // free up the public key, we don't need it anymore @@ -604,7 +613,7 @@ bool DomainGatekeeper::isWithinMaxCapacity() { return true; } -void DomainGatekeeper::requestUserPublicKey(const QString& username) { +void DomainGatekeeper::requestUserPublicKey(const QString& username, bool isOptimistic) { // don't request public keys for the standard psuedo-account-names if (NodePermissions::standardNames.contains(username, Qt::CaseInsensitive)) { return; @@ -615,7 +624,7 @@ void DomainGatekeeper::requestUserPublicKey(const QString& username) { // public-key request for this username is already flight, not rerequesting return; } - _inFlightPublicKeyRequests += lowerUsername; + _inFlightPublicKeyRequests.insert(lowerUsername, isOptimistic); // even if we have a public key for them right now, request a new one in case it has just changed JSONCallbackParameters callbackParams; @@ -627,7 +636,7 @@ void DomainGatekeeper::requestUserPublicKey(const QString& username) { const QString USER_PUBLIC_KEY_PATH = "api/v1/users/%1/public_key"; - qDebug() << "Requesting public key for user" << username; + qDebug().nospace() << "Requesting " << (isOptimistic ? "optimistic " : " ") << "public key for user " << username; DependencyManager::get()->sendRequest(USER_PUBLIC_KEY_PATH.arg(username), AccountManagerAuth::None, @@ -649,18 +658,21 @@ void DomainGatekeeper::publicKeyJSONCallback(QNetworkReply& requestReply) { QJsonObject jsonObject = QJsonDocument::fromJson(requestReply.readAll()).object(); QString username = extractUsernameFromPublicKeyRequest(requestReply); + bool isOptimisticKey = _inFlightPublicKeyRequests.take(username); + if (jsonObject["status"].toString() == "success" && !username.isEmpty()) { // pull the public key as a QByteArray from this response const QString JSON_DATA_KEY = "data"; const QString JSON_PUBLIC_KEY_KEY = "public_key"; - qDebug() << "Extracted public key for" << username.toLower(); + qDebug().nospace() << "Extracted " << (isOptimisticKey ? "optimistic " : " ") << "public key for " << username.toLower(); _userPublicKeys[username.toLower()] = - QByteArray::fromBase64(jsonObject[JSON_DATA_KEY].toObject()[JSON_PUBLIC_KEY_KEY].toString().toUtf8()); + { + QByteArray::fromBase64(jsonObject[JSON_DATA_KEY].toObject()[JSON_PUBLIC_KEY_KEY].toString().toUtf8()), + isOptimisticKey + }; } - - _inFlightPublicKeyRequests.remove(username); } void DomainGatekeeper::publicKeyJSONErrorCallback(QNetworkReply& requestReply) { diff --git a/domain-server/src/DomainGatekeeper.h b/domain-server/src/DomainGatekeeper.h index 03a6292c55..36df77815a 100644 --- a/domain-server/src/DomainGatekeeper.h +++ b/domain-server/src/DomainGatekeeper.h @@ -91,7 +91,7 @@ private: void pingPunchForConnectingPeer(const SharedNetworkPeer& peer); - void requestUserPublicKey(const QString& username); + void requestUserPublicKey(const QString& username, bool isOptimistic = false); DomainServer* _server; @@ -100,8 +100,17 @@ private: QHash _icePeers; QHash _connectionTokenHash; - QHash _userPublicKeys; - QSet _inFlightPublicKeyRequests; // keep track of which we've already asked for + + // the word "optimistic" below is used for keys that we request during user connection before the user has + // had a change to upload a new public key + + // we don't send back user signature decryption errors for those keys so that there isn't a thrasing of key re-generation + // and connection refusal + + using KeyFlagPair = QPair; + + QHash _userPublicKeys; // keep track of keys and flag them as optimistic or not + QHash _inFlightPublicKeyRequests; // keep track of keys we've asked for (and if it was optimistic) QSet _domainOwnerFriends; // keep track of friends of the domain owner QSet _inFlightGroupMembershipsRequests; // keep track of which we've already asked for From dd3755596c48cf66b6f6ea5b80537959c0d56fac Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 25 Jul 2017 15:43:34 -0700 Subject: [PATCH 1049/1049] fix typo in comment in DomainGatekeeper header --- domain-server/src/DomainGatekeeper.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domain-server/src/DomainGatekeeper.h b/domain-server/src/DomainGatekeeper.h index 36df77815a..09db075e07 100644 --- a/domain-server/src/DomainGatekeeper.h +++ b/domain-server/src/DomainGatekeeper.h @@ -102,7 +102,7 @@ private: QHash _connectionTokenHash; // the word "optimistic" below is used for keys that we request during user connection before the user has - // had a change to upload a new public key + // had a chance to upload a new public key // we don't send back user signature decryption errors for those keys so that there isn't a thrasing of key re-generation // and connection refusal

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 ?$Pw0byYi#yABn%7_Lx3YD< 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�G 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

W$dP8p6(@<9 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