From 104b117154022da6ec8e54bea04ff76e5692f93a Mon Sep 17 00:00:00 2001
From: Aura Linden <aura@lindenlab.com>
Date: Thu, 31 Mar 2016 15:26:53 -0700
Subject: Faster to copy changes than merge branches.

---
 indra/newview/llinventorymodel.cpp    | 153 -----------------
 indra/newview/llinventorymodel.h      |   2 -
 indra/newview/llinventoryobserver.cpp |  30 +---
 indra/newview/lltooldraganddrop.cpp   |  60 -------
 indra/newview/llviewerinventory.cpp   | 314 ++++++----------------------------
 indra/newview/llviewerinventory.h     |   6 +-
 6 files changed, 64 insertions(+), 501 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index bdbe253723..ea57067f93 100755
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -2693,24 +2693,13 @@ void LLInventoryModel::registerCallbacks(LLMessageSystem* msg)
 	msg->setHandlerFuncFast(_PREHASH_RemoveInventoryObjects,
 							processRemoveInventoryObjects,
 							NULL);	
-	//msg->setHandlerFuncFast(_PREHASH_ExchangeCallingCard,
-	//						processExchangeCallingcard,
-	//						NULL);
-	//msg->setHandlerFuncFast(_PREHASH_AddCallingCard,
-	//					processAddCallingcard,
-	//					NULL);
-	//msg->setHandlerFuncFast(_PREHASH_DeclineCallingCard,
-	//					processDeclineCallingcard,
-	//					NULL);
 	msg->setHandlerFuncFast(_PREHASH_SaveAssetIntoInventory,
 						processSaveAssetIntoInventory,
 						NULL);
 	msg->setHandlerFuncFast(_PREHASH_BulkUpdateInventory,
 							processBulkUpdateInventory,
 							NULL);
-	msg->setHandlerFunc("InventoryDescendents", processInventoryDescendents);
 	msg->setHandlerFunc("MoveInventoryItem", processMoveInventoryItem);
-	msg->setHandlerFunc("FetchInventoryReply", processFetchInventoryReply);
 }
 
 
@@ -2730,14 +2719,6 @@ void LLInventoryModel::processUpdateCreateInventoryItem(LLMessageSystem* msg, vo
 
 }
 
-// static
-void LLInventoryModel::processFetchInventoryReply(LLMessageSystem* msg, void**)
-{
-	// no accounting
-	gInventory.messageUpdateCore(msg, false);
-}
-
-
 bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account, U32 mask)
 {
 	//make sure our added inventory observer is active
@@ -3180,85 +3161,6 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
 		InventoryCallbackInfo cbinfo = (*inv_it);
 		gInventoryCallbacks.fire(cbinfo.mCallback, cbinfo.mInvID);
 	}
-
-	//gInventory.validate();
-
-	// Don't show the inventory.  We used to call showAgentInventory here.
-	//LLFloaterInventory* view = LLFloaterInventory::getActiveInventory();
-	//if(view)
-	//{
-	//	const BOOL take_keyboard_focus = FALSE;
-	//	view->setSelection(category.getUUID(), take_keyboard_focus );
-	//	LLView* focus_view = gFocusMgr.getKeyboardFocus();
-	//	LLFocusMgr::FocusLostCallback callback = gFocusMgr.getFocusCallback();
-	//	// HACK to open inventory offers that are accepted.  This information
-	//	// really needs to flow through the instant messages and inventory
-	//	// transfer/update messages.
-	//	if (LLFloaterInventory::sOpenNextNewItem)
-	//	{
-	//		view->openSelected();
-	//		LLFloaterInventory::sOpenNextNewItem = FALSE;
-	//	}
-	//
-	//	// restore keyboard focus
-	//	gFocusMgr.setKeyboardFocus(focus_view);
-	//}
-}
-
-// static
-void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**)
-{
-	LLUUID agent_id;
-	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-	if(agent_id != gAgent.getID())
-	{
-		LL_WARNS() << "Got a UpdateInventoryItem for the wrong agent." << LL_ENDL;
-		return;
-	}
-	LLUUID parent_id;
-	msg->getUUID("AgentData", "FolderID", parent_id);
-	LLUUID owner_id;
-	msg->getUUID("AgentData", "OwnerID", owner_id);
-	S32 version;
-	msg->getS32("AgentData", "Version", version);
-	S32 descendents;
-	msg->getS32("AgentData", "Descendents", descendents);
-
-	S32 i;
-	S32 count = msg->getNumberOfBlocksFast(_PREHASH_FolderData);
-	LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id);
-	for(i = 0; i < count; ++i)
-	{
-		tcategory->unpackMessage(msg, _PREHASH_FolderData, i);
-		gInventory.updateCategory(tcategory);
-	}
-
-	count = msg->getNumberOfBlocksFast(_PREHASH_ItemData);
-	LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
-	for(i = 0; i < count; ++i)
-	{
-		titem->unpackMessage(msg, _PREHASH_ItemData, i);
-		// If the item has already been added (e.g. from link prefetch), then it doesn't need to be re-added.
-		if (gInventory.getItem(titem->getUUID()))
-		{
-			LL_DEBUGS("Inventory") << "Skipping prefetched item [ Name: " << titem->getName()
-								   << " | Type: " << titem->getActualType() << " | ItemUUID: " << titem->getUUID() << " ] " << LL_ENDL;
-			continue;
-		}
-		gInventory.updateItem(titem);
-	}
-
-	// set version and descendentcount according to message.
-	LLViewerInventoryCategory* cat = gInventory.getCategory(parent_id);
-	if(cat)
-	{
-		cat->setVersion(version);
-		cat->setDescendentCount(descendents);
-		// Get this UUID on the changed list so that whatever's listening for it
-		// will get triggered.
-		gInventory.addChangedMask(LLInventoryObserver::INTERNAL, cat->getUUID());
-	}
-	gInventory.notifyObservers();
 }
 
 // static
@@ -3527,30 +3429,6 @@ void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, c
 	}
 }
 
-//* @param[in] items vector of items in order to be saved.
-/*
-void LLInventoryModel::saveItemsOrder(const LLInventoryModel::item_array_t& items)
-{
-	int sortField = 0;
-
-	// current order is saved by setting incremental values (1, 2, 3, ...) for the sort field
-	for (item_array_t::const_iterator i = items.begin(); i != items.end(); ++i)
-	{
-		LLViewerInventoryItem* item = *i;
-
-		item->setSortField(++sortField);
-		item->setComplete(TRUE);
-		item->updateServer(FALSE);
-
-		updateItem(item);
-
-		// Tell the parent folder to refresh its sort order.
-		addChangedMask(LLInventoryObserver::SORT, item->getParentUUID());
-	}
-
-	notifyObservers();
-}
-*/
 // See also LLInventorySort where landmarks in the Favorites folder are sorted.
 class LLViewerInventoryItemSort
 {
@@ -3561,37 +3439,6 @@ public:
 	}
 };
 
-/**
- * Sorts passed items by LLViewerInventoryItem sort field.
- *
- * @param[in, out] items - array of items, not sorted.
- */
-//static void rearrange_item_order_by_sort_field(LLInventoryModel::item_array_t& items)
-//{
-//	static LLViewerInventoryItemSort sort_functor;
-//	std::sort(items.begin(), items.end(), sort_functor);
-//}
-
-// * @param source_item_id - LLUUID of the source item to be moved into new position
-// * @param target_item_id - LLUUID of the target item before which source item should be placed.
-/*
-void LLInventoryModel::rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id)
-{
-	LLInventoryModel::cat_array_t cats;
-	LLInventoryModel::item_array_t items;
-	LLIsType is_type(LLAssetType::AT_LANDMARK);
-	LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
-	gInventory.collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type);
-
-	// ensure items are sorted properly before changing order. EXT-3498
-	rearrange_item_order_by_sort_field(items);
-
-	// update order
-	updateItemsOrder(items, source_item_id, target_item_id);
-
-	saveItemsOrder(items);
-}
-*/
 //----------------------------------------------------------------------------
 
 // *NOTE: DEBUG functionality
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index e1e6db19eb..bfa56bcec0 100755
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -623,9 +623,7 @@ public:
 	static void processRemoveInventoryObjects(LLMessageSystem* msg, void**);
 	static void processSaveAssetIntoInventory(LLMessageSystem* msg, void**);
 	static void processBulkUpdateInventory(LLMessageSystem* msg, void**);
-	static void processInventoryDescendents(LLMessageSystem* msg, void**);
 	static void processMoveInventoryItem(LLMessageSystem* msg, void**);
-	static void processFetchInventoryReply(LLMessageSystem* msg, void**);
 protected:
 	bool messageUpdateCore(LLMessageSystem* msg, bool do_accounting, U32 mask = 0x0);
 
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 6c81378622..776bb1c601 100755
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -241,33 +241,11 @@ void fetch_items_from_llsd(const LLSD& items_llsd)
 			gInventory.requestPost(true, url, body[i], handler, (i ? "Library Item" : "Inventory Item"));
 			continue;
 		}
+        else
+        {
+            LL_WARNS("INVENTORY") << "Failed to get capability." << LL_ENDL;
+        }
 
-		LLMessageSystem* msg = gMessageSystem;
-		BOOL start_new_message = TRUE;
-		for (S32 j=0; j<body[i]["items"].size(); j++)
-		{
-			LLSD item_entry = body[i]["items"][j];
-			if (start_new_message)
-			{
-				start_new_message = FALSE;
-				msg->newMessageFast(_PREHASH_FetchInventory);
-				msg->nextBlockFast(_PREHASH_AgentData);
-				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-			}
-			msg->nextBlockFast(_PREHASH_InventoryData);
-			msg->addUUIDFast(_PREHASH_OwnerID, item_entry["owner_id"].asUUID());
-			msg->addUUIDFast(_PREHASH_ItemID, item_entry["item_id"].asUUID());
-			if (msg->isSendFull(NULL))
-			{
-				start_new_message = TRUE;
-				gAgent.sendReliableMessage();
-			}
-		}
-		if (!start_new_message)
-		{
-			gAgent.sendReliableMessage();
-		}
 	}
 }
 
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 98586e3b3d..27c4c90857 100755
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -223,66 +223,6 @@ void LLCategoryDropObserver::done()
 	}
 	delete this;
 }
-/* Doesn't seem to be used anymore.
-class LLCategoryDropDescendentsObserver : public LLInventoryFetchDescendentsObserver
-{
-public:
-	LLCategoryDropDescendentsObserver(
-		const LLUUID& obj_id, LLToolDragAndDrop::ESource src) :
-		mObjectID(obj_id),
-		mSource(src)
-	{}
-	~LLCategoryDropDescendentsObserver() {}
-	virtual void done();
-
-protected:
-	LLUUID mObjectID;
-	LLToolDragAndDrop::ESource mSource;
-};
-
-void LLCategoryDropDescendentsObserver::done()
-{
-
-	gInventory.removeObserver(this);
-	uuid_vec_t::iterator it = mComplete.begin();
-	uuid_vec_t::iterator end = mComplete.end();
-	LLViewerInventoryCategory::cat_array_t cats;
-	LLViewerInventoryItem::item_array_t items;
-	for(; it != end; ++it)
-	{
-		gInventory.collectDescendents(
-			(*it),
-			cats,
-			items,
-			LLInventoryModel::EXCLUDE_TRASH);
-	}
-
-	S32 count = items.size();
-	if (count)
-	{
-		std::set<LLUUID> unique_ids;
-		for(S32 i = 0; i < count; ++i)
-		{
-			unique_ids.insert(items.get(i)->getUUID());
-		}
-		uuid_vec_t ids;
-		std::back_insert_iterator<uuid_vec_t> copier(ids);
-		std::copy(unique_ids.begin(), unique_ids.end(), copier);
-		LLCategoryDropObserver* dropper;
-		dropper = new LLCategoryDropObserver(ids, mObjectID, mSource);
-		dropper->startFetch();
-		if (dropper->isDone())
-		{
-			dropper->done();
-		}
-		else
-		{
-			gInventory.addObserver(dropper);
-		}
-	}
-	delete this;
-}
-*/
 
 S32 LLToolDragAndDrop::sOperationId = 0;
 
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 0ee873d7a1..10de787a3a 100755
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -384,16 +384,20 @@ void LLViewerInventoryItem::updateServer(BOOL is_new) const
 	LLInventoryModel::LLCategoryUpdate up(mParentUUID, is_new ? 1 : 0);
 	gInventory.accountForUpdate(up);
 
-	LLMessageSystem* msg = gMessageSystem;
-	msg->newMessageFast(_PREHASH_UpdateInventoryItem);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->addUUIDFast(_PREHASH_TransactionID, mTransactionID);
-	msg->nextBlockFast(_PREHASH_InventoryData);
-	msg->addU32Fast(_PREHASH_CallbackID, 0);
-	packMessage(msg);
-	gAgent.sendReliableMessage();
+    LLSD updates = asLLSD();
+    // Replace asset_id and/or shadow_id with transaction_id (hash_id)
+    if (updates.has("asset_id"))
+    {
+        updates.erase("asset_id");
+        updates["hash_id"] = getTransactionID();
+    }
+    if (updates.has("shadow_id"))
+    {
+        updates.erase("shadow_id");
+        updates["hash_id"] = getTransactionID();
+    }
+    AISAPI::completion_t cr = boost::bind(&doInventoryCb, NULL, _1);
+    AISAPI::UpdateItem(getUUID(), updates, cr);
 }
 
 void LLViewerInventoryItem::fetchFromServer(void) const
@@ -636,17 +640,9 @@ void LLViewerInventoryCategory::updateServer(BOOL is_new) const
 		return;
 	}
 
-	LLInventoryModel::LLCategoryUpdate up(mParentUUID, is_new ? 1 : 0);
-	gInventory.accountForUpdate(up);
-
-	LLMessageSystem* msg = gMessageSystem;
-	msg->newMessageFast(_PREHASH_UpdateInventoryFolder);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->nextBlockFast(_PREHASH_FolderData);
-	packMessage(msg);
-	gAgent.sendReliableMessage();
+    LLSD new_llsd = asLLSD();
+    AISAPI::completion_t cr = boost::bind(&doInventoryCb, NULL, _1);
+    AISAPI::UpdateCategory(getUUID(), new_llsd, cr);
 }
 
 S32 LLViewerInventoryCategory::getVersion() const
@@ -669,18 +665,6 @@ bool LLViewerInventoryCategory::fetch()
 		mDescendentsRequested.reset();
 		mDescendentsRequested.setTimerExpirySec(FETCH_TIMER_EXPIRY);
 
-		// bitfield
-		// 1 = by date
-		// 2 = folders by date
-		// Need to mask off anything but the first bit.
-		// This comes from LLInventoryFilter from llfolderview.h
-		U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER) & 0x1;
-
-		// *NOTE: For bug EXT-2879, originally commented out
-		// gAgent.getRegion()->getCapability in order to use the old
-		// message-based system.  This has been uncommented now that
-		// AIS folks are aware of the issue and have a fix in process.
-		// see ticket for details.
 
 		std::string url;
 		if (gAgent.getRegion())
@@ -695,24 +679,6 @@ bool LLViewerInventoryCategory::fetch()
 		{
 			LLInventoryModelBackgroundFetch::instance().start(mUUID, false);			
 		}
-		else
-		{	//Deprecated, but if we don't have a capability, use the old system.
-			LL_INFOS(LOG_INV) << "FetchInventoryDescendents2 capability not found.  Using deprecated UDP message." << LL_ENDL;
-			
-			LLMessageSystem* msg = gMessageSystem;
-			msg->newMessage("FetchInventoryDescendents");
-			msg->nextBlock("AgentData");
-			msg->addUUID("AgentID", gAgent.getID());
-			msg->addUUID("SessionID", gAgent.getSessionID());
-			msg->nextBlock("InventoryData");
-			msg->addUUID("FolderID", mUUID);
-			msg->addUUID("OwnerID", mOwnerID);
-
-			msg->addS32("SortOrder", sort_order);
-			msg->addBOOL("FetchFolders", FALSE);
-			msg->addBOOL("FetchItems", TRUE);
-			gAgent.sendReliableMessage();
-		}
 		return true;
 	}
 	return false;
@@ -905,17 +871,16 @@ void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type)
 	const LLUUID &parent_id = getParentUUID();
 	const std::string &name = getName();
 		
-	LLMessageSystem* msg = gMessageSystem;
-	msg->newMessageFast(_PREHASH_UpdateInventoryFolder);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	msg->nextBlockFast(_PREHASH_FolderData);
-	msg->addUUIDFast(_PREHASH_FolderID, folder_id);
-	msg->addUUIDFast(_PREHASH_ParentID, parent_id);
-	msg->addS8Fast(_PREHASH_Type, new_folder_type);
-	msg->addStringFast(_PREHASH_Name, name);
-	gAgent.sendReliableMessage();
+    LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(folder_id,
+                                                                                 parent_id,
+                                                                                 new_folder_type,
+                                                                                 name,
+                                                                                 gAgent.getID());
+        
+        
+    LLSD new_llsd = new_cat->asLLSD();
+    AISAPI::completion_t cr = boost::bind(&doInventoryCb, NULL, _1);
+    AISAPI::UpdateCategory(folder_id, new_llsd, cr);
 
 	setPreferredType(new_folder_type);
 	gInventory.addChangedMask(LLInventoryObserver::LABEL, folder_id);
@@ -1289,40 +1254,10 @@ void link_inventory_array(const LLUUID& category,
 						   << " UUID:" << category << " ] " << LL_ENDL;
 #endif
 	}
-
-    if (AISAPI::isAvailable())
-	{
-		LLSD new_inventory = LLSD::emptyMap();
-		new_inventory["links"] = links;
-        AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
-        AISAPI::CreateInventory(category, new_inventory, cr);
-	}
-    else
-	{
-		LLMessageSystem* msg = gMessageSystem;
-		for (LLSD::array_iterator iter = links.beginArray(); iter != links.endArray(); ++iter )
-		{
-			msg->newMessageFast(_PREHASH_LinkInventoryItem);
-			msg->nextBlock(_PREHASH_AgentData);
-			{
-				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-			}
-			msg->nextBlock(_PREHASH_InventoryBlock);
-			{
-				LLSD link = (*iter);
-				msg->addU32Fast(_PREHASH_CallbackID, gInventoryCallbacks.registerCB(cb));
-				msg->addUUIDFast(_PREHASH_FolderID, category);
-				msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null);
-				msg->addUUIDFast(_PREHASH_OldItemID, link["linked_id"].asUUID());
-				msg->addS8Fast(_PREHASH_Type, link["type"].asInteger());
-				msg->addS8Fast(_PREHASH_InvType, link["inv_type"].asInteger());
-				msg->addStringFast(_PREHASH_Name, link["name"].asString());
-				msg->addStringFast(_PREHASH_Description, link["desc"].asString());
-			}
-			gAgent.sendReliableMessage();
-		}
-	}
+    LLSD new_inventory = LLSD::emptyMap();
+    new_inventory["links"] = links;
+    AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+    AISAPI::CreateInventory(category, new_inventory, cr);
 }
 
 void move_inventory_item(
@@ -1354,49 +1289,21 @@ void update_inventory_item(
 	LLPointer<LLInventoryCallback> cb)
 {
 	const LLUUID& item_id = update_item->getUUID();
-    if (AISAPI::isAvailable())
-	{
-		LLSD updates = update_item->asLLSD();
-		// Replace asset_id and/or shadow_id with transaction_id (hash_id)
-		if (updates.has("asset_id"))
-		{
-			updates.erase("asset_id");
-			updates["hash_id"] = update_item->getTransactionID();
-		}
-		if (updates.has("shadow_id"))
-		{
-			updates.erase("shadow_id");
-			updates["hash_id"] = update_item->getTransactionID();
-		}
-        AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
-        AISAPI::UpdateItem(item_id, updates, cr);
-	}
-    else
-	{
-		LLPointer<LLViewerInventoryItem> obj = gInventory.getItem(item_id);
-		LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << (update_item ? update_item->getName() : "(NOT FOUND)") << LL_ENDL;
-		if(obj)
-		{
-			LLMessageSystem* msg = gMessageSystem;
-			msg->newMessageFast(_PREHASH_UpdateInventoryItem);
-			msg->nextBlockFast(_PREHASH_AgentData);
-			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-			msg->addUUIDFast(_PREHASH_TransactionID, update_item->getTransactionID());
-			msg->nextBlockFast(_PREHASH_InventoryData);
-			msg->addU32Fast(_PREHASH_CallbackID, 0);
-			update_item->packMessage(msg);
-			gAgent.sendReliableMessage();
-
-			LLInventoryModel::LLCategoryUpdate up(update_item->getParentUUID(), 0);
-			gInventory.accountForUpdate(up);
-			gInventory.updateItem(update_item);
-			if (cb)
-			{
-				cb->fire(item_id);
-			}
-		}
-	}
+  
+    LLSD updates = update_item->asLLSD();
+    // Replace asset_id and/or shadow_id with transaction_id (hash_id)
+    if (updates.has("asset_id"))
+    {
+        updates.erase("asset_id");
+        updates["hash_id"] = update_item->getTransactionID();
+    }
+    if (updates.has("shadow_id"))
+    {
+        updates.erase("shadow_id");
+        updates["hash_id"] = update_item->getTransactionID();
+    }
+    AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+    AISAPI::UpdateItem(item_id, updates, cr);
 }
 
 // Note this only supports updating an existing item. Goes through AISv3
@@ -1407,41 +1314,8 @@ void update_inventory_item(
 	const LLSD& updates,
 	LLPointer<LLInventoryCallback> cb)
 {
-    if (AISAPI::isAvailable())
-	{
-        AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
-        AISAPI::UpdateItem(item_id, updates, cr);
-	}
-    else
-	{
-		LLPointer<LLViewerInventoryItem> obj = gInventory.getItem(item_id);
-		LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << (obj ? obj->getName() : "(NOT FOUND)") << LL_ENDL;
-		if(obj)
-		{
-			LLPointer<LLViewerInventoryItem> new_item(new LLViewerInventoryItem);
-			new_item->copyViewerItem(obj);
-			new_item->fromLLSD(updates,false);
-
-			LLMessageSystem* msg = gMessageSystem;
-			msg->newMessageFast(_PREHASH_UpdateInventoryItem);
-			msg->nextBlockFast(_PREHASH_AgentData);
-			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-			msg->addUUIDFast(_PREHASH_TransactionID, new_item->getTransactionID());
-			msg->nextBlockFast(_PREHASH_InventoryData);
-			msg->addU32Fast(_PREHASH_CallbackID, 0);
-			new_item->packMessage(msg);
-			gAgent.sendReliableMessage();
-
-			LLInventoryModel::LLCategoryUpdate up(new_item->getParentUUID(), 0);
-			gInventory.accountForUpdate(up);
-			gInventory.updateItem(new_item);
-			if (cb)
-			{
-				cb->fire(item_id);
-			}
-		}
-	}
+    AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+    AISAPI::UpdateItem(item_id, updates, cr);
 }
 
 void update_inventory_category(
@@ -1461,32 +1335,9 @@ void update_inventory_category(
 
 		LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(obj);
 		new_cat->fromLLSD(updates);
-		// FIXME - restore this once the back-end work has been done.
-        if (AISAPI::isAvailable())
-		{
-			LLSD new_llsd = new_cat->asLLSD();
-            AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
-            AISAPI::UpdateCategory(cat_id, new_llsd, cr);
-		}
-		else // no cap
-		{
-			LLMessageSystem* msg = gMessageSystem;
-			msg->newMessageFast(_PREHASH_UpdateInventoryFolder);
-			msg->nextBlockFast(_PREHASH_AgentData);
-			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-			msg->nextBlockFast(_PREHASH_FolderData);
-			new_cat->packMessage(msg);
-			gAgent.sendReliableMessage();
-
-			LLInventoryModel::LLCategoryUpdate up(new_cat->getParentUUID(), 0);
-			gInventory.accountForUpdate(up);
-			gInventory.updateCategory(new_cat);
-			if (cb)
-			{
-				cb->fire(cat_id);
-			}
-		}
+        LLSD new_llsd = new_cat->asLLSD();
+        AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+        AISAPI::UpdateCategory(cat_id, new_llsd, cr);
 	}
 }
 
@@ -1604,41 +1455,8 @@ void remove_inventory_category(
 			LLNotificationsUtil::add("CannotRemoveProtectedCategories");
 			return;
 		}
-        if (AISAPI::isAvailable())
-		{
-            AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
-            AISAPI::RemoveCategory(cat_id, cr);
-		}
-		else // no cap
-		{
-			// RemoveInventoryFolder does not remove children, so must
-			// clear descendents first.
-			LLInventoryModel::EHasChildren children = gInventory.categoryHasChildren(cat_id);
-			if(children != LLInventoryModel::CHILDREN_NO)
-			{
-				LL_DEBUGS(LOG_INV) << "Will purge descendents first before deleting category " << cat_id << LL_ENDL;
-				LLPointer<LLInventoryCallback> wrap_cb = new LLRemoveCategoryOnDestroy(cat_id, cb); 
-				purge_descendents_of(cat_id, wrap_cb);
-				return;
-			}
-
-			LLMessageSystem* msg = gMessageSystem;
-			msg->newMessageFast(_PREHASH_RemoveInventoryFolder);
-			msg->nextBlockFast(_PREHASH_AgentData);
-			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-			msg->nextBlockFast(_PREHASH_FolderData);
-			msg->addUUIDFast(_PREHASH_FolderID, cat_id);
-			gAgent.sendReliableMessage();
-
-			// Update inventory and call callback immediately since
-			// message-based system has no callback mechanism (!)
-			gInventory.onObjectDeletedFromServer(cat_id);
-			if (cb)
-			{
-				cb->fire(cat_id);
-			}
-		}
+        AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+        AISAPI::RemoveCategory(cat_id, cr);
 	}
 	else
 	{
@@ -1857,29 +1675,11 @@ void slam_inventory_folder(const LLUUID& folder_id,
 						   const LLSD& contents,
 						   LLPointer<LLInventoryCallback> cb)
 {
-    if (AISAPI::isAvailable())
-	{
-		LL_DEBUGS(LOG_INV) << "using AISv3 to slam folder, id " << folder_id
-						   << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL;
+    LL_DEBUGS(LOG_INV) << "using AISv3 to slam folder, id " << folder_id
+                       << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL;
 
-        AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
-        AISAPI::SlamFolder(folder_id, contents, cr);
-	}
-	else // no cap
-	{
-		LL_DEBUGS(LOG_INV) << "using item-by-item calls to slam folder, id " << folder_id
-						   << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL;
-		for (LLSD::array_const_iterator it = contents.beginArray();
-			 it != contents.endArray();
-			 ++it)
-		{
-			const LLSD& item_contents = *it;
-			LLViewerInventoryItem *item = new LLViewerInventoryItem;
-			item->fromLLSD(item_contents);
-			link_inventory_object(folder_id, item, cb);
-		}
-		remove_folder_contents(folder_id,false,cb);
-	}
+    AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+    AISAPI::SlamFolder(folder_id, contents, cr);
 }
 
 void remove_folder_contents(const LLUUID& category, bool keep_outfit_links,
diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
index 4e91e4110a..9c2a640a1a 100755
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -387,9 +387,9 @@ void update_inventory_item(
 	LLPointer<LLInventoryCallback> cb);
 
 void update_inventory_category(
-	const LLUUID& cat_id,
-	const LLSD& updates,
-	LLPointer<LLInventoryCallback> cb);
+    const LLUUID& cat_id,
+    const LLSD& updates,
+    LLPointer<LLInventoryCallback> cb);
 
 void remove_inventory_items(
 	LLInventoryObject::object_list_t& items,
-- 
cgit v1.2.3


From 1337bff4acc8b53b29bcbe1203c620b9b0fb3b09 Mon Sep 17 00:00:00 2001
From: Aura Linden <aura@lindenlab.com>
Date: Thu, 31 Mar 2016 16:42:18 -0700
Subject: Needs prototype.

---
 indra/newview/llviewerinventory.h | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
index 9c2a640a1a..5194679a0c 100755
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -38,6 +38,7 @@ class LLInventoryPanel;
 class LLFolderView;
 class LLFolderBridge;
 class LLViewerInventoryCategory;
+class LLInventoryCallback;
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLViewerInventoryItem
-- 
cgit v1.2.3


From 718b68db629c14fae6c89716ccd961a57c738bb2 Mon Sep 17 00:00:00 2001
From: Aura Linden <aura@lindenlab.com>
Date: Thu, 31 Mar 2016 17:10:10 -0700
Subject: I hate polluting the commit history.

---
 indra/newview/llviewerinventory.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 10de787a3a..5616c27370 100755
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -396,7 +396,7 @@ void LLViewerInventoryItem::updateServer(BOOL is_new) const
         updates.erase("shadow_id");
         updates["hash_id"] = getTransactionID();
     }
-    AISAPI::completion_t cr = boost::bind(&doInventoryCb, NULL, _1);
+    AISAPI::completion_t cr = boost::bind(&doInventoryCb, (LLPointer<LLInventoryCallback>)NULL, _1);
     AISAPI::UpdateItem(getUUID(), updates, cr);
 }
 
@@ -641,7 +641,7 @@ void LLViewerInventoryCategory::updateServer(BOOL is_new) const
 	}
 
     LLSD new_llsd = asLLSD();
-    AISAPI::completion_t cr = boost::bind(&doInventoryCb, NULL, _1);
+    AISAPI::completion_t cr = boost::bind(&doInventoryCb, (LLPointer<LLInventoryCallback>)NULL, _1);
     AISAPI::UpdateCategory(getUUID(), new_llsd, cr);
 }
 
@@ -879,7 +879,7 @@ void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type)
         
         
     LLSD new_llsd = new_cat->asLLSD();
-    AISAPI::completion_t cr = boost::bind(&doInventoryCb, NULL, _1);
+    AISAPI::completion_t cr = boost::bind(&doInventoryCb, (LLPointer<LLInventoryCallback>) NULL, _1);
     AISAPI::UpdateCategory(folder_id, new_llsd, cr);
 
 	setPreferredType(new_folder_type);
-- 
cgit v1.2.3


From 8c973c812b956bda1f1afa1d6be4b5fb9ffd7ce6 Mon Sep 17 00:00:00 2001
From: Mnikolenko ProductEngine <mnikolenko@productengine.com>
Date: Thu, 7 Apr 2016 14:52:20 +0300
Subject: MAINT-5692 FIXED In OS X El Capitan, when you run the viewer you
 won't see readable Japanese fonts.

---
 indra/newview/skins/default/xui/en/fonts.xml | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml
index 170b7177fb..5d05ecf127 100755
--- a/indra/newview/skins/default/xui/en/fonts.xml
+++ b/indra/newview/skins/default/xui/en/fonts.xml
@@ -12,6 +12,7 @@
     <os name="Mac">
       <file>ヒラギノ角ゴ Pro W3.otf</file>
       <file>ヒラギノ角ゴ ProN W3.otf</file>
+      <file>ヒラギノ明朝 ProN W3.ttc</file>
       <file>AppleGothic.dfont</file>
       <file>AppleGothic.ttf</file>
       <file>AppleSDGothicNeo-Regular.otf</file>
-- 
cgit v1.2.3


From f5c21ce1aef74bd79cbcb8c7a6cd4f9f4891c993 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Fri, 8 Apr 2016 18:23:35 +0300
Subject: MAINT-6320 Snapshot floater is stuck in 'Saving to Inventory' state.

---
 indra/newview/llviewerassetupload.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerassetupload.cpp b/indra/newview/llviewerassetupload.cpp
index f0dafec240..497ff4d2bf 100644
--- a/indra/newview/llviewerassetupload.cpp
+++ b/indra/newview/llviewerassetupload.cpp
@@ -837,5 +837,12 @@ void LLViewerAssetUpload::HandleUploadError(LLCore::HttpStatus status, LLSD &res
         }
     }
 
+    // Let the Snapshot floater know we have failed uploading.
+    LLFloater* floater_snapshot = LLFloaterReg::findInstance("snapshot");
+    if (uploadInfo->getAssetType() == LLAssetType::AT_TEXTURE && floater_snapshot)
+    {
+        floater_snapshot->notify(LLSD().with("set-finished", LLSD().with("ok", false).with("msg", "inventory")));
+    }
+
 }
 
-- 
cgit v1.2.3


From 1a2d326c2b7b24139c85dc10f63ecfd37db7eca4 Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Mon, 11 Apr 2016 14:25:08 +0300
Subject: MAINT-6273 "Freeze" and "Eject" menu items are added to Nearby
 context menu.

---
 indra/newview/llavataractions.cpp                  | 122 ++++++++++++++++++++-
 indra/newview/llavataractions.h                    |   5 +
 indra/newview/llpanelpeoplemenus.cpp               |  88 +++++++++++++++
 indra/newview/llpanelpeoplemenus.h                 |   2 +
 .../skins/default/xui/en/menu_people_nearby.xml    |  16 +++
 5 files changed, 231 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 00bc8ebe87..a6e745448a 100755
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -475,6 +475,57 @@ void LLAvatarActions::kick(const LLUUID& id)
 	LLNotifications::instance().add("KickUser", LLSD(), payload, handleKick);
 }
 
+// static
+void LLAvatarActions::freezeAvatar(const LLUUID& id)
+{
+	std::string fullname;
+	gCacheName->getFullName(id, fullname);
+	LLSD payload;
+	payload["avatar_id"] = id;
+
+	if (!fullname.empty())
+	{
+		LLSD args;
+		args["AVATAR_NAME"] = fullname;
+		LLNotificationsUtil::add("FreezeAvatarFullname", args, payload, handleFreezeAvatar);
+	}
+	else
+	{
+		LLNotificationsUtil::add("FreezeAvatar", LLSD(), payload, handleFreezeAvatar);
+	}
+}
+
+// static
+void LLAvatarActions::ejectAvatar(const LLUUID& id, bool ban_enabled)
+{
+	std::string fullname;
+	gCacheName->getFullName(id, fullname);
+	LLSD payload;
+	payload["avatar_id"] = id;
+	payload["ban_enabled"] = ban_enabled;
+	LLSD args;
+	if (!fullname.empty())
+	{
+		args["AVATAR_NAME"] = fullname;
+	}
+
+	if (ban_enabled)
+	{
+			LLNotificationsUtil::add("EjectAvatarFullname", args, payload, handleEjectAvatar);
+	}
+	else
+	{
+		if (!fullname.empty())
+		{
+			LLNotificationsUtil::add("EjectAvatarFullnameNoBan", args, payload, handleEjectAvatar);
+		}
+		else
+		{
+			LLNotificationsUtil::add("EjectAvatarNoBan", LLSD(), payload, handleEjectAvatar);
+		}
+	}
+}
+
 // static
 void LLAvatarActions::freeze(const LLUUID& id)
 {
@@ -482,7 +533,6 @@ void LLAvatarActions::freeze(const LLUUID& id)
 	payload["avatar_id"] = id;
 	LLNotifications::instance().add("FreezeUser", LLSD(), payload, handleFreeze);
 }
-
 // static
 void LLAvatarActions::unfreeze(const LLUUID& id)
 {
@@ -1133,10 +1183,77 @@ bool LLAvatarActions::handleKick(const LLSD& notification, const LLSD& response)
 	}
 	return false;
 }
-bool LLAvatarActions::handleFreeze(const LLSD& notification, const LLSD& response)
+
+bool LLAvatarActions::handleFreezeAvatar(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotification::getSelectedOption(notification, response);
 
+	if (0 == option || 1 == option)
+	{
+	    U32 flags = 0x0;
+	    if (1 == option)
+	    {
+	        // unfreeze
+	        flags |= 0x1;
+	    }
+	    LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
+		LLMessageSystem* msg = gMessageSystem;
+
+		msg->newMessage("FreezeUser");
+		msg->nextBlock("AgentData");
+		msg->addUUID("AgentID", gAgent.getID());
+		msg->addUUID("SessionID", gAgent.getSessionID());
+		msg->nextBlock("Data");
+		msg->addUUID("TargetID", avatar_id );
+		msg->addU32("Flags", flags );
+		gAgent.sendReliableMessage();
+	}
+	return false;
+}
+
+bool LLAvatarActions::handleEjectAvatar(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if (2 == option)
+	{
+		return false;
+	}
+	LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
+	bool ban_enabled = notification["payload"]["ban_enabled"].asBoolean();
+
+	if (0 == option)
+	{
+		LLMessageSystem* msg = gMessageSystem;
+		U32 flags = 0x0;
+		msg->newMessage("EjectUser");
+		msg->nextBlock("AgentData");
+		msg->addUUID("AgentID", gAgent.getID() );
+		msg->addUUID("SessionID", gAgent.getSessionID() );
+		msg->nextBlock("Data");
+		msg->addUUID("TargetID", avatar_id );
+		msg->addU32("Flags", flags );
+		gAgent.sendReliableMessage();
+	}
+	else if (ban_enabled)
+	{
+		LLMessageSystem* msg = gMessageSystem;
+
+		U32 flags = 0x1;
+		msg->newMessage("EjectUser");
+		msg->nextBlock("AgentData");
+		msg->addUUID("AgentID", gAgent.getID() );
+		msg->addUUID("SessionID", gAgent.getSessionID() );
+		msg->nextBlock("Data");
+		msg->addUUID("TargetID", avatar_id );
+		msg->addU32("Flags", flags );
+		gAgent.sendReliableMessage();
+	}
+	return false;
+}
+
+bool LLAvatarActions::handleFreeze(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
 	if (option == 0)
 	{
 		LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
@@ -1153,6 +1270,7 @@ bool LLAvatarActions::handleFreeze(const LLSD& notification, const LLSD& respons
 	}
 	return false;
 }
+
 bool LLAvatarActions::handleUnfreeze(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotification::getSelectedOption(notification, response);
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index bd0ac24e93..256d44d820 100755
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -173,6 +173,9 @@ public:
 	 */	
 	static void inviteToGroup(const LLUUID& id);
 	
+	static void freezeAvatar(const LLUUID& id);
+
+	static void ejectAvatar(const LLUUID& id, bool ban_enabled = false);
 	/**
 	 * Kick avatar off grid
 	 */	
@@ -242,6 +245,8 @@ private:
 	static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);
 	static bool handleRemove(const LLSD& notification, const LLSD& response);
 	static bool handlePay(const LLSD& notification, const LLSD& response, LLUUID avatar_id);
+	static bool handleFreezeAvatar(const LLSD& notification, const LLSD& response);
+	static bool handleEjectAvatar(const LLSD& notification, const LLSD& response);
 	static bool handleKick(const LLSD& notification, const LLSD& response);
 	static bool handleFreeze(const LLSD& notification, const LLSD& response);
 	static bool handleUnfreeze(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index a5f59dbf4a..65769ff526 100755
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -38,9 +38,14 @@
 #include "llavataractions.h"
 #include "llcallingcard.h"			// for LLAvatarTracker
 #include "lllogchat.h"
+#include "llparcel.h"
 #include "llviewermenu.h"			// for gMenuHolder
 #include "llconversationmodel.h"
 #include "llviewerobjectlist.h"
+#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
+#include "llvoavatarself.h"
+#include "roles_constants.h"
 
 namespace LLPanelPeopleMenus
 {
@@ -77,9 +82,13 @@ LLContextMenu* PeopleContextMenu::createMenu()
 		registrar.add("Avatar.InviteToGroup",	boost::bind(&LLAvatarActions::inviteToGroup,			id));
 		registrar.add("Avatar.TeleportRequest",	boost::bind(&PeopleContextMenu::requestTeleport,		this));
 		registrar.add("Avatar.Calllog",			boost::bind(&LLAvatarActions::viewChatHistory,			id));
+		registrar.add("Avatar.Freeze",			boost::bind(&LLAvatarActions::freezeAvatar,					id));
+		registrar.add("Avatar.Eject",			boost::bind(&PeopleContextMenu::eject,					this));
+
 
 		enable_registrar.add("Avatar.EnableItem", boost::bind(&PeopleContextMenu::enableContextMenuItem, this, _2));
 		enable_registrar.add("Avatar.CheckItem",  boost::bind(&PeopleContextMenu::checkContextMenuItem,	this, _2));
+		enable_registrar.add("Avatar.EnableFreezeEject", boost::bind(&PeopleContextMenu::enableFreezeEject, this, _2));
 
 		// create the context menu from the XUI
 		menu = createFromFile("menu_people_nearby.xml");
@@ -258,6 +267,50 @@ bool PeopleContextMenu::checkContextMenuItem(const LLSD& userdata)
 	return false;
 }
 
+bool PeopleContextMenu::enableFreezeEject(const LLSD& userdata)
+{
+    if((gAgent.getID() == mUUIDs.front()) || (mUUIDs.size() != 1))
+    {
+        return false;
+    }
+
+    const LLUUID& id = mUUIDs.front();
+
+    // Use avatar_id if available, otherwise default to right-click avatar
+    LLVOAvatar* avatar = NULL;
+    if (id.notNull())
+    {
+        LLViewerObject* object = gObjectList.findObject(id);
+        if (object)
+        {
+            if( !object->isAvatar() )
+            {
+                object = NULL;
+            }
+            avatar = (LLVOAvatar*) object;
+        }
+    }
+    if (!avatar) return false;
+
+    // Gods can always freeze
+    if (gAgent.isGodlike()) return true;
+
+    // Estate owners / managers can freeze
+    // Parcel owners can also freeze
+    const LLVector3& pos = avatar->getPositionRegion();
+    const LLVector3d& pos_global = avatar->getPositionGlobal();
+    LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel();
+    LLViewerRegion* region = avatar->getRegion();
+    if (!region) return false;
+
+    bool new_value = region->isOwnedSelf(pos);
+    if (!new_value || region->isOwnedGroup(pos))
+    {
+        new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN);
+    }
+    return new_value;
+}
+
 void PeopleContextMenu::requestTeleport()
 {
 	// boost::bind cannot recognize overloaded method LLAvatarActions::teleportRequest(),
@@ -272,6 +325,39 @@ void PeopleContextMenu::offerTeleport()
 	LLAvatarActions::offerTeleport(mUUIDs);
 }
 
+void PeopleContextMenu::eject()
+{
+	if((gAgent.getID() == mUUIDs.front()) || (mUUIDs.size() != 1))
+	{
+		return;
+	}
+
+	const LLUUID& id = mUUIDs.front();
+
+	// Use avatar_id if available, otherwise default to right-click avatar
+	LLVOAvatar* avatar = NULL;
+	if (id.notNull())
+	{
+		LLViewerObject* object = gObjectList.findObject(id);
+		if (object)
+		{
+			if( !object->isAvatar() )
+			{
+				object = NULL;
+			}
+			avatar = (LLVOAvatar*) object;
+		}
+	}
+	if (!avatar) return;
+	LLSD payload;
+	payload["avatar_id"] = avatar->getID();
+	std::string fullname = avatar->getFullname();
+
+	const LLVector3d& pos = avatar->getPositionGlobal();
+	LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos)->getParcel();
+	LLAvatarActions::ejectAvatar(id ,LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_MANAGE_BANNED));
+}
+
 void PeopleContextMenu::startConference()
 {
 	uuid_vec_t uuids;
@@ -320,6 +406,8 @@ void NearbyPeopleContextMenu::buildContextMenu(class LLMenuGL& menu, U32 flags)
 		items.push_back(std::string("share"));
 		items.push_back(std::string("pay"));
 		items.push_back(std::string("block_unblock"));
+		items.push_back(std::string("freeze"));
+		items.push_back(std::string("eject"));
 	}
 
     hide_context_entries(menu, items, disabled_items);
diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h
index 9767bab89f..5ed20e0064 100755
--- a/indra/newview/llpanelpeoplemenus.h
+++ b/indra/newview/llpanelpeoplemenus.h
@@ -46,7 +46,9 @@ protected:
 private:
 	bool enableContextMenuItem(const LLSD& userdata);
 	bool checkContextMenuItem(const LLSD& userdata);
+	bool enableFreezeEject(const LLSD& userdata);
 	void offerTeleport();
+	void eject();
 	void startConference();
 	void requestTeleport();
 };
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
index f12226ebeb..c1500d4e7c 100755
--- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
@@ -143,4 +143,20 @@
          function="Avatar.EnableItem"
          parameter="can_block" />
     </menu_item_check>
+    <menu_item_call
+         label="Freeze"
+         name="freeze">
+        <menu_item_call.on_click
+         function="Avatar.Freeze" />
+        <menu_item_call.on_visible
+         function="Avatar.EnableFreezeEject"/>
+    </menu_item_call>
+    <menu_item_call
+         label="Eject"
+         name="eject">
+        <menu_item_call.on_click
+         function="Avatar.Eject" />
+        <menu_item_call.on_visible
+         function="Avatar.EnableFreezeEject"/>
+    </menu_item_call>
 </context_menu>
-- 
cgit v1.2.3


From 8f52908994da1788fb68f551758d4a8e143a65ba Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Tue, 12 Apr 2016 12:35:04 +0300
Subject: MAINT-6283 Names that contain 'http:' or 'https:' are transferred to
 the new line in chat history

---
 indra/newview/lllogchat.cpp | 40 +++++++++++++++++++++++++++++-----------
 1 file changed, 29 insertions(+), 11 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 4116e38f11..0dfcbfde7b 100755
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -67,7 +67,7 @@ const std::string LL_IM_FROM("from");
 const std::string LL_IM_FROM_ID("from_id");
 const std::string LL_TRANSCRIPT_FILE_EXTENSION("txt");
 
-const static std::string IM_SEPARATOR(": ");
+const static std::string IM_SEPARATOR("| ");
 const static std::string NEW_LINE("\n");
 const static std::string NEW_LINE_SPACE_PREFIX("\n ");
 const static std::string TWO_SPACES("  ");
@@ -94,7 +94,8 @@ const static boost::regex TIMESTAMP("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\
  *  Regular expression suitable to match names like
  *  "You", "Second Life", "Igor ProductEngine", "Object", "Mega House"
  */
-const static boost::regex NAME_AND_TEXT("([^:]+[:]{1})?(\\s*)(.*)");
+const static boost::regex OLD_NAME_AND_TEXT("([^:]+[:]{1})?(\\s*)(.*)");
+const static boost::regex NAME_AND_TEXT("([^\\|]+[\\|]{1})?(\\s*)(.*)");
 
 /**
  * These are recognizers for matching the names of ad-hoc conferences when generating the log file name
@@ -107,7 +108,8 @@ const static boost::regex INBOUND_CONFERENCE("^[a-zA-Z]{1,31} [a-zA-Z]{1,31} Con
 const static boost::regex OUTBOUND_CONFERENCE("^Ad-hoc Conference hash[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}");
 
 //is used to parse complex object names like "Xstreet SL Terminal v2.2.5 st"
-const static std::string NAME_TEXT_DIVIDER(": ");
+const static std::string OLD_NAME_TEXT_DIVIDER(": ");
+const static std::string NAME_TEXT_DIVIDER("| ");
 
 // is used for timestamps adjusting
 const static char* DATE_FORMAT("%Y/%m/%d %H:%M");
@@ -903,13 +905,24 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params
 	//matching a name and a text
 	std::string stuff = matches[IDX_STUFF];
 	boost::match_results<std::string::const_iterator> name_and_text;
-	if (!boost::regex_match(stuff, name_and_text, NAME_AND_TEXT)) return false;
-	
-	bool has_name = name_and_text[IDX_NAME].matched;
+	bool old_name = false;
+	bool has_name = false;
+	if (boost::regex_match(stuff, name_and_text, NAME_AND_TEXT))
+	{
+		has_name = name_and_text[IDX_NAME].matched;
+	}
+
+	if(!has_name)
+	{
+		if (!boost::regex_match(stuff, name_and_text, OLD_NAME_AND_TEXT)) return false;
+		old_name = true;
+		has_name = name_and_text[IDX_NAME].matched;
+	}
 	std::string name = name_and_text[IDX_NAME];
 
 	//we don't need a name/text separator
-	if (has_name && name.length() && name[name.length()-1] == ':')
+	char delim = old_name? ':' : '|';
+	if (has_name && name.length() && name[name.length()-1] == delim)
 	{
 		name.erase(name.length()-1, 1);
 	}
@@ -924,11 +937,17 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params
 	//possibly a case of complex object names consisting of 3+ words
 	if (!has_name)
 	{
-		U32 divider_pos = stuff.find(NAME_TEXT_DIVIDER);
-		if (divider_pos != std::string::npos && divider_pos < (stuff.length() - NAME_TEXT_DIVIDER.length()))
+		std::string divider = NAME_TEXT_DIVIDER;
+		U32 divider_pos = stuff.find(divider);
+		if(divider_pos == std::string::npos)
+		{
+			divider = OLD_NAME_TEXT_DIVIDER;
+			divider_pos = stuff.find(divider);
+		}
+		if (divider_pos != std::string::npos && divider_pos < (stuff.length() - divider.length()))
 		{
 			im[LL_IM_FROM] = stuff.substr(0, divider_pos);
-			im[LL_IM_TEXT] = stuff.substr(divider_pos + NAME_TEXT_DIVIDER.length());
+			im[LL_IM_TEXT] = stuff.substr(divider_pos + divider.length());
 			return true;
 		}
 	}
@@ -956,7 +975,6 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params
 		im[LL_IM_FROM] = name;
 	}
 	
-
 	im[LL_IM_TEXT] = name_and_text[IDX_TEXT];
 	return true;  //parsed name and message text, maybe have a timestamp too
 }
-- 
cgit v1.2.3


From c436716d92f3f38686b8d138e8e52a378c044490 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Tue, 12 Apr 2016 17:50:05 +0300
Subject: MAINT-6301 Recent tab sorting changes do not persist between logins

---
 indra/newview/llpanelmaininventory.cpp | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 4229419fce..973e1f7705 100755
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -150,6 +150,7 @@ BOOL LLPanelMainInventory::postBuild()
 	LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
 	if (recent_items_panel)
 	{
+		// assign default values until we will be sure that we have setting to restore
 		recent_items_panel->setSinceLogoff(TRUE);
 		recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
 		recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
@@ -181,6 +182,7 @@ BOOL LLPanelMainInventory::postBuild()
 				LLParamSDParser parser;
 				parser.readSD(recent_items, p);
 				recent_items_panel->getFilter().fromParams(p);
+				recent_items_panel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::RECENTITEMS_SORT_ORDER));
 			}
 		}
 
@@ -372,7 +374,14 @@ void LLPanelMainInventory::setSortBy(const LLSD& userdata)
 	}
 
 	getActivePanel()->setSortOrder(sort_order_mask);
-	gSavedSettings.setU32("InventorySortOrder", sort_order_mask);
+    if ("Recent Items" == getActivePanel()->getName())
+    {
+        gSavedSettings.setU32("RecentItemsSortOrder", sort_order_mask);
+    }
+    else
+    {
+        gSavedSettings.setU32("InventorySortOrder", sort_order_mask);
+    }
 }
 
 // static
-- 
cgit v1.2.3


From af408181c134e08b4b19f173d56b912c9e1f153b Mon Sep 17 00:00:00 2001
From: AndreyL ProductEngine <alihatskiy@productengine.com>
Date: Thu, 14 Apr 2016 02:10:21 +0300
Subject: MAINT-6248 remove the 'OK' and place a 'Rebake region' button in
 "pending pathfinding changes" notification toast

---
 indra/newview/lllocationinputctrl.cpp              | 25 ++++++++++++++++++++++
 indra/newview/lllocationinputctrl.h                |  1 +
 .../newview/skins/default/xui/en/notifications.xml | 13 +++++++++++
 3 files changed, 39 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 8d21fda8f9..53b2ca2b74 100755
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -64,6 +64,9 @@
 #include "llurllineeditorctrl.h"
 #include "llagentui.h"
 
+#include "llmenuoptionpathfindingrebakenavmesh.h"
+#include "llpathfindingmanager.h"
+
 //============================================================================
 /*
  * "ADD LANDMARK" BUTTON UPDATING LOGIC
@@ -1194,6 +1197,18 @@ bool LLLocationInputCtrl::onLocationContextMenuItemEnabled(const LLSD& userdata)
 	return false;
 }
 
+void LLLocationInputCtrl::callbackRebakeRegion(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if (option == 0) // OK
+	{
+		if (LLPathfindingManager::getInstance() != NULL)
+		{
+			LLMenuOptionPathfindingRebakeNavmesh::getInstance()->sendRequestRebakeNavmesh();
+		}
+	}
+}
+
 void LLLocationInputCtrl::onParcelIconClick(EParcelIcon icon)
 {
 	switch (icon)
@@ -1211,6 +1226,16 @@ void LLLocationInputCtrl::onParcelIconClick(EParcelIcon icon)
 		LLNotificationsUtil::add("NoBuild");
 		break;
 	case PATHFINDING_DIRTY_ICON:
+		if (LLPathfindingManager::getInstance() != NULL)
+		{
+			LLMenuOptionPathfindingRebakeNavmesh *rebakeInstance = LLMenuOptionPathfindingRebakeNavmesh::getInstance();
+			if (rebakeInstance && rebakeInstance->canRebakeRegion() && (rebakeInstance->getMode() == LLMenuOptionPathfindingRebakeNavmesh::kRebakeNavMesh_Available))
+			{
+				LLNotificationsUtil::add("PathfindingDirtyRebake", LLSD(), LLSD(),
+										 boost::bind(&LLLocationInputCtrl::callbackRebakeRegion, this, _1, _2));
+				break;
+			}
+		}
 		LLNotificationsUtil::add("PathfindingDirty");
 		break;
 	case PATHFINDING_DISABLED_ICON:
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
index cd6fd24077..da71bab6c1 100755
--- a/indra/newview/lllocationinputctrl.h
+++ b/indra/newview/lllocationinputctrl.h
@@ -166,6 +166,7 @@ private:
 	// callbacks
 	bool					onLocationContextMenuItemEnabled(const LLSD& userdata);
 	void 					onLocationContextMenuItemClicked(const LLSD& userdata);
+	void					callbackRebakeRegion(const LLSD& notification, const LLSD& response);
 	void					onParcelIconClick(EParcelIcon icon);
 
 	void                    createNavMeshStatusListenerForCurrentRegion();
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index f8e346afb9..6b75a2083d 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6907,6 +6907,19 @@ This area has building disabled. You can&apos;t build or rez objects here.
     The region has pending pathfinding changes.  If you have build rights, you may rebake the region by clicking on the “Rebake region” button.
   </notification>
 
+  <notification
+   icon="notify.tga"
+   name="PathfindingDirtyRebake"
+   persist="true"
+   type="notify">
+   <unique/>
+   The region has pending pathfinding changes.  If you have build rights, you may rebake the region by clicking on the “Rebake region” button.
+   <usetemplate
+     name="okbutton"
+     yestext="Rebake region"
+   />
+  </notification>
+
   <notification
      icon="notify.tga"
      name="DynamicPathfindingDisabled"
-- 
cgit v1.2.3


From 64710a3279a23634d4cbbbcec3680ee6c3a21416 Mon Sep 17 00:00:00 2001
From: AndreyL ProductEngine <alihatskiy@productengine.com>
Date: Thu, 14 Apr 2016 04:26:44 +0300
Subject: MAINT-6293 Notification toasts UI improvements Align the one-button
 forms at center; improve the button width calculation

---
 indra/newview/lltoastnotifypanel.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 98ed2f0fc4..1a8ade5b10 100755
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -103,7 +103,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
 		p.image_color_disabled(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
 	}
 	// for the scriptdialog buttons we use fixed button size. This  is a limit!
-	if (!mIsScriptDialog && font->getWidth(form_element["text"].asString()) > BUTTON_WIDTH)
+	if (!mIsScriptDialog && font->getWidth(form_element["text"].asString()) > (BUTTON_WIDTH-2*HPAD))
 	{
 		p.rect.width = 1;
 		p.auto_resize = true;
@@ -160,7 +160,11 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair
 		}
 		LLButton* btn = it->second;
 		LLRect btn_rect(btn->getRect());
-		if (left + btn_rect.getWidth() > max_width)// whether there is still some place for button+h_pad in the mControlPanel
+		if (buttons.size() == 1) // for the one-button forms, center that button
+		{
+			left = (max_width - btn_rect.getWidth()) / 2;
+		}
+		else if (left + btn_rect.getWidth() > max_width)// whether there is still some place for button+h_pad in the mControlPanel
 		{
 			// looks like we need to add button to the next row
 			left = 0;
-- 
cgit v1.2.3


From 2311d8c2b200574a0fb38c80222a0f09ce984f67 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Fri, 15 Apr 2016 15:33:27 +0300
Subject: MAINT-4220 Raise UIScaleFactor limit

---
 indra/newview/skins/default/xui/en/panel_preferences_advanced.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 3e96160834..4a5117adac 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -138,7 +138,7 @@
    initial_value="1"
    layout="topleft"
    left_pad="0"
-   max_val="1.5"
+   max_val="2.0"
    min_val="0.75"
    name="ui_scale_slider"
    top_pad="-14"
-- 
cgit v1.2.3


From eec33adf34db3fe0c32600808458e4307ede1bf0 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Wed, 13 Apr 2016 18:59:00 +0300
Subject: MAINT-3286 FIXED Fix error message on snapshot save when user has no
 L$

---
 indra/newview/llfloaternamedesc.cpp                | 22 +++++++++++++++++-----
 indra/newview/llfloatersnapshot.cpp                | 14 ++++++++++++++
 indra/newview/llfloatersnapshot.h                  |  1 +
 indra/newview/llpanelsnapshotinventory.cpp         | 17 +++++++++++++++--
 .../newview/skins/default/xui/en/notifications.xml | 16 ++++++++++++++++
 5 files changed, 63 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp
index 135bbb335e..4a5732aecf 100755
--- a/indra/newview/llfloaternamedesc.cpp
+++ b/indra/newview/llfloaternamedesc.cpp
@@ -42,6 +42,8 @@
 #include "llfloaterperms.h"
 #include "llviewercontrol.h"
 #include "llviewermenufile.h"	// upload_new_resource()
+#include "llstatusbar.h"	// can_afford_transaction()
+#include "llnotificationsutil.h"
 #include "lluictrlfactory.h"
 #include "llstring.h"
 #include "lleconomy.h"
@@ -161,12 +163,15 @@ void LLFloaterNameDesc::onBtnOK( )
 	
 	LLAssetStorage::LLStoreAssetCallback callback = NULL;
 	S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass).
-	void *nruserdata = NULL;
-	std::string display_name = LLStringUtil::null;
 
-    LLResourceUploadInfo::ptr_t uploadInfo(new LLNewFileResourceUploadInfo(
+    if (can_afford_transaction(expected_upload_cost))
+    {
+        void *nruserdata = NULL;
+        std::string display_name = LLStringUtil::null;
+
+        LLResourceUploadInfo::ptr_t uploadInfo(new LLNewFileResourceUploadInfo(
             mFilenameAndPath,
-            getChild<LLUICtrl>("name_form")->getValue().asString(), 
+            getChild<LLUICtrl>("name_form")->getValue().asString(),
             getChild<LLUICtrl>("description_form")->getValue().asString(), 0,
             LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
             LLFloaterPerms::getNextOwnerPerms("Uploads"),
@@ -174,7 +179,14 @@ void LLFloaterNameDesc::onBtnOK( )
             LLFloaterPerms::getEveryonePerms("Uploads"),
             expected_upload_cost));
 
-    upload_new_resource(uploadInfo, callback, nruserdata);
+        upload_new_resource(uploadInfo, callback, nruserdata);
+    }
+    else
+    {
+        LLSD args;
+        args["COST"] = llformat("%d", expected_upload_cost);
+        LLNotificationsUtil::add("ErrorTextureCannotAfford", args);
+    }
 
 	closeFloater(false);
 }
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index afec981d56..b906671c7f 100755
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -1417,6 +1417,20 @@ void LLFloaterSnapshot::postPanelSwitch()
 	instance->impl.setStatus(Impl::STATUS_READY);
 }
 
+// static
+void LLFloaterSnapshot::inventorySaveFailed()
+{
+    LLFloaterSnapshot* instance = findInstance();
+    if (!instance)
+    {
+        llassert(instance != NULL);
+        return;
+    }
+
+    instance->impl.updateControls(instance);
+    instance->impl.setStatus(Impl::STATUS_FINISHED, false, "inventory");
+}
+
 // static
 LLPointer<LLImageFormatted> LLFloaterSnapshot::getImageData()
 {
diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h
index 0bb9474bb5..eb3a94999b 100755
--- a/indra/newview/llfloatersnapshot.h
+++ b/indra/newview/llfloatersnapshot.h
@@ -61,6 +61,7 @@ public:
 	static BOOL saveLocal();
 	static void postSave();
 	static void postPanelSwitch();
+	static void inventorySaveFailed();
 	static LLPointer<LLImageFormatted> getImageData();
 	static const LLVector3d& getPosTakenGlobal();
 	static void setAgentEmail(const std::string& email);
diff --git a/indra/newview/llpanelsnapshotinventory.cpp b/indra/newview/llpanelsnapshotinventory.cpp
index c55e230b5e..a2d1752c6a 100755
--- a/indra/newview/llpanelsnapshotinventory.cpp
+++ b/indra/newview/llpanelsnapshotinventory.cpp
@@ -34,6 +34,8 @@
 #include "llfloatersnapshot.h" // FIXME: replace with a snapshot storage model
 #include "llpanelsnapshot.h"
 #include "llviewercontrol.h" // gSavedSettings
+#include "llstatusbar.h"	// can_afford_transaction()
+#include "llnotificationsutil.h"
 
 /**
  * The panel provides UI for saving snapshot as an inventory texture.
@@ -102,6 +104,17 @@ void LLPanelSnapshotInventory::onResolutionCommit(LLUICtrl* ctrl)
 
 void LLPanelSnapshotInventory::onSend()
 {
-	LLFloaterSnapshot::saveTexture();
-	LLFloaterSnapshot::postSave();
+    S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
+    if (can_afford_transaction(expected_upload_cost))
+    {
+        LLFloaterSnapshot::saveTexture();
+        LLFloaterSnapshot::postSave();
+    }
+    else
+    {
+        LLSD args;
+        args["COST"] = llformat("%d", expected_upload_cost);
+        LLNotificationsUtil::add("ErrorPhotoCannotAfford", args);
+        LLFloaterSnapshot::inventorySaveFailed();
+    }
 }
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 6b75a2083d..589c05de99 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -1164,6 +1164,22 @@ Error encoding snapshot.
   <tag>fail</tag>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="ErrorPhotoCannotAfford"
+   type="alertmodal">
+    You need L$[COST] to save a photo to your inventory. You may either buy L$ or save the photo to your computer instead.
+    <tag>fail</tag>
+  </notification>
+  
+  <notification
+   icon="alertmodal.tga"
+   name="ErrorTextureCannotAfford"
+   type="alertmodal">
+    You need L$[COST] to save a texture to your inventory. You may either buy L$ or save the photo to your computer instead.
+    <tag>fail</tag>
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="ErrorUploadingPostcard"
-- 
cgit v1.2.3


From 76d1551e2ce53f8c26a8f5ced6c27c9a85e8a19f Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Wed, 20 Apr 2016 17:46:59 +0300
Subject: MAINT-6341 Changing properties of the object in inventory are not
 saved after transfer it to next owner

---
 indra/newview/llviewerinventory.cpp | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 5616c27370..d0813544f8 100755
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -389,12 +389,18 @@ void LLViewerInventoryItem::updateServer(BOOL is_new) const
     if (updates.has("asset_id"))
     {
         updates.erase("asset_id");
-        updates["hash_id"] = getTransactionID();
+        if(getTransactionID().notNull())
+        {
+            updates["hash_id"] = getTransactionID();
+        }
     }
     if (updates.has("shadow_id"))
     {
         updates.erase("shadow_id");
-        updates["hash_id"] = getTransactionID();
+        if(getTransactionID().notNull())
+        {
+            updates["hash_id"] = getTransactionID();
+        }
     }
     AISAPI::completion_t cr = boost::bind(&doInventoryCb, (LLPointer<LLInventoryCallback>)NULL, _1);
     AISAPI::UpdateItem(getUUID(), updates, cr);
-- 
cgit v1.2.3


From 1241558dbf7e21a39487c16f940aed1db689ef84 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Wed, 20 Apr 2016 19:40:19 +0300
Subject: MAINT-2129 "Block" button doesn't become disabled in remote object
 inspector after object has been added to block list

---
 indra/newview/llchathistory.cpp                         | 11 +++++++++++
 indra/newview/skins/default/xui/en/menu_object_icon.xml |  3 +++
 2 files changed, 14 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 4b426081d0..9564951986 100755
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -169,6 +169,16 @@ public:
 
 	}
 
+    bool onObjectIconContextMenuItemEnabled(const LLSD& userdata)
+    {
+        std::string level = userdata.asString();
+        if (level == "is_blocked")
+        {
+            return !LLMuteList::getInstance()->isMuted(getAvatarId(), mFrom, LLMute::flagTextChat);
+        }
+        return false;
+    }
+
 	void onAvatarIconContextMenuItemClicked(const LLSD& userdata)
 	{
 		std::string level = userdata.asString();
@@ -275,6 +285,7 @@ public:
 		registrar.add("AvatarIcon.Action", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemClicked, this, _2));
 		registrar_enable.add("AvatarIcon.Check", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemChecked, this, _2));
 		registrar.add("ObjectIcon.Action", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemClicked, this, _2));
+		registrar_enable.add("ObjectIcon.Enable", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemEnabled, this, _2));
 
 		LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_avatar_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 		mPopupMenuHandleAvatar = menu->getHandle();
diff --git a/indra/newview/skins/default/xui/en/menu_object_icon.xml b/indra/newview/skins/default/xui/en/menu_object_icon.xml
index 2d4f1792c2..93093014eb 100755
--- a/indra/newview/skins/default/xui/en/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/en/menu_object_icon.xml
@@ -23,6 +23,9 @@
         <menu_item_call.on_click
          function="ObjectIcon.Action"
          parameter="block" />
+        <menu_item_call.on_enable
+         function="ObjectIcon.Enable"
+         parameter="is_blocked" />
     </menu_item_call>
     <menu_item_separator
      layout="topleft" />
-- 
cgit v1.2.3


From bb719baec5b3000d0e9671283f5b5e9f23e780ac Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Thu, 21 Apr 2016 16:16:16 +0300
Subject: MAINT-6352 FIXED Editing marketplace listings before inventory has
 fully fetched causes listings to be unlisted.

---
 indra/newview/llinventoryfunctions.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index e3cb4d57ef..d8f019374e 100755
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -287,7 +287,11 @@ void update_marketplace_category(const LLUUID& cur_uuid, bool perform_consistenc
                 LL_INFOS("SLM") << "Unlist and clear version folder as the version folder is not at the right place anymore!!" << LL_ENDL;
                 LLMarketplaceData::instance().setVersionFolder(listing_uuid, LLUUID::null,1);
             }
-            else if (version_folder_uuid.notNull() && LLMarketplaceData::instance().getActivationState(version_folder_uuid) && (count_descendants_items(version_folder_uuid) == 0) && !LLMarketplaceData::instance().isUpdating(version_folder_uuid,version_depth))
+            else if (version_folder_uuid.notNull()
+                     && gInventory.isCategoryComplete(version_folder_uuid)
+                     && LLMarketplaceData::instance().getActivationState(version_folder_uuid)
+                     && (count_descendants_items(version_folder_uuid) == 0)
+                     && !LLMarketplaceData::instance().isUpdating(version_folder_uuid,version_depth))
             {
                 LL_INFOS("SLM") << "Unlist as the version folder is empty of any item!!" << LL_ENDL;
                 LLNotificationsUtil::add("AlertMerchantVersionFolderEmpty");
-- 
cgit v1.2.3


From e302b6f1f451f8a2388698b3528fb71af9cf41b2 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Fri, 22 Apr 2016 18:41:45 +0300
Subject: MAINT-2063 Fixed User had ability to delete Notecards and textures
 from library

---
 indra/newview/llpreviewnotecard.cpp |  6 ++++--
 indra/newview/llpreviewtexture.cpp  | 38 +++++++++++++++++++++++++------------
 2 files changed, 30 insertions(+), 14 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index 20c43bc432..ba9845ef04 100755
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -94,7 +94,8 @@ BOOL LLPreviewNotecard::postBuild()
 	if (item)
 	{
 		getChild<LLUICtrl>("desc")->setValue(item->getDescription());
-		getChildView("Delete")->setEnabled(true);
+		BOOL source_library = mObjectUUID.isNull() && gInventory.isObjectDescendentOf(item->getUUID(), gInventory.getLibraryRootFolderID());
+		getChildView("Delete")->setEnabled(!source_library);
 	}
 	getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
 
@@ -219,6 +220,7 @@ void LLPreviewNotecard::loadAsset()
 		BOOL is_owner = gAgent.allowOperation(PERM_OWNER, perm, GP_OBJECT_MANIPULATE);
 		BOOL allow_copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
 		BOOL allow_modify = canModify(mObjectUUID, item);
+		BOOL source_library = mObjectUUID.isNull() && gInventory.isObjectDescendentOf(mItemUUID, gInventory.getLibraryRootFolderID());
 
 		if (allow_copy || gAgent.isGodlike())
 		{
@@ -288,7 +290,7 @@ void LLPreviewNotecard::loadAsset()
 			getChildView("lock")->setVisible( TRUE);
 		}
 
-		if(allow_modify || is_owner)
+		if((allow_modify || is_owner) && !source_library)
 		{
 			getChildView("Delete")->setEnabled(TRUE);
 		}
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 2a2c51be40..645a77e42a 100755
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -38,6 +38,7 @@
 #include "llimagetga.h"
 #include "llimagepng.h"
 #include "llinventory.h"
+#include "llinventorymodel.h"
 #include "llnotificationsutil.h"
 #include "llresmgr.h"
 #include "lltrans.h"
@@ -120,18 +121,22 @@ BOOL LLPreviewTexture::postBuild()
 	childSetAction("save_tex_btn", LLPreviewTexture::onSaveAsBtn, this);
 	getChildView("save_tex_btn")->setVisible( true);
 	getChildView("save_tex_btn")->setEnabled(canSaveAs());
-	
-	if (!mCopyToInv) 
-	{
-		const LLInventoryItem* item = getItem();
-		
-		if (item)
-		{
-			childSetCommitCallback("desc", LLPreview::onText, this);
-			getChild<LLUICtrl>("desc")->setValue(item->getDescription());
-			getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
-		}
-	}
+
+    const LLInventoryItem* item = getItem();
+    if (item)
+    {
+        if (!mCopyToInv)
+        {
+            childSetCommitCallback("desc", LLPreview::onText, this);
+            getChild<LLUICtrl>("desc")->setValue(item->getDescription());
+            getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
+        }
+        BOOL source_library = mObjectUUID.isNull() && gInventory.isObjectDescendentOf(item->getUUID(), gInventory.getLibraryRootFolderID());
+        if (source_library)
+        {
+            getChildView("Discard")->setEnabled(false);
+        }
+    }
 
 	// Fill in ratios list with common aspect ratio values
 	mRatiosList.clear();
@@ -526,6 +531,15 @@ void LLPreviewTexture::loadAsset()
 		// check that we can copy inworld items into inventory
 		getChildView("Keep")->setEnabled(mIsCopyable);
 	}
+	else
+	{
+		// check that we can remove item
+		BOOL source_library = gInventory.isObjectDescendentOf(mItemUUID, gInventory.getLibraryRootFolderID());
+		if (source_library)
+		{
+			getChildView("Discard")->setEnabled(false);
+		}
+	}
 }
 
 LLPreview::EAssetStatus LLPreviewTexture::getAssetStatus()
-- 
cgit v1.2.3


From 772f0db14ecf721302d4c2a56f66a73a080f7b36 Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Mon, 25 Apr 2016 13:05:35 +0300
Subject: MAINT-6283 reverted

---
 indra/newview/lllogchat.cpp | 37 +++++++++----------------------------
 1 file changed, 9 insertions(+), 28 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 0dfcbfde7b..639641d1c2 100755
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -67,7 +67,7 @@ const std::string LL_IM_FROM("from");
 const std::string LL_IM_FROM_ID("from_id");
 const std::string LL_TRANSCRIPT_FILE_EXTENSION("txt");
 
-const static std::string IM_SEPARATOR("| ");
+const static std::string IM_SEPARATOR(": ");
 const static std::string NEW_LINE("\n");
 const static std::string NEW_LINE_SPACE_PREFIX("\n ");
 const static std::string TWO_SPACES("  ");
@@ -94,8 +94,7 @@ const static boost::regex TIMESTAMP("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\
  *  Regular expression suitable to match names like
  *  "You", "Second Life", "Igor ProductEngine", "Object", "Mega House"
  */
-const static boost::regex OLD_NAME_AND_TEXT("([^:]+[:]{1})?(\\s*)(.*)");
-const static boost::regex NAME_AND_TEXT("([^\\|]+[\\|]{1})?(\\s*)(.*)");
+const static boost::regex NAME_AND_TEXT("([^:]+[:]{1})?(\\s*)(.*)");
 
 /**
  * These are recognizers for matching the names of ad-hoc conferences when generating the log file name
@@ -108,8 +107,7 @@ const static boost::regex INBOUND_CONFERENCE("^[a-zA-Z]{1,31} [a-zA-Z]{1,31} Con
 const static boost::regex OUTBOUND_CONFERENCE("^Ad-hoc Conference hash[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}");
 
 //is used to parse complex object names like "Xstreet SL Terminal v2.2.5 st"
-const static std::string OLD_NAME_TEXT_DIVIDER(": ");
-const static std::string NAME_TEXT_DIVIDER("| ");
+const static std::string NAME_TEXT_DIVIDER(": ");
 
 // is used for timestamps adjusting
 const static char* DATE_FORMAT("%Y/%m/%d %H:%M");
@@ -905,24 +903,13 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params
 	//matching a name and a text
 	std::string stuff = matches[IDX_STUFF];
 	boost::match_results<std::string::const_iterator> name_and_text;
-	bool old_name = false;
-	bool has_name = false;
-	if (boost::regex_match(stuff, name_and_text, NAME_AND_TEXT))
-	{
-		has_name = name_and_text[IDX_NAME].matched;
-	}
+	if (!boost::regex_match(stuff, name_and_text, NAME_AND_TEXT)) return false;
 
-	if(!has_name)
-	{
-		if (!boost::regex_match(stuff, name_and_text, OLD_NAME_AND_TEXT)) return false;
-		old_name = true;
-		has_name = name_and_text[IDX_NAME].matched;
-	}
+	bool has_name = name_and_text[IDX_NAME].matched;
 	std::string name = name_and_text[IDX_NAME];
 
 	//we don't need a name/text separator
-	char delim = old_name? ':' : '|';
-	if (has_name && name.length() && name[name.length()-1] == delim)
+	if (has_name && name.length() && name[name.length()-1] == ':')
 	{
 		name.erase(name.length()-1, 1);
 	}
@@ -937,17 +924,11 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params
 	//possibly a case of complex object names consisting of 3+ words
 	if (!has_name)
 	{
-		std::string divider = NAME_TEXT_DIVIDER;
-		U32 divider_pos = stuff.find(divider);
-		if(divider_pos == std::string::npos)
-		{
-			divider = OLD_NAME_TEXT_DIVIDER;
-			divider_pos = stuff.find(divider);
-		}
-		if (divider_pos != std::string::npos && divider_pos < (stuff.length() - divider.length()))
+		U32 divider_pos = stuff.find(NAME_TEXT_DIVIDER);
+		if (divider_pos != std::string::npos && divider_pos < (stuff.length() - NAME_TEXT_DIVIDER.length()))
 		{
 			im[LL_IM_FROM] = stuff.substr(0, divider_pos);
-			im[LL_IM_TEXT] = stuff.substr(divider_pos + divider.length());
+			im[LL_IM_TEXT] = stuff.substr(divider_pos + NAME_TEXT_DIVIDER.length());
 			return true;
 		}
 	}
-- 
cgit v1.2.3


From 4a94133b072fc9263bf632f85468d2498a9c7eae Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Wed, 27 Apr 2016 10:56:38 +0300
Subject: MAINT-1007 FIXED Context menu in Appearance/Wearing tab should
 contain "Show original" menu item

---
 indra/newview/llpanelwearing.cpp                        | 2 ++
 indra/newview/skins/default/xui/en/menu_wearing_tab.xml | 7 +++++++
 2 files changed, 9 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index d86a8b4480..d0353259a5 100755
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -94,6 +94,7 @@ protected:
 		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
 
 		registrar.add("Wearing.Edit", boost::bind(&edit_outfit));
+		registrar.add("Wearing.ShowOriginal", boost::bind(show_item_original, mUUIDs.front()));
 		registrar.add("Wearing.TakeOff",
 					  boost::bind(&LLAppearanceMgr::removeItemsFromAvatar, LLAppearanceMgr::getInstance(), mUUIDs));
 		registrar.add("Wearing.Detach", 
@@ -144,6 +145,7 @@ protected:
 		menu->setItemVisible("take_off",	allow_take_off);
 		menu->setItemVisible("detach",		allow_detach);
 		menu->setItemVisible("edit_outfit_separator", allow_take_off || allow_detach);
+		menu->setItemVisible("show_original", mUUIDs.size() == 1);
 	}
 };
 
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
index 2d54e69601..44b2727671 100755
--- a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
+++ b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
@@ -27,4 +27,11 @@
         <on_click
          function="Wearing.Edit" />
     </menu_item_call>
+    <menu_item_call
+     label="Show Original"
+     layout="topleft"
+     name="show_original">
+        <on_click
+         function="Wearing.ShowOriginal" />
+    </menu_item_call>
 </context_menu>
-- 
cgit v1.2.3


From c1a56f9fb784b1f64ddae45c6dd5bb9f5ae6eecd Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Wed, 27 Apr 2016 10:58:44 +0300
Subject: MAINT-1057 FIXED Cannot get focus for or close build floater using
 toolbar button when editing attachments in no-build area

---
 indra/newview/app_settings/commands.xml | 2 +-
 indra/newview/lltoolmgr.cpp             | 9 +++++++--
 indra/newview/lltoolmgr.h               | 1 +
 3 files changed, 9 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml
index 2cd6638042..a0d3dc0f99 100755
--- a/indra/newview/app_settings/commands.xml
+++ b/indra/newview/app_settings/commands.xml
@@ -37,7 +37,7 @@
            tooltip_ref="Command_Build_Tooltip"
            execute_function="Build.Toggle"
            execute_parameters="build"
-           is_enabled_function="Build.Enabled"
+           is_enabled_function="Build.EnabledOrActive"
            is_enabled_parameters="build"
            is_running_function="Floater.IsOpen"
            is_running_parameters="build"
diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp
index 2f8e464b71..b0e3b5bf89 100755
--- a/indra/newview/lltoolmgr.cpp
+++ b/indra/newview/lltoolmgr.cpp
@@ -83,6 +83,7 @@ LLToolMgr::LLToolMgr()
 	// Not a panel, register these callbacks globally.
 	LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.Active", boost::bind(&LLToolMgr::inEdit, this));
 	LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.Enabled", boost::bind(&LLToolMgr::canEdit, this));
+	LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.EnabledOrActive", boost::bind(&LLToolMgr::buildEnabledOrActive, this));
 	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Build.Toggle", boost::bind(&LLToolMgr::toggleBuildMode, this, _2));
 	LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Marketplace.Enabled", boost::bind(&LLToolMgr::canAccessMarketplace, this));
 	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Marketplace.Toggle", boost::bind(&LLToolMgr::toggleMarketplace, this, _2));
@@ -264,17 +265,21 @@ bool LLToolMgr::canEdit()
 	return LLViewerParcelMgr::getInstance()->allowAgentBuild();
 }
 
+bool LLToolMgr::buildEnabledOrActive()
+{
+	return inEdit() || canEdit();
+}
+
 void LLToolMgr::toggleBuildMode(const LLSD& sdname)
 {
 	const std::string& param = sdname.asString();
 
+	LLFloaterReg::toggleInstanceOrBringToFront("build");
 	if (param == "build" && !canEdit())
 	{
 		return;
 	}
 
-	LLFloaterReg::toggleInstanceOrBringToFront("build");
-
 	bool build_visible = LLFloaterReg::instanceVisible("build");
 	if (build_visible)
 	{
diff --git a/indra/newview/lltoolmgr.h b/indra/newview/lltoolmgr.h
index a3c1045aac..e5b45750d9 100755
--- a/indra/newview/lltoolmgr.h
+++ b/indra/newview/lltoolmgr.h
@@ -54,6 +54,7 @@ public:
 
 	bool			inEdit();
 	bool			canEdit();
+	bool 			buildEnabledOrActive();
     bool            canAccessMarketplace();
 	void			toggleBuildMode(const LLSD& sdname);
 	void			toggleMarketplace(const LLSD& sdname);
-- 
cgit v1.2.3


From 8d9f1ca337bc566511e9f65f82228235857903a8 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Tue, 26 Apr 2016 18:21:55 +0300
Subject: MAINT-2022 FIXED "Copy" perform the same operation like "Copy UUID"
 in Gestures panel

---
 indra/newview/llfloatergesture.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index 7da65a9a7c..d842106146 100755
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -528,7 +528,8 @@ void LLFloaterGesture::onCopyPasteAction(const LLSD& command)
 			LLInventoryItem* item = gInventory.getItem(*it);
 			if(item  && item->getInventoryType() == LLInventoryType::IT_GESTURE)
 			{
-				LLClipboard::instance().addToClipboard(item->getUUID(),LLAssetType::AT_GESTURE);
+				LLWString item_name = utf8str_to_wstring(item->getName());
+				LLClipboard::instance().addToClipboard(item_name, 0, item_name.size());
 			}
 		}
 	}
-- 
cgit v1.2.3


From e05c7d70d4bb338426c29728659dd6ef75459e0d Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Thu, 28 Apr 2016 13:06:55 +0300
Subject: MAINT-1639 FIXED map seach clears itself when you are at the first
 place in map search

---
 indra/newview/llfloaterworldmap.cpp | 4 ++--
 indra/newview/llfloaterworldmap.h   | 2 +-
 indra/newview/lltracker.cpp         | 6 +++---
 indra/newview/lltracker.h           | 2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index ece3e10faa..c67feb8158 100755
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -963,10 +963,10 @@ F32 LLFloaterWorldMap::getDistanceToDestination(const LLVector3d &destination,
 }
 
 
-void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui)
+void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui, BOOL dest_reached)
 {
 	LLCtrlListInterface *list = mListSearchResults;
-	if (list)
+	if (list && (!dest_reached || (list->getItemCount() == 1)))
 	{
 		list->operateOnAll(LLCtrlListInterface::OP_DELETE);
 	}
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 7ce8dae9a9..c5801c8819 100755
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -94,7 +94,7 @@ public:
 	// A z_attenuation of 0.0f collapses the distance into the X-Y plane
 	F32				getDistanceToDestination(const LLVector3d& pos_global, F32 z_attenuation = 0.5f) const;
 
-	void			clearLocationSelection(BOOL clear_ui = FALSE);
+	void			clearLocationSelection(BOOL clear_ui = FALSE, BOOL dest_reached = FALSE);
 	void			clearAvatarSelection(BOOL clear_ui = FALSE);
 	void			clearLandmarkSelection(BOOL clear_ui = FALSE);
 
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index f611d0503f..b015cde45d 100755
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -183,7 +183,7 @@ void LLTracker::render3D()
 		F32 dist = gFloaterWorldMap->getDistanceToDestination(pos_global, 0.5f);
 		if (dist < DESTINATION_REACHED_RADIUS)
 		{
-			instance()->stopTrackingLocation();
+			instance()->stopTrackingLocation(FALSE,TRUE);
 		}
 		else
 		{
@@ -655,13 +655,13 @@ void LLTracker::stopTrackingLandmark(BOOL clear_ui)
 }
 
 
-void LLTracker::stopTrackingLocation(BOOL clear_ui)
+void LLTracker::stopTrackingLocation(BOOL clear_ui, BOOL dest_reached)
 {
 	purgeBeaconText();
 	mTrackedLocationName.assign("");
 	mIsTrackingLocation = FALSE;
 	mTrackedPositionGlobal.zeroVec();
-	gFloaterWorldMap->clearLocationSelection(clear_ui);
+	gFloaterWorldMap->clearLocationSelection(clear_ui, dest_reached);
 	mTrackingStatus = TRACKING_NOTHING;
 	mTrackingLocationType = LOCATION_NOTHING;
 }
diff --git a/indra/newview/lltracker.h b/indra/newview/lltracker.h
index 218f3430a6..a1c5052c1b 100755
--- a/indra/newview/lltracker.h
+++ b/indra/newview/lltracker.h
@@ -116,7 +116,7 @@ protected:
 
 	void stopTrackingAll(BOOL clear_ui = FALSE);
 	void stopTrackingAvatar(BOOL clear_ui = FALSE);
-	void stopTrackingLocation(BOOL clear_ui = FALSE);
+	void stopTrackingLocation(BOOL clear_ui = FALSE, BOOL dest_reached = FALSE);
 	void stopTrackingLandmark(BOOL clear_ui = FALSE);
 
 	void drawMarker(const LLVector3d& pos_global, const LLColor4& color);
-- 
cgit v1.2.3


From 5ec93df56a27af6763ae7fbd84bd6edd4145540b Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Wed, 27 Apr 2016 20:54:21 +0300
Subject: MAINT-438 UI/Color Settings opens non-functional "Debug Settings"
 floater when spawned before login

---
 indra/newview/skins/default/xui/en/menu_login.xml | 7 -------
 1 file changed, 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index 419ec359a6..dcf2da52f1 100755
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -140,13 +140,6 @@
              function="Advanced.ShowDebugSettings"
              parameter="all" />
         </menu_item_call>
-        <menu_item_call
-         label="UI/Color Settings"
-         name="UI/Color Settings">
-            <menu_item_call.on_click
-             function="Advanced.ShowDebugSettings"
-             parameter="skin" />
-        </menu_item_call>
         <menu_item_separator />
         <menu_item_call
          label="XUI Preview Tool"
-- 
cgit v1.2.3


From 18a23811112f7a0d511852550b0aa7a3fe2a5897 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Fri, 29 Apr 2016 19:32:20 +0300
Subject: MAINT-6370 Second Life uninstall does not remove registry keys
 handling secondlife protocols

---
 .../newview/installers/windows/installer_template.nsi |  11 +++++++++++
 indra/newview/installers/windows/lang_en-us.nsi       | Bin 8510 -> 9096 bytes
 2 files changed, 11 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index b8677fd9e4..89317f2793 100755
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -648,6 +648,7 @@ Function un.ProgramFiles
 %%DELETE_FILES%%
 
 # Optional/obsolete files.  Delete won't fail if they don't exist.
+Delete "$INSTDIR\autorun.bat"
 Delete "$INSTDIR\dronesettings.ini"
 Delete "$INSTDIR\message_template.msg"
 Delete "$INSTDIR\newview.pdb"
@@ -679,6 +680,16 @@ FOLDERFOUND:
 
 NOFOLDER:
 
+MessageBox MB_YESNO $(DeleteRegistryKeysMB) IDYES DeleteKeys IDNO NoDelete
+
+DeleteKeys:
+  DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Classes\x-grid-location-info"
+  DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Classes\secondlife"
+  DeleteRegKey HKEY_CLASSES_ROOT "x-grid-location-info"
+  DeleteRegKey HKEY_CLASSES_ROOT "secondlife"
+
+NoDelete:
+
 FunctionEnd
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi
index 343c312ddc..aa403a961c 100755
Binary files a/indra/newview/installers/windows/lang_en-us.nsi and b/indra/newview/installers/windows/lang_en-us.nsi differ
-- 
cgit v1.2.3


From b2fd39781833cf00c09d70704f13a8fa58428292 Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Wed, 4 May 2016 11:31:00 +0300
Subject: MAINT-6220 enable searching of the friend list with the classic
 username of the avatar.

---
 indra/newview/app_settings/settings.xml            | 22 ++++++++++++++++++++++
 indra/newview/llavatarlist.cpp                     | 17 +++++++++++++----
 indra/newview/llavatarlist.h                       |  4 ++++
 indra/newview/llavatarlistitem.cpp                 | 22 +++++++++++++++++++---
 indra/newview/llavatarlistitem.h                   |  4 ++++
 indra/newview/llpanelpeople.cpp                    | 21 +++++++++++++++++++++
 .../default/xui/en/menu_people_friends_view.xml    |  8 ++++++++
 .../default/xui/en/menu_people_nearby_view.xml     |  8 ++++++++
 8 files changed, 99 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 15f6fe5649..de5caad7fa 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11062,6 +11062,28 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>FriendsListHideUsernames</key>
+    <map>
+        <key>Comment</key>
+            <string>Show both Display name and Username in Friend list</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+    </map>
+    <key>NearbyListHideUsernames</key>
+    <map>
+        <key>Comment</key>
+            <string>Show both Display name and Username in Nearby list</string>
+        <key>Persist</key>
+            <integer>1</integer>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+    </map> 
     <key>NearbyListShowMap</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 8846d1317d..513f25e301 100755
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -140,6 +140,7 @@ LLAvatarList::LLAvatarList(const Params& p)
 , mShowProfileBtn(p.show_profile_btn)
 , mShowSpeakingIndicator(p.show_speaking_indicator)
 , mShowPermissions(p.show_permissions_granted)
+, mShowCompleteName(false)
 {
 	setCommitOnSelectionChange(true);
 
@@ -174,6 +175,11 @@ void LLAvatarList::setShowIcons(std::string param_name)
 	mShowIcons = gSavedSettings.getBOOL(mIconParamName);
 }
 
+std::string LLAvatarList::getAvatarName(LLAvatarName av_name)
+{
+	return mShowCompleteName? av_name.getCompleteName(false) : av_name.getDisplayName();
+}
+
 // virtual
 void LLAvatarList::draw()
 {
@@ -279,7 +285,7 @@ void LLAvatarList::refresh()
 		LLAvatarName av_name;
 		have_names &= LLAvatarNameCache::get(buddy_id, &av_name);
 
-		if (!have_filter || findInsensitive(av_name.getDisplayName(), mNameFilter))
+		if (!have_filter || findInsensitive(getAvatarName(av_name), mNameFilter))
 		{
 			if (nadded >= ADD_LIMIT)
 			{
@@ -297,7 +303,7 @@ void LLAvatarList::refresh()
 				}
 				else
 				{
-					std::string display_name = av_name.getDisplayName();
+					std::string display_name = getAvatarName(av_name);
 					addNewItem(buddy_id, 
 						display_name.empty() ? waiting_str : display_name, 
 						LLAvatarTracker::instance().isBuddyOnline(buddy_id));
@@ -327,7 +333,7 @@ void LLAvatarList::refresh()
 			const LLUUID& buddy_id = it->asUUID();
 			LLAvatarName av_name;
 			have_names &= LLAvatarNameCache::get(buddy_id, &av_name);
-			if (!findInsensitive(av_name.getDisplayName(), mNameFilter))
+			if (!findInsensitive(getAvatarName(av_name), mNameFilter))
 			{
 				removeItemByUUID(buddy_id);
 				modified = true;
@@ -381,6 +387,7 @@ void LLAvatarList::updateAvatarNames()
 	for( std::vector<LLPanel*>::const_iterator it = items.begin(); it != items.end(); it++)
 	{
 		LLAvatarListItem* item = static_cast<LLAvatarListItem*>(*it);
+		item->setShowCompleteName(mShowCompleteName);
 		item->updateAvatarName();
 	}
 	mNeedUpdateNames = false;
@@ -400,7 +407,7 @@ bool LLAvatarList::filterHasMatches()
 		// If name has not been loaded yet we consider it as a match.
 		// When the name will be loaded the filter will be applied again(in refresh()).
 
-		if (have_name && !findInsensitive(av_name.getDisplayName(), mNameFilter))
+		if (have_name && !findInsensitive(getAvatarName(av_name), mNameFilter))
 		{
 			continue;
 		}
@@ -434,6 +441,7 @@ S32 LLAvatarList::notifyParent(const LLSD& info)
 void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos)
 {
 	LLAvatarListItem* item = new LLAvatarListItem();
+	item->setShowCompleteName(mShowCompleteName);
 	// This sets the name as a side effect
 	item->setAvatarId(id, mSessionID, mIgnoreOnlineStatus);
 	item->setOnline(mIgnoreOnlineStatus ? true : is_online);
@@ -445,6 +453,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is
 	item->showSpeakingIndicator(mShowSpeakingIndicator);
 	item->setShowPermissions(mShowPermissions);
 
+
 	item->setDoubleClickCallback(boost::bind(&LLAvatarList::onItemDoubleClicked, this, _1, _2, _3, _4));
 
 	addItem(item, id, pos);
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 3542577ae3..1a672c279b 100755
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -83,6 +83,7 @@ public:
 	void setShowIcons(std::string param_name);
 	bool getIconsVisible() const { return mShowIcons; }
 	const std::string getIconParamName() const{return mIconParamName;}
+	std::string getAvatarName(LLAvatarName av_name);
 	virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 	/*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask );
 	/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
@@ -100,6 +101,8 @@ public:
 	void addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name);
 	void handleDisplayNamesOptionChanged();
 
+	void setShowCompleteName(bool show) { mShowCompleteName = show;};
+
 protected:
 	void refresh();
 
@@ -126,6 +129,7 @@ private:
 	bool mShowProfileBtn;
 	bool mShowSpeakingIndicator;
 	bool mShowPermissions;
+	bool mShowCompleteName;
 
 	LLTimer*				mLITUpdateTimer; // last interaction time update timer
 	std::string				mIconParamName;
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 3e6c817dd6..af3fac91bc 100755
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -77,8 +77,10 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/)
 	mShowInfoBtn(true),
 	mShowProfileBtn(true),
 	mShowPermissions(false),
+	mShowCompleteName(false),
 	mHovered(false),
-	mAvatarNameCacheConnection()
+	mAvatarNameCacheConnection(),
+	mGreyOutUsername("")
 {
 	if (not_from_ui_factory)
 	{
@@ -399,14 +401,28 @@ void LLAvatarListItem::updateAvatarName()
 
 void LLAvatarListItem::setNameInternal(const std::string& name, const std::string& highlight)
 {
-	LLTextUtil::textboxSetHighlightedVal(mAvatarName, mAvatarNameStyle, name, highlight);
+    if(mShowCompleteName && highlight.empty())
+    {
+        LLTextUtil::textboxSetGreyedVal(mAvatarName, mAvatarNameStyle, name, mGreyOutUsername);
+    }
+    else
+    {
+        LLTextUtil::textboxSetHighlightedVal(mAvatarName, mAvatarNameStyle, name, highlight);
+    }
 }
 
 void LLAvatarListItem::onAvatarNameCache(const LLAvatarName& av_name)
 {
 	mAvatarNameCacheConnection.disconnect();
 
-	setAvatarName(av_name.getDisplayName());
+	mGreyOutUsername = "";
+	std::string name_string = mShowCompleteName? av_name.getCompleteName(false) : av_name.getDisplayName();
+	if(av_name.getCompleteName() != av_name.getUserName())
+	{
+	    mGreyOutUsername = "[ " + av_name.getUserName(true) + " ]";
+	    LLStringUtil::toLower(mGreyOutUsername);
+	}
+	setAvatarName(name_string);
 	setAvatarToolTip(av_name.getUserName());
 
 	//requesting the list to resort
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index 7ef35a746e..36d18114aa 100755
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -106,6 +106,7 @@ public:
 	void setShowPermissions(bool show) { mShowPermissions = show; };
 	void showLastInteractionTime(bool show);
 	void setAvatarIconVisible(bool visible);
+	void setShowCompleteName(bool show) { mShowCompleteName = show;};
 	
 	const LLUUID& getAvatarId() const;
 	std::string getAvatarName() const;
@@ -218,6 +219,9 @@ private:
 	/// true when the mouse pointer is hovering over this item
 	bool mHovered;
 	
+	bool mShowCompleteName;
+	std::string mGreyOutUsername;
+
 	void fetchAvatarName();
 	boost::signals2::connection mAvatarNameCacheConnection;
 
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 73b928f014..bc177abc57 100755
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -611,9 +611,11 @@ BOOL LLPanelPeople::postBuild()
 	mOnlineFriendList->setNoItemsCommentText(getString("no_friends_online"));
 	mOnlineFriendList->setShowIcons("FriendsListShowIcons");
 	mOnlineFriendList->showPermissions("FriendsListShowPermissions");
+	mOnlineFriendList->setShowCompleteName(!gSavedSettings.getBOOL("FriendsListHideUsernames"));
 	mAllFriendList->setNoItemsCommentText(getString("no_friends"));
 	mAllFriendList->setShowIcons("FriendsListShowIcons");
 	mAllFriendList->showPermissions("FriendsListShowPermissions");
+	mAllFriendList->setShowCompleteName(!gSavedSettings.getBOOL("FriendsListHideUsernames"));
 
 	LLPanel* nearby_tab = getChild<LLPanel>(NEARBY_TAB_NAME);
 	nearby_tab->setVisibleCallback(boost::bind(&Updater::setActive, mNearbyListUpdater, _2));
@@ -622,6 +624,7 @@ BOOL LLPanelPeople::postBuild()
 	mNearbyList->setNoItemsMsg(getString("no_one_near"));
 	mNearbyList->setNoFilteredItemsMsg(getString("no_one_filtered_near"));
 	mNearbyList->setShowIcons("NearbyListShowIcons");
+	mNearbyList->setShowCompleteName(!gSavedSettings.getBOOL("NearbyListHideUsernames"));
 	mMiniMap = (LLNetMap*)getChildView("Net Map",true);
 	mMiniMap->setToolTipMsg(gSavedSettings.getBOOL("DoubleClickTeleport") ? 
 		getString("AltMiniMapToolTipMsg") :	getString("MiniMapToolTipMsg"));
@@ -1342,6 +1345,16 @@ void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata)
 		mAllFriendList->showPermissions(show_permissions);
 		mOnlineFriendList->showPermissions(show_permissions);
 	}
+	else if (chosen_item == "view_usernames")
+	{
+		bool hide_usernames = !gSavedSettings.getBOOL("FriendsListHideUsernames");
+		gSavedSettings.setBOOL("FriendsListHideUsernames", hide_usernames);
+
+		mAllFriendList->setShowCompleteName(!hide_usernames);
+		mAllFriendList->handleDisplayNamesOptionChanged();
+		mOnlineFriendList->setShowCompleteName(!hide_usernames);
+		mOnlineFriendList->handleDisplayNamesOptionChanged();
+	}
 	}
 
 void LLPanelPeople::onGroupsViewSortMenuItemClicked(const LLSD& userdata)
@@ -1374,6 +1387,14 @@ void LLPanelPeople::onNearbyViewSortMenuItemClicked(const LLSD& userdata)
 	{
 		setSortOrder(mNearbyList, E_SORT_BY_DISTANCE);
 	}
+	else if (chosen_item == "view_usernames")
+	{
+	    bool hide_usernames = !gSavedSettings.getBOOL("NearbyListHideUsernames");
+	    gSavedSettings.setBOOL("NearbyListHideUsernames", hide_usernames);
+
+	    mNearbyList->setShowCompleteName(!hide_usernames);
+	    mNearbyList->handleDisplayNamesOptionChanged();
+	}
 }
 
 bool LLPanelPeople::onNearbyViewSortMenuItemCheck(const LLSD& userdata)
diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
index 8790fde7c5..b5a4b87acd 100755
--- a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
@@ -40,6 +40,14 @@
      function="CheckControl"
      parameter="FriendsListShowPermissions" />
   </menu_item_check>
+  <menu_item_check name="view_usernames" label="Hide usernames">
+    <menu_item_check.on_click
+     function="People.Friends.ViewSort.Action"
+     parameter="view_usernames" />
+    <menu_item_check.on_check
+     function="CheckControl"
+     parameter="FriendsListHideUsernames" />
+  </menu_item_check>
   <menu_item_check name="view_conversation" label="View Conversation Log...">
     <menu_item_check.on_check
      function="Floater.Visible"
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
index da88ca9f4d..a9f6b8045d 100755
--- a/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
@@ -50,4 +50,12 @@
          function="ToggleControl"
          parameter="NearbyListShowMap" />
     </menu_item_check>
+    <menu_item_check name="view_usernames" label="Hide usernames">
+        <menu_item_check.on_click
+         function="People.Nearby.ViewSort.Action"
+         parameter="view_usernames" />
+        <menu_item_check.on_check
+         function="CheckControl"
+         parameter="NearbyListHideUsernames" />
+    </menu_item_check>
 </toggleable_menu>
-- 
cgit v1.2.3


From eae82c8e4794e2d8374dd8d70547b00c5ac4f300 Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Wed, 4 May 2016 14:59:22 +0300
Subject: MAINT-1513 FIXED Label of new folder doesn't disappear while closing
 Inventory by hot hey

---
 indra/newview/llpanelmaininventory.cpp | 9 +++++++++
 indra/newview/llpanelmaininventory.h   | 1 +
 2 files changed, 10 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 973e1f7705..c779ba5cdd 100755
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -1152,6 +1152,15 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
 	}
 }
 
+void LLPanelMainInventory::onVisibilityChange( BOOL new_visibility )
+{
+	if(!new_visibility)
+	{
+		mMenuAdd->setVisible(FALSE);
+		getActivePanel()->getRootFolder()->finishRenamingItem();
+	}
+}
+
 bool LLPanelMainInventory::isSaveTextureEnabled(const LLSD& userdata)
 {
 	LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index 21f0ca0cae..290e2e5f47 100755
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -72,6 +72,7 @@ public:
 									   std::string& tooltip_msg);
 	/*virtual*/ void changed(U32);
 	/*virtual*/ void draw();
+	/*virtual*/ void 	onVisibilityChange ( BOOL new_visibility );
 
 	LLInventoryPanel* getPanel() { return mActivePanel; }
 	LLInventoryPanel* getActivePanel() { return mActivePanel; }
-- 
cgit v1.2.3


From 51cf02086a5f172bb49872945aa66e72fd5db561 Mon Sep 17 00:00:00 2001
From: AndreyL ProductEngine <alihatskiy@productengine.com>
Date: Fri, 6 May 2016 15:00:19 +0300
Subject: MAINT-6376 Disable loading surface textures in the wireframe mode

---
 indra/newview/llviewertexture.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index c5e07f009f..565e83811f 100755
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1874,7 +1874,8 @@ bool LLViewerFetchedTexture::updateFetch()
 	static LLCachedControl<bool> textures_decode_disabled(gSavedSettings,"TextureDecodeDisabled", false);
 	static LLCachedControl<F32>  sCameraMotionThreshold(gSavedSettings,"TextureCameraMotionThreshold", 0.2);
 	static LLCachedControl<S32>  sCameraMotionBoost(gSavedSettings,"TextureCameraMotionBoost", 3);
-	if(textures_decode_disabled)
+	if(textures_decode_disabled ||
+	   (gUseWireframe && mBoostLevel < LLGLTexture::BOOST_AVATAR_BAKED_SELF)) // don't fetch the surface textures in wireframe mode
 	{
 		return false;
 	}
-- 
cgit v1.2.3


From 3d68b80bd3f981717ec60b4ba71de9e917a4d073 Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Fri, 20 May 2016 16:55:46 +0300
Subject: MAINT-1057 Allow to close build floater via Build menu

---
 indra/newview/skins/default/xui/en/menu_viewer.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 0a492fb37b..b189d1038f 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -806,7 +806,7 @@
             <menu_item_check.on_click
              function="Build.Toggle" />
             <menu_item_check.on_enable
-             function="Build.Enabled" />
+             function="Build.EnabledOrActive" />
        </menu_item_check>
        <menu
           create_jump_keys="true"
-- 
cgit v1.2.3


From efa716b5fcaa0f0faa4003e072747898a223e983 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Wed, 18 May 2016 19:29:31 +0300
Subject: MAINT-2129 "Block" button doesn't become disabled

---
 indra/newview/llchathistory.cpp                          | 14 ++++++++++++--
 indra/newview/llpanelprofile.cpp                         | 10 ++++++++++
 indra/newview/lltoastnotifypanel.cpp                     |  1 +
 indra/newview/skins/default/xui/en/menu_object_icon.xml  | 15 +++++++++++++--
 indra/newview/skins/default/xui/en/menu_url_objectim.xml |  7 +++++++
 5 files changed, 43 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 9564951986..5d2997688f 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -156,6 +156,10 @@ public:
 			LLFloaterSidePanelContainer::showPanel("people", "panel_people",
 				LLSD().with("people_panel_tab_name", "blocked_panel").with("blocked_to_select", getAvatarId()));
 		}
+		else if (level == "unblock")
+		{
+			LLMuteList::getInstance()->remove(LLMute(getAvatarId(), mFrom, LLMute::OBJECT));
+		}
 		else if (level == "map")
 		{
 			std::string url = "secondlife://" + mObjectData["slurl"].asString();
@@ -169,10 +173,14 @@ public:
 
 	}
 
-    bool onObjectIconContextMenuItemEnabled(const LLSD& userdata)
+    bool onObjectIconContextMenuItemVisible(const LLSD& userdata)
     {
         std::string level = userdata.asString();
         if (level == "is_blocked")
+        {
+            return LLMuteList::getInstance()->isMuted(getAvatarId(), mFrom, LLMute::flagTextChat);
+        }
+        else if (level == "not_blocked")
         {
             return !LLMuteList::getInstance()->isMuted(getAvatarId(), mFrom, LLMute::flagTextChat);
         }
@@ -285,7 +293,7 @@ public:
 		registrar.add("AvatarIcon.Action", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemClicked, this, _2));
 		registrar_enable.add("AvatarIcon.Check", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemChecked, this, _2));
 		registrar.add("ObjectIcon.Action", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemClicked, this, _2));
-		registrar_enable.add("ObjectIcon.Enable", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemEnabled, this, _2));
+		registrar_enable.add("ObjectIcon.Visible", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemVisible, this, _2));
 
 		LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_avatar_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 		mPopupMenuHandleAvatar = menu->getHandle();
@@ -730,6 +738,8 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p)
 	editor_params.trusted_content = false;
 	mEditor = LLUICtrlFactory::create<LLTextEditor>(editor_params, this);
 	mEditor->setIsFriendCallback(LLAvatarActions::isFriend);
+	mEditor->setIsObjectBlockedCallback(boost::bind(&LLMuteList::isMuted, LLMuteList::getInstance(), _1, _2, 0));
+
 }
 
 LLSD LLChatHistory::getValue() const
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index e795e7eedb..184238c40c 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -176,6 +176,16 @@ public:
 			return true;
 		}
 
+		if (verb == "unblock")
+		{
+			if (params.size() > 2)
+			{
+				const std::string object_name = params[2].asString();
+				LLMute mute(avatar_id, object_name, LLMute::OBJECT);
+				LLMuteList::getInstance()->remove(mute);
+			}
+			return true;
+		}
 		return false;
 	}
 };
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 1a8ade5b10..e3a856be5c 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -325,6 +325,7 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images )
     mTextBox->setContentTrusted(is_content_trusted);
     mTextBox->setValue(mNotification->getMessage());
 	mTextBox->setIsFriendCallback(LLAvatarActions::isFriend);
+    mTextBox->setIsObjectBlockedCallback(boost::bind(&LLMuteList::isMuted, LLMuteList::getInstance(), _1, _2, 0));
 
     // add buttons for a script notification
     if (mIsTip)
diff --git a/indra/newview/skins/default/xui/en/menu_object_icon.xml b/indra/newview/skins/default/xui/en/menu_object_icon.xml
index 93093014eb..5137aea72a 100644
--- a/indra/newview/skins/default/xui/en/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/en/menu_object_icon.xml
@@ -23,8 +23,19 @@
         <menu_item_call.on_click
          function="ObjectIcon.Action"
          parameter="block" />
-        <menu_item_call.on_enable
-         function="ObjectIcon.Enable"
+        <menu_item_call.on_visible
+         function="ObjectIcon.Visible"
+         parameter="not_blocked" />
+    </menu_item_call>
+    <menu_item_call
+     label="Unblock"
+     layout="topleft"
+     name="Unblock">
+        <menu_item_call.on_click
+         function="ObjectIcon.Action"
+         parameter="unblock" />
+        <menu_item_call.on_visible
+         function="ObjectIcon.Visible"
          parameter="is_blocked" />
     </menu_item_call>
     <menu_item_separator
diff --git a/indra/newview/skins/default/xui/en/menu_url_objectim.xml b/indra/newview/skins/default/xui/en/menu_url_objectim.xml
index b9d003b841..41d40b389a 100644
--- a/indra/newview/skins/default/xui/en/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_objectim.xml
@@ -16,6 +16,13 @@
         <menu_item_call.on_click
          function="Url.Block" />
     </menu_item_call>
+    <menu_item_call
+     label="Unblock"
+     layout="topleft"
+     name="unblock_object">
+        <menu_item_call.on_click
+         function="Url.Unblock" />
+    </menu_item_call>
     <menu_item_separator
      layout="topleft" />
     <menu_item_call
-- 
cgit v1.2.3


From 709c15dc233134370425687cfd429b48d6205afa Mon Sep 17 00:00:00 2001
From: Ansariel <none@none>
Date: Tue, 10 May 2016 19:35:41 +0200
Subject: Display correct attempt for requesting region capabilities at startup

---
 indra/newview/llviewerregion.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index cac2ed8585..899ab3a371 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -264,17 +264,18 @@ void LLViewerRegionImpl::requestBaseCapabilitiesCoro(U64 regionHandle)
         }
 
         S32 id = ++mHttpResponderID;
-        ++mSeedCapAttempts;
 
         LLSD capabilityNames = LLSD::emptyArray();
         buildCapabilityNames(capabilityNames);
 
         LL_INFOS("AppInit", "Capabilities") << "Requesting seed from " << url 
-            << " (attempt #" << mSeedCapAttempts << ")" << LL_ENDL;
+            << " (attempt #" << mSeedCapAttempts + 1 << ")" << LL_ENDL;
 
         regionp = NULL;
         result = httpAdapter->postAndSuspend(httpRequest, url, capabilityNames);
 
+        ++mSeedCapAttempts;
+
         regionp = LLWorld::getInstance()->getRegionFromHandle(regionHandle);
         if (!regionp) //region was removed
         {
-- 
cgit v1.2.3


From 54bbf95f26c7412a0febb9279981c820d2a45c3d Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Wed, 11 May 2016 18:33:50 +0300
Subject: MAINT-5635 PSYS_SRC_MAX_AGE breaks when replacing a particle system
 without it

---
 indra/newview/llviewerpartsource.cpp | 10 ++++++++++
 1 file changed, 10 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp
index 7efa821bbf..814060f4f2 100755
--- a/indra/newview/llviewerpartsource.cpp
+++ b/indra/newview/llviewerpartsource.cpp
@@ -441,10 +441,20 @@ LLPointer<LLViewerPartSourceScript> LLViewerPartSourceScript::unpackPSS(LLViewer
 			return NULL;
 		}
 
+		F32 prev_max_age = pssp->mPartSysData.mMaxAge;
+		F32 prev_start_age = pssp->mPartSysData.mStartAge;
 		if (!pssp->mPartSysData.unpackBlock(block_num))
 		{
 			return NULL;
 		}
+		else if (pssp->mPartSysData.mMaxAge
+				 && (prev_max_age != pssp->mPartSysData.mMaxAge || prev_start_age != pssp->mPartSysData.mStartAge))
+		{
+			// reusing existing pss, so reset time to allow particles to start again
+			pssp->mLastUpdateTime = 0.f;
+			pssp->mLastPartTime = 0.f;
+		}
+
 		if (pssp->mPartSysData.mTargetUUID.notNull())
 		{
 			LLViewerObject *target_objp = gObjectList.findObject(pssp->mPartSysData.mTargetUUID);
-- 
cgit v1.2.3


From 87ca1fc3d9ec4650147882f7b8cd85c38c983066 Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Fri, 13 May 2016 13:33:14 +0300
Subject: MAINT-6400 Make the region "Object Bonus" setting safer

---
 indra/newview/llfloaterregioninfo.cpp              | 52 +++++++++++++++++++++-
 indra/newview/llfloaterregioninfo.h                |  7 +++
 .../newview/skins/default/xui/en/notifications.xml | 13 ++++++
 3 files changed, 71 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 4eacd728c3..843dbbf25e 100755
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -412,6 +412,11 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
 	panel->getChild<LLUICtrl>("object_bonus_spin")->setValue(LLSD(object_bonus_factor) );
 	panel->getChild<LLUICtrl>("access_combo")->setValue(LLSD(sim_access) );
 
+	LLPanelRegionGeneralInfo* panel_general = LLFloaterRegionInfo::getPanelGeneral();
+	if (panel)
+	{
+		panel_general->setObjBonusFactor(object_bonus_factor);
+	}
 
  	// detect teen grid for maturity
 
@@ -464,6 +469,16 @@ LLPanelEstateCovenant* LLFloaterRegionInfo::getPanelCovenant()
 	return panel;
 }
 
+// static
+LLPanelRegionGeneralInfo* LLFloaterRegionInfo::getPanelGeneral()
+{
+	LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+	if (!floater) return NULL;
+	LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
+	LLPanelRegionGeneralInfo* panel = (LLPanelRegionGeneralInfo*)tab->getChild<LLPanel>("General");
+	return panel;
+}
+
 // static
 LLPanelRegionTerrainInfo* LLFloaterRegionInfo::getPanelRegionTerrain()
 {
@@ -717,7 +732,42 @@ BOOL LLPanelRegionGeneralInfo::postBuild()
 	childSetAction("im_btn", onClickMessage, this);
 //	childSetAction("manage_telehub_btn", onClickManageTelehub, this);
 
-	return LLPanelRegionInfo::postBuild();
+	LLUICtrl* apply_btn = findChild<LLUICtrl>("apply_btn");
+	if (apply_btn)
+	{
+		apply_btn->setCommitCallback(boost::bind(&LLPanelRegionGeneralInfo::onBtnSet, this));
+	}
+
+	refresh();
+	return TRUE;
+}
+
+void LLPanelRegionGeneralInfo::onBtnSet()
+{
+	if(mObjBonusFactor == getChild<LLUICtrl>("object_bonus_spin")->getValue().asReal())
+	{
+		if (sendUpdate())
+		{
+			disableButton("apply_btn");
+		}
+	}
+	else
+	{
+		LLNotificationsUtil::add("ChangeObjectBonusFactor", LLSD(), LLSD(), boost::bind(&LLPanelRegionGeneralInfo::onChangeObjectBonus, this, _1, _2));
+	}
+}
+
+bool LLPanelRegionGeneralInfo::onChangeObjectBonus(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if (option == 0)
+	{
+		if (sendUpdate())
+		{
+			disableButton("apply_btn");
+		}
+	}
+	return false;
 }
 
 void LLPanelRegionGeneralInfo::onClickKick()
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 46f2b42137..dbb0ad05e9 100755
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -95,6 +95,7 @@ public:
 	static LLPanelEstateCovenant* getPanelCovenant();
 	static LLPanelRegionTerrainInfo* getPanelRegionTerrain();
 	static LLPanelRegionExperiences* getPanelExperiences();
+	static LLPanelRegionGeneralInfo* getPanelGeneral();
 
 	// from LLPanel
 	virtual void refresh();
@@ -183,6 +184,9 @@ public:
 	// LLPanel
 	virtual BOOL postBuild();
 	
+	void onBtnSet();
+	void setObjBonusFactor(F32 object_bonus_factor) {mObjBonusFactor = object_bonus_factor;}
+
 protected:
 	virtual BOOL sendUpdate();
 	void onClickKick();
@@ -191,6 +195,9 @@ protected:
 	bool onKickAllCommit(const LLSD& notification, const LLSD& response);
 	static void onClickMessage(void* userdata);
 	bool onMessageCommit(const LLSD& notification, const LLSD& response);
+	bool onChangeObjectBonus(const LLSD& notification, const LLSD& response);
+
+	F32 mObjBonusFactor;
 
 };
 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 589c05de99..f9059627db 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3542,6 +3542,19 @@ Teleport all Residents in this region home?
      yestext="OK"/>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="ChangeObjectBonusFactor"
+   type="alertmodal">
+    Lowering the object bonus after builds have been established in a region may cause objects to be returned or deleted. Are you sure you want to change object bonus?
+    <tag>confirm</tag>
+    <usetemplate
+     ignoretext="Confirm changing object bonus factor"
+     name="okcancelignore"
+     notext="Cancel"
+     yestext="OK"/>
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="EstateObjectReturn"
-- 
cgit v1.2.3


From 8243301b3ff6c90db6d1fb53baf5050666d75d9a Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Fri, 13 May 2016 14:16:46 +0300
Subject: MAINT-6408 FIXED viewer should allow password field entry greater
 than 16 bytes

---
 indra/newview/skins/default/xui/en/panel_login.xml       | 2 +-
 indra/newview/skins/default/xui/en/panel_login_first.xml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 183ae2e824..ae8e78a9d6 100755
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -67,7 +67,7 @@
     follows="left|top"
     height="32"
     left_pad="-11"
-    max_length_bytes="16"
+    max_length_bytes="64"
     text_pad_left="8"
     name="password_edit"
     label="Password"
diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml
index d1416ece82..dc6e27a1ee 100644
--- a/indra/newview/skins/default/xui/en/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/en/panel_login_first.xml
@@ -124,7 +124,7 @@
             width="200"
             height="32"
             left="220"
-            max_length_bytes="16"
+            max_length_bytes="64"
             name="password_edit"
             label="Password"
             text_pad_left="8"
-- 
cgit v1.2.3


From b756b47d08d028a40d0a49b11755d31f47efe46d Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Fri, 13 May 2016 19:42:27 +0300
Subject: MAINT-6383 SLT timestamp in "About second life" floater

---
 indra/newview/llappviewer.cpp                  | 6 ++++++
 indra/newview/llstartup.cpp                    | 8 +++++---
 indra/newview/skins/default/xui/en/strings.xml | 1 +
 3 files changed, 12 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 45306dcff4..b6ba200d0d 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3440,6 +3440,12 @@ std::string LLAppViewer::getViewerInfoString() const
 	{
 		support << '\n' << LLTrans::getString("AboutTraffic", args);
 	}
+
+	// SLT timestamp
+	LLSD substitution;
+	substitution["datetime"] = (S32)time(NULL);//(S32)time_corrected();
+	support << "\n" << LLTrans::getString("AboutTime", substitution);
+
 	return support.str();
 }
 
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 88fbd233b8..723b4992bb 100755
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -687,6 +687,11 @@ bool idle_startup()
 			gRememberPassword = gSavedSettings.getBOOL("RememberPassword");
 			show_connect_box = TRUE;
 		}
+
+		//setup map of datetime strings to codes and slt & local time offset from utc
+		// *TODO: Does this need to be here?
+		LLStringOps::setupDatetimeInfo(false);
+
 		// Go to the next startup state
 		LLStartUp::setStartupState( STATE_BROWSER_INIT );
 		return FALSE;
@@ -1139,9 +1144,6 @@ bool idle_startup()
 						LLNotificationsUtil::add("ErrorMessage", args, LLSD(), login_alert_done);
 					}
 				}
-				//setup map of datetime strings to codes and slt & local time offset from utc
-				// *TODO: Does this need to be here?
-				LLStringOps::setupDatetimeInfo (false);
 				transition_back_to_login_panel(emsg.str());
 				show_connect_box = true;
 			}
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index ff98d2f109..1e498024f1 100755
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -54,6 +54,7 @@ LLCEFLib/CEF Version: [LLCEFLIB_VERSION]
 Voice Server Version: [VOICE_VERSION]
 	</string>
 	<string name="AboutTraffic">Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)</string>
+	<string name="AboutTime">[month, datetime, slt] [day, datetime, slt] [year, datetime, slt] [hour, datetime, slt]:[min, datetime, slt]:[second,datetime,slt]</string>
 	<string name="ErrorFetchingServerReleaseNotesURL">Error fetching server release notes URL.</string>
 	
 	<!--  progress -->
-- 
cgit v1.2.3


From e3afb1fdbadd3d6cdae7c261e7a975f3bf9faa89 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Mon, 16 May 2016 17:50:09 +0300
Subject: MAINT-5935 server timestamp

---
 indra/newview/llstartup.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 723b4992bb..a2c8e7772e 100755
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -3312,6 +3312,13 @@ bool process_login_success_response()
 		{
 			time_t now = time(NULL);
 			gUTCOffset = (server_utc_time - now);
+
+			// Print server timestamp
+			LLSD substitution;
+			substitution["datetime"] = (S32)server_utc_time;
+			std::string timeStr = "[month, datetime, slt] [day, datetime, slt] [year, datetime, slt] [hour, datetime, slt]:[min, datetime, slt]:[second, datetime, slt]";
+			LLStringUtil::format(timeStr, substitution);
+			LL_INFOS("AppInit") << "Server SLT timestamp: " << timeStr << ". Server-viewer time offset before correction: " << gUTCOffset << "s" << LL_ENDL;
 		}
 	}
 
-- 
cgit v1.2.3


From 58e9a5919952cbd0a5b2112bf5c72db09c4750ec Mon Sep 17 00:00:00 2001
From: Glenn Glazer <coyot@lindenlab.com>
Date: Mon, 16 May 2016 14:49:40 -0700
Subject: fix for maint-6413: add channel to summary.json

---
 indra/newview/CMakeLists.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index bb745bcb43..5b39f622a6 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1310,9 +1310,10 @@ source_group("CMake Rules" FILES ViewerInstall.cmake)
 # the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
 # the summary.json file is created for the benefit of the TeamCity builds, where
 #   it is used to provide descriptive information to the build results page
+# channel added to summary.json for programmatic access to that by VMP SL-321
 add_custom_target(generate_viewer_version ALL
                   COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
-                  COMMAND printf '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}"}' > ${CMAKE_BINARY_DIR}/summary.json
+                  COMMAND printf '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}","Channel":"${VIEWER_CHANNEL}"}' > ${CMAKE_BINARY_DIR}/summary.json
                   COMMENT Generating viewer_version.txt for manifest processing
                   )
 
-- 
cgit v1.2.3


From 191c2aec49491c74a6ce9b23a813dc89d63f2c6a Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Wed, 18 May 2016 13:15:01 +0300
Subject: MAINT-6377 Nearby chat toasts cover the conversation floater.

---
 indra/newview/llfloaterimnearbychathandler.cpp | 25 ++++++++++++++++++++++---
 indra/newview/llfloaterimsessiontab.cpp        |  6 ++++++
 indra/newview/llfloaterimsessiontab.h          |  2 ++
 3 files changed, 30 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterimnearbychathandler.cpp b/indra/newview/llfloaterimnearbychathandler.cpp
index 1f85c5ac1b..9fd731ed56 100755
--- a/indra/newview/llfloaterimnearbychathandler.cpp
+++ b/indra/newview/llfloaterimnearbychathandler.cpp
@@ -601,12 +601,31 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg,
 			toast_msg = chat_msg.mText;
 		}
 
+		bool chat_overlaps = false;
+		if(nearby_chat->getChatHistory())
+		{
+			LLRect chat_rect = nearby_chat->getChatHistory()->calcScreenRect();
+			for (std::list<LLView*>::const_iterator child_iter = gFloaterView->getChildList()->begin();
+				 child_iter != gFloaterView->getChildList()->end(); ++child_iter)
+			{
+				LLView *view = *child_iter;
+				const LLRect& rect = view->getRect();
+				if(view->isInVisibleChain() && (rect.overlaps(chat_rect)))
+				{
+					if(!nearby_chat->getChatHistory()->hasAncestor(view))
+					{
+						chat_overlaps = true;
+					}
+					break;
+				}
+			}
+		}
 		//Don't show nearby toast, if conversation is visible and selected
 		if ((nearby_chat->hasFocus()) ||
 			(LLFloater::isVisible(nearby_chat) && nearby_chat->isTornOff() && !nearby_chat->isMinimized()) ||
-		    ((im_box->getSelectedSession().isNull() &&
-				((LLFloater::isVisible(im_box) && !im_box->isMinimized() && im_box->isFrontmost())
-						|| (LLFloater::isVisible(nearby_chat) && !nearby_chat->isMinimized() && nearby_chat->isFrontmost())))))
+		    ((im_box->getSelectedSession().isNull() && !chat_overlaps &&
+				((LLFloater::isVisible(im_box) && !nearby_chat->isTornOff() && !im_box->isMinimized())
+						|| (LLFloater::isVisible(nearby_chat) && nearby_chat->isTornOff() && !nearby_chat->isMinimized())))))
 		{
 			if(nearby_chat->isMessagePaneExpanded())
 			{
diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp
index 357b635594..2cd94c592a 100755
--- a/indra/newview/llfloaterimsessiontab.cpp
+++ b/indra/newview/llfloaterimsessiontab.cpp
@@ -1094,6 +1094,12 @@ void LLFloaterIMSessionTab::saveCollapsedState()
 		gSavedPerAccountSettings.setBOOL("NearbyChatIsNotCollapsed", isMessagePaneExpanded());
 	}
 }
+
+LLView* LLFloaterIMSessionTab::getChatHistory()
+{
+	return mChatHistory;
+}
+
 BOOL LLFloaterIMSessionTab::handleKeyHere(KEY key, MASK mask )
 {
 	BOOL handled = FALSE;
diff --git a/indra/newview/llfloaterimsessiontab.h b/indra/newview/llfloaterimsessiontab.h
index e7b05a584b..1b4922fd73 100755
--- a/indra/newview/llfloaterimsessiontab.h
+++ b/indra/newview/llfloaterimsessiontab.h
@@ -103,6 +103,8 @@ public:
 	void restoreFloater();
 	void saveCollapsedState();
 
+	LLView* getChatHistory();
+
 protected:
 
 	// callback for click on any items of the visual states menu
-- 
cgit v1.2.3


From e795fee86448970881066af95de7eac8e4847d14 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Tue, 17 May 2016 17:05:59 +0300
Subject: MAINT-6409 texture_list xml file should be in cache.

---
 indra/newview/llviewertexturelist.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 5cfd04b4c1..766164ebf8 100755
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -182,7 +182,7 @@ void LLViewerTextureList::doPreloadImages()
 
 static std::string get_texture_list_name()
 {
-	return gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "texture_list_" + gSavedSettings.getString("LoginLocation") + ".xml");
+	return gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "texture_list_" + gSavedSettings.getString("LoginLocation") + "." + gDirUtilp->getUserName() + ".xml");
 }
 
 void LLViewerTextureList::doPrefetchImages()
@@ -287,7 +287,7 @@ void LLViewerTextureList::shutdown()
 			break;
 	}
 	
-	if (count > 0 && !gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "").empty())
+	if (count > 0 && !gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "").empty())
 	{
 		std::string filename = get_texture_list_name();
 		llofstream file;
-- 
cgit v1.2.3


From a382dcfb8dbc26fa7e73647bf996e9d166bfce6d Mon Sep 17 00:00:00 2001
From: Glenn Glazer <coyot@lindenlab.com>
Date: Tue, 17 May 2016 10:52:59 -0700
Subject: maint-6413: use file write as printf inserts escape chars

---
 indra/newview/CMakeLists.txt | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 5b39f622a6..34e1565707 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1310,13 +1310,14 @@ source_group("CMake Rules" FILES ViewerInstall.cmake)
 # the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
 # the summary.json file is created for the benefit of the TeamCity builds, where
 #   it is used to provide descriptive information to the build results page
-# channel added to summary.json for programmatic access to that by VMP SL-321
 add_custom_target(generate_viewer_version ALL
                   COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
-                  COMMAND printf '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}","Channel":"${VIEWER_CHANNEL}"}' > ${CMAKE_BINARY_DIR}/summary.json
                   COMMENT Generating viewer_version.txt for manifest processing
                   )
 
+#Channel added for VMP programmatic access.  MAINT-6413/SL-321
+file(WRITE ${CMAKE_BINARY_DIR}/summary.json '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}","Channel","${VIEWER_CHANNEL}"}')
+
 set_source_files_properties(
    llversioninfo.cpp tests/llversioninfo_test.cpp 
    PROPERTIES
-- 
cgit v1.2.3


From e8773a72cb63f693b00100de4e02ab073f531b4f Mon Sep 17 00:00:00 2001
From: Glenn Glazer <coyot@lindenlab.com>
Date: Tue, 17 May 2016 16:05:37 -0700
Subject: maint-6413: use configure_file instead of write(file ...)

---
 indra/newview/CMakeLists.txt  | 20 +++++++++++---------
 indra/newview/summary.json.in |  5 +++++
 2 files changed, 16 insertions(+), 9 deletions(-)
 create mode 100644 indra/newview/summary.json.in

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 34e1565707..c49321e906 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1307,16 +1307,10 @@ set(viewer_HEADER_FILES
 
 source_group("CMake Rules" FILES ViewerInstall.cmake)
 
-# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
-# the summary.json file is created for the benefit of the TeamCity builds, where
-#   it is used to provide descriptive information to the build results page
-add_custom_target(generate_viewer_version ALL
-                  COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
-                  COMMENT Generating viewer_version.txt for manifest processing
-                  )
-
 #Channel added for VMP programmatic access.  MAINT-6413/SL-321
-file(WRITE ${CMAKE_BINARY_DIR}/summary.json '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}","Channel","${VIEWER_CHANNEL}"}')
+set(SUMMARY_VERSION "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
+set(SUMMARY_CHANNEL "${VIEWER_CHANNEL}")
+configure_file(summary.json.in ${CMAKE_BINARY_DIR}/summary.json @ONLY)
 
 set_source_files_properties(
    llversioninfo.cpp tests/llversioninfo_test.cpp 
@@ -1325,6 +1319,14 @@ set_source_files_properties(
    COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}" # see BuildVersion.cmake
    )
 
+# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
+# the summary.json file is created for the benefit of the TeamCity builds, where
+#   it is used to provide descriptive information to the build results page
+add_custom_target(generate_viewer_version ALL
+                  COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
+                  COMMENT Generating viewer_version.txt for manifest processing
+                  )
+
 if (DARWIN)
   LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp)
   LIST(APPEND viewer_SOURCE_FILES llappviewermacosx-objc.mm)
diff --git a/indra/newview/summary.json.in b/indra/newview/summary.json.in
new file mode 100644
index 0000000000..e33cc2b7e7
--- /dev/null
+++ b/indra/newview/summary.json.in
@@ -0,0 +1,5 @@
+{
+"Type":"viewer",
+"Version":"@SUMMARY_VERSION@",
+"Channel":"@SUMMARY_CHANNEL@"
+}
-- 
cgit v1.2.3


From d3de134da047460c68ffd7cc732e592049a1e83d Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Wed, 18 May 2016 17:17:32 +0300
Subject: MAINT-6409 invisiprims should be preloaded

---
 indra/newview/lldrawpoolterrain.cpp   | 17 ++---------------
 indra/newview/llviewertexturelist.cpp | 17 +++++++++++++++--
 2 files changed, 17 insertions(+), 17 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
index 33675bd261..b716a76543 100755
--- a/indra/newview/lldrawpoolterrain.cpp
+++ b/indra/newview/lldrawpoolterrain.cpp
@@ -62,28 +62,15 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) :
 	LLFacePool(POOL_TERRAIN),
 	mTexturep(texturep)
 {
-	U32 format = GL_ALPHA8;
-	U32 int_format = GL_ALPHA;
-
 	// Hack!
 	sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale");
 	sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
-	mAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga", 
-													FTT_LOCAL_FILE,
-													TRUE, LLGLTexture::BOOST_UI, 
-													LLViewerTexture::FETCHED_TEXTURE,
-													format, int_format,
-													LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
+	mAlphaRampImagep = LLViewerTextureManager::getFetchedTexture(IMG_ALPHA_GRAD);
 
 	//gGL.getTexUnit(0)->bind(mAlphaRampImagep.get());
 	mAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP);
 
-	m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", 
-													FTT_LOCAL_FILE,
-													TRUE, LLGLTexture::BOOST_UI, 
-													LLViewerTexture::FETCHED_TEXTURE,
-													format, int_format,
-													LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
+	m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTexture(IMG_ALPHA_GRAD_2D);
 
 	//gGL.getTexUnit(0)->bind(m2DAlphaRampImagep.get());
 	m2DAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP);
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 766164ebf8..5150fc9ade 100755
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -171,13 +171,26 @@ void LLViewerTextureList::doPreloadImages()
 		mImagePreloads.insert(image);
 	}
 	image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
-		0,0,LLUUID("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"));
+		0, 0, IMG_TRANSPARENT);
 	if (image) 
 	{
 		image->setAddressMode(LLTexUnit::TAM_WRAP);
 		mImagePreloads.insert(image);
 	}
-	
+	image = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
+		GL_ALPHA8, GL_ALPHA, IMG_ALPHA_GRAD);
+	if (image)
+	{
+		image->setAddressMode(LLTexUnit::TAM_CLAMP);
+		mImagePreloads.insert(image);
+	}
+	image = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
+		GL_ALPHA8, GL_ALPHA, IMG_ALPHA_GRAD_2D);
+	if (image)
+	{
+		image->setAddressMode(LLTexUnit::TAM_CLAMP);
+		mImagePreloads.insert(image);
+	}
 }
 
 static std::string get_texture_list_name()
-- 
cgit v1.2.3


From 213bcf6bb30f9e2d4eb8bb6cbd200c94bae29b6f Mon Sep 17 00:00:00 2001
From: Rider Linden <rider@lindenlab.com>
Date: Thu, 19 May 2016 11:47:23 -0700
Subject: MAIN-6403: If a version mismatch occurs when requesting the COF,
 request a new appearance update from the simhost to update the viewer COF
 version.

---
 indra/newview/llappearancemgr.cpp | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index cc676550ab..6c510f13c8 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -60,6 +60,8 @@
 #include "llcoros.h"
 #include "lleventcoro.h"
 
+#include "llavatarpropertiesprocessor.h"
+
 #if LL_MSVC
 // disable boost::lexical_cast warning
 #pragma warning (disable:4702)
@@ -68,7 +70,7 @@
 namespace 
 {
     const S32   BAKE_RETRY_MAX_COUNT = 5;
-    const F32   BAKE_RETRY_TIMEOUT = 2.0F;
+    const F32   BAKE_RETRY_TIMEOUT = 4.0F;
 }
 
 // *TODO$: LLInventoryCallback should be deprecated to conform to the new boost::bind/coroutine model.
@@ -3493,10 +3495,15 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro()
             // on multiple machines.
             if (result.has("expected"))
             {
-
                 S32 expectedCofVersion = result["expected"].asInteger();
                 LL_WARNS("Avatar") << "Server expected " << expectedCofVersion << " as COF version" << LL_ENDL;
 
+                // Force an update texture request for ourself.  The message will return
+                // through the UDP and be handled in LLVOAvatar::processAvatarAppearance
+                // this should ensure that we receive a new canonical COF from the sim
+                // host. Hopefully it will return before the timeout.
+                LLAvatarPropertiesProcessor::getInstance()->sendAvatarTexturesRequest(gAgent.getID());
+
                 bRetry = true;
                 // Wait for a 1/2 second before trying again.  Just to keep from asking too quickly.
                 if (++retryCount > BAKE_RETRY_MAX_COUNT)
-- 
cgit v1.2.3


From 602c9bc04ab5c611bcac51c0c33d5ad34d06a16f Mon Sep 17 00:00:00 2001
From: AndreyL ProductEngine <alihatskiy@productengine.com>
Date: Fri, 20 May 2016 02:12:26 +0300
Subject: MAINT-6317 Restored the fix after a conflict resolution

---
 indra/newview/llviewertexturelist.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 93650ddb1a..d7080051da 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -191,6 +191,13 @@ void LLViewerTextureList::doPreloadImages()
 		image->setAddressMode(LLTexUnit::TAM_CLAMP);
 		mImagePreloads.insert(image);
 	}
+
+	LLPointer<LLImageRaw> img_blak_square_tex(new LLImageRaw(2, 2, 3));
+	memset(img_blak_square_tex->getData(), 0, img_blak_square_tex->getDataSize());
+	LLPointer<LLViewerFetchedTexture> img_blak_square(new LLViewerFetchedTexture(img_blak_square_tex, FTT_DEFAULT, FALSE));
+	gBlackSquareID = img_blak_square->getID();
+	img_blak_square->setUnremovable(TRUE);
+	addImage(img_blak_square, TEX_LIST_STANDARD);
 }
 
 static std::string get_texture_list_name()
-- 
cgit v1.2.3


From 61a5c943ba33494e3d2ee60296e56932c7aa362a Mon Sep 17 00:00:00 2001
From: Ansariel <none@none>
Date: Sun, 22 May 2016 20:32:27 +0200
Subject: MAINT-6432 Fix defaults for RenderAvatarMaxComplexity The 'all'
 section must be set to the value for high end machines as the minimum of
 high-end and recommended setting will be applied

---
 indra/newview/featuretable.txt       | 2 +-
 indra/newview/featuretable_linux.txt | 2 +-
 indra/newview/featuretable_mac.txt   | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index be8ea2bab9..e99b94f150 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -32,7 +32,7 @@ RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
 RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarMaxNonImpostors 1   16
-RenderAvatarMaxComplexity          1	80000
+RenderAvatarMaxComplexity          1	350000
 RenderAvatarVP				1	1
 RenderAutoMuteSurfaceAreaLimit     1	1000.0
 RenderCubeMap				1	1
diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index ca6c00951d..801a622e93 100644
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -32,7 +32,7 @@ RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
 RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarMaxNonImpostors 1   16
-RenderAvatarMaxComplexity          1	80000
+RenderAvatarMaxComplexity          1	350000
 RenderAvatarVP				1	1
 RenderAutoMuteSurfaceAreaLimit     1	1000.0
 RenderCubeMap				1	1
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index ea69b088f9..1f891ee4d7 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -32,7 +32,7 @@ RenderAvatarCloth				1	1
 RenderAvatarLODFactor			1	1.0
 RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarMaxNonImpostors     1   16
-RenderAvatarMaxComplexity              1	80000
+RenderAvatarMaxComplexity              1	350000
 RenderAvatarVP					1	1
 RenderAutoMuteSurfaceAreaLimit     1	1000.0
 RenderCubeMap				1	1
-- 
cgit v1.2.3


From 8edfdc617df6e282570521a9076d077699e632e5 Mon Sep 17 00:00:00 2001
From: AndreyL ProductEngine <alihatskiy@productengine.com>
Date: Mon, 23 May 2016 02:23:03 +0300
Subject: MAINT-6424 Disable the delete button for empty graphics presets list
 Fixed related notifications after improper merge as well

---
 indra/newview/llfloaterdeleteprefpreset.cpp          |  2 ++
 indra/newview/skins/default/xui/en/notifications.xml | 12 +++++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterdeleteprefpreset.cpp b/indra/newview/llfloaterdeleteprefpreset.cpp
index 7dedbbf984..c0888db3bc 100644
--- a/indra/newview/llfloaterdeleteprefpreset.cpp
+++ b/indra/newview/llfloaterdeleteprefpreset.cpp
@@ -53,6 +53,8 @@ BOOL LLFloaterDeletePrefPreset::postBuild()
 	getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterDeletePrefPreset::onBtnCancel, this));
 	LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeletePrefPreset::onPresetsListChange, this));
 
+	onPresetsListChange(); // ensure that delete button is disabled when the list is empty
+
 	return TRUE;
 }
 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 7eaeb6bd07..dfde38bc5f 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -8314,8 +8314,18 @@ Appearance has been saved to XML to [PATH]
     <notification icon="notifytip.tga"
 		name="AppearanceToXMLFailed" type="notifytip">
 Failed to save appearance to XML.
+  </notification>
+
+  <notification
+    icon="notifytip.tga"
+    name="PresetNotSaved"
+    type="notifytip">
+Error saving preset [NAME].
+  </notification>
+
+  <notification
     icon="notifytip.tga"
-	name="PresetNotDeleted"
+    name="PresetNotDeleted"
     type="notifytip">
 Error deleting preset [NAME].
   </notification>
-- 
cgit v1.2.3


From 8c458778717666c7be7c6e0f0b19f28deb54b50f Mon Sep 17 00:00:00 2001
From: Glenn Glazer <coyot@lindenlab.com>
Date: Mon, 23 May 2016 12:05:53 -0700
Subject: backout 354345

---
 indra/newview/CMakeLists.txt | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index c49321e906..334a21a12e 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1307,10 +1307,9 @@ set(viewer_HEADER_FILES
 
 source_group("CMake Rules" FILES ViewerInstall.cmake)
 
-#Channel added for VMP programmatic access.  MAINT-6413/SL-321
-set(SUMMARY_VERSION "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
-set(SUMMARY_CHANNEL "${VIEWER_CHANNEL}")
-configure_file(summary.json.in ${CMAKE_BINARY_DIR}/summary.json @ONLY)
+# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
+# the summary.json file is created for the benefit of the TeamCity builds, where
+#   it is used to provide descriptive information to the build results page
 
 set_source_files_properties(
    llversioninfo.cpp tests/llversioninfo_test.cpp 
-- 
cgit v1.2.3


From 9c28c06f1da98ba42d4d5546a2b2cdb7b042c13e Mon Sep 17 00:00:00 2001
From: Glenn Glazer <coyot@lindenlab.com>
Date: Mon, 23 May 2016 12:08:59 -0700
Subject: backout 354346 / e63c00cf654a and 354347 / e4bfe3ee05a6

---
 indra/newview/CMakeLists.txt  | 13 +++++--------
 indra/newview/summary.json.in |  5 -----
 2 files changed, 5 insertions(+), 13 deletions(-)
 delete mode 100644 indra/newview/summary.json.in

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 334a21a12e..4412b06d38 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1310,6 +1310,11 @@ source_group("CMake Rules" FILES ViewerInstall.cmake)
 # the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
 # the summary.json file is created for the benefit of the TeamCity builds, where
 #   it is used to provide descriptive information to the build results page
+add_custom_target(generate_viewer_version ALL
+                  COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
+                  COMMENT Generating viewer_version.txt for manifest processing
+                  )
+
 
 set_source_files_properties(
    llversioninfo.cpp tests/llversioninfo_test.cpp 
@@ -1318,14 +1323,6 @@ set_source_files_properties(
    COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}" # see BuildVersion.cmake
    )
 
-# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
-# the summary.json file is created for the benefit of the TeamCity builds, where
-#   it is used to provide descriptive information to the build results page
-add_custom_target(generate_viewer_version ALL
-                  COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
-                  COMMENT Generating viewer_version.txt for manifest processing
-                  )
-
 if (DARWIN)
   LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp)
   LIST(APPEND viewer_SOURCE_FILES llappviewermacosx-objc.mm)
diff --git a/indra/newview/summary.json.in b/indra/newview/summary.json.in
deleted file mode 100644
index e33cc2b7e7..0000000000
--- a/indra/newview/summary.json.in
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-"Type":"viewer",
-"Version":"@SUMMARY_VERSION@",
-"Channel":"@SUMMARY_CHANNEL@"
-}
-- 
cgit v1.2.3


From 999a949b52b50d5330c717fde19af3931e256f11 Mon Sep 17 00:00:00 2001
From: Glenn Glazer <coyot@lindenlab.com>
Date: Mon, 23 May 2016 13:49:26 -0700
Subject: debug version args

---
 indra/newview/CMakeLists.txt     | 9 +--------
 indra/newview/viewer_manifest.py | 3 +++
 2 files changed, 4 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 4412b06d38..6734f62137 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1307,14 +1307,7 @@ set(viewer_HEADER_FILES
 
 source_group("CMake Rules" FILES ViewerInstall.cmake)
 
-# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
-# the summary.json file is created for the benefit of the TeamCity builds, where
-#   it is used to provide descriptive information to the build results page
-add_custom_target(generate_viewer_version ALL
-                  COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
-                  COMMENT Generating viewer_version.txt for manifest processing
-                  )
-
+#summary.json creation moved to viewer_manifest.py MAINT-6413
 
 set_source_files_properties(
    llversioninfo.cpp tests/llversioninfo_test.cpp 
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 1c77cf805e..6365de0024 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -122,6 +122,9 @@ class ViewerManifest(LLManifest):
                     settings_install['CmdLineGridChoice']['Value'] = self.grid()
                     print "Set CmdLineGridChoice in settings_install.xml to '%s'" % self.grid()
 
+                #COYOT: channel: self.channel_with_pkg_suffix()
+                print "COYOT: version %s" % '.'.join(self.args['version'])
+
                 # put_in_file(src=) need not be an actual pathname; it
                 # only needs to be non-empty
                 self.put_in_file(llsd.format_pretty_xml(settings_install),
-- 
cgit v1.2.3


From c7413e51b6286a003d6629108d2757b5ff973c2b Mon Sep 17 00:00:00 2001
From: Rider Linden <rider@lindenlab.com>
Date: Mon, 23 May 2016 14:40:43 -0700
Subject: MAINT-6403: in the case of a version mismatch between the viewer's
 local accounting and the AIS reported. Override with the AIS version.
 simplify the appearance update code to account for new versioning. Fix
 spelling of descendant

---
 indra/newview/llaisapi.cpp               | 18 ++++++++----
 indra/newview/llappearancemgr.h          |  2 ++
 indra/newview/llavatarrendernotifier.cpp |  7 +++--
 indra/newview/llvoavatar.cpp             | 47 +++++++++++++++++++++++++++-----
 4 files changed, 58 insertions(+), 16 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp
index 3e3d5c7456..98a2bb436c 100644
--- a/indra/newview/llaisapi.cpp
+++ b/indra/newview/llaisapi.cpp
@@ -838,11 +838,11 @@ void AISUpdate::parseEmbeddedCategories(const LLSD& categories)
 
 void AISUpdate::doUpdate()
 {
-	// Do version/descendent accounting.
+	// Do version/descendant accounting.
 	for (std::map<LLUUID,S32>::const_iterator catit = mCatDescendentDeltas.begin();
 		 catit != mCatDescendentDeltas.end(); ++catit)
 	{
-		LL_DEBUGS("Inventory") << "descendent accounting for " << catit->first << LL_ENDL;
+		LL_DEBUGS("Inventory") << "descendant accounting for " << catit->first << LL_ENDL;
 
 		const LLUUID cat_id(catit->first);
 		// Don't account for update if we just created this category.
@@ -859,13 +859,13 @@ void AISUpdate::doUpdate()
 			continue;
 		}
 
-		// If we have a known descendent count, set that now.
+		// If we have a known descendant count, set that now.
 		LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id);
 		if (cat)
 		{
 			S32 descendent_delta = catit->second;
 			S32 old_count = cat->getDescendentCount();
-			LL_DEBUGS("Inventory") << "Updating descendent count for "
+			LL_DEBUGS("Inventory") << "Updating descendant count for "
 								   << cat->getName() << " " << cat_id
 								   << " with delta " << descendent_delta << " from "
 								   << old_count << " to " << (old_count+descendent_delta) << LL_ENDL;
@@ -896,7 +896,7 @@ void AISUpdate::doUpdate()
 		LLUUID category_id(update_it->first);
 		LLPointer<LLViewerInventoryCategory> new_category = update_it->second;
 		// Since this is a copy of the category *before* the accounting update, above,
-		// we need to transfer back the updated version/descendent count.
+		// we need to transfer back the updated version/descendant count.
 		LLViewerInventoryCategory* curr_cat = gInventory.getCategory(new_category->getUUID());
 		if (!curr_cat)
 		{
@@ -961,7 +961,13 @@ void AISUpdate::doUpdate()
 		{
 			LL_WARNS() << "Possible version mismatch for category " << cat->getName()
 					<< ", viewer version " << cat->getVersion()
-					<< " server version " << version << LL_ENDL;
+					<< " AIS version " << version << " !!!Adjusting local version!!!" <<  LL_ENDL;
+
+            // the AIS version should be considered the true version. Adjust 
+            // our local category model to reflect this version number.  Otherwise 
+            // it becomes possible to get stuck with the viewer being out of 
+            // sync with the inventory system.
+            cat->setVersion(version);
 		}
 	}
 
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index bf181cb4ad..f401df0949 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -36,6 +36,8 @@
 #include "llviewerinventory.h"
 #include "llcorehttputil.h"
 
+#define  APPEARANCEBAKE_AS_IN_AIS_QUEUE 1
+
 class LLWearableHoldingPattern;
 class LLInventoryCallback;
 class LLOutfitUnLockTimer;
diff --git a/indra/newview/llavatarrendernotifier.cpp b/indra/newview/llavatarrendernotifier.cpp
index a13e142e16..e2ffdec874 100644
--- a/indra/newview/llavatarrendernotifier.cpp
+++ b/indra/newview/llavatarrendernotifier.cpp
@@ -63,7 +63,7 @@ mLatestAgentComplexity(0),
 mLatestOverLimitPct(0.0f),
 mShowOverLimitAgents(false),
 mNotifyOutfitLoading(false),
-mLastCofVersion(-1),
+mLastCofVersion(LLViewerInventoryCategory::VERSION_UNKNOWN),
 mLastOutfitRezStatus(-1),
 mLastSkeletonSerialNum(-1)
 {
@@ -207,8 +207,9 @@ void LLAvatarRenderNotifier::updateNotificationState()
         mLastSkeletonSerialNum = gAgentAvatarp->mLastSkeletonSerialNum;
     }
     else if (mLastCofVersion >= 0
-        && (mLastCofVersion != gAgentAvatarp->mLastUpdateRequestCOFVersion
-            || mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum))
+//        && (mLastCofVersion != gAgentAvatarp->mLastUpdateRequestCOFVersion // RIDER: Check this!
+        && (mLastCofVersion != LLAppearanceMgr::instance().getCOFVersion()
+        || mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum))
     {
         // version mismatch in comparison to previous outfit - outfit changed
         mNotifyOutfitLoading = true;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index b9dd43f061..2a91d47868 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -7313,7 +7313,6 @@ bool resolve_appearance_version(const LLAppearanceMessageContents& contents, S32
 //-----------------------------------------------------------------------------
 void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
 {
-    static S32 largestSelfCOFSeen(LLViewerInventoryCategory::VERSION_UNKNOWN);
 	LL_DEBUGS("Avatar") << "starts" << LL_ENDL;
 	
 	bool enable_verbose_dumps = gSavedSettings.getBOOL("DebugAvatarAppearanceMessage");
@@ -7348,6 +7347,36 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
 		return;
 	}
 
+    S32 thisAppearanceVersion(contents.mCOFVersion);
+    if (isSelf())
+    {   // In the past this was considered to be the canonical COF version, 
+        // that is no longer the case.  The canonical version is maintained 
+        // by the AIS code and should match the COF version there. Even so,
+        // we must prevent rolling this one backwards backwards or processing 
+        // stale versions.
+
+        S32 aisCOFVersion(LLAppearanceMgr::instance().getCOFVersion());
+
+        LL_INFOS("Avatar") << "handling self appearance message #" << thisAppearanceVersion <<
+            " (highest seen #" << mLastUpdateReceivedCOFVersion <<
+            ") (AISCOF=#" << aisCOFVersion << ")" << LL_ENDL;
+
+        if (mLastUpdateReceivedCOFVersion >= thisAppearanceVersion)
+        {
+            LL_WARNS("Avatar") << "Stale appearance received #" << thisAppearanceVersion <<
+                " attempt to roll back from #" << mLastUpdateReceivedCOFVersion <<
+                "... dropping." << LL_ENDL;
+            return;
+        }
+        if (isEditingAppearance())
+        {
+            LL_DEBUGS("Avatar") << "Editing appearance.  Dropping appearance update." << LL_ENDL;
+            return;
+        }
+
+    }
+
+#if 0
 	S32 this_update_cof_version = contents.mCOFVersion;
 	S32 last_update_request_cof_version = mLastUpdateRequestCOFVersion;
 
@@ -7385,6 +7414,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
 		LL_DEBUGS("Avatar") << "ignoring appearance message while in appearance edit" << LL_ENDL;
 		return;
 	}
+#endif
 
 	// SUNSHINE CLEANUP - is this case OK now?
 	S32 num_params = contents.mParamWeights.size();
@@ -7399,13 +7429,16 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
 	}
 
 	// No backsies zone - if we get here, the message should be valid and usable, will be processed.
-    LL_INFOS("Avatar") << "Processing appearance message version " << this_update_cof_version << LL_ENDL;
+    LL_INFOS("Avatar") << "Processing appearance message version " << thisAppearanceVersion << LL_ENDL;
 
-	// Note:
-	// RequestAgentUpdateAppearanceResponder::onRequestRequested()
-	// assumes that cof version is only updated with server-bake
-	// appearance messages.
-	mLastUpdateReceivedCOFVersion = this_update_cof_version;
+    if (isSelf())
+    {
+        // Note:
+        // RequestAgentUpdateAppearanceResponder::onRequestRequested()
+        // assumes that cof version is only updated with server-bake
+        // appearance messages.
+        mLastUpdateReceivedCOFVersion = thisAppearanceVersion;
+    }
 		
     if (applyParsedTEMessage(contents.mTEContents) > 0 && isChanged(TEXTURE))
     {
-- 
cgit v1.2.3


From ce760e80c492d1c3e13306a1d06aa734b4d829a9 Mon Sep 17 00:00:00 2001
From: Glenn Glazer <coyot@lindenlab.com>
Date: Tue, 24 May 2016 11:43:57 -0700
Subject: MAINT-6413: write summary.json from viewer_manifest.py, remove
 facility from cmake

---
 indra/newview/CMakeLists.txt     |  5 +++++
 indra/newview/viewer_manifest.py | 15 ++++++++++-----
 2 files changed, 15 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 6734f62137..64b7ff34f6 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1308,6 +1308,11 @@ set(viewer_HEADER_FILES
 source_group("CMake Rules" FILES ViewerInstall.cmake)
 
 #summary.json creation moved to viewer_manifest.py MAINT-6413
+# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
+add_custom_target(generate_viewer_version ALL
+                  COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
+                  COMMENT Generating viewer_version.txt for manifest processing
+                  )
 
 set_source_files_properties(
    llversioninfo.cpp tests/llversioninfo_test.cpp 
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 6365de0024..f3d89bb866 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -30,6 +30,7 @@ import sys
 import os.path
 import shutil
 import errno
+import json
 import re
 import tarfile
 import time
@@ -122,9 +123,6 @@ class ViewerManifest(LLManifest):
                     settings_install['CmdLineGridChoice']['Value'] = self.grid()
                     print "Set CmdLineGridChoice in settings_install.xml to '%s'" % self.grid()
 
-                #COYOT: channel: self.channel_with_pkg_suffix()
-                print "COYOT: version %s" % '.'.join(self.args['version'])
-
                 # put_in_file(src=) need not be an actual pathname; it
                 # only needs to be non-empty
                 self.put_in_file(llsd.format_pretty_xml(settings_install),
@@ -184,9 +182,16 @@ class ViewerManifest(LLManifest):
                 self.path("*.tga")
                 self.end_prefix("local_assets")
 
-            # Files in the newview/ directory
+            # File in the newview/ directory
             self.path("gpu_table.txt")
-            # The summary.json file gets left in the build directory by newview/CMakeLists.txt.
+
+            #summary.json.  Standard with exception handling is fine.  If we can't open a new file for writing, we have worse problems
+            summary_dict = {"Type":"viewer","Version":'.'.join(self.args['version']),"Channel":self.channel_with_pkg_suffix()}
+            with open(os.path.join(os.pardir,'summary.json'), 'w') as summary_handle:
+                json.dump(summary_dict,summary_handle)
+
+            #we likely no longer need the test, since we will throw an exception above, but belt and suspenders and we get the
+            #return code for free.
             if not self.path2basename(os.pardir, "summary.json"):
                 print "No summary.json file"
 
-- 
cgit v1.2.3


From 6f4d9a232175202f79ecd1c1a2df30805de4e2d8 Mon Sep 17 00:00:00 2001
From: AndreyL ProductEngine <alihatskiy@productengine.com>
Date: Wed, 25 May 2016 03:29:53 +0300
Subject: MAINT-6424 Reverted disabling of the "Delete preset" button

---
 indra/newview/llfloaterdeleteprefpreset.cpp | 2 --
 1 file changed, 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterdeleteprefpreset.cpp b/indra/newview/llfloaterdeleteprefpreset.cpp
index c0888db3bc..7dedbbf984 100644
--- a/indra/newview/llfloaterdeleteprefpreset.cpp
+++ b/indra/newview/llfloaterdeleteprefpreset.cpp
@@ -53,8 +53,6 @@ BOOL LLFloaterDeletePrefPreset::postBuild()
 	getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterDeletePrefPreset::onBtnCancel, this));
 	LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeletePrefPreset::onPresetsListChange, this));
 
-	onPresetsListChange(); // ensure that delete button is disabled when the list is empty
-
 	return TRUE;
 }
 
-- 
cgit v1.2.3


From 110c0658b7272a09f09fa3d8b024062bf2cc4dce Mon Sep 17 00:00:00 2001
From: AndreyL ProductEngine <alihatskiy@productengine.com>
Date: Wed, 25 May 2016 03:47:23 +0300
Subject: MAINT-6413 Buildfix

---
 indra/newview/CMakeLists.txt | 1 -
 1 file changed, 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index e80b428f80..dce0ea73cd 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1319,7 +1319,6 @@ source_group("CMake Rules" FILES ViewerInstall.cmake)
 # the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt"
            "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\n")
-           "{\"Type\":\"viewer\",\"Version\":\"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\"}\n")
 
 set_source_files_properties(
    llversioninfo.cpp tests/llversioninfo_test.cpp 
-- 
cgit v1.2.3


From 67f8d57927f845cfb35783a1678c0e3d2ad51b61 Mon Sep 17 00:00:00 2001
From: ruslantproductengine <ruslantproductengine@lindenlab.com>
Date: Tue, 24 May 2016 15:17:41 +0300
Subject: MAINT-6216 avatars are sometimes invisible BUG-10330 Sitting avatars
 are sometimes invisible

---
 indra/newview/llvoavatar.cpp | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 672d153e51..cdc7e20c2c 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -8145,6 +8145,7 @@ U32 LLVOAvatar::getPartitionType() const
 //static
 void LLVOAvatar::updateImpostors()
 {
+	LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
 	LLCharacter::sAllowInstancesChange = FALSE;
 
 	for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
-- 
cgit v1.2.3


From 26b1c020c8a8d240144dadae1285c14213cb1232 Mon Sep 17 00:00:00 2001
From: Rider Linden <rider@lindenlab.com>
Date: Tue, 24 May 2016 13:03:36 -0700
Subject: MAINT-6403: Updated a couple comments and dropped a couple warning
 levels back down to DEBUG.

---
 indra/newview/llaisapi.cpp               |  5 +++-
 indra/newview/llappearancemgr.cpp        | 17 +----------
 indra/newview/llappearancemgr.h          |  6 ----
 indra/newview/llavatarrendernotifier.cpp |  1 -
 indra/newview/llvoavatar.cpp             | 51 ++++----------------------------
 5 files changed, 11 insertions(+), 69 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp
index 98a2bb436c..648212177b 100644
--- a/indra/newview/llaisapi.cpp
+++ b/indra/newview/llaisapi.cpp
@@ -966,7 +966,10 @@ void AISUpdate::doUpdate()
             // the AIS version should be considered the true version. Adjust 
             // our local category model to reflect this version number.  Otherwise 
             // it becomes possible to get stuck with the viewer being out of 
-            // sync with the inventory system.
+            // sync with the inventory system.  Under normal circumstances 
+            // inventory COF is maintained on the viewer through calls to 
+            // LLInventoryModel::accountForUpdate when a changing operation 
+            // is performed.  This occasionally gets out of sync however.
             cat->setVersion(version);
 		}
 	}
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 6c510f13c8..a1d9786321 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -70,7 +70,7 @@
 namespace 
 {
     const S32   BAKE_RETRY_MAX_COUNT = 5;
-    const F32   BAKE_RETRY_TIMEOUT = 4.0F;
+    const F32   BAKE_RETRY_TIMEOUT = 2.0F;
 }
 
 // *TODO$: LLInventoryCallback should be deprecated to conform to the new boost::bind/coroutine model.
@@ -3361,15 +3361,9 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()
 {
     if (!mOutstandingAppearanceBakeRequest)
     {
-#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
         mRerequestAppearanceBake = false;
         LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this, _1);
         LLCoprocedureManager::instance().enqueueCoprocedure("AIS", "LLAppearanceMgr::serverAppearanceUpdateCoro", proc);
-#else
-        LLCoros::instance().launch("serverAppearanceUpdateCoro", 
-            boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this));
-
-#endif
     }
     else
     {
@@ -3377,17 +3371,8 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()
     }
 }
 
-#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
 void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter)
-#else
-void LLAppearanceMgr::serverAppearanceUpdateCoro()
-#endif
 {
-#ifndef APPEARANCEBAKE_AS_IN_AIS_QUEUE
-    LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(
-        new LLCoreHttpUtil::HttpCoroutineAdapter("serverAppearanceUpdateCoro", LLCore::HttpRequest::DEFAULT_POLICY_ID));
-#endif
-
     mRerequestAppearanceBake = false;
     if (!gAgent.getRegion())
     {
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index f401df0949..7069da7352 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -36,8 +36,6 @@
 #include "llviewerinventory.h"
 #include "llcorehttputil.h"
 
-#define  APPEARANCEBAKE_AS_IN_AIS_QUEUE 1
-
 class LLWearableHoldingPattern;
 class LLInventoryCallback;
 class LLOutfitUnLockTimer;
@@ -230,11 +228,7 @@ public:
 
 
 private:
-#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
     void serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter);
-#else
-    void serverAppearanceUpdateCoro();
-#endif
 
     static void debugAppearanceUpdateCOF(const LLSD& content);
 
diff --git a/indra/newview/llavatarrendernotifier.cpp b/indra/newview/llavatarrendernotifier.cpp
index e2ffdec874..24934fdb73 100644
--- a/indra/newview/llavatarrendernotifier.cpp
+++ b/indra/newview/llavatarrendernotifier.cpp
@@ -207,7 +207,6 @@ void LLAvatarRenderNotifier::updateNotificationState()
         mLastSkeletonSerialNum = gAgentAvatarp->mLastSkeletonSerialNum;
     }
     else if (mLastCofVersion >= 0
-//        && (mLastCofVersion != gAgentAvatarp->mLastUpdateRequestCOFVersion // RIDER: Check this!
         && (mLastCofVersion != LLAppearanceMgr::instance().getCOFVersion()
         || mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum))
     {
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 2a91d47868..672d153e51 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -7357,7 +7357,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
 
         S32 aisCOFVersion(LLAppearanceMgr::instance().getCOFVersion());
 
-        LL_INFOS("Avatar") << "handling self appearance message #" << thisAppearanceVersion <<
+        LL_DEBUGS("Avatar") << "handling self appearance message #" << thisAppearanceVersion <<
             " (highest seen #" << mLastUpdateReceivedCOFVersion <<
             ") (AISCOF=#" << aisCOFVersion << ")" << LL_ENDL;
 
@@ -7376,46 +7376,6 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
 
     }
 
-#if 0
-	S32 this_update_cof_version = contents.mCOFVersion;
-	S32 last_update_request_cof_version = mLastUpdateRequestCOFVersion;
-
-	if( isSelf() )
-	{
-		LL_DEBUGS("Avatar") << "this_update_cof_version " << this_update_cof_version
-				<< " last_update_request_cof_version " << last_update_request_cof_version
-				<<  " my_cof_version " << LLAppearanceMgr::instance().getCOFVersion() << LL_ENDL;
-
-        if (largestSelfCOFSeen > this_update_cof_version)
-        {
-            LL_WARNS("Avatar") << "Already processed appearance for COF version " <<
-                largestSelfCOFSeen << ", discarding appearance with COF " << this_update_cof_version << LL_ENDL;
-            return;
-        }
-        largestSelfCOFSeen = this_update_cof_version;
-
-	}
-	else
-	{
-		LL_DEBUGS("Avatar") << "appearance message received" << LL_ENDL;
-	}
-
-	// Check for stale update.
-	if (isSelf()
-		&& (this_update_cof_version < last_update_request_cof_version))
-	{
-		LL_WARNS() << "Stale appearance update, wanted version " << last_update_request_cof_version
-				<< ", got " << this_update_cof_version << LL_ENDL;
-		return;
-	}
-
-	if (isSelf() && isEditingAppearance())
-	{
-		LL_DEBUGS("Avatar") << "ignoring appearance message while in appearance edit" << LL_ENDL;
-		return;
-	}
-#endif
-
 	// SUNSHINE CLEANUP - is this case OK now?
 	S32 num_params = contents.mParamWeights.size();
 	if (num_params <= 1)
@@ -7434,9 +7394,10 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
     if (isSelf())
     {
         // Note:
-        // RequestAgentUpdateAppearanceResponder::onRequestRequested()
-        // assumes that cof version is only updated with server-bake
-        // appearance messages.
+        // locally the COF is maintained via LLInventoryModel::accountForUpdate
+        // which is called from various places.  This should match the simhost's 
+        // idea of what the COF version is.  AIS however maintains its own version
+        // of the COF that should be considered canonical. 
         mLastUpdateReceivedCOFVersion = thisAppearanceVersion;
     }
 		
@@ -7561,7 +7522,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
 		// Got an update for some other avatar
 		// Ignore updates for self, because we have a more authoritative value in the preferences.
 		setHoverOffset(contents.mHoverOffset);
-		LL_INFOS("Avatar") << avString() << "setting hover to " << contents.mHoverOffset[2] << LL_ENDL;
+		LL_DEBUGS("Avatar") << avString() << "setting hover to " << contents.mHoverOffset[2] << LL_ENDL;
 	}
 
 	if (!contents.mHoverOffsetWasSet && !isSelf())
-- 
cgit v1.2.3


From 0d5edb03a226a62bb416ddca250e4f1f789f56fd Mon Sep 17 00:00:00 2001
From: AndreyL ProductEngine <alihatskiy@productengine.com>
Date: Fri, 27 May 2016 03:34:37 +0300
Subject: MAINT-6435 Deafult preset should set the same settings as the "Reset
 to recommended settings" button

---
 indra/newview/llfeaturemanager.cpp | 59 ++++++++++++++++++++++++++++++++++++++
 indra/newview/llfeaturemanager.h   |  4 ++-
 indra/newview/llpresetsmanager.cpp | 57 ++++++++++++++++++++++--------------
 indra/newview/llpresetsmanager.h   |  2 +-
 4 files changed, 99 insertions(+), 23 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index 7f1c981a3c..d4ba230feb 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -809,3 +809,62 @@ void LLFeatureManager::applyBaseMasks()
 		maskFeatures("safe");
 	}
 }
+
+LLSD LLFeatureManager::getRecommendedSettingsMap()
+{
+	// Create the map and fill it with the hardware recommended settings.
+	// It's needed to create an initial Default graphics preset (MAINT-6435).
+	// The process is similar to the one LLFeatureManager::applyRecommendedSettings() does.
+
+	LLSD map(LLSD::emptyMap());
+
+	loadGPUClass();
+	U32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5));
+	LL_INFOS("RenderInit") << "Getting the map of recommended settings for level " << level << LL_ENDL;
+
+	applyBaseMasks();
+	std::string features(isValidGraphicsLevel(level) ? getNameForGraphicsLevel(level) : "Low");
+
+	maskFeatures(features);
+
+	LLControlVariable* ctrl = gSavedSettings.getControl("RenderQualityPerformance"); // include the quality value for correct preset loading   
+	map["RenderQualityPerformance"]["Value"] = (LLSD::Integer)level;
+	map["RenderQualityPerformance"]["Comment"] = ctrl->getComment();;
+	map["RenderQualityPerformance"]["Persist"] = 1;
+	map["RenderQualityPerformance"]["Type"] = LLControlGroup::typeEnumToString(ctrl->type());
+
+
+
+	for (feature_map_t::iterator mIt = mFeatures.begin(); mIt != mFeatures.end(); ++mIt)
+	{
+		LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first);
+		if (ctrl == NULL)
+		{
+			LL_WARNS() << "AHHH! Control setting " << mIt->first << " does not exist!" << LL_ENDL;
+			continue;
+		}
+
+		if (ctrl->isType(TYPE_BOOLEAN))
+		{
+			map[mIt->first]["Value"] = (LLSD::Boolean)getRecommendedValue(mIt->first);
+		}
+		else if (ctrl->isType(TYPE_S32) || ctrl->isType(TYPE_U32))
+		{
+			map[mIt->first]["Value"] = (LLSD::Integer)getRecommendedValue(mIt->first);
+		}
+		else if (ctrl->isType(TYPE_F32))
+		{
+			map[mIt->first]["Value"] = (LLSD::Real)getRecommendedValue(mIt->first);
+		}
+		else
+		{
+			LL_WARNS() << "AHHH! Control variable is not a numeric type!" << LL_ENDL;
+			continue;
+		}
+		map[mIt->first]["Comment"] = ctrl->getComment();;
+		map[mIt->first]["Persist"] = 1;
+		map[mIt->first]["Type"] = LLControlGroup::typeEnumToString(ctrl->type());
+	}
+	
+	return map;
+}
diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h
index 12ea691b49..c3d87cea0b 100644
--- a/indra/newview/llfeaturemanager.h
+++ b/indra/newview/llfeaturemanager.h
@@ -157,7 +157,9 @@ public:
 
 	// load the dynamic GPU/feature table from a website
 	void fetchHTTPTables();
-	
+
+	LLSD getRecommendedSettingsMap();
+
 protected:
 	bool loadGPUClass();
 
diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp
index d95546f11d..9957039f72 100644
--- a/indra/newview/llpresetsmanager.cpp
+++ b/indra/newview/llpresetsmanager.cpp
@@ -38,6 +38,7 @@
 #include "llviewercontrol.h"
 #include "llfloaterpreference.h"
 #include "llfloaterreg.h"
+#include "llfeaturemanager.h"
 
 LLPresetsManager::LLPresetsManager()
 {
@@ -60,7 +61,7 @@ void LLPresetsManager::createMissingDefault()
 		LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL;
 
 		// Write current graphic settings as the default
-		savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT);
+        savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT, true);
 	}
     else
     {
@@ -134,7 +135,7 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam
 	presets = mPresetNames;
 }
 
-bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name)
+bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault)
 {
 	if (LLTrans::getString(PRESETS_DEFAULT) == name)
 	{
@@ -146,11 +147,10 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
 
 	if(PRESETS_GRAPHIC == subdirectory)
 	{
-		gSavedSettings.setString("PresetGraphicActive", name);
-
 		LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
-		if (instance)
+		if (instance && !createDefault)
 		{
+            gSavedSettings.setString("PresetGraphicActive", name);
 			instance->getControlNames(name_list);
             LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;
 			name_list.push_back("PresetGraphicActive");
@@ -170,23 +170,36 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
         LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;
     }
     
-    if (name_list.size() > 1) // if the active preset name is the only thing in the list, don't save the list
+    if (name_list.size() > 1 // if the active preset name is the only thing in the list, don't save the list
+        || (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC)) // or create a default graphics preset from hw recommended settings 
     {
         // make an empty llsd
         LLSD paramsData(LLSD::emptyMap());
 
-        for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
+        if (createDefault)
+        {
+            paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap();
+            if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0)
+            {
+                // use the recommended setting as an initial one (MAINT-6435)
+                gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger());
+            }
+        }
+        else
         {
-            std::string ctrl_name = *it;
-            LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
-            std::string comment = ctrl->getComment();
-            std::string type = LLControlGroup::typeEnumToString(ctrl->type());
-            LLSD value = ctrl->getValue();
-
-            paramsData[ctrl_name]["Comment"] =  comment;
-            paramsData[ctrl_name]["Persist"] = 1;
-            paramsData[ctrl_name]["Type"] = type;
-            paramsData[ctrl_name]["Value"] = value;
+            for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
+            {
+                std::string ctrl_name = *it;
+                LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
+                std::string comment = ctrl->getComment();
+                std::string type = LLControlGroup::typeEnumToString(ctrl->type());
+                LLSD value = ctrl->getValue();
+
+                paramsData[ctrl_name]["Comment"] = comment;
+                paramsData[ctrl_name]["Persist"] = 1;
+                paramsData[ctrl_name]["Type"] = type;
+                paramsData[ctrl_name]["Value"] = value;
+            }
         }
 
         std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml");
@@ -203,10 +216,12 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
             
             LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL;
 
-            gSavedSettings.setString("PresetGraphicActive", name);
-
-            // signal interested parties
-            triggerChangeSignal();
+            if (!createDefault)
+            {
+                gSavedSettings.setString("PresetGraphicActive", name);
+                // signal interested parties
+                triggerChangeSignal();
+            }
         }
         else
         {
diff --git a/indra/newview/llpresetsmanager.h b/indra/newview/llpresetsmanager.h
index ac4f0c010c..21f9885f27 100644
--- a/indra/newview/llpresetsmanager.h
+++ b/indra/newview/llpresetsmanager.h
@@ -56,7 +56,7 @@ public:
 	static std::string getPresetsDir(const std::string& subdirectory);
 	void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);
 	void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option);
-	bool savePreset(const std::string& subdirectory, std::string name);
+	bool savePreset(const std::string& subdirectory, std::string name, bool createDefault = false);
 	void loadPreset(const std::string& subdirectory, std::string name);
 	bool deletePreset(const std::string& subdirectory, std::string name);
 
-- 
cgit v1.2.3


From f282c31f0107f05ae9e943d2fdda516cdaf3f3fa Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Tue, 31 May 2016 16:56:45 +0300
Subject: MAINT-2129 One more Block button

---
 indra/newview/llinspectremoteobject.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp
index a12ec390af..b64df2bd47 100644
--- a/indra/newview/llinspectremoteobject.cpp
+++ b/indra/newview/llinspectremoteobject.cpp
@@ -181,7 +181,7 @@ void LLInspectRemoteObject::update()
 	getChild<LLUICtrl>("map_btn")->setEnabled(! mSLurl.empty());
 
 	// disable the Block button if we don't have the object ID (will this ever happen?)
-	getChild<LLUICtrl>("block_btn")->setEnabled(! mObjectID.isNull());
+	getChild<LLUICtrl>("block_btn")->setEnabled(!mObjectID.isNull() && !LLMuteList::getInstance()->isMuted(mObjectID));
 }
 
 //////////////////////////////////////////////////////////////////////////////
-- 
cgit v1.2.3


From aca2dab2d0ff7d66576b5d79f34eb9a706187de4 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Fri, 3 Jun 2016 20:09:33 +0300
Subject: MAINT-6460 Crash calculating mesh complexity

---
 indra/newview/llmeshrepository.cpp | 5 +++++
 1 file changed, 5 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 0aaed3e286..117507ef39 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -4034,6 +4034,11 @@ void LLMeshRepository::uploadError(LLSD& args)
 //static
 F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value)
 {
+	if (header.size() == 0)
+	{
+		return 0.f;
+	}
+
 	F32 max_distance = 512.f;
 
 	F32 dlowest = llmin(radius/0.03f, max_distance);
-- 
cgit v1.2.3


From 1adfaa081fd27d653619c84c520c16516c530ab1 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Wed, 1 Jun 2016 16:56:04 +0300
Subject: MAINT-6446 Correct password length handling

---
 indra/newview/skins/default/xui/en/panel_login.xml       | 2 +-
 indra/newview/skins/default/xui/en/panel_login_first.xml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index ae8e78a9d6..ded814bbeb 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -67,7 +67,7 @@
     follows="left|top"
     height="32"
     left_pad="-11"
-    max_length_bytes="64"
+    max_length_chars="16"
     text_pad_left="8"
     name="password_edit"
     label="Password"
diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml
index dc6e27a1ee..35b80c56ab 100644
--- a/indra/newview/skins/default/xui/en/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/en/panel_login_first.xml
@@ -124,7 +124,7 @@
             width="200"
             height="32"
             left="220"
-            max_length_bytes="64"
+            max_length_chars="16"
             name="password_edit"
             label="Password"
             text_pad_left="8"
-- 
cgit v1.2.3


From 1e803a6bd7a89f60407a1fd2b2697d9e5dd23467 Mon Sep 17 00:00:00 2001
From: Rider Linden <rider@lindenlab.com>
Date: Fri, 10 Jun 2016 12:33:39 -0700
Subject: MAINT-6486: Be sure that all the script queue functions hit all
 objects and scripts in those objects. Convert from responders and callbacks
 to coroutines.

---
 indra/newview/llcompilequeue.cpp | 908 ++++++++++++++++++++++-----------------
 indra/newview/llcompilequeue.h   |  77 ++--
 2 files changed, 541 insertions(+), 444 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index 219bcf0eb0..1c9f766666 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -62,6 +62,45 @@
 #include "llviewerassetupload.h"
 #include "llcorehttputil.h"
 
+namespace
+{
+
+    const std::string QUEUE_EVENTPUMP_NAME("ScriptActionQueue");
+    const F32         TIMEOUT_INVENTORY_FETCH(5.0);
+
+
+    class ObjectInventoryFetcher: public LLVOInventoryListener
+    {
+    public:
+        typedef boost::shared_ptr<ObjectInventoryFetcher> ptr_t;
+
+        ObjectInventoryFetcher(LLEventPump &pump, LLViewerObject* object, void* user_data) :
+            mPump(pump),
+            LLVOInventoryListener()
+        {
+            registerVOInventoryListener(object, this);
+        }
+
+        virtual void inventoryChanged(LLViewerObject* object,
+            LLInventoryObject::object_list_t* inventory,
+            S32 serial_num,
+            void* user_data);
+
+        void fetchInventory() 
+        {
+            requestVOInventory();
+        }
+
+        const LLInventoryObject::object_list_t & getInventoryList() const { return mInventoryList; }
+
+    private:
+        LLInventoryObject::object_list_t    mInventoryList;
+        LLEventPump &                       mPump;
+    };
+
+
+}
+
 // *NOTE$: A minor specialization of LLScriptAssetUpload, it does not require a buffer 
 // (and does not save a buffer to the vFS) and it finds the compile queue window and 
 // displays a compiling message.
@@ -149,47 +188,6 @@ BOOL LLFloaterScriptQueue::postBuild()
 	return TRUE;
 }
 
-// This is the callback method for the viewer object currently being
-// worked on.
-// NOT static, virtual!
-void LLFloaterScriptQueue::inventoryChanged(LLViewerObject* viewer_object,
-											 LLInventoryObject::object_list_t* inv,
-											 S32,
-											 void* q_id)
-{
-	LL_INFOS() << "LLFloaterScriptQueue::inventoryChanged() for  object "
-			<< viewer_object->getID() << LL_ENDL;
-
-	//Remove this listener from the object since its
-	//listener callback is now being executed.
-	
-	//We remove the listener here because the function
-	//removeVOInventoryListener removes the listener from a ViewerObject
-	//which it internally stores.
-	
-	//If we call this further down in the function, calls to handleInventory
-	//and nextObject may update the internally stored viewer object causing
-	//the removal of the incorrect listener from an incorrect object.
-	
-	//Fixes SL-6119:Recompile scripts fails to complete
-	removeVOInventoryListener();
-
-	if (viewer_object && inv && (viewer_object->getID() == mCurrentObjectID) )
-	{
-		handleInventory(viewer_object, inv);
-	}
-	else
-	{
-		// something went wrong...
-		// note that we're not working on this one, and move onto the
-		// next object in the list.
-		LL_WARNS() << "No inventory for " << mCurrentObjectID
-				<< LL_ENDL;
-		nextObject();
-	}
-}
-
-
 // static
 void LLFloaterScriptQueue::onCloseBtn(void* user_data)
 {
@@ -199,7 +197,7 @@ void LLFloaterScriptQueue::onCloseBtn(void* user_data)
 
 void LLFloaterScriptQueue::addObject(const LLUUID& id)
 {
-	mObjectIDs.push_back(id);
+	mObjectIDs.insert(id);
 }
 
 BOOL LLFloaterScriptQueue::start()
@@ -216,74 +214,24 @@ BOOL LLFloaterScriptQueue::start()
 	return startQueue();
 }
 
-BOOL LLFloaterScriptQueue::isDone() const
+void LLFloaterScriptQueue::addProcessingMessage(const std::string &message, const LLSD &args)
 {
-	return (mCurrentObjectID.isNull() && (mObjectIDs.size() == 0));
-}
+    std::string buffer(LLTrans::getString(message, args));
 
-// go to the next object. If no objects left, it falls out silently
-// and waits to be killed by the window being closed.
-BOOL LLFloaterScriptQueue::nextObject()
-{
-	U32 count;
-	BOOL successful_start = FALSE;
-	do
-	{
-		count = mObjectIDs.size();
-		LL_INFOS() << "LLFloaterScriptQueue::nextObject() - " << count
-				<< " objects left to process." << LL_ENDL;
-		mCurrentObjectID.setNull();
-		if(count > 0)
-		{
-			successful_start = popNext();
-		}
-		LL_INFOS() << "LLFloaterScriptQueue::nextObject() "
-				<< (successful_start ? "successful" : "unsuccessful")
-				<< LL_ENDL; 
-	} while((mObjectIDs.size() > 0) && !successful_start);
-	if(isDone() && !mDone)
-	{
-		mDone = true;
-		getChild<LLScrollListCtrl>("queue output")->addSimpleElement(getString("Done"), ADD_BOTTOM);
-		getChildView("close")->setEnabled(TRUE);
-	}
-	return successful_start;
+    getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
 }
 
-// returns true if the queue has started, otherwise false.  This
-// method pops the top object off of the queue.
-BOOL LLFloaterScriptQueue::popNext()
+void LLFloaterScriptQueue::addStringMessage(const std::string &message)
 {
-	// get the first element off of the container, and attempt to get
-	// the inventory.
-	BOOL rv = FALSE;
-	S32 count = mObjectIDs.size();
-	if(mCurrentObjectID.isNull() && (count > 0))
-	{
-		mCurrentObjectID = mObjectIDs.at(0);
-		LL_INFOS() << "LLFloaterScriptQueue::popNext() - mCurrentID: "
-				<< mCurrentObjectID << LL_ENDL;
-		mObjectIDs.erase(mObjectIDs.begin());
-		LLViewerObject* obj = gObjectList.findObject(mCurrentObjectID);
-		if(obj)
-		{
-			LL_INFOS() << "LLFloaterScriptQueue::popNext() requesting inv for "
-					<< mCurrentObjectID << LL_ENDL;
-			LLUUID* id = new LLUUID(getKey().asUUID());
-			registerVOInventoryListener(obj,id);
-			requestVOInventory();
-			rv = TRUE;
-		}
-	}
-	return rv;
+    getChild<LLScrollListCtrl>("queue output")->addSimpleElement(message, ADD_BOTTOM);
 }
 
-BOOL LLFloaterScriptQueue::startQueue()
+
+BOOL LLFloaterScriptQueue::isDone() const
 {
-	return nextObject();
+	return (mCurrentObjectID.isNull() && (mObjectIDs.size() == 0));
 }
 
-
 ///----------------------------------------------------------------------------
 /// Class LLFloaterCompileQueue
 ///----------------------------------------------------------------------------
@@ -306,7 +254,7 @@ void LLFloaterCompileQueue::experienceIdsReceived( const LLSD& content )
 	{
 		mExperienceIds.insert(it->asUUID());
 	}
-	nextObject();
+//	nextObject();
 }
 
 BOOL LLFloaterCompileQueue::hasExperience( const LLUUID& id ) const
@@ -314,188 +262,295 @@ BOOL LLFloaterCompileQueue::hasExperience( const LLUUID& id ) const
 	return mExperienceIds.find(id) != mExperienceIds.end();
 }
 
+// //Attempt to record this asset ID.  If it can not be inserted into the set 
+// //then it has already been processed so return false.
+// bool LLFloaterCompileQueue::checkAssetId(const LLUUID &assetId)
+// {
+//     std::pair<uuid_list_t::iterator, bool> result = mAssetIds.insert(assetId);
+//     return result.second;
+// }
 
-void LLFloaterCompileQueue::handleInventory(LLViewerObject *viewer_object,
-											LLInventoryObject::object_list_t* inv)
+void LLFloaterCompileQueue::handleHTTPResponse(std::string pumpName, const LLSD &expresult)
 {
-	// find all of the lsl, leaving off duplicates. We'll remove
-	// all matching asset uuids on compilation success.
-
-	typedef std::multimap<LLUUID, LLPointer<LLInventoryItem> > uuid_item_map;
-	uuid_item_map asset_item_map;
+    LLEventPumps::instance().post(pumpName, expresult);
+}
 
-	LLInventoryObject::object_list_t::const_iterator it = inv->begin();
-	LLInventoryObject::object_list_t::const_iterator end = inv->end();
-	for ( ; it != end; ++it)
-	{
-		if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
-		{
-			LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
-			// Check permissions before allowing the user to retrieve data.
-			if (item->getPermissions().allowModifyBy(gAgent.getID(), gAgent.getGroupID())  &&
-				item->getPermissions().allowCopyBy(gAgent.getID(), gAgent.getGroupID()) )
-			{
-				LLPointer<LLViewerInventoryItem> script = new LLViewerInventoryItem(item);
-				mCurrentScripts.push_back(script);
-				asset_item_map.insert(std::make_pair(item->getAssetUUID(), item));
-			}
-		}
-	}
+class HandleScriptUserData 
+{
+public:
+    HandleScriptUserData(std::string &pumpname) :
+        mPumpname(pumpname)
+    { }
 
-	if (asset_item_map.empty())
-	{
-		// There are no scripts in this object.  move on.
-		nextObject();
-	}
-	else
-	{
-		// request all of the assets.
-		uuid_item_map::iterator iter;
-		for(iter = asset_item_map.begin(); iter != asset_item_map.end(); iter++)
-		{
-			LLInventoryItem *itemp = iter->second;
-			LLScriptQueueData* datap = new LLScriptQueueData(getKey().asUUID(),
-				viewer_object->getID(), itemp);
-
-            LLExperienceCache::instance().fetchAssociatedExperience(itemp->getParentUUID(), itemp->getUUID(),
-                    boost::bind(&LLFloaterCompileQueue::requestAsset, datap, _1));
-		}
-	}
-}
+    const std::string &getPumpName() const { return mPumpname; }
 
+private:
+    std::string mPumpname;
+};
 
-void LLFloaterCompileQueue::requestAsset( LLScriptQueueData* datap, const LLSD& experience )
+// *TODO: handleSCriptRetrieval is passed into the VFS via a legacy C function pointer
+// future project would be to convert these to C++ callables (std::function<>) so that 
+// we can use bind and remove the userData parameter.
+// 
+void LLFloaterCompileQueue::handleScriptRetrieval(LLVFS *vfs, const LLUUID& assetId, 
+    LLAssetType::EType type, void* userData, S32 status, LLExtStat extStatus)
 {
-	LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", datap->mQueueID);
-	if(!queue)
-	{
-		delete datap;
-		return;
-	}
-	if(experience.has(LLExperienceCache::EXPERIENCE_ID))
-	{
-		datap->mExperienceId=experience[LLExperienceCache::EXPERIENCE_ID].asUUID();
-		if(!queue->hasExperience(datap->mExperienceId))
-		{
-			std::string buffer = LLTrans::getString("CompileNoExperiencePerm", LLSD::emptyMap()
-				.with("SCRIPT", datap->mItem->getName())
-				.with("EXPERIENCE", experience[LLExperienceCache::NAME].asString()));
-	
-			queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
-			queue->removeItemByItemID(datap->mItem->getUUID());
-			delete datap;
-			return;
-		}
-	}
-	//LL_INFOS() << "ITEM NAME 2: " << names.get(i) << LL_ENDL;
-	gAssetStorage->getInvItemAsset(datap->mHost,
-		gAgent.getID(),
-		gAgent.getSessionID(),
-		datap->mItem->getPermissions().getOwner(),
-		datap->mTaskId,
-		datap->mItem->getUUID(),
-		datap->mItem->getAssetUUID(),
-		datap->mItem->getType(),
-		LLFloaterCompileQueue::scriptArrived,
-		(void*)datap);
+    LLSD result(LLSD::emptyMap());
+
+    result["asset_id"] = assetId;
+    if (status)
+    {
+        result["error"] = status;
+     
+        if (status == LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE)
+        {
+            result["message"] = LLTrans::getString("CompileQueueProblemDownloading") + (":");
+            result["alert"] = LLTrans::getString("CompileQueueScriptNotFound");
+        }
+        else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
+        {
+            result["message"] = LLTrans::getString("CompileQueueInsufficientPermFor") + (":");
+            result["alert"] = LLTrans::getString("CompileQueueInsufficientPermDownload");
+        }
+        else
+        {
+            result["message"] = LLTrans::getString("CompileQueueUnknownFailure");
+        }
+    }
+
+    LLEventPumps::instance().post(((HandleScriptUserData *)userData)->getPumpName(), result);
+
 }
 
 /*static*/
-void LLFloaterCompileQueue::finishLSLUpload(LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response, std::string scriptName, LLUUID queueId)
+void LLFloaterCompileQueue::processExperienceIdResults(LLSD result, LLUUID parent)
 {
+    LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", parent);
+    if (!queue)
+        return;
 
-    LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", LLSD(queueId));
-    if (queue)
+    queue->experienceIdsReceived(result["experience_ids"]);
+
+    LLHandle<LLFloaterScriptQueue> hFloater(queue->getDerivedHandle<LLFloaterScriptQueue>());
+
+    fnQueueAction_t fn = boost::bind(LLFloaterCompileQueue::processScript,
+        queue->getDerivedHandle<LLFloaterCompileQueue>(), _1, _2, _3);
+
+
+    LLCoros::instance().launch("ScriptQueueCompile", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
+        queue->mStartString,
+        hFloater,
+        queue->mObjectIDs,
+        fn));
+
+}
+
+bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloater,
+    const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump)
+{
+    LLSD result;
+    LLFloaterCompileQueue *that = hfloater.get();
+    bool monocompile = that->mMono;
+
+    if (!that)
+        return false;
+
+    // Initial test to see if we can (or should) attempt to compile the script.
+    LLInventoryItem *item = dynamic_cast<LLInventoryItem *>(inventory);
     {
-        // Bytecode save completed
-        if (response["compiled"])
+
+        if (!item->getPermissions().allowModifyBy(gAgent.getID(), gAgent.getGroupID()) ||
+            !item->getPermissions().allowCopyBy(gAgent.getID(), gAgent.getGroupID()))
         {
-            std::string message = std::string("Compilation of \"") + scriptName + std::string("\" succeeded");
+            std::string buffer = "Skipping: " + item->getName() + "(Permissions)";
+            that->addStringMessage(buffer);
+            return true;
+        }
 
-            queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(message, ADD_BOTTOM);
-            LL_INFOS() << message << LL_ENDL;
+//         if (!that->checkAssetId(item->getAssetUUID()))
+//         {
+//             std::string buffer = "Skipping: " + item->getName() + "(Repeat)";
+//             that->addStringMessage(buffer);
+//             return true;
+//         }
+    }
+    that = NULL;
+
+    // Attempt to retrieve the experience
+    LLUUID experienceId;
+    {
+        LLExperienceCache::instance().fetchAssociatedExperience(inventory->getParentUUID(), inventory->getUUID(),
+            boost::bind(&LLFloaterCompileQueue::handleHTTPResponse, pump.getName(), _1));
+
+        result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, 
+            LLSD().with("timeout", LLSD::Boolean(true)));
+
+        that = hfloater.get();
+        if (!that)
+        {
+            return false;
         }
-        else
+
+        if (result.has("timeout") && result["timeout"].asBoolean())
         {
-            LLSD compile_errors = response["errors"];
-            for (LLSD::array_const_iterator line = compile_errors.beginArray();
-                line < compile_errors.endArray(); line++)
-            {
-                std::string str = line->asString();
-                str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());
+            std::string buffer = that->getString("Timeout") + ": " + inventory->getName();
+            that->addStringMessage(buffer);
+            return true;
+        }
 
-                queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(str, ADD_BOTTOM);
+        if (result.has(LLExperienceCache::EXPERIENCE_ID))
+        {
+            experienceId = result[LLExperienceCache::EXPERIENCE_ID].asUUID();
+            if (!that->hasExperience(experienceId))
+            {
+                that->addProcessingMessage("CompileNoExperiencePerm", LLSD()
+                    .with("SCRIPT", inventory->getName())
+                    .with("EXPERIENCE", result[LLExperienceCache::NAME].asString()));
+                return true;
             }
-            LL_INFOS() << response["errors"] << LL_ENDL;
         }
 
     }
+    that = NULL;
+
+    {
+        HandleScriptUserData    userData(pump.getName());
+
+
+        // request the asset
+        gAssetStorage->getInvItemAsset(LLHost(),
+            gAgent.getID(),
+            gAgent.getSessionID(),
+            item->getPermissions().getOwner(),
+            object->getID(),
+            item->getUUID(),
+            item->getAssetUUID(),
+            item->getType(),
+            &LLFloaterCompileQueue::handleScriptRetrieval,
+            &userData);
+
+        result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, 
+            LLSD().with("timeout", LLSD::Boolean(true)));
+    }
+
+    that = hfloater.get();
+    if (!that)
+    {
+        return false;
+    }
+
+    if (result.has("timeout"))
+    {
+        if (result.has("timeout") && result["timeout"].asBoolean())
+        {
+            std::string buffer = that->getString("Timeout") + ": " + inventory->getName();
+            that->addStringMessage(buffer);
+            return true;
+        }
+    }
+
+    if (result.has("error"))
+    {
+        LL_WARNS("SCRIPTQ") << "Inventory fetch returned with error. Code: " << result["error"].asString() << LL_ENDL;
+        std::string buffer = result["message"].asString() + " " + inventory->getName();
+        that->addStringMessage(buffer);
+
+        if (result.has("alert"))
+        {
+            LLSD args;
+            args["MESSAGE"] = result["alert"].asString();
+            LLNotificationsUtil::add("SystemMessage", args);
+        }
+        return true;
+    }
+
+    LLUUID assetId = result["asset_id"];
+    that = NULL;
+
+
+    std::string url = object->getRegion()->getCapability("UpdateScriptTask");
+
+
+    {
+        LLResourceUploadInfo::ptr_t uploadInfo(new LLQueuedScriptAssetUpload(object->getID(), 
+            inventory->getUUID(), 
+            assetId, 
+            monocompile ? LLScriptAssetUpload::MONO : LLScriptAssetUpload::LSL2,
+            true, 
+            inventory->getName(), 
+            LLUUID(), 
+            experienceId, 
+            boost::bind(&LLFloaterCompileQueue::handleHTTPResponse, pump.getName(), _4)));
+
+        LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo);
+    }
+
+    result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, LLSD().with("timeout", LLSD::Boolean(true)));
+
+    that = hfloater.get();
+    if (!that)
+    {
+        return false;
+    }
+
+    if (result.has("timeout"))
+    {
+        if (result.has("timeout") && result["timeout"].asBoolean())
+        {
+            std::string buffer = that->getString("Timeout") + ": " + inventory->getName();
+            that->addStringMessage(buffer);
+            return true;
+        }
+    }
+
+    // Bytecode save completed
+    if (result["compiled"])
+    {
+        std::string buffer = std::string("Compilation of \"") + inventory->getName() + std::string("\" succeeded");
+
+        that->addStringMessage(buffer);
+        LL_INFOS() << buffer << LL_ENDL;
+    }
+    else
+    {
+        LLSD compile_errors = result["errors"];
+        std::string buffer = std::string("Compilation of \"") + inventory->getName() + std::string("\" failed:");
+        that->addStringMessage(buffer);
+        for (LLSD::array_const_iterator line = compile_errors.beginArray();
+            line < compile_errors.endArray(); line++)
+        {
+            std::string str = line->asString();
+            str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());
+
+            that->addStringMessage(str);
+        }
+        LL_INFOS() << result["errors"] << LL_ENDL;
+    }
+
+    return true;
 }
 
-// This is the callback for when each script arrives
-// static
-void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
-										  LLAssetType::EType type,
-										  void* user_data, S32 status, LLExtStat ext_status)
+bool LLFloaterCompileQueue::startQueue()
 {
-	LL_INFOS() << "LLFloaterCompileQueue::scriptArrived()" << LL_ENDL;
-	LLScriptQueueData* data = (LLScriptQueueData*)user_data;
-	if(!data)
-	{
-		return;
-	}
-	LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", data->mQueueID);
-	
-	std::string buffer;
-	if(queue && (0 == status))
-	{
-        LLViewerObject* object = gObjectList.findObject(data->mTaskId);
-        if (object)
+    LLViewerRegion* region = gAgent.getRegion();
+    if (region)
+    {
+        std::string lookup_url = region->getCapability("GetCreatorExperiences");
+        if (!lookup_url.empty())
         {
-            std::string url = object->getRegion()->getCapability("UpdateScriptTask");
-            std::string scriptName = data->mItem->getName();
-
-            LLBufferedAssetUploadInfo::taskUploadFinish_f proc = boost::bind(&LLFloaterCompileQueue::finishLSLUpload, _1, _2, _3, _4, 
-                scriptName, data->mQueueID);
+            LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t success =
+                boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, _1, getKey().asUUID());
 
-            LLResourceUploadInfo::ptr_t uploadInfo(new LLQueuedScriptAssetUpload(data->mTaskId, data->mItem->getUUID(), asset_id,
-                (queue->mMono) ? LLScriptAssetUpload::MONO : LLScriptAssetUpload::LSL2,
-                true, scriptName, data->mQueueID, data->mExperienceId, proc));
+            LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t failure =
+                boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, LLSD(), getKey().asUUID());
 
-            LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo);
+            LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(lookup_url,
+                success, failure);
+            return TRUE;
         }
-	}
-	else
-	{
-		if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status )
-		{
-			LLSD args;
-			args["MESSAGE"] = LLTrans::getString("CompileQueueScriptNotFound");
-			LLNotificationsUtil::add("SystemMessage", args);
-			
-			buffer = LLTrans::getString("CompileQueueProblemDownloading") + (": ") + data->mItem->getName();
-		}
-		else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
-		{
-			LLSD args;
-			args["MESSAGE"] = LLTrans::getString("CompileQueueInsufficientPermDownload");
-			LLNotificationsUtil::add("SystemMessage", args);
-
-			buffer = LLTrans::getString("CompileQueueInsufficientPermFor") + (": ") + data->mItem->getName();
-		}
-		else
-		{
-			buffer = LLTrans::getString("CompileQueueUnknownFailure") + (" ") + data->mItem->getName();
-		}
-
-		LL_WARNS() << "Problem downloading script asset." << LL_ENDL;
-		if(queue) queue->removeItemByItemID(data->mItem->getUUID());
-	}
-	if(queue && (buffer.size() > 0)) 
-	{
-		queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
-	}
-	delete data;
+    }
+
+    return true;
 }
 
 
@@ -514,40 +569,42 @@ LLFloaterResetQueue::~LLFloaterResetQueue()
 { 
 }
 
-void LLFloaterResetQueue::handleInventory(LLViewerObject* viewer_obj,
-										  LLInventoryObject::object_list_t* inv)
+bool LLFloaterResetQueue::resetObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater, 
+    const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump)
 {
-	// find all of the lsl, leaving off duplicates. We'll remove
-	// all matching asset uuids on compilation success.
+    LLFloaterScriptQueue *that = hfloater.get();
+    if (that)
+    {
+        std::string buffer;
+        buffer = that->getString("Resetting") + (": ") + inventory->getName();
+        that->addStringMessage(buffer);
+    }
+    
+    LLMessageSystem* msg = gMessageSystem;
+    msg->newMessageFast(_PREHASH_ScriptReset);
+    msg->nextBlockFast(_PREHASH_AgentData);
+    msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+    msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+    msg->nextBlockFast(_PREHASH_Script);
+    msg->addUUIDFast(_PREHASH_ObjectID, object->getID());
+    msg->addUUIDFast(_PREHASH_ItemID, inventory->getUUID());
+    msg->sendReliable(object->getRegion()->getHost());
+
+    return true;
+}
 
-	LLInventoryObject::object_list_t::const_iterator it = inv->begin();
-	LLInventoryObject::object_list_t::const_iterator end = inv->end();
-	for ( ; it != end; ++it)
-	{
-		if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
-		{
-			LLViewerObject* object = gObjectList.findObject(viewer_obj->getID());
-
-			if (object)
-			{
-				LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
-				std::string buffer;
-				buffer = getString("Resetting") + (": ") + item->getName();
-				getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
-				LLMessageSystem* msg = gMessageSystem;
-				msg->newMessageFast(_PREHASH_ScriptReset);
-				msg->nextBlockFast(_PREHASH_AgentData);
-				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-				msg->nextBlockFast(_PREHASH_Script);
-				msg->addUUIDFast(_PREHASH_ObjectID, viewer_obj->getID());
-				msg->addUUIDFast(_PREHASH_ItemID, (*it)->getUUID());
-				msg->sendReliable(object->getRegion()->getHost());
-			}
-		}
-	}
+bool LLFloaterResetQueue::startQueue()
+{
+    fnQueueAction_t fn = boost::bind(LLFloaterResetQueue::resetObjectScripts,
+        getDerivedHandle<LLFloaterScriptQueue>(), _1, _2, _3);
+
+    LLCoros::instance().launch("ScriptResetQueue", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
+        mStartString,
+        getDerivedHandle<LLFloaterScriptQueue>(),
+        mObjectIDs,
+        fn));
 
-	nextObject();	
+    return true;
 }
 
 ///----------------------------------------------------------------------------
@@ -565,44 +622,46 @@ LLFloaterRunQueue::~LLFloaterRunQueue()
 { 
 }
 
-void LLFloaterRunQueue::handleInventory(LLViewerObject* viewer_obj,
-										  LLInventoryObject::object_list_t* inv)
+bool LLFloaterRunQueue::runObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater, 
+    const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump)
 {
-	// find all of the lsl, leaving off duplicates. We'll remove
-	// all matching asset uuids on compilation success.
-	LLInventoryObject::object_list_t::const_iterator it = inv->begin();
-	LLInventoryObject::object_list_t::const_iterator end = inv->end();
-	for ( ; it != end; ++it)
-	{
-		if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
-		{
-			LLViewerObject* object = gObjectList.findObject(viewer_obj->getID());
-
-			if (object)
-			{
-				LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
-				LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
-				std::string buffer;
-				buffer = getString("Running") + (": ") + item->getName();
-				list->addSimpleElement(buffer, ADD_BOTTOM);
-
-				LLMessageSystem* msg = gMessageSystem;
-				msg->newMessageFast(_PREHASH_SetScriptRunning);
-				msg->nextBlockFast(_PREHASH_AgentData);
-				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-				msg->nextBlockFast(_PREHASH_Script);
-				msg->addUUIDFast(_PREHASH_ObjectID, viewer_obj->getID());
-				msg->addUUIDFast(_PREHASH_ItemID, (*it)->getUUID());
-				msg->addBOOLFast(_PREHASH_Running, TRUE);
-				msg->sendReliable(object->getRegion()->getHost());
-			}
-		}
-	}
+    LLFloaterScriptQueue *that = hfloater.get();
+    if (that)
+    {
+        std::string buffer;
+        buffer = that->getString("Running") + (": ") + inventory->getName();
+        that->addStringMessage(buffer);
+    }
 
-	nextObject();	
+    LLMessageSystem* msg = gMessageSystem;
+    msg->newMessageFast(_PREHASH_SetScriptRunning);
+    msg->nextBlockFast(_PREHASH_AgentData);
+    msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+    msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+    msg->nextBlockFast(_PREHASH_Script);
+    msg->addUUIDFast(_PREHASH_ObjectID, object->getID());
+    msg->addUUIDFast(_PREHASH_ItemID, inventory->getUUID());
+    msg->addBOOLFast(_PREHASH_Running, TRUE);
+    msg->sendReliable(object->getRegion()->getHost());
+
+    return true;
 }
 
+bool LLFloaterRunQueue::startQueue()
+{
+    LLHandle<LLFloaterScriptQueue> hFloater(getDerivedHandle<LLFloaterScriptQueue>());
+    fnQueueAction_t fn = boost::bind(LLFloaterRunQueue::runObjectScripts, hFloater, _1, _2, _3);
+
+    LLCoros::instance().launch("ScriptRunQueue", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
+        mStartString,
+        hFloater,
+        mObjectIDs,
+        fn));
+
+    return true;
+}
+
+
 ///----------------------------------------------------------------------------
 /// Class LLFloaterNotRunQueue
 ///----------------------------------------------------------------------------
@@ -618,96 +677,151 @@ LLFloaterNotRunQueue::~LLFloaterNotRunQueue()
 { 
 }
 
-void LLFloaterCompileQueue::removeItemByItemID(const LLUUID& asset_id)
+bool LLFloaterNotRunQueue::stopObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater, 
+    const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump)
 {
-	LL_INFOS() << "LLFloaterCompileQueue::removeItemByAssetID()" << LL_ENDL;
-	for(S32 i = 0; i < mCurrentScripts.size(); )
-	{
-		if(asset_id == mCurrentScripts.at(i)->getUUID())
-		{
-			vector_replace_with_last(mCurrentScripts, mCurrentScripts.begin() + i);
-		}
-		else
-		{
-			++i;
-		}
-	}
-	if(mCurrentScripts.empty())
-	{
-		nextObject();
-	}
+    LLFloaterScriptQueue *that = hfloater.get();
+    if (that)
+    {
+        std::string buffer;
+        buffer = that->getString("NotRunning") + (": ") + inventory->getName();
+        that->addStringMessage(buffer);
+    }
+
+    LLMessageSystem* msg = gMessageSystem;
+    msg->newMessageFast(_PREHASH_SetScriptRunning);
+    msg->nextBlockFast(_PREHASH_AgentData);
+    msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+    msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+    msg->nextBlockFast(_PREHASH_Script);
+    msg->addUUIDFast(_PREHASH_ObjectID, object->getID());
+    msg->addUUIDFast(_PREHASH_ItemID, inventory->getUUID());
+    msg->addBOOLFast(_PREHASH_Running, FALSE);
+    msg->sendReliable(object->getRegion()->getHost());
+
+    return true;
 }
 
-BOOL LLFloaterCompileQueue::startQueue()
+bool LLFloaterNotRunQueue::startQueue()
 {
-	LLViewerRegion* region = gAgent.getRegion();
-	if (region)
-	{
-		std::string lookup_url=region->getCapability("GetCreatorExperiences"); 
-		if(!lookup_url.empty())
-		{
-            LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t success =
-                boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, _1, getKey().asUUID());
+    LLHandle<LLFloaterScriptQueue> hFloater(getDerivedHandle<LLFloaterScriptQueue>());
 
-            LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t failure =
-                boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, LLSD(), getKey().asUUID());
+    fnQueueAction_t fn = boost::bind(&LLFloaterNotRunQueue::stopObjectScripts, hFloater, _1, _2, _3);
+    LLCoros::instance().launch("ScriptQueueNotRun", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
+        mStartString,
+        hFloater,
+        mObjectIDs,
+        fn));
 
-            LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(lookup_url,
-                success, failure);
-            return TRUE;
-		}
-	}
-	return nextObject();
+    return true;
 }
 
-/*static*/
-void LLFloaterCompileQueue::processExperienceIdResults(LLSD result, LLUUID parent)
+///----------------------------------------------------------------------------
+/// Local function definitions
+///----------------------------------------------------------------------------
+void ObjectInventoryFetcher::inventoryChanged(LLViewerObject* object,
+        LLInventoryObject::object_list_t* inventory, S32 serial_num, void* user_data)
 {
-    LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", parent);
-    if (!queue)
-        return;
+    mInventoryList.clear();
+    mInventoryList.assign(inventory->begin(), inventory->end());
+
+    mPump.post(LLSD().with("changed", LLSD::Boolean(true)));
 
-    queue->experienceIdsReceived(result["experience_ids"]);
 }
 
-void LLFloaterNotRunQueue::handleInventory(LLViewerObject* viewer_obj,
-										  LLInventoryObject::object_list_t* inv)
+void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, LLHandle<LLFloaterScriptQueue> hfloater,
+    uuid_list_t objectList, fnQueueAction_t func)
 {
-	// find all of the lsl, leaving off duplicates. We'll remove
-	// all matching asset uuids on compilation success.
-	LLInventoryObject::object_list_t::const_iterator it = inv->begin();
-	LLInventoryObject::object_list_t::const_iterator end = inv->end();
-	for ( ; it != end; ++it)
-	{
-		if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
-		{
-			LLViewerObject* object = gObjectList.findObject(viewer_obj->getID());
-
-			if (object)
-			{
-				LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
-				LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
-				std::string buffer;
-				buffer = getString("NotRunning") + (": ") +item->getName();
-				list->addSimpleElement(buffer, ADD_BOTTOM);
-	
-				LLMessageSystem* msg = gMessageSystem;
-				msg->newMessageFast(_PREHASH_SetScriptRunning);
-				msg->nextBlockFast(_PREHASH_AgentData);
-				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-				msg->nextBlockFast(_PREHASH_Script);
-				msg->addUUIDFast(_PREHASH_ObjectID, viewer_obj->getID());
-				msg->addUUIDFast(_PREHASH_ItemID, (*it)->getUUID());
-				msg->addBOOLFast(_PREHASH_Running, FALSE);
-				msg->sendReliable(object->getRegion()->getHost());
-			}
-		}
-	}
+    LLCoros::set_consuming(true);
+    LLFloaterScriptQueue * floater(NULL);
+    LLEventMailDrop        maildrop(QUEUE_EVENTPUMP_NAME, true);
+
+//     floater = hfloater.get();
+//     floater->addProcessingMessage("Starting",
+//         LLSD()
+//         .with("[START]", action)
+//         .with("[COUNT]", LLSD::Integer(objectList.size())));
+//     floater = NULL;
+
+    for (uuid_list_t::iterator itObj(objectList.begin()); (itObj != objectList.end()); ++itObj)
+    {
+        bool firstForObject = true;
+        LL_INFOS("SCRIPTQ") << "Next object in queue with ID=" << (*itObj).asString() << LL_ENDL;
 
-	nextObject();	
-}
+        LLPointer<LLViewerObject> obj = gObjectList.findObject(*itObj);
+        LLInventoryObject::object_list_t inventory;
+        if (obj)
+        {
+            ObjectInventoryFetcher::ptr_t fetcher(new ObjectInventoryFetcher(maildrop, obj, NULL));
 
-///----------------------------------------------------------------------------
-/// Local function definitions
-///----------------------------------------------------------------------------
+            fetcher->fetchInventory();
+
+            LLSD result = llcoro::suspendUntilEventOnWithTimeout(maildrop, TIMEOUT_INVENTORY_FETCH,
+                LLSD().with("timeout", LLSD::Boolean(true)));
+
+            if (result.has("timeout") && result["timeout"].asBoolean())
+            {
+                LL_WARNS("SCRIPTQ") << "Unable to retrieve inventory for object " << (*itObj).asString() <<
+                    ". Skipping to next object." << LL_ENDL;
+                continue;
+            }
+
+            inventory.assign(fetcher->getInventoryList().begin(), fetcher->getInventoryList().end());
+        }
+        else
+        {
+            LL_WARNS("SCRIPTQ") << "Unable to retrieve object with ID of " << (*itObj) <<
+                ". Skipping to next." << LL_ENDL;
+            continue;
+        }
+
+        // TODO: Get the name of the object we are looking at here so that we can display it below.
+        //std::string objName = (dynamic_cast<LLInventoryObject *>(obj.get()))->getName();
+        LL_DEBUGS("SCRIPTQ") << "Object has " << inventory.size() << " items." << LL_ENDL;
+
+        for (LLInventoryObject::object_list_t::iterator itInv = inventory.begin();
+            itInv != inventory.end(); ++itInv)
+        {
+            floater = hfloater.get();
+            if (!floater)
+            {
+                LL_WARNS("SCRIPTQ") << "Script Queue floater closed! Canceling remaining ops" << LL_ENDL;
+                break;
+            }
+
+            // note, we have a smart pointer to the obj above... but if we didn't we'd check that 
+            // it still exists here.
+
+            if (((*itInv)->getType() == LLAssetType::AT_LSL_TEXT))
+            {
+                LL_DEBUGS("SCRIPTQ") << "Inventory item " << (*itInv)->getUUID().asString() << "\"" << (*itInv)->getName() << "\"" << LL_ENDL;
+                if (firstForObject)
+                {
+                    //floater->addStringMessage(objName + ":");
+                    firstForObject = false;
+                }
+
+                if (!func(obj, (*itInv), maildrop))
+                {
+                    continue;
+                }
+            }
+
+            llcoro::suspend();
+        }
+        // Just test to be sure the floater is still present before calling the func
+        if (!hfloater.get())
+        {
+            LL_WARNS("SCRIPTQ") << "Script Queue floater dismissed." << LL_ENDL;
+            break;
+        }
+
+    }
+
+    floater = hfloater.get();
+    if (floater)
+    {
+        floater->addStringMessage("Done");
+        floater->getChildView("close")->setEnabled(TRUE);
+    }
+}
diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h
index 46bcb9746b..271ac5e05d 100644
--- a/indra/newview/llcompilequeue.h
+++ b/indra/newview/llcompilequeue.h
@@ -37,6 +37,8 @@
 
 #include "llviewerinventory.h"
 
+#include "llevents.h"
+
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLFloaterScriptQueue
 //
@@ -48,7 +50,7 @@
 // scripts manipulated.
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-class LLFloaterScriptQueue : public LLFloater, public LLVOInventoryListener
+class LLFloaterScriptQueue : public LLFloater/*, public LLVOInventoryListener*/
 {
 public:
 	LLFloaterScriptQueue(const LLSD& key);
@@ -64,29 +66,18 @@ public:
 	// start() returns TRUE if the queue has started, otherwise FALSE.
 	BOOL start();
 	
-protected:
-	// This is the callback method for the viewer object currently
-	// being worked on.
-	/*virtual*/ void inventoryChanged(LLViewerObject* obj,
-								 LLInventoryObject::object_list_t* inv,
-								 S32 serial_num,
-								 void* queue);
-	
-	// This is called by inventoryChanged
-	virtual void handleInventory(LLViewerObject* viewer_obj,
-								LLInventoryObject::object_list_t* inv) = 0;
+    void addProcessingMessage(const std::string &message, const LLSD &args);
+    void addStringMessage(const std::string &message);
 
+    std::string getStartString() const { return mStartString; }
+
+protected:
 	static void onCloseBtn(void* user_data);
 
 	// returns true if this is done
 	BOOL isDone() const;
 
-	virtual BOOL startQueue();
-
-	// go to the next object. If no objects left, it falls out
-	// silently and waits to be killed by the deleteIfDone() callback.
-	BOOL nextObject();
-	BOOL popNext();
+	virtual bool startQueue() = 0;
 
 	void setStartString(const std::string& s) { mStartString = s; }
 
@@ -96,12 +87,16 @@ protected:
 	LLButton* mCloseBtn;
 
 	// Object Queue
-	std::vector<LLUUID> mObjectIDs;
+    uuid_list_t     mObjectIDs;
 	LLUUID mCurrentObjectID;
 	bool mDone;
 
 	std::string mStartString;
 	bool mMono;
+
+    typedef boost::function<bool(const LLPointer<LLViewerObject> &, LLInventoryObject*, LLEventPump &)>   fnQueueAction_t;
+    static void objectScriptProcessingQueueCoro(std::string action, LLHandle<LLFloaterScriptQueue> hfloater, uuid_list_t objectList, fnQueueAction_t func);
+
 };
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -122,8 +117,6 @@ class LLFloaterCompileQueue : public LLFloaterScriptQueue
 {
 	friend class LLFloaterReg;
 public:
-	// remove any object in mScriptScripts with the matching uuid.
-	void removeItemByItemID(const LLUUID& item_id);
 	
 	void experienceIdsReceived( const LLSD& content );
 	BOOL hasExperience(const LLUUID& id)const;
@@ -132,27 +125,17 @@ protected:
 	LLFloaterCompileQueue(const LLSD& key);
 	virtual ~LLFloaterCompileQueue();
 	
-	// This is called by inventoryChanged
-	virtual void handleInventory(LLViewerObject* viewer_obj,
-								LLInventoryObject::object_list_t* inv);
-
-	static void requestAsset(struct LLScriptQueueData* datap, const LLSD& experience);
+	virtual bool startQueue();
 
+    static bool processScript(LLHandle<LLFloaterCompileQueue> hfloater, const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump);
 
-    static void finishLSLUpload(LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response, std::string scriptName, LLUUID queueId);
-
-	// This is the callback for when each script arrives
-	static void scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
-								LLAssetType::EType type,
-								void* user_data, S32 status, LLExtStat ext_status);
-
-	virtual BOOL startQueue();
-protected:
-	LLViewerInventoryItem::item_array_t mCurrentScripts;
+    //bool checkAssetId(const LLUUID &assetId);
+    static void handleHTTPResponse(std::string pumpName, const LLSD &expresult);
+    static void handleScriptRetrieval(LLVFS *vfs, const LLUUID& assetId, LLAssetType::EType type, void* userData, S32 status, LLExtStat extStatus);
 
 private:
     static void processExperienceIdResults(LLSD result, LLUUID parent);
-
+    //uuid_list_t mAssetIds;  // list of asset IDs processed.
 	uuid_list_t mExperienceIds;
 };
 
@@ -169,9 +152,9 @@ protected:
 	LLFloaterResetQueue(const LLSD& key);
 	virtual ~LLFloaterResetQueue();
 	
-	// This is called by inventoryChanged
-	virtual void handleInventory(LLViewerObject* viewer_obj,
-								LLInventoryObject::object_list_t* inv);
+    static bool resetObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater, const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump);
+
+    virtual bool startQueue();
 };
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -186,10 +169,10 @@ class LLFloaterRunQueue : public LLFloaterScriptQueue
 protected:
 	LLFloaterRunQueue(const LLSD& key);
 	virtual ~LLFloaterRunQueue();
-	
-	// This is called by inventoryChanged
-	virtual void handleInventory(LLViewerObject* viewer_obj,
-								LLInventoryObject::object_list_t* inv);
+
+    static bool runObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater, const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump);
+
+    virtual bool startQueue();
 };
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -205,9 +188,9 @@ protected:
 	LLFloaterNotRunQueue(const LLSD& key);
 	virtual ~LLFloaterNotRunQueue();
 	
-	// This is called by inventoryChanged
-	virtual void handleInventory(LLViewerObject* viewer_obj,
-								LLInventoryObject::object_list_t* inv);
+    static bool stopObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater, const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump);
+
+    virtual bool startQueue();
 };
 
 #endif // LL_LLCOMPILEQUEUE_H
-- 
cgit v1.2.3


From c8b662814093fa6ed592fb9cb5118a1401fdc488 Mon Sep 17 00:00:00 2001
From: Rider Linden <rider@lindenlab.com>
Date: Fri, 10 Jun 2016 13:25:22 -0700
Subject: Make string ref in HandleScriptUserData const

---
 indra/newview/llcompilequeue.cpp | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index 1c9f766666..c592a6c0c6 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -98,6 +98,19 @@ namespace
         LLEventPump &                       mPump;
     };
 
+    class HandleScriptUserData
+    {
+    public:
+        HandleScriptUserData(const std::string &pumpname) :
+            mPumpname(pumpname)
+        { }
+
+        const std::string &getPumpName() const { return mPumpname; }
+
+    private:
+        std::string mPumpname;
+    };
+
 
 }
 
@@ -275,19 +288,6 @@ void LLFloaterCompileQueue::handleHTTPResponse(std::string pumpName, const LLSD
     LLEventPumps::instance().post(pumpName, expresult);
 }
 
-class HandleScriptUserData 
-{
-public:
-    HandleScriptUserData(std::string &pumpname) :
-        mPumpname(pumpname)
-    { }
-
-    const std::string &getPumpName() const { return mPumpname; }
-
-private:
-    std::string mPumpname;
-};
-
 // *TODO: handleSCriptRetrieval is passed into the VFS via a legacy C function pointer
 // future project would be to convert these to C++ callables (std::function<>) so that 
 // we can use bind and remove the userData parameter.
-- 
cgit v1.2.3


From c664ae73c3fa46e430306d7b24af3026246f8097 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Wed, 15 Jun 2016 18:01:44 +0300
Subject: MAINT-6460 additional header check

---
 indra/newview/llmeshrepository.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 117507ef39..39ebf9f95b 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -4034,7 +4034,7 @@ void LLMeshRepository::uploadError(LLSD& args)
 //static
 F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value)
 {
-	if (header.size() == 0)
+	if (header.size() == 0 || header.has("404") || header["version"].asInteger() > MAX_MESH_VERSION)
 	{
 		return 0.f;
 	}
-- 
cgit v1.2.3


From 0597f876469d8ef672a270528cbeecc069ab5e66 Mon Sep 17 00:00:00 2001
From: Rider Linden <rider@lindenlab.com>
Date: Wed, 15 Jun 2016 13:42:39 -0700
Subject: MAINT-6486: Use literal string. Don't try and look it up.

---
 indra/newview/llcompilequeue.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index c592a6c0c6..ea2e284305 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -393,7 +393,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
 
         if (result.has("timeout") && result["timeout"].asBoolean())
         {
-            std::string buffer = that->getString("Timeout") + ": " + inventory->getName();
+            std::string buffer = "Timeout: " + inventory->getName();
             that->addStringMessage(buffer);
             return true;
         }
@@ -443,7 +443,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
     {
         if (result.has("timeout") && result["timeout"].asBoolean())
         {
-            std::string buffer = that->getString("Timeout") + ": " + inventory->getName();
+            std::string buffer = "Timeout: " + inventory->getName();
             that->addStringMessage(buffer);
             return true;
         }
@@ -497,7 +497,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
     {
         if (result.has("timeout") && result["timeout"].asBoolean())
         {
-            std::string buffer = that->getString("Timeout") + ": " + inventory->getName();
+            std::string buffer = "Timeout: " + inventory->getName();
             that->addStringMessage(buffer);
             return true;
         }
-- 
cgit v1.2.3


From e2ee3a151978d1783baecefd337530bd7fde7c9b Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Thu, 30 Jun 2016 16:47:12 +0300
Subject: MAINT-6534 Resetting scripts fails due to small timeout

---
 indra/newview/app_settings/settings.xml | 11 +++++++++++
 indra/newview/llcompilequeue.cpp        | 11 ++++++-----
 2 files changed, 17 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 4912f27e70..ce2d652c37 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3701,6 +3701,17 @@
         <key>Value</key>
         <integer>1</integer>
     </map>
+    <key>QueueInventoryFetchTimeout</key>
+    <map>
+        <key>Comment</key>
+        <string>Max time llcompilequeue will wait for inventory fetch to complete (in seconds)</string>
+        <key>Persist</key>
+        <integer>1</integer>
+        <key>Type</key>
+        <string>F32</string>
+        <key>Value</key>
+        <integer>40.0</integer>
+    </map>
     <key>FindLandArea</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index ea2e284305..de7bc1e3c5 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -66,7 +66,6 @@ namespace
 {
 
     const std::string QUEUE_EVENTPUMP_NAME("ScriptActionQueue");
-    const F32         TIMEOUT_INVENTORY_FETCH(5.0);
 
 
     class ObjectInventoryFetcher: public LLVOInventoryListener
@@ -351,6 +350,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
     LLSD result;
     LLFloaterCompileQueue *that = hfloater.get();
     bool monocompile = that->mMono;
+    F32 fetch_timeout = gSavedSettings.getF32("QueueInventoryFetchTimeout");
 
     if (!that)
         return false;
@@ -382,7 +382,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
         LLExperienceCache::instance().fetchAssociatedExperience(inventory->getParentUUID(), inventory->getUUID(),
             boost::bind(&LLFloaterCompileQueue::handleHTTPResponse, pump.getName(), _1));
 
-        result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, 
+        result = llcoro::suspendUntilEventOnWithTimeout(pump, fetch_timeout,
             LLSD().with("timeout", LLSD::Boolean(true)));
 
         that = hfloater.get();
@@ -429,7 +429,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
             &LLFloaterCompileQueue::handleScriptRetrieval,
             &userData);
 
-        result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, 
+        result = llcoro::suspendUntilEventOnWithTimeout(pump, fetch_timeout,
             LLSD().with("timeout", LLSD::Boolean(true)));
     }
 
@@ -485,7 +485,7 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
         LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo);
     }
 
-    result = llcoro::suspendUntilEventOnWithTimeout(pump, TIMEOUT_INVENTORY_FETCH, LLSD().with("timeout", LLSD::Boolean(true)));
+    result = llcoro::suspendUntilEventOnWithTimeout(pump, fetch_timeout, LLSD().with("timeout", LLSD::Boolean(true)));
 
     that = hfloater.get();
     if (!that)
@@ -735,6 +735,7 @@ void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, L
     LLCoros::set_consuming(true);
     LLFloaterScriptQueue * floater(NULL);
     LLEventMailDrop        maildrop(QUEUE_EVENTPUMP_NAME, true);
+    F32 fetch_timeout = gSavedSettings.getF32("QueueInventoryFetchTimeout");
 
 //     floater = hfloater.get();
 //     floater->addProcessingMessage("Starting",
@@ -756,7 +757,7 @@ void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, L
 
             fetcher->fetchInventory();
 
-            LLSD result = llcoro::suspendUntilEventOnWithTimeout(maildrop, TIMEOUT_INVENTORY_FETCH,
+            LLSD result = llcoro::suspendUntilEventOnWithTimeout(maildrop, fetch_timeout,
                 LLSD().with("timeout", LLSD::Boolean(true)));
 
             if (result.has("timeout") && result["timeout"].asBoolean())
-- 
cgit v1.2.3


From 33be227716b0fa675f010555e753f45adb746971 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Thu, 2 Jun 2016 19:59:35 +0300
Subject: MAINT-6448 PERMISSION_DEBIT notification should default to Deny

---
 indra/newview/lltoastscriptquestion.cpp | 19 +++++++++++++++++++
 indra/newview/lltoastscriptquestion.h   |  2 ++
 2 files changed, 21 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastscriptquestion.cpp b/indra/newview/lltoastscriptquestion.cpp
index 91ba8c0247..7a3a1d8fd7 100644
--- a/indra/newview/lltoastscriptquestion.cpp
+++ b/indra/newview/lltoastscriptquestion.cpp
@@ -54,6 +54,19 @@ BOOL LLToastScriptQuestion::postBuild()
 
 	return TRUE;
 }
+
+// virtual
+void LLToastScriptQuestion::setFocus(BOOL b)
+{
+    LLToastPanel::setFocus(b);
+    // toast can fade out and disappear with focus ON, so reset to default anyway
+    LLButton* dfbutton = getDefaultButton();
+    if (dfbutton && dfbutton->getVisible() && dfbutton->getEnabled())
+    {
+        dfbutton->setFocus(b);
+    }
+}
+
 void LLToastScriptQuestion::snapToMessageHeight()
 {
 	LLTextBox* mMessage = getChild<LLTextBox>("top_info_message");
@@ -118,6 +131,12 @@ void LLToastScriptQuestion::createButtons()
 			button->setRect(rect);
 
 			buttons_width += rect.getWidth() + LEFT_PAD;
+
+			if (form_element.has("default") && form_element["default"].asBoolean())
+			{
+				button->setFocus(TRUE);
+				setDefaultBtn(button);
+			}
 		}
 	}
 }
diff --git a/indra/newview/lltoastscriptquestion.h b/indra/newview/lltoastscriptquestion.h
index 3a557f60f6..a756f88415 100644
--- a/indra/newview/lltoastscriptquestion.h
+++ b/indra/newview/lltoastscriptquestion.h
@@ -39,6 +39,8 @@ public:
 	virtual BOOL postBuild();
 	virtual ~LLToastScriptQuestion(){};
 
+	/*virtual*/ void setFocus(BOOL b);
+
 private:
 	void snapToMessageHeight();
 
-- 
cgit v1.2.3


From c978542a068578091eb43cab024bd929f0eaaedd Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Tue, 7 Jun 2016 15:06:49 -0400
Subject: MAINT-6484 - make the attachment pos updates a bit smarter, so we
 don't flag the pelvis has having changed unless it has actually changed.
 Avoid excess calls to computeBodySize(), which can cause a vertical position
 glitch.

---
 indra/newview/llvoavatar.cpp | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 0423f0e380..137d172c14 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5452,19 +5452,29 @@ void LLVOAvatar::addAttachmentPosOverridesForObject(LLViewerObject *vo)
 						pJoint->setId( currentId );
 						const LLVector3& jointPos = pSkinData->mAlternateBindMatrix[i].getTranslation();									
                         //Set the joint position
+                        LLUUID curr_mesh_id;
+                        LLVector3 curr_joint_pos;
+                        if (!pJoint->hasAttachmentPosOverride( curr_joint_pos, curr_mesh_id ) ||
+                            curr_joint_pos != jointPos)
+                        {
+                            //If joint is a pelvis then handle old/new pelvis to foot values
+                            if ( lookingForJoint == "mPelvis" )
+                            {	
+                                pelvisGotSet = true;											
+                            }										
+                        }
                         pJoint->addAttachmentPosOverride( jointPos, mesh_id, avString() );
                             
-                        //If joint is a pelvis then handle old/new pelvis to foot values
-                        if ( lookingForJoint == "mPelvis" )
-                        {	
-                            pelvisGotSet = true;											
-                        }										
 					}										
 				}																
 				if (pelvisZOffset != 0.0F)
 				{
+                    F32 curr_pelvis_fixup;
+                    if (!hasPelvisFixup(curr_pelvis_fixup) || (curr_pelvis_fixup != pelvisZOffset))
+                    {
+                        pelvisGotSet = true;											
+                    }
 					addPelvisFixup( pelvisZOffset, mesh_id );
-					pelvisGotSet = true;											
 				}
 			}							
 		}
-- 
cgit v1.2.3


From 593d925831c6f2210db3a387db21277940ac06b0 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Tue, 7 Jun 2016 15:47:18 -0400
Subject: MAINT-6484 - more on pelvis update detection when attachments get
 updated.

---
 indra/newview/llvoavatar.cpp | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 137d172c14..7a3a72d789 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5453,9 +5453,15 @@ void LLVOAvatar::addAttachmentPosOverridesForObject(LLViewerObject *vo)
 						const LLVector3& jointPos = pSkinData->mAlternateBindMatrix[i].getTranslation();									
                         //Set the joint position
                         LLUUID curr_mesh_id;
-                        LLVector3 curr_joint_pos;
-                        if (!pJoint->hasAttachmentPosOverride( curr_joint_pos, curr_mesh_id ) ||
-                            curr_joint_pos != jointPos)
+                        LLVector3 joint_pos_before;
+                        bool has_pos_before = pJoint->hasAttachmentPosOverride( joint_pos_before, curr_mesh_id );
+
+                        pJoint->addAttachmentPosOverride( jointPos, mesh_id, avString() );
+
+                        LLVector3 joint_pos_after;
+                        pJoint->hasAttachmentPosOverride( joint_pos_after, curr_mesh_id );
+                        
+                        if (!has_pos_before || joint_pos_before != joint_pos_after)
                         {
                             //If joint is a pelvis then handle old/new pelvis to foot values
                             if ( lookingForJoint == "mPelvis" )
@@ -5463,18 +5469,21 @@ void LLVOAvatar::addAttachmentPosOverridesForObject(LLViewerObject *vo)
                                 pelvisGotSet = true;											
                             }										
                         }
-                        pJoint->addAttachmentPosOverride( jointPos, mesh_id, avString() );
                             
 					}										
 				}																
 				if (pelvisZOffset != 0.0F)
 				{
-                    F32 curr_pelvis_fixup;
-                    if (!hasPelvisFixup(curr_pelvis_fixup) || (curr_pelvis_fixup != pelvisZOffset))
+                    F32 pelvis_fixup_before;
+                    bool has_fixup_before =  hasPelvisFixup(pelvis_fixup_before);
+					addPelvisFixup( pelvisZOffset, mesh_id );
+					F32 pelvis_fixup_after;
+                    hasPelvisFixup(pelvis_fixup_after); // Don't have to check bool here because we just added it...
+                    if (!has_fixup_before || (pelvis_fixup_before != pelvis_fixup_after))
                     {
                         pelvisGotSet = true;											
                     }
-					addPelvisFixup( pelvisZOffset, mesh_id );
+                    
 				}
 			}							
 		}
-- 
cgit v1.2.3


From 1ca125376845a1764e0f2855d429d2909866f096 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 8 Jun 2016 14:42:27 -0400
Subject: MAINT-6491 - slider fix for wings on male avatar

---
 indra/newview/character/avatar_lad.xml | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 23c5352015..43db33abd4 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -708,9 +708,11 @@
          name="mHindLimb2Right"
          scale=".05 .05 .1" />
 
-        <bone name="mWingsRoot" scale="1 0 0" offset="0 0 0" />
-		<bone name="mWing1Right" scale="0 0 0" offset="0.02 0 0" />
-		<bone name="mWing1Left"  scale="0 0 0" offset="0.02 0 0" />
+        <bone name="mWingsRoot" scale="0 0 0" offset="0 0 0" />
+
+		<bone name="mWing1Right" scale="0 0 0" offset="-0.05 0 0" />
+
+		<bone name="mWing1Left"  scale="0 0 0" offset="-0.05 0 0" />
 
       </param_skeleton>
     </param>
-- 
cgit v1.2.3


From d7af1af1ec2268b0fcd335e3269216e90e4abfe5 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 8 Jun 2016 16:47:22 -0400
Subject: MAINT-3745 - fix for long-standing slider bug with the pec collision
 volumes

---
 indra/newview/character/avatar_lad.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 43db33abd4..cebc865c92 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -6635,7 +6635,7 @@
         <volume_morph
           name="RIGHT_PEC"
           scale="-0.05 0.0 0.0"
-          pos="-0.01 -0.01 -0.02"/>
+          pos="-0.01 0.01 -0.02"/>
 	  </param_morph>
     </param>
 
@@ -6661,7 +6661,7 @@
         <volume_morph
           name="RIGHT_PEC"
           scale="-0.051 0.0 0.0"
-          pos="-0.02 -0.01 -0.03"/>
+          pos="-0.02 0.01 -0.03"/>
 	  </param_morph>
     </param>
 
-- 
cgit v1.2.3


From dcb8880f29bf8ce51e4532366477d9bf026d1abd Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Thu, 9 Jun 2016 10:09:46 -0400
Subject: SL-276 - small skeleton file tweaks to 'end' and 'connected'
 attributes (no functional impact on viewer)

---
 indra/newview/character/avatar_skeleton.xml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_skeleton.xml b/indra/newview/character/avatar_skeleton.xml
index 350ba7b841..9b34deeb95 100644
--- a/indra/newview/character/avatar_skeleton.xml
+++ b/indra/newview/character/avatar_skeleton.xml
@@ -180,7 +180,7 @@
             <bone aliases="rFoot avatar_mAnkleRight" connected="true" end="0.112 0.000 -0.061" group="Legs" name="mAnkleRight" pivot="-0.028869 0.000000 -0.468494" pos="-0.029 0.000 -0.468" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
                <collision_volume end="0.089 0.000 -0.026" group="Collision" name="R_FOOT" pos="0.077 0.0 -0.041" rot="0.000000 10.00000 0.000000" scale="0.13 0.05 0.05" support="base"/>
                <bone aliases="avatar_mFootRight" connected="true" end="0.105 -0.010 -0.000" group="Extra" name="mFootRight" pivot="0.111956 -0.000000 -0.060637" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
-                  <bone aliases="avatar_mToeRight" connected="true" end="0.020 0.000 0.000" group="Extra" name="mToeRight" pivot="0.105399 -0.010408 -0.000104" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
+                  <bone aliases="avatar_mToeRight" connected="false" end="0.020 0.000 0.000" group="Extra" name="mToeRight" pivot="0.105399 -0.010408 -0.000104" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
                </bone>
             </bone>
          </bone>
@@ -192,7 +192,7 @@
             <bone aliases="lFoot avatar_mAnkleLeft" connected="true" end="0.112 0.000 -0.061" group="Legs" name="mAnkleLeft" pivot="-0.028887 0.001378 -0.468449" pos="-0.029 0.001 -0.468" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
                <collision_volume end="0.089 0.000 -0.026" group="Collision" name="L_FOOT" pos="0.077 0.0 -0.041" rot="0.000000 10.00000 0.000000" scale="0.13 0.05 0.05" support="base"/>
                <bone aliases="avatar_mFootLeft" connected="true" end="0.105 0.008 0.001" group="Extra" name="mFootLeft" pivot="0.111956 -0.000000 -0.060620" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
-                  <bone aliases="avatar_mToeLeft" connected="true" end="0.020 0.000 0.000" group="Extra" name="mToeLeft" pivot="0.105387 0.008270 0.000871" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
+                  <bone aliases="avatar_mToeLeft" connected="false" end="0.020 0.000 0.000" group="Extra" name="mToeLeft" pivot="0.105387 0.008270 0.000871" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
                </bone>
             </bone>
          </bone>
@@ -220,7 +220,7 @@
         <bone connected="false" end="0.002 0.046 -0.491" group="Limb" name="mHindLimb1Right" pivot="-0.204 -0.129 -0.125" pos="-0.204 -0.129 -0.125" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
           <bone connected="true" end="-0.030 0.003 -0.468" group="Limb" name="mHindLimb2Right" pivot="0.002 0.046 -0.491" pos="0.002 0.046 -0.491" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
             <bone connected="true" end="0.112 0.000 -0.061" group="Limb" name="mHindLimb3Right" pivot="-0.030 0.003 -0.468" pos="-0.030 0.003 -0.468" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-              <bone connected="true" end="0.105 0.008 0.001" group="Limb" name="mHindLimb4Right" pivot="0.112 -0.000 -0.061" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="extended" />
+              <bone connected="true" end="0.105 -0.008 0.001" group="Limb" name="mHindLimb4Right" pivot="0.112 -0.000 -0.061" pos="0.112 -0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended" />
             </bone>
           </bone>
         </bone>
-- 
cgit v1.2.3


From 93bafda56b7ba006da3a14a6c6783e235413176a Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Mon, 13 Jun 2016 09:15:42 -0400
Subject: MAINT-6366 - diagnostics related to animation asset downloads

---
 indra/newview/llappviewer.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 5287f98827..775402df66 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -5829,7 +5829,6 @@ void LLAppViewer::metricsUpdateRegion(U64 region_handle)
 	}
 }
 
-
 /**
  * Attempts to start a multi-threaded metrics report to be sent back to
  * the grid for consumption.
@@ -5847,6 +5846,11 @@ void LLAppViewer::metricsSend(bool enable_reporting)
 		{
 			std::string	caps_url = regionp->getCapability("ViewerMetrics");
 
+            if (gSavedSettings.getBOOL("QAModeMetrics"))
+            {
+                dump_sequential_xml("metric_asset_stats",gViewerAssetStats->asLLSD(true));
+            }
+            
 			// Make a copy of the main stats to send into another thread.
 			// Receiving thread takes ownership.
 			LLViewerAssetStats * main_stats(new LLViewerAssetStats(*gViewerAssetStats));
-- 
cgit v1.2.3


From d2302886bc132f5afe96612c8f13702775f0a303 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 15 Jun 2016 15:24:54 -0400
Subject: MAINT-6380, SL-399 - vertical flicker related to joint offsets for
 mPelvis. Having a joint offset for mPelvis is still a bad idea, but it won't
 cause as much flickering now.

---
 indra/newview/llvoavatar.cpp | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 7a3a72d789..0448fc6138 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5451,17 +5451,11 @@ void LLVOAvatar::addAttachmentPosOverridesForObject(LLViewerObject *vo)
 					{   									
 						pJoint->setId( currentId );
 						const LLVector3& jointPos = pSkinData->mAlternateBindMatrix[i].getTranslation();									
-                        //Set the joint position
-                        LLUUID curr_mesh_id;
-                        LLVector3 joint_pos_before;
-                        bool has_pos_before = pJoint->hasAttachmentPosOverride( joint_pos_before, curr_mesh_id );
 
-                        pJoint->addAttachmentPosOverride( jointPos, mesh_id, avString() );
+                        bool override_changed;
+                        pJoint->addAttachmentPosOverride( jointPos, mesh_id, avString(), override_changed );
 
-                        LLVector3 joint_pos_after;
-                        pJoint->hasAttachmentPosOverride( joint_pos_after, curr_mesh_id );
-                        
-                        if (!has_pos_before || joint_pos_before != joint_pos_after)
+                        if (override_changed)
                         {
                             //If joint is a pelvis then handle old/new pelvis to foot values
                             if ( lookingForJoint == "mPelvis" )
@@ -5633,8 +5627,9 @@ void LLVOAvatar::resetJointPositionsOnDetach(const LLUUID& mesh_id)
 		//Reset joints except for pelvis
 		if ( pJoint )
 		{			
+            bool dummy; // unused
 			pJoint->setId( LLUUID::null );
-			pJoint->removeAttachmentPosOverride(mesh_id, avString());
+			pJoint->removeAttachmentPosOverride(mesh_id, avString(), dummy);
 		}		
 		if ( pJoint && pJoint == pJointPelvis)
 		{
-- 
cgit v1.2.3


From ccf6b6179d697ac663039ee30fbd56c0edf4402d Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 17 Jun 2016 14:14:07 -0400
Subject: SL-398 - fix for eyelash-related sliders in avatar_lad.xml

---
 indra/newview/character/avatar_lad.xml | 40 ++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index cebc865c92..7f9dc73ddd 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -6335,6 +6335,46 @@
       <param_morph />
     </param>
 
+    <param
+     shared="1"
+     id="20021"
+     group="1"
+     name="Upper_Eyelid_Fold"
+     value_min="-0.2"
+     value_max="1.3">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="20024"
+     group="1"
+     name="Wide_Eyes"
+     value_min="-1.5"
+     value_max="2">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="20650"
+     group="1"
+     name="Eyelid_Corner_Up"
+     value_min="-1.3"
+     value_max="1.2">
+      <param_morph />
+    </param>
+
+    <param
+     shared="1"
+     id="20880"
+     group="1"
+     name="Eyelid_Inner_Corner_Up"
+     value_min="-1.3"
+     value_max="1.2">
+      <param_morph />
+    </param>
+
     <!--
             ##############
             # Facial Expression morphs
-- 
cgit v1.2.3


From 0d4e4cb2bec301a611cf11fd4ed3edd6218f967c Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Tue, 21 Jun 2016 17:26:41 -0400
Subject: SL-117 - possible skeleton changes for endpoints, jaw, eyelids

---
 indra/newview/character/avatar_skeleton.xml | 34 ++++++++++++++---------------
 1 file changed, 17 insertions(+), 17 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_skeleton.xml b/indra/newview/character/avatar_skeleton.xml
index 9b34deeb95..7d13f4907a 100644
--- a/indra/newview/character/avatar_skeleton.xml
+++ b/indra/newview/character/avatar_skeleton.xml
@@ -21,10 +21,10 @@
                            <bone aliases="head avatar_mHead" connected="true" end="0.000 0.000 0.079" group="Torso" name="mHead" pivot="0.000000 -0.000000 0.075630" pos="0.000 -0.000 0.076" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
                               <collision_volume end="0.000 0.000 0.100" group="Collision" name="HEAD" pos="0.02 0 0.07" rot="0.000000 0.000000 0.000000" scale="0.11 0.09 0.12" support="base"/>
                               <bone aliases="figureHair avatar_mSkull" connected="false" end="0.000 0.000 0.033" group="Extra" name="mSkull" pivot="0.000000 0.000000 0.079000" pos="0.000 0.000 0.079" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
-                              <bone aliases="avatar_mEyeRight" connected="false" end="0.100 0.000 0.000" group="Extra" name="mEyeRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" support="base"/>
-                              <bone aliases="avatar_mEyeLeft" connected="false" end="0.100 0.000 0.000" group="Extra" name="mEyeLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
-                              <bone connected="false" end="0.100 0.000 0.000" group="Face" name="mFaceEyeAltRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
-                              <bone connected="false" end="0.100 0.000 0.000" group="Face" name="mFaceEyeAltLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
+                              <bone aliases="avatar_mEyeRight" connected="false" end="0.022 0.000 0.000" group="Extra" name="mEyeRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" support="base"/>
+                              <bone aliases="avatar_mEyeLeft" connected="false" end="0.022 0.000 0.000" group="Extra" name="mEyeLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
+                              <bone connected="false" end="0.022 0.000 0.000" group="Face" name="mFaceEyeAltRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
+                              <bone connected="false" end="0.022 0.000 0.000" group="Face" name="mFaceEyeAltLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
                               <bone connected="false" end="0.020 0.000 0.000" group="Face" name="mFaceRoot" pivot="0.025 0.000 0.045" pos="0.025 0.000 0.045" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
                                  <bone connected="false" end="0.024 0.004 0.018" group="Face" name="mFaceForeheadLeft" pivot="0.061 0.035 0.083" pos="0.061 0.035 0.083" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.024 -0.004 0.018" group="Face" name="mFaceForeheadRight" pivot="0.061 -0.035 0.083" pos="0.061 -0.035 0.083" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
@@ -34,10 +34,10 @@
                                  <bone connected="false" end="0.023 -0.013 0.000" group="Eyes" name="mFaceEyebrowOuterRight" pivot="0.064 -0.051 0.048" pos="0.064 -0.051 0.048" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.027 0.000 0.000" group="Eyes" name="mFaceEyebrowCenterRight" pivot="0.070 -0.043 0.056" pos="0.070 -0.043 0.056" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.026 0.000 0.000" group="Eyes" name="mFaceEyebrowInnerRight" pivot="0.075 -0.022 0.051" pos="0.075 -0.022 0.051" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.038 0.000 0.000" group="Eyes" name="mFaceEyeLidUpperLeft" pivot="0.062 0.036 0.039" pos="0.062 0.036 0.039" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.036 0.000 0.000" group="Eyes" name="mFaceEyeLidLowerLeft" pivot="0.061 0.036 0.027" pos="0.061 0.036 0.027" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.038 0.000 0.000" group="Eyes" name="mFaceEyeLidUpperRight" pivot="0.062 -0.036 0.039" pos="0.062 -0.036 0.039" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.036 0.000 0.000" group="Eyes" name="mFaceEyeLidLowerRight" pivot="0.061 -0.036 0.027" pos="0.061 -0.036 0.027" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                 <bone connected="false" end="0.027 0.000 0.005" group="Eyes" name="mFaceEyeLidUpperLeft" pivot="0.073 0.036 0.034" pos="0.073 0.036 0.034" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                 <bone connected="false" end="0.024 0.000 -0.007" group="Eyes" name="mFaceEyeLidLowerLeft" pivot="0.073 0.036 0.034" pos="0.073 0.036 0.034" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                 <bone connected="false" end="0.027 0.000 0.005" group="Eyes" name="mFaceEyeLidUpperRight" pivot="0.073 -0.036 0.034" pos="0.073 -0.036 0.034" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                 <bone connected="false" end="0.024 0.000 -0.007" group="Eyes" name="mFaceEyeLidLowerRight" pivot="0.073 -0.036 0.034" pos="0.073 -0.036 0.034" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="-0.019 0.018 0.025" group="Ears" name="mFaceEar1Left" pivot="0.000 0.080 0.002" pos="0.000 0.080 0.002" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
                                     <bone connected="true" end="0.000 0.000 0.033" group="Ears" name="mFaceEar2Left" pivot="-0.019 0.018 0.025" pos="-0.019 0.018 0.025" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  </bone>
@@ -55,14 +55,14 @@
                                  <bone connected="false" end="0.048 -0.003 0.000" group="Lips" name="mFaceLipUpperRight" pivot="0.058 -0.012 -0.033" pos="0.058 -0.012 -0.033" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.045 0.008 0.000" group="Lips" name="mFaceLipCornerLeft" pivot="0.048 0.024 -0.040" pos="0.048 0.024 -0.040" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.045 -0.008 0.000" group="Lips" name="mFaceLipCornerRight" pivot="0.048 -0.024 -0.040" pos="0.048 -0.024 -0.040" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.044 0.000 -0.021" group="Mouth" name="mFaceJaw" pivot="0.020 0.000 -0.037" pos="0.020 0.000 -0.037" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-                                    <bone connected="true" end="0.020 0.000 0.008" group="Mouth" name="mFaceTongueBase" pivot="0.044 0.000 -0.021" pos="0.044 0.000 -0.021" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-                                       <bone connected="true" end="0.007 0.000 0.003" group="Mouth" name="mFaceTongueTip" pivot="0.020 0.000 0.008" pos="0.020 0.000 0.008" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                 <bone connected="false" end="0.060 0.000 -0.056" group="Mouth" name="mFaceJaw" pivot="0.000 0.000 0.000" pos="0.000 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                                    <bone connected="true" end="0.021 0.000 0.009" group="Mouth" name="mFaceTongueBase" pivot="0.060 0.000 -0.056" pos="0.060 0.000 -0.056" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                                       <bone connected="true" end="0.010 0.000 0.000" group="Mouth" name="mFaceTongueTip" pivot="0.021 0.000 0.009" pos="0.021 0.000 0.009" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                     </bone>
-                                    <bone connected="false" end="0.047 0.003 0.000" group="Lips" name="mFaceLipLowerLeft" pivot="0.032 0.014 -0.012" pos="0.032 0.014 -0.012" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                    <bone connected="false" end="0.047 -0.003 0.000" group="Lips" name="mFaceLipLowerRight" pivot="0.032 -0.014 -0.012" pos="0.032 -0.014 -0.012" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                    <bone connected="false" end="0.048 0.000 0.000" group="Lips" name="mFaceLipLowerCenter" pivot="0.037 0.000 -0.017" pos="0.037 0.000 -0.017" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                    <bone connected="false" end="0.021 0.000 -0.018" group="Mouth" name="mFaceChin" pivot="0.053 0.000 -0.032" pos="0.053 0.000 -0.032" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.047 0.003 0.000" group="Lips" name="mFaceLipLowerLeft" pivot="0.052 0.014 -0.049" pos="0.052 0.014 -0.049" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.047 -0.003 0.000" group="Lips" name="mFaceLipLowerRight" pivot="0.052 -0.014 -0.049" pos="0.052 -0.014 -0.049" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.048 0.000 0.000" group="Lips" name="mFaceLipLowerCenter" pivot="0.057 0.000 -0.054" pos="0.057 0.000 -0.054" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.021 0.000 -0.018" group="Mouth" name="mFaceChin" pivot="0.073 0.000 -0.069" pos="0.073 0.000 -0.069" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  </bone>
                                  <bone connected="false" end="0.036 0.000 0.000" group="Face" name="mFaceForeheadCenter" pivot="0.069 0.000 0.065" pos="0.069 0.000 0.065" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.048 0.000 0.000" group="Lips" name="mFaceLipUpperCenter" pivot="0.060 0.000 -0.030" pos="0.060 0.000 -0.030" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
@@ -179,7 +179,7 @@
             <collision_volume end="-0.010 0.000 -0.150" group="Collision" name="R_LOWER_LEG" pos="-0.02 0.0 -0.2" rot="0.000000 0.00000 0.000000" scale="0.06 0.06 0.25" support="base"/>
             <bone aliases="rFoot avatar_mAnkleRight" connected="true" end="0.112 0.000 -0.061" group="Legs" name="mAnkleRight" pivot="-0.028869 0.000000 -0.468494" pos="-0.029 0.000 -0.468" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
                <collision_volume end="0.089 0.000 -0.026" group="Collision" name="R_FOOT" pos="0.077 0.0 -0.041" rot="0.000000 10.00000 0.000000" scale="0.13 0.05 0.05" support="base"/>
-               <bone aliases="avatar_mFootRight" connected="true" end="0.105 -0.010 -0.000" group="Extra" name="mFootRight" pivot="0.111956 -0.000000 -0.060637" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
+               <bone aliases="avatar_mFootRight" connected="true" end="0.105 -0.010 0.000" group="Extra" name="mFootRight" pivot="0.111956 -0.000000 -0.060637" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
                   <bone aliases="avatar_mToeRight" connected="false" end="0.020 0.000 0.000" group="Extra" name="mToeRight" pivot="0.105399 -0.010408 -0.000104" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
                </bone>
             </bone>
@@ -220,7 +220,7 @@
         <bone connected="false" end="0.002 0.046 -0.491" group="Limb" name="mHindLimb1Right" pivot="-0.204 -0.129 -0.125" pos="-0.204 -0.129 -0.125" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
           <bone connected="true" end="-0.030 0.003 -0.468" group="Limb" name="mHindLimb2Right" pivot="0.002 0.046 -0.491" pos="0.002 0.046 -0.491" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
             <bone connected="true" end="0.112 0.000 -0.061" group="Limb" name="mHindLimb3Right" pivot="-0.030 0.003 -0.468" pos="-0.030 0.003 -0.468" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-              <bone connected="true" end="0.105 -0.008 0.001" group="Limb" name="mHindLimb4Right" pivot="0.112 -0.000 -0.061" pos="0.112 -0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended" />
+              <bone connected="true" end="0.105 -0.008 0.001" group="Limb" name="mHindLimb4Right" pivot="0.112 0.000 -0.061" pos="0.112 0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
             </bone>
           </bone>
         </bone>
-- 
cgit v1.2.3


From 30d17f3fd5a08936904d4123f802f6a0ee415009 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 22 Jun 2016 19:11:38 -0400
Subject: SL-117, SL-344 - additional proposed updates for skeleton, sliders

---
 indra/newview/character/avatar_lad.xml      | 1281 +++++++++++++++------------
 indra/newview/character/avatar_skeleton.xml |    6 +-
 2 files changed, 739 insertions(+), 548 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 7f9dc73ddd..8b4d503eb1 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
 <linden_avatar
-  version="2.0" wearable_definition_version="22">
+  version="2.0" wearable_definition_version="22"> 
   <!-- The wearable_definition_version is checked during asset upload. -->
   <!-- If you increment it, check indra/lib/python/indra/assetutil.py.  -->
   <skeleton
@@ -430,7 +430,7 @@
        hud="true"
        max_attachment_offset="2.0"
        visible_in_first_person="true" />
-
+       
     <attachment_point
        id="39"
        group="6"
@@ -441,7 +441,7 @@
        position="0 0 0"
        rotation="0 0 0"
        visible_in_first_person="true" />
-
+  	
   	<attachment_point
        id="40"
        group="6"
@@ -452,7 +452,7 @@
        position="0 0 0"
        rotation="0 0 0"
        visible_in_first_person="true" />
-
+ 
      <!-- BENTO ADDITIONS -->
 
     <attachment_point
@@ -708,10 +708,10 @@
          name="mHindLimb2Right"
          scale=".05 .05 .1" />
 
-        <bone name="mWingsRoot" scale="0 0 0" offset="0 0 0" />
-
+        <bone name="mWingsRoot"  scale="0 0 0" offset="0 0 0" />
+ 
 		<bone name="mWing1Right" scale="0 0 0" offset="-0.05 0 0" />
-
+ 
 		<bone name="mWing1Left"  scale="0 0 0" offset="-0.05 0 0" />
 
       </param_skeleton>
@@ -880,7 +880,7 @@
         <bone
          name="mSpine2"
          scale="0.1 0.1 0" />
-
+		 
         <bone
          name="mHipLeft"
          scale="0.13 0.13 0" />
@@ -971,7 +971,7 @@
          scale="0.0 0.0 0.0"
          offset="0 -0.02 0" />
 
-		<bone
+		<bone 
          name="mWing1Left"
          scale="0.0 0.0 0.0"
          offset="0 0.02 0" />
@@ -1163,7 +1163,7 @@
          name="mEyeRight"
          scale="0 0 0"
          offset="0 -.009 0" />
-
+		 
 	    <bone
          name="mFaceEyeAltLeft"
          scale="0 0 0 "
@@ -1173,47 +1173,47 @@
          name="mFaceEyeAltRight"
          scale="0 0 0 "
          offset="0 -.009 0" />
-
+		 
 	    <bone
          name="mFaceEyeLidLowerLeft"
          scale="0 0 0 "
-         offset="0 .009 0" />
+         offset="0 .00930 0" />
 
         <bone
          name="mFaceEyeLidLowerRight"
          scale="0 0 0 "
-         offset="0 -.009 0" />
-
+         offset="0 -.00930 0" />
+		 
 	    <bone
          name="mFaceEyeLidUpperLeft"
          scale="0 0 0 "
-         offset="0 .009 0" />
+         offset="0 .00930 0" />
 
         <bone
          name="mFaceEyeLidUpperRight"
          scale="0 0 0 "
-         offset="0 -.009 0" />
-
+         offset="0 -.00930 0" />
+		 
 	    <bone
          name="mFaceEyebrowInnerLeft"
          scale="0 0 0 "
-         offset="0 .009 0" />
+         offset="0 .00930 0" />
 
         <bone
          name="mFaceEyebrowInnerRight"
          scale="0 0 0 "
-         offset="0 -.009 0" />
-
+         offset="0 -.00930 0" />
+		 
 	    <bone
          name="mFaceEyebrowCenterLeft"
          scale="0 0 0 "
-         offset="0 .009 0" />
+         offset="0 .00930 0" />
 
         <bone
          name="mFaceEyebrowCenterRight"
          scale="0 0 0 "
-         offset="0 -.009 0" />
-
+         offset="0 -.00930 0" />
+		 
 	    <bone
          name="mFaceEyebrowOuterLeft"
          scale="0 0 0 "
@@ -1223,7 +1223,7 @@
          name="mFaceEyebrowOuterRight"
          scale="0 0 0 "
          offset="0 -.005 0" />
-
+		 
         <bone
          name="mFaceEyecornerInnerLeft"
          scale="0 0 0 "
@@ -1233,7 +1233,7 @@
          name="mFaceEyecornerInnerRight"
          scale="0 0 0 "
          offset="0 -.008 0" />
-
+ 
       </param_skeleton>
     </param>
 
@@ -1257,7 +1257,7 @@
          name="mEyeRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
         <bone
          name="mFaceEyeAltLeft"
          scale="0 0 0"
@@ -1266,7 +1266,7 @@
         <bone
          name="mFaceEyeAltRight"
          scale="0 0 0"
-         offset="0 0 -.004" />
+         offset="0 0 -.004" /> 
 
 		<bone
          name="mFaceNoseRight"
@@ -1291,27 +1291,27 @@
          name="mFaceLipUpperLeft"
          scale="0 0 0"
          offset="0 0 .004" />
-
+		 
 		 <bone
          name="mFaceLipUpperRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
 		 <bone
          name="mFaceLipLowerLeft"
          scale="0 0 0"
          offset="0 0 .004" />
-
+		 
 		 <bone
          name="mFaceLipLowerRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
 		 <bone
          name="mFaceLipCornerRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
 		 <bone
          name="mFaceLipCornerLeft"
          scale="0 0 0"
@@ -1326,7 +1326,7 @@
          name="mFaceCheekLowerRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
 		 <bone
          name="mFaceCheekUpperLeft"
          scale="0 0 0"
@@ -1336,7 +1336,7 @@
          name="mFaceCheekUpperRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
 		 <bone
          name="mFaceEyeLidUpperLeft"
          scale="0 0 0"
@@ -1346,7 +1346,7 @@
          name="mFaceEyeLidUpperRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
 		 <bone
          name="mFaceEyeLidLowerLeft"
          scale="0 0 0"
@@ -1356,7 +1356,7 @@
          name="mFaceEyeLidLowerRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
 		 <bone
          name="mFaceEyebrowInnerLeft"
          scale="0 0 0"
@@ -1366,7 +1366,7 @@
          name="mFaceEyebrowInnerRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
 		 <bone
          name="mFaceEyebrowCenterLeft"
          scale="0 0 0"
@@ -1386,17 +1386,17 @@
          name="mFaceEyebrowOuterRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
 		 <bone
          name="mFaceEyecornerInnerRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
 		 <bone
          name="mFaceEyecornerInnerLeft"
          scale="0 0 0"
          offset="0 0 0.004" />
-
+		 
 		 <bone
          name="mFaceForeheadLeft"
          scale="0 0 0"
@@ -1406,7 +1406,7 @@
          name="mFaceForeheadRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-
+		 
       </param_skeleton>
     </param>
 
@@ -1440,6 +1440,26 @@
          name="mFaceEyeAltRight"
          scale="0 0 0"
          offset=".016 0 0" />
+		 
+		 <bone
+         name="mFaceEyeLidUpperLeft"
+         scale="0 0 0"
+         offset="-0.0038 0 0" />
+
+		 <bone
+         name="mFaceEyeLidUpperRight"
+         scale="0 0 0"
+         offset="-0.0038 0 0" />
+		 
+		 <bone
+         name="mFaceEyeLidLowerLeft"
+         scale="0 0 0"
+         offset="-0.0038 0 0" />
+
+		 <bone
+         name="mFaceEyeLidLowerRight"
+         scale="0 0 0"
+         offset="-0.0038 0 0" />
 
 		<bone
          name="mFaceRoot"
@@ -1467,56 +1487,56 @@
          offset=".005 0 0" />
 
 		<bone
-         name="mFaceLipUpperCenter"
+         name="mFaceLipUpperLeft"
          scale="0 0 0"
          offset="0.005 0 0" />
 
 		<bone
-         name="mFaceLipLowerCenter"
-         scale="0 0 0"
-         offset="0.01 0 0" />
-
-		 <bone
-         name="mFaceLipUpperLeft"
+         name="mFaceLipUpperCenter"
          scale="0 0 0"
          offset="0.005 0 0" />
 
-		 <bone
+		<bone
          name="mFaceLipUpperRight"
          scale="0 0 0"
          offset="0.005 0 0" />
-
-		 <bone
+		 
+		<bone
          name="mFaceLipLowerLeft"
          scale="0 0 0"
-         offset="0.004 0 0" />
+         offset="0.02 0 0" />		 
 
-		 <bone
-         name="mFaceLipLowerRight"
+		<bone
+         name="mFaceLipLowerCenter"
          scale="0 0 0"
-         offset="0.004 0 0" />
+         offset="0.02 0 0" />
 
-		 <bone
+		<bone
+         name="mFaceLipLowerRight"
+         scale="0 0 0"
+         offset="0.02 0 0" />
+		 
+		<bone
          name="mFaceLipCornerRight"
          scale="0 0 0"
          offset="0.004 0 0" />
 
-		 <bone
+		<bone
          name="mFaceLipCornerLeft"
          scale="0 0 0"
          offset="0.004 0 0" />
-
-		 <bone
+		 
+		<bone
          name="mFaceCheekLowerLeft"
          scale="0 0 0"
          offset="0.007 0 0" />
-
-		 <bone
+		 
+		<bone
          name="mFaceCheekLowerRight"
          scale="0 0 0"
          offset="-0.007 0 0" />
 
-		 <bone
+		<bone
          name="mFaceTeethUpper"
          scale="0 0 0"
          offset="0.012 0 0" />
@@ -1527,9 +1547,19 @@
          offset="0.012 0 0" />
 
 		 <bone
-         name="mFaceJaw"
+         name="mFaceChin"
          scale="0 0 0"
-         offset="0.01 0 0" />
+         offset="0.014 0 0" />
+
+		 <bone
+         name="mFaceTongueBase"
+         scale="0 0 0"
+         offset="0.014 0 0" />
+
+		 <bone
+         name="mFaceTongueTip"
+         scale="0 0 0"
+         offset="0.008 0 0" />
 
       </param_skeleton>
     </param>
@@ -1623,10 +1653,10 @@
          name="mFaceEyebrowOuterLeft"
          scale="0 0 0 "
          offset=".0013 0 0" />
+		 
+		 
 
-
-
-
+		 
       </param_skeleton>
     </param>
 
@@ -1648,27 +1678,27 @@
          name = "mFaceTeethLower"
          scale = "1 1 1"
          offset = "0 0 0" />
-
+ 
         <bone
          name = "mFaceTeethUpper"
          scale = "1 1 1"
          offset = "0 0 0" />
-
+ 
         <bone
          name = "mFaceEyecornerInnerLeft"
          scale = "1 1 1"
          offset = "0 0 0" />
-
+ 
         <bone
          name = "mFaceEyecornerInnerRight"
          scale = "1 1 1"
          offset = "0 0 0" />
-
+ 
         <bone
          name = "mFaceNoseBridge"
          scale = "1 1 1"
          offset = "0 0 0" />
-
+ 
         <bone
          name = "mFaceNoseBase"
          scale = "1 1 1"
@@ -1687,7 +1717,7 @@
          name="mFaceRoot"
          scale="1 1 1"
          offset="0 0 0" />
-
+ 
         <bone
          name="mEyeLeft"
          scale="1 1 1"
@@ -1697,7 +1727,7 @@
          name="mEyeRight"
          scale="1 1 1"
          offset="0 0 0" />
-
+ 
         <bone
          name="mFaceEyeAltLeft"
          scale="1 1 1"
@@ -1707,7 +1737,7 @@
          name="mFaceEyeAltRight"
          scale="1 1 1"
          offset="0 0 0" />
-
+ 
         <bone
          name="mFaceForeheadLeft"
          scale="1 1 1"
@@ -1742,42 +1772,42 @@
          name="mFaceEyebrowOuterRight"
          scale="1 1 1"
          offset="0 0 0" />
-
+		 
         <bone
          name="mFaceEyebrowCenterRight"
          scale="1 1 1"
          offset="0 0 0" />
-
+		 
         <bone
          name="mFaceEyebrowInnerRight"
          scale="1 1 1"
          offset="0 0 0" />
-
+        
         <bone
          name="mFaceEyeLidUpperLeft"
          scale="1 1 1"
          offset="0 0 0" />
-
+        
         <bone
          name="mFaceEyeLidLowerLeft"
          scale="1 1 1"
          offset="0 0 0" />
-
+                
         <bone
          name="mFaceEyeLidUpperRight"
          scale="1 1 1"
          offset="0 0 0" />
-
+        
         <bone
          name="mFaceEyeLidLowerRight"
          scale="1 1 1"
          offset="0 0 0" />
-
+        
         <bone
          name="mFaceNoseLeft"
          scale="1 1 1"
          offset="0 0 0" />
-
+		 
 	    <bone
          name="mFaceNoseCenter"
          scale="1 1 1"
@@ -1808,6 +1838,16 @@
          scale="1 1 1"
          offset="0 0 0" />
 
+        <bone
+         name="mFaceTongueBase"
+         scale="1 1 1"
+         offset="0 0 0" />
+
+        <bone
+         name="mFaceTongueTip"
+         scale="1 1 1"
+         offset="0 0 0" />
+
         <bone
          name="mFaceJaw"
          scale="1 1 1"
@@ -2039,7 +2079,7 @@
          name="mEyeRight"
          scale="0 0 0"
          offset="-.005 0 0" />
-
+		 
         <bone
          name="mFaceEyeAltLeft"
          scale="0 0 0"
@@ -2049,37 +2089,37 @@
          name="mFaceEyeAltRight"
          scale="0 0 0"
          offset="-.005 0 0" />
-
+		 
         <bone
          name="mFaceEyeLidLowerRight"
-         scale="0 0.7 0.5"
-         offset="-.003 0 -0.003" />
+         scale="0 0 0"
+         offset="-.005 0.0 -0.0" />
 
         <bone
          name="mFaceEyeLidLowerLeft"
-         scale="0 0.7 0.5"
-         offset="-.003 0 -0.003" />
-
+         scale="0 0 0"
+         offset="-.005 0.0 -0.0" />
+		 
         <bone
          name="mFaceEyeLidUpperRight"
-         scale="0 0.7 0.5"
-         offset="-.003 0 0.003" />
+         scale="0 0 0"
+         offset="-.005 0.0 -0.0" />
 
         <bone
          name="mFaceEyeLidUpperLeft"
-         scale="0 0.7 0.5"
-         offset="-.003 0 0.003" />
-
+         scale="0 0 0"
+         offset="-.005 0.0 -0.0" />
+		 
         <bone
          name="mFaceEyecornerInnerLeft"
          scale="0 0 0"
          offset="-0.005 -0.008 0.0" />
-
+		 
         <bone
          name="mFaceEyecornerInnerRight"
          scale="0 0 0"
          offset="-0.005 0.008 0.0" />
-
+		 
       </param_skeleton>
     </param>
 
@@ -2183,7 +2223,7 @@
          scale="0 0 .5" />
       </param_skeleton>
     </param>
-
+	
     <param
      id="11001"
      group="0"
@@ -2199,7 +2239,7 @@
      camera_distance="2.5">
       <param_skeleton />
     </param>
-
+	
     <param
      id="30002"
      group="1"
@@ -2226,7 +2266,7 @@
 
       </param_skeleton>
     </param>
-
+	
     <param
      id="30004"
      group="1"
@@ -2244,7 +2284,7 @@
          scale  = "0.0 0.0 0.0" />
       </param_skeleton>
     </param>
-
+	
     <param
      id="30020"
      group="1"
@@ -2267,7 +2307,7 @@
 		 scale  = "0 0.3 0"
 		 offset = "0 -0.0015 0"
 		 />
-
+		 
       </param_skeleton>
 	</param>
 
@@ -2285,11 +2325,11 @@
         <bone
          name   = "mFaceNoseLeft"
 		 scale  = "0 0 0"
-		 offset = "0.001 0.010 0"/>
+		 offset = "0.001 0.010 0"/>		 
         <bone
          name   = "mFaceNoseRight"
 		 scale  = "0 0 0"
-		 offset = "-0.001 -0.01 0" />
+		 offset = "-0.001 -0.01 0" />		 
       </param_skeleton>
     </param>
 
@@ -2302,44 +2342,44 @@
       <param_skeleton>
         <bone
          name   = "mFaceNoseCenter"
-         scale  = "0.0 0.00 0.0"
+         scale  = "0.0 0.00 0.0" 
 		 offset = "0.0 0.009 0.0" />
-
+        
         <bone
          name   = "mFaceNoseBase"
-         scale  = "0.0 0.00 0.0"
+         scale  = "0.0 0.00 0.0" 
 		 offset = "0.0 0.007 0.0" />
-
+        
 		<bone
          name   = "mFaceNoseLeft"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.005 0.0"/>
-
+		 
         <bone
          name   = "mFaceNoseRight"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.005 0.0" />
-
+		 
         <bone
          name   = "mFaceLipCornerLeft"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.001 0.0" />
-
+		 
         <bone
          name   = "mFaceLipUpperLeft"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.002 0.0" />
-
+		 
         <bone
          name   = "mFaceLipUpperCenter"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.003 0.0" />
-
+		 
         <bone
          name   = "mFaceLipUpperRight"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.002 0.0" />
-
+		 
         <bone
          name   = "mFaceLipCornerRight"
 		 scale  = "0.0 0.00 0.0"
@@ -2354,22 +2394,22 @@
          name   = "mFaceEyebrowInnerLeft"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.0008 0.0" />
-
+		 
         <bone
          name   = "mFaceNoseBridge"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.004 0.0" />
-
+		 
         <bone
          name   = "mFaceTeethUpper"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.003 0.0" />
-
+		 		 
         <bone
          name   = "mFaceEyecornerInnerRight"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.001 0.0" />
-
+		 
         <bone
          name   = "mFaceEyecornerInnerLeft"
 		 scale  = "0.0 0.00 0.0"
@@ -2377,7 +2417,7 @@
 
       </param_skeleton>
     </param>
-
+	
     <param
      id="30155"
      group="1"
@@ -2390,27 +2430,27 @@
          name   = "mFaceLipCornerLeft"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.005 0.0" />
-
+		 
         <bone
          name   = "mFaceLipUpperLeft"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.003 0.0" />
-
+		 
         <bone
          name   = "mFaceLipUpperRight"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 -0.003 0.0" />
-
+		 
         <bone
          name   = "mFaceLipLowerLeft"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.003 0.0" />
-
+		 
         <bone
          name   = "mFaceLipLowerRight"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 -0.003 0.0" />
-
+		 
         <bone
          name   = "mFaceLipCornerRight"
 		 scale  = "0.0 0.00 0.0"
@@ -2430,32 +2470,32 @@
          name   = "mFaceLipCornerLeft"
 		 scale  = "0.2 0.00 0.2"
 		 offset = "-0.01 0.00 0.0" />
-
+		 
         <bone
          name   = "mFaceLipUpperLeft"
 		 scale  = "0.2 0.00 0.2"
 		 offset = "-0.01 0.00 0.0015" />
-
+		 
         <bone
          name   = "mFaceLipUpperCenter"
 		 scale  = "0.2 0.00 0.2"
 		 offset = "-0.01 0.00 0.0025" />
-
+		 
         <bone
          name   = "mFaceLipUpperRight"
 		 scale  = "0.2 0.00 0.2"
 		 offset = "-0.01 0.00 0.0015" />
-
+		 
         <bone
          name   = "mFaceLipCornerRight"
 		 scale  = "0.2 0.00 0.2"
 		 offset = "-0.01 0.00 0.0" />
-
+		 		 
 	    <bone
          name   = "mFaceLipLowerLeft"
 		 scale  = "0.2 0.00 0.2"
 		 offset = "-0.01 0.00 -0.0015" />
-
+		 
         <bone
          name   = "mFaceLipLowerCenter"
 		 scale  = "0.2 0.00 0.2"
@@ -2465,10 +2505,10 @@
          name   = "mFaceLipLowerRight"
 		 scale  = "0.2 0.00 0.2"
 		 offset = "-0.01 0.00 -0.0015" />
-
+		 
       </param_skeleton>
     </param>
-
+	
     <param
      id="30505"
      group="1"
@@ -2481,32 +2521,32 @@
          name   = "mFaceLipCornerLeft"
 		 scale  = "0.2 0.00 -0.6"
 		 offset = "-0.01 0.00 0.0" />
-
+		 
         <bone
          name   = "mFaceLipUpperLeft"
 		 scale  = "0.2 0.00 -0.6"
 		 offset = "-0.012 0.00 -0.005" />
-
+		 
         <bone
          name   = "mFaceLipUpperCenter"
 		 scale  = "0.2 0.00 -0.6"
 		 offset = "-0.015 0.00 -0.005" />
-
+		 
         <bone
          name   = "mFaceLipUpperRight"
 		 scale  = "0.2 0.00 -0.6"
 		 offset = "-0.012 0.00 -0.005" />
-
+		 
         <bone
          name   = "mFaceLipCornerRight"
 		 scale  = "0.2 0.00 -0.6"
 		 offset = "-0.01 0.00 0.0" />
-
+		 		 
 	    <bone
          name   = "mFaceLipLowerLeft"
 		 scale  = "0.2 0.00 -0.6"
 		 offset = "-0.01 0.00 0.008" />
-
+		 
         <bone
          name   = "mFaceLipLowerCenter"
 		 scale  = "0.2 0.00 -0.6"
@@ -2519,7 +2559,7 @@
 
       </param_skeleton>
     </param>
-
+	
     <param
      id="31505"
      group="1"
@@ -2532,32 +2572,32 @@
          name   = "mFaceLipCornerLeft"
 		 scale  = "0.2 0.00 0.1"
 		 offset = "0.005 0.00 0.0" />
-
+		 
         <bone
          name   = "mFaceLipUpperLeft"
 		 scale  = "0.2 0.00 0.7"
 		 offset = "0.004 0.00 0.006" />
-
+		 
         <bone
          name   = "mFaceLipUpperCenter"
 		 scale  = "0.2 0.00 0.7"
 		 offset = "0.004 0.00 0.006" />
-
+		 
         <bone
          name   = "mFaceLipUpperRight"
 		 scale  = "0.2 0.00 0.7"
 		 offset = "0.004 0.00 0.006" />
-
+		 
         <bone
          name   = "mFaceLipCornerRight"
 		 scale  = "0.2 0.00 0.1"
 		 offset = "0.005 0.00 0.0" />
-
+		 		 
 	    <bone
          name   = "mFaceLipLowerLeft"
 		 scale  = "0.2 0.00 0.3"
 		 offset = "0.006 0.00 -0.003" />
-
+		 
         <bone
          name   = "mFaceLipLowerCenter"
 		 scale  = "0.2 0.00 0.3"
@@ -2570,7 +2610,7 @@
 
       </param_skeleton>
     </param>
-
+		
     <param
      id="30797"
      group="1"
@@ -2578,7 +2618,7 @@
      value_min="0"
      value_max="1.5">
       <param_skeleton>
-
+		 		 
         <bone
          name   = "mFaceLipCornerLeft"
 		 scale  = "0 0 0"
@@ -2593,7 +2633,7 @@
          name   = "mFaceLipUpperLeft"
 	     scale  = " 0.1 0 0.6"
 		 offset = "-0.006 0.00 0.006" />
-
+		 
         <bone
          name   = "mFaceLipUpperCenter"
 	     scale  = " 0.1 0 0.4"
@@ -2606,9 +2646,9 @@
 
  	    <bone
          name   = "mFaceLipLowerLeft"
-	     scale  = " 0 0 0"
+	     scale  = " 0 0 0"	 
 		 offset = "-0.002 0.00 0.001" />
-
+		 
         <bone
          name   = "mFaceLipLowerCenter"
 	     scale  = " 0 0 0"
@@ -2629,7 +2669,7 @@
      value_min="0"
      value_max="1.5">
       <param_skeleton>
-
+		 		 
         <bone
          name   = "mFaceLipCornerLeft"
 		 scale  = "0 0 0"
@@ -2644,7 +2684,7 @@
          name   = "mFaceLipUpperLeft"
 	     scale  = " 0 0 0"
 		 offset = "-0.002 0.00 -0.003" />
-
+		 
         <bone
          name   = "mFaceLipUpperCenter"
 	     scale  = " 0 0 0"
@@ -2654,12 +2694,12 @@
          name   = "mFaceLipUpperRight"
 	     scale  = " 0 0 0"
 		 offset = "-0.002 0.00 -0.003" />
-
+		 
 	    <bone
          name   = "mFaceLipLowerLeft"
 	     scale  = " 0.1 0 0.25"
 		 offset = "-0.005 0.00 -0.004" />
-
+		 
         <bone
          name   = "mFaceLipLowerCenter"
 	     scale  = " 0.1 0 0.25"
@@ -2672,7 +2712,7 @@
 
       </param_skeleton>
     </param>
-
+	
     <param
      id="30506"
      group="1"
@@ -2680,7 +2720,7 @@
      value_min="-2"
      value_max="2">
       <param_skeleton>
-
+		 		 
         <bone
          name   = "mFaceLipCornerLeft"
 		 scale  = "0 0 0"
@@ -2695,7 +2735,7 @@
          name   = "mFaceLipUpperLeft"
 	     scale  = " 0 0 0"
 		 offset = "0 0 -0.006" />
-
+		 
         <bone
          name   = "mFaceLipUpperCenter"
 	     scale  = " 0 0 0"
@@ -2705,12 +2745,12 @@
          name   = "mFaceLipUpperRight"
 	     scale  = " 0 0 0"
 		 offset = "0 0 -0.006" />
-
+		 
 	    <bone
          name   = "mFaceLipLowerLeft"
 	     scale  = " 0 0 0"
 		 offset = "0 0 -0.006" />
-
+		 
         <bone
          name   = "mFaceLipLowerCenter"
 	     scale  = " 0 0 0"
@@ -2735,7 +2775,7 @@
          name   = "mFaceTeethLower"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0 0 -0.006" />
-
+		 
         <bone
          name   = "mFaceNoseBase"
 		 scale  = "0.0 0.00 0.0"
@@ -2743,7 +2783,7 @@
 
       </param_skeleton>
     </param>
-
+	
     <param
      id="30658"
      group="1"
@@ -2765,7 +2805,7 @@
          name   = "mFaceLipUpperLeft"
 	     scale  = "0 0 0"
 		 offset = "0 0 0" />
-
+		 
         <bone
          name   = "mFaceLipUpperCenter"
 	     scale  = "0 0 0"
@@ -2775,12 +2815,12 @@
          name   = "mFaceLipUpperRight"
 	     scale  = "0 0 0"
 		 offset = "0 0 0" />
-
+		 
 	    <bone
          name   = "mFaceLipLowerLeft"
 	     scale  = "0 0 0"
 		 offset = "0 0 0.001" />
-
+		 
         <bone
          name   = "mFaceLipLowerCenter"
 	     scale  = "0 0 0"
@@ -2800,7 +2840,7 @@
      value_min="0"
      value_max="1.4">
       <param_skeleton>
-
+		 		 
         <bone
          name   = "mFaceLipCornerLeft"
 		 scale  = "0 0 0"
@@ -2815,7 +2855,7 @@
          name   = "mFaceLipUpperLeft"
 		 scale  = "0 0 0"
 		 offset = "0 0.002 0" />
-
+		 
         <bone
          name   = "mFaceLipUpperCenter"
 		 scale  = "0 0 0"
@@ -2825,12 +2865,12 @@
          name   = "mFaceLipUpperRight"
 		 scale  = "0 0 0"
 		 offset = "0 -0.002 0" />
-
+		 
 	    <bone
          name   = "mFaceLipLowerLeft"
 		 scale  = "0 0 0"
 		 offset = "0 0.001 0" />
-
+		 
         <bone
          name   = "mFaceLipLowerCenter"
 		 scale  = "0 0 0"
@@ -2843,7 +2883,7 @@
 
       </param_skeleton>
     </param>
-
+	
     <param
      id="30764"
      group="1"
@@ -2851,12 +2891,12 @@
      value_min="-1"
      value_max="1.2">
       <param_skeleton>
-
+		 		 
 	    <bone
          name   = "mFaceLipUpperLeft"
 		 scale  = "0 0 0"
 		 offset = "0 0 0.002" />
-
+		 
         <bone
          name   = "mFaceLipUpperCenter"
 		 scale  = "0 0 0"
@@ -2869,7 +2909,7 @@
 
       </param_skeleton>
 	 </param>
-
+	 
     <param
      id="30025"
      group="1"
@@ -2877,12 +2917,12 @@
      value_min="-.8"
      value_max="1.5">
       <param_skeleton>
-
+		 		 
 	    <bone
          name   = "mFaceLipUpperLeft"
 		 scale  = "0 0 0"
 		 offset = "0 0.004 0" />
-
+		 
         <bone
          name   = "mFaceLipUpperRight"
 		 scale  = "0  0 0"
@@ -2890,7 +2930,7 @@
 
       </param_skeleton>
     </param>
-
+	
     <param
      id="31663"
      group="1"
@@ -2900,14 +2940,14 @@
       <param_skeleton>
         <bone
          name   = "mFaceNoseCenter"
-         scale  = "0.0 0.00 0.0"
+         scale  = "0.0 0.00 0.0" 
 		 offset = "0.0 -0.003 0.0" />
 
         <bone
          name   = "mFaceNoseBase"
-         scale  = "0.0 0.00 0.0"
+         scale  = "0.0 0.00 0.0" 
 		 offset = "0.0 -0.004 0.0" />
-
+        
 		<bone
          name   = "mFaceNoseLeft"
 		 scale  = "0.0 0.00 0.0"
@@ -2957,18 +2997,18 @@
          name   = "mFaceLipLowerRight"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "-0.002 -0.005 0.0" />
-
+		 
         <bone
          name   = "mFaceTeethUpper"
 		 scale  = "0.0  0.00 0.0"
 		 offset = "-0.002 -0.005 0.0" />
-
+		 
         <bone
          name   = "mFaceTeethLower"
 		 scale  = "0.0  0.00 0.0"
 		 offset = "-0.002 -0.006 0.0" />
-
-
+		 
+		 
 
       </param_skeleton>
     </param>
@@ -2982,14 +3022,14 @@
       <param_skeleton>
         <bone
          name   = "mFaceNoseCenter"
-         scale  = "0.0 0.00 0.0"
+         scale  = "0.0 0.00 0.0" 
 		 offset = "0.0 0.003 0.0" />
 
         <bone
          name   = "mFaceNoseBase"
-         scale  = "0.0 0.00 0.0"
+         scale  = "0.0 0.00 0.0" 
 		 offset = "0.0 0.004 0.0" />
-
+        
 		<bone
          name   = "mFaceNoseLeft"
 		 scale  = "0.0 0.00 0.0"
@@ -3023,7 +3063,7 @@
         <bone
          name   = "mFaceLipCornerRight"
 		 scale  = "0.0 0.00 0.0"
-		 offset = "0.0 0.005 0.0" />
+		 offset = "0.0 0.005 0.0" />		 
 
         <bone
          name   = "mFaceLipLowerLeft"
@@ -3039,17 +3079,17 @@
          name   = "mFaceLipLowerRight"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.007 0.0" />
-
+		 
         <bone
          name   = "mFaceTeethUpper"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "-0.002 0.005 0.0" />
-
+		 
         <bone
          name   = "mFaceTeethLower"
 		 scale  = "0.0 0.00 0.0"
 		 offset = "-0.002 0.006 0.0" />
-
+		 
 
        </param_skeleton>
 	  </param>
@@ -3063,15 +3103,15 @@
       <param_skeleton>
         <bone
          name   = "mFaceEar1Left"
-         scale  = "0.55 0.55 0.55"
+         scale  = "0.55 0.55 0.55" 
 		 offset = "0.0  -0.002   0.001" />
         <bone
          name   = "mFaceEar1Right"
-         scale  = "0.55 0.55 0.55"
+         scale  = "0.55 0.55 0.55" 
 		 offset = "0.0  0.002   0.001" />
        </param_skeleton>
     </param>
-
+	
     <param
      id="30015"
      group="1"
@@ -3090,7 +3130,7 @@
          scale  = "0.0 0.0 0.0" />
        </param_skeleton>
      </param>
-
+	 
     <param
      id="30796"
      group="1"
@@ -3108,39 +3148,19 @@
          scale  = "0.0 0.0 0.0" />
        </param_skeleton>
     </param>
-
+	
     <param
      id="30185"
      group="1"
      name="Deep_Chin"
      value_min="-1"
      value_max="1">
+	 <!-- used for the chin depth slider -->
       <param_skeleton>
         <bone
-         name   = "mFaceJaw"
-		 offset = "0.0  0.00   -0.02"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerLeft"
-		 offset = "0.0  0.00   0.02"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerRight"
-		 offset = "0.0  0.00   0.02"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerCenter"
-		 offset = "0.0  0.00   0.02"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceTongueBase"
-		 offset = "0.0  0.00   0.02"
+         name   = "mFaceChin"
+		 offset = "0.0  0.00   -0.03"
          scale  = "0.0 0.0 0.0" />
-
        </param_skeleton>
     </param>
     <param
@@ -3149,35 +3169,15 @@
      name="Deep_Chin"
      value_min="-1"
      value_max="1">
+	  <!-- used for the head shape slider -->
       <param_skeleton>
         <bone
-         name   = "mFaceJaw"
+         name   = "mFaceChin"
 		 offset = "0.0  0.00   -0.02"
          scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerLeft"
-		 offset = "0.0  0.00   0.02"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerRight"
-		 offset = "0.0  0.00   0.02"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerCenter"
-		 offset = "0.0  0.00   0.02"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceTongueBase"
-		 offset = "0.0  0.00   0.02"
-         scale  = "0.0 0.0 0.0" />
-
        </param_skeleton>
     </param>
-
+	
     <param
      id="30760"
      group="1"
@@ -3200,6 +3200,12 @@
          name   = "mFaceLipLowerRight"
 		 offset = "0.0  0.00   -0.03"
          scale  = "0.0 0.0 0.0" />
+		 
+        <bone
+         name   = "mFaceTeethLower"
+		 offset = "0.0  0.00   -0.03"
+         scale  = "0.0 0.0 0.0" />
+
 
         <bone
          name   = "mFaceLipLowerCenter"
@@ -3210,16 +3216,16 @@
          name   = "mFaceTongueBase"
 		 offset = "0.0  0.00   -0.03"
          scale  = "0.0 0.0 0.0" />
-
+		 
         <bone
          name   = "mFaceChin"
 		 offset = "0.0  0.00   -0.03"
          scale  = "0.0 0.0 0.0" />
-
+		 
        </param_skeleton>
     </param>
-
-
+	
+	
     <param
      id="30665"
      group="1"
@@ -3228,18 +3234,39 @@
      value_max="2">
       <param_skeleton>
         <bone
-         name   = "mFaceJaw"
-		 offset = "0.0085  0.00  0"
+         name   = "mFaceTongueBase"
+		 offset = "0.01  0.00  0"
+         scale  = "0.0 0.0 0.0" />
+
+        <bone
+         name   = "mFaceTeethLower"
+         offset = "0.005 0 0"
          scale  = "0.0 0.0 0.0" />
 
         <bone
-        name   = "mFaceTeethLower"
-        offset = "0.008 0 0"
-        scale  = "0.0 0.0 0.0" />
+         name   = "mFaceChin"
+		 offset = "0.01  0.00  0"
+         scale  = "0.0 0.0 0.0" />
 
+        <bone
+         name   = "mFaceLipLowerRight"
+		 offset = "0.01  0.00  0"
+         scale  = "0.0 0.0 0.0" />
+
+        <bone
+         name   = "mFaceLipLowerLeft"
+		 offset = "0.01  0.00  0"
+         scale  = "0.0 0.0 0.0" />
+
+        <bone
+         name   = "mFaceLipLowerCenter"
+		 offset = "0.01  0.00  0"
+         scale  = "0.0 0.0 0.0" />
+
+		 
        </param_skeleton>
     </param>
-
+	
     <param
      id="30006"
      group="1"
@@ -3251,10 +3278,10 @@
          name   = "mFaceNoseCenter"
 		 offset = "0.0  0.00  0.0"
          scale  = "0.1 0.1 0.1" />
-
+		 
        </param_skeleton>
     </param>
-
+	
     <param
      id="30007"
      group="1"
@@ -3264,12 +3291,12 @@
       <param_skeleton>
         <bone
          name   = "mFaceChin"
-		 offset = "-0.025  0.00  0.005"
+		 offset = "-0.06  0.00  0.01"
          scale  = "0.0 0.0 0.0" />
-
+		 
        </param_skeleton>
 	</param>
-
+	
     <param
      id="40007"
      group="1"
@@ -3281,10 +3308,10 @@
          name   = "mFaceChin"
 		 offset = "-0.025  0.00  0.005"
          scale  = "0.0 0.0 0.0" />
-
+		 
        </param_skeleton>
 	</param>
-
+	
     <param
      id="30008"
      group="1"
@@ -3295,12 +3322,12 @@
         <bone
          name   = "mFaceChin"
 		 offset = "-0.002 0.0 -0.01"
-         scale  = "0.0 0.0 0.0" />
-
+         scale  = "0.0 0.5 0.0" />
+		 
        </param_skeleton>
     </param>
-
-
+	
+	
     <param
      id="30024"
      group="1"
@@ -3312,26 +3339,26 @@
 		 <bone
          name="mFaceEyeLidUpperLeft"
          scale="0 0 0"
-         offset="0 0 .003" />
+         offset="0 0 .0035" />
 
 		 <bone
          name="mFaceEyeLidUpperRight"
          scale="0 0 0"
-         offset="0 0 .003" />
-
+         offset="0 0 .0035" />
+		 
 		 <bone
          name="mFaceEyeLidLowerLeft"
          scale="0 0 0"
-         offset="0 0 -.003" />
+         offset="0 0 -.0035" />
 
 		 <bone
          name="mFaceEyeLidLowerRight"
          scale="0 0 0"
-         offset="0 0 -.003" />
+         offset="0 0 -.0035" />
 
        </param_skeleton>
     </param>
-
+	
     <param
      id="30650"
      group="1"
@@ -3348,9 +3375,9 @@
          name="mFaceEyebrowOuterRight"
          scale="0 0 0"
          offset="0 0 .004" />
-       </param_skeleton>
+       </param_skeleton>		 
     </param>
-
+	
     <param
      id="30880"
      group="1"
@@ -3367,9 +3394,9 @@
          name="mFaceEyecornerInnerRight"
          scale="0 0 0"
          offset="0 0 .004" />
-       </param_skeleton>
+       </param_skeleton>		 
     </param>
-
+	
     <param
      id="30765"
      group="1"
@@ -3381,12 +3408,12 @@
          <bone
           name="mFaceEyeLidLowerLeft"
           scale="0.05 0.05 0.05"
-          offset="0 0 .0003" />
+          offset="0 0 0" />
 
          <bone
           name="mFaceEyeLidLowerRight"
           scale="0.05 0.05 0.05"
-          offset="0 0 .0003" />
+          offset="0 0 0" />
 
          <bone
           name="mFaceEyecornerInnerLeft"
@@ -3398,7 +3425,7 @@
           scale="0.05 0.05 0.05"
           offset="0 0 0" />
 
-       </param_skeleton>
+       </param_skeleton>		 
     </param>
 
     <param
@@ -3424,9 +3451,9 @@
          scale="0 0 0.08"
          offset="0.02 0 0" />
 
-       </param_skeleton>
+       </param_skeleton>		 
     </param>
-
+	
     <param
      id="41629"
      group="1"
@@ -3450,9 +3477,9 @@
          scale="0 0 0.08"
          offset="0.02 0 0" />
 
-       </param_skeleton>
+       </param_skeleton>		 
     </param>
-
+	
     <param
      id="30647"
      group="1"
@@ -3463,35 +3490,35 @@
       <param_skeleton>
 
 		 <bone
-         name="mFaceRoot"
+         name="mFaceChin"
          scale="0 -0.07 0.07"
          offset="0 0 -0.005" />
-
+		 
 		 <bone
 		  name="mFaceEyeLidLowerRight"
 		  scale="0 0 0"
 		  offset="0 -0.0033 0.0025" />
-
+		 
 		 <bone
 		  name="mFaceEyeLidUpperRight"
 		  scale="0 0 0"
 		  offset="0 -0.0033 0.002" />
-
+		 
 		 <bone
 		  name="mFaceEyecornerInnerRight"
 		  scale="0 0 0"
 		  offset="0 -0.0017 0.0025" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowOuterRight"
 		  scale="0 0 0"
 		  offset="0 -0.004 0.0014" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowCenterRight"
 		  scale="0 0 0"
 		  offset="0 -0.00377 0.00061" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowInnerRight"
 		  scale="0 0 0"
@@ -3505,51 +3532,51 @@
 		  name="mFaceLipUpperCenter"
 		  scale="0 0 0"
 		  offset="0 0 0.007" />
-
+		  
 		 <bone
 		  name="mFaceTeethUpper"
 		  scale="0 0 0"
 		  offset="0 0 0.007" />
-
+		  
 		 <bone
 		  name="mFaceLipLowerRight"
 		  scale="0 0 0"
-		  offset="0 0 0.0005" />
+		  offset="0 0 0.005" />
 		 <bone
 		  name="mFaceLipCornerRight"
 		  scale="0 0 0"
-		  offset="0 -0.00225 0.0075" />
-
+		  offset="0 -0.00225 0.0075" />		  
+		 
 		 <bone
 		  name="mFaceEyeLidLowerLeft"
 		  scale="0 0 0"
 		  offset="0 0.0033 0.0025" />
-
+		 
 		 <bone
 		  name="mFaceEyeLidUpperLeft"
 		  scale="0 0 0"
 		  offset="0 0.0033 0.002" />
-
+		 
 		 <bone
 		  name="mFaceEyecornerInnerLeft"
 		  scale="0 0 0"
 		  offset="0 0.0017 0.0025" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowOuterLeft"
 		  scale="0 0 0"
 		  offset="0 0.004 0.0014" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowCenterLeft"
 		  scale="0 0 0"
 		  offset="0 0.00377 0.00061" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowInnerLeft"
 		  scale="0 0 0"
 		  offset="0 0.00225 0.001" />
-
+		  
 		 <bone
 		  name="mFaceLipUpperLeft"
 		  scale="0 0 0"
@@ -3557,7 +3584,7 @@
 		 <bone
 		  name="mFaceLipLowerCenter"
 		  scale="0 0 0"
-		  offset="0 0 0.001" />
+		  offset="0 0 0.005" />
 		 <bone
 		  name="mFaceTeethLower"
 		  scale="0 0 0"
@@ -3565,22 +3592,17 @@
 		 <bone
 		  name="mFaceLipLowerLeft"
 		  scale="0 0 0"
-		  offset="0 0.000 0.0005" />
+		  offset="0 0.000 0.005" />
 		 <bone
 		  name="mFaceLipCornerLeft"
 		  scale="0 0 0"
 		  offset="0 0.00225 0.0075" />
-
+		  
 		 <bone
 		  name="mFaceTongueBase"
-		  scale="0 0 0"
-		  offset="0 0 0.00" />
-
-		 <bone
-		  name="mFaceJaw"
-		  scale="0 0 0"
-		  offset="0 0 0.0085" />
-
+		  scale="0 -0.07 0.07"
+          offset="0 0 0.005" />
+		  
 		 <bone
 		  name="mFaceCheekLowerRight"
 		  scale="0 0 0"
@@ -3589,7 +3611,7 @@
 		  name="mFaceCheekLowerLeft"
 		  scale="0 0 0"
 		  offset="0 0 0.0085" />
-
+		  
 		 <bone
 		  name="mFaceCheekUpperRight"
 		  scale="0 0 0"
@@ -3598,7 +3620,7 @@
 		  name="mFaceCheekUpperLeft"
 		  scale="0 0 0"
 		  offset="0 0 0.005" />
-
+		  
 		 <bone
 		  name="mFaceNoseCenter"
 		  scale="0 0 0"
@@ -3618,8 +3640,8 @@
 		  name="mFaceNoseBase"
 		  scale="0 0 0"
 		  offset="0 0 0.006" />
-
-	  </param_skeleton>
+		  
+	  </param_skeleton>		
     </param>
     <param
      id="40647"
@@ -3631,35 +3653,35 @@
       <param_skeleton>
 
 		 <bone
-         name="mFaceRoot"
+         name="mFaceChin"
          scale="0 -0.07 0.07"
          offset="0 0 -0.005" />
-
+		 
 		 <bone
 		  name="mFaceEyeLidLowerRight"
 		  scale="0 0 0"
 		  offset="0 -0.0033 0.0025" />
-
+		 
 		 <bone
 		  name="mFaceEyeLidUpperRight"
 		  scale="0 0 0"
 		  offset="0 -0.0033 0.002" />
-
+		 
 		 <bone
 		  name="mFaceEyecornerInnerRight"
 		  scale="0 0 0"
 		  offset="0 -0.0017 0.0025" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowOuterRight"
 		  scale="0 0 0"
 		  offset="0 -0.004 0.0014" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowCenterRight"
 		  scale="0 0 0"
 		  offset="0 -0.00377 0.00061" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowInnerRight"
 		  scale="0 0 0"
@@ -3673,12 +3695,12 @@
 		  name="mFaceLipUpperCenter"
 		  scale="0 0 0"
 		  offset="0 0 0.007" />
-
+		  
 		 <bone
 		  name="mFaceTeethUpper"
 		  scale="0 0 0"
 		  offset="0 0 0.007" />
-
+		  
 		 <bone
 		  name="mFaceLipLowerRight"
 		  scale="0 0 0"
@@ -3686,38 +3708,38 @@
 		 <bone
 		  name="mFaceLipCornerRight"
 		  scale="0 0 0"
-		  offset="0 -0.00225 0.0075" />
-
+		  offset="0 -0.00225 0.0075" />		  
+		 
 		 <bone
 		  name="mFaceEyeLidLowerLeft"
 		  scale="0 0 0"
 		  offset="0 0.0033 0.0025" />
-
+		 
 		 <bone
 		  name="mFaceEyeLidUpperLeft"
 		  scale="0 0 0"
 		  offset="0 0.0033 0.002" />
-
+		 
 		 <bone
 		  name="mFaceEyecornerInnerLeft"
 		  scale="0 0 0"
 		  offset="0 0.0017 0.0025" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowOuterLeft"
 		  scale="0 0 0"
 		  offset="0 0.004 0.0014" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowCenterLeft"
 		  scale="0 0 0"
 		  offset="0 0.00377 0.00061" />
-
+		  
 		 <bone
 		  name="mFaceEyebrowInnerLeft"
 		  scale="0 0 0"
 		  offset="0 0.00225 0.001" />
-
+		  
 		 <bone
 		  name="mFaceLipUpperLeft"
 		  scale="0 0 0"
@@ -3738,17 +3760,12 @@
 		  name="mFaceLipCornerLeft"
 		  scale="0 0 0"
 		  offset="0 0.00225 0.0075" />
-
+		  
 		 <bone
 		  name="mFaceTongueBase"
 		  scale="0 0 0"
 		  offset="0 0 0.00" />
-
-		 <bone
-		  name="mFaceJaw"
-		  scale="0 0 0"
-		  offset="0 0 0.0085" />
-
+		  
 		 <bone
 		  name="mFaceCheekLowerRight"
 		  scale="0 0 0"
@@ -3757,7 +3774,7 @@
 		  name="mFaceCheekLowerLeft"
 		  scale="0 0 0"
 		  offset="0 0 0.0085" />
-
+		  
 		 <bone
 		  name="mFaceCheekUpperRight"
 		  scale="0 0 0"
@@ -3766,7 +3783,7 @@
 		  name="mFaceCheekUpperLeft"
 		  scale="0 0 0"
 		  offset="0 0 0.005" />
-
+		  
 		 <bone
 		  name="mFaceNoseCenter"
 		  scale="0 0 0"
@@ -3787,7 +3804,7 @@
 		  scale="0 0 0"
 		  offset="0 0 0.006" />
 
-	  </param_skeleton>
+	  </param_skeleton>		
     </param>
 
     <param
@@ -3812,28 +3829,28 @@
          name="mFaceForeheadRight"
          scale="0 0 0.2"
          offset="-0.01 0 -0.01" />
-
+		 
 		 <bone
          name="mFaceEyebrowInnerRight"
          scale="0 0 0"
          offset="0 0 0.002" />
-
+		 
 		 <bone
          name="mFaceEyebrowInnerLeft"
          scale="0 0 0"
          offset="0 0 0.002" />
-
+		 
 		 <bone
          name="mFaceEyebrowCenterRight"
          scale="0 0 0"
          offset="0 0 0.003" />
-
+		 
 		 <bone
          name="mFaceEyebrowCenterLeft"
          scale="0 0 0"
          offset="0 0 0.003" />
 
-       </param_skeleton>
+       </param_skeleton>		 
     </param>
 
     <param
@@ -3858,28 +3875,28 @@
          name="mFaceForeheadRight"
          scale="0 0 0.2"
          offset="-0.01 0 -0.01" />
-
+		 
 		 <bone
          name="mFaceEyebrowInnerRight"
          scale="0 0 0"
          offset="0 0 0.002" />
-
+		 
 		 <bone
          name="mFaceEyebrowInnerLeft"
          scale="0 0 0"
          offset="0 0 0.002" />
-
+		 
 		 <bone
          name="mFaceEyebrowCenterRight"
          scale="0 0 0"
          offset="0 0 0.003" />
-
+		 
 		 <bone
          name="mFaceEyebrowCenterLeft"
          scale="0 0 0"
          offset="0 0 0.003" />
 
-       </param_skeleton>
+       </param_skeleton>		 
     </param>
 
     <param
@@ -3899,35 +3916,35 @@
          name="mFaceEyebrowInnerRight"
          scale="0.1 0 0"
          offset="0.004 0 0" />
-
+		 
 		 <bone
          name="mFaceEyebrowInnerLeft"
          scale="0.1 0 0"
          offset="0.004 0 0" />
-
+		 
 		 <bone
          name="mFaceEyebrowCenterRight"
          scale="0.1 0 0"
          offset="0.004 0 0" />
-
+		 
 		 <bone
          name="mFaceEyebrowCenterLeft"
          scale="0.1 0 0"
          offset="0.004 0 0" />
-
+		 
 		 <bone
          name="mFaceEyebrowOuterRight"
          scale="0 0 0"
          offset="0.004 0 0" />
-
+		 
 		 <bone
          name="mFaceEyebrowOuterLeft"
          scale="0 0 0"
          offset="0.004 0 0" />
 
-       </param_skeleton>
+       </param_skeleton>		 
     </param>
-
+	
     <param
      id="30011"
      group="1"
@@ -3985,7 +4002,7 @@
 
        </param_skeleton>
     </param>
-
+	
     <param
      id="30759"
      group="1"
@@ -4003,8 +4020,8 @@
        </param_skeleton>
 
     </param>
-
-
+	
+	
     <param
      id="30010"
      group="1"
@@ -4036,7 +4053,7 @@
 
          <bone
          name="mFaceChin"
-         scale="0.0 0.7 0.0"
+         scale="0.0 1.0 0.0"
          offset="0.0 0.0 0.0" />
 
        </param_skeleton>
@@ -4054,7 +4071,7 @@
          name="mFaceJaw"
          scale="0.0 0.5 0.0"
          offset="0.0 0.0 0.0" />
-
+		 
 		 <bone
          name="mFaceLipLowerRight"
          scale="0.0 0.0 0.0"
@@ -4067,8 +4084,8 @@
 
        </param_skeleton>
 	</param>
-
-
+	
+	
     <param
      id="30018"
      group="1"
@@ -4089,7 +4106,7 @@
 
        </param_skeleton>
     </param>
-
+	
     <param
      id="30021"
      group="1"
@@ -4119,123 +4136,316 @@
      value_max="1.5">
       <param_skeleton>
 
-         <bone
-          name="mFaceEyeLidLowerLeft"
-          scale="0 0 .5"
-          offset="0 0 -.001" />
+         <bone
+          name="mFaceEyeLidLowerLeft"
+          scale="0 0 .5"
+          offset="0 0 -.001" />
+
+         <bone
+          name="mFaceEyeLidLowerRight"
+          scale="0 0 .5"
+          offset="0 0 -.001" />
+
+       </param_skeleton>
+    </param>
+
+    <param
+     id="30014"
+     group="1"
+     name="High_Cheek_Bones"
+     value_min="-.5"
+     value_max="1">
+      <param_skeleton>
+
+		 <bone
+          name="mFaceCheekUpperLeft"
+          scale="0 0 0"
+          offset="0 0 0.02" />
+
+		 <bone
+          name="mFaceCheekUpperRight"
+          scale="0 0 0"
+          offset="0 0 0.02" />
+
+       </param_skeleton>
+    </param>
+	
+    <param
+     id="30019"
+     group="1"
+     name="Upturned_Nose_Tip"
+     value_min="-1.5"
+     value_max="1">
+      <param_skeleton>
+
+		 <bone
+         name="mFaceNoseBase"
+         scale="0 0 0"
+         offset="0.001 0 -0.0015" />
+
+		 <bone
+         name="mFaceNoseCenter"
+         scale="0 0 0"
+         offset="-0.002 0 0.004" />
+
+		 <bone
+         name="mFaceNoseRight"
+         scale="0 0 0"
+         offset="0.001 0 -0.002" />
+
+		 <bone
+         name="mFaceNoseLeft"
+         scale="0 0 0"
+         offset="0.001 0 -0.002" />
+
+       </param_skeleton>
+    </param>
+	
+	<param
+     id="30879"
+     group="1"
+     sex="male"
+     name="Male_Package"
+     value_min="-.5"
+     value_max="2">
+      <param_skeleton>
+
+		 <bone
+         name   = "mGroin"
+		 offset = "0.0 0.0 0.0"
+         scale  = ".5 .25 .1" />
+
+	   </param_skeleton>
+    </param>
+	
+	<param
+	id="30193"
+	group="1"
+	name="Square_Head"
+	value_min="-1"
+	value_max="1">
+	<param_skeleton>
+
+		<bone
+		 name="mFaceChin"
+		 scale="0.0 0.3 0.0"
+		 offset="0.0 0.0 0.0" />
+
+		<bone
+		 name="mFaceCheekLowerRight"
+		 scale="0.0 0.0 0.0"
+		 offset="0.0 -0.005 0.0" />
+
+		<bone
+		 name="mFaceCheekLowerLeft"
+		 scale="0.0 0.0 0.0"
+		 offset="0.0 0.005 0.0" />
+
+		<bone
+		 name="mFaceForeheadRight"
+		 scale="0.0 0.7 0.0"
+		 offset="0.0 -0.005 0.0" />
+
+		<bone
+		 name="mFaceForeheadLeft"
+		 scale="0.0 0.7 0.0"
+		 offset="0.0 0.005 0.0" />
+
+		</param_skeleton>
+	</param>
+	
+    <param
+     id="30646"
+     group="0"
+     name="Egg_Head"
+     value_min="-1.3"
+     value_max="1"
+     value_default="0">
+      <param_skeleton> 
+
+		<bone
+         name="mFaceRoot"
+         scale="0 -0.07 0.07"
+         offset="0 0 -0.005" />
+
+		<bone
+         name="mFaceForeheadLeft"
+         scale="0 0 0.2"
+         offset="-0.01 0 -0.01" />
+
+		 <bone
+         name="mFaceForeheadCenter"
+         scale="0 0 0"
+         offset="-0.001 0 0.001" />
+
+		 <bone
+         name="mFaceForeheadRight"
+         scale="0 0 0.2"
+         offset="-0.01 0 -0.01" />
+ 
+		<bone
+         name   = "mFaceChin"
+		 offset = "-0.025  0.00  0.005"
+         scale  = "0.0 0.0 0.0" />
+
+		<bone
+		 name="mFaceEyeLidLowerRight"
+		 scale="0 0 0"
+		 offset="0 -0.0033 0.0025" />
+
+		 <bone
+		  name="mFaceEyeLidUpperRight"
+		  scale="0 0 0"
+		  offset="0 -0.0033 0.002" />
+
+		 <bone
+		  name="mFaceEyecornerInnerRight"
+		  scale="0 0 0"
+		  offset="0 -0.0017 0.0025" />
+
+		 <bone
+		  name="mFaceEyebrowOuterRight"
+		  scale="0 0 0"
+		  offset="0 -0.004 0.0014" />
+
+		 <bone
+		  name="mFaceEyebrowCenterRight"
+		  scale="0 0 0"
+		  offset="0 -0.00377 0.00061" />
+
+		 <bone
+		  name="mFaceEyebrowInnerRight"
+		  scale="0 0 0"
+		  offset="0 -0.00225 0.001" />
+
+		 <bone
+		  name="mFaceLipUpperRight"
+		  scale="0 0 0"
+		  offset="0 -0.0014 0.007" />
+
+		 <bone
+		  name="mFaceLipUpperCenter"
+		  scale="0 0 0"
+		  offset="0 0 0.007" />
+
+		 <bone
+		  name="mFaceTeethUpper"
+		  scale="0 0 0"
+		  offset="0 0 0.007" />
+
+		 <bone
+		  name="mFaceLipLowerRight"
+		  scale="0 0 0"
+		  offset="0 -0.00225 0.0055" />
 
-         <bone
-          name="mFaceEyeLidLowerRight"
-          scale="0 0 .5"
-          offset="0 0 -.001" />
+		 <bone
+		  name="mFaceLipCornerRight"
+		  scale="0 0 0"
+		  offset="0 -0.00225 0.0075" />		  
 
-       </param_skeleton>
-    </param>
+		 <bone
+		  name="mFaceEyeLidLowerLeft"
+		  scale="0 0 0"
+		  offset="0 0.0033 0.0025" />
 
-    <param
-     id="30014"
-     group="1"
-     name="High_Cheek_Bones"
-     value_min="-.5"
-     value_max="1">
-      <param_skeleton>
+		 <bone
+		  name="mFaceEyeLidUpperLeft"
+		  scale="0 0 0"
+		  offset="0 0.0033 0.002" />
 
 		 <bone
-          name="mFaceCheekUpperLeft"
-          scale="0 0 0"
-          offset="0 0 0.02" />
+		  name="mFaceEyecornerInnerLeft"
+		  scale="0 0 0"
+		  offset="0 0.0017 0.0025" />
 
 		 <bone
-          name="mFaceCheekUpperRight"
-          scale="0 0 0"
-          offset="0 0 0.02" />
+		  name="mFaceEyebrowOuterLeft"
+		  scale="0 0 0"
+		  offset="0 0.004 0.0014" />
 
-       </param_skeleton>
-    </param>
+		 <bone
+		  name="mFaceEyebrowCenterLeft"
+		  scale="0 0 0"
+		  offset="0 0.00377 0.00061" />
 
-    <param
-     id="30019"
-     group="1"
-     name="Upturned_Nose_Tip"
-     value_min="-1.5"
-     value_max="1">
-      <param_skeleton>
+		 <bone
+		  name="mFaceEyebrowInnerLeft"
+		  scale="0 0 0"
+		  offset="0 0.00225 0.001" />
 
 		 <bone
-         name="mFaceNoseBase"
-         scale="0 0 0"
-         offset="0.001 0 -0.0015" />
+		  name="mFaceLipUpperLeft"
+		  scale="0 0 0"
+		  offset="0 0.0014 0.007" />
 
 		 <bone
-         name="mFaceNoseCenter"
-         scale="0 0 0"
-         offset="-0.002 0 0.004" />
+		  name="mFaceLipLowerCenter"
+		  scale="0 0 0"
+		  offset="0 0 0.0055" />
 
 		 <bone
-         name="mFaceNoseRight"
-         scale="0 0 0"
-         offset="0.001 0 -0.002" />
+		  name="mFaceTeethLower"
+		  scale="0 0 0"
+		  offset="0 0 0.006" />
 
 		 <bone
-         name="mFaceNoseLeft"
-         scale="0 0 0"
-         offset="0.001 0 -0.002" />
+		  name="mFaceLipLowerLeft"
+		  scale="0 0 0"
+		  offset="0 0.00225 0.0055" />
 
-       </param_skeleton>
-    </param>
+		 <bone
+		  name="mFaceLipCornerLeft"
+		  scale="0 0 0"
+		  offset="0 0.00225 0.0075" />
 
-	<param
-     id="30879"
-     group="1"
-     sex="male"
-     name="Male_Package"
-     value_min="-.5"
-     value_max="2">
-      <param_skeleton>
+		 <bone
+		  name="mFaceTongueBase"
+		  scale="0 0 0"
+		  offset="0 0 0.006" />
 
 		 <bone
-         name   = "mGroin"
-		 offset = "0.0 0.0 0.0"
-         scale  = ".5 .25 .1" />
+		  name="mFaceCheekLowerRight"
+		  scale="0 0 0"
+		  offset="0 0 0.0085" />
 
-	   </param_skeleton>
-    </param>
+		 <bone
+		  name="mFaceCheekLowerLeft"
+		  scale="0 0 0"
+		  offset="0 0 0.0085" />
 
-	<param
-	id="30193"
-	group="1"
-	name="Square_Head"
-	value_min="-1"
-	value_max="1">
-	<param_skeleton>
+		 <bone
+		  name="mFaceCheekUpperRight"
+		  scale="0 0 0"
+		  offset="0 0 0.005" />
 
-		<bone
-		 name="mFaceChin"
-		 scale="0.0 0.3 0.0"
-		 offset="0.0 0.0 0.0" />
+		 <bone
+		  name="mFaceCheekUpperLeft"
+		  scale="0 0 0"
+		  offset="0 0 0.005" />
 
-		<bone
-		 name="mFaceCheekLowerRight"
-		 scale="0.0 0.0 0.0"
-		 offset="0.0 -0.005 0.0" />
+		 <bone
+		  name="mFaceNoseCenter"
+		  scale="0 0 0"
+		  offset="0 0 0.005" />
 
-		<bone
-		 name="mFaceCheekLowerLeft"
-		 scale="0.0 0.0 0.0"
-		 offset="0.0 0.005 0.0" />
+		 <bone
+		  name="mFaceNoseRight"
+		  scale="0 0 0"
+		  offset="0 0 0.005" />
 
-		<bone
-		 name="mFaceForeheadRight"
-		 scale="0.0 0.7 0.0"
-		 offset="0.0 -0.005 0.0" />
+		 <bone
+		  name="mFaceNoseLeft"
+		  scale="0 0 0"
+		  offset="0 0 0.005" />
 
-		<bone
-		 name="mFaceForeheadLeft"
-		 scale="0.0 0.7 0.0"
-		 offset="0.0 0.005 0.0" />
+		 <bone
+		  name="mFaceNoseBase"
+		  scale="0 0 0"
+		  offset="0 0 0.006" />
 
-		</param_skeleton>
-	</param>
+      </param_skeleton>
+    </param>
+	
   </skeleton>
 
   <mesh
@@ -5049,11 +5259,11 @@
  lod="0"
    file_name="avatar_head.llm"
    min_pixel_width="320">
-    <!--
+    <!-- 
                 begin morph targets
                 #############
                 tweakable morphs
-                #############
+                ############# 
       -->
     <param
      id="20001"
@@ -5090,7 +5300,7 @@
      value_max="1.5">
       <param_morph />
     </param>
-
+	
     <param
      id="20656"
      group="1"
@@ -5099,7 +5309,7 @@
      value_max="2">
       <param_morph />
     </param>
-
+	
     <param
      id="20004"
      group="1"
@@ -5117,7 +5327,7 @@
      value_max="2">
       <param_morph />
     </param>
-
+	
     <param
      id="20506"
      group="1"
@@ -5126,7 +5336,7 @@
      value_max="2">
       <param_morph />
     </param>
-
+	
     <param
      id="20764"
      group="1"
@@ -5144,7 +5354,7 @@
      value_max="1.5">
       <param_morph/>
     </param>
-
+	
     <param
      id="20663"
      group="1"
@@ -5154,7 +5364,7 @@
      value_default="0">
       <param_morph />
     </param>
-
+	
     <param
      id="20035"
      group="1"
@@ -5163,7 +5373,7 @@
      value_max="2">
       <param_morph/>
     </param>
-
+	
     <param
      id="20015"
      group="1"
@@ -5172,7 +5382,7 @@
      value_max="1.5">
       <param_morph/>
     </param>
-
+	
     <param
      id="20796"
      group="1"
@@ -5181,7 +5391,7 @@
      value_max="3">
       <param_morph />
     </param>
-
+	
     <param
      id="20185"
      group="1"
@@ -5190,7 +5400,7 @@
      value_max="1">
       <param_morph />
     </param>
-
+	
     <param
      id="20665"
      group="1"
@@ -5199,7 +5409,7 @@
      value_max="2">
       <param_morph />
     </param>
-
+	
     <param
      id="20024"
      group="1"
@@ -5208,7 +5418,7 @@
      value_max="2">
       <param_morph />
     </param>
-
+	
     <param
      id="20650"
      group="1"
@@ -5217,7 +5427,7 @@
      value_max="1.2">
       <param_morph />
     </param>
-
+	
     <param
      id="20765"
      group="1"
@@ -5397,7 +5607,7 @@
      value_max="1">
       <param_morph />
     </param>
-
+	
     <param
      id="20021"
      group="1"
@@ -5665,7 +5875,7 @@
        value_max="1.2">
       <param_morph />
     </param>
-
+ 
     <param
      id="657"
      group="1"
@@ -5835,7 +6045,7 @@
        -->
     <!--
             ##############
-            # Facial Expression morphs
+            # Facial Expression morphs 
             ##############
             -->
     <param
@@ -6374,10 +6584,10 @@
      value_max="1.2">
       <param_morph />
     </param>
-
+ 
     <!--
             ##############
-            # Facial Expression morphs
+            # Facial Expression morphs 
             ##############
             -->
     <param
@@ -7006,7 +7216,7 @@
           pos="0.004 0.0 -0.01"/>
       </param_morph>
     </param>
-
+    
     <param
      id="628"
      group="1"
@@ -7093,7 +7303,7 @@
           pos="0.0 0.026 0.0"/>
       </param_morph>
     </param>
-
+    
     <param
      id="685"
      group="0"
@@ -7122,8 +7332,8 @@
       </param_morph>
     </param>
 
-    <!-- ############# #
-      other morphs (not user controlled)
+    <!-- ############# # 
+      other morphs (not user controlled) 
       ############# -->
     <param
      id="100"
@@ -7909,7 +8119,7 @@
       <param_morph />
     </param>
 
-
+    
     <param
      id="1205"
      group="1"
@@ -8311,9 +8521,9 @@
      name="skirt_male"
      wearable="skirt"
      edit_group="driven"
-     cross_wearable="true"
-     value_min="0"
-     value_max="1">
+     cross_wearable="true" 
+     value_min="0" 
+     value_max="1"> 
       <param_morph />
     </param>
 
@@ -8754,7 +8964,7 @@
     <layer
      name="head bump definition"
      render_pass="bump">
-
+         
 
       <texture
            tga_file="bump_head_base.tga"
@@ -10826,7 +11036,7 @@ render_pass="bump">
       <texture
        local_texture="upper_jacket"
        local_texture_alpha_only="true" />
-
+          
 
       <param
       id="875"
@@ -11844,7 +12054,7 @@ render_pass="bump">
       <texture
        local_texture="lower_jacket"
        local_texture_alpha_only="true" />
-
+          
 
       <param
        id="876"
@@ -12257,7 +12467,7 @@ render_pass="bump">
 		 id="30004" />
       </param_driver>
     </param>
-
+	
     <param
      id="517"
      group="0"
@@ -12280,8 +12490,8 @@ render_pass="bump">
 		<driven
 		 id="30517" />
       </param_driver>
-    </param>
-
+    </param>	
+		
     <param
      id="20"
      group="0"
@@ -12327,7 +12537,7 @@ render_pass="bump">
 		 id="30656" />
       </param_driver>
     </param>
-
+	
     <param
      id="653"
      group="0"
@@ -12373,7 +12583,7 @@ render_pass="bump">
 		 id="30506" />
       </param_driver>
     </param>
-
+	
     <param
      id="764"
      group="0"
@@ -12395,7 +12605,7 @@ render_pass="bump">
 		 id="30764" />
       </param_driver>
     </param>
-
+	
     <param
      id="25"
      group="0"
@@ -12437,7 +12647,7 @@ render_pass="bump">
       <param_driver>
         <driven
          id="20663" />
-
+		 
 		<driven
 		 id="31663"
          min1="-2"
@@ -12475,7 +12685,7 @@ render_pass="bump">
 		 id="30035" />
       </param_driver>
     </param>
-
+	
     <param
      id="15"
      group="0"
@@ -12498,7 +12708,7 @@ render_pass="bump">
 		 id="30015" />
       </param_driver>
     </param>
-
+	
     <param
      id="796"
      group="0"
@@ -12521,7 +12731,7 @@ render_pass="bump">
 		 id="30796" />
       </param_driver>
     </param>
-
+	
     <param
      id="185"
      group="0"
@@ -12544,7 +12754,7 @@ render_pass="bump">
 		 id="30185" />
       </param_driver>
     </param>
-
+	
     <param
      id="760"
      group="0"
@@ -12568,8 +12778,8 @@ render_pass="bump">
 		 id="30760" />
       </param_driver>
     </param>
-
-
+	
+	
     <param
      id="665"
      group="0"
@@ -12593,7 +12803,7 @@ render_pass="bump">
 		 id="30665" />
       </param_driver>
     </param>
-
+	
     <param
      id="6"
      group="0"
@@ -12614,9 +12824,9 @@ render_pass="bump">
          id="20006" />
 		<driven
 		 id="30006" />
-      </param_driver>
+      </param_driver>    
     </param>
-
+	
     <param
      id="7"
      group="0"
@@ -12637,7 +12847,7 @@ render_pass="bump">
          id="20007" />
 		<driven
 		 id="30007" />
-      </param_driver>
+      </param_driver>    
 	</param>
 
     <param
@@ -12660,10 +12870,10 @@ render_pass="bump">
          id="20008" />
 		<driven
 		 id="30008" />
-      </param_driver>
+      </param_driver>    
     </param>
-
-
+	
+	
     <param
      id="24"
      group="0"
@@ -12708,7 +12918,7 @@ render_pass="bump">
 		 id="30650" />
       </param_driver>
     </param>
-
+	
     <param
        id="880"
        group="0"
@@ -12730,7 +12940,7 @@ render_pass="bump">
 		 id="30880" />
       </param_driver>
     </param>
-
+	
     <param
      id="21"
      group="0"
@@ -12796,7 +13006,7 @@ render_pass="bump">
 		 id="30765" />
       </param_driver>
     </param>
-
+	
     <param
      id="1"
      group="0"
@@ -12819,7 +13029,7 @@ render_pass="bump">
 		 id="30001" />
       </param_driver>
     </param>
-
+	
     <param
      id="11"
      group="0"
@@ -12865,7 +13075,7 @@ render_pass="bump">
 		 id="30758" />
       </param_driver>
     </param>
-
+	
     <param
      id="27"
      group="0"
@@ -12888,7 +13098,7 @@ render_pass="bump">
 		 id="30027" />
       </param_driver>
     </param>
-
+	
     <param
      id="759"
      group="0"
@@ -12912,7 +13122,7 @@ render_pass="bump">
 		 id="30759" />
       </param_driver>
     </param>
-
+	
 
     <param
      id="10"
@@ -12937,7 +13147,7 @@ render_pass="bump">
 		 id="30010" />
       </param_driver>
     </param>
-
+	
     <param
      id="17"
      group="0"
@@ -12960,7 +13170,7 @@ render_pass="bump">
 		 id="30017" />
       </param_driver>
     </param>
-
+	
     <param
      id="18"
      group="0"
@@ -12983,7 +13193,7 @@ render_pass="bump">
 		 id="30018" />
       </param_driver>
     </param>
-
+	
     <param
      id="14"
      group="0"
@@ -13006,7 +13216,7 @@ render_pass="bump">
 		 id="30014" />
       </param_driver>
     </param>
-
+	
     <param
      id="19"
      group="0"
@@ -13454,7 +13664,7 @@ render_pass="bump">
          max1="1"
          max2="1"
          min2="1" />
-
+		 
 		<driven
 		 id="30505"
          min1="0"
@@ -13502,7 +13712,7 @@ render_pass="bump">
          max1="1"
          max2="1"
          min2="1" />
-
+		 
         <driven
          id="30797"
          min1="0"
@@ -13516,7 +13726,7 @@ render_pass="bump">
          max1="1"
          max2="1"
          min2="1" />
-
+		         		 
       </param_driver>
     </param>
 
@@ -13542,7 +13752,7 @@ render_pass="bump">
 
         <driven
          id="30" />
-
+		
 		<driven
 		 id="30155" />
 
@@ -14232,7 +14442,7 @@ render_pass="bump">
          max1="1"
          max2="1"
          min2="1" />
-
+		 
 		<driven
 		 id="31629"
          min1="0"
@@ -14246,7 +14456,7 @@ render_pass="bump">
          max1="1"
          max2="1"
          min2="1" />
-
+		 
       </param_driver>
     </param>
 
@@ -14273,28 +14483,9 @@ render_pass="bump">
 
         <driven
          id="186" />
-
+		
 		<driven
-		 min1="-1.3"
-		 max1="-1.3"
-		 max2="-1.3"
-		 min2="1"
-         id="40017" />
-
-		<driven
-		 id="40185" />
-
-		<driven
-		 id="41629" />
-
-		<driven
-		 id="42629" />
-
-		<driven
-		 id="40007" />
-
-		<driven
-		 id="40647" />
+		 id="30646" />
 
       </param_driver>
     </param>
@@ -14322,7 +14513,7 @@ render_pass="bump">
 
         <driven
          id="187" />
-
+		 
 		<driven
 		 id="30647" />
 
@@ -15579,7 +15770,7 @@ render_pass="bump">
          id="872" />
       </param_driver>
     </param>
-
+      
 
     <param
      id="877"
@@ -15599,13 +15790,13 @@ render_pass="bump">
       <param_driver>
         <driven
          id="875" />
-
+             
 
         <driven
         id="876" />
       </param_driver>
     </param>
-
+      
     <param
      id="1071"
      group="2"
@@ -15662,7 +15853,7 @@ render_pass="bump">
          max1="1"
          max2="1"
          min2="1" />
-
+         
         <driven
          id="1069"
          min1="0"
diff --git a/indra/newview/character/avatar_skeleton.xml b/indra/newview/character/avatar_skeleton.xml
index 7d13f4907a..025d12dd2e 100644
--- a/indra/newview/character/avatar_skeleton.xml
+++ b/indra/newview/character/avatar_skeleton.xml
@@ -20,7 +20,7 @@
                            <collision_volume end="0.000 0.000 0.080" group="Collision" name="NECK" pos="0.0 0 0.02" rot="0.000000 0.000000 0.000000" scale="0.05 0.06 0.08" support="base"/>
                            <bone aliases="head avatar_mHead" connected="true" end="0.000 0.000 0.079" group="Torso" name="mHead" pivot="0.000000 -0.000000 0.075630" pos="0.000 -0.000 0.076" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
                               <collision_volume end="0.000 0.000 0.100" group="Collision" name="HEAD" pos="0.02 0 0.07" rot="0.000000 0.000000 0.000000" scale="0.11 0.09 0.12" support="base"/>
-                              <bone aliases="figureHair avatar_mSkull" connected="false" end="0.000 0.000 0.033" group="Extra" name="mSkull" pivot="0.000000 0.000000 0.079000" pos="0.000 0.000 0.079" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
+                              <bone aliases="figureHair avatar_mSkull" connected="true" end="0.000 0.000 0.033" group="Extra" name="mSkull" pivot="0.000000 0.000000 0.079000" pos="0.000 0.000 0.079" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
                               <bone aliases="avatar_mEyeRight" connected="false" end="0.022 0.000 0.000" group="Extra" name="mEyeRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" support="base"/>
                               <bone aliases="avatar_mEyeLeft" connected="false" end="0.022 0.000 0.000" group="Extra" name="mEyeLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
                               <bone connected="false" end="0.022 0.000 0.000" group="Face" name="mFaceEyeAltRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
@@ -63,11 +63,11 @@
                                     <bone connected="false" end="0.047 -0.003 0.000" group="Lips" name="mFaceLipLowerRight" pivot="0.052 -0.014 -0.049" pos="0.052 -0.014 -0.049" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                     <bone connected="false" end="0.048 0.000 0.000" group="Lips" name="mFaceLipLowerCenter" pivot="0.057 0.000 -0.054" pos="0.057 0.000 -0.054" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                     <bone connected="false" end="0.021 0.000 -0.018" group="Mouth" name="mFaceChin" pivot="0.073 0.000 -0.069" pos="0.073 0.000 -0.069" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.061 0.000 -0.010" group="Mouth" name="mFaceTeethLower" pivot="0.020 0.000 -0.044" pos="0.020 0.000 -0.044" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  </bone>
                                  <bone connected="false" end="0.036 0.000 0.000" group="Face" name="mFaceForeheadCenter" pivot="0.069 0.000 0.065" pos="0.069 0.000 0.065" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.048 0.000 0.000" group="Lips" name="mFaceLipUpperCenter" pivot="0.060 0.000 -0.030" pos="0.060 0.000 -0.030" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.014 0.000 0.000" group="Nose" name="mFaceNoseBase" pivot="0.094 0.000 -0.016" pos="0.094 0.000 -0.016" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.061 0.000 -0.010" group="Mouth" name="mFaceTeethLower" pivot="0.020 0.000 -0.044" pos="0.020 0.000 -0.044" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.061 0.000 0.000" group="Mouth" name="mFaceTeethUpper" pivot="0.020 0.000 -0.030" pos="0.020 0.000 -0.030" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.016 0.000 0.000" group="Face" name="mFaceEyecornerInnerLeft" pivot="0.075 0.017 0.032" pos="0.075 0.017 0.032" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.016 0.000 0.000" group="Face" name="mFaceEyecornerInnerRight" pivot="0.075 -0.017 0.032" pos="0.075 -0.017 0.032" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
@@ -220,7 +220,7 @@
         <bone connected="false" end="0.002 0.046 -0.491" group="Limb" name="mHindLimb1Right" pivot="-0.204 -0.129 -0.125" pos="-0.204 -0.129 -0.125" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
           <bone connected="true" end="-0.030 0.003 -0.468" group="Limb" name="mHindLimb2Right" pivot="0.002 0.046 -0.491" pos="0.002 0.046 -0.491" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
             <bone connected="true" end="0.112 0.000 -0.061" group="Limb" name="mHindLimb3Right" pivot="-0.030 0.003 -0.468" pos="-0.030 0.003 -0.468" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-              <bone connected="true" end="0.105 -0.008 0.001" group="Limb" name="mHindLimb4Right" pivot="0.112 0.000 -0.061" pos="0.112 0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+              <bone connected="true" end="0.105 -0.008 0.001" group="Limb" name="mHindLimb4Right" pivot="0.112 0.000 -0.061" pos="0.112 0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended" />
             </bone>
           </bone>
         </bone>
-- 
cgit v1.2.3


From 4e3d76f52ebf099eb1201e6e1ae01cadc93acbbd Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 24 Jun 2016 09:46:34 -0400
Subject: SL-344 - additional slider updates, including scaling of mEye bones

---
 indra/newview/character/avatar_lad.xml | 351 ++++++++++++++++-----------------
 1 file changed, 166 insertions(+), 185 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 8b4d503eb1..77847c75e3 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -1489,32 +1489,32 @@
 		<bone
          name="mFaceLipUpperLeft"
          scale="0 0 0"
-         offset="0.005 0 0" />
+         offset="0.0045 0 0" />
 
 		<bone
          name="mFaceLipUpperCenter"
          scale="0 0 0"
-         offset="0.005 0 0" />
+         offset="0.0045 0 0" />
 
 		<bone
          name="mFaceLipUpperRight"
          scale="0 0 0"
-         offset="0.005 0 0" />
+         offset="0.0045 0 0" />
 		 
 		<bone
          name="mFaceLipLowerLeft"
          scale="0 0 0"
-         offset="0.02 0 0" />		 
+         offset="0.018 0 0" />		 
 
 		<bone
          name="mFaceLipLowerCenter"
          scale="0 0 0"
-         offset="0.02 0 0" />
+         offset="0.018 0 0" />
 
 		<bone
          name="mFaceLipLowerRight"
          scale="0 0 0"
-         offset="0.02 0 0" />
+         offset="0.018 0 0" />
 		 
 		<bone
          name="mFaceLipCornerRight"
@@ -1539,12 +1539,12 @@
 		<bone
          name="mFaceTeethUpper"
          scale="0 0 0"
-         offset="0.012 0 0" />
+         offset="0.015 0 0" />
 
 		 <bone
          name="mFaceTeethLower"
          scale="0 0 0"
-         offset="0.012 0 0" />
+         offset="0.015 0 0" />
 
 		 <bone
          name="mFaceChin"
@@ -2070,45 +2070,50 @@
      value_min="-1"
      value_max="1">
       <param_skeleton>
+	  
+	    <!-- Experimental: Added Scale to the System eyes. From first look this affects only custom meshes.
+		   | The result is: Custom eyes now scale in the same way as system eyes do
+		   | Revert by setting scale to scale="0 0 0" for mEyeLeft and mEyeRight
+		   -->
         <bone
          name="mEyeLeft"
-         scale="0 0 0"
+         scale="0.25 0.25 0.25"
          offset="-.005 0 0" />
 
         <bone
          name="mEyeRight"
-         scale="0 0 0"
+         scale="0.25 0.25 0.25"
          offset="-.005 0 0" />
-		 
+
         <bone
          name="mFaceEyeAltLeft"
-         scale="0 0 0"
-         offset="-.005 0 0" />
+         scale="0.25 0.25 0.25"
+		 offset="-0.005 0 0" />
 
         <bone
          name="mFaceEyeAltRight"
-         scale="0 0 0"
-         offset="-.005 0 0" />
+         scale="0.25 0.25 0.25"
+         offset="-0.005 0 0" />
 		 
         <bone
          name="mFaceEyeLidLowerRight"
-         scale="0 0 0"
-         offset="-.005 0.0 -0.0" />
+         scale="0 0.3 0.7"
+         offset=" 0 0 0" />
 
         <bone
          name="mFaceEyeLidLowerLeft"
-         scale="0 0 0"
-         offset="-.005 0.0 -0.0" />
+         scale="0 0.3 0.7"
+         offset=" 0 0 0" />
 		 
         <bone
          name="mFaceEyeLidUpperRight"
-         scale="0 0 0"
-         offset="-.005 0.0 -0.0" />
+         scale="0 0.3 0.7"
+         offset=" 0 0 0" />
 
         <bone
          name="mFaceEyeLidUpperLeft"
-         scale="0 0 0"
-         offset="-.005 0.0 -0.0" />
+         scale="0 0.3 0.7"
+         offset=" 0 0 0" />
 		 
         <bone
          name="mFaceEyecornerInnerLeft"
@@ -3240,7 +3245,12 @@
 
         <bone
          name   = "mFaceTeethLower"
-         offset = "0.005 0 0"
+         offset = "0.01 0 0"
+         scale  = "0.0 0.0 0.0" />
+
+        <bone
+         name   = "mFaceTeethUpper"
+         offset = "-0.001 0 0"
          scale  = "0.0 0.0 0.0" />
 
         <bone
@@ -3336,25 +3346,25 @@
      value_max="2">
       <param_skeleton>
 
-		 <bone
-         name="mFaceEyeLidUpperLeft"
-         scale="0 0 0"
-         offset="0 0 .0035" />
+        <bone
+         name="mFaceEyeLidLowerRight"
+         scale="0 0.1 0.2"
+         offset=" 0 0 0" />
 
-		 <bone
-         name="mFaceEyeLidUpperRight"
-         scale="0 0 0"
-         offset="0 0 .0035" />
-		 
-		 <bone
+        <bone
          name="mFaceEyeLidLowerLeft"
-         scale="0 0 0"
-         offset="0 0 -.0035" />
+         scale="0 0.1 0.2"
+         offset=" 0 0 0" />
+		 
+        <bone
+         name="mFaceEyeLidUpperRight"
+         scale="0 0.1 0.2"
+         offset=" 0 0 0" />
 
-		 <bone
-         name="mFaceEyeLidLowerRight"
-         scale="0 0 0"
-         offset="0 0 -.0035" />
+        <bone
+         name="mFaceEyeLidUpperLeft"
+         scale="0 0.1 0.2"
+         offset=" 0 0 0" />
 
        </param_skeleton>
     </param>
@@ -3488,159 +3498,124 @@
      value_max="1"
      value_default="0">
       <param_skeleton>
-
-		 <bone
-         name="mFaceChin"
-         scale="0 -0.07 0.07"
-         offset="0 0 -0.005" />
-		 
-		 <bone
-		  name="mFaceEyeLidLowerRight"
-		  scale="0 0 0"
-		  offset="0 -0.0033 0.0025" />
-		 
-		 <bone
-		  name="mFaceEyeLidUpperRight"
-		  scale="0 0 0"
-		  offset="0 -0.0033 0.002" />
-		 
+	  
 		 <bone
-		  name="mFaceEyecornerInnerRight"
-		  scale="0 0 0"
-		  offset="0 -0.0017 0.0025" />
+         name="mFaceRoot"
+         scale="0 -0.1 0.1"
+         offset="0 0 0" />
 		  
 		 <bone
-		  name="mFaceEyebrowOuterRight"
-		  scale="0 0 0"
-		  offset="0 -0.004 0.0014" />
+         name="mFaceChin"
+         scale="0 -0.1 0.5"
+         offset="0 0 -0.005" />
 		  
 		 <bone
-		  name="mFaceEyebrowCenterRight"
-		  scale="0 0 0"
-		  offset="0 -0.00377 0.00061" />
-		  
+         name="mFaceForeheadCenter"
+         scale="0 0 0"
+         offset="0 0 -0.006" />
+		 
 		 <bone
-		  name="mFaceEyebrowInnerRight"
-		  scale="0 0 0"
-		  offset="0 -0.00225 0.001" />
+         name="mFaceEyebrowOuterRight"
+         scale="0 0 0"
+         offset="0 -0.0053 -0.0047" />
 
 		 <bone
-		  name="mFaceLipUpperRight"
-		  scale="0 0 0"
-		  offset="0 -0.0014 0.007" />
-		 <bone
-		  name="mFaceLipUpperCenter"
-		  scale="0 0 0"
-		  offset="0 0 0.007" />
-		  
-		 <bone
-		  name="mFaceTeethUpper"
-		  scale="0 0 0"
-		  offset="0 0 0.007" />
-		  
-		 <bone
-		  name="mFaceLipLowerRight"
-		  scale="0 0 0"
-		  offset="0 0 0.005" />
-		 <bone
-		  name="mFaceLipCornerRight"
-		  scale="0 0 0"
-		  offset="0 -0.00225 0.0075" />		  
-		 
-		 <bone
-		  name="mFaceEyeLidLowerLeft"
-		  scale="0 0 0"
-		  offset="0 0.0033 0.0025" />
-		 
+         name="mFaceEyebrowCenterRight"
+         scale="0 0 0"
+         offset="0 -0.0045 -0.0053" />
+
 		 <bone
-		  name="mFaceEyeLidUpperLeft"
-		  scale="0 0 0"
-		  offset="0 0.0033 0.002" />
+         name="mFaceEyebrowInnerRight"
+         scale="0 0 0"
+         offset="0 -0.00225 -0.0048" />
 		 
 		 <bone
-		  name="mFaceEyecornerInnerLeft"
-		  scale="0 0 0"
-		  offset="0 0.0017 0.0025" />
-		  
-		 <bone
-		  name="mFaceEyebrowOuterLeft"
-		  scale="0 0 0"
-		  offset="0 0.004 0.0014" />
-		  
+         name="mFaceEyebrowOuterLeft"
+         scale="0 0 0"
+         offset="0 0.0053 -0.0047" />
+
 		 <bone
-		  name="mFaceEyebrowCenterLeft"
-		  scale="0 0 0"
-		  offset="0 0.00377 0.00061" />
-		  
+         name="mFaceEyebrowCenterLeft"
+         scale="0 0 0"
+         offset="0 0.0045 -0.0053" />
+
 		 <bone
-		  name="mFaceEyebrowInnerLeft"
-		  scale="0 0 0"
-		  offset="0 0.00225 0.001" />
-		  
+         name="mFaceEyebrowInnerLeft"
+         scale="0 0 0"
+         offset="0 0.00225 -0.0048" />
+
 		 <bone
-		  name="mFaceLipUpperLeft"
-		  scale="0 0 0"
-		  offset="0 0.0014 0.007" />
+         name="mFaceEyeLidUpperRight"
+         scale="0 0 0"
+         offset="0 -0.0039 -0.0032" />		 
+
 		 <bone
-		  name="mFaceLipLowerCenter"
-		  scale="0 0 0"
-		  offset="0 0 0.005" />
+         name="mFaceEyeLidUpperLeft"
+         scale="0 0 0"
+         offset="0 0.0039 -0.0032" />		 
+
 		 <bone
-		  name="mFaceTeethLower"
-		  scale="0 0 0"
-		  offset="0 0 0.008" />
+         name="mFaceEyeLidLowerRight"
+         scale="0 0 0"
+         offset="0 -0.0039 -0.0032" />		 
+
 		 <bone
-		  name="mFaceLipLowerLeft"
-		  scale="0 0 0"
-		  offset="0 0.000 0.005" />
+         name="mFaceEyeLidLowerLeft"
+         scale="0 0 0"
+         offset="0 0.0039 -0.0032" />
+
 		 <bone
-		  name="mFaceLipCornerLeft"
-		  scale="0 0 0"
-		  offset="0 0.00225 0.0075" />
-		  
+         name="mFaceEyecornerInnerRight"
+         scale="0 0 0"
+         offset="0 -0.00225 -0.0032" />
+
 		 <bone
-		  name="mFaceTongueBase"
-		  scale="0 -0.07 0.07"
-          offset="0 0 0.005" />
-		  
+         name="mFaceEyecornerInnerLeft"
+         scale="0 0 0"
+         offset="0 0.00225 -0.0032" />
+		 
 		 <bone
-		  name="mFaceCheekLowerRight"
-		  scale="0 0 0"
-		  offset="0 0 0.0085" />
+         name="mFaceNoseBridge"
+         scale="0 0 0"
+         offset="0 0 -0.002" />
+		 
 		 <bone
-		  name="mFaceCheekLowerLeft"
-		  scale="0 0 0"
-		  offset="0 0 0.0085" />
-		  
+         name="mFaceNoseRight"
+         scale="0 0 0"
+         offset="0 -0.002 0" />
+		  		 
 		 <bone
-		  name="mFaceCheekUpperRight"
-		  scale="0 0 0"
-		  offset="0 0 0.005" />
+         name="mFaceNoseLeft"
+         scale="0 0 0"
+         offset="0 0.002 0" />
+		 
 		 <bone
-		  name="mFaceCheekUpperLeft"
-		  scale="0 0 0"
-		  offset="0 0 0.005" />
-		  
+         name="mFaceNoseBase"
+         scale="0 0 0"
+         offset="0 0 0.002" />
+		 
 		 <bone
-		  name="mFaceNoseCenter"
-		  scale="0 0 0"
-		  offset="0 0 0.005" />
-
+         name="mFaceCheekUpperRight"
+         scale="0 0 0"
+         offset="0 -0.003 0" />
+		  		 
 		 <bone
-		  name="mFaceNoseRight"
-		  scale="0 0 0"
-		  offset="0 0 0.005" />
-
+         name="mFaceCheekUpperLeft"
+         scale="0 0 0"
+         offset="0 0.003 0" />
+		 
 		 <bone
-		  name="mFaceNoseLeft"
-		  scale="0 0 0"
-		  offset="0 0 0.005" />
-
+         name="mFaceCheekLowerRight"
+         scale="0 0 0"
+         offset="0 -0.003 0.0032" />
+		  		 
 		 <bone
-		  name="mFaceNoseBase"
-		  scale="0 0 0"
-		  offset="0 0 0.006" />
-		  
+         name="mFaceCheekLowerLeft"
+         scale="0 0 0"
+         offset="0 0.003 0.0032" />
+		 
+		 
+		  		 
 	  </param_skeleton>		
     </param>
     <param
@@ -4053,7 +4028,7 @@
 
          <bone
          name="mFaceChin"
-         scale="0.0 1.0 0.0"
+         scale="0.0 0.5 0.0"
          offset="0.0 0.0 0.0" />
 
        </param_skeleton>
@@ -4291,12 +4266,22 @@
 		<bone
 		 name="mFaceEyeLidLowerRight"
 		 scale="0 0 0"
-		 offset="0 -0.0033 0.0025" />
+		 offset="0 -0.0026 0.00245" />
 
 		 <bone
 		  name="mFaceEyeLidUpperRight"
 		  scale="0 0 0"
-		  offset="0 -0.0033 0.002" />
+		  offset="0 -0.0026 0.00245" />
+
+		 <bone
+		  name="mFaceEyeLidLowerLeft"
+		  scale="0 0 0"
+		  offset="0 0.0026 0.00245" />
+
+		 <bone
+		  name="mFaceEyeLidUpperLeft"
+		  scale="0 0 0"
+		  offset="0 0.0026 0.00245" />
 
 		 <bone
 		  name="mFaceEyecornerInnerRight"
@@ -4321,7 +4306,7 @@
 		 <bone
 		  name="mFaceLipUpperRight"
 		  scale="0 0 0"
-		  offset="0 -0.0014 0.007" />
+		  offset="0 -0.0017 0.007" />
 
 		 <bone
 		  name="mFaceLipUpperCenter"
@@ -4336,23 +4321,13 @@
 		 <bone
 		  name="mFaceLipLowerRight"
 		  scale="0 0 0"
-		  offset="0 -0.00225 0.0055" />
+		  offset="0 0.0 0.0055" />
 
 		 <bone
 		  name="mFaceLipCornerRight"
 		  scale="0 0 0"
 		  offset="0 -0.00225 0.0075" />		  
 
-		 <bone
-		  name="mFaceEyeLidLowerLeft"
-		  scale="0 0 0"
-		  offset="0 0.0033 0.0025" />
-
-		 <bone
-		  name="mFaceEyeLidUpperLeft"
-		  scale="0 0 0"
-		  offset="0 0.0033 0.002" />
-
 		 <bone
 		  name="mFaceEyecornerInnerLeft"
 		  scale="0 0 0"
@@ -4391,7 +4366,7 @@
 		 <bone
 		  name="mFaceLipLowerLeft"
 		  scale="0 0 0"
-		  offset="0 0.00225 0.0055" />
+		  offset="0 0.0 0.0055" />
 
 		 <bone
 		  name="mFaceLipCornerLeft"
@@ -4406,12 +4381,12 @@
 		 <bone
 		  name="mFaceCheekLowerRight"
 		  scale="0 0 0"
-		  offset="0 0 0.0085" />
+		  offset="0 -0.001 0.007" />
 
 		 <bone
 		  name="mFaceCheekLowerLeft"
 		  scale="0 0 0"
-		  offset="0 0 0.0085" />
+		  offset="0 0.001 0.007" />
 
 		 <bone
 		  name="mFaceCheekUpperRight"
@@ -4442,6 +4417,10 @@
 		  name="mFaceNoseBase"
 		  scale="0 0 0"
 		  offset="0 0 0.006" />
+		 <bone
+		  name="mFaceNoseBridge"
+		  scale="0 0 0"
+		  offset="0 0 0.0036" />
 
       </param_skeleton>
     </param>
@@ -6523,7 +6502,7 @@
      label_max="Anime Eyes"
      value_min="-2"
      value_max="2"
-   show_simple="true"
+     show_simple="true"
      value_default="0">
       <param_morph />
     </param>
@@ -14798,6 +14777,7 @@ render_pass="bump">
      camera_elevation=".1"
      camera_distance=".35">
       <param_driver>
+
         <driven
          id="686" />
 
@@ -14815,6 +14795,7 @@ render_pass="bump">
 
         <driven
          id="689" />
+
       </param_driver>
     </param>
 
-- 
cgit v1.2.3


From b649847fe9f693b50b99cb73b7c641660812f5b7 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 24 Jun 2016 16:43:23 -0400
Subject: SL-124 - comment cleanup, fixed a crash if skinned mesh has no valid
 joint names defined

---
 indra/newview/llskinningutil.cpp | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llskinningutil.cpp b/indra/newview/llskinningutil.cpp
index b36bfc870f..d69432ad21 100644
--- a/indra/newview/llskinningutil.cpp
+++ b/indra/newview/llskinningutil.cpp
@@ -72,7 +72,7 @@ U32 get_valid_joint_index(const std::string& name, LLVOAvatar *avatar, std::vect
             return j;
         }
     }
-    // BENTO how to handle?
+    // Shouldn't ever get here, because of the name cleanup pass in remapSkinInfoJoints()
     LL_ERRS() << "no valid joints in joint_names" << LL_ENDL;
     return 0;
 }
@@ -118,7 +118,7 @@ U32 LLSkinningUtil::getMaxJointCount()
     U32 result = LL_MAX_JOINTS_PER_MESH_OBJECT;
     if (!sIncludeEnhancedSkeleton)
     {
-        // BENTO - currently the remap logic does not guarantee joint count <= 52;
+        // Currently the remap logic does not guarantee joint count <= 52;
         // if one of the base ancestors is not rigged in a given mesh, an extended
 		// joint can still be included.
         result = llmin(result,(U32)52);
@@ -160,6 +160,16 @@ void LLSkinningUtil::remapSkinInfoJoints(LLVOAvatar *avatar, LLMeshSkinInfo* ski
     U32 max_joints = getMeshJointCount(skin);
 
     // Compute the remap
+    for (U32 j = 0; j < skin->mJointNames.size(); ++j)
+    {
+        // Fix invalid names to "mPelvis". Currently meshes with
+        // invalid names will be blocked on upload, so this is just
+        // needed for handling of any legacy bad data.
+        if (!avatar->getJoint(skin->mJointNames[j]))
+        {
+            skin->mJointNames[j] = "mPelvis";
+        }
+    }
     std::vector<U32> j_proxy(skin->mJointNames.size());
     for (U32 j = 0; j < skin->mJointNames.size(); ++j)
     {
@@ -179,8 +189,6 @@ void LLSkinningUtil::remapSkinInfoJoints(LLVOAvatar *avatar, LLMeshSkinInfo* ski
             {
                 top++;
             }
-
-             
         }
     }
     // Then use j_proxy to fill in j_remap for the joints that will be discarded
@@ -285,7 +293,7 @@ void LLSkinningUtil::remapSkinWeights(LLVector4a* weights, U32 num_vertices, con
 void LLSkinningUtil::checkSkinWeights(LLVector4a* weights, U32 num_vertices, const LLMeshSkinInfo* skin)
 {
 #ifndef LL_RELEASE_FOR_DOWNLOAD
-	const S32 max_joints = skin->mJointNames.size();
+	const S32 max_joints = skin->mJointRemap.size();
     if (skin->mJointRemap.size()>0)
     {
         // Check the weights are consistent with the current remap.
-- 
cgit v1.2.3


From 84bdf7f626e21260cabdba2dc108a4c35dfb1afe Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Sat, 25 Jun 2016 08:54:41 -0400
Subject: SL-344 - fixes for scaling of mEye and mAltEye bones

---
 indra/newview/character/avatar_lad.xml | 62 +++++++++++++++++++++-------------
 1 file changed, 38 insertions(+), 24 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 77847c75e3..c6294f582f 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -2071,30 +2071,6 @@
      value_max="1">
       <param_skeleton>
 	  
-	    <!-- Experimental: Added Scale to the System eyes. From first look this affects only custom meshes.
-		   | The result is: Custom eyes now scale in the same way as system eyes do
-		   | Revert by setting scale to scale="0 0 0" for mEyeLeft and mEyeRight
-		   -->
-        <bone
-         name="mEyeLeft"
-         scale="0.25 0.25 0.25"
-         offset="-.005 0 0" />
-
-        <bone
-         name="mEyeRight"
-         scale="0.25 0.25 0.25"
-         offset="-.005 0 0" />
-
-        <bone
-         name="mFaceEyeAltLeft"
-         scale="0.25 0.25 0.25"
-		 offset="-0.005 0 0" />
-
-        <bone
-         name="mFaceEyeAltRight"
-         scale="0.25 0.25 0.25"
-         offset="-0.005 0 0" />
-		 
         <bone
          name="mFaceEyeLidLowerRight"
          scale="0 0.3 0.7"
@@ -4425,6 +4401,41 @@
       </param_skeleton>
     </param>
 	
+    <param
+     id="30689"
+     group="1"
+     name="EyeBone_Big_Eyes"
+     value_min="-1"
+     value_max="0.56">
+      <param_skeleton>
+	  
+	    <!-- Experimental: Added Scale to the System eyes. From first look this affects only custom meshes.
+		   | The result is: Custom eyes now scale in the same way as system eyes do
+		   | Revert by setting scale to scale="0 0 0" for mEyeLeft and mEyeRight
+		   -->
+        <bone
+         name="mEyeLeft"
+         scale="0.3195 0.3280 0.3280"
+         offset="-.005 0 0" />
+
+        <bone
+         name="mEyeRight"
+         scale="0.3195 0.3280 0.3280"
+         offset="-.005 0 0" />
+
+        <bone
+         name="mFaceEyeAltLeft"
+         scale="0.3195 0.3280 0.3280"
+		 offset="-0.005 0 0" />
+
+        <bone
+         name="mFaceEyeAltRight"
+         scale="0.3195 0.3280 0.3280"
+         offset="-0.005 0 0" />
+		 
+      </param_skeleton>
+    </param>
+
   </skeleton>
 
   <mesh
@@ -14796,6 +14807,9 @@ render_pass="bump">
         <driven
          id="689" />
 
+		<driven
+		 id="30689" />
+
       </param_driver>
     </param>
 
-- 
cgit v1.2.3


From 7f904fbcbd878b44b2ffe6c919e96c71756eece1 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Mon, 27 Jun 2016 08:48:15 -0400
Subject: SL-124 - code cleanup

---
 indra/newview/llvoavatar.cpp | 10 ----------
 1 file changed, 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 0448fc6138..340f19c39e 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -1907,16 +1907,6 @@ void LLVOAvatar::resetSkeleton()
     // Restore attachment pos overrides
     rebuildAttachmentPosOverrides();
 
-    // Restore mPelvis state
-    //getJoint("mPelvis")->setRotation(pelvis_rot);
-    //getJoint("mPelvis")->setPosition(pelvis_pos);
-    
-    // Restart animations BENTO - not needed? Removing this fixes a
-    // problem seen if avatar is sitting and animated relative to sit
-    // point.
-
-    //resetAnimations();
-
     LL_DEBUGS("Avatar") << avString() << " reset ends" << LL_ENDL;
 }
 
-- 
cgit v1.2.3


From 5ebf9b3caeb95f6f196786c37847d409e94df415 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 29 Jun 2016 09:41:06 -0400
Subject: SL-426 - strings.xml fix for pec attachments, SL-402 - diagnostics
 for investigation

---
 indra/newview/llvoavatar.cpp                   | 88 +++++++++++++++++++++++++-
 indra/newview/llvoavatar.h                     |  1 +
 indra/newview/skins/default/xui/en/strings.xml |  4 +-
 3 files changed, 90 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 340f19c39e..734f3287b3 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3913,13 +3913,90 @@ void LLVOAvatar::updateHeadOffset()
 		mHeadOffset = lerp(midEyePt, mHeadOffset,  u);
 	}
 }
+
+void LLVOAvatar::debugBodySize() const
+{
+	LLVector3 pelvis_scale = mPelvisp->getScale();
+
+	// some of the joints have not been cached
+	LLVector3 skull = mSkullp->getPosition();
+    LL_DEBUGS("Avatar") << "skull pos " << skull << LL_ENDL;
+	//LLVector3 skull_scale = mSkullp->getScale();
+
+	LLVector3 neck = mNeckp->getPosition();
+	LLVector3 neck_scale = mNeckp->getScale();
+    LL_DEBUGS("Avatar") << "neck pos " << neck << " neck_scale " << neck_scale << LL_ENDL;
+
+	LLVector3 chest = mChestp->getPosition();
+	LLVector3 chest_scale = mChestp->getScale();
+    LL_DEBUGS("Avatar") << "chest pos " << chest << " chest_scale " << chest_scale << LL_ENDL;
+
+	// the rest of the joints have been cached
+	LLVector3 head = mHeadp->getPosition();
+	LLVector3 head_scale = mHeadp->getScale();
+    LL_DEBUGS("Avatar") << "head pos " << head << " head_scale " << head_scale << LL_ENDL;
+
+	LLVector3 torso = mTorsop->getPosition();
+	LLVector3 torso_scale = mTorsop->getScale();
+    LL_DEBUGS("Avatar") << "torso pos " << torso << " torso_scale " << torso_scale << LL_ENDL;
+
+	LLVector3 hip = mHipLeftp->getPosition();
+	LLVector3 hip_scale = mHipLeftp->getScale();
+    LL_DEBUGS("Avatar") << "hip pos " << hip << " hip_scale " << hip_scale << LL_ENDL;
+
+	LLVector3 knee = mKneeLeftp->getPosition();
+	LLVector3 knee_scale = mKneeLeftp->getScale();
+    LL_DEBUGS("Avatar") << "knee pos " << knee << " knee_scale " << knee_scale << LL_ENDL;
+
+	LLVector3 ankle = mAnkleLeftp->getPosition();
+	LLVector3 ankle_scale = mAnkleLeftp->getScale();
+    LL_DEBUGS("Avatar") << "ankle pos " << ankle << " ankle_scale " << ankle_scale << LL_ENDL;
+
+	LLVector3 foot  = mFootLeftp->getPosition();
+    LL_DEBUGS("Avatar") << "foot pos " << foot << LL_ENDL;
+
+	F32 new_offset = (const_cast<LLVOAvatar*>(this))->getVisualParamWeight(AVATAR_HOVER);
+    LL_DEBUGS("Avatar") << "new_offset " << new_offset << LL_ENDL;
+
+	F32 new_pelvis_to_foot = hip.mV[VZ] * pelvis_scale.mV[VZ] -
+        knee.mV[VZ] * hip_scale.mV[VZ] -
+        ankle.mV[VZ] * knee_scale.mV[VZ] -
+        foot.mV[VZ] * ankle_scale.mV[VZ];
+    LL_DEBUGS("Avatar") << "new_pelvis_to_foot " << new_pelvis_to_foot << LL_ENDL;
+
+	LLVector3 new_body_size;
+	new_body_size.mV[VZ] = new_pelvis_to_foot +
+					   // the sqrt(2) correction below is an approximate
+					   // correction to get to the top of the head
+					   F_SQRT2 * (skull.mV[VZ] * head_scale.mV[VZ]) + 
+					   head.mV[VZ] * neck_scale.mV[VZ] + 
+					   neck.mV[VZ] * chest_scale.mV[VZ] + 
+					   chest.mV[VZ] * torso_scale.mV[VZ] + 
+					   torso.mV[VZ] * pelvis_scale.mV[VZ]; 
+
+	// TODO -- measure the real depth and width
+	new_body_size.mV[VX] = DEFAULT_AGENT_DEPTH;
+	new_body_size.mV[VY] = DEFAULT_AGENT_WIDTH;
+
+    LL_DEBUGS("Avatar") << "new_body_size " << new_body_size << LL_ENDL;
+}
+   
 //------------------------------------------------------------------------
 // postPelvisSetRecalc
 //------------------------------------------------------------------------
-void LLVOAvatar::postPelvisSetRecalc( void )
+void LLVOAvatar::postPelvisSetRecalc()
 {		
 	mRoot->updateWorldMatrixChildren();			
+    // BENTO extra tracing around computeBodySize()
+    LLVector3 body_size = mBodySize;
+    LLVector3 avatar_offset = mAvatarOffset;
 	computeBodySize();
+    if (mBodySize != body_size || mAvatarOffset != avatar_offset)
+    {
+        debugBodySize();
+        LL_DEBUGS("Avatar") << avString() << "old mBodySize " << body_size << " old mAvatarOffset " << avatar_offset << LL_ENDL;
+        LL_DEBUGS("Avatar") << avString() << "new mBodySize " << mBodySize << " new mAvatarOffset " << mAvatarOffset << LL_ENDL;
+    }
 	dirtyMesh(2);
 }
 //------------------------------------------------------------------------
@@ -5862,7 +5939,16 @@ void LLVOAvatar::updateVisualParams()
 
 	if (mLastSkeletonSerialNum != mSkeletonSerialNum)
 	{
+        // BENTO extra tracing around computeBodySize()
+        LLVector3 body_size = mBodySize;
+        LLVector3 avatar_offset = mAvatarOffset;
 		computeBodySize();
+        if (mBodySize != body_size || mAvatarOffset != avatar_offset)
+        {
+            debugBodySize();
+            LL_DEBUGS("Avatar") << avString() << "old mBodySize " << body_size << " old mAvatarOffset " << avatar_offset << LL_ENDL;
+            LL_DEBUGS("Avatar") << avString() << "new mBodySize " << mBodySize << " new mAvatarOffset " << mAvatarOffset << LL_ENDL;
+        }
 		mLastSkeletonSerialNum = mSkeletonSerialNum;
 		mRoot->updateWorldMatrixChildren();
 	}
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 32a30c3aa8..b67aa62b06 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -367,6 +367,7 @@ protected:
 	/*virtual*/ LLAvatarJointMesh*	createAvatarJointMesh(); // Returns LLViewerJointMesh
 public:
 	void				updateHeadOffset();
+    void				debugBodySize() const;
 	void				postPelvisSetRecalc( void );
 
 	/*virtual*/ BOOL	loadSkeletonNode();
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index a4869b5503..e7d4491e0f 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2669,8 +2669,8 @@ This feature is currently in Beta. Please add your name to this [http://goo.gl/f
 	<string name="ATTACH_LULEG">Left Upper Leg</string>
 	<string name="ATTACH_LLLEG">Left Lower Leg</string>
 	<string name="ATTACH_BELLY">Belly</string>
-	<string name="ATTACH_RPEC">Right Pec</string>
-	<string name="ATTACH_LPEC">Left Pec</string>
+	<string name="ATTACH_LEFT_PEC">Left Pec</string>
+	<string name="ATTACH_RIGHT_PEC">Right Pec</string>
 	<string name="ATTACH_HUD_CENTER_2">HUD Center 2</string>
 	<string name="ATTACH_HUD_TOP_RIGHT">HUD Top Right</string>
 	<string name="ATTACH_HUD_TOP_CENTER">HUD Top Center</string>
-- 
cgit v1.2.3


From 99250b4e0c26e20d9162ab10d999827f006da256 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 1 Jul 2016 15:12:55 -0400
Subject: SL-402 - more avatar height tracing in debug text

---
 indra/newview/llvoavatar.cpp | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 734f3287b3..11b6fec96e 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3346,23 +3346,31 @@ void LLVOAvatar::updateDebugText()
 		{
 			debug_line += llformat(" - cof rcv:%d", last_received_cof_version);
 		}
-		debug_line += llformat(" bsz-z: %f avofs-z: %f", mBodySize[2], mAvatarOffset[2]);
+		debug_line += llformat(" bsz-z: %.3f", mBodySize[2]);
+        if (mAvatarOffset[2] != 0.0f)
+        {
+            debug_line += llformat("avofs-z: %.3f", mAvatarOffset[2]);
+        }
 		bool hover_enabled = getRegion() && getRegion()->avatarHoverHeightEnabled();
 		debug_line += hover_enabled ? " H" : " h";
 		const LLVector3& hover_offset = getHoverOffset();
 		if (hover_offset[2] != 0.0)
 		{
-			debug_line += llformat(" hov_z: %f", hover_offset[2]);
+			debug_line += llformat(" hov_z: %.3f", hover_offset[2]);
 			debug_line += llformat(" %s", (mIsSitting ? "S" : "T"));
 			debug_line += llformat("%s", (isMotionActive(ANIM_AGENT_SIT_GROUND_CONSTRAINED) ? "G" : "-"));
 		}
-		F32 elapsed = mLastAppearanceMessageTimer.getElapsedTimeF32();
-		static const char *elapsed_chars = "Xx*...";
-		U32 bucket = U32(elapsed*2);
-		if (bucket < strlen(elapsed_chars))
-		{
-			debug_line += llformat(" %c", elapsed_chars[bucket]);
-		}
+        LLVector3 ankle_right_pos_agent = mFootRightp->getWorldPosition();
+		LLVector3 normal;
+        LLVector3 ankle_right_ground_agent = ankle_right_pos_agent;
+        resolveHeightAgent(ankle_right_pos_agent, ankle_right_ground_agent, normal);
+        F32 rightElev = llmax(-0.2f, ankle_right_pos_agent.mV[VZ] - ankle_right_ground_agent.mV[VZ]);
+        debug_line += llformat(" relev %.3f", rightElev);
+
+        LLVector3 root_pos = mRoot->getPosition();
+        LLVector3 pelvis_pos = mPelvisp->getPosition();
+        debug_line += llformat(" rp %.3f pp %.3f", root_pos[2], pelvis_pos[2]);
+
 		addDebugText(debug_line);
 	}
 	if (gSavedSettings.getBOOL("DebugAvatarCompositeBaked"))
-- 
cgit v1.2.3


From 3bc8a974400bccc05d05984adb103f98c43c86ab Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Tue, 5 Jul 2016 14:42:47 -0400
Subject: SL-402 - update mBodySize more frequently to avoid inconsistent
 vertical positioning of avatar.

---
 indra/newview/llvoavatar.cpp | 30 ++++++++++++------------------
 1 file changed, 12 insertions(+), 18 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 11b6fec96e..e3eff15815 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3596,6 +3596,12 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
 		}
 		mInAir = in_air;
 
+        // SL-402: with the ability to animate the position of joints
+        // that affect the body size calculation, computed body size
+        // can get stale much more easily. Simplest fix is to update
+        // it frequently.
+        computeBodySize();
+    
 		// correct for the fact that the pelvis is not necessarily the center 
 		// of the agent's physical representation
 		root_pos.mdV[VZ] -= (0.5f * mBodySize.mV[VZ]) - mPelvisToFoot;
@@ -3995,16 +4001,7 @@ void LLVOAvatar::debugBodySize() const
 void LLVOAvatar::postPelvisSetRecalc()
 {		
 	mRoot->updateWorldMatrixChildren();			
-    // BENTO extra tracing around computeBodySize()
-    LLVector3 body_size = mBodySize;
-    LLVector3 avatar_offset = mAvatarOffset;
 	computeBodySize();
-    if (mBodySize != body_size || mAvatarOffset != avatar_offset)
-    {
-        debugBodySize();
-        LL_DEBUGS("Avatar") << avString() << "old mBodySize " << body_size << " old mAvatarOffset " << avatar_offset << LL_ENDL;
-        LL_DEBUGS("Avatar") << avString() << "new mBodySize " << mBodySize << " new mAvatarOffset " << mAvatarOffset << LL_ENDL;
-    }
 	dirtyMesh(2);
 }
 //------------------------------------------------------------------------
@@ -5947,16 +5944,7 @@ void LLVOAvatar::updateVisualParams()
 
 	if (mLastSkeletonSerialNum != mSkeletonSerialNum)
 	{
-        // BENTO extra tracing around computeBodySize()
-        LLVector3 body_size = mBodySize;
-        LLVector3 avatar_offset = mAvatarOffset;
 		computeBodySize();
-        if (mBodySize != body_size || mAvatarOffset != avatar_offset)
-        {
-            debugBodySize();
-            LL_DEBUGS("Avatar") << avString() << "old mBodySize " << body_size << " old mAvatarOffset " << avatar_offset << LL_ENDL;
-            LL_DEBUGS("Avatar") << avString() << "new mBodySize " << mBodySize << " new mAvatarOffset " << mAvatarOffset << LL_ENDL;
-        }
 		mLastSkeletonSerialNum = mSkeletonSerialNum;
 		mRoot->updateWorldMatrixChildren();
 	}
@@ -8397,6 +8385,12 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara
 			}
 		}
 
+        // Root joint
+        const LLVector3& pos = mRoot->getPosition();
+        const LLVector3& scale = mRoot->getScale();
+        apr_file_printf( file, "\t\t<root name=\"%s\" position=\"%f %f %f\" scale=\"%f %f %f\"/>\n", 
+                         mRoot->getName().c_str(), pos[0], pos[1], pos[2], scale[0], scale[1], scale[2]);
+
         // Bones
 		avatar_joint_list_t::iterator iter = mSkeleton.begin();
 		avatar_joint_list_t::iterator end  = mSkeleton.end();
-- 
cgit v1.2.3


From cba0bb30380baef9ecb753149fcb1779c0c96a8e Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Tue, 5 Jul 2016 16:18:50 -0400
Subject: SL-109 - little bit of log spam cleanup

---
 indra/newview/llavatarrenderinfoaccountant.cpp | 2 +-
 indra/newview/lleventpoll.cpp                  | 6 +++---
 indra/newview/llvoavatar.cpp                   | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavatarrenderinfoaccountant.cpp b/indra/newview/llavatarrenderinfoaccountant.cpp
index 5431daca32..7413dbed20 100644
--- a/indra/newview/llavatarrenderinfoaccountant.cpp
+++ b/indra/newview/llavatarrenderinfoaccountant.cpp
@@ -354,7 +354,7 @@ void LLAvatarRenderInfoAccountant::resetRenderInfoScanTimer()
 // are returned for a new LLViewerRegion, and is the earliest time to get render info
 void LLAvatarRenderInfoAccountant::scanNewRegion(const LLUUID& region_id)
 {
-	LL_INFOS("AvatarRenderInfo") << region_id << LL_ENDL;
+	LL_DEBUGS("AvatarRenderInfo") << region_id << LL_ENDL;
 
 	// Reset the global timer so it will scan regions on the next call to ::idle
 	LLAvatarRenderInfoAccountant::getInstance()->resetRenderInfoScanTimer();
diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp
index 7178042b32..15110701e4 100644
--- a/indra/newview/lleventpoll.cpp
+++ b/indra/newview/lleventpoll.cpp
@@ -142,7 +142,7 @@ namespace Details
         int errorCount = 0;
         int counter = mCounter; // saved on the stack for logging. 
 
-        LL_INFOS("LLEventPollImpl") << " <" << counter << "> entering coroutine." << LL_ENDL;
+        LL_DEBUGS("LLEventPollImpl") << " <" << counter << "> entering coroutine." << LL_ENDL;
 
         mAdapter = httpAdapter;
 
@@ -170,7 +170,7 @@ namespace Details
             {
                 if (status == LLCore::HttpStatus(LLCore::HttpStatus::EXT_CURL_EASY, CURLE_OPERATION_TIMEDOUT))
                 {   // A standard timeout response we get this when there are no events.
-                    LL_INFOS("LLEventPollImpl") << "All is very quiet on target server. It may have gone idle?" << LL_ENDL;
+                    LL_DEBUGS("LLEventPollImpl") << "All is very quiet on target server. It may have gone idle?" << LL_ENDL;
                     errorCount = 0;
                     continue;
                 }
@@ -264,7 +264,7 @@ namespace Details
                 }
             }
         }
-        LL_INFOS("LLEventPollImpl") << " <" << counter << "> Leaving coroutine." << LL_ENDL;
+        LL_DEBUGS("LLEventPollImpl") << " <" << counter << "> Leaving coroutine." << LL_ENDL;
     }
 
 }
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index e3eff15815..d3cd85e9f4 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -8974,7 +8974,7 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
 				   && (all_textures.find(image_id) == all_textures.end()))
 				{
 					// attachment texture not previously seen.
-					LL_INFOS() << "attachment_texture: " << image_id.asString() << LL_ENDL;
+					LL_DEBUGS("ARCdetail") << "attachment_texture: " << image_id.asString() << LL_ENDL;
 					all_textures.insert(image_id);
 				}
 			}
@@ -8994,7 +8994,7 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
 					continue;
 				if (all_textures.find(image_id) == all_textures.end())
 				{
-					LL_INFOS() << "local_texture: " << texture_dict->mName << ": " << image_id << LL_ENDL;
+					LL_DEBUGS("ARCdetail") << "local_texture: " << texture_dict->mName << ": " << image_id << LL_ENDL;
 					all_textures.insert(image_id);
 				}
 			}
-- 
cgit v1.2.3


From f868e29945806fd6cefde65067ae2c870ac112a6 Mon Sep 17 00:00:00 2001
From: Oz Linden <oz@lindenlab.com>
Date: Wed, 6 Jul 2016 16:52:24 -0400
Subject: increment viewer version to 4.0.7

---
 indra/newview/VIEWER_VERSION.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index d13e837c8e..43beb4001b 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-4.0.6
+4.0.7
-- 
cgit v1.2.3


From 880fd82d0be58aa4cc5ea16518d15fed3178aa29 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 6 Jul 2016 20:06:50 -0400
Subject: SL-424 - more proposed skeleton/slider fixes

---
 indra/newview/character/avatar_lad.xml      | 976 ++++++++++++----------------
 indra/newview/character/avatar_skeleton.xml |  81 +--
 2 files changed, 455 insertions(+), 602 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index c6294f582f..ddf497f05b 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -1421,6 +1421,11 @@
      value_min="-1"
      value_max="1">
       <param_skeleton>
+		<bone
+         name="mFaceRoot"
+         scale="0.25 0 0"
+         offset="0 0 0" />
+		 
         <bone
          name="mEyeLeft"
          scale="0 0 0"
@@ -1461,11 +1466,6 @@
          scale="0 0 0"
          offset="-0.0038 0 0" />
 
-		<bone
-         name="mFaceRoot"
-         scale="0.25 0 0"
-         offset="0 0 0" />
-
 		<bone
          name="mFaceNoseCenter"
          scale="0 0 0"
@@ -1489,42 +1489,43 @@
 		<bone
          name="mFaceLipUpperLeft"
          scale="0 0 0"
-         offset="0.0045 0 0" />
+         offset="0.005 0 0" />
 
 		<bone
          name="mFaceLipUpperCenter"
          scale="0 0 0"
-         offset="0.0045 0 0" />
+         offset="0.005 0 0" />
 
 		<bone
          name="mFaceLipUpperRight"
          scale="0 0 0"
-         offset="0.0045 0 0" />
+         offset="0.005 0 0" />
 		 
 		<bone
-         name="mFaceLipLowerLeft"
+         name="mFaceLipCornerRight"
          scale="0 0 0"
-         offset="0.018 0 0" />		 
+         offset="0.005 0 0" />
 
 		<bone
-         name="mFaceLipLowerCenter"
+         name="mFaceLipCornerLeft"
          scale="0 0 0"
-         offset="0.018 0 0" />
+         offset="0.005 0 0" />
 
 		<bone
-         name="mFaceLipLowerRight"
+         name="mFaceLipLowerLeft"
          scale="0 0 0"
-         offset="0.018 0 0" />
-		 
+         offset="0.01 0 0" />
+
 		<bone
-         name="mFaceLipCornerRight"
+         name="mFaceLipLowerCenter"
          scale="0 0 0"
-         offset="0.004 0 0" />
+         offset="0.01 0 0" />
 
 		<bone
-         name="mFaceLipCornerLeft"
+         name="mFaceLipLowerRight"
          scale="0 0 0"
-         offset="0.004 0 0" />
+         offset="0.01 0 0" />
+		 
 		 
 		<bone
          name="mFaceCheekLowerLeft"
@@ -1534,36 +1535,35 @@
 		<bone
          name="mFaceCheekLowerRight"
          scale="0 0 0"
-         offset="-0.007 0 0" />
-
-		<bone
-         name="mFaceTeethUpper"
-         scale="0 0 0"
-         offset="0.015 0 0" />
-
-		 <bone
-         name="mFaceTeethLower"
-         scale="0 0 0"
-         offset="0.015 0 0" />
+         offset="0.007 0 0" />
 
 		 <bone
          name="mFaceChin"
          scale="0 0 0"
          offset="0.014 0 0" />
 
+ 	    <bone
+         name="mFaceTeethUpper"
+         scale="0.28 0 0"
+         offset="0 0 0" />
+ 	    <bone
+         name="mFaceTeethLower"
+         scale="0.28 0 0"
+         offset="0 0 0" />
+		 
 		 <bone
          name="mFaceTongueBase"
-         scale="0 0 0"
-         offset="0.014 0 0" />
+         scale="0.3 0 0"
+         offset="0 0 0" />
 
 		 <bone
          name="mFaceTongueTip"
          scale="0 0 0"
-         offset="0.008 0 0" />
+         offset="0.004 0 0" />
 
       </param_skeleton>
     </param>
-
+	
     <param
      id="768"
      group="1"
@@ -1851,6 +1851,11 @@
         <bone
          name="mFaceJaw"
          scale="1 1 1"
+         offset="0 0 0" />
+
+        <bone
+         name="mFaceJawShaper"
+         scale="1 1 1"
          offset="0 0 0" />
 
 		 <bone
@@ -2230,16 +2235,16 @@
       <param_skeleton>
         <bone
          name   = "mFaceNoseCenter"
-		 offset = "0.01 0.0 0.0"
-         scale  = "0.10 0.3 0.0" />
+		 offset = "0.0 0.0 0.0"
+         scale  = "0.50 0.3 0.1" />
         <bone
          name   = "mFaceNoseLeft"
-		 offset = "0 0.0025 0"
-         scale  = "0.0 0.0 0.0" />
+		 offset = "0 0 0"
+         scale  = "0.0 0.3 0.0" />
         <bone
          name   = "mFaceNoseRight"
-		 offset = "0 -0.0025 0"
-         scale  = "0.0 0.0 0.0" />
+		 offset = "0 0 0"
+         scale  = "0.0 0.3 0.0" />
 		<bone
          name   = "mFaceNoseBridge"
 		 offset = "0.006 0.0 0.0"
@@ -2301,16 +2306,16 @@
       <param_skeleton>
         <bone
          name   = "mFaceNoseCenter"
-		 offset = "0.00 0.0 0.0"
+		 offset = "0 0 0"
          scale  = "0.10 0.85 0.0" />
         <bone
          name   = "mFaceNoseLeft"
 		 scale  = "0 0 0"
-		 offset = "0.001 0.010 0"/>		 
+		 offset = "0.001 0.013 0"/>		 
         <bone
          name   = "mFaceNoseRight"
 		 scale  = "0 0 0"
-		 offset = "-0.001 -0.01 0" />		 
+		 offset = "-0.001 -0.013 0" />		 
       </param_skeleton>
     </param>
 
@@ -2450,42 +2455,42 @@
         <bone
          name   = "mFaceLipCornerLeft"
 		 scale  = "0.2 0.00 0.2"
-		 offset = "-0.01 0.00 0.0" />
+		 offset = "-0.008 0.00 0.0" />
 		 
         <bone
          name   = "mFaceLipUpperLeft"
 		 scale  = "0.2 0.00 0.2"
-		 offset = "-0.01 0.00 0.0015" />
+		 offset = "-0.009 0.00 0.0025" />
 		 
         <bone
          name   = "mFaceLipUpperCenter"
 		 scale  = "0.2 0.00 0.2"
-		 offset = "-0.01 0.00 0.0025" />
+		 offset = "-0.009 0.00 0.0025" />
 		 
         <bone
          name   = "mFaceLipUpperRight"
 		 scale  = "0.2 0.00 0.2"
-		 offset = "-0.01 0.00 0.0015" />
+		 offset = "-0.009 0.00 0.0025" />
 		 
         <bone
          name   = "mFaceLipCornerRight"
 		 scale  = "0.2 0.00 0.2"
-		 offset = "-0.01 0.00 0.0" />
+		 offset = "-0.008 0.00 0.0" />
 		 		 
 	    <bone
          name   = "mFaceLipLowerLeft"
 		 scale  = "0.2 0.00 0.2"
-		 offset = "-0.01 0.00 -0.0015" />
+		 offset = "-0.008 0.00 -0.0015" />
 		 
         <bone
          name   = "mFaceLipLowerCenter"
 		 scale  = "0.2 0.00 0.2"
-		 offset = "-0.01 0.00 -0.0025" />
+		 offset = "-0.008 0.00 -0.0025" />
 
         <bone
          name   = "mFaceLipLowerRight"
 		 scale  = "0.2 0.00 0.2"
-		 offset = "-0.01 0.00 -0.0015" />
+		 offset = "-0.008 0.00 -0.0015" />
 		 
       </param_skeleton>
     </param>
@@ -2510,17 +2515,17 @@
 		 
         <bone
          name   = "mFaceLipUpperCenter"
-		 scale  = "0.2 0.00 -0.6"
+		 scale  = "0.2 0.00 -0.3"
 		 offset = "-0.015 0.00 -0.005" />
 		 
         <bone
          name   = "mFaceLipUpperRight"
-		 scale  = "0.2 0.00 -0.6"
+		 scale  = "0.2 0.00 -0.3"
 		 offset = "-0.012 0.00 -0.005" />
 		 
         <bone
          name   = "mFaceLipCornerRight"
-		 scale  = "0.2 0.00 -0.6"
+		 scale  = "0.2 0.00 -0.3"
 		 offset = "-0.01 0.00 0.0" />
 		 		 
 	    <bone
@@ -2556,18 +2561,18 @@
 		 
         <bone
          name   = "mFaceLipUpperLeft"
-		 scale  = "0.2 0.00 0.7"
-		 offset = "0.004 0.00 0.006" />
+		 scale  = "0.2 0.00 0.4"
+		 offset = "0.004 0.00 0.004" />
 		 
         <bone
          name   = "mFaceLipUpperCenter"
-		 scale  = "0.2 0.00 0.7"
-		 offset = "0.004 0.00 0.006" />
+		 scale  = "0.2 0.00 0.4"
+		 offset = "0.004 0.00 0.004" />
 		 
         <bone
          name   = "mFaceLipUpperRight"
-		 scale  = "0.2 0.00 0.7"
-		 offset = "0.004 0.00 0.006" />
+		 scale  = "0.2 0.00 0.4"
+		 offset = "0.004 0.00 0.004" />
 		 
         <bone
          name   = "mFaceLipCornerRight"
@@ -2613,17 +2618,17 @@
 		<bone
          name   = "mFaceLipUpperLeft"
 	     scale  = " 0.1 0 0.6"
-		 offset = "-0.006 0.00 0.006" />
+		 offset = "-0.004 0.00 0.006" />
 		 
         <bone
          name   = "mFaceLipUpperCenter"
 	     scale  = " 0.1 0 0.4"
-		 offset = "-0.006 0.00 0.003" />
+		 offset = "-0.004 0.00 0.003" />
 
         <bone
          name   = "mFaceLipUpperRight"
 	     scale  = " 0.1 0 0.6"
-		 offset = "-0.006 0.00 0.006" />
+		 offset = "-0.004 0.00 0.006" />
 
  	    <bone
          name   = "mFaceLipLowerLeft"
@@ -2701,51 +2706,6 @@
      value_min="-2"
      value_max="2">
       <param_skeleton>
-		 		 
-        <bone
-         name   = "mFaceLipCornerLeft"
-		 scale  = "0 0 0"
-		 offset = "0 0 -0.006" />
-
-        <bone
-         name   = "mFaceLipCornerRight"
-		 scale  = "0 0 0"
-		 offset = "0 0 -0.006" />
-
-	    <bone
-         name   = "mFaceLipUpperLeft"
-	     scale  = " 0 0 0"
-		 offset = "0 0 -0.006" />
-		 
-        <bone
-         name   = "mFaceLipUpperCenter"
-	     scale  = " 0 0 0"
-		 offset = "0 0 -0.006" />
-
-        <bone
-         name   = "mFaceLipUpperRight"
-	     scale  = " 0 0 0"
-		 offset = "0 0 -0.006" />
-		 
-	    <bone
-         name   = "mFaceLipLowerLeft"
-	     scale  = " 0 0 0"
-		 offset = "0 0 -0.006" />
-		 
-        <bone
-         name   = "mFaceLipLowerCenter"
-	     scale  = " 0 0 0"
-		 offset = "0 0 -0.006" />
-
-        <bone
-         name   = "mFaceLipLowerRight"
-	     scale  = " 0 0 0"
-		 offset = "0 0 -0.006" />
-
-        <bone
-         name   = "mFaceTongueBase"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "0 0 -0.006" />
 
         <bone
          name   = "mFaceTeethUpper"
@@ -2865,52 +2825,62 @@
       </param_skeleton>
     </param>
 	
-    <param
-     id="30764"
-     group="1"
-     name="Lip_Cleft_Deep"
-     value_min="-1"
-     value_max="1.2">
-      <param_skeleton>
-		 		 
-	    <bone
-         name   = "mFaceLipUpperLeft"
-		 scale  = "0 0 0"
-		 offset = "0 0 0.002" />
-		 
-        <bone
-         name   = "mFaceLipUpperCenter"
-		 scale  = "0 0 0"
-		 offset = "0 0 -0.001" />
+<param
+    id="30764"
+    group="1"
+    name="Lip_Cleft_Deep"
+    value_min="-1"
+    value_max="1.2">
+     <param_skeleton>
+            
+        <bone
+        name   = "mFaceLipUpperLeft"
+         scale  = "0 0 0.3"
+         offset = "0 0 0.003" />
+        
+       <bone
+        name   = "mFaceLipUpperCenter"
+         scale  = "0 0 -0.1"
+         offset = "0 0 -0.001" />
+
+	   <bone
+        name   = "mFaceLipUpperRight"
+        scale  = "0 0 0.3"
+        offset = "0 0 0.003" />
+       
+     </param_skeleton>
+     </param>
+	 
+<param
+    id="30025"
+    group="1"
+    name="Wide_Lip_Cleft"
+    value_min="-.8"
+    value_max="1.5">
+     <param_skeleton>
 
-        <bone
-         name   = "mFaceLipUpperRight"
-		 scale  = "0 0 0"
-		 offset = "0 0 0.002" />
+       <bone
+        name   = "mFaceLipUpperLeft"
+        scale  = "0 0.1 0"
+        offset = "0 0.0 0" />
+        
+       <bone
+        name   = "mFaceLipUpperRight"
+         scale  = "0  0.1 0"
+         offset = "0 0.0 0" />
 
-      </param_skeleton>
-	 </param>
-	 
-    <param
-     id="30025"
-     group="1"
-     name="Wide_Lip_Cleft"
-     value_min="-.8"
-     value_max="1.5">
-      <param_skeleton>
-		 		 
-	    <bone
-         name   = "mFaceLipUpperLeft"
-		 scale  = "0 0 0"
-		 offset = "0 0.004 0" />
-		 
         <bone
-         name   = "mFaceLipUpperRight"
-		 scale  = "0  0 0"
-		 offset = "0 -0.004 0" />
+         name   = "mFaceLipCornerRight"
+		 scale  = "0.0 0 0"
+		 offset = "0 0.001 0" />
 
+        <bone
+         name   = "mFaceLipCornerLeft"
+		 scale  = "0.0 0 0"
+		 offset = "0 -0.001 0" />		 
+		 
       </param_skeleton>
-    </param>
+   </param>
 	
     <param
      id="31663"
@@ -2939,55 +2909,15 @@
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 -0.003 0.0" />
 
-        <bone
-         name   = "mFaceLipCornerLeft"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "0.0 -0.005 0.0" />
-
-        <bone
-         name   = "mFaceLipUpperLeft"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "0.0 -0.005 0.0" />
-
-        <bone
-         name   = "mFaceLipUpperCenter"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "0.0 -0.006 0.0" />
-
-        <bone
-         name   = "mFaceLipUpperRight"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "-0.002 -0.005 0.0" />
-
-        <bone
-         name   = "mFaceLipCornerRight"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "-0.002 -0.005 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerLeft"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "0.0 -0.007 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerCenter"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "0.0 -0.01 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerRight"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "-0.002 -0.005 0.0" />
-		 
         <bone
          name   = "mFaceTeethUpper"
 		 scale  = "0.0  0.00 0.0"
-		 offset = "-0.002 -0.005 0.0" />
+		 offset = "0.0 -0.006 0.0" />
 		 
         <bone
          name   = "mFaceTeethLower"
 		 scale  = "0.0  0.00 0.0"
-		 offset = "-0.002 -0.006 0.0" />
+		 offset = "0.0 -0.006 0.0" />
 		 
 		 
 
@@ -3021,55 +2951,15 @@
 		 scale  = "0.0 0.00 0.0"
 		 offset = "0.0 0.003 0.0" />
 
-        <bone
-         name   = "mFaceLipCornerLeft"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "-0.002 0.005 0.0" />
-
-        <bone
-         name   = "mFaceLipUpperLeft"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "-0.002 0.005 0.0" />
-
-        <bone
-         name   = "mFaceLipUpperCenter"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "0.0 0.006 0.0" />
-
-        <bone
-         name   = "mFaceLipUpperRight"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "0.0 0.005 0.0" />
-
-        <bone
-         name   = "mFaceLipCornerRight"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "0.0 0.005 0.0" />		 
-
-        <bone
-         name   = "mFaceLipLowerLeft"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "-0.002 0.005 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerCenter"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "0.0 0.01 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerRight"
-		 scale  = "0.0 0.00 0.0"
-		 offset = "0.0 0.007 0.0" />
-		 
         <bone
          name   = "mFaceTeethUpper"
 		 scale  = "0.0 0.00 0.0"
-		 offset = "-0.002 0.005 0.0" />
+		 offset = "0.0 0.006 0.0" />
 		 
         <bone
          name   = "mFaceTeethLower"
 		 scale  = "0.0 0.00 0.0"
-		 offset = "-0.002 0.006 0.0" />
+		 offset = "0.0 0.006 0.0" />
 		 
 
        </param_skeleton>
@@ -3140,7 +3030,7 @@
       <param_skeleton>
         <bone
          name   = "mFaceChin"
-		 offset = "0.0  0.00   -0.03"
+		 offset = "0.0  0.00   -0.025"
          scale  = "0.0 0.0 0.0" />
        </param_skeleton>
     </param>
@@ -3163,46 +3053,14 @@
      id="30760"
      group="1"
      name="Jaw_Angle"
-     value_min="-2"
+     value_min="-1.2"
      value_max="2"
-     value_default="0">
+	 value_default="0">
       <param_skeleton>
         <bone
-         name   = "mFaceJaw"
+         name   = "mFaceJawShaper"
 		 offset = "0.0  0.00   0.03"
          scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerLeft"
-		 offset = "0.0  0.00   -0.03"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerRight"
-		 offset = "0.0  0.00   -0.03"
-         scale  = "0.0 0.0 0.0" />
-		 
-        <bone
-         name   = "mFaceTeethLower"
-		 offset = "0.0  0.00   -0.03"
-         scale  = "0.0 0.0 0.0" />
-
-
-        <bone
-         name   = "mFaceLipLowerCenter"
-		 offset = "0.0  0.00   -0.03"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceTongueBase"
-		 offset = "0.0  0.00   -0.03"
-         scale  = "0.0 0.0 0.0" />
-		 
-        <bone
-         name   = "mFaceChin"
-		 offset = "0.0  0.00   -0.03"
-         scale  = "0.0 0.0 0.0" />
-		 
        </param_skeleton>
     </param>
 	
@@ -3214,42 +3072,17 @@
      value_min="-2"
      value_max="2">
       <param_skeleton>
-        <bone
-         name   = "mFaceTongueBase"
-		 offset = "0.01  0.00  0"
-         scale  = "0.0 0.0 0.0" />
 
         <bone
          name   = "mFaceTeethLower"
-         offset = "0.01 0 0"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceTeethUpper"
-         offset = "-0.001 0 0"
+         offset = "0.008 0 0"
          scale  = "0.0 0.0 0.0" />
 
         <bone
          name   = "mFaceChin"
-		 offset = "0.01  0.00  0"
+		 offset = "0.008  0.00  0"
          scale  = "0.0 0.0 0.0" />
 
-        <bone
-         name   = "mFaceLipLowerRight"
-		 offset = "0.01  0.00  0"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerLeft"
-		 offset = "0.01  0.00  0"
-         scale  = "0.0 0.0 0.0" />
-
-        <bone
-         name   = "mFaceLipLowerCenter"
-		 offset = "0.01  0.00  0"
-         scale  = "0.0 0.0 0.0" />
-
-		 
        </param_skeleton>
     </param>
 	
@@ -3305,11 +3138,10 @@
      value_min="-.5"
      value_max="1.5">
       <param_skeleton>
-        <bone
-         name   = "mFaceChin"
-		 offset = "-0.002 0.0 -0.01"
-         scale  = "0.0 0.5 0.0" />
-		 
+       <bone
+        name   = "mFaceJawShaper"
+        offset = "0 0 0"
+       scale  = "0.0 0.125 0.5" />		 
        </param_skeleton>
     </param>
 	
@@ -3551,209 +3383,53 @@
          offset="0 0.00225 -0.0032" />
 		 
 		 <bone
-         name="mFaceNoseBridge"
-         scale="0 0 0"
-         offset="0 0 -0.002" />
-		 
-		 <bone
-         name="mFaceNoseRight"
-         scale="0 0 0"
-         offset="0 -0.002 0" />
-		  		 
-		 <bone
-         name="mFaceNoseLeft"
-         scale="0 0 0"
-         offset="0 0.002 0" />
-		 
-		 <bone
-         name="mFaceNoseBase"
-         scale="0 0 0"
-         offset="0 0 0.002" />
-		 
-		 <bone
-         name="mFaceCheekUpperRight"
-         scale="0 0 0"
-         offset="0 -0.003 0" />
-		  		 
-		 <bone
-         name="mFaceCheekUpperLeft"
-         scale="0 0 0"
-         offset="0 0.003 0" />
-		 
-		 <bone
-         name="mFaceCheekLowerRight"
-         scale="0 0 0"
-         offset="0 -0.003 0.0032" />
-		  		 
-		 <bone
-         name="mFaceCheekLowerLeft"
-         scale="0 0 0"
-         offset="0 0.003 0.0032" />
-		 
-		 
-		  		 
-	  </param_skeleton>		
-    </param>
-    <param
-     id="40647"
-     group="1"
-     name="Squash_Stretch_Head"
-     value_min="-0.5"
-     value_max="1"
-     value_default="0">
-      <param_skeleton>
-
-		 <bone
-         name="mFaceChin"
-         scale="0 -0.07 0.07"
-         offset="0 0 -0.005" />
-		 
-		 <bone
-		  name="mFaceEyeLidLowerRight"
-		  scale="0 0 0"
-		  offset="0 -0.0033 0.0025" />
-		 
-		 <bone
-		  name="mFaceEyeLidUpperRight"
-		  scale="0 0 0"
-		  offset="0 -0.0033 0.002" />
-		 
-		 <bone
-		  name="mFaceEyecornerInnerRight"
-		  scale="0 0 0"
-		  offset="0 -0.0017 0.0025" />
-		  
-		 <bone
-		  name="mFaceEyebrowOuterRight"
-		  scale="0 0 0"
-		  offset="0 -0.004 0.0014" />
-		  
-		 <bone
-		  name="mFaceEyebrowCenterRight"
-		  scale="0 0 0"
-		  offset="0 -0.00377 0.00061" />
-		  
-		 <bone
-		  name="mFaceEyebrowInnerRight"
-		  scale="0 0 0"
-		  offset="0 -0.00225 0.001" />
-
-		 <bone
-		  name="mFaceLipUpperRight"
-		  scale="0 0 0"
-		  offset="0 -0.0014 0.007" />
-		 <bone
-		  name="mFaceLipUpperCenter"
-		  scale="0 0 0"
-		  offset="0 0 0.007" />
-		  
-		 <bone
-		  name="mFaceTeethUpper"
-		  scale="0 0 0"
-		  offset="0 0 0.007" />
-		  
-		 <bone
-		  name="mFaceLipLowerRight"
-		  scale="0 0 0"
-		  offset="0 -0.00225 0.0005" />
-		 <bone
-		  name="mFaceLipCornerRight"
-		  scale="0 0 0"
-		  offset="0 -0.00225 0.0075" />		  
-		 
-		 <bone
-		  name="mFaceEyeLidLowerLeft"
-		  scale="0 0 0"
-		  offset="0 0.0033 0.0025" />
-		 
-		 <bone
-		  name="mFaceEyeLidUpperLeft"
-		  scale="0 0 0"
-		  offset="0 0.0033 0.002" />
-		 
-		 <bone
-		  name="mFaceEyecornerInnerLeft"
-		  scale="0 0 0"
-		  offset="0 0.0017 0.0025" />
-		  
-		 <bone
-		  name="mFaceEyebrowOuterLeft"
-		  scale="0 0 0"
-		  offset="0 0.004 0.0014" />
-		  
-		 <bone
-		  name="mFaceEyebrowCenterLeft"
-		  scale="0 0 0"
-		  offset="0 0.00377 0.00061" />
-		  
-		 <bone
-		  name="mFaceEyebrowInnerLeft"
-		  scale="0 0 0"
-		  offset="0 0.00225 0.001" />
-		  
-		 <bone
-		  name="mFaceLipUpperLeft"
-		  scale="0 0 0"
-		  offset="0 0.0014 0.007" />
-		 <bone
-		  name="mFaceLipLowerCenter"
-		  scale="0 0 0"
-		  offset="0 0 0.001" />
-		 <bone
-		  name="mFaceTeethLower"
-		  scale="0 0 0"
-		  offset="0 0 0.008" />
-		 <bone
-		  name="mFaceLipLowerLeft"
-		  scale="0 0 0"
-		  offset="0 0.00225 0.0004" />
-		 <bone
-		  name="mFaceLipCornerLeft"
-		  scale="0 0 0"
-		  offset="0 0.00225 0.0075" />
-		  
+         name="mFaceNoseBridge"
+         scale="0 0 0"
+         offset="0 0 -0.002" />
+		 
 		 <bone
-		  name="mFaceTongueBase"
-		  scale="0 0 0"
-		  offset="0 0 0.00" />
-		  
+         name="mFaceNoseRight"
+         scale="0 0 0"
+         offset="0 -0.002 0" />
+		  		 
 		 <bone
-		  name="mFaceCheekLowerRight"
-		  scale="0 0 0"
-		  offset="0 0 0.0085" />
+         name="mFaceNoseLeft"
+         scale="0 0 0"
+         offset="0 0.002 0" />
+		 
 		 <bone
-		  name="mFaceCheekLowerLeft"
-		  scale="0 0 0"
-		  offset="0 0 0.0085" />
-		  
+         name="mFaceNoseBase"
+         scale="0 0 0"
+         offset="0 0 0.002" />
+		 
 		 <bone
-		  name="mFaceCheekUpperRight"
-		  scale="0 0 0"
-		  offset="0 0 0.005" />
+         name="mFaceCheekUpperRight"
+         scale="0 0 0"
+         offset="0 -0.003 0" />
+		  		 
 		 <bone
-		  name="mFaceCheekUpperLeft"
-		  scale="0 0 0"
-		  offset="0 0 0.005" />
-		  
+         name="mFaceCheekUpperLeft"
+         scale="0 0 0"
+         offset="0 0.003 0" />
+		 
 		 <bone
-		  name="mFaceNoseCenter"
-		  scale="0 0 0"
-		  offset="0 0 0.005" />
-
+         name="mFaceCheekLowerRight"
+         scale="0 0 0"
+         offset="0 -0.003 0.0032" />
+		  		 
 		 <bone
-		  name="mFaceNoseRight"
-		  scale="0 0 0"
-		  offset="0 0 0.005" />
+         name="mFaceCheekLowerLeft"
+         scale="0 0 0"
+         offset="0 0.003 0.0032" />
 
-		 <bone
-		  name="mFaceNoseLeft"
+	     <bone
+		  name="mFaceTeethUpper"
 		  scale="0 0 0"
-		  offset="0 0 0.005" />
-
-		 <bone
-		  name="mFaceNoseBase"
+		  offset="0 0 0.0032" />
+	     <bone
+		  name="mFaceTeethLower"
 		  scale="0 0 0"
-		  offset="0 0 0.006" />
+		  offset="0 0 0.0016" />
 
 	  </param_skeleton>		
     </param>
@@ -3981,15 +3657,14 @@
      value_max="3">
       <param_skeleton>
 
-		 <bone
-         name="mFaceCheekLowerLeft"
-         scale="0 0.1 0"
-         offset="0.001 -0.01 0" />
-
-		 <bone
-         name="mFaceCheekLowerRight"
-         scale="0 0.1 0"
-         offset="0.001 0.01 0" />
+         <bone
+          name="mFaceCheekLowerLeft"
+          scale="0 -0.12 0"
+          offset="0.0 0.0 0" />
+	     <bone
+          name="mFaceCheekLowerRight"
+          scale="0 -0.12 0"
+          offset="0 0 0" />
 
        </param_skeleton>
     </param>
@@ -4021,6 +3696,11 @@
 		 <bone
          name="mFaceJaw"
          scale="0.0 0.5 0.0"
+         offset="0.0 0.0 0.0" />
+		 
+		 <bone
+         name="mFaceJawShaper"
+         scale="0.0 0.5 0.0"
          offset="0.0 0.0 0.0" />
 		 
 		 <bone
@@ -4179,28 +3859,38 @@
 
 		<bone
 		 name="mFaceChin"
-		 scale="0.0 0.3 0.0"
+		 scale="0.0 -0.2 0.0"
+		 offset="0.0 0.0 0.0" />
+
+		<bone
+		 name="mFaceRoot"
+		 scale="0.0 0 0.0"
 		 offset="0.0 0.0 0.0" />
 
 		<bone
 		 name="mFaceCheekLowerRight"
-		 scale="0.0 0.0 0.0"
-		 offset="0.0 -0.005 0.0" />
+		 scale="0.0 -0.2 0.0"
+		 offset="0.0 0 0.0" />
 
 		<bone
 		 name="mFaceCheekLowerLeft"
-		 scale="0.0 0.0 0.0"
-		 offset="0.0 0.005 0.0" />
+		 scale="0.0 -0.2 0.0"
+		 offset="0.0 0 0.0" />
 
 		<bone
 		 name="mFaceForeheadRight"
-		 scale="0.0 0.7 0.0"
-		 offset="0.0 -0.005 0.0" />
+		 scale="0.0 -1.0 0.0"
+		 offset="0.0 0.01 -0.01" />
 
 		<bone
 		 name="mFaceForeheadLeft"
-		 scale="0.0 0.7 0.0"
-		 offset="0.0 0.005 0.0" />
+		 scale="0.0 -0.8 0.0"
+		 offset="0.0 -0.01 -0.01" />
+		 
+		 <bone
+		 name="mFaceJawShaper"
+		 scale="0.0 -0.3 0.0"
+		 offset="0.0 0 0" />
 
 		</param_skeleton>
 	</param>
@@ -4236,28 +3926,18 @@
  
 		<bone
          name   = "mFaceChin"
-		 offset = "-0.025  0.00  0.005"
+		 offset = "-0.015  0.00  0.005"
          scale  = "0.0 0.0 0.0" />
 
 		<bone
 		 name="mFaceEyeLidLowerRight"
 		 scale="0 0 0"
-		 offset="0 -0.0026 0.00245" />
+		 offset="0 -0.0033 0.0025" />
 
 		 <bone
 		  name="mFaceEyeLidUpperRight"
 		  scale="0 0 0"
-		  offset="0 -0.0026 0.00245" />
-
-		 <bone
-		  name="mFaceEyeLidLowerLeft"
-		  scale="0 0 0"
-		  offset="0 0.0026 0.00245" />
-
-		 <bone
-		  name="mFaceEyeLidUpperLeft"
-		  scale="0 0 0"
-		  offset="0 0.0026 0.00245" />
+		  offset="0 -0.0033 0.002" />
 
 		 <bone
 		  name="mFaceEyecornerInnerRight"
@@ -4279,30 +3959,17 @@
 		  scale="0 0 0"
 		  offset="0 -0.00225 0.001" />
 
-		 <bone
-		  name="mFaceLipUpperRight"
-		  scale="0 0 0"
-		  offset="0 -0.0017 0.007" />
-
-		 <bone
-		  name="mFaceLipUpperCenter"
-		  scale="0 0 0"
-		  offset="0 0 0.007" />
 
-		 <bone
-		  name="mFaceTeethUpper"
-		  scale="0 0 0"
-		  offset="0 0 0.007" />
 
 		 <bone
-		  name="mFaceLipLowerRight"
+		  name="mFaceEyeLidLowerLeft"
 		  scale="0 0 0"
-		  offset="0 0.0 0.0055" />
+		  offset="0 0.0033 0.0025" />
 
 		 <bone
-		  name="mFaceLipCornerRight"
+		  name="mFaceEyeLidUpperLeft"
 		  scale="0 0 0"
-		  offset="0 -0.00225 0.0075" />		  
+		  offset="0 0.0033 0.002" />
 
 		 <bone
 		  name="mFaceEyecornerInnerLeft"
@@ -4322,47 +3989,45 @@
 		 <bone
 		  name="mFaceEyebrowInnerLeft"
 		  scale="0 0 0"
-		  offset="0 0.00225 0.001" />
-
+		  offset="0 0.00225 0.008" />
+		  
 		 <bone
-		  name="mFaceLipUpperLeft"
+		  name="mFaceLipLowerRight"
 		  scale="0 0 0"
-		  offset="0 0.0014 0.007" />
-
+		  offset="0 0 0" />
 		 <bone
 		  name="mFaceLipLowerCenter"
 		  scale="0 0 0"
-		  offset="0 0 0.0055" />
-
+		  offset="0 0 0" />
 		 <bone
-		  name="mFaceTeethLower"
+		  name="mFaceLipLowerLeft"
 		  scale="0 0 0"
-		  offset="0 0 0.006" />
+		  offset="0 0 0" />
 
 		 <bone
-		  name="mFaceLipLowerLeft"
+		  name="mFaceTeethUpper"
 		  scale="0 0 0"
-		  offset="0 0.0 0.0055" />
-
+		  offset="0 0 0.0075" />
+		  
 		 <bone
-		  name="mFaceLipCornerLeft"
+		  name="mFaceTeethLower"
 		  scale="0 0 0"
-		  offset="0 0.00225 0.0075" />
+		  offset="0 0 0.0061" />
 
 		 <bone
 		  name="mFaceTongueBase"
 		  scale="0 0 0"
-		  offset="0 0 0.006" />
+		  offset="0 0 -0.00" />
 
 		 <bone
 		  name="mFaceCheekLowerRight"
 		  scale="0 0 0"
-		  offset="0 -0.001 0.007" />
+		  offset="0 0 0.0085" />
 
 		 <bone
 		  name="mFaceCheekLowerLeft"
 		  scale="0 0 0"
-		  offset="0 0.001 0.007" />
+		  offset="0 0 0.0085" />
 
 		 <bone
 		  name="mFaceCheekUpperRight"
@@ -4393,10 +4058,11 @@
 		  name="mFaceNoseBase"
 		  scale="0 0 0"
 		  offset="0 0 0.006" />
-		 <bone
-		  name="mFaceNoseBridge"
-		  scale="0 0 0"
-		  offset="0 0 0.0036" />
+		  
+		  <bone
+		  name="mFaceJawShaper"
+		  scale="0 0.2 0"
+		  offset="0 0 0" />
 
       </param_skeleton>
     </param>
@@ -4436,6 +4102,179 @@
       </param_skeleton>
     </param>
 
+    <!-- Eye Brow sliders -->
+
+    <param
+     id="30119"
+     group="0"
+     name="Eyebrow Size"
+     value_min="0"
+     value_max="1"
+     value_default="0.5">
+	
+      <param_skeleton>
+	  
+        <bone
+         name="mFaceEyebrowOuterRight"
+         scale="0 0 0.5"
+         offset="0.0 0.0 0.0" />
+		 	  
+        <bone
+         name="mFaceEyebrowCenterRight"
+         scale="0 0 0.5"
+         offset="0 0 0" />
+		 	  
+        <bone
+         name="mFaceEyebrowInnerRight"
+         scale="0 0 0.5"
+         offset="0 0 0" />
+		 	  
+        <bone
+         name="mFaceEyebrowOuterLeft"
+         scale="0 0 0.5"
+         offset="0 0 0" />
+		 	  
+        <bone
+         name="mFaceEyebrowCenterLeft"
+         scale="0 0 0.5"
+         offset="0 0 0" />
+		 	  
+        <bone
+         name="mFaceEyebrowInnerLeft"
+         scale="0 0 0.5"
+         offset="0 0 0" />
+		 
+      </param_skeleton>
+    </param>
+
+    <param
+     id="30031"
+     group="0"
+     name="Arced_Eyebrows"
+     value_min="0"
+     value_max="2"
+     value_default=".5">
+	 
+      <param_skeleton>
+	  
+        <bone
+         name="mFaceEyebrowOuterRight"
+         scale="0 0 0 "
+         offset="0.0 0.0 0.0" />
+		 	  
+        <bone
+         name="mFaceEyebrowCenterRight"
+         scale="0 0 0 "
+         offset="0.0 0.0 0.005" />
+		 	  
+        <bone
+         name="mFaceEyebrowInnerRight"
+         scale="0 0 0 "
+         offset="0.0 0.0 0.001" />
+		 	  
+        <bone
+         name="mFaceEyebrowOuterLeft"
+         scale="0 0 0 "
+         offset="0.0 0.0 0.0" />
+		 	  
+        <bone
+         name="mFaceEyebrowCenterLeft"
+         scale="0 0 0 "
+         offset="0.0 0.0 0.005" />
+		 	  
+        <bone
+         name="mFaceEyebrowInnerLeft"
+         scale="0 0 0 "
+         offset="0.0 0.0 0.001" />
+		 
+      </param_skeleton>
+    </param>
+
+    <param
+     id="30757"
+     group="0"
+     name="Lower_Eyebrows"
+     value_min="-4"
+     value_max="2"
+     value_default="-1">
+	 
+      <param_skeleton>
+	  
+        <bone
+         name="mFaceEyebrowOuterRight"
+         scale="0 0 0 "
+         offset="0.0 0.0 -0.001" />
+		 	  
+        <bone
+         name="mFaceEyebrowCenterRight"
+         scale="0 0 0 "
+         offset="0.0 0.0 -0.002" />
+		 	  
+        <bone
+         name="mFaceEyebrowInnerRight"
+         scale="0 0 0 "
+         offset="0.0 0.0 -0.001" />
+		 	  
+        <bone
+         name="mFaceEyebrowOuterLeft"
+         scale="0 0 0 "
+         offset="0.0 0.0 -0.001" />
+		 	  
+        <bone
+         name="mFaceEyebrowCenterLeft"
+         scale="0 0 0 "
+         offset="0.0 0.0 -0.002" />
+		 	  
+        <bone
+         name="mFaceEyebrowInnerLeft"
+         scale="0 0 0 "
+         offset="0.0 0.0 -0.001" />
+		 
+      </param_skeleton>
+    </param>
+	
+    <param
+     id="30016"
+     group="0"
+     name="Pointy_Eyebrows"
+     value_min="-.5"
+     value_max="3">
+
+      <param_skeleton>
+	  
+        <bone
+         name="mFaceEyebrowOuterRight"
+         scale="0 0 0 "
+         offset="0.0 0.0 0.0" />
+		 	  
+        <bone
+         name="mFaceEyebrowCenterRight"
+         scale="0 0 0 "
+         offset="0.0 -0.001 0.0035" />
+		 	  
+        <bone
+         name="mFaceEyebrowInnerRight"
+         scale="0 0 0 "
+         offset="0.0 0.0 -0.002" />
+		 	  
+        <bone
+         name="mFaceEyebrowOuterLeft"
+         scale="0 0 0 "
+         offset="0.0 0.0 0.0" />
+		 	  
+        <bone
+         name="mFaceEyebrowCenterLeft"
+         scale="0 0 0 "
+         offset="0.0 0.001 0.0035" />
+		 	  
+        <bone
+         name="mFaceEyebrowInnerLeft"
+         scale="0 0 0 "
+         offset="0.0 0.0 -0.002" />
+		 
+      </param_skeleton>
+    </param>
+	
   </skeleton>
 
   <mesh
@@ -14734,6 +14573,7 @@ render_pass="bump">
 
         <driven
          id="772" />
+		 
       </param_driver>
     </param>
 
@@ -15254,6 +15094,10 @@ render_pass="bump">
 
         <driven
          id="1001" />
+		 
+		<driven
+		 id="30119" />
+
       </param_driver>
     </param>
 
@@ -15718,6 +15562,8 @@ render_pass="bump">
       <param_driver>
         <driven
          id="870" />
+		<driven
+		 id="30016"/>
       </param_driver>
     </param>
 
@@ -15741,6 +15587,8 @@ render_pass="bump">
       <param_driver>
         <driven
          id="871" />
+		<driven
+		 id="30757"/>
       </param_driver>
     </param>
 
@@ -15763,6 +15611,8 @@ render_pass="bump">
       <param_driver>
         <driven
          id="872" />
+		<driven
+		 id="30031"/>
       </param_driver>
     </param>
       
diff --git a/indra/newview/character/avatar_skeleton.xml b/indra/newview/character/avatar_skeleton.xml
index 025d12dd2e..2c63b8092d 100644
--- a/indra/newview/character/avatar_skeleton.xml
+++ b/indra/newview/character/avatar_skeleton.xml
@@ -1,4 +1,4 @@
-<linden_skeleton num_bones="132" num_collision_volumes="26" version="2.0">
+<linden_skeleton num_bones="133" num_collision_volumes="26" version="2.0">
    <bone aliases="hip avatar_mPelvis" connected="false" end="0.000 0.000 0.084" group="Torso" name="mPelvis" pivot="0.000000 0.000000 1.067015" pos="0.000 0.000 1.067" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
       <collision_volume end="0.030 0.000 0.095" group="Collision" name="PELVIS" pos="-0.01 0 -0.02" rot="0.000000 8.00000 0.000000" scale="0.12 0.16 0.17" support="base"/>
       <collision_volume end="-0.100 0.000 0.000" group="Collision" name="BUTT" pos="-0.06 0 -0.1" rot="0.000000 0.00000 0.000000" scale="0.1 0.1 0.1" support="base"/>
@@ -20,9 +20,9 @@
                            <collision_volume end="0.000 0.000 0.080" group="Collision" name="NECK" pos="0.0 0 0.02" rot="0.000000 0.000000 0.000000" scale="0.05 0.06 0.08" support="base"/>
                            <bone aliases="head avatar_mHead" connected="true" end="0.000 0.000 0.079" group="Torso" name="mHead" pivot="0.000000 -0.000000 0.075630" pos="0.000 -0.000 0.076" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
                               <collision_volume end="0.000 0.000 0.100" group="Collision" name="HEAD" pos="0.02 0 0.07" rot="0.000000 0.000000 0.000000" scale="0.11 0.09 0.12" support="base"/>
-                              <bone aliases="figureHair avatar_mSkull" connected="true" end="0.000 0.000 0.033" group="Extra" name="mSkull" pivot="0.000000 0.000000 0.079000" pos="0.000 0.000 0.079" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
-                              <bone aliases="avatar_mEyeRight" connected="false" end="0.022 0.000 0.000" group="Extra" name="mEyeRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" support="base"/>
-                              <bone aliases="avatar_mEyeLeft" connected="false" end="0.022 0.000 0.000" group="Extra" name="mEyeLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
+                              <bone aliases="figureHair avatar_mSkull" connected="false" end="0.000 0.000 0.033" group="Extra" name="mSkull" pivot="0.000000 0.000000 0.079000" pos="0.000 0.000 0.079" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
+                              <bone aliases="avatar_mEyeRight" connected="false" end="0.100 0.000 0.000" group="Extra" name="mEyeRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" support="base"/>
+                              <bone aliases="avatar_mEyeLeft" connected="false" end="0.100 0.000 0.000" group="Extra" name="mEyeLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
                               <bone connected="false" end="0.022 0.000 0.000" group="Face" name="mFaceEyeAltRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
                               <bone connected="false" end="0.022 0.000 0.000" group="Face" name="mFaceEyeAltLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
                               <bone connected="false" end="0.020 0.000 0.000" group="Face" name="mFaceRoot" pivot="0.025 0.000 0.045" pos="0.025 0.000 0.045" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
@@ -48,27 +48,30 @@
                                  <bone connected="false" end="0.025 0.000 0.000" group="Face" name="mFaceNoseCenter" pivot="0.102 0.000 0.000" pos="0.102 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.015 -0.004 0.000" group="Face" name="mFaceNoseRight" pivot="0.086 -0.015 -0.004" pos="0.086 -0.015 -0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.013 0.030 0.000" group="Face" name="mFaceCheekLowerLeft" pivot="0.050 0.034 -0.031" pos="0.050 0.034 -0.031" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.022 0.015 0.001" group="Face" name="mFaceCheekUpperLeft" pivot="0.070 0.034 -0.005" pos="0.070 0.034 -0.005" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                 <bone connected="false" end="0.022 0.015 0.000" group="Face" name="mFaceCheekUpperLeft" pivot="0.070 0.034 -0.005" pos="0.070 0.034 -0.005" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.013 -0.030 0.000" group="Face" name="mFaceCheekLowerRight" pivot="0.050 -0.034 -0.031" pos="0.050 -0.034 -0.031" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.022 -0.015 0.001" group="Face" name="mFaceCheekUpperRight" pivot="0.070 -0.034 -0.005" pos="0.070 -0.034 -0.005" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.048 0.003 0.000" group="Lips" name="mFaceLipUpperLeft" pivot="0.058 0.012 -0.033" pos="0.058 0.012 -0.033" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.048 -0.003 0.000" group="Lips" name="mFaceLipUpperRight" pivot="0.058 -0.012 -0.033" pos="0.058 -0.012 -0.033" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.045 0.008 0.000" group="Lips" name="mFaceLipCornerLeft" pivot="0.048 0.024 -0.040" pos="0.048 0.024 -0.040" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.045 -0.008 0.000" group="Lips" name="mFaceLipCornerRight" pivot="0.048 -0.024 -0.040" pos="0.048 -0.024 -0.040" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.060 0.000 -0.056" group="Mouth" name="mFaceJaw" pivot="0.000 0.000 0.000" pos="0.000 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-                                    <bone connected="true" end="0.021 0.000 0.009" group="Mouth" name="mFaceTongueBase" pivot="0.060 0.000 -0.056" pos="0.060 0.000 -0.056" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-                                       <bone connected="true" end="0.010 0.000 0.000" group="Mouth" name="mFaceTongueTip" pivot="0.021 0.000 0.009" pos="0.021 0.000 0.009" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                 <bone connected="false" end="0.022 -0.015 0.000" group="Face" name="mFaceCheekUpperRight" pivot="0.070 -0.034 -0.005" pos="0.070 -0.034 -0.005" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                 <bone connected="false" end="0.059 0.000 -0.039" group="Mouth" name="mFaceJaw" pivot="-0.001 0.000 -0.015" pos="-0.001 0.000 -0.015" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                                    <bone connected="false" end="0.021 0.000 -0.018" group="Mouth" name="mFaceChin" pivot="0.074 0.000 -0.054" pos="0.074 0.000 -0.054" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.035 0.000 0.000" group="Mouth" name="mFaceTeethLower" pivot="0.021 0.000 -0.039" pos="0.021 0.000 -0.039" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                                       <bone connected="false" end="0.034 0.017 0.005" group="Lips" name="mFaceLipLowerLeft" pivot="0.045 0.000 0.000" pos="0.045 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                       <bone connected="false" end="0.034 -0.017 0.005" group="Lips" name="mFaceLipLowerRight" pivot="0.045 0.000 0.000" pos="0.045 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                       <bone connected="false" end="0.040 0.000 0.002" group="Lips" name="mFaceLipLowerCenter" pivot="0.045 0.000 0.000" pos="0.045 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                       <bone connected="false" end="0.022 0.000 0.007" group="Mouth" name="mFaceTongueBase" pivot="0.039 0.000 0.005" pos="0.039 0.000 0.005" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                                          <bone connected="true" end="0.010 0.000 0.000" group="Mouth" name="mFaceTongueTip" pivot="0.022 0.000 0.007" pos="0.022 0.000 0.007" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                       </bone>
                                     </bone>
-                                    <bone connected="false" end="0.047 0.003 0.000" group="Lips" name="mFaceLipLowerLeft" pivot="0.052 0.014 -0.049" pos="0.052 0.014 -0.049" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                    <bone connected="false" end="0.047 -0.003 0.000" group="Lips" name="mFaceLipLowerRight" pivot="0.052 -0.014 -0.049" pos="0.052 -0.014 -0.049" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                    <bone connected="false" end="0.048 0.000 0.000" group="Lips" name="mFaceLipLowerCenter" pivot="0.057 0.000 -0.054" pos="0.057 0.000 -0.054" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                    <bone connected="false" end="0.021 0.000 -0.018" group="Mouth" name="mFaceChin" pivot="0.073 0.000 -0.069" pos="0.073 0.000 -0.069" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                    <bone connected="false" end="0.061 0.000 -0.010" group="Mouth" name="mFaceTeethLower" pivot="0.020 0.000 -0.044" pos="0.020 0.000 -0.044" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  </bone>
+                                 <bone connected="false" end="-0.017 0.000 0.000" group="Face" name="mFaceJawShaper" pivot="0.000 0.000 0.000" pos="0.000 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.036 0.000 0.000" group="Face" name="mFaceForeheadCenter" pivot="0.069 0.000 0.065" pos="0.069 0.000 0.065" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.048 0.000 0.000" group="Lips" name="mFaceLipUpperCenter" pivot="0.060 0.000 -0.030" pos="0.060 0.000 -0.030" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.014 0.000 0.000" group="Nose" name="mFaceNoseBase" pivot="0.094 0.000 -0.016" pos="0.094 0.000 -0.016" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-                                 <bone connected="false" end="0.061 0.000 0.000" group="Mouth" name="mFaceTeethUpper" pivot="0.020 0.000 -0.030" pos="0.020 0.000 -0.030" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                 <bone connected="false" end="0.035 0.000 0.000" group="Mouth" name="mFaceTeethUpper" pivot="0.020 0.000 -0.030" pos="0.020 0.000 -0.030" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                                    <bone connected="false" end="0.041 0.015 0.000" group="Lips" name="mFaceLipUpperLeft" pivot="0.045 0.000 -0.003" pos="0.045 0.000 -0.003" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.041 -0.015 0.000" group="Lips" name="mFaceLipUpperRight" pivot="0.045 0.000 -0.003" pos="0.045 0.000 -0.003" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.045 0.051 0.000" group="Lips" name="mFaceLipCornerLeft" pivot="0.028 -0.019 -0.010" pos="0.028 -0.019 -0.010" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.045 -0.051 0.000" group="Lips" name="mFaceLipCornerRight" pivot="0.028 0.019 -0.010" pos="0.028 0.019 -0.010" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.043 0.000 0.002" group="Lips" name="mFaceLipUpperCenter" pivot="0.045 0.000 -0.003" pos="0.045 0.000 -0.003" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                 </bone>
                                  <bone connected="false" end="0.016 0.000 0.000" group="Face" name="mFaceEyecornerInnerLeft" pivot="0.075 0.017 0.032" pos="0.075 0.017 0.032" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.016 0.000 0.000" group="Face" name="mFaceEyecornerInnerRight" pivot="0.075 -0.017 0.032" pos="0.075 -0.017 0.032" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.015 0.000 0.008" group="Nose" name="mFaceNoseBridge" pivot="0.091 0.000 0.020" pos="0.091 0.000 0.020" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
@@ -103,9 +106,9 @@
                                           <bone connected="true" end="-0.013 0.016 -0.004" group="Hand" name="mHandPinky3Left" pivot="-0.015 0.018 -0.004" pos="-0.015 0.018 -0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                        </bone>
                                     </bone>
-                                    <bone connected="false" end="0.028 0.032 -0.001" group="Hand" name="mHandThumb1Left" pivot="0.031 0.026 0.004" pos="0.031 0.026 0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-                                       <bone connected="true" end="0.023 0.031 -0.001" group="Hand" name="mHandThumb2Left" pivot="0.028 0.032 -0.001" pos="0.028 0.032 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-                                          <bone connected="true" end="0.015 0.025 0.001" group="Hand" name="mHandThumb3Left" pivot="0.023 0.031 -0.001" pos="0.023 0.031 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.028 0.032 0.000" group="Hand" name="mHandThumb1Left" pivot="0.031 0.026 0.004" pos="0.031 0.026 0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                                       <bone connected="true" end="0.023 0.031 0.000" group="Hand" name="mHandThumb2Left" pivot="0.028 0.032 -0.001" pos="0.028 0.032 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                                          <bone connected="true" end="0.015 0.025 0.000" group="Hand" name="mHandThumb3Left" pivot="0.023 0.031 -0.001" pos="0.023 0.031 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                        </bone>
                                     </bone>
                                  </bone>
@@ -140,9 +143,9 @@
                                           <bone connected="true" end="-0.013 -0.016 -0.004" group="Hand" name="mHandPinky3Right" pivot="-0.015 -0.018 -0.004" pos="-0.015 -0.018 -0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                        </bone>
                                     </bone>
-                                    <bone connected="false" end="0.028 -0.032 -0.001" group="Hand" name="mHandThumb1Right" pivot="0.031 -0.026 0.004" pos="0.031 -0.026 0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-                                       <bone connected="true" end="0.023 -0.031 -0.001" group="Hand" name="mHandThumb2Right" pivot="0.028 -0.032 -0.001" pos="0.028 -0.032 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-                                          <bone connected="true" end="0.015 -0.025 0.001" group="Hand" name="mHandThumb3Right" pivot="0.023 -0.031 -0.001" pos="0.023 -0.031 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+                                    <bone connected="false" end="0.028 -0.032 0.000" group="Hand" name="mHandThumb1Right" pivot="0.031 -0.026 0.004" pos="0.031 -0.026 0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                                       <bone connected="true" end="0.023 -0.031 0.000" group="Hand" name="mHandThumb2Right" pivot="0.028 -0.032 -0.001" pos="0.028 -0.032 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                                          <bone connected="true" end="0.015 -0.025 0.000" group="Hand" name="mHandThumb3Right" pivot="0.023 -0.031 -0.001" pos="0.023 -0.031 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                        </bone>
                                     </bone>
                                  </bone>
@@ -210,20 +213,20 @@
       </bone>
       <bone connected="false" end="0.004 0.000 -0.066" group="Groin" name="mGroin" pivot="0.064 0.000 -0.097" pos="0.064 0.000 -0.097" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
       <bone connected="false" end="-0.204 0.000 0.000" group="Limb" name="mHindLimbsRoot" pivot="-0.200 0.000 0.084" pos="-0.200 0.000 0.084" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-        <bone connected="false" end="0.002 -0.046 -0.491" group="Limb" name="mHindLimb1Left" pivot="-0.204 0.129 -0.125" pos="-0.204 0.129 -0.125" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-          <bone connected="true" end="-0.030 -0.003 -0.468" group="Limb" name="mHindLimb2Left" pivot="0.002 -0.046 -0.491" pos="0.002 -0.046 -0.491" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-            <bone connected="true" end="0.112 0.000 -0.061" group="Limb" name="mHindLimb3Left" pivot="-0.030 -0.003 -0.468" pos="-0.030 -0.003 -0.468" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-              <bone connected="true" end="0.105 0.008 0.001" group="Limb" name="mHindLimb4Left" pivot="0.112 0.000 -0.061" pos="0.112 0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+         <bone connected="false" end="0.002 -0.046 -0.491" group="Limb" name="mHindLimb1Left" pivot="-0.204 0.129 -0.125" pos="-0.204 0.129 -0.125" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+            <bone connected="true" end="-0.030 -0.003 -0.468" group="Limb" name="mHindLimb2Left" pivot="0.002 -0.046 -0.491" pos="0.002 -0.046 -0.491" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+               <bone connected="true" end="0.112 0.000 -0.061" group="Limb" name="mHindLimb3Left" pivot="-0.030 -0.003 -0.468" pos="-0.030 -0.003 -0.468" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                  <bone connected="true" end="0.105 0.008 0.000" group="Limb" name="mHindLimb4Left" pivot="0.112 0.000 -0.061" pos="0.112 0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+               </bone>
             </bone>
-          </bone>
-        </bone>
-        <bone connected="false" end="0.002 0.046 -0.491" group="Limb" name="mHindLimb1Right" pivot="-0.204 -0.129 -0.125" pos="-0.204 -0.129 -0.125" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-          <bone connected="true" end="-0.030 0.003 -0.468" group="Limb" name="mHindLimb2Right" pivot="0.002 0.046 -0.491" pos="0.002 0.046 -0.491" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-            <bone connected="true" end="0.112 0.000 -0.061" group="Limb" name="mHindLimb3Right" pivot="-0.030 0.003 -0.468" pos="-0.030 0.003 -0.468" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
-              <bone connected="true" end="0.105 -0.008 0.001" group="Limb" name="mHindLimb4Right" pivot="0.112 0.000 -0.061" pos="0.112 0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended" />
+         </bone>
+         <bone connected="false" end="0.002 0.046 -0.491" group="Limb" name="mHindLimb1Right" pivot="-0.204 -0.129 -0.125" pos="-0.204 -0.129 -0.125" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+            <bone connected="true" end="-0.030 0.003 -0.468" group="Limb" name="mHindLimb2Right" pivot="0.002 0.046 -0.491" pos="0.002 0.046 -0.491" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+               <bone connected="true" end="0.112 0.000 -0.061" group="Limb" name="mHindLimb3Right" pivot="-0.030 0.003 -0.468" pos="-0.030 0.003 -0.468" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                  <bone connected="true" end="0.105 -0.008 0.000" group="Limb" name="mHindLimb4Right" pivot="0.112 0.000 -0.061" pos="0.112 0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+               </bone>
             </bone>
-          </bone>
-        </bone>
+         </bone>
       </bone>
-    </bone>
+   </bone>
 </linden_skeleton>
-- 
cgit v1.2.3


From 8d542a46c7b1c5eb1817076348c0793fa6d3f617 Mon Sep 17 00:00:00 2001
From: AndreyL ProductEngine <alihatskiy@productengine.com>
Date: Fri, 8 Jul 2016 18:50:19 +0300
Subject: MAINT-6534 Fixed the LLSD validation failure

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index ce2d652c37..aaf41b68b4 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3710,7 +3710,7 @@
         <key>Type</key>
         <string>F32</string>
         <key>Value</key>
-        <integer>40.0</integer>
+        <real>40.0</real>
     </map>
     <key>FindLandArea</key>
     <map>
-- 
cgit v1.2.3


From 1c7548d3bfaa6f2351d8102e53b2dd90a5d864e7 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Fri, 8 Jul 2016 15:07:52 +0300
Subject: MAINT-6448 PERMISSION_DEBIT notification should default to Deny

---
 indra/newview/lltoast.cpp | 15 +++++++++++++++
 indra/newview/lltoast.h   |  2 ++
 2 files changed, 17 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 7020ac0c65..edde7c8076 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -202,6 +202,21 @@ void LLToast::hide()
 	}
 }
 
+/*virtual*/
+void LLToast::setFocus(BOOL b)
+{
+    if (b && !hasFocus() && mPanel)
+    {
+        LLModalDialog::setFocus(TRUE);
+        // mostly for buttons
+        mPanel->setFocus(TRUE);
+    }
+    else
+    {
+        LLModalDialog::setFocus(b);
+    }
+}
+
 void LLToast::onFocusLost()
 {
 	if(mWrapperPanel && !isBackgroundVisible())
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index f02d7c2a1a..cd92189012 100644
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -150,6 +150,8 @@ public:
 	//
 	virtual void hide();
 
+	/*virtual*/ void setFocus(BOOL b);
+
 	/*virtual*/ void onFocusLost();
 
 	/*virtual*/ void onFocusReceived();
-- 
cgit v1.2.3


From 888ed6d620619d3ce6dddcc8e453c3f1e6713e99 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 8 Jul 2016 14:51:30 -0400
Subject: SL-242 - additional fixes for egghead slider

---
 indra/newview/character/avatar_lad.xml | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index ddf497f05b..6aef67f1b7 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -3926,7 +3926,7 @@
  
 		<bone
          name   = "mFaceChin"
-		 offset = "-0.015  0.00  0.005"
+		 offset = "0.015  0.00  0.005"
          scale  = "0.0 0.0 0.0" />
 
 		<bone
@@ -3989,7 +3989,7 @@
 		 <bone
 		  name="mFaceEyebrowInnerLeft"
 		  scale="0 0 0"
-		  offset="0 0.00225 0.008" />
+		  offset="0 0.00225 0.001" />
 		  
 		 <bone
 		  name="mFaceLipLowerRight"
@@ -14314,6 +14314,10 @@ render_pass="bump">
          id="186" />
 		
 		<driven
+		 min1="-1.3"
+		 max1="-1.3"
+		 max2="-1.3"
+		 min2="1"
 		 id="30646" />
 
       </param_driver>
-- 
cgit v1.2.3


From 9d8986337aca6c7909a4c5ad836874d78b4625e5 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 8 Jul 2016 15:36:50 -0400
Subject: SL-242 - fix for slider param groups, added default args for
 skel_tool.py

---
 indra/newview/character/avatar_lad.xml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 6aef67f1b7..76a603db06 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -3897,7 +3897,7 @@
 	
     <param
      id="30646"
-     group="0"
+     group="1"
      name="Egg_Head"
      value_min="-1.3"
      value_max="1"
@@ -4106,7 +4106,7 @@
 
     <param
      id="30119"
-     group="0"
+     group="1"
      name="Eyebrow Size"
      value_min="0"
      value_max="1"
@@ -4149,7 +4149,7 @@
 
     <param
      id="30031"
-     group="0"
+     group="1"
      name="Arced_Eyebrows"
      value_min="0"
      value_max="2"
@@ -4192,7 +4192,7 @@
 
     <param
      id="30757"
-     group="0"
+     group="1"
      name="Lower_Eyebrows"
      value_min="-4"
      value_max="2"
@@ -4235,7 +4235,7 @@
 	
     <param
      id="30016"
-     group="0"
+     group="1"
      name="Pointy_Eyebrows"
      value_min="-.5"
      value_max="3">
-- 
cgit v1.2.3


From a3f63bce3c5f45e2275980363bbb598cd6861bc8 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Mon, 11 Jul 2016 16:23:18 +0300
Subject: MAINT-6534 Resetting scripts via the build menu no longer works on
 many scripted objects

---
 indra/newview/app_settings/settings.xml            |  2 +-
 indra/newview/llcompilequeue.cpp                   | 60 ++++++++++++++++------
 indra/newview/llcompilequeue.h                     | 13 +++--
 indra/newview/llviewermenu.cpp                     | 13 +++--
 .../skins/default/xui/en/floater_script_queue.xml  |  8 +++
 5 files changed, 71 insertions(+), 25 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index aaf41b68b4..6ccf89eabe 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3710,7 +3710,7 @@
         <key>Type</key>
         <string>F32</string>
         <key>Value</key>
-        <real>40.0</real>
+        <real>300.0</real>
     </map>
     <key>FindLandArea</key>
     <map>
diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index de7bc1e3c5..7721e67290 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -207,9 +207,10 @@ void LLFloaterScriptQueue::onCloseBtn(void* user_data)
 	self->closeFloater();
 }
 
-void LLFloaterScriptQueue::addObject(const LLUUID& id)
+void LLFloaterScriptQueue::addObject(const LLUUID& id, std::string name)
 {
-	mObjectIDs.insert(id);
+    ObjectData obj = { id, name };
+    mObjectList.push_back(obj);
 }
 
 BOOL LLFloaterScriptQueue::start()
@@ -218,7 +219,7 @@ BOOL LLFloaterScriptQueue::start()
 
 	LLStringUtil::format_map_t args;
 	args["[START]"] = mStartString;
-	args["[COUNT]"] = llformat ("%d", mObjectIDs.size());
+	args["[COUNT]"] = llformat ("%d", mObjectList.size());
 	buffer = getString ("Starting", args);
 	
 	getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
@@ -241,7 +242,7 @@ void LLFloaterScriptQueue::addStringMessage(const std::string &message)
 
 BOOL LLFloaterScriptQueue::isDone() const
 {
-	return (mCurrentObjectID.isNull() && (mObjectIDs.size() == 0));
+	return (mCurrentObjectID.isNull() && (mObjectList.size() == 0));
 }
 
 ///----------------------------------------------------------------------------
@@ -339,7 +340,7 @@ void LLFloaterCompileQueue::processExperienceIdResults(LLSD result, LLUUID paren
     LLCoros::instance().launch("ScriptQueueCompile", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
         queue->mStartString,
         hFloater,
-        queue->mObjectIDs,
+        queue->mObjectList,
         fn));
 
 }
@@ -393,7 +394,9 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
 
         if (result.has("timeout") && result["timeout"].asBoolean())
         {
-            std::string buffer = "Timeout: " + inventory->getName();
+            LLStringUtil::format_map_t args;
+            args["[OBJECT_NAME]"] = inventory->getName();
+            std::string buffer = that->getString("Timeout", args);
             that->addStringMessage(buffer);
             return true;
         }
@@ -443,7 +446,9 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
     {
         if (result.has("timeout") && result["timeout"].asBoolean())
         {
-            std::string buffer = "Timeout: " + inventory->getName();
+            LLStringUtil::format_map_t args;
+            args["[OBJECT_NAME]"] = inventory->getName();
+            std::string buffer = that->getString("Timeout", args);
             that->addStringMessage(buffer);
             return true;
         }
@@ -497,7 +502,9 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
     {
         if (result.has("timeout") && result["timeout"].asBoolean())
         {
-            std::string buffer = "Timeout: " + inventory->getName();
+            LLStringUtil::format_map_t args;
+            args["[OBJECT_NAME]"] = inventory->getName();
+            std::string buffer = that->getString("Timeout", args);
             that->addStringMessage(buffer);
             return true;
         }
@@ -601,7 +608,7 @@ bool LLFloaterResetQueue::startQueue()
     LLCoros::instance().launch("ScriptResetQueue", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
         mStartString,
         getDerivedHandle<LLFloaterScriptQueue>(),
-        mObjectIDs,
+        mObjectList,
         fn));
 
     return true;
@@ -655,7 +662,7 @@ bool LLFloaterRunQueue::startQueue()
     LLCoros::instance().launch("ScriptRunQueue", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
         mStartString,
         hFloater,
-        mObjectIDs,
+        mObjectList,
         fn));
 
     return true;
@@ -710,7 +717,7 @@ bool LLFloaterNotRunQueue::startQueue()
     LLCoros::instance().launch("ScriptQueueNotRun", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
         mStartString,
         hFloater,
-        mObjectIDs,
+        mObjectList,
         fn));
 
     return true;
@@ -730,7 +737,7 @@ void ObjectInventoryFetcher::inventoryChanged(LLViewerObject* object,
 }
 
 void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, LLHandle<LLFloaterScriptQueue> hfloater,
-    uuid_list_t objectList, fnQueueAction_t func)
+    object_data_list_t objectList, fnQueueAction_t func)
 {
     LLCoros::set_consuming(true);
     LLFloaterScriptQueue * floater(NULL);
@@ -744,12 +751,13 @@ void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, L
 //         .with("[COUNT]", LLSD::Integer(objectList.size())));
 //     floater = NULL;
 
-    for (uuid_list_t::iterator itObj(objectList.begin()); (itObj != objectList.end()); ++itObj)
+    for (object_data_list_t::iterator itObj(objectList.begin()); (itObj != objectList.end()); ++itObj)
     {
         bool firstForObject = true;
-        LL_INFOS("SCRIPTQ") << "Next object in queue with ID=" << (*itObj).asString() << LL_ENDL;
+        LLUUID object_id = (*itObj).mObjectId;
+        LL_INFOS("SCRIPTQ") << "Next object in queue with ID=" << object_id.asString() << LL_ENDL;
 
-        LLPointer<LLViewerObject> obj = gObjectList.findObject(*itObj);
+        LLPointer<LLViewerObject> obj = gObjectList.findObject(object_id);
         LLInventoryObject::object_list_t inventory;
         if (obj)
         {
@@ -757,13 +765,31 @@ void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, L
 
             fetcher->fetchInventory();
 
+            floater = hfloater.get();
+            if (floater)
+            {
+                LLStringUtil::format_map_t args;
+                args["[OBJECT_NAME]"] = (*itObj).mObjectName;
+                floater->addStringMessage(floater->getString("LoadingObjInv", args));
+            }
+
             LLSD result = llcoro::suspendUntilEventOnWithTimeout(maildrop, fetch_timeout,
                 LLSD().with("timeout", LLSD::Boolean(true)));
 
             if (result.has("timeout") && result["timeout"].asBoolean())
             {
-                LL_WARNS("SCRIPTQ") << "Unable to retrieve inventory for object " << (*itObj).asString() <<
+                LL_WARNS("SCRIPTQ") << "Unable to retrieve inventory for object " << object_id.asString() <<
                     ". Skipping to next object." << LL_ENDL;
+
+                // floater could have been closed
+                floater = hfloater.get();
+                if (floater)
+                {
+                    LLStringUtil::format_map_t args;
+                    args["[OBJECT_NAME]"] = (*itObj).mObjectName;
+                    floater->addStringMessage(floater->getString("Timeout", args));
+                }
+
                 continue;
             }
 
@@ -771,7 +797,7 @@ void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, L
         }
         else
         {
-            LL_WARNS("SCRIPTQ") << "Unable to retrieve object with ID of " << (*itObj) <<
+            LL_WARNS("SCRIPTQ") << "Unable to retrieve object with ID of " << object_id <<
                 ". Skipping to next." << LL_ENDL;
             continue;
         }
diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h
index 271ac5e05d..1b3d8f83a0 100644
--- a/indra/newview/llcompilequeue.h
+++ b/indra/newview/llcompilequeue.h
@@ -61,7 +61,7 @@ public:
 	void setMono(bool mono) { mMono = mono; }
 	
 	// addObject() accepts an object id.
-	void addObject(const LLUUID& id);
+	void addObject(const LLUUID& id, std::string name);
 
 	// start() returns TRUE if the queue has started, otherwise FALSE.
 	BOOL start();
@@ -87,7 +87,14 @@ protected:
 	LLButton* mCloseBtn;
 
 	// Object Queue
-    uuid_list_t     mObjectIDs;
+	struct ObjectData
+	{
+		LLUUID mObjectId;
+		std::string mObjectName;
+	};
+	typedef std::vector<ObjectData> object_data_list_t;
+
+	object_data_list_t mObjectList;
 	LLUUID mCurrentObjectID;
 	bool mDone;
 
@@ -95,7 +102,7 @@ protected:
 	bool mMono;
 
     typedef boost::function<bool(const LLPointer<LLViewerObject> &, LLInventoryObject*, LLEventPump &)>   fnQueueAction_t;
-    static void objectScriptProcessingQueueCoro(std::string action, LLHandle<LLFloaterScriptQueue> hfloater, uuid_list_t objectList, fnQueueAction_t func);
+    static void objectScriptProcessingQueueCoro(std::string action, LLHandle<LLFloaterScriptQueue> hfloater, object_data_list_t objectList, fnQueueAction_t func);
 
 };
 
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 99a9ed1d75..f5b06fbd19 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -6986,20 +6986,25 @@ class LLAvatarCall : public view_listener_t
 
 namespace
 {
-	struct QueueObjects : public LLSelectedObjectFunctor
+	struct QueueObjects : public LLSelectedNodeFunctor
 	{
 		BOOL scripted;
 		BOOL modifiable;
 		LLFloaterScriptQueue* mQueue;
 		QueueObjects(LLFloaterScriptQueue* q) : mQueue(q), scripted(FALSE), modifiable(FALSE) {}
-		virtual bool apply(LLViewerObject* obj)
+		virtual bool apply(LLSelectNode* node)
 		{
+			LLViewerObject* obj = node->getObject();
+			if (!obj)
+			{
+				return true;
+			}
 			scripted = obj->flagScripted();
 			modifiable = obj->permModify();
 
 			if( scripted && modifiable )
 			{
-				mQueue->addObject(obj->getID());
+				mQueue->addObject(obj->getID(), node->mName);
 				return false;
 			}
 			else
@@ -7015,7 +7020,7 @@ void queue_actions(LLFloaterScriptQueue* q, const std::string& msg)
 	QueueObjects func(q);
 	LLSelectMgr *mgr = LLSelectMgr::getInstance();
 	LLObjectSelectionHandle selectHandle = mgr->getSelection();
-	bool fail = selectHandle->applyToObjects(&func);
+	bool fail = selectHandle->applyToNodes(&func);
 	if(fail)
 	{
 		if ( !func.scripted )
diff --git a/indra/newview/skins/default/xui/en/floater_script_queue.xml b/indra/newview/skins/default/xui/en/floater_script_queue.xml
index f4aca7bb3d..0982683a7f 100644
--- a/indra/newview/skins/default/xui/en/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_queue.xml
@@ -29,6 +29,14 @@
      name="NotRunning">
         Not running
     </floater.string>
+    <floater.string
+     name="Timeout">
+        Timeout: [OBJECT_NAME]
+    </floater.string>
+    <floater.string
+     name="LoadingObjInv">
+        Loading inventory for: [OBJECT_NAME]
+    </floater.string>
     <button
      follows="right|bottom"
      height="24"
-- 
cgit v1.2.3


From 2929922ef2094dc0f2c2659de1d459b50aafe866 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Mon, 11 Jul 2016 18:00:59 -0400
Subject: SL-242 - more tweaks around alt eyes and wings. Alt eyes are now
 parented to face root, and alt eyes animate along with the original eyes
 inside the LLHeadRotMotion code.

---
 indra/newview/character/avatar_lad.xml      | 450 ++++++++++++++++++----------
 indra/newview/character/avatar_skeleton.xml |  10 +-
 2 files changed, 303 insertions(+), 157 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 76a603db06..e9ce4725e5 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -807,6 +807,39 @@
         <bone
          name="mHindLimb2Right"
          scale="0 0 0.1" />
+		 
+        <bone
+         name="mWing1Left"
+         offset="0 0 0" /> 
+        <bone
+         name="mWing2Left"
+         offset="-0.015 0.015 0" /> 
+        <bone
+         name="mWing3Left"
+         offset="-0.025 0.025 0" /> 
+        <bone
+         name="mWing4Left"
+         offset="-0.03 0.03 0" /> 
+        <bone
+         name="mWing4FanLeft"
+         offset="-0.03 0.03 0" /> 
+		 
+        <bone
+         name="mWing1Right"
+         offset="0 0 0" /> 
+        <bone
+         name="mWing2Right"
+         offset="-0.015 -0.015 0" /> 
+        <bone
+         name="mWing3Right"
+         offset="-0.025 -0.025 0" /> 
+        <bone
+         name="mWing4Right"
+         offset="-0.03 -0.03 0" /> 
+        <bone
+         name="mWing4FanRight"
+         offset="-0.03 -0.03 0" /> 
+		 
       </param_skeleton>
     </param>
 
@@ -1163,56 +1196,57 @@
          name="mEyeRight"
          scale="0 0 0"
          offset="0 -.009 0" />
-		 
-	    <bone
+
+		 <bone
          name="mFaceEyeAltLeft"
          scale="0 0 0 "
-         offset="0 .009 0" />
+         offset="0 .0090 0" />
 
         <bone
          name="mFaceEyeAltRight"
          scale="0 0 0 "
-         offset="0 -.009 0" />
-		 
+         offset="0 -.0090 0" />
+ 
 	    <bone
          name="mFaceEyeLidLowerLeft"
          scale="0 0 0 "
-         offset="0 .00930 0" />
+         offset="0 .0090 0" />
 
         <bone
          name="mFaceEyeLidLowerRight"
          scale="0 0 0 "
-         offset="0 -.00930 0" />
+         offset="0 -.0090 0" />
+
 		 
 	    <bone
          name="mFaceEyeLidUpperLeft"
          scale="0 0 0 "
-         offset="0 .00930 0" />
+         offset="0 .0090 0" />
 
         <bone
          name="mFaceEyeLidUpperRight"
          scale="0 0 0 "
-         offset="0 -.00930 0" />
+         offset="0 -.0090 0" />
 		 
 	    <bone
          name="mFaceEyebrowInnerLeft"
          scale="0 0 0 "
-         offset="0 .00930 0" />
+         offset="0 .0090 0" />
 
         <bone
          name="mFaceEyebrowInnerRight"
          scale="0 0 0 "
-         offset="0 -.00930 0" />
+         offset="0 -.0090 0" />
 		 
 	    <bone
          name="mFaceEyebrowCenterLeft"
          scale="0 0 0 "
-         offset="0 .00930 0" />
+         offset="0 .0090 0" />
 
         <bone
          name="mFaceEyebrowCenterRight"
          scale="0 0 0 "
-         offset="0 -.00930 0" />
+         offset="0 -.0090 0" />
 		 
 	    <bone
          name="mFaceEyebrowOuterLeft"
@@ -1257,16 +1291,16 @@
          name="mEyeRight"
          scale="0 0 0"
          offset="0 0 -.004" />
-		 
-        <bone
+
+		 <bone
          name="mFaceEyeAltLeft"
          scale="0 0 0"
          offset="0 0 .004" />
 
-        <bone
+		 <bone
          name="mFaceEyeAltRight"
          scale="0 0 0"
-         offset="0 0 -.004" /> 
+         offset="0 0 -.004" />
 
 		<bone
          name="mFaceNoseRight"
@@ -1421,11 +1455,6 @@
      value_min="-1"
      value_max="1">
       <param_skeleton>
-		<bone
-         name="mFaceRoot"
-         scale="0.25 0 0"
-         offset="0 0 0" />
-		 
         <bone
          name="mEyeLeft"
          scale="0 0 0"
@@ -1436,131 +1465,6 @@
          scale="0 0 0"
          offset=".016 0 0" />
 
-        <bone
-         name="mFaceEyeAltLeft"
-         scale="0 0 0"
-         offset=".016 0 0" />
-
-        <bone
-         name="mFaceEyeAltRight"
-         scale="0 0 0"
-         offset=".016 0 0" />
-		 
-		 <bone
-         name="mFaceEyeLidUpperLeft"
-         scale="0 0 0"
-         offset="-0.0038 0 0" />
-
-		 <bone
-         name="mFaceEyeLidUpperRight"
-         scale="0 0 0"
-         offset="-0.0038 0 0" />
-		 
-		 <bone
-         name="mFaceEyeLidLowerLeft"
-         scale="0 0 0"
-         offset="-0.0038 0 0" />
-
-		 <bone
-         name="mFaceEyeLidLowerRight"
-         scale="0 0 0"
-         offset="-0.0038 0 0" />
-
-		<bone
-         name="mFaceNoseCenter"
-         scale="0 0 0"
-         offset=".01 0 0" />
-
-		<bone
-         name="mFaceNoseRight"
-         scale="0 0 0"
-         offset=".005 0 0" />
-
-		<bone
-         name="mFaceNoseLeft"
-         scale="0 0 0"
-         offset=".005 0 0" />
-
-		<bone
-         name="mFaceNoseBase"
-         scale="0 0 0"
-         offset=".005 0 0" />
-
-		<bone
-         name="mFaceLipUpperLeft"
-         scale="0 0 0"
-         offset="0.005 0 0" />
-
-		<bone
-         name="mFaceLipUpperCenter"
-         scale="0 0 0"
-         offset="0.005 0 0" />
-
-		<bone
-         name="mFaceLipUpperRight"
-         scale="0 0 0"
-         offset="0.005 0 0" />
-		 
-		<bone
-         name="mFaceLipCornerRight"
-         scale="0 0 0"
-         offset="0.005 0 0" />
-
-		<bone
-         name="mFaceLipCornerLeft"
-         scale="0 0 0"
-         offset="0.005 0 0" />
-
-		<bone
-         name="mFaceLipLowerLeft"
-         scale="0 0 0"
-         offset="0.01 0 0" />
-
-		<bone
-         name="mFaceLipLowerCenter"
-         scale="0 0 0"
-         offset="0.01 0 0" />
-
-		<bone
-         name="mFaceLipLowerRight"
-         scale="0 0 0"
-         offset="0.01 0 0" />
-		 
-		 
-		<bone
-         name="mFaceCheekLowerLeft"
-         scale="0 0 0"
-         offset="0.007 0 0" />
-		 
-		<bone
-         name="mFaceCheekLowerRight"
-         scale="0 0 0"
-         offset="0.007 0 0" />
-
-		 <bone
-         name="mFaceChin"
-         scale="0 0 0"
-         offset="0.014 0 0" />
-
- 	    <bone
-         name="mFaceTeethUpper"
-         scale="0.28 0 0"
-         offset="0 0 0" />
- 	    <bone
-         name="mFaceTeethLower"
-         scale="0.28 0 0"
-         offset="0 0 0" />
-		 
-		 <bone
-         name="mFaceTongueBase"
-         scale="0.3 0 0"
-         offset="0 0 0" />
-
-		 <bone
-         name="mFaceTongueTip"
-         scale="0 0 0"
-         offset="0.004 0 0" />
-
       </param_skeleton>
     </param>
 	
@@ -1584,6 +1488,7 @@
          name="mEyeRight"
          scale="0 0 0"
          offset=".005 0 0" />
+		 
         <bone
          name="mFaceEyeAltLeft"
          scale="0 0 0"
@@ -1593,7 +1498,7 @@
          name="mFaceEyeAltRight"
          scale="0 0 0"
          offset=".005 0 0" />
-
+		 
 	    <bone
          name="mFaceEyeLidLowerLeft"
          scale="0 0 0 "
@@ -1727,17 +1632,17 @@
          name="mEyeRight"
          scale="1 1 1"
          offset="0 0 0" />
- 
+		 
         <bone
          name="mFaceEyeAltLeft"
          scale="1 1 1"
-         offset="0 0 0" />
+         offset="0 0 -0.001" />
 
         <bone
          name="mFaceEyeAltRight"
          scale="1 1 1"
-         offset="0 0 0" />
- 
+         offset="0 0 -0.001" />
+		 
         <bone
          name="mFaceForeheadLeft"
          scale="1 1 1"
@@ -2087,6 +1992,16 @@
          offset=" 0 0 0" />
 		 
         <bone
+         name="mFaceEyeAltLeft"
+         scale="0 0 0"
+         offset="0 0 0" />
+
+        <bone
+         name="mFaceEyeAltRight"
+         scale="0 0 0"
+         offset="0 0 0" />
+
+		 <bone
          name="mFaceEyeLidUpperRight"
          scale="0 0.3 0.7"
          offset=" 0 0 0" />
@@ -3173,6 +3088,16 @@
          name="mFaceEyeLidUpperLeft"
          scale="0 0.1 0.2"
          offset=" 0 0 0" />
+		 
+        <bone
+         name="mFaceEyeAltLeft"
+         scale="0 0 0"
+         offset="0 0 0" />
+
+        <bone
+         name="mFaceEyeAltRight"
+         scale="0 0 0"
+         offset="0 0 0" />
 
        </param_skeleton>
     </param>
@@ -3351,6 +3276,16 @@
          name="mFaceEyebrowInnerLeft"
          scale="0 0 0"
          offset="0 0.00225 -0.0048" />
+		 
+		 <bone
+         name="mFaceEyeAltRight"
+         scale="0 0 0"
+         offset="0 -0.0042 -0.0035" />		 
+
+		 <bone
+         name="mFaceEyeAltLeft"
+         scale="0 0 0"
+         offset="0 0.0042 -0.0035" />		 
 
 		 <bone
          name="mFaceEyeLidUpperRight"
@@ -3754,6 +3689,16 @@
 		 <bone
          name="mFaceEyeLidUpperRight"
          scale="0 0 0"
+         offset="0 0 -.006" />
+
+		 <bone
+         name="mFaceEyeAltLeft"
+         scale="0 0 0"
+         offset="0 0 -.006" />
+
+		 <bone
+         name="mFaceEyeAltRight"
+         scale="0 0 0"
          offset="0 0 -.006" />
 
        </param_skeleton>
@@ -3929,6 +3874,16 @@
 		 offset = "0.015  0.00  0.005"
          scale  = "0.0 0.0 0.0" />
 
+		 <bone
+		  name="mFaceEyeAltRight"
+		  scale="0 0 0"
+		  offset="0 -0.0033 0.0025" />
+
+		 <bone
+		  name="mFaceEyeAltLeft"
+		  scale="0 0 0"
+		  offset="0 0.0033 0.0025" />
+		 
 		<bone
 		 name="mFaceEyeLidLowerRight"
 		 scale="0 0 0"
@@ -4098,9 +4053,183 @@
          name="mFaceEyeAltRight"
          scale="0.3195 0.3280 0.3280"
          offset="-0.005 0 0" />
+
+      </param_skeleton>
+    </param>
+
+    <param
+     id="30772"
+     group="1"
+     name="EyeBone_Head_Elongate"
+     value_min="-1"
+     value_max="1">
+      <param_skeleton>
+	  
+		<bone
+         name="mFaceRoot"
+         scale="0.25 0 0"
+         offset="0 0 0" />
+
+		<bone
+         name="mFaceEyeLidUpperLeft"
+         scale="0 0 0"
+         offset="-0.0038 0 0" />
+
+		 <bone
+         name="mFaceEyeLidUpperRight"
+         scale="0 0 0"
+         offset="-0.0038 0 0" />
 		 
+		 <bone
+         name="mFaceEyeLidLowerLeft"
+         scale="0 0 0"
+         offset="-0.0038 0 0" />
+
+		 <bone
+         name="mFaceEyeLidLowerRight"
+         scale="0 0 0"
+         offset="-0.0038 0 0" />
+
+		<bone
+         name="mFaceNoseCenter"
+         scale="0 0 0"
+         offset=".01 0 0" />
+
+		<bone
+         name="mFaceNoseRight"
+         scale="0 0 0"
+         offset=".005 0 0" />
+
+		<bone
+         name="mFaceNoseLeft"
+         scale="0 0 0"
+         offset=".005 0 0" />
+
+		<bone
+         name="mFaceNoseBase"
+         scale="0 0 0"
+         offset=".005 0 0" />
+
+		<bone
+         name="mFaceLipUpperLeft"
+         scale="0 0 0"
+         offset="0.005 0 0" />
+
+		<bone
+         name="mFaceLipUpperCenter"
+         scale="0 0 0"
+         offset="0.005 0 0" />
+
+		<bone
+         name="mFaceLipUpperRight"
+         scale="0 0 0"
+         offset="0.005 0 0" />
+		 
+		<bone
+         name="mFaceLipCornerRight"
+         scale="0 0 0"
+         offset="0.005 0 0" />
+
+		<bone
+         name="mFaceLipCornerLeft"
+         scale="0 0 0"
+         offset="0.005 0 0" />
+
+		<bone
+         name="mFaceLipLowerLeft"
+         scale="0 0 0"
+         offset="0.01 0 0" />
+
+		<bone
+         name="mFaceLipLowerCenter"
+         scale="0 0 0"
+         offset="0.01 0 0" />
+
+		<bone
+         name="mFaceLipLowerRight"
+         scale="0 0 0"
+         offset="0.01 0 0" />
+		 
+		 
+		<bone
+         name="mFaceCheekLowerLeft"
+         scale="0 0 0"
+         offset="0.007 0 0" />
+		 
+		<bone
+         name="mFaceCheekLowerRight"
+         scale="0 0 0"
+         offset="0.007 0 0" />
+
+		 <bone
+         name="mFaceChin"
+         scale="0 0 0"
+         offset="0.014 0 0" />
+
+ 	    <bone
+         name="mFaceTeethUpper"
+         scale="0.28 0 0"
+         offset="0 0 0" />
+ 	    <bone
+         name="mFaceTeethLower"
+         scale="0.28 0 0"
+         offset="0 0 0" />
+		 
+		 <bone
+         name="mFaceTongueBase"
+         scale="0.3 0 0"
+         offset="0 0 0" />
+
+		 <bone
+         name="mFaceTongueTip"
+         scale="0 0 0"
+         offset="0.004 0 0" />
+
       </param_skeleton>
     </param>
+	
+    <param
+     id="31772"
+     group="1"
+     name="EyeBone_Head_Elongate"
+     value_min="0"
+     value_max="1">
+      <param_skeleton>
+	  
+        <bone
+         name="mFaceEyeAltLeft"
+         scale="0 0 0"
+         offset="0.0058 0 0" />
+
+        <bone
+         name="mFaceEyeAltRight"
+         scale="0 0 0"
+         offset="0.0058 0 0" />
+
+      </param_skeleton>
+    </param>		 
+	
+    <param
+     id="32772"
+     group="1"
+     name="EyeBone_Head_Elongate"
+     value_min="0"
+     value_max="1">
+      <param_skeleton>
+	  
+        <bone
+         name="mFaceEyeAltLeft"
+         scale="0 0 0"
+         offset="-0.0032 0 0" />
+
+        <bone
+         name="mFaceEyeAltRight"
+         scale="0 0 0"
+         offset="-0.0032 0 0" />
+
+      </param_skeleton>
+    </param>		 
+	
 
     <!-- Eye Brow sliders -->
 
@@ -14577,6 +14706,23 @@ render_pass="bump">
 
         <driven
          id="772" />
+		
+		<driven
+		 id="30772" />
+		 
+		<driven
+		 min1="0"
+		 max1="0"
+		 max2="0"
+		 min2="0.45"
+		 id="31772" />
+		 
+		<driven
+		 min1="0.5"
+		 max1="1"
+		 max2="1"
+		 min2="1"
+		 id="32772" />
 		 
       </param_driver>
     </param>
diff --git a/indra/newview/character/avatar_skeleton.xml b/indra/newview/character/avatar_skeleton.xml
index 2c63b8092d..2241a12545 100644
--- a/indra/newview/character/avatar_skeleton.xml
+++ b/indra/newview/character/avatar_skeleton.xml
@@ -21,11 +21,11 @@
                            <bone aliases="head avatar_mHead" connected="true" end="0.000 0.000 0.079" group="Torso" name="mHead" pivot="0.000000 -0.000000 0.075630" pos="0.000 -0.000 0.076" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
                               <collision_volume end="0.000 0.000 0.100" group="Collision" name="HEAD" pos="0.02 0 0.07" rot="0.000000 0.000000 0.000000" scale="0.11 0.09 0.12" support="base"/>
                               <bone aliases="figureHair avatar_mSkull" connected="false" end="0.000 0.000 0.033" group="Extra" name="mSkull" pivot="0.000000 0.000000 0.079000" pos="0.000 0.000 0.079" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
-                              <bone aliases="avatar_mEyeRight" connected="false" end="0.100 0.000 0.000" group="Extra" name="mEyeRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" support="base"/>
-                              <bone aliases="avatar_mEyeLeft" connected="false" end="0.100 0.000 0.000" group="Extra" name="mEyeLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
-                              <bone connected="false" end="0.022 0.000 0.000" group="Face" name="mFaceEyeAltRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
-                              <bone connected="false" end="0.022 0.000 0.000" group="Face" name="mFaceEyeAltLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
-                              <bone connected="false" end="0.020 0.000 0.000" group="Face" name="mFaceRoot" pivot="0.025 0.000 0.045" pos="0.025 0.000 0.045" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+                              <bone aliases="avatar_mEyeRight" connected="false" end="0.025 0.000 0.000" group="Extra" name="mEyeRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" support="base"/>
+                              <bone aliases="avatar_mEyeLeft" connected="false" end="0.025 0.000 0.000" group="Extra" name="mEyeLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
+                              <bone connected="false" end="0.020 0.000 0.000" group="Face" name="mFaceRoot" pivot="0.025000 0.000000 0.045000" pos="0.025 0.000 0.045" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended">
+                                 <bone connected="false" end="0.025 0.000 0.000" group="Face" name="mFaceEyeAltRight" pivot="0.073466 -0.036000 0.0339300" pos="0.073 -0.036 0.034" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
+                                 <bone connected="false" end="0.025 0.000 0.000" group="Face" name="mFaceEyeAltLeft" pivot="0.073461 0.036000 0.0339300" pos="0.073 0.036 0.034" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.024 0.004 0.018" group="Face" name="mFaceForeheadLeft" pivot="0.061 0.035 0.083" pos="0.061 0.035 0.083" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.024 -0.004 0.018" group="Face" name="mFaceForeheadRight" pivot="0.061 -0.035 0.083" pos="0.061 -0.035 0.083" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
                                  <bone connected="false" end="0.023 0.013 0.000" group="Eyes" name="mFaceEyebrowOuterLeft" pivot="0.064 0.051 0.048" pos="0.064 0.051 0.048" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
-- 
cgit v1.2.3


From 75ff4382d985436197ead8b459bab80869b7f680 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Mon, 11 Jul 2016 18:19:37 -0400
Subject: SL-242 - avatar_lad.xml syntax fix, added missing scale params to
 some skeletal distortions.

---
 indra/newview/character/avatar_lad.xml | 10 ++++++++++
 1 file changed, 10 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index e9ce4725e5..8e8cff59a5 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -810,34 +810,44 @@
 		 
         <bone
          name="mWing1Left"
+         scale="0 0 0"
          offset="0 0 0" /> 
         <bone
          name="mWing2Left"
+         scale="0 0 0"
          offset="-0.015 0.015 0" /> 
         <bone
          name="mWing3Left"
+         scale="0 0 0"
          offset="-0.025 0.025 0" /> 
         <bone
          name="mWing4Left"
+         scale="0 0 0"
          offset="-0.03 0.03 0" /> 
         <bone
          name="mWing4FanLeft"
+         scale="0 0 0"
          offset="-0.03 0.03 0" /> 
 		 
         <bone
          name="mWing1Right"
+         scale="0 0 0"
          offset="0 0 0" /> 
         <bone
          name="mWing2Right"
+         scale="0 0 0"
          offset="-0.015 -0.015 0" /> 
         <bone
          name="mWing3Right"
+         scale="0 0 0"
          offset="-0.025 -0.025 0" /> 
         <bone
          name="mWing4Right"
+         scale="0 0 0"
          offset="-0.03 -0.03 0" /> 
         <bone
          name="mWing4FanRight"
+         scale="0 0 0"
          offset="-0.03 -0.03 0" /> 
 		 
       </param_skeleton>
-- 
cgit v1.2.3


From c1c9b3d74e17d8e5793c9b87e211a30d71245e93 Mon Sep 17 00:00:00 2001
From: Rider Linden <rider@lindenlab.com>
Date: Mon, 11 Jul 2016 16:33:11 -0700
Subject: MAINT-6565: Grab a shared pointer and encapsulate it into the bind
 call in place of this. Ensures that the impl is not deleted while the
 coroutine is active.

---
 indra/newview/lleventpoll.cpp | 7 +++----
 indra/newview/lleventpoll.h   | 2 +-
 2 files changed, 4 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp
index 7178042b32..51967d54a0 100644
--- a/indra/newview/lleventpoll.cpp
+++ b/indra/newview/lleventpoll.cpp
@@ -45,7 +45,7 @@ namespace LLEventPolling
 namespace Details
 {
 
-    class LLEventPollImpl
+    class LLEventPollImpl: public boost::enable_shared_from_this<LLEventPollImpl>
     {
     public:
         LLEventPollImpl(const LLHost &sender);
@@ -113,7 +113,7 @@ namespace Details
         {
             std::string coroname =
                 LLCoros::instance().launch("LLEventPollImpl::eventPollCoro",
-                boost::bind(&LLEventPollImpl::eventPollCoro, this, url));
+                boost::bind(&LLEventPollImpl::eventPollCoro, this->shared_from_this(), url));
             LL_INFOS("LLEventPollImpl") << coroname << " with  url '" << url << LL_ENDL;
         }
     }
@@ -273,8 +273,7 @@ namespace Details
 LLEventPoll::LLEventPoll(const std::string&	poll_url, const LLHost& sender):
     mImpl()
 { 
-    mImpl = boost::unique_ptr<LLEventPolling::Details::LLEventPollImpl>
-            (new LLEventPolling::Details::LLEventPollImpl(sender));
+    mImpl = boost::shared_ptr<LLEventPolling::Details::LLEventPollImpl>(new LLEventPolling::Details::LLEventPollImpl(sender));
     mImpl->start(poll_url);
 }
 
diff --git a/indra/newview/lleventpoll.h b/indra/newview/lleventpoll.h
index e2afd9226b..d305135b18 100644
--- a/indra/newview/lleventpoll.h
+++ b/indra/newview/lleventpoll.h
@@ -57,7 +57,7 @@ public:
 
 
 private:
-    boost::unique_ptr<LLEventPolling::Details::LLEventPollImpl>    mImpl;
+    boost::shared_ptr<LLEventPolling::Details::LLEventPollImpl>  mImpl;
 };
 
 
-- 
cgit v1.2.3


From 6fb759b4b5bf12d78013bf7cc97ee79d728c2cd4 Mon Sep 17 00:00:00 2001
From: Oz Linden <oz@lindenlab.com>
Date: Tue, 12 Jul 2016 07:56:11 -0400
Subject: update default LSL hints file to match the server version

---
 .../newview/app_settings/keywords_lsl_default.xml  | 30 ++++++++++++----------
 1 file changed, 16 insertions(+), 14 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/keywords_lsl_default.xml b/indra/newview/app_settings/keywords_lsl_default.xml
index bb23ec04dc..d641883d5a 100644
--- a/indra/newview/app_settings/keywords_lsl_default.xml
+++ b/indra/newview/app_settings/keywords_lsl_default.xml
@@ -1007,7 +1007,7 @@
             <key>type</key>
             <string>integer</string>
             <key>value</key>
-            <integer>0x800</integer>
+            <string>0x800</string>
             <key>tooltip</key>
             <string/>
          </map>
@@ -1617,7 +1617,7 @@
             <key>type</key>
             <string>string</string>
             <key>value</key>
-            <string>0x0A0x0A0x0A</string>
+            <string>\\n\\n\\n</string>
             <key>tooltip</key>
             <string>Indicates the last line of a notecard was read.</string>
          </map>
@@ -5511,7 +5511,7 @@
             <key>type</key>
             <string>integer</string>
             <key>value</key>
-            <integer>0x40</integer>
+            <string>0x40</string>
             <key>tooltip</key>
             <string>Controls whether the object can be grabbed.\nA grab is the default action when in third person, and is available as the hand tool in build mode. This is useful for physical objects that you don't want other people to be able to trivially disturb. The default is FALSE</string>
          </map>
@@ -5520,7 +5520,7 @@
             <key>type</key>
             <string>integer</string>
             <key>value</key>
-            <integer>0x400</integer>
+            <string>0x400</string>
             <key>tooltip</key>
             <string>Prevent click-and-drag movement on all prims in the object.</string>
          </map>
@@ -9802,15 +9802,17 @@
             <key>return</key>
             <string>string</string>
             <key>arguments</key>
-            <map>
-               <key>Error</key>
-               <map>
+            <array>
+              <map>
+                <key>Error</key>
+                <map>
                   <key>type</key>
                   <string>integer</string>
                   <key>tooltip</key>
                   <string>An Experience error code to translate.</string>
-               </map>
-            </map>
+                </map>
+              </map>
+            </array>
             <key>tooltip</key>
             <string>
                Returns a string describing the error code passed or the string corresponding with XP_ERROR_UNKNOWN_ERROR if the value is not a valid Experience error code.
@@ -10160,7 +10162,7 @@
                   <key>Parameters</key>
                   <map>
                      <key>type</key>
-                     <string>integer</string>
+                     <string>list</string>
                      <key>tooltip</key>
                      <string>A list of PRIM_* property constants to return values of.</string>
                   </map>
@@ -10251,7 +10253,7 @@
                   <key>Parameters</key>
                   <map>
                      <key>type</key>
-                     <string>integer</string>
+                     <string>list</string>
                      <key>tooltip</key>
                      <string>PRIM_* flags.</string>
                   </map>
@@ -12172,7 +12174,7 @@
                 <key>First</key>
                 <map>
                   <key>type</key>
-                  <string>string</string>
+                  <string>integer</string>
                   <key>tooltip</key>
                   <string>Index of the first key to return.</string>
                 </map>
@@ -12181,7 +12183,7 @@
                 <key>Count</key>
                 <map>
                   <key>type</key>
-                  <string>string</string>
+                  <string>integer</string>
                   <key>tooltip</key>
                   <string>The number of keys to return.</string>
                 </map>
@@ -14797,7 +14799,7 @@
             <key>arguments</key>
             <array>
               <map>
-                <key>AvatarID</key>
+                <key>AgentID</key>
                 <map>
                   <key>type</key>
                   <string>key</string>
-- 
cgit v1.2.3


From b73137ca17f4ecf58ac6c695da5733fcb6b9edf2 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Tue, 12 Jul 2016 08:42:10 -0400
Subject: SL-242 - eyelid slider fix

---
 indra/newview/character/avatar_lad.xml | 10 ----------
 1 file changed, 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 8e8cff59a5..5ce08fc732 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -3699,16 +3699,6 @@
 		 <bone
          name="mFaceEyeLidUpperRight"
          scale="0 0 0"
-         offset="0 0 -.006" />
-
-		 <bone
-         name="mFaceEyeAltLeft"
-         scale="0 0 0"
-         offset="0 0 -.006" />
-
-		 <bone
-         name="mFaceEyeAltRight"
-         scale="0 0 0"
          offset="0 0 -.006" />
 
        </param_skeleton>
-- 
cgit v1.2.3


From c0407af8ab181662f6049ae2cf4ca1fd562debe4 Mon Sep 17 00:00:00 2001
From: Rider Linden <rider@lindenlab.com>
Date: Tue, 12 Jul 2016 11:07:05 -0700
Subject: STORM-2132: Remove obsoleted unique_ptr.hpp, use make_shared for
 pointer allocation.

---
 indra/newview/lleventpoll.cpp | 4 +++-
 indra/newview/lleventpoll.h   | 6 ------
 2 files changed, 3 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp
index 51967d54a0..cc77b407ae 100644
--- a/indra/newview/lleventpoll.cpp
+++ b/indra/newview/lleventpoll.cpp
@@ -40,6 +40,8 @@
 #include "llcorehttputil.h"
 #include "lleventfilter.h"
 
+#include "boost/make_shared.hpp"
+
 namespace LLEventPolling
 {
 namespace Details
@@ -273,7 +275,7 @@ namespace Details
 LLEventPoll::LLEventPoll(const std::string&	poll_url, const LLHost& sender):
     mImpl()
 { 
-    mImpl = boost::shared_ptr<LLEventPolling::Details::LLEventPollImpl>(new LLEventPolling::Details::LLEventPollImpl(sender));
+    mImpl = boost::make_shared<LLEventPolling::Details::LLEventPollImpl>(sender);
     mImpl->start(poll_url);
 }
 
diff --git a/indra/newview/lleventpoll.h b/indra/newview/lleventpoll.h
index d305135b18..65766dbb2a 100644
--- a/indra/newview/lleventpoll.h
+++ b/indra/newview/lleventpoll.h
@@ -27,12 +27,6 @@
 #ifndef LL_LLEVENTPOLL_H
 #define LL_LLEVENTPOLL_H
 
-#include "boost/move/unique_ptr.hpp"
-
-namespace boost
-{
-    using ::boost::movelib::unique_ptr; // move unique_ptr into the boost namespace.
-}
 
 class LLHost;
 
-- 
cgit v1.2.3


From b06d5aeec8144f18e039758d3c70e9414f83ce21 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Tue, 12 Jul 2016 21:37:45 +0300
Subject: MAINT-6460 Crash calculating mesh complexity

---
 indra/newview/llmeshrepository.cpp | 13 ++++++-------
 indra/newview/llmeshrepository.h   |  4 ++--
 indra/newview/llvovolume.cpp       |  5 +++--
 3 files changed, 11 insertions(+), 11 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 39ebf9f95b..bf7f91d19a 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -3906,8 +3906,8 @@ void LLMeshRepository::buildHull(const LLVolumeParams& params, S32 detail)
 
 bool LLMeshRepository::hasPhysicsShape(const LLUUID& mesh_id)
 {
-	LLSD mesh = mThread->getMeshHeader(mesh_id);
-	if (mesh.has("physics_mesh") && mesh["physics_mesh"].has("size") && (mesh["physics_mesh"]["size"].asInteger() > 0))
+	const LLSD* mesh = mThread->getMeshHeader(mesh_id);
+	if (mesh && mesh->has("physics_mesh") && (*mesh)["physics_mesh"].has("size") && ((*mesh)["physics_mesh"]["size"].asInteger() > 0))
 	{
 		return true;
 	}
@@ -3921,27 +3921,26 @@ bool LLMeshRepository::hasPhysicsShape(const LLUUID& mesh_id)
 	return false;
 }
 
-LLSD& LLMeshRepository::getMeshHeader(const LLUUID& mesh_id)
+const LLSD* LLMeshRepository::getMeshHeader(const LLUUID& mesh_id)
 {
 	LL_RECORD_BLOCK_TIME(FTM_MESH_FETCH);
 
 	return mThread->getMeshHeader(mesh_id);
 }
 
-LLSD& LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id)
+const LLSD* LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id)
 {
-	static LLSD dummy_ret;
 	if (mesh_id.notNull())
 	{
 		LLMutexLock lock(mHeaderMutex);
 		mesh_header_map::iterator iter = mMeshHeader.find(mesh_id);
 		if (iter != mMeshHeader.end())
 		{
-			return iter->second;
+			return &(iter->second);
 		}
 	}
 
-	return dummy_ret;
+	return NULL;
 }
 
 
diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h
index d35c44397b..8a1166522f 100644
--- a/indra/newview/llmeshrepository.h
+++ b/indra/newview/llmeshrepository.h
@@ -305,7 +305,7 @@ public:
 	bool skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 data_size);
 	bool decompositionReceived(const LLUUID& mesh_id, U8* data, S32 data_size);
 	bool physicsShapeReceived(const LLUUID& mesh_id, U8* data, S32 data_size);
-	LLSD& getMeshHeader(const LLUUID& mesh_id);
+	const LLSD* getMeshHeader(const LLUUID& mesh_id);
 
 	void notifyLoadedMeshes();
 	S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod);
@@ -506,7 +506,7 @@ public:
 	bool meshRezEnabled();
 	
 
-	LLSD& getMeshHeader(const LLUUID& mesh_id);
+	const LLSD* getMeshHeader(const LLUUID& mesh_id);
 
 	void uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures,
 			bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload = true,
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 8f0b233f01..486f6fae61 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -3627,8 +3627,9 @@ F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_v
 	F32 radius = getScale().length()*0.5f;
 
 	if (isMesh())
-	{	
-		LLSD& header = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID());
+	{
+		const LLSD* header_ptr = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID());
+		LLSD header = header_ptr ? *header_ptr : LLSD();
 
 		return LLMeshRepository::getStreamingCost(header, radius, bytes, visible_bytes, mLOD, unscaled_value);
 	}
-- 
cgit v1.2.3


From a1655f032dc68b246ac7e847e408c15a29df7ece Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Tue, 12 Jul 2016 15:06:48 -0400
Subject: SL-424 - slider eye fixes, tail scaling with height

---
 indra/newview/character/avatar_lad.xml | 66 +++++++++++++++++++++++++++-------
 1 file changed, 54 insertions(+), 12 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 5ce08fc732..9c7e50e8bb 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -850,6 +850,37 @@
          scale="0 0 0"
          offset="-0.03 -0.03 0" /> 
 		 
+      <bone
+         name="mTail1"
+		 scale ="0 0 0"
+         offset="-0.02 0 0" /> 
+		 
+        <bone
+         name="mTail2"
+		 scale ="0 0 0"
+         offset="-0.02 0 0" /> 
+		 
+        <bone
+         name="mTail3"
+		 scale ="0 0 0"
+         offset="-0.02 0 0" /> 
+		 
+        <bone
+         name="mTail4"
+		 scale ="0 0 0"
+         offset="-0.02 0 0" /> 
+		 
+        <bone
+         name="mTail55"
+		 scale ="0 0 0"
+         offset="-0.02 0 0" /> 
+		 
+        <bone
+         name="mTail6"
+		 scale ="0 0 0"
+         offset="-0.02 0 0" /> 
+		 
+		 
       </param_skeleton>
     </param>
 
@@ -1992,23 +2023,34 @@
       <param_skeleton>
 	  
         <bone
-         name="mFaceEyeLidLowerRight"
-         scale="0 0.3 0.7"
-         offset=" 0 0 0" />
+         name="mEyeLeft"
+         scale="0 0 0"
+         offset="-.005 0 0" />
 
         <bone
-         name="mFaceEyeLidLowerLeft"
-         scale="0 0.3 0.7"
-         offset=" 0 0 0" />
+         name="mEyeRight"
+         scale="0 0 0"
+         offset="-.005 0 0" />
 		 
-        <bone
+	  
+<bone
          name="mFaceEyeAltLeft"
          scale="0 0 0"
-         offset="0 0 0" />
+         offset="-.005 0 0" />
 
         <bone
          name="mFaceEyeAltRight"
          scale="0 0 0"
+         offset="-.005 0 0" />
+	  
+        <bone
+         name="mFaceEyeLidLowerRight"
+         scale="0 0.3 0.7"
+         offset=" 0 0 0" />
+
+        <bone
+         name="mFaceEyeLidLowerLeft"
+         scale="0 0.3 0.7"
          offset="0 0 0" />
 
 		 <bone
@@ -4037,22 +4079,22 @@
         <bone
          name="mEyeLeft"
          scale="0.3195 0.3280 0.3280"
-         offset="-.005 0 0" />
+         offset="0 0 0" />
 
         <bone
          name="mEyeRight"
          scale="0.3195 0.3280 0.3280"
-         offset="-.005 0 0" />
+         offset="0 0 0" />
 
         <bone
          name="mFaceEyeAltLeft"
          scale="0.3195 0.3280 0.3280"
-		 offset="-0.005 0 0" />
+		 offset="0 0 0" />
 
         <bone
          name="mFaceEyeAltRight"
          scale="0.3195 0.3280 0.3280"
-         offset="-0.005 0 0" />
+         offset="0 0 0" />
 
       </param_skeleton>
     </param>
-- 
cgit v1.2.3


From d2cf09e7d2fb3eefd4bed4e5341849ee940b9018 Mon Sep 17 00:00:00 2001
From: Ansariel <none@none>
Date: Thu, 14 Jul 2016 10:28:54 +0200
Subject: STORM-2133: VOICE-36 prevents proper shutdown of connector

---
 indra/newview/llvoicevivox.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 07427e0377..189ed54993 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -427,7 +427,7 @@ void LLVivoxVoiceClient::connectorCreate()
 
 void LLVivoxVoiceClient::connectorShutdown()
 {
-	if(!mConnectorEstablished)
+	if(mConnectorEstablished)
 	{
 		std::ostringstream stream;
 		stream
-- 
cgit v1.2.3


From 00a193e740536bc8dbdc7a4c52ae8d75efba0037 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Thu, 14 Jul 2016 15:21:39 +0300
Subject: MAINT-6460 Crash calculating mesh complexity

---
 indra/newview/llmeshrepository.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index bf7f91d19a..a0e57677c3 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -4033,7 +4033,9 @@ void LLMeshRepository::uploadError(LLSD& args)
 //static
 F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value)
 {
-	if (header.size() == 0 || header.has("404") || header["version"].asInteger() > MAX_MESH_VERSION)
+	if (header.has("404")
+		|| !header.has("lowest_lod")
+		|| (header.has("version") && header["version"].asInteger() > MAX_MESH_VERSION))
 	{
 		return 0.f;
 	}
-- 
cgit v1.2.3


From e0c2a4ac336c7ecbfe4215a02a201d685e6d14fd Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 15 Jul 2016 10:52:29 -0400
Subject: SL-126 - getting performance analysis into a non-crashing state

---
 indra/newview/llfasttimerview.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 4a059fdc67..e9b5403dea 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -904,7 +904,8 @@ void LLFastTimerView::doAnalysisDefault(std::string baseline, std::string target
 			base[label]["Samples"].asInteger());			
 	}
 
-	exportCharts(baseline, target);
+	// BENTO - this currently crashes
+	// exportCharts(baseline, target);
 
 	os.flush();
 	os.close();
-- 
cgit v1.2.3


From 1b1f4252e3a243fcdc0906ada0c124dfe7b864bf Mon Sep 17 00:00:00 2001
From: andreykproductengine <none@none>
Date: Mon, 25 Jul 2016 23:43:37 +0300
Subject: MAINT-6460 Crash calculating mesh complexity

---
 indra/newview/llmeshrepository.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index a0e57677c3..18634de500 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -3934,7 +3934,7 @@ const LLSD* LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id)
 	{
 		LLMutexLock lock(mHeaderMutex);
 		mesh_header_map::iterator iter = mMeshHeader.find(mesh_id);
-		if (iter != mMeshHeader.end())
+		if (iter != mMeshHeader.end() && mMeshHeaderSize[mesh_id] > 0)
 		{
 			return &(iter->second);
 		}
-- 
cgit v1.2.3


From 13f19b1634a4d20c6daed965d52ea412ca4b0455 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Mon, 1 Aug 2016 17:25:20 +0300
Subject: Backed out changeset: c21a7e6d9796

---
 indra/newview/llmeshrepository.cpp | 13 +++++++------
 indra/newview/llmeshrepository.h   |  4 ++--
 indra/newview/llvovolume.cpp       |  5 ++---
 3 files changed, 11 insertions(+), 11 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 18634de500..d7665716b7 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -3906,8 +3906,8 @@ void LLMeshRepository::buildHull(const LLVolumeParams& params, S32 detail)
 
 bool LLMeshRepository::hasPhysicsShape(const LLUUID& mesh_id)
 {
-	const LLSD* mesh = mThread->getMeshHeader(mesh_id);
-	if (mesh && mesh->has("physics_mesh") && (*mesh)["physics_mesh"].has("size") && ((*mesh)["physics_mesh"]["size"].asInteger() > 0))
+	LLSD mesh = mThread->getMeshHeader(mesh_id);
+	if (mesh.has("physics_mesh") && mesh["physics_mesh"].has("size") && (mesh["physics_mesh"]["size"].asInteger() > 0))
 	{
 		return true;
 	}
@@ -3921,26 +3921,27 @@ bool LLMeshRepository::hasPhysicsShape(const LLUUID& mesh_id)
 	return false;
 }
 
-const LLSD* LLMeshRepository::getMeshHeader(const LLUUID& mesh_id)
+LLSD& LLMeshRepository::getMeshHeader(const LLUUID& mesh_id)
 {
 	LL_RECORD_BLOCK_TIME(FTM_MESH_FETCH);
 
 	return mThread->getMeshHeader(mesh_id);
 }
 
-const LLSD* LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id)
+LLSD& LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id)
 {
+	static LLSD dummy_ret;
 	if (mesh_id.notNull())
 	{
 		LLMutexLock lock(mHeaderMutex);
 		mesh_header_map::iterator iter = mMeshHeader.find(mesh_id);
 		if (iter != mMeshHeader.end() && mMeshHeaderSize[mesh_id] > 0)
 		{
-			return &(iter->second);
+			return iter->second;
 		}
 	}
 
-	return NULL;
+	return dummy_ret;
 }
 
 
diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h
index 8a1166522f..d35c44397b 100644
--- a/indra/newview/llmeshrepository.h
+++ b/indra/newview/llmeshrepository.h
@@ -305,7 +305,7 @@ public:
 	bool skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 data_size);
 	bool decompositionReceived(const LLUUID& mesh_id, U8* data, S32 data_size);
 	bool physicsShapeReceived(const LLUUID& mesh_id, U8* data, S32 data_size);
-	const LLSD* getMeshHeader(const LLUUID& mesh_id);
+	LLSD& getMeshHeader(const LLUUID& mesh_id);
 
 	void notifyLoadedMeshes();
 	S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod);
@@ -506,7 +506,7 @@ public:
 	bool meshRezEnabled();
 	
 
-	const LLSD* getMeshHeader(const LLUUID& mesh_id);
+	LLSD& getMeshHeader(const LLUUID& mesh_id);
 
 	void uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures,
 			bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload = true,
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 486f6fae61..8f0b233f01 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -3627,9 +3627,8 @@ F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_v
 	F32 radius = getScale().length()*0.5f;
 
 	if (isMesh())
-	{
-		const LLSD* header_ptr = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID());
-		LLSD header = header_ptr ? *header_ptr : LLSD();
+	{	
+		LLSD& header = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID());
 
 		return LLMeshRepository::getStreamingCost(header, radius, bytes, visible_bytes, mLOD, unscaled_value);
 	}
-- 
cgit v1.2.3


From 9b07078b470d40c4b6454d21da2909c35517b248 Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Mon, 1 Aug 2016 18:00:54 +0300
Subject: MAINT-6460 Crash calculating mesh complexity

---
 indra/newview/llmeshrepository.cpp | 14 ++++++++++++++
 indra/newview/llmeshrepository.h   |  1 +
 indra/newview/llvovolume.cpp       |  6 ++----
 3 files changed, 17 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index d7665716b7..8bc75c8433 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -4031,6 +4031,20 @@ void LLMeshRepository::uploadError(LLSD& args)
 	mUploadErrorQ.push(args);
 }
 
+F32 LLMeshRepository::getStreamingCost(LLUUID mesh_id, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value)
+{
+    if (mThread && mesh_id.notNull())
+    {
+        LLMutexLock lock(mThread->mHeaderMutex);
+        LLMeshRepoThread::mesh_header_map::iterator iter = mThread->mMeshHeader.find(mesh_id);
+        if (iter != mThread->mMeshHeader.end() && mThread->mMeshHeaderSize[mesh_id] > 0)
+        {
+            return getStreamingCost(iter->second, radius, bytes, bytes_visible, lod, unscaled_value);
+        }
+    }
+    return 0.f;
+}
+
 //static
 F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value)
 {
diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h
index d35c44397b..a762042597 100644
--- a/indra/newview/llmeshrepository.h
+++ b/indra/newview/llmeshrepository.h
@@ -475,6 +475,7 @@ public:
 	
 	static LLDeadmanTimer sQuiescentTimer;		// Time-to-complete-mesh-downloads after significant events
 
+	F32 getStreamingCost(LLUUID mesh_id, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1, F32 *unscaled_value = NULL);
 	static F32 getStreamingCost(LLSD& header, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1, F32 *unscaled_value = NULL);
 
 	LLMeshRepository();
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 8f0b233f01..e69a8d1d1d 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -3627,10 +3627,8 @@ F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_v
 	F32 radius = getScale().length()*0.5f;
 
 	if (isMesh())
-	{	
-		LLSD& header = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID());
-
-		return LLMeshRepository::getStreamingCost(header, radius, bytes, visible_bytes, mLOD, unscaled_value);
+	{
+		return gMeshRepo.getStreamingCost(getVolume()->getParams().getSculptID(), radius, bytes, visible_bytes, mLOD, unscaled_value);
 	}
 	else
 	{
-- 
cgit v1.2.3


From ce3658455230cf392f45cc99f44a737ee59f13bd Mon Sep 17 00:00:00 2001
From: andreykproductengine <akleshchev@productengine.com>
Date: Mon, 1 Aug 2016 18:58:41 +0300
Subject: MAINT-6460 getMeshSize crash

---
 indra/newview/llmeshrepository.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 8bc75c8433..54f8fb93d0 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -3956,10 +3956,11 @@ void LLMeshRepository::uploadModel(std::vector<LLModelInstance>& data, LLVector3
 
 S32 LLMeshRepository::getMeshSize(const LLUUID& mesh_id, S32 lod)
 {
-	if (mThread)
+	if (mThread && mesh_id.notNull())
 	{
+		LLMutexLock lock(mThread->mHeaderMutex);
 		LLMeshRepoThread::mesh_header_map::iterator iter = mThread->mMeshHeader.find(mesh_id);
-		if (iter != mThread->mMeshHeader.end())
+		if (iter != mThread->mMeshHeader.end() && mThread->mMeshHeaderSize[mesh_id] > 0)
 		{
 			LLSD& header = iter->second;
 
-- 
cgit v1.2.3


From ba90b2d3c738378d0d8300ff0a449beb680e7914 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Mon, 8 Aug 2016 15:18:12 -0400
Subject: SL-433 - fix for mesh eye scaling with eye size slider. Previous
 values were based on incorrectly sized reference eyes.

---
 indra/newview/character/avatar_lad.xml | 56 +++++++++++++++++-----------------
 1 file changed, 28 insertions(+), 28 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 9c7e50e8bb..533ef95d3e 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -4065,38 +4065,38 @@
     </param>
 	
     <param
-     id="30689"
-     group="1"
-     name="EyeBone_Big_Eyes"
-     value_min="-1"
-     value_max="0.56">
-      <param_skeleton>
-	  
-	    <!-- Experimental: Added Scale to the System eyes. From first look this affects only custom meshes.
-		   | The result is: Custom eyes now scale in the same way as system eyes do
-		   | Revert by setting scale to scale="0 0 0" for mEyeLeft and mEyeRight
-		   -->
-        <bone
-         name="mEyeLeft"
-         scale="0.3195 0.3280 0.3280"
-         offset="0 0 0" />
-
-        <bone
-         name="mEyeRight"
-         scale="0.3195 0.3280 0.3280"
-         offset="0 0 0" />
+    id="30689"
+    group="1"
+    name="EyeBone_Big_Eyes"
+    value_min="-1.1"
+    value_max="1.1">
+     <param_skeleton>
+      
+        <!-- Experimental: Added Scale to the System eyes. From first look this affects only custom meshes.
+           | The result is: Custom eyes now scale in the same way as system eyes do
+           | Revert by setting scale to scale="0 0 0" for mEyeLeft and mEyeRight
+           -->
+       <bone
+        name="mEyeLeft"
+        scale="0.248 0.25 0.25"
+        offset="0 0 0" />
 
-        <bone
-         name="mFaceEyeAltLeft"
-         scale="0.3195 0.3280 0.3280"
-		 offset="0 0 0" />
+       <bone
+        name="mEyeRight"
+        scale="0.248 0.25 0.25"
+        offset="0 0 0" />
 
-        <bone
-         name="mFaceEyeAltRight"
-         scale="0.3195 0.3280 0.3280"
+       <bone
+        name="mFaceEyeAltLeft"
+        scale="0.248 0.25 0.25"
          offset="0 0 0" />
 
-      </param_skeleton>
+       <bone
+        name="mFaceEyeAltRight"
+        scale="0.248 0.25 0.25"
+        offset="0 0 0" />
+
+     </param_skeleton>
     </param>
 
     <param
-- 
cgit v1.2.3


From b7a0d441a35193cdeb604a491b266d2f54babb7f Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Tue, 9 Aug 2016 09:17:37 -0400
Subject: SL-126 - attachment logging under avatar at DEBUG level. Also fixed a
 typo in avatar_lad.xml

---
 indra/newview/character/avatar_lad.xml | 2 +-
 indra/newview/llvoavatar.cpp           | 4 ++--
 indra/newview/llvovolume.cpp           | 3 ++-
 3 files changed, 5 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 533ef95d3e..a9f506d80b 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -871,7 +871,7 @@
          offset="-0.02 0 0" /> 
 		 
         <bone
-         name="mTail55"
+         name="mTail5"
 		 scale ="0 0 0"
          offset="-0.02 0 0" /> 
 		 
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index d3cd85e9f4..b1282fb4de 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5606,11 +5606,11 @@ void LLVOAvatar::showAttachmentPosOverrides(bool verbose) const
     {
         std::stringstream ss;
         std::copy(joint_names.begin(), joint_names.end(), std::ostream_iterator<std::string>(ss, ","));
-        LL_INFOS() << getFullname() << " attachment positions defined for joints: " << ss.str() << "\n" << LL_ENDL;
+        LL_DEBUGS("Avatar") << getFullname() << " attachment positions defined for joints: " << ss.str() << "\n" << LL_ENDL;
     }
     else
     {
-        LL_INFOS() << getFullname() << " no attachment positions defined for any joints" << "\n" << LL_ENDL;
+        LL_DEBUGS("Avatar") << getFullname() << " no attachment positions defined for any joints" << "\n" << LL_ENDL;
     }
 
     if (!verbose)
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 465f8fe0d6..c8e98683aa 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -4783,7 +4783,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
                 pAvatarVO->addAttachmentPosOverridesForObject(vobj);
 				if (pAvatarVO->isSelf())
 				{
-					//pAvatarVO->showAttachmentPosOverrides();
+                    bool verbose = true;
+					pAvatarVO->showAttachmentPosOverrides(verbose);
 				}
             }
 
-- 
cgit v1.2.3


From 4fb100ac7a33174883184f1320d0beac08ead3a7 Mon Sep 17 00:00:00 2001
From: Oz Linden <oz@lindenlab.com>
Date: Thu, 11 Aug 2016 15:31:41 -0400
Subject: increment viewer version to 4.0.8

---
 indra/newview/VIEWER_VERSION.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 43beb4001b..a2cec7aff4 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-4.0.7
+4.0.8
-- 
cgit v1.2.3


From 85a13b53f5570c44c476a7af70846874dfc3ecbf Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 12 Aug 2016 14:20:44 -0400
Subject: MAINT-6631 - reluctantly, added support for animation of collision
 volumes, to avoid breaking existing content.

---
 indra/newview/llvoavatar.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index b1282fb4de..6e436e85e9 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5921,7 +5921,7 @@ void LLVOAvatar::initAttachmentPoints(bool ignore_hud_joints)
         attachment->setVisibleInFirstPerson(info->mVisibleFirstPerson);
         attachment->setIsHUDAttachment(info->mIsHUDAttachment);
         // attachment can potentially be animated, needs a number.
-        attachment->setJointNum(mSkeleton.size() + attachmentID - 1);
+        attachment->setJointNum(mNextJointNum++);
 
         if (newly_created)
         {
-- 
cgit v1.2.3


From b25ee9095deca0cd0c7eedafda89e021734d0ca7 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Mon, 15 Aug 2016 14:13:56 -0400
Subject: Remove VSTool, its build info and all invocations.

VSTool manipulates the SecondLife.sln solution file for the convenience of a
developer subsequently running Visual Studio interactively. But the cost of
having it sometimes break TeamCity automated builds is too high -- especially
since we never expect to run Visual Studio interactively on a TC build host.

Also remove the CMake UNATTENDED variable that controlled it.
---
 indra/newview/CMakeLists.txt | 15 ---------------
 1 file changed, 15 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index dce0ea73cd..586a56b49a 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1799,21 +1799,6 @@ if (WINDOWS)
    windows-crash-logger
     )
 
-    # sets the 'working directory' for debugging from visual studio.
-    if (NOT UNATTENDED)
-        add_custom_command(
-            TARGET ${VIEWER_BINARY_NAME} POST_BUILD
-            COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
-            ARGS
-              --solution
-              ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln
-              --workingdir
-              ${VIEWER_BINARY_NAME}
-              "${CMAKE_CURRENT_SOURCE_DIR}"
-            COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging."
-            )
-    endif (NOT UNATTENDED)
-
     if (PACKAGE)
       add_custom_command(
         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2
-- 
cgit v1.2.3


From 454da876dc648d34aacf27217952e640f4fdaa88 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Mon, 15 Aug 2016 17:12:37 -0400
Subject: Backed out changeset e187a6b45ce6: restored VSTool et al.

---
 indra/newview/CMakeLists.txt | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 586a56b49a..dce0ea73cd 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1799,6 +1799,21 @@ if (WINDOWS)
    windows-crash-logger
     )
 
+    # sets the 'working directory' for debugging from visual studio.
+    if (NOT UNATTENDED)
+        add_custom_command(
+            TARGET ${VIEWER_BINARY_NAME} POST_BUILD
+            COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
+            ARGS
+              --solution
+              ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln
+              --workingdir
+              ${VIEWER_BINARY_NAME}
+              "${CMAKE_CURRENT_SOURCE_DIR}"
+            COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging."
+            )
+    endif (NOT UNATTENDED)
+
     if (PACKAGE)
       add_custom_command(
         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2
-- 
cgit v1.2.3


From 7104ededb5f224839a6c8d276a3e578ef570ca94 Mon Sep 17 00:00:00 2001
From: eli <none@none>
Date: Tue, 16 Aug 2016 17:47:49 -0700
Subject: FIX INTL-224 Viewer Set45 translation for bento-box in 9 languages

---
 .../de/floater_preferences_graphics_advanced.xml   |   2 +-
 .../skins/default/xui/de/menu_attachment_other.xml |   1 +
 .../skins/default/xui/de/menu_attachment_self.xml  |   1 +
 .../skins/default/xui/de/menu_avatar_other.xml     |   1 +
 .../skins/default/xui/de/menu_avatar_self.xml      |   1 +
 indra/newview/skins/default/xui/de/menu_viewer.xml |   2 +-
 .../newview/skins/default/xui/de/notifications.xml |  44 +++++---
 .../default/xui/de/panel_preferences_alerts.xml    |   3 +-
 .../default/xui/de/panel_preferences_graphics1.xml |   5 +
 .../skins/default/xui/de/panel_sound_devices.xml   |   4 +-
 indra/newview/skins/default/xui/de/strings.xml     | 113 ++++++++++++++++++-
 .../es/floater_preferences_graphics_advanced.xml   |   2 +-
 .../skins/default/xui/es/menu_attachment_other.xml |   1 +
 .../skins/default/xui/es/menu_attachment_self.xml  |   1 +
 .../skins/default/xui/es/menu_avatar_other.xml     |   1 +
 .../skins/default/xui/es/menu_avatar_self.xml      |   1 +
 indra/newview/skins/default/xui/es/menu_viewer.xml |   1 +
 .../newview/skins/default/xui/es/notifications.xml |  46 +++++---
 .../default/xui/es/panel_preferences_alerts.xml    |   3 +-
 .../default/xui/es/panel_preferences_graphics1.xml |   5 +
 .../skins/default/xui/es/panel_sound_devices.xml   |   4 +-
 indra/newview/skins/default/xui/es/strings.xml     | 115 +++++++++++++++++++-
 .../fr/floater_preferences_graphics_advanced.xml   |   2 +-
 .../skins/default/xui/fr/menu_attachment_other.xml |   1 +
 .../skins/default/xui/fr/menu_attachment_self.xml  |   1 +
 .../skins/default/xui/fr/menu_avatar_other.xml     |   1 +
 .../skins/default/xui/fr/menu_avatar_self.xml      |   1 +
 indra/newview/skins/default/xui/fr/menu_viewer.xml |   2 +-
 .../newview/skins/default/xui/fr/notifications.xml |  48 ++++++---
 .../default/xui/fr/panel_preferences_alerts.xml    |   3 +-
 .../default/xui/fr/panel_preferences_graphics1.xml |   5 +
 .../skins/default/xui/fr/panel_sound_devices.xml   |   4 +-
 indra/newview/skins/default/xui/fr/strings.xml     | 113 ++++++++++++++++++-
 .../it/floater_preferences_graphics_advanced.xml   |   2 +-
 .../skins/default/xui/it/menu_attachment_other.xml |   1 +
 .../skins/default/xui/it/menu_attachment_self.xml  |   1 +
 .../skins/default/xui/it/menu_avatar_other.xml     |   1 +
 .../skins/default/xui/it/menu_avatar_self.xml      |   1 +
 indra/newview/skins/default/xui/it/menu_viewer.xml |   2 +-
 .../newview/skins/default/xui/it/notifications.xml |  44 +++++---
 .../default/xui/it/panel_preferences_alerts.xml    |   3 +-
 .../default/xui/it/panel_preferences_graphics1.xml |   5 +
 .../skins/default/xui/it/panel_sound_devices.xml   |   4 +-
 indra/newview/skins/default/xui/it/strings.xml     | 113 ++++++++++++++++++-
 .../ja/floater_preferences_graphics_advanced.xml   |   2 +-
 .../skins/default/xui/ja/menu_attachment_other.xml |   1 +
 .../skins/default/xui/ja/menu_attachment_self.xml  |   1 +
 .../skins/default/xui/ja/menu_avatar_other.xml     |   1 +
 .../skins/default/xui/ja/menu_avatar_self.xml      |   1 +
 indra/newview/skins/default/xui/ja/menu_viewer.xml |   2 +-
 .../newview/skins/default/xui/ja/notifications.xml |  46 +++++---
 .../default/xui/ja/panel_preferences_alerts.xml    |   3 +-
 .../default/xui/ja/panel_preferences_graphics1.xml |   5 +
 .../skins/default/xui/ja/panel_sound_devices.xml   |   4 +-
 indra/newview/skins/default/xui/ja/strings.xml     | 120 +++++++++++++++++++--
 .../pt/floater_preferences_graphics_advanced.xml   |   2 +-
 .../skins/default/xui/pt/menu_attachment_other.xml |   1 +
 .../skins/default/xui/pt/menu_attachment_self.xml  |   1 +
 .../skins/default/xui/pt/menu_avatar_other.xml     |   1 +
 .../skins/default/xui/pt/menu_avatar_self.xml      |   1 +
 indra/newview/skins/default/xui/pt/menu_viewer.xml |   2 +-
 .../newview/skins/default/xui/pt/notifications.xml |  46 +++++---
 .../default/xui/pt/panel_preferences_alerts.xml    |   3 +-
 .../default/xui/pt/panel_preferences_graphics1.xml |   5 +
 .../skins/default/xui/pt/panel_sound_devices.xml   |   4 +-
 indra/newview/skins/default/xui/pt/strings.xml     | 115 +++++++++++++++++++-
 .../skins/default/xui/ru/menu_attachment_other.xml |   1 +
 .../skins/default/xui/ru/menu_attachment_self.xml  |   1 +
 .../skins/default/xui/ru/menu_avatar_other.xml     |   1 +
 .../skins/default/xui/ru/menu_avatar_self.xml      |   1 +
 indra/newview/skins/default/xui/ru/menu_viewer.xml |   2 +-
 .../newview/skins/default/xui/ru/notifications.xml |  44 +++++---
 .../default/xui/ru/panel_preferences_alerts.xml    |   3 +-
 .../default/xui/ru/panel_preferences_graphics1.xml |   5 +
 .../skins/default/xui/ru/panel_sound_devices.xml   |   4 +-
 indra/newview/skins/default/xui/ru/strings.xml     | 111 +++++++++++++++++--
 .../tr/floater_preferences_graphics_advanced.xml   |   2 +-
 .../skins/default/xui/tr/menu_attachment_other.xml |   1 +
 .../skins/default/xui/tr/menu_attachment_self.xml  |   1 +
 .../skins/default/xui/tr/menu_avatar_other.xml     |   1 +
 .../skins/default/xui/tr/menu_avatar_self.xml      |   1 +
 indra/newview/skins/default/xui/tr/menu_viewer.xml |   2 +-
 .../newview/skins/default/xui/tr/notifications.xml |  46 +++++---
 .../default/xui/tr/panel_preferences_alerts.xml    |   3 +-
 .../default/xui/tr/panel_preferences_graphics1.xml |   5 +
 .../skins/default/xui/tr/panel_sound_devices.xml   |   4 +-
 indra/newview/skins/default/xui/tr/strings.xml     | 119 ++++++++++++++++++--
 .../zh/floater_preferences_graphics_advanced.xml   |   2 +-
 .../skins/default/xui/zh/menu_attachment_other.xml |   1 +
 .../skins/default/xui/zh/menu_attachment_self.xml  |   1 +
 .../skins/default/xui/zh/menu_avatar_other.xml     |   1 +
 .../skins/default/xui/zh/menu_avatar_self.xml      |   1 +
 indra/newview/skins/default/xui/zh/menu_viewer.xml |   2 +-
 .../newview/skins/default/xui/zh/notifications.xml |  48 ++++++---
 .../default/xui/zh/panel_preferences_alerts.xml    |   3 +-
 .../default/xui/zh/panel_preferences_graphics1.xml |   5 +
 .../skins/default/xui/zh/panel_sound_devices.xml   |   4 +-
 indra/newview/skins/default/xui/zh/strings.xml     | 113 ++++++++++++++++++-
 98 files changed, 1389 insertions(+), 232 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml
index 2c141f616f..65a7e255f9 100644
--- a/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
 	<text name="AvatarText">
 		Avatar
 	</text>
-	<slider label="Maximale Komplexität:" name="IndirectMaxComplexity" tool_tip="Bestimmt, an welchem Punkt ein visuell komplexer Avatar als „Gummibärchen“ dargestellt wird"/>
+	<slider label="Maximale Komplexität:" name="IndirectMaxComplexity" tool_tip="Bestimmt, an welchem Punkt ein visuell komplexer Avatar als JellyDoll dargestellt wird"/>
 	<text name="IndirectMaxComplexityText">
 		0
 	</text>
diff --git a/indra/newview/skins/default/xui/de/menu_attachment_other.xml b/indra/newview/skins/default/xui/de/menu_attachment_other.xml
index ddb1e7b0b1..ba1b36db06 100644
--- a/indra/newview/skins/default/xui/de/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/de/menu_attachment_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="Anrufen" name="Call"/>
 	<menu_item_call label="In Gruppe einladen" name="Invite..."/>
+	<menu_item_call label="Skelett zurücksetzen" name="Reset Skeleton"/>
 	<menu_item_call label="Ignorieren" name="Avatar Mute"/>
 	<menu_item_call label="Melden" name="abuse"/>
 	<menu_item_call label="Einfrieren" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_attachment_self.xml b/indra/newview/skins/default/xui/de/menu_attachment_self.xml
index e0f37b28af..cd24e6ad3f 100644
--- a/indra/newview/skins/default/xui/de/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/de/menu_attachment_self.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/>
 	<menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/>
 	<menu_item_call label="Schwebehöhe" name="Hover Height"/>
+	<menu_item_call label="Skelett zurücksetzen" name="Reset Skeleton"/>
 	<menu_item_call label="Meine Freunde" name="Friends..."/>
 	<menu_item_call label="Meine Gruppen" name="Groups..."/>
 	<menu_item_call label="Mein Profil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_other.xml b/indra/newview/skins/default/xui/de/menu_avatar_other.xml
index 7242ba1495..447655cde7 100644
--- a/indra/newview/skins/default/xui/de/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/de/menu_avatar_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="Anrufen" name="Call"/>
 	<menu_item_call label="In Gruppe einladen" name="Invite..."/>
+	<menu_item_call label="Skelett zurücksetzen" name="Reset Skeleton"/>
 	<menu_item_call label="Ignorieren" name="Avatar Mute"/>
 	<menu_item_call label="Melden" name="abuse"/>
 	<menu_item_call label="Einfrieren" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_self.xml b/indra/newview/skins/default/xui/de/menu_avatar_self.xml
index b53f8cd6af..f4a3cc17b8 100644
--- a/indra/newview/skins/default/xui/de/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/de/menu_avatar_self.xml
@@ -26,6 +26,7 @@
 	<menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/>
 	<menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/>
 	<menu_item_call label="Schwebehöhe" name="Hover Height"/>
+	<menu_item_call label="Skelett zurücksetzen" name="Reset Skeleton"/>
 	<menu_item_call label="Meine Freunde" name="Friends..."/>
 	<menu_item_call label="Meine Gruppen" name="Groups..."/>
 	<menu_item_call label="Mein Profil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index d83a6071f6..319162db34 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -22,7 +22,6 @@
 			<menu_item_check label="Nicht stören" name="Do Not Disturb"/>
 		</menu>
 		<menu_item_call label="L$ kaufen..." name="Buy and Sell L$"/>
-		<menu_item_call label="Händler-Outbox..." name="MerchantOutbox"/>
 		<menu_item_call label="Marktplatz-Auflistungen..." name="MarketplaceListings"/>
 		<menu_item_call label="Kontoübersicht..." name="Manage My Account">
 			<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=de"/>
@@ -415,6 +414,7 @@
 			<menu_item_check label="LOD deaktiveren" name="Disable LOD"/>
 			<menu_item_check label="Fehler für sichtbare Agenten beseitigen" name="Debug Character Vis"/>
 			<menu_item_check label="Gelenkpunkte anzeigen" name="Show Collision Skeleton"/>
+			<menu_item_check label="Knochen anzeigen" name="Show Bones"/>
 			<menu_item_check label="Agent-Ziel anzeigen" name="Display Agent Target"/>
 			<menu_item_call label="Anhänge ausgeben" name="Dump Attachments"/>
 			<menu_item_call label="Fehler in Avatar-Texturen beseitigen" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index 6fcd025a94..0af00ab705 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -487,6 +487,9 @@ Der Outfit-Ordner enthält keine Kleidung, Körperteile oder Anhänge.
 	<notification name="CannotWearInfoNotComplete">
 		Sie können das Objekt nicht anziehen, weil es noch nicht geladen wurde. Warten Sie kurz und versuchen Sie es dann noch einmal.
 	</notification>
+	<notification name="MustEnterPasswordToLogIn">
+		Bitte geben Sie zur Anmeldung Ihr Kennwort ein.
+	</notification>
 	<notification name="MustHaveAccountToLogIn">
 		Sue haben ein Feld leer gelassen.
 Sie müssen den Benutzernamen Ihres Avatars eingeben.
@@ -555,6 +558,9 @@ Hinweis: Der Cache wird dabei gelöscht/geleert.
 	<notification name="ChangeConnectionPort">
 		Die Port-Einstellungen werden nach einem Neustart von [APP_NAME] wirksam.
 	</notification>
+	<notification name="ChangeDeferredDebugSetting">
+		Die Debug-Einstellung tritt nach Neustart von [APP_NAME] in Kraft.
+	</notification>
 	<notification name="ChangeSkin">
 		Die neue Benutzeroberfläche wird nach einem Neustart von [APP_NAME] angezeigt.
 	</notification>
@@ -1380,12 +1386,13 @@ Sie können [SECOND_LIFE] normal verwenden. Andere Benutzer können Sie korrekt
 			<ignore name="ignore" text="Das Herunterladen der Kleidung dauert lange"/>
 		</form>
 	</notification>
-	<notification name="RegionAndAgentComplexity">
-		Ihre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 visuelle Komplexität] ist [AGENT_COMPLEXITY].
+	<notification name="AgentComplexityWithVisibility">
+		Ihre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 Avatarkomplexität] ist [AGENT_COMPLEXITY].
 [OVERLIMIT_MSG]
+		<usetemplate ignoretext="Warnen, falls Avatarkomplexität zu hoch ist" name="notifyignore"/>
 	</notification>
 	<notification name="AgentComplexity">
-		Ihre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 visuelle Komplexität] ist [AGENT_COMPLEXITY].
+		Ihre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 Avatarkomplexität] ist [AGENT_COMPLEXITY].
 	</notification>
 	<notification name="FirstRun">
 		Installation von [APP_NAME] vollständig abgeschlossen.
@@ -1501,6 +1508,10 @@ Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 un
 		Möchten Sie das aktuelle Terrain formen, es zum Mittelpunkt der oberen und unteren Terraingrenzen und zum Standard des „Zurücksetzen“-Tools machen?
 		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
 	</notification>
+	<notification name="ConfirmTextureHeights">
+		Sie sind dabei, für Höhenbereiche untere Werte anzugeben, die größer sind als die oberen Werte. Fortfahren?
+		<usetemplate canceltext="Nicht fragen" name="yesnocancelbuttons" notext="Abbrechen" yestext="OK"/>
+	</notification>
 	<notification name="MaxAllowedAgentOnRegion">
 		Es sind maximal [MAX_AGENTS] zulässige Einwohner erlaubt.
 	</notification>
@@ -1735,14 +1746,6 @@ Diese Gruppe verlassen?
 		Sie können die Gruppe nicht verlassen, da Sie der letzte Besitzer der Gruppe sind. Weisen Sie die Besitzerrolle zuerst einem anderen Mitglied zu.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="GroupDepartError">
-		Kann Gruppe nicht verlassen: [reason].
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GroupDepart">
-		Sie haben die Gruppe „[group_name]“ verlassen.
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
 	<notification name="ConfirmKick">
 		Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen?
 		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/>
@@ -2415,6 +2418,10 @@ Möchten Sie den Nicht-stören-Modus deaktivieren, bevor Sie diese Transaktion a
 		Sind Sie sicher, dass Sie den Inhalt Ihres Papierkorbs löschen möchten?
 		<usetemplate ignoretext="Bestätigen, bevor der Ordner Papierkorb im Inventar geleert wird" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
 	</notification>
+	<notification name="TrashIsFull">
+		Ihr Papierkorb läuft über. Dies kann zu Anmeldeproblemen führen.
+		<usetemplate name="okcancelbuttons" notext="Papierkorb später leeren" yestext="Papierkorb jetzt leeren"/>
+	</notification>
 	<notification name="ConfirmClearBrowserCache">
 		Sind Sie sicher, dass Sie Ihren Reise-, Internet- und Suchverlauf löschen möchten?
 		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
@@ -3272,11 +3279,15 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt.
 	<notification name="AttachmentSaved">
 		Der Anhang wurde gespeichert.
 	</notification>
-	<notification name="PresetNotSaved">
-		Fehler beim Speichern der Voreinstellung [NAME].
+	<notification name="AppearanceToXMLSaved">
+		Erscheinungsbild als XML in [PATH] gespeichert
 	</notification>
-	<notification name="PresetNotDeleted">
-		Fehler beim Löschen der Voreinstellung [NAME].
+	<notification name="AppearanceToXMLFailed">
+		Fehler beim Speichern des Erscheinungsbilds als XML.
+    icon=&quot;notifytip.tga&quot;
+	name=&quot;PresetNotDeleted&quot;
+    type=&quot;notifytip&quot;&gt;
+Fehler beim Löschen der Voreinstellung [NAME].
 	</notification>
 	<notification name="UnableToFindHelpTopic">
 		Hilfethema für dieses Element wurde nicht gefunden.
@@ -4089,6 +4100,9 @@ Warten Sie kurz und versuchen Sie es noch einmal.
 	<notification name="CantAttachNotEnoughScriptResources">
 		Nicht genügend Skriptressourcen verfügbar, um Objekt anzuhängen.
 	</notification>
+	<notification name="IllegalAttachment">
+		Der Anhang hat einen nicht vorhandenen Punkt auf dem Avatar angefordert. Der Anhang wurde stattdessen auf der Brust angebracht.
+	</notification>
 	<notification name="CantDropItemTrialUser">
 		Ablegen von Objekten hier nicht möglich; versuchen Sie es mit dem kostenlosen Testbereich.
 	</notification>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml
index fcb45e26be..508e87a8b7 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
 	<text name="tell_me_label">
 		Anzeigen:
 	</text>
-	<check_box label="Wenn ich L$ ausgebe oder erhalte" name="notify_money_change_checkbox"/>
+	<check_box label="Wenn ich L$ ausgebe" name="notify_money_spend_checkbox"/>
 	<check_box label="Wenn meine Freunde sich an- oder abmelden" name="friends_online_notify_checkbox"/>
+	<check_box label="Wenn ich L$ erhalte" name="notify_money_received_checkbox"/>
 	<text name="show_label">
 		Immer anzeigen:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
index 06fd22141f..74fb4d0f85 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
 	<text name="BetterText">
 		Besser
 	</text>
+	<slider label="Maximale Avatarkomplexität:" name="IndirectMaxComplexity" tool_tip="Bestimmt, an welchem Punkt ein visuell komplexer Avatar als JellyDoll dargestellt wird"/>
+	<text name="IndirectMaxComplexityText">
+		0
+	</text>
 	<check_box initial_value="true" label="Atmosphären-Shader" name="WindLightUseAtmosShaders"/>
 	<check_box initial_value="true" label="Erweitertes Beleuchtungsmodell" name="UseLightShaders"/>
 	<button label="Einstellungen als Voreinstellung speichern..." name="PrefSaveButton"/>
 	<button label="Voreinstellung laden..." name="PrefLoadButton"/>
+	min_val=&quot;0.125&quot;
 	<button label="Voreinstellung löschen..." name="PrefDeleteButton"/>
 	<button label="Auf empfohlene Einstellungen zurücksetzen" name="Defaults"/>
 	<button label="Erweiterte Einstellungen..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/de/panel_sound_devices.xml b/indra/newview/skins/default/xui/de/panel_sound_devices.xml
index b739b6197f..df4b30383e 100644
--- a/indra/newview/skins/default/xui/de/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/de/panel_sound_devices.xml
@@ -16,9 +16,9 @@
 		Ausgabe
 	</text>
 	<text name="My volume label">
-		Meine Lautstärke:
+		Mikrofonlautstärke:
 	</text>
-	<slider_bar initial_value="1,0" name="mic_volume_slider" tool_tip="Lautstärke mit diesem Regler ändern"/>
+	<slider_bar initial_value="1,0" name="mic_volume_slider" tool_tip="Mit diesem Schieberegler können Sie den Mikrofonpegel ändern"/>
 	<text name="wait_text">
 		Bitte warten
 	</text>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 810022525a..9dd94d2230 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -41,6 +41,9 @@
 		[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
 [[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
 	</string>
+	<string name="BuildConfig">
+		Build-Konfiguration [BUILD_CONFIG]
+	</string>
 	<string name="AboutPosition">
 		Sie befinden sich an [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] auf &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
 SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -72,6 +75,9 @@ Voice-Server-Version: [VOICE_VERSION]
 	<string name="ErrorFetchingServerReleaseNotesURL">
 		Fehler beim Abrufen der URL für die Server-Versionshinweise.
 	</string>
+	<string name="BuildConfiguration">
+		Build-Konfiguration
+	</string>
 	<string name="ProgressRestoring">
 		Wird wiederhergestellt...
 	</string>
@@ -1390,6 +1396,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
 	<string name="BodyPartsRightLeg">
 		Rechtes Bein
 	</string>
+	<string name="BodyPartsEnhancedSkeleton">
+		Erweitertes Skelett
+	</string>
 	<string name="GraphicsQualityLow">
 		Niedrig
 	</string>
@@ -1838,6 +1847,51 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
 	<string name="Avatar Center">
 		Avatar-Mitte
 	</string>
+	<string name="Left Ring Finger">
+		Linker Ringfinger
+	</string>
+	<string name="Right Ring Finger">
+		Rechter Ringfinger
+	</string>
+	<string name="Tail Base">
+		Schwanzansatz
+	</string>
+	<string name="Tail Tip">
+		Schwanzspitze
+	</string>
+	<string name="Left Wing">
+		Linker Flügel
+	</string>
+	<string name="Right Wing">
+		Rechter Flügel
+	</string>
+	<string name="Jaw">
+		Kiefer
+	</string>
+	<string name="Alt Left Ear">
+		Alt. linkes Ohr
+	</string>
+	<string name="Alt Right Ear">
+		Alt. rechtes Ohr
+	</string>
+	<string name="Alt Left Eye">
+		Alt. linkes Auge
+	</string>
+	<string name="Alt Right Eye">
+		Alt. rechtes Auge
+	</string>
+	<string name="Tongue">
+		Zunge
+	</string>
+	<string name="Groin">
+		Leiste
+	</string>
+	<string name="Left Hind Foot">
+		Linker hinterer Fuß
+	</string>
+	<string name="Right Hind Foot">
+		Rechter hinterer Fuß
+	</string>
 	<string name="Invalid Attachment">
 		Ungültige Stelle für Anhang
 	</string>
@@ -2227,12 +2281,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
 	<string name="ATTACH_BELLY">
 		Bauch
 	</string>
-	<string name="ATTACH_RPEC">
-		Rechts
-	</string>
-	<string name="ATTACH_LPEC">
+	<string name="ATTACH_LEFT_PEC">
 		Linke Brust
 	</string>
+	<string name="ATTACH_RIGHT_PEC">
+		Rechte Brust
+	</string>
 	<string name="ATTACH_HUD_CENTER_2">
 		HUD Mitte 2
 	</string>
@@ -2263,6 +2317,51 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
 	<string name="ATTACH_AVATAR_CENTER">
 		Avatar-Mitte
 	</string>
+	<string name="ATTACH_LHAND_RING1">
+		Linker Ringfinger
+	</string>
+	<string name="ATTACH_RHAND_RING1">
+		Rechter Ringfinger
+	</string>
+	<string name="ATTACH_TAIL_BASE">
+		Schwanzansatz
+	</string>
+	<string name="ATTACH_TAIL_TIP">
+		Schwanzspitze
+	</string>
+	<string name="ATTACH_LWING">
+		Linker Flügel
+	</string>
+	<string name="ATTACH_RWING">
+		Rechter Flügel
+	</string>
+	<string name="ATTACH_FACE_JAW">
+		Kiefer
+	</string>
+	<string name="ATTACH_FACE_LEAR">
+		Alt. linkes Ohr
+	</string>
+	<string name="ATTACH_FACE_REAR">
+		Alt. rechtes Ohr
+	</string>
+	<string name="ATTACH_FACE_LEYE">
+		Alt. linkes Auge
+	</string>
+	<string name="ATTACH_FACE_REYE">
+		Alt. rechtes Auge
+	</string>
+	<string name="ATTACH_FACE_TONGUE">
+		Zunge
+	</string>
+	<string name="ATTACH_GROIN">
+		Leiste
+	</string>
+	<string name="ATTACH_HIND_LFOOT">
+		Linker hinterer Fuß
+	</string>
+	<string name="ATTACH_HIND_RFOOT">
+		Rechter hinterer Fuß
+	</string>
 	<string name="CursorPos">
 		Zeile [LINE], Spalte [COLUMN]
 	</string>
@@ -4252,6 +4351,12 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
 	<string name="OfflineStatus">
 		Offline
 	</string>
+	<string name="not_online_msg">
+		Benutzer nicht online – Nachricht wird gespeichert und später zugestellt.
+	</string>
+	<string name="not_online_inventory">
+		Benutzer nicht online – Inventar gespeichert.
+	</string>
 	<string name="answered_call">
 		Ihr Anruf wurde entgegengenommen
 	</string>
diff --git a/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml
index dda95ad070..84b256c8e3 100644
--- a/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
 	<text name="AvatarText">
 		Avatar
 	</text>
-	<slider label="Complejidad máxima:" name="IndirectMaxComplexity" tool_tip="Controla en qué momento un avatar visualmente complejo se dibuja como una sombra de color sólido"/>
+	<slider label="Complejidad máxima:" name="IndirectMaxComplexity" tool_tip="Controla en qué momento un avatar visualmente complejo se dibuja como un &quot;JellyDoll&quot;"/>
 	<text name="IndirectMaxComplexityText">
 		0
 	</text>
diff --git a/indra/newview/skins/default/xui/es/menu_attachment_other.xml b/indra/newview/skins/default/xui/es/menu_attachment_other.xml
index 772b27c9ba..c92583cfc3 100644
--- a/indra/newview/skins/default/xui/es/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/es/menu_attachment_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="MI" name="Send IM..."/>
 	<menu_item_call label="Llamada" name="Call"/>
 	<menu_item_call label="Invitar al grupo" name="Invite..."/>
+	<menu_item_call label="Restablecer esqueleto" name="Reset Skeleton"/>
 	<menu_item_call label="Ignorar" name="Avatar Mute"/>
 	<menu_item_call label="Denunciar" name="abuse"/>
 	<menu_item_call label="Congelar" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_attachment_self.xml b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
index 02819e6816..a4d09a44ab 100644
--- a/indra/newview/skins/default/xui/es/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
 	<menu_item_call label="Editar mi anatomía" name="Edit My Shape"/>
 	<menu_item_call label="Altura del avatar" name="Hover Height"/>
+	<menu_item_call label="Restablecer esqueleto" name="Reset Skeleton"/>
 	<menu_item_call label="Mis amigos" name="Friends..."/>
 	<menu_item_call label="Mis grupos" name="Groups..."/>
 	<menu_item_call label="Mi perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_other.xml b/indra/newview/skins/default/xui/es/menu_avatar_other.xml
index 75cbf5a022..e5aef03911 100644
--- a/indra/newview/skins/default/xui/es/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/es/menu_avatar_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="MI" name="Send IM..."/>
 	<menu_item_call label="Llamada" name="Call"/>
 	<menu_item_call label="Invitar al grupo" name="Invite..."/>
+	<menu_item_call label="Restablecer esqueleto" name="Reset Skeleton"/>
 	<menu_item_call label="Ignorar" name="Avatar Mute"/>
 	<menu_item_call label="Denunciar" name="abuse"/>
 	<menu_item_call label="Congelar" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
index d60a3434cf..ab14966217 100644
--- a/indra/newview/skins/default/xui/es/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
@@ -26,6 +26,7 @@
 	<menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
 	<menu_item_call label="Editar mi anatomía" name="Edit My Shape"/>
 	<menu_item_call label="Altura del avatar" name="Hover Height"/>
+	<menu_item_call label="Restablecer esqueleto" name="Reset Skeleton"/>
 	<menu_item_call label="Mis amigos" name="Friends..."/>
 	<menu_item_call label="Mis grupos" name="Groups..."/>
 	<menu_item_call label="Mi perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index fd248116b8..07c358615c 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -367,6 +367,7 @@
 			<menu_item_check label="Animation Info" name="Animation Info"/>
 			<menu_item_check label="Disable Level Of Detail" name="Disable LOD"/>
 			<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
+			<menu_item_check label="Mostrar los huesos" name="Show Bones"/>
 			<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
 			<menu_item_call label="Debug Avatar Textures" name="Debug Avatar Textures"/>
 		</menu>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index b52497eb85..a67e410814 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -477,6 +477,9 @@ Se ha superado el límite máximo de [MAX_ATTACHMENTS] objetos. Por favor, quít
 	<notification name="CannotWearInfoNotComplete">
 		No puedes vestirte este ítem porque aún no se ha cargado. Por favor, inténtalo de nuevo en un minuto.
 	</notification>
+	<notification name="MustEnterPasswordToLogIn">
+		Escribe la contraseña para poder iniciar sesión.
+	</notification>
 	<notification name="MustHaveAccountToLogIn">
 		Lo sentimos. Se ha quedado algún espacio en blanco.
 Tienes que volver a introducir el nombre de usuario de tu avatar.
@@ -545,6 +548,9 @@ Nota: esto vaciará la caché.
 	<notification name="ChangeConnectionPort">
 		La configuración del puerto tendrá efecto cuando reinicies [APP_NAME].
 	</notification>
+	<notification name="ChangeDeferredDebugSetting">
+		El cambio de configuración del depurador se activará cuando reinicies [APP_NAME].
+	</notification>
 	<notification name="ChangeSkin">
 		Verás la nueva apariencia cuando reinicies [APP_NAME].
 	</notification>
@@ -1370,12 +1376,13 @@ Puedes usar [SECOND_LIFE] de forma normal; los demás residentes te verán corre
 			<ignore name="ignore" text="La ropa está tardando mucho en descargarse"/>
 		</form>
 	</notification>
-	<notification name="RegionAndAgentComplexity">
-		Tu [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complejidad visual] es [AGENT_COMPLEXITY].
+	<notification name="AgentComplexityWithVisibility">
+		La [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complejidad de tu avatar] es [AGENT_COMPLEXITY]. 
 [OVERLIMIT_MSG]
+		<usetemplate ignoretext="Avisarme si la complejidad de mi avatar puede ser excesiva" name="notifyignore"/>
 	</notification>
 	<notification name="AgentComplexity">
-		Tu [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complejidad visual] es [AGENT_COMPLEXITY].
+		La [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complejidad de tu avatar] es [AGENT_COMPLEXITY].
 	</notification>
 	<notification name="FirstRun">
 		Se ha completado la instalación de [SECOND_LIFE].
@@ -1492,6 +1499,10 @@ Cambia la textura [TEXTURE_NUM] por una imagen de 24-bit y 512x512 o menor, y pu
 		¿Realmente quieres predeterminar el terreno actual, haciéndolo el centro de los limites para elevarlo y rebajarlo, y el terreno por defecto para la herramienta &apos;Revertir&apos;?
 		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
 	</notification>
+	<notification name="ConfirmTextureHeights">
+		Vas a usar valores inferiores más grandes que los de Intervalos de elevación. ¿Quieres continuar?
+		<usetemplate canceltext="No preguntar" name="yesnocancelbuttons" notext="Cancelar" yestext="Aceptar"/>
+	</notification>
 	<notification name="MaxAllowedAgentOnRegion">
 		Sólo puedes tener [MAX_AGENTS] residentes autorizados.
 	</notification>
@@ -1729,14 +1740,6 @@ Si estás impaciente por probar las nuevas funciones y correcciones, lee la pág
 		No es posible abandonar el grupo. No puedes abandonarlo porque eres su último propietario. Antes tienes que asignar el papel de propietario a otro miembro.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="GroupDepartError">
-		No se puede abandonar el grupo: [reason].
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GroupDepart">
-		Has abandonado el grupo [group_name].
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
 	<notification name="ConfirmKick">
 		¿Quieres realmente expulsar a todos los residentes de la cuadrícula?
 		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar a todos los Residentes"/>
@@ -2409,6 +2412,10 @@ Linden Lab
 		¿Estás seguro de que quieres borrar de forma permanente el contenido de la Papelera?
 		<usetemplate ignoretext="Confirmar antes de vaciar la Papelera del inventario" name="okcancelignore" notext="Cancelar" yestext="OK"/>
 	</notification>
+	<notification name="TrashIsFull">
+		La papelera está completamente llena. Esto puede causar problemas a la hora de iniciar sesión.
+		<usetemplate name="okcancelbuttons" notext="Vaciaré la papelera más adelante" yestext="Vaciar la papelera"/>
+	</notification>
 	<notification name="ConfirmClearBrowserCache">
 		¿Estás seguro de que quieres borrar tu historial web, de viajes y de búsquedas?
 		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
@@ -2996,7 +3003,7 @@ Si permaneces en esta región serás desconectado.
 
 [MESSAGE]
 
-Del objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propietario: [NAME_SLURL]
+De objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propietario: [NAME_SLURL]
 		<form name="form">
 			<button name="Gotopage" text="Cargar"/>
 			<button name="Cancel" text="Cancelar"/>
@@ -3258,11 +3265,15 @@ Por tu seguridad, serán bloqueadas durante unos segundos.
 	<notification name="AttachmentSaved">
 		Se ha guardado el adjunto.
 	</notification>
-	<notification name="PresetNotSaved">
-		Error al guardar el valor predefinido [NAME].
+	<notification name="AppearanceToXMLSaved">
+		El aspecto se ha guardado como XML en [PATH]
 	</notification>
-	<notification name="PresetNotDeleted">
-		Error al eliminar el valor predefinido [NAME].
+	<notification name="AppearanceToXMLFailed">
+		Error al guardar el aspecto como XML.
+    icon=&quot;notifytip.tga&quot;
+	name=&quot;PresetNotDeleted&quot;
+    type=&quot;notifytip&quot;&gt;
+Error al eliminar el valor predefinido [NAME].
 	</notification>
 	<notification name="UnableToFindHelpTopic">
 		No se ha podido encontrar un tema de ayuda para este elemento.
@@ -4074,6 +4085,9 @@ Prueba otra vez dentro de un minuto.
 	<notification name="CantAttachNotEnoughScriptResources">
 		No hay suficientes recursos de script disponibles para anexar el objeto
 	</notification>
+	<notification name="IllegalAttachment">
+		El anexo ha solicitado un punto que no existe en el avatar. Por tanto, se ha anexado al pecho.
+	</notification>
 	<notification name="CantDropItemTrialUser">
 		No se pueden soltar objetos aquí; inténtalo en la zona de prueba gratuita.
 	</notification>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml
index f34edf149e..c5b27ae766 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
 	<text name="tell_me_label">
 		Avisarme:
 	</text>
-	<check_box label="Cuando gaste o consiga L$" name="notify_money_change_checkbox"/>
+	<check_box label="Cuando gaste L$" name="notify_money_spend_checkbox"/>
 	<check_box label="Cuando mis amigos se conecten o desconecten" name="friends_online_notify_checkbox"/>
+	<check_box label="Cuando gane L$" name="notify_money_received_checkbox"/>
 	<text name="show_label" width="300">
 		Mostrar siempre:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
index f7fb8ab70d..2db4274e44 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
 	<text name="BetterText">
 		Más calidad
 	</text>
+	<slider label="Complejidad máxima de avatar:" name="IndirectMaxComplexity" tool_tip="Controla en qué momento un avatar visualmente complejo se dibuja como un &quot;JellyDoll&quot;"/>
+	<text name="IndirectMaxComplexityText">
+		0
+	</text>
 	<check_box initial_value="true" label="Shaders de la atmósfera" name="WindLightUseAtmosShaders"/>
 	<check_box initial_value="true" label="Modelo de iluminación avanzado" name="UseLightShaders"/>
 	<button label="Guardar configuración como valor predefinido..." name="PrefSaveButton"/>
 	<button label="Cargar predefinido..." name="PrefLoadButton"/>
+	min_val=&quot;0.125&quot;
 	<button label="Eliminar predefinido..." name="PrefDeleteButton"/>
 	<button label="Restablecer la configuración recomendada" name="Defaults"/>
 	<button label="Configuración avanzada..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/es/panel_sound_devices.xml b/indra/newview/skins/default/xui/es/panel_sound_devices.xml
index 9531b99cc8..109dcb565a 100644
--- a/indra/newview/skins/default/xui/es/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/es/panel_sound_devices.xml
@@ -16,9 +16,9 @@
 		Salida
 	</text>
 	<text name="My volume label">
-		Mi volumen:
+		Volumen de mic.:
 	</text>
-	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia el volumen usando este deslizable"/>
+	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia el volumen del micrófono con este controlador deslizante"/>
 	<text name="wait_text">
 		Por favor, espera
 	</text>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index ea6cea060b..4e20793d86 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -32,6 +32,9 @@
 		[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
 [[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
 	</string>
+	<string name="BuildConfig">
+		Configuración de constitución [BUILD_CONFIG]
+	</string>
 	<string name="AboutPosition">
 		Estás en la posición [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1], de [REGION], alojada en &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
 SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -55,7 +58,7 @@ Tarjeta gráfica: [GRAPHICS_CARD]
 Versión de J2C Decoder: [J2C_VERSION]
 Versión de Audio Driver: [AUDIO_DRIVER_VERSION]
 Versión de LLCEFLib/CEF: [LLCEFLIB_VERSION]
-Versión del servidor de voz: [VOICE_VERSION]
+Versión de Voice Server: [VOICE_VERSION]
 	</string>
 	<string name="AboutTraffic">
 		Paquetes perdidos: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
@@ -63,6 +66,9 @@ Versión del servidor de voz: [VOICE_VERSION]
 	<string name="ErrorFetchingServerReleaseNotesURL">
 		Error al obtener la URL de las notas de la versión del servidor.
 	</string>
+	<string name="BuildConfiguration">
+		Configuración de constitución
+	</string>
 	<string name="ProgressRestoring">
 		Restaurando...
 	</string>
@@ -1372,6 +1378,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
 	<string name="BodyPartsRightLeg">
 		Pierna der.
 	</string>
+	<string name="BodyPartsEnhancedSkeleton">
+		Esqueleto mejorado
+	</string>
 	<string name="GraphicsQualityLow">
 		Bajo
 	</string>
@@ -1814,6 +1823,51 @@ Intenta iniciar sesión de nuevo en unos instantes.
 	<string name="Avatar Center">
 		Centro del avatar
 	</string>
+	<string name="Left Ring Finger">
+		Dedo anular izquierdo
+	</string>
+	<string name="Right Ring Finger">
+		Dedo anular derecho
+	</string>
+	<string name="Tail Base">
+		Base de la cola
+	</string>
+	<string name="Tail Tip">
+		Extremo de la cola
+	</string>
+	<string name="Left Wing">
+		Ala izquierda
+	</string>
+	<string name="Right Wing">
+		Ala derecha
+	</string>
+	<string name="Jaw">
+		Mandíbula
+	</string>
+	<string name="Alt Left Ear">
+		Oreja izquierda alternativa
+	</string>
+	<string name="Alt Right Ear">
+		Oreja derecha alternativa
+	</string>
+	<string name="Alt Left Eye">
+		Ojo izquierdo alternativo
+	</string>
+	<string name="Alt Right Eye">
+		Ojo derecho alternativo
+	</string>
+	<string name="Tongue">
+		Lengua
+	</string>
+	<string name="Groin">
+		Ingle
+	</string>
+	<string name="Left Hind Foot">
+		Pata trasera izquierda
+	</string>
+	<string name="Right Hind Foot">
+		Pata trasera derecha
+	</string>
 	<string name="Invalid Attachment">
 		Punto de colocación no válido
 	</string>
@@ -2203,11 +2257,11 @@ Intenta iniciar sesión de nuevo en unos instantes.
 	<string name="ATTACH_BELLY">
 		Vientre
 	</string>
-	<string name="ATTACH_RPEC">
-		Pecho derecho
+	<string name="ATTACH_LEFT_PEC">
+		Pectoral izquierdo
 	</string>
-	<string name="ATTACH_LPEC">
-		Pecho izquierdo
+	<string name="ATTACH_RIGHT_PEC">
+		Pectoral derecho
 	</string>
 	<string name="ATTACH_HUD_CENTER_2">
 		HUD: Centro 2
@@ -2239,6 +2293,51 @@ Intenta iniciar sesión de nuevo en unos instantes.
 	<string name="ATTACH_AVATAR_CENTER">
 		Centro del avatar
 	</string>
+	<string name="ATTACH_LHAND_RING1">
+		Dedo anular izquierdo
+	</string>
+	<string name="ATTACH_RHAND_RING1">
+		Dedo anular derecho
+	</string>
+	<string name="ATTACH_TAIL_BASE">
+		Base de la cola
+	</string>
+	<string name="ATTACH_TAIL_TIP">
+		Extremo de la cola
+	</string>
+	<string name="ATTACH_LWING">
+		Ala izquierda
+	</string>
+	<string name="ATTACH_RWING">
+		Ala derecha
+	</string>
+	<string name="ATTACH_FACE_JAW">
+		Mandíbula
+	</string>
+	<string name="ATTACH_FACE_LEAR">
+		Oreja izquierda alternativa
+	</string>
+	<string name="ATTACH_FACE_REAR">
+		Oreja derecha alternativa
+	</string>
+	<string name="ATTACH_FACE_LEYE">
+		Ojo izquierdo alternativo
+	</string>
+	<string name="ATTACH_FACE_REYE">
+		Ojo derecho alternativo
+	</string>
+	<string name="ATTACH_FACE_TONGUE">
+		Lengua
+	</string>
+	<string name="ATTACH_GROIN">
+		Ingle
+	</string>
+	<string name="ATTACH_HIND_LFOOT">
+		Pata trasera izquierda
+	</string>
+	<string name="ATTACH_HIND_RFOOT">
+		Pata trasera derecha
+	</string>
 	<string name="CursorPos">
 		Línea [LINE], Columna [COLUMN]
 	</string>
@@ -4165,6 +4264,12 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 	<string name="OfflineStatus">
 		Desconectado/a
 	</string>
+	<string name="not_online_msg">
+		El usuario no está conectado: el mensaje se almacenará para entregárselo más tarde.
+	</string>
+	<string name="not_online_inventory">
+		El usuario no está conectado: el inventario se ha guardado.
+	</string>
 	<string name="answered_call">
 		Han respondido a tu llamada
 	</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml
index 5c5af022ca..d3c4dcfa27 100644
--- a/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
 	<text name="AvatarText">
 		Avatar
 	</text>
-	<slider label="Complexité max. :" name="IndirectMaxComplexity" tool_tip="Contrôle à quel moment un avatar complexe est représenté comme un « jelly doll » (forme de couleur unie)"/>
+	<slider label="Complexité max. :" name="IndirectMaxComplexity" tool_tip="Contrôle à quel moment un avatar complexe est représenté comme un « jelly baby »"/>
 	<text name="IndirectMaxComplexityText">
 		0
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
index 20de34250a..fd8112429e 100644
--- a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="Appeler" name="Call"/>
 	<menu_item_call label="Inviter dans le groupe" name="Invite..."/>
+	<menu_item_call label="Réinitialiser le squelette" name="Reset Skeleton"/>
 	<menu_item_call label="Ignorer" name="Avatar Mute"/>
 	<menu_item_call label="Signaler" name="abuse"/>
 	<menu_item_call label="Figer" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
index 1ccba08099..f3089ad3bb 100644
--- a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Modifier ma tenue" name="Edit Outfit"/>
 	<menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/>
 	<menu_item_call label="Hauteur de sustentation" name="Hover Height"/>
+	<menu_item_call label="Réinitialiser le squelette" name="Reset Skeleton"/>
 	<menu_item_call label="Mes amis" name="Friends..."/>
 	<menu_item_call label="Mes groupes" name="Groups..."/>
 	<menu_item_call label="Mon profil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
index d31f205efb..b97c4b0f48 100644
--- a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="Appeler" name="Call"/>
 	<menu_item_call label="Inviter dans le groupe" name="Invite..."/>
+	<menu_item_call label="Réinitialiser le squelette" name="Reset Skeleton"/>
 	<menu_item_call label="Ignorer" name="Avatar Mute"/>
 	<menu_item_call label="Signaler" name="abuse"/>
 	<menu_item_call label="Figer" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
index 1c768a078c..a4c1df8cee 100644
--- a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
@@ -26,6 +26,7 @@
 	<menu_item_call label="Modifier ma tenue" name="Edit Outfit"/>
 	<menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/>
 	<menu_item_call label="Hauteur de sustentation" name="Hover Height"/>
+	<menu_item_call label="Réinitialiser le squelette" name="Reset Skeleton"/>
 	<menu_item_call label="Mes amis" name="Friends..."/>
 	<menu_item_call label="Mes groupes" name="Groups..."/>
 	<menu_item_call label="Mon profil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 9b1f195391..3c9f5c2aa9 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -22,7 +22,6 @@
 			<menu_item_check label="Ne pas déranger" name="Do Not Disturb"/>
 		</menu>
 		<menu_item_call label="Acheter des L$..." name="Buy and Sell L$"/>
-		<menu_item_call label="Boîte d&apos;envoi vendeur..." name="MerchantOutbox"/>
 		<menu_item_call label="Annonces de Place du marché..." name="MarketplaceListings"/>
 		<menu_item_call label="Page d&apos;accueil du compte..." name="Manage My Account">
 			<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=fr"/>
@@ -421,6 +420,7 @@
 			<menu_item_check label="Désactiver LOD" name="Disable LOD"/>
 			<menu_item_check label="Debogage Character Vis" name="Debug Character Vis"/>
 			<menu_item_check label="Afficher le squelette de collision" name="Show Collision Skeleton"/>
+			<menu_item_check label="Voir les os" name="Show Bones"/>
 			<menu_item_check label="Afficher la cible de l&apos;avatar" name="Display Agent Target"/>
 			<menu_item_call label="Dump Attachments" name="Dump Attachments"/>
 			<menu_item_call label="Débogage des textures des avatars" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 080ea741c5..2310fc5611 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -479,6 +479,9 @@ La limite de [MAX_ATTACHMENTS] objets joints a été dépassée. Veuillez commen
 	<notification name="CannotWearInfoNotComplete">
 		Vous ne pouvez pas porter cet article car il n&apos;a pas encore été chargé. Veuillez réessayer dans une minute.
 	</notification>
+	<notification name="MustEnterPasswordToLogIn">
+		Veuillez saisir votre mot de passe pour vous connecter.
+	</notification>
 	<notification name="MustHaveAccountToLogIn">
 		Zut ! Vous avez oublié de fournir certaines informations.
 Vous devez saisir le nom d&apos;utilisateur de votre avatar.
@@ -547,6 +550,9 @@ Remarque : cela videra le cache.
 	<notification name="ChangeConnectionPort">
 		Les paramètres du port prendront effet après le redémarrage de [APP_NAME].
 	</notification>
+	<notification name="ChangeDeferredDebugSetting">
+		Le changement de paramètre de débogage sera effectué au redémarrage de [APP_NAME].
+	</notification>
 	<notification name="ChangeSkin">
 		Le nouveau thème apparaîtra après le redémarrage de [APP_NAME].
 	</notification>
@@ -1361,12 +1367,13 @@ Vous pouvez utiliser [SECOND_LIFE] normalement, les autres résidents vous voien
 			<ignore name="ignore" text="Vos habits prennent du temps à télécharger"/>
 		</form>
 	</notification>
-	<notification name="RegionAndAgentComplexity">
-		Votre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexité visuelle] est [AGENT_COMPLEXITY].
+	<notification name="AgentComplexityWithVisibility">
+		Votre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexité de l&apos;avatar] est [AGENT_COMPLEXITY].
 [OVERLIMIT_MSG]
+		<usetemplate ignoretext="M&apos;avertir si la complexité de l&apos;avatar est trop élevée" name="notifyignore"/>
 	</notification>
 	<notification name="AgentComplexity">
-		Votre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexité visuelle] est [AGENT_COMPLEXITY].
+		Votre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexité de l&apos;avatar] est [AGENT_COMPLEXITY].
 	</notification>
 	<notification name="FirstRun">
 		L&apos;installation de [APP_NAME] est terminée.
@@ -1483,6 +1490,10 @@ suivant votre vitesse de connexion.
 		Etes-vous sûr(e) de vouloir figer le relief actuel, en faire le point central des limites d&apos;élévation/abaissement de relief et la valeur par défaut du bouton Annuler modification ?
 		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
 	</notification>
+	<notification name="ConfirmTextureHeights">
+		Vous vous apprêtez à utiliser des valeurs plus élevées que les limites d&apos;élévation supérieures. Continuer ?
+		<usetemplate canceltext="Ne pas demander" name="yesnocancelbuttons" notext="Annuler" yestext="OK"/>
+	</notification>
 	<notification name="MaxAllowedAgentOnRegion">
 		Vous ne pouvez pas autoriser plus de [MAX_AGENTS] résidents.
 	</notification>
@@ -1720,14 +1731,6 @@ Quitter le groupe ?
 		Impossible de quitter le groupe. Vous ne pouvez pas quitter le groupe car vous en êtes le dernier propriétaire. Vous devez d&apos;abord affecter le rôle de propriétaire à un autre membre.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="GroupDepartError">
-		Impossible de quitter le groupe : [reason].
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GroupDepart">
-		Vous avez quitté le groupe [group_name].
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
 	<notification name="ConfirmKick">
 		Souhaitez-vous vraiment éjecter tous les résidents de la grille ?
 		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous les résidents"/>
@@ -2400,6 +2403,10 @@ Voulez-vous désactiver Ne pas déranger avant de terminer cette transaction ?
 		Êtes-vous certain de vouloir supprimer le contenu de votre corbeille de manière permanente ?
 		<usetemplate ignoretext="Confirmer avant de vider la corbeille" name="okcancelignore" notext="Annuler" yestext="OK"/>
 	</notification>
+	<notification name="TrashIsFull">
+		Votre corbeille déborde. Cela risque de provoquer des problèmes lors de la connexion.
+		<usetemplate name="okcancelbuttons" notext="Je viderai la corbeille plus tard" yestext="Vider la corbeille"/>
+	</notification>
 	<notification name="ConfirmClearBrowserCache">
 		Êtes-vous certain de vouloir supprimer l&apos;historique de vos visites et recherches ?
 		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
@@ -2984,11 +2991,11 @@ Si vous restez dans cette région, vous serez déconnecté(e).
 Si vous restez dans cette région, vous serez déconnecté(e).
 	</notification>
 	<notification name="LoadWebPage">
-		Charger la page Web [URL] ?
+		Charger la page Web [URL] ?
 
 [MESSAGE]
 
-Venant de l&apos;objet : &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propriétaire : [NAME_SLURL]
+Venant de l&apos;objet : &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propriétaire : [NAME_SLURL]
 		<form name="form">
 			<button name="Gotopage" text="Charger"/>
 			<button name="Cancel" text="Annuler"/>
@@ -3257,11 +3264,15 @@ Elles vont être bloquées pendant quelques secondes pour votre sécurité.
 	<notification name="AttachmentSaved">
 		L&apos;élément joint a été sauvegardé.
 	</notification>
-	<notification name="PresetNotSaved">
-		Erreur d’enregistrement du préréglage [NAME].
+	<notification name="AppearanceToXMLSaved">
+		L&apos;apparence a été enregistrée en XML vers [PATH]
 	</notification>
-	<notification name="PresetNotDeleted">
-		Erreur de suppression du préréglage [NAME].
+	<notification name="AppearanceToXMLFailed">
+		Échec d&apos;enregistrement de l&apos;apparence en XML.
+    icon=&quot;notifytip.tga&quot;
+	name=&quot;PresetNotDeleted&quot;
+    type=&quot;notifytip&quot;&gt;
+Erreur de suppression du préréglage [NAME].
 	</notification>
 	<notification name="UnableToFindHelpTopic">
 		Impossible de trouver l&apos;aide.
@@ -4075,6 +4086,9 @@ Veuillez réessayer dans une minute.
 	<notification name="CantAttachNotEnoughScriptResources">
 		Ressources de script insuffisantes pour attacher cet objet.
 	</notification>
+	<notification name="IllegalAttachment">
+		La pièce jointe a demandé un point non existant sur l&apos;avatar. Il a été fixé sur la poitrine.
+	</notification>
 	<notification name="CantDropItemTrialUser">
 		Vous ne pouvez pas déposer d&apos;objets ici. Essayez la zone de période d&apos;essai gratuite.
 	</notification>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml
index 901a92ed1b..85cd958f49 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
 	<text name="tell_me_label">
 		Me prévenir :
 	</text>
-	<check_box label="Quand je dépense ou que je reçois des L$" name="notify_money_change_checkbox"/>
+	<check_box label="Quand je dépense des L$" name="notify_money_spend_checkbox"/>
 	<check_box label="Quand mes amis se connectent ou se déconnectent" name="friends_online_notify_checkbox"/>
+	<check_box label="Quand je reçois des L$" name="notify_money_received_checkbox"/>
 	<text name="show_label">
 		Toujours afficher :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
index 01d89f03f8..2b1e613fe4 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
 	<text name="BetterText">
 		Meilleure
 	</text>
+	<slider label="Complexité max. de l&apos;avatar :" name="IndirectMaxComplexity" tool_tip="Contrôle à quel moment un avatar complexe est représenté comme un « jelly baby »"/>
+	<text name="IndirectMaxComplexityText">
+		0
+	</text>
 	<check_box initial_value="true" label="Effets atmosphériques" name="WindLightUseAtmosShaders"/>
 	<check_box initial_value="true" label="Modèle d’éclairage avancé" name="UseLightShaders"/>
 	<button label="Enregistrer les paramètres comme préréglage..." name="PrefSaveButton"/>
 	<button label="Charger un préréglage..." name="PrefLoadButton"/>
+	min_val=&quot;0,125&quot;
 	<button label="Supprimer un préréglage..." name="PrefDeleteButton"/>
 	<button label="Réinitialiser les paramètres recommandés" name="Defaults"/>
 	<button label="Paramètres avancés" name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_sound_devices.xml b/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
index 460b269f7c..720aaaf3e0 100644
--- a/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
@@ -16,9 +16,9 @@
 		Sortie
 	</text>
 	<text name="My volume label">
-		Mon volume :
+		Volume du micro :
 	</text>
-	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Régler le volume avec le curseur."/>
+	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Régler le volume du micro avec le curseur."/>
 	<text name="wait_text">
 		Veuillez patienter
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index ae091aba39..843467df96 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -41,6 +41,9 @@
 		[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
 [[VIEWER_RELEASE_NOTES_URL] [Notes de version]]
 	</string>
+	<string name="BuildConfig">
+		Configuration de la construction [BUILD_CONFIG]
+	</string>
 	<string name="AboutPosition">
 		Vous êtes à [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] dans [REGION], se trouvant à &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
 SLURL : &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -72,6 +75,9 @@ Version serveur vocal : [VOICE_VERSION]
 	<string name="ErrorFetchingServerReleaseNotesURL">
 		Erreur lors de la récupération de l&apos;URL des notes de version du serveur.
 	</string>
+	<string name="BuildConfiguration">
+		Configuration de la construction
+	</string>
 	<string name="ProgressRestoring">
 		Restauration...
 	</string>
@@ -1390,6 +1396,9 @@ Veuillez réessayer de vous connecter dans une minute.
 	<string name="BodyPartsRightLeg">
 		Jambe droite
 	</string>
+	<string name="BodyPartsEnhancedSkeleton">
+		Squelette amélioré
+	</string>
 	<string name="GraphicsQualityLow">
 		Faible
 	</string>
@@ -1838,6 +1847,51 @@ Veuillez réessayer de vous connecter dans une minute.
 	<string name="Avatar Center">
 		Centre de l&apos;avatar
 	</string>
+	<string name="Left Ring Finger">
+		Annulaire gauche
+	</string>
+	<string name="Right Ring Finger">
+		Annulaire droit
+	</string>
+	<string name="Tail Base">
+		Base de la queue
+	</string>
+	<string name="Tail Tip">
+		Bout de la queue
+	</string>
+	<string name="Left Wing">
+		Aile gauche
+	</string>
+	<string name="Right Wing">
+		Aile droite
+	</string>
+	<string name="Jaw">
+		Mâchoire
+	</string>
+	<string name="Alt Left Ear">
+		Oreille gauche différente
+	</string>
+	<string name="Alt Right Ear">
+		Oreille droite différente
+	</string>
+	<string name="Alt Left Eye">
+		Œil gauche différent
+	</string>
+	<string name="Alt Right Eye">
+		Œil droit différent
+	</string>
+	<string name="Tongue">
+		Langue
+	</string>
+	<string name="Groin">
+		Aine
+	</string>
+	<string name="Left Hind Foot">
+		Pied arrière gauche
+	</string>
+	<string name="Right Hind Foot">
+		Pied arrière droit
+	</string>
 	<string name="Invalid Attachment">
 		Point d&apos;attache non valide
 	</string>
@@ -2227,12 +2281,12 @@ Veuillez réessayer de vous connecter dans une minute.
 	<string name="ATTACH_BELLY">
 		Ventre
 	</string>
-	<string name="ATTACH_RPEC">
-		Pectoral droit
-	</string>
-	<string name="ATTACH_LPEC">
+	<string name="ATTACH_LEFT_PEC">
 		Pectoral gauche
 	</string>
+	<string name="ATTACH_RIGHT_PEC">
+		Pectoral droit
+	</string>
 	<string name="ATTACH_HUD_CENTER_2">
 		HUD centre 2
 	</string>
@@ -2263,6 +2317,51 @@ Veuillez réessayer de vous connecter dans une minute.
 	<string name="ATTACH_AVATAR_CENTER">
 		Centre de l&apos;avatar
 	</string>
+	<string name="ATTACH_LHAND_RING1">
+		Annulaire gauche
+	</string>
+	<string name="ATTACH_RHAND_RING1">
+		Annulaire droit
+	</string>
+	<string name="ATTACH_TAIL_BASE">
+		Base de la queue
+	</string>
+	<string name="ATTACH_TAIL_TIP">
+		Bout de la queue
+	</string>
+	<string name="ATTACH_LWING">
+		Aile gauche
+	</string>
+	<string name="ATTACH_RWING">
+		Aile droite
+	</string>
+	<string name="ATTACH_FACE_JAW">
+		Mâchoire
+	</string>
+	<string name="ATTACH_FACE_LEAR">
+		Oreille gauche différente
+	</string>
+	<string name="ATTACH_FACE_REAR">
+		Oreille droite différente
+	</string>
+	<string name="ATTACH_FACE_LEYE">
+		Œil gauche différent
+	</string>
+	<string name="ATTACH_FACE_REYE">
+		Œil droit différent
+	</string>
+	<string name="ATTACH_FACE_TONGUE">
+		Langue
+	</string>
+	<string name="ATTACH_GROIN">
+		Aine
+	</string>
+	<string name="ATTACH_HIND_LFOOT">
+		Pied arrière gauche
+	</string>
+	<string name="ATTACH_HIND_RFOOT">
+		Pied arrière droit
+	</string>
 	<string name="CursorPos">
 		Ligne [LINE], colonne [COLUMN]
 	</string>
@@ -4252,6 +4351,12 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 	<string name="OfflineStatus">
 		Hors ligne
 	</string>
+	<string name="not_online_msg">
+		Utilisateur non connecté -  le message sera enregistré et livré plus tard.
+	</string>
+	<string name="not_online_inventory">
+		Utilisateur non connecté - l&apos;inventaire a été enregistré
+	</string>
 	<string name="answered_call">
 		Votre appel a fait l&apos;objet d&apos;une réponse
 	</string>
diff --git a/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml
index 5baba9fced..0568891264 100644
--- a/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
 	<text name="AvatarText">
 		Avatar
 	</text>
-	<slider label="Complessità massima:" name="IndirectMaxComplexity" tool_tip="Definisce il punto in cui un avatar dall&apos;aspetto complesso viene visualizzato come una forma senza dettagli"/>
+	<slider label="Complessità massima:" name="IndirectMaxComplexity" tool_tip="Definisce il punto in cui un avatar dall&apos;aspetto complesso viene visualizzato come JellyDoll"/>
 	<text name="IndirectMaxComplexityText">
 		0
 	</text>
diff --git a/indra/newview/skins/default/xui/it/menu_attachment_other.xml b/indra/newview/skins/default/xui/it/menu_attachment_other.xml
index 60cdd2a91d..5c017a92b5 100644
--- a/indra/newview/skins/default/xui/it/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/it/menu_attachment_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="Chiama" name="Call"/>
 	<menu_item_call label="Invita al gruppo" name="Invite..."/>
+	<menu_item_call label="Ripristina scheletro" name="Reset Skeleton"/>
 	<menu_item_call label="Blocca" name="Avatar Mute"/>
 	<menu_item_call label="Segnala" name="abuse"/>
 	<menu_item_call label="Congela" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/it/menu_attachment_self.xml b/indra/newview/skins/default/xui/it/menu_attachment_self.xml
index 1539fbafa1..b1ca55b093 100644
--- a/indra/newview/skins/default/xui/it/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/it/menu_attachment_self.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Modifica il mio vestiario" name="Edit Outfit"/>
 	<menu_item_call label="Modifica la figura corporea" name="Edit My Shape"/>
 	<menu_item_call label="Altezza di volo" name="Hover Height"/>
+	<menu_item_call label="Ripristina scheletro" name="Reset Skeleton"/>
 	<menu_item_call label="I miei amici..." name="Friends..."/>
 	<menu_item_call label="I miei gruppi" name="Groups..."/>
 	<menu_item_call label="Il mio profilo" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_other.xml b/indra/newview/skins/default/xui/it/menu_avatar_other.xml
index 7042e52943..12e808195e 100644
--- a/indra/newview/skins/default/xui/it/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/it/menu_avatar_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="Chiama" name="Call"/>
 	<menu_item_call label="Invita al gruppo" name="Invite..."/>
+	<menu_item_call label="Ripristina scheletro" name="Reset Skeleton"/>
 	<menu_item_call label="Blocca" name="Avatar Mute"/>
 	<menu_item_call label="Segnala" name="abuse"/>
 	<menu_item_call label="Congela" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_self.xml b/indra/newview/skins/default/xui/it/menu_avatar_self.xml
index 0c9663fd4c..e48449a04c 100644
--- a/indra/newview/skins/default/xui/it/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/it/menu_avatar_self.xml
@@ -26,6 +26,7 @@
 	<menu_item_call label="Modifica il mio vestiario" name="Edit Outfit"/>
 	<menu_item_call label="Modifica la figura corporea" name="Edit My Shape"/>
 	<menu_item_call label="Altezza di volo" name="Hover Height"/>
+	<menu_item_call label="Ripristina scheletro" name="Reset Skeleton"/>
 	<menu_item_call label="I miei amici..." name="Friends..."/>
 	<menu_item_call label="I miei gruppi" name="Groups..."/>
 	<menu_item_call label="Il mio profilo" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index d52b022c49..90ea601259 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -22,7 +22,6 @@
 			<menu_item_check label="Non disturbare" name="Do Not Disturb"/>
 		</menu>
 		<menu_item_call label="Acquista L$..." name="Buy and Sell L$"/>
-		<menu_item_call label="Casella venditore in uscita..." name="MerchantOutbox"/>
 		<menu_item_call label="Annunci Marketplace..." name="MarketplaceListings"/>
 		<menu_item_call label="Dashboard dell&apos;account..." name="Manage My Account">
 			<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=it"/>
@@ -368,6 +367,7 @@
 			<menu_item_check label="Informazioni sull&apos;animazione" name="Animation Info"/>
 			<menu_item_check label="Disabilita livello di dettaglio" name="Disable LOD"/>
 			<menu_item_check label="Mostra schemi collisione" name="Show Collision Skeleton"/>
+			<menu_item_check label="Mostra ossa" name="Show Bones"/>
 			<menu_item_check label="Mostra bersaglio" name="Display Agent Target"/>
 			<menu_item_call label="Debug texture dell&apos;avatar" name="Debug Avatar Textures"/>
 		</menu>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 358f38a137..3a29e4d32f 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -480,6 +480,9 @@ Superato il limite di oggetti collegati [MAX_ATTACHMENTS]. Per favore prima stac
 	<notification name="CannotWearInfoNotComplete">
 		Non puoi indossare quell&apos;elemento perchè non è ancora stato caricato. Riprova fra un minuto.
 	</notification>
+	<notification name="MustEnterPasswordToLogIn">
+		Inserisci la tua password per accedere.
+	</notification>
 	<notification name="MustHaveAccountToLogIn">
 		Spiacenti. Un campo è vuoto.
 Inserisci il Nome utente del tuo avatar.
@@ -548,6 +551,9 @@ Nota: questa operazione cancellerà la cache.
 	<notification name="ChangeConnectionPort">
 		Le impostazioni della porta avranno effetto dopo il riavvio di [APP_NAME].
 	</notification>
+	<notification name="ChangeDeferredDebugSetting">
+		La modifica della impostazione di debug avrà effetto dopo il riavvio di [APP_NAME].
+	</notification>
 	<notification name="ChangeSkin">
 		La nuova pelle comparirà dopo il riavvio di [APP_NAME].
 	</notification>
@@ -1366,12 +1372,13 @@ Puoi comunque usare [SECOND_LIFE] normalmente e gli altri residenti ti vedranno
 			<ignore name="ignore" text="Lo scaricamento sta richiedendo parecchio tempo"/>
 		</form>
 	</notification>
-	<notification name="RegionAndAgentComplexity">
-		La tua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complessità visiva] è [AGENT_COMPLEXITY].
+	<notification name="AgentComplexityWithVisibility">
+		La [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complessità del tuo avatar] è [AGENT_COMPLEXITY].
 [OVERLIMIT_MSG]
+		<usetemplate ignoretext="Avvisami se la complessità del mio avatar è eccessiva" name="notifyignore"/>
 	</notification>
 	<notification name="AgentComplexity">
-		La tua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complessità visiva] è [AGENT_COMPLEXITY].
+		La [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complessità del tuo avatar] è [AGENT_COMPLEXITY].
 	</notification>
 	<notification name="FirstRun">
 		L&apos;installazione di [APP_NAME] è terminata.
@@ -1486,6 +1493,10 @@ Sostituisci la texture [TEXTURE_NUM] con una a 24-bit 512x512 oppure con una imm
 		Vuoi veramente impostare come base il terreno corrente, impostarlo come riferimento per i limiti dei rialzi/abbassamenti di tutto il territorio ed il suo valore impostato come base per lo strumento &apos;Ripristina&apos;?
 		<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
 	</notification>
+	<notification name="ConfirmTextureHeights">
+		Stai per usare valori bassi maggiori dei valori alti di Intervalli altitudine. Vuoi procedere?
+		<usetemplate canceltext="Non chiedere" name="yesnocancelbuttons" notext="Annulla" yestext="OK"/>
+	</notification>
 	<notification name="MaxAllowedAgentOnRegion">
 		Puoi avere al massimo [MAX_AGENTS] residenti consentiti.
 	</notification>
@@ -1724,14 +1735,6 @@ Lasciare il gruppo?
 		Impossibile abbandonare il gruppo. Non puoi abbandonare il gruppo perché sei l&apos;ultimo proprietario del gruppo. Devi prima assegnare a un altro membro il ruolo di proprietario.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="GroupDepartError">
-		Impossibile abbandonare il gruppo: [reason].
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GroupDepart">
-		Hai abbandonato il gruppo [group_name].
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
 	<notification name="ConfirmKick">
 		Vuoi veramente espellere tutti i residenti dalla griglia?
 		<usetemplate name="okcancelbuttons" notext="Annulla" yestext="Espelli tutti i residenti"/>
@@ -2406,6 +2409,10 @@ Vuoi disattivare la modalità Non disturbare prima di completare questa transazi
 		Vuoi veramente eliminare in modo permanente il contenuto del tuo Cestino?
 		<usetemplate ignoretext="Conferma prima di svuotare la cartella del Cestino inventario" name="okcancelignore" notext="Annulla" yestext="OK"/>
 	</notification>
+	<notification name="TrashIsFull">
+		Il cestino è troppo pieno. Ciò potrebbe causare problemi durante l&apos;accesso.
+		<usetemplate name="okcancelbuttons" notext="Svuota il cestino più tardi" yestext="Svuota il cestino adesso"/>
+	</notification>
 	<notification name="ConfirmClearBrowserCache">
 		Vuoi veramente eliminare la cronologia viaggi, web e ricerche fatte?
 		<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
@@ -3262,11 +3269,15 @@ Per sicurezza, verranno bloccati per alcuni secondi.
 	<notification name="AttachmentSaved">
 		L&apos;elemento da collegare è stato salvato.
 	</notification>
-	<notification name="PresetNotSaved">
-		Errore durante il salvataggio del valore predefinito [NAME].
+	<notification name="AppearanceToXMLSaved">
+		L&apos;aspetto è stato salvato in XML su [PATH]
 	</notification>
-	<notification name="PresetNotDeleted">
-		Errore durante l&apos;eliminazione del valore predefinito [NAME].
+	<notification name="AppearanceToXMLFailed">
+		L&apos;aspetto non è stato salvato in XML.
+    icon=&quot;notifytip.tga&quot;
+	name=&quot;PresetNotDeleted&quot;
+    type=&quot;notifytip&quot;&gt;
+Errore nella cancellazione del valore predefinito [NAME].
 	</notification>
 	<notification name="UnableToFindHelpTopic">
 		Impossibile trovare l&apos;argomento nell&apos;aiuto per questo elemento.
@@ -4081,6 +4092,9 @@ Riprova tra un minuto.
 	<notification name="CantAttachNotEnoughScriptResources">
 		Risorse di script non sufficienti per collegare l&apos;oggetto.
 	</notification>
+	<notification name="IllegalAttachment">
+		Il collegamento ha richiesto un punto sull&apos;avatar che non esiste. È stato collegato al petto.
+	</notification>
 	<notification name="CantDropItemTrialUser">
 		Non puoi lasciare oggetti qui, prova la zona Prova gratuita.
 	</notification>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml
index fd1fd57761..ca83490b02 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
 	<text name="tell_me_label">
 		Avvisami:
 	</text>
-	<check_box label="Quando spendo o ottengo L$" name="notify_money_change_checkbox"/>
+	<check_box label="Quando spendo $" name="notify_money_spend_checkbox"/>
 	<check_box label="Quando i miei amici entrano o escono da Second Life" name="friends_online_notify_checkbox"/>
+	<check_box label="Quando ottengo $" name="notify_money_received_checkbox"/>
 	<text name="show_label">
 		Mostra sempre:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
index a042c43431..4fa1835b0e 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
 	<text name="BetterText">
 		Migliore
 	</text>
+	<slider label="Massima conplessità dell&apos;avatar:" name="IndirectMaxComplexity" tool_tip="Definisce il punto in cui un avatar dall&apos;aspetto complesso viene visualizzato come JellyDoll"/>
+	<text name="IndirectMaxComplexityText">
+		0
+	</text>
 	<check_box initial_value="true" label="Shader atmosfera..." name="WindLightUseAtmosShaders"/>
 	<check_box initial_value="true" label="Modello illuminazione avanzato" name="UseLightShaders"/>
 	<button label="Salva impostazioni come valori predefiniti..." name="PrefSaveButton"/>
 	<button label="Carica valore predefinito..." name="PrefLoadButton"/>
+	min_val=&quot;0.125&quot;
 	<button label="Elimina valore predefinito..." name="PrefDeleteButton"/>
 	<button label="Ripristina impostazioni consigliate" name="Defaults"/>
 	<button label="Impostazioni avanzate..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/it/panel_sound_devices.xml b/indra/newview/skins/default/xui/it/panel_sound_devices.xml
index b1934fd515..83df46f381 100644
--- a/indra/newview/skins/default/xui/it/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/it/panel_sound_devices.xml
@@ -16,9 +16,9 @@
 		Output
 	</text>
 	<text name="My volume label">
-		Il mio volume:
+		Volume microfono:
 	</text>
-	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia il volume utilizzando questa barra"/>
+	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia il livello del microfono utilizzando questa barra"/>
 	<text name="wait_text">
 		Attendi
 	</text>
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index effd6f5040..bb2f221db9 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -38,6 +38,9 @@
 		[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
 [[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
 	</string>
+	<string name="BuildConfig">
+		Configurazione struttura [BUILD_CONFIG]
+	</string>
 	<string name="AboutPosition">
 		Tu sei a [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] che si trova a &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
 SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -69,6 +72,9 @@ Versione server voce: [VOICE_VERSION]
 	<string name="ErrorFetchingServerReleaseNotesURL">
 		Errore nel recupero URL note rilascio versione
 	</string>
+	<string name="BuildConfiguration">
+		Costruisci configurazione
+	</string>
 	<string name="ProgressRestoring">
 		Ripristino in corso...
 	</string>
@@ -1381,6 +1387,9 @@ Prova ad accedere nuovamente tra un minuto.
 	<string name="BodyPartsRightLeg">
 		Gamba destra
 	</string>
+	<string name="BodyPartsEnhancedSkeleton">
+		Scheletro avanzato
+	</string>
 	<string name="GraphicsQualityLow">
 		Basso
 	</string>
@@ -1823,6 +1832,51 @@ Prova ad accedere nuovamente tra un minuto.
 	<string name="Avatar Center">
 		Centro avatar
 	</string>
+	<string name="Left Ring Finger">
+		Anulare sinistro
+	</string>
+	<string name="Right Ring Finger">
+		Anulare destro
+	</string>
+	<string name="Tail Base">
+		Base della coda
+	</string>
+	<string name="Tail Tip">
+		Punta della coda
+	</string>
+	<string name="Left Wing">
+		Ala sinistra
+	</string>
+	<string name="Right Wing">
+		Ala destra
+	</string>
+	<string name="Jaw">
+		Mandibola
+	</string>
+	<string name="Alt Left Ear">
+		Altro orecchio sinistro
+	</string>
+	<string name="Alt Right Ear">
+		Altro orecchio destro
+	</string>
+	<string name="Alt Left Eye">
+		Altro occhio sinistro
+	</string>
+	<string name="Alt Right Eye">
+		Altro occhio destro
+	</string>
+	<string name="Tongue">
+		Lingua
+	</string>
+	<string name="Groin">
+		Inguine
+	</string>
+	<string name="Left Hind Foot">
+		Piede posteriore sinistro
+	</string>
+	<string name="Right Hind Foot">
+		Piede posteriore destro
+	</string>
 	<string name="Invalid Attachment">
 		Punto di collegamento non valido
 	</string>
@@ -2212,12 +2266,12 @@ Prova ad accedere nuovamente tra un minuto.
 	<string name="ATTACH_BELLY">
 		Addome
 	</string>
-	<string name="ATTACH_RPEC">
-		Petto destro
-	</string>
-	<string name="ATTACH_LPEC">
+	<string name="ATTACH_LEFT_PEC">
 		Petto sinistro
 	</string>
+	<string name="ATTACH_RIGHT_PEC">
+		Petto destro
+	</string>
 	<string name="ATTACH_HUD_CENTER_2">
 		HUD in centro 2
 	</string>
@@ -2248,6 +2302,51 @@ Prova ad accedere nuovamente tra un minuto.
 	<string name="ATTACH_AVATAR_CENTER">
 		Centro avatar
 	</string>
+	<string name="ATTACH_LHAND_RING1">
+		Anulare sinistro
+	</string>
+	<string name="ATTACH_RHAND_RING1">
+		Anulare destro
+	</string>
+	<string name="ATTACH_TAIL_BASE">
+		Base della coda
+	</string>
+	<string name="ATTACH_TAIL_TIP">
+		Punta della coda
+	</string>
+	<string name="ATTACH_LWING">
+		Ala sinistra
+	</string>
+	<string name="ATTACH_RWING">
+		Ala destra
+	</string>
+	<string name="ATTACH_FACE_JAW">
+		Mandibola
+	</string>
+	<string name="ATTACH_FACE_LEAR">
+		Altro orecchio sinistro
+	</string>
+	<string name="ATTACH_FACE_REAR">
+		Altro orecchio destro
+	</string>
+	<string name="ATTACH_FACE_LEYE">
+		Altro occhio sinistro
+	</string>
+	<string name="ATTACH_FACE_REYE">
+		Altro occhio destro
+	</string>
+	<string name="ATTACH_FACE_TONGUE">
+		Lingua
+	</string>
+	<string name="ATTACH_GROIN">
+		Inguine
+	</string>
+	<string name="ATTACH_HIND_LFOOT">
+		Piede posteriore sinistro
+	</string>
+	<string name="ATTACH_HIND_RFOOT">
+		Piede posteriore destro
+	</string>
 	<string name="CursorPos">
 		Riga [LINE], Colonna [COLUMN]
 	</string>
@@ -4174,6 +4273,12 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
 	<string name="OfflineStatus">
 		Offline
 	</string>
+	<string name="not_online_msg">
+		Utente non online - il messaggio verrà memorizzato e inviato più tardi.
+	</string>
+	<string name="not_online_inventory">
+		Utente non online - l&apos;inventario è stato salvato
+	</string>
 	<string name="answered_call">
 		Risposto alla chiamata
 	</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml
index a95c45c275..db4e086c13 100644
--- a/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
 	<text name="AvatarText">
 		アバター
 	</text>
-	<slider label="最大の複雑さ:" name="IndirectMaxComplexity" tool_tip="どの時点で複雑な表示のアバターをベタ色の人形として表示するかを管理します"/>
+	<slider label="最大の複雑さ:" name="IndirectMaxComplexity" tool_tip="どの点で視覚的に複雑なアバターを JellyDoll として描くかを制御します"/>
 	<text name="IndirectMaxComplexityText">
 		0
 	</text>
diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml
index 7705dd9090..78c36a4392 100644
--- a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="コール" name="Call"/>
 	<menu_item_call label="グループに招待" name="Invite..."/>
+	<menu_item_call label="スケルトンをリセット" name="Reset Skeleton"/>
 	<menu_item_call label="ブロック" name="Avatar Mute"/>
 	<menu_item_call label="報告" name="abuse"/>
 	<menu_item_call label="フリーズ" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
index e7aa3cfc30..ba46f91504 100644
--- a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="アウトフィットの編集" name="Edit Outfit"/>
 	<menu_item_call label="シェイプの編集" name="Edit My Shape"/>
 	<menu_item_call label="ホバー高さ" name="Hover Height"/>
+	<menu_item_call label="スケルトンをリセット" name="Reset Skeleton"/>
 	<menu_item_call label="フレンド" name="Friends..."/>
 	<menu_item_call label="グループ" name="Groups..."/>
 	<menu_item_call label="プロフィール" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml
index 482f2bdaa5..b7e0537866 100644
--- a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="コール" name="Call"/>
 	<menu_item_call label="グループに招待" name="Invite..."/>
+	<menu_item_call label="スケルトンをリセット" name="Reset Skeleton"/>
 	<menu_item_call label="ブロック" name="Avatar Mute"/>
 	<menu_item_call label="報告" name="abuse"/>
 	<menu_item_call label="フリーズ" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
index a14cfd5876..a3847ed555 100644
--- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
@@ -26,6 +26,7 @@
 	<menu_item_call label="アウトフィットを編集" name="Edit Outfit"/>
 	<menu_item_call label="シェイプを編集" name="Edit My Shape"/>
 	<menu_item_call label="ホバー高さ" name="Hover Height"/>
+	<menu_item_call label="スケルトンをリセット" name="Reset Skeleton"/>
 	<menu_item_call label="フレンド" name="Friends..."/>
 	<menu_item_call label="グループ" name="Groups..."/>
 	<menu_item_call label="プロフィール" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index 3c2e294868..c2ae77bef2 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -22,7 +22,6 @@
 			<menu_item_check label="着信拒否" name="Do Not Disturb"/>
 		</menu>
 		<menu_item_call label="L$ の購入..." name="Buy and Sell L$"/>
-		<menu_item_call label="マーチャントアウトボックス..." name="MerchantOutbox"/>
 		<menu_item_call label="マーケティングプレイスのリスト..." name="MarketplaceListings"/>
 		<menu_item_call label="マイアカウント..." name="Manage My Account">
 			<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=ja"/>
@@ -421,6 +420,7 @@
 			<menu_item_check label="LOD を無効にする" name="Disable LOD"/>
 			<menu_item_check label="キャラクター Vis のデバッグ" name="Debug Character Vis"/>
 			<menu_item_check label="骨組みの衝突判定を表示する" name="Show Collision Skeleton"/>
+			<menu_item_check label="骨を表示" name="Show Bones"/>
 			<menu_item_check label="エージェントのターゲットを表示する" name="Display Agent Target"/>
 			<menu_item_call label="アタッチメントをダンプ" name="Dump Attachments"/>
 			<menu_item_call label="アバターテクスチャをデバッグ" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index a573e86e5f..54e5f29621 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -498,6 +498,9 @@ L$ が不足しているのでこのグループに参加することができ
 	<notification name="CannotWearInfoNotComplete">
 		まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。
 	</notification>
+	<notification name="MustEnterPasswordToLogIn">
+		ログインするためにパスワードを入力してください
+	</notification>
 	<notification name="MustHaveAccountToLogIn">
 		注意:記入漏れの箇所があります。
 アバターのユーザー名を入力してください。
@@ -566,6 +569,9 @@ L$ が不足しているのでこのグループに参加することができ
 	<notification name="ChangeConnectionPort">
 		ポートの設定は [APP_NAME] を再起動後に反映されます。
 	</notification>
+	<notification name="ChangeDeferredDebugSetting">
+		デバッグ設定の変更は [APP_NAME] を再起動後に反映されます。
+	</notification>
 	<notification name="ChangeSkin">
 		新しいスキンは [APP_NAME] を再起動後に表示されます。
 	</notification>
@@ -1395,12 +1401,13 @@ https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries を参照してく
 			<ignore name="ignore" text="衣類がダウンロードされるまで時間がかかっているとき"/>
 		</form>
 	</notification>
-	<notification name="RegionAndAgentComplexity">
-		ご使用の [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 表示の複雑さ] は [AGENT_COMPLEXITY] です。
+	<notification name="AgentComplexityWithVisibility">
+		あなたの [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] は [AGENT_COMPLEXITY] です。
 [OVERLIMIT_MSG]
+		<usetemplate ignoretext="アバターの複雑度が高すぎる場合は警告する" name="notifyignore"/>
 	</notification>
 	<notification name="AgentComplexity">
-		ご使用の [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 表示の複雑さ] は [AGENT_COMPLEXITY] です。
+		あなたの [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] は [AGENT_COMPLEXITY] です。
 	</notification>
 	<notification name="FirstRun">
 		[APP_NAME] のインストールが完了しました。
@@ -1519,6 +1526,10 @@ SHA1 フィンガープリント: [MD5_DIGEST]
 操作を続行しますか?
 		<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
 	</notification>
+	<notification name="ConfirmTextureHeights">
+		使用しようとしている隆起範囲の低い値は高い値よりも大きくなっています。それでも続けますか?
+		<usetemplate canceltext="聞かないでください" name="yesnocancelbuttons" notext="取り消し" yestext="Ok"/>
+	</notification>
 	<notification name="MaxAllowedAgentOnRegion">
 		許可住人は [MAX_AGENTS] 人までです。
 	</notification>
@@ -1754,14 +1765,6 @@ http://secondlife.com/download から最新バージョンをダウンロード
 		グループを抜けることができません。グループの最後のオーナーであるため、グループを抜けることができません。最初に、別のメンバーをオーナーの役割に割り当ててください。
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="GroupDepartError">
-		グループを抜けることができません: [reason]。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GroupDepart">
-		グループ [group_name] を抜けました。
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
 	<notification name="ConfirmKick">
 		本当に住人全員をグリッドから追い出しますか?
 		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="住人全員を追い出す"/>
@@ -2442,6 +2445,10 @@ Linden Lab
 		ごみ箱の中身をすべて削除しますか?
 		<usetemplate ignoretext="インベントリのごみ箱フォルダを空にする前の確認" name="okcancelignore" notext="キャンセル" yestext="OK"/>
 	</notification>
+	<notification name="TrashIsFull">
+		ゴミ箱があふれています。これはログイン時に問題を引き起こします。
+		<usetemplate name="okcancelbuttons" notext="後でゴミ箱を空にする" yestext="今すぐゴミ箱を空にする"/>
+	</notification>
 	<notification name="ConfirmClearBrowserCache">
 		トラベル、Web、検索の履歴をすべて削除しますか?
 		<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
@@ -3032,7 +3039,7 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
 
 [MESSAGE]
 
-送信元のオブジェクト:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;、所有者:[NAME_SLURL]
+送信元のオブジェクト:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;、所有者:[NAME_SLURL]
 		<form name="form">
 			<button name="Gotopage" text="ページに移動"/>
 			<button name="Cancel" text="取り消し"/>
@@ -3298,11 +3305,15 @@ M キーを押して変更します。
 	<notification name="AttachmentSaved">
 		アタッチメントが保存されました。
 	</notification>
-	<notification name="PresetNotSaved">
-		プリセット [NAME] の保存中にエラーが発生しました。
+	<notification name="AppearanceToXMLSaved">
+		外観が XML で [PATH] に保存されました
 	</notification>
-	<notification name="PresetNotDeleted">
-		プリセット [NAME] の削除中にエラーが発生しました。
+	<notification name="AppearanceToXMLFailed">
+		外観を XML に保存できませんでした。
+    icon=&quot;notifytip.tga&quot;
+	name=&quot;PresetNotDeleted&quot;
+    type=&quot;notifytip&quot;&gt;
+プリセット [NAME] の削除エラー。
 	</notification>
 	<notification name="UnableToFindHelpTopic">
 		ヘルプトピックが見つかりませんでした。
@@ -4111,6 +4122,9 @@ M キーを押して変更します。
 	<notification name="CantAttachNotEnoughScriptResources">
 		オブジェクトの着用に使用できるスクリプトリソースが足りません。
 	</notification>
+	<notification name="IllegalAttachment">
+		添付ファイルはアバターの存在しない点を要求しました。代わりに胸に添付されていました。
+	</notification>
 	<notification name="CantDropItemTrialUser">
 		オブジェクトをここにドロップできません。フリートライアル領域をお試しください。
 	</notification>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml
index 7fd2e31698..4c2906cc18 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
 	<text name="tell_me_label">
 		知らせる:
 	</text>
-	<check_box label="リンデンドルを使用・受け取るとき" name="notify_money_change_checkbox"/>
+	<check_box label="L$ を使用する場合" name="notify_money_spend_checkbox"/>
 	<check_box label="フレンドがログイン・ログアウトするとき" name="friends_online_notify_checkbox"/>
+	<check_box label="L$ を手に入れる場合" name="notify_money_received_checkbox"/>
 	<text name="show_label" width="300">
 		常に表示するメッセージ:
 	</text>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
index 8fbe9b56b9..61d914135d 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
 	<text name="BetterText">
 		遅い
 	</text>
+	<slider label="アバターの最大複雑度:" name="IndirectMaxComplexity" tool_tip="どの点で視覚的に複雑なアバターを JellyDoll として描くかを制御します"/>
+	<text name="IndirectMaxComplexityText">
+		0
+	</text>
 	<check_box initial_value="true" label="周囲 (大気) シェーダー" name="WindLightUseAtmosShaders"/>
 	<check_box initial_value="true" label="高度なライティングモデル" name="UseLightShaders"/>
 	<button label="設定をプリセットとして保存..." name="PrefSaveButton"/>
 	<button label="プリセットをロード..." name="PrefLoadButton"/>
+	min_val=&quot;0.125&quot;
 	<button label="事前設定を削除..." name="PrefDeleteButton"/>
 	<button label="推奨設定にリセット" name="Defaults"/>
 	<button label="詳細設定..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_sound_devices.xml b/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
index 0824504235..d57e6c796c 100644
--- a/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
@@ -16,9 +16,9 @@
 		出力
 	</text>
 	<text name="My volume label">
-		私の音量:
+		マイク音量:
 	</text>
-	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="スライダーを使って音量を調節します"/>
+	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="スライダーを使ってマイクレベルを調節します"/>
 	<text name="wait_text">
 		しばらくお待ちください。
 	</text>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 1ad977fe88..904ce3880a 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -38,7 +38,11 @@
 		グラフィックを初期化できませんでした。グラフィックドライバを更新してください。
 	</string>
 	<string name="AboutHeader">
-		[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
+		[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
+[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
+	</string>
+	<string name="BuildConfig">
+		ビルド構成 [BUILD_CONFIG]
 	</string>
 	<string name="AboutPosition">
 		あなたの現在地は、[POSITION_LOCAL_0,number,1]、[POSITION_LOCAL_1,number,1]、[POSITION_LOCAL_2,number,1] の [REGION] です。位置は &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; です。([HOSTIP])
@@ -62,8 +66,8 @@ OS バージョン:[OS_VERSION]
 
 J2C デコーダバージョン:[J2C_VERSION]
 オーディオドライババージョン:[AUDIO_DRIVER_VERSION]
-LLCEFLib/CEF バージョン: [LLCEFLIB_VERSION]
-ボイスサーバーバージョン: [VOICE_VERSION]
+LLCEFLib/CEF バージョン: [LLCEFLIB_VERSION]
+ボイスサーバーバージョン:[VOICE_VERSION]
 	</string>
 	<string name="AboutTraffic">
 		パケットロス:[PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
@@ -71,6 +75,9 @@ LLCEFLib/CEF バージョン: [LLCEFLIB_VERSION]
 	<string name="ErrorFetchingServerReleaseNotesURL">
 		サーバーのリリースノートの URL を取得中にエラーが発生しました。
 	</string>
+	<string name="BuildConfiguration">
+		ビルド構成
+	</string>
 	<string name="ProgressRestoring">
 		復元中です...
 	</string>
@@ -1389,6 +1396,9 @@ support@secondlife.com にお問い合わせください。
 	<string name="BodyPartsRightLeg">
 		右脚
 	</string>
+	<string name="BodyPartsEnhancedSkeleton">
+		拡張スケルトン
+	</string>
 	<string name="GraphicsQualityLow">
 		低
 	</string>
@@ -1837,6 +1847,51 @@ support@secondlife.com にお問い合わせください。
 	<string name="Avatar Center">
 		アバターの中央
 	</string>
+	<string name="Left Ring Finger">
+		左薬指
+	</string>
+	<string name="Right Ring Finger">
+		右薬指
+	</string>
+	<string name="Tail Base">
+		しっぽのベース
+	</string>
+	<string name="Tail Tip">
+		しっぽの先
+	</string>
+	<string name="Left Wing">
+		左の翼
+	</string>
+	<string name="Right Wing">
+		右の翼
+	</string>
+	<string name="Jaw">
+		顎
+	</string>
+	<string name="Alt Left Ear">
+		代わりの左耳
+	</string>
+	<string name="Alt Right Ear">
+		代わりの右耳
+	</string>
+	<string name="Alt Left Eye">
+		代わりの左目
+	</string>
+	<string name="Alt Right Eye">
+		代わりの右目
+	</string>
+	<string name="Tongue">
+		舌
+	</string>
+	<string name="Groin">
+		脚の付け根
+	</string>
+	<string name="Left Hind Foot">
+		左後足
+	</string>
+	<string name="Right Hind Foot">
+		右後足
+	</string>
 	<string name="Invalid Attachment">
 		装着先が正しくありません
 	</string>
@@ -2226,12 +2281,12 @@ support@secondlife.com にお問い合わせください。
 	<string name="ATTACH_BELLY">
 		お腹
 	</string>
-	<string name="ATTACH_RPEC">
-		右胸筋
-	</string>
-	<string name="ATTACH_LPEC">
+	<string name="ATTACH_LEFT_PEC">
 		左胸筋
 	</string>
+	<string name="ATTACH_RIGHT_PEC">
+		右胸筋
+	</string>
 	<string name="ATTACH_HUD_CENTER_2">
 		HUD(中央 2)
 	</string>
@@ -2262,6 +2317,51 @@ support@secondlife.com にお問い合わせください。
 	<string name="ATTACH_AVATAR_CENTER">
 		アバターの中央
 	</string>
+	<string name="ATTACH_LHAND_RING1">
+		左薬指
+	</string>
+	<string name="ATTACH_RHAND_RING1">
+		右薬指
+	</string>
+	<string name="ATTACH_TAIL_BASE">
+		しっぽのベース
+	</string>
+	<string name="ATTACH_TAIL_TIP">
+		しっぽの先
+	</string>
+	<string name="ATTACH_LWING">
+		左の翼
+	</string>
+	<string name="ATTACH_RWING">
+		右の翼
+	</string>
+	<string name="ATTACH_FACE_JAW">
+		顎
+	</string>
+	<string name="ATTACH_FACE_LEAR">
+		代わりの左耳
+	</string>
+	<string name="ATTACH_FACE_REAR">
+		代わりの右耳
+	</string>
+	<string name="ATTACH_FACE_LEYE">
+		代わりの左目
+	</string>
+	<string name="ATTACH_FACE_REYE">
+		代わりの右目
+	</string>
+	<string name="ATTACH_FACE_TONGUE">
+		舌
+	</string>
+	<string name="ATTACH_GROIN">
+		脚の付け根
+	</string>
+	<string name="ATTACH_HIND_LFOOT">
+		左後足
+	</string>
+	<string name="ATTACH_HIND_RFOOT">
+		右後足
+	</string>
 	<string name="CursorPos">
 		[LINE] 行目、[COLUMN] 列目
 	</string>
@@ -4251,6 +4351,12 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="OfflineStatus">
 		オフライン
 	</string>
+	<string name="not_online_msg">
+		ユーザーがオンラインでありません - メッセージは保存され、後で配信されます。
+	</string>
+	<string name="not_online_inventory">
+		ユーザーがオンラインでありません - インベントリが保存されました。
+	</string>
 	<string name="answered_call">
 		相手がコールを受けました
 	</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml
index c5e19b2281..6fa25262ea 100644
--- a/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
 	<text name="AvatarText">
 		Avatar
 	</text>
-	<slider label="Complexidade máxima:" name="IndirectMaxComplexity" tool_tip="Controla o ponto no qual um avatar visualmente complexo é desenhado como avatar de cor sólida"/>
+	<slider label="Complexidade máxima:" name="IndirectMaxComplexity" tool_tip="Controla o ponto no qual um avatar visualmente complexo é desenhado como uma JellyDoll"/>
 	<text name="IndirectMaxComplexityText">
 		0
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_other.xml b/indra/newview/skins/default/xui/pt/menu_attachment_other.xml
index 031f6b605a..760197cfb9 100644
--- a/indra/newview/skins/default/xui/pt/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/pt/menu_attachment_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="MI" name="Send IM..."/>
 	<menu_item_call label="Ligar" name="Call"/>
 	<menu_item_call label="Convidar para entrar no grupo" name="Invite..."/>
+	<menu_item_call label="Redefinir esqueleto" name="Reset Skeleton"/>
 	<menu_item_call label="Bloquear" name="Avatar Mute"/>
 	<menu_item_call label="Denunciar" name="abuse"/>
 	<menu_item_call label="Congelar" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
index ac79422110..766c8b9754 100644
--- a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Editar meu look" name="Edit Outfit"/>
 	<menu_item_call label="Editar meu corpo" name="Edit My Shape"/>
 	<menu_item_call label="Altura de foco" name="Hover Height"/>
+	<menu_item_call label="Redefinir esqueleto" name="Reset Skeleton"/>
 	<menu_item_call label="Meus amigos" name="Friends..."/>
 	<menu_item_call label="Meus grupos" name="Groups..."/>
 	<menu_item_call label="Meu perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_other.xml b/indra/newview/skins/default/xui/pt/menu_avatar_other.xml
index e32f9059f5..170525cbe6 100644
--- a/indra/newview/skins/default/xui/pt/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/pt/menu_avatar_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="MI" name="Send IM..."/>
 	<menu_item_call label="Ligar" name="Call"/>
 	<menu_item_call label="Convidar para entrar no grupo" name="Invite..."/>
+	<menu_item_call label="Redefinir esqueleto" name="Reset Skeleton"/>
 	<menu_item_call label="Bloquear" name="Avatar Mute"/>
 	<menu_item_call label="Denunciar" name="abuse"/>
 	<menu_item_call label="Congelar" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
index a0ac71e018..e826a57b46 100644
--- a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
@@ -26,6 +26,7 @@
 	<menu_item_call label="Editar meu look" name="Edit Outfit"/>
 	<menu_item_call label="Editar meu corpo" name="Edit My Shape"/>
 	<menu_item_call label="Altura de foco" name="Hover Height"/>
+	<menu_item_call label="Redefinir esqueleto" name="Reset Skeleton"/>
 	<menu_item_call label="Meus amigos" name="Friends..."/>
 	<menu_item_call label="Meus grupos" name="Groups..."/>
 	<menu_item_call label="Meu perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index 2df78c6287..7bdcb74a54 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -22,7 +22,6 @@
 			<menu_item_check label="Não perturbe" name="Do Not Disturb"/>
 		</menu>
 		<menu_item_call label="Comprar L$..." name="Buy and Sell L$"/>
-		<menu_item_call label="Caixa de saída do lojista..." name="MerchantOutbox"/>
 		<menu_item_call label="Listagens do Marketplace..." name="MarketplaceListings"/>
 		<menu_item_call label="Painel da conta..." name="Manage My Account">
 			<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=pt"/>
@@ -368,6 +367,7 @@
 			<menu_item_check label="Dados da animação" name="Animation Info"/>
 			<menu_item_check label="Disable Level Of Detail" name="Disable LOD"/>
 			<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
+			<menu_item_check label="Exibir ossos" name="Show Bones"/>
 			<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
 			<menu_item_call label="Depurar texturas do avatar" name="Debug Avatar Textures"/>
 		</menu>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index cf7400117d..bb428ad5a5 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -477,6 +477,9 @@ Ele ultrapassa o limite de anexos, de [MAX_ATTACHMENTS] objetos. Remova um objet
 	<notification name="CannotWearInfoNotComplete">
 		Você não pode vestir este item porque ele ainda não carregou. Tente novamente em um minuto.
 	</notification>
+	<notification name="MustEnterPasswordToLogIn">
+		Informe sua senha para fazer o login.
+	</notification>
 	<notification name="MustHaveAccountToLogIn">
 		Opa! Alguma coisa ficou em branco.
 Digite o nome de usuário de seu avatar.
@@ -545,6 +548,9 @@ Nota: Este procedimento limpa o cache.
 	<notification name="ChangeConnectionPort">
 		Reinicie o [APP_NAME] para ativar a reconfiguração da porta.
 	</notification>
+	<notification name="ChangeDeferredDebugSetting">
+		Essa alteração nas configurações de depuração será aplicada depois que você reiniciar o [APP_NAME].
+	</notification>
 	<notification name="ChangeSkin">
 		Reinicie o [APP_NAME] para ativar a pele nova.
 	</notification>
@@ -1359,12 +1365,13 @@ Enquando isso, use o [SECOND_LIFE] normalmente. Seu visual será exibido correta
 			<ignore name="ignore" text="A roupa está demorando para chegar"/>
 		</form>
 	</notification>
-	<notification name="RegionAndAgentComplexity">
-		Sua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexidade visual] é [AGENT_COMPLEXITY].
+	<notification name="AgentComplexityWithVisibility">
+		Sua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] é [AGENT_COMPLEXITY].
 [OVERLIMIT_MSG]
+		<usetemplate ignoretext="Avise-me se a complexidade do meu avatar for muito alta" name="notifyignore"/>
 	</notification>
 	<notification name="AgentComplexity">
-		Sua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexidade visual] é [AGENT_COMPLEXITY].
+		Sua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] é [AGENT_COMPLEXITY].
 	</notification>
 	<notification name="FirstRun">
 		A instalação do [APP_NAME] está pronta.
@@ -1478,6 +1485,10 @@ Substituir textura [TEXTURE_NUM], com uma imagem de 24-bit 512x512 ou menor e em
 		Você realmente deseja nivelar o terreno selecionado a partir do centro elevando/reduzindo os limites e o padrão para a ferramenta ´Reverter´?
 		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Executar"/>
 	</notification>
+	<notification name="ConfirmTextureHeights">
+		Você está prestes a usar valores baixos maiores que os valores altos para os intervalos de elevação. Deseja prosseguir?
+		<usetemplate canceltext="Não perguntar" name="yesnocancelbuttons" notext="Cancelar" yestext="Ok"/>
+	</notification>
 	<notification name="MaxAllowedAgentOnRegion">
 		Você pode ter somente [MAX_AGENTS] residentes permitidos.
 	</notification>
@@ -1714,14 +1725,6 @@ Se você estiver muito ansioso para experimentar os novos recursos e correções
 		Não foi possível deixar o grupo. Você não pode deixar o grupo pois é o último proprietário dele. Primeiramente, atribua outro membro à função de proprietário.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="GroupDepartError">
-		Não foi possível deixar o grupo: [reason].
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GroupDepart">
-		Você deixou o grupo [group_name].
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
 	<notification name="ConfirmKick">
 		Tem CERTEZA de que deseja expulsar todos os residentes do grid?
 		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Chutar todos"/>
@@ -2393,6 +2396,10 @@ Deseja desativar o Não perturbe antes de concluir esta transação?
 		Tem certeza de que deseja excluir o conteúdo da Lixeira? Para sempre?
 		<usetemplate ignoretext="Confirmar antes de esvaziar a pasta Lixeira" name="okcancelignore" notext="Não" yestext="Sim"/>
 	</notification>
+	<notification name="TrashIsFull">
+		Sua lixeira está transbordando. Isso pode causar problemas no logon.
+		<usetemplate name="okcancelbuttons" notext="Esvaziarei a lixeira mais tarde" yestext="Esvaziar lixeira agora"/>
+	</notification>
 	<notification name="ConfirmClearBrowserCache">
 		Tem certeza de que quer apagar todo o histórico de viagens, web e buscas?
 		<usetemplate name="okcancelbuttons" notext="Não" yestext="OK"/>
@@ -2977,7 +2984,7 @@ Se permanecer aqui, você será desconectado.
 
 [MESSAGE]
 
-Do objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, de: [NAME_SLURL]
+Do objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, proprietário: [NAME_SLURL]
 		<form name="form">
 			<button name="Gotopage" text="Carregar"/>
 			<button name="Cancel" text="Cancelar"/>
@@ -3246,11 +3253,15 @@ Para sua segurança, os SLurls serão bloqueados por alguns instantes.
 	<notification name="AttachmentSaved">
 		Anexo salvo.
 	</notification>
-	<notification name="PresetNotSaved">
-		Erro ao salvar predefinição [NAME].
+	<notification name="AppearanceToXMLSaved">
+		A aparência foi salva como XML em [PATH]
 	</notification>
-	<notification name="PresetNotDeleted">
-		Erro ao excluir a predefinição [NAME].
+	<notification name="AppearanceToXMLFailed">
+		Falha ao salvar a aparência como XML.
+    icon=&quot;notifytip.tga&quot;
+	name=&quot;PresetNotDeleted&quot;
+    type=&quot;notifytip&quot;&gt;
+Erro ao excluir a predefinição [NAME].
 	</notification>
 	<notification name="UnableToFindHelpTopic">
 		Nenhum tópico de ajuda foi encontrado com relação a este elemento.
@@ -4063,6 +4074,9 @@ Tente novamente em instantes.
 	<notification name="CantAttachNotEnoughScriptResources">
 		Não há recursos de script disponíveis suficientes para anexar objeto!
 	</notification>
+	<notification name="IllegalAttachment">
+		O anexo solicitou um ponto não existente no avatar. Ele foi anexado ao peito.
+	</notification>
 	<notification name="CantDropItemTrialUser">
 		Não é possível largar objetos aqui. Tente a área de Avaliação grátis.
 	</notification>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml
index 2ffe720ccf..c865de0d08 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
 	<text name="tell_me_label">
 		Avisar:
 	</text>
-	<check_box label="Quando eu gasto ou recebo L$" name="notify_money_change_checkbox"/>
+	<check_box label="Quando eu gastar L$" name="notify_money_spend_checkbox"/>
 	<check_box label="Quando meus amigos entram e saem" name="friends_online_notify_checkbox"/>
+	<check_box label="Quando eu receber L$" name="notify_money_received_checkbox"/>
 	<text name="show_label">
 		Mostrar sempre:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
index 4d3fb89b37..fa17a4ff11 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
@@ -25,10 +25,15 @@ rápido
 	<text name="BetterText">
 		Melhor
 	</text>
+	<slider label="Complexidade máxima do avatar:" name="IndirectMaxComplexity" tool_tip="Controla o ponto no qual um avatar visualmente complexo é desenhado como uma JellyDoll"/>
+	<text name="IndirectMaxComplexityText">
+		0
+	</text>
 	<check_box initial_value="true" label="Tonalidades atmosféricas" name="WindLightUseAtmosShaders"/>
 	<check_box initial_value="true" label="Modelo avançado de luzes" name="UseLightShaders"/>
 	<button label="Salvar configurações como predefinição..." name="PrefSaveButton"/>
 	<button label="Carregar predefinição..." name="PrefLoadButton"/>
+	min_val=&quot;0.125&quot;
 	<button label="Excluir predefinição..." name="PrefDeleteButton"/>
 	<button label="Redefinir para configurações recomendadas" left="110" name="Defaults"/>
 	<button label="Configurações avançadas..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_sound_devices.xml b/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
index 66db89f48f..97d6c0ef36 100644
--- a/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
@@ -16,9 +16,9 @@
 		Saída
 	</text>
 	<text name="My volume label">
-		Meu volume:
+		Volume do microfone:
 	</text>
-	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Mude o volume usando o controle deslizante"/>
+	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Mude o volume do microfone usando o controle deslizante"/>
 	<text name="wait_text">
 		Aguarde
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 50bb9b7e66..b3cb50a01e 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -30,7 +30,10 @@
 	</string>
 	<string name="AboutHeader">
 		[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
-[[VIEWER_RELEASE_NOTES_URL] [Notas da versão]]
+[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
+	</string>
+	<string name="BuildConfig">
+		Configuração do corpo [BUILD_CONFIG]
 	</string>
 	<string name="AboutPosition">
 		Você está em [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] em [REGION] localizado em &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
@@ -63,6 +66,9 @@ Versão do servidor de voz: [VOICE_VERSION]
 	<string name="ErrorFetchingServerReleaseNotesURL">
 		Erro ao obter URL de notas de versão do servidor.
 	</string>
+	<string name="BuildConfiguration">
+		Configuração do corpo
+	</string>
 	<string name="ProgressRestoring">
 		Restaurando...
 	</string>
@@ -1336,6 +1342,9 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
 	<string name="BodyPartsRightLeg">
 		Perna direita
 	</string>
+	<string name="BodyPartsEnhancedSkeleton">
+		Esqueleto aprimorado
+	</string>
 	<string name="GraphicsQualityLow">
 		Baixo
 	</string>
@@ -1778,6 +1787,51 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
 	<string name="Avatar Center">
 		Centro do avatar
 	</string>
+	<string name="Left Ring Finger">
+		Anelar esquerdo
+	</string>
+	<string name="Right Ring Finger">
+		Anelar direito
+	</string>
+	<string name="Tail Base">
+		Base do rabo
+	</string>
+	<string name="Tail Tip">
+		Ponta do rabo
+	</string>
+	<string name="Left Wing">
+		Asa esquerda
+	</string>
+	<string name="Right Wing">
+		Asa direita
+	</string>
+	<string name="Jaw">
+		Maxilar
+	</string>
+	<string name="Alt Left Ear">
+		Orelha esquerda alt.
+	</string>
+	<string name="Alt Right Ear">
+		Orelha direita alt.
+	</string>
+	<string name="Alt Left Eye">
+		Olho esquerdo alt.
+	</string>
+	<string name="Alt Right Eye">
+		Olho direito alt.
+	</string>
+	<string name="Tongue">
+		Língua
+	</string>
+	<string name="Groin">
+		Virilha
+	</string>
+	<string name="Left Hind Foot">
+		Pata esq. traseira
+	</string>
+	<string name="Right Hind Foot">
+		Pata dir. traseira
+	</string>
 	<string name="Invalid Attachment">
 		Ponto de encaixe inválido
 	</string>
@@ -2167,12 +2221,12 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
 	<string name="ATTACH_BELLY">
 		Barriga
 	</string>
-	<string name="ATTACH_RPEC">
-		Peitorais D
-	</string>
-	<string name="ATTACH_LPEC">
+	<string name="ATTACH_LEFT_PEC">
 		Peitorais E
 	</string>
+	<string name="ATTACH_RIGHT_PEC">
+		Peitorais D
+	</string>
 	<string name="ATTACH_HUD_CENTER_2">
 		HUD Central 2
 	</string>
@@ -2203,6 +2257,51 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
 	<string name="ATTACH_AVATAR_CENTER">
 		Centro do avatar
 	</string>
+	<string name="ATTACH_LHAND_RING1">
+		Anelar esquerdo
+	</string>
+	<string name="ATTACH_RHAND_RING1">
+		Anelar direito
+	</string>
+	<string name="ATTACH_TAIL_BASE">
+		Base do rabo
+	</string>
+	<string name="ATTACH_TAIL_TIP">
+		Ponta do rabo
+	</string>
+	<string name="ATTACH_LWING">
+		Asa esquerda
+	</string>
+	<string name="ATTACH_RWING">
+		Asa direita
+	</string>
+	<string name="ATTACH_FACE_JAW">
+		Maxilar
+	</string>
+	<string name="ATTACH_FACE_LEAR">
+		Orelha esquerda alt.
+	</string>
+	<string name="ATTACH_FACE_REAR">
+		Orelha direita alt.
+	</string>
+	<string name="ATTACH_FACE_LEYE">
+		Olho esquerdo alt.
+	</string>
+	<string name="ATTACH_FACE_REYE">
+		Olho direito alt.
+	</string>
+	<string name="ATTACH_FACE_TONGUE">
+		Língua
+	</string>
+	<string name="ATTACH_GROIN">
+		Virilha
+	</string>
+	<string name="ATTACH_HIND_LFOOT">
+		Pata esq. traseira
+	</string>
+	<string name="ATTACH_HIND_RFOOT">
+		Pata dir. traseira
+	</string>
 	<string name="CursorPos">
 		Linha [LINE], Coluna [COLUMN]
 	</string>
@@ -4128,6 +4227,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="OfflineStatus">
 		Desconectado
 	</string>
+	<string name="not_online_msg">
+		O usuário não está online. As mensagens serão armazenadas e enviadas mais tarde.
+	</string>
+	<string name="not_online_inventory">
+		O usuário não está online. O inventário foi salvo.
+	</string>
 	<string name="answered_call">
 		Ligação atendida
 	</string>
diff --git a/indra/newview/skins/default/xui/ru/menu_attachment_other.xml b/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
index bd1ed8d1fa..b7ffb0e9fc 100644
--- a/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="Звонок" name="Call"/>
 	<menu_item_call label="Пригласить в группу" name="Invite..."/>
+	<menu_item_call label="Сброс скелета" name="Reset Skeleton"/>
 	<menu_item_call label="Заблокировать" name="Avatar Mute"/>
 	<menu_item_call label="Пожаловаться" name="abuse"/>
 	<menu_item_call label="Заморозить" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/ru/menu_attachment_self.xml b/indra/newview/skins/default/xui/ru/menu_attachment_self.xml
index 033d36484b..eb38371e28 100644
--- a/indra/newview/skins/default/xui/ru/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/ru/menu_attachment_self.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Изменить костюм" name="Edit Outfit"/>
 	<menu_item_call label="Изменить фигуру" name="Edit My Shape"/>
 	<menu_item_call label="Высота парения" name="Hover Height"/>
+	<menu_item_call label="Сброс скелета" name="Reset Skeleton"/>
 	<menu_item_call label="Мои друзья" name="Friends..."/>
 	<menu_item_call label="Мои группы" name="Groups..."/>
 	<menu_item_call label="Мой профиль" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_other.xml b/indra/newview/skins/default/xui/ru/menu_avatar_other.xml
index 74f1a39658..cffb4bbe7b 100644
--- a/indra/newview/skins/default/xui/ru/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/ru/menu_avatar_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="Звонок" name="Call"/>
 	<menu_item_call label="Пригласить в группу" name="Invite..."/>
+	<menu_item_call label="Сброс скелета" name="Reset Skeleton"/>
 	<menu_item_call label="Заблокировать" name="Avatar Mute"/>
 	<menu_item_call label="Пожаловаться" name="abuse"/>
 	<menu_item_call label="Заморозить" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_self.xml b/indra/newview/skins/default/xui/ru/menu_avatar_self.xml
index 8feaa3b99a..97e2a8b295 100644
--- a/indra/newview/skins/default/xui/ru/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/ru/menu_avatar_self.xml
@@ -26,6 +26,7 @@
 	<menu_item_call label="Изменить костюм" name="Edit Outfit"/>
 	<menu_item_call label="Изменить фигуру" name="Edit My Shape"/>
 	<menu_item_call label="Высота парения" name="Hover Height"/>
+	<menu_item_call label="Сброс скелета" name="Reset Skeleton"/>
 	<menu_item_call label="Мои друзья" name="Friends..."/>
 	<menu_item_call label="Мои группы" name="Groups..."/>
 	<menu_item_call label="Мой профиль" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index 2044844c58..6158363e5d 100644
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -22,7 +22,6 @@
 			<menu_item_check label="Не беспокоить" name="Do Not Disturb"/>
 		</menu>
 		<menu_item_call label="Купить L$..." name="Buy and Sell L$"/>
-		<menu_item_call label="Торговые исходящие..." name="MerchantOutbox"/>
 		<menu_item_call label="Списки товаров торгового центра..." name="MarketplaceListings"/>
 		<menu_item_call label="Информационная панель аккаунта..." name="Manage My Account"/>
 		<menu_item_call label="Настройки..." name="Preferences"/>
@@ -418,6 +417,7 @@
 			<menu_item_check label="Отключить детализацию" name="Disable LOD"/>
 			<menu_item_check label="Отладка видимости персонажа" name="Debug Character Vis"/>
 			<menu_item_check label="Показать скелет" name="Show Collision Skeleton"/>
+			<menu_item_check label="Показать кости" name="Show Bones"/>
 			<menu_item_check label="Отобразить действие агента" name="Display Agent Target"/>
 			<menu_item_call label="Вывод присоединений" name="Dump Attachments"/>
 			<menu_item_call label="Отладка текстур аватара" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml
index fabc064525..5e7c2ed7d0 100644
--- a/indra/newview/skins/default/xui/ru/notifications.xml
+++ b/indra/newview/skins/default/xui/ru/notifications.xml
@@ -480,6 +480,9 @@
 	<notification name="CannotWearInfoNotComplete">
 		Нельзя надеть эту вещь, так как она еще не загружена. Повторите попытку через минуту.
 	</notification>
+	<notification name="MustEnterPasswordToLogIn">
+		Введите пароль для входа в мир.
+	</notification>
 	<notification name="MustHaveAccountToLogIn">
 		Ай-яй-яй! Что-то осталось незаполненным.
 Необходимо ввести имя пользователя для вашего аватара.
@@ -548,6 +551,9 @@
 	<notification name="ChangeConnectionPort">
 		Настройки порта начнут действовать после перезапуска [APP_NAME].
 	</notification>
+	<notification name="ChangeDeferredDebugSetting">
+		Эта настройка отладки вступит в силу после перезапуска [APP_NAME].
+	</notification>
 	<notification name="ChangeSkin">
 		Новая кожа будет видна после перезапуска [APP_NAME].
 	</notification>
@@ -1366,12 +1372,13 @@
 			<ignore name="ignore" text="Загрузка одежды занимает значительное время"/>
 		</form>
 	</notification>
-	<notification name="RegionAndAgentComplexity">
-		Ваша [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 визуальная сложность]: [AGENT_COMPLEXITY].
+	<notification name="AgentComplexityWithVisibility">
+		Ваша [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 сложность аватара]: [AGENT_COMPLEXITY].
 [OVERLIMIT_MSG]
+		<usetemplate ignoretext="Предупреждать о превышении сложности аватара" name="notifyignore"/>
 	</notification>
 	<notification name="AgentComplexity">
-		Ваша [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 визуальная сложность]: [AGENT_COMPLEXITY].
+		Ваша [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 сложность аватара]: [AGENT_COMPLEXITY].
 	</notification>
 	<notification name="FirstRun">
 		Установка [APP_NAME] завершена.
@@ -1486,6 +1493,10 @@
 		Вы действительно хотите зафиксировать текущий ландшафт, сделать его высоту средней точкой для верхней и нижней точек ландшафта и принять по умолчанию для функции «Вернуть»?
 		<usetemplate name="okcancelbuttons" notext="Отмена" yestext="OK"/>
 	</notification>
+	<notification name="ConfirmTextureHeights">
+		Вы собираетесь использовать минимальные значения, которые больше, чем максимальные для диапазона высот. Начать?
+		<usetemplate canceltext="Не спрашивать" name="yesnocancelbuttons" notext="Отмена" yestext="OK"/>
+	</notification>
 	<notification name="MaxAllowedAgentOnRegion">
 		У вас может быть не более [MAX_AGENTS] допущенных жителей.
 	</notification>
@@ -1723,14 +1734,6 @@ http://secondlife.com/download.
 		Невозможно покинуть группу. Вы не можете покинуть группу, так как вы ее последний владелец. Сначала назначьте владельцем другого участника.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="GroupDepartError">
-		Невозможно покинуть группу: [reason].
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
-	<notification name="GroupDepart">
-		Вы покинули группу [group_name].
-		<usetemplate name="okbutton" yestext="OK"/>
-	</notification>
 	<notification name="ConfirmKick">
 		Вы ДЕЙСТВИТЕЛЬНО хотите выбросить всех жителей с сетки?
 		<usetemplate name="okcancelbuttons" notext="Отмена" yestext="Выбросить всех жителей"/>
@@ -2400,6 +2403,10 @@ http://secondlife.com/download.
 		Вы действительно хотите необратимо удалить содержимое корзины?
 		<usetemplate ignoretext="Подтверждать перед опорожнением корзины инвентаря" name="okcancelignore" notext="Отмена" yestext="OK"/>
 	</notification>
+	<notification name="TrashIsFull">
+		Ваша корзина переполнена. Это может вызвать проблемы при входе.
+		<usetemplate name="okcancelbuttons" notext="Я очищу корзину позже" yestext="Очистить корзину сейчас"/>
+	</notification>
 	<notification name="ConfirmClearBrowserCache">
 		Вы действительно хотите удалить журнал своих перемещений, веб-страниц и поиска?
 		<usetemplate name="okcancelbuttons" notext="Отмена" yestext="OK"/>
@@ -3257,11 +3264,15 @@ http://secondlife.com/download.
 	<notification name="AttachmentSaved">
 		Присоединение сохранено.
 	</notification>
-	<notification name="PresetNotSaved">
-		Ошибка при сохранении пресета [NAME].
+	<notification name="AppearanceToXMLSaved">
+		Внешность сохранена в формате XML в [PATH]
 	</notification>
-	<notification name="PresetNotDeleted">
-		Ошибка при удалении пресета [NAME].
+	<notification name="AppearanceToXMLFailed">
+		Не удалось сохранить внешность в XML.
+    icon=&quot;notifytip.tga&quot;
+	name=&quot;PresetNotDeleted&quot;
+    type=&quot;notifytip&quot;&gt;
+Ошибка при удалении пресета [NAME].
 	</notification>
 	<notification name="UnableToFindHelpTopic">
 		Невозможно найти раздел справки для этого элемента.
@@ -4075,6 +4086,9 @@ http://secondlife.com/download.
 	<notification name="CantAttachNotEnoughScriptResources">
 		Недостаточно свободных ресурсов скриптинга для присоединения объекта!
 	</notification>
+	<notification name="IllegalAttachment">
+		Прикрепляемый объект потребовал несуществующей точки на аватаре. Он был прикреплен к груди.
+	</notification>
 	<notification name="CantDropItemTrialUser">
 		Здесь нельзя сбрасывать объекты; перейдите в бесплатную область для гостей.
 	</notification>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/ru/panel_preferences_alerts.xml
index 9d7ae546fd..48e03b98e8 100644
--- a/indra/newview/skins/default/xui/ru/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
 	<text name="tell_me_label">
 		Сообщать мне:
 	</text>
-	<check_box label="о расходах и доходах" name="notify_money_change_checkbox"/>
+	<check_box label="О расходах" name="notify_money_spend_checkbox"/>
 	<check_box label="о входе и выходе моих друзей" name="friends_online_notify_checkbox"/>
+	<check_box label="О доходах" name="notify_money_received_checkbox"/>
 	<text name="show_label">
 		Всегда показывать:
 	</text>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml
index 31c9b2135d..200241bd4d 100644
--- a/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
 	<text name="BetterText">
 		Качественней
 	</text>
+	<slider label="Максимальная сложность аватара:" name="IndirectMaxComplexity" tool_tip="Указывает расстояние, начиная с которого визуально сложный аватар рисуется как мармеладный мишка"/>
+	<text name="IndirectMaxComplexityText">
+		0
+	</text>
 	<check_box initial_value="true" label="Атмосферные шейдеры" name="WindLightUseAtmosShaders"/>
 	<check_box initial_value="true" label="Расширенная модель освещения" name="UseLightShaders"/>
 	<button label="Сохранить настройки как пресет..." name="PrefSaveButton"/>
 	<button label="Загрузить пресет..." name="PrefLoadButton"/>
+	min_val=&quot;0,125&quot;
 	<button label="Удалить пресет..." name="PrefDeleteButton"/>
 	<button label="Вернуть рекомендуемые настройки" name="Defaults"/>
 	<button label="Расширенные настройки..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_sound_devices.xml b/indra/newview/skins/default/xui/ru/panel_sound_devices.xml
index 98dab288a3..3de84fb937 100644
--- a/indra/newview/skins/default/xui/ru/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/ru/panel_sound_devices.xml
@@ -16,9 +16,9 @@
 		Выход
 	</text>
 	<text name="My volume label">
-		Моя громкость:
+		Громкость микрофона:
 	</text>
-	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Измените значение, используя ползунок"/>
+	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Измените уровень в микрофоне, используя ползунок"/>
 	<text name="wait_text">
 		Подождите
 	</text>
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index 04bb55c965..da03af055c 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -41,6 +41,9 @@
 		[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
 [[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
 	</string>
+	<string name="BuildConfig">
+		Конфигурация построения [BUILD_CONFIG]
+	</string>
 	<string name="AboutPosition">
 		Вы в точке [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] в регионе «[REGION]», расположенном на &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
 SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -72,6 +75,9 @@ SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
 	<string name="ErrorFetchingServerReleaseNotesURL">
 		Ошибка при получении URL-адреса заметок о выпуске сервера.
 	</string>
+	<string name="BuildConfiguration">
+		Конфигурация построения
+	</string>
 	<string name="ProgressRestoring">
 		Восстановление...
 	</string>
@@ -1387,6 +1393,9 @@ support@secondlife.com.
 	<string name="BodyPartsRightLeg">
 		Правая нога
 	</string>
+	<string name="BodyPartsEnhancedSkeleton">
+		Улучшенный скелет
+	</string>
 	<string name="GraphicsQualityLow">
 		низкая
 	</string>
@@ -1835,6 +1844,51 @@ support@secondlife.com.
 	<string name="Avatar Center">
 		Центр аватара
 	</string>
+	<string name="Left Ring Finger">
+		Левый безымянный палец
+	</string>
+	<string name="Right Ring Finger">
+		Правый безымянный палец
+	</string>
+	<string name="Tail Base">
+		Основание хвоста
+	</string>
+	<string name="Tail Tip">
+		Кончик хвоста
+	</string>
+	<string name="Left Wing">
+		Левое крыло
+	</string>
+	<string name="Right Wing">
+		Правое крыло
+	</string>
+	<string name="Jaw">
+		Пасть
+	</string>
+	<string name="Alt Left Ear">
+		Альт. левое ухо
+	</string>
+	<string name="Alt Right Ear">
+		Альт. правое ухо
+	</string>
+	<string name="Alt Left Eye">
+		Альт. левый глаз
+	</string>
+	<string name="Alt Right Eye">
+		Альт. правый глаз
+	</string>
+	<string name="Tongue">
+		Язык
+	</string>
+	<string name="Groin">
+		Пах
+	</string>
+	<string name="Left Hind Foot">
+		Левая задняя нога
+	</string>
+	<string name="Right Hind Foot">
+		Правая задняя нога
+	</string>
 	<string name="Invalid Attachment">
 		Неверная точка присоединения
 	</string>
@@ -2224,12 +2278,12 @@ support@secondlife.com.
 	<string name="ATTACH_BELLY">
 		Живот
 	</string>
-	<string name="ATTACH_RPEC">
-		Правая грудь
-	</string>
-	<string name="ATTACH_LPEC">
+	<string name="ATTACH_LEFT_PEC">
 		Левая грудь
 	</string>
+	<string name="ATTACH_RIGHT_PEC">
+		Правая грудь
+	</string>
 	<string name="ATTACH_HUD_CENTER_2">
 		Данные в игре в центре 2
 	</string>
@@ -2260,6 +2314,51 @@ support@secondlife.com.
 	<string name="ATTACH_AVATAR_CENTER">
 		Центр аватара
 	</string>
+	<string name="ATTACH_LHAND_RING1">
+		Левый безымянный палец
+	</string>
+	<string name="ATTACH_RHAND_RING1">
+		Правый безымянный палец
+	</string>
+	<string name="ATTACH_TAIL_BASE">
+		Основание хвоста
+	</string>
+	<string name="ATTACH_TAIL_TIP">
+		Кончик хвоста
+	</string>
+	<string name="ATTACH_LWING">
+		Левое крыло
+	</string>
+	<string name="ATTACH_RWING">
+		Правое крыло
+	</string>
+	<string name="ATTACH_FACE_JAW">
+		Пасть
+	</string>
+	<string name="ATTACH_FACE_LEAR">
+		Альт. левое ухо
+	</string>
+	<string name="ATTACH_FACE_REAR">
+		Альт. правое ухо
+	</string>
+	<string name="ATTACH_FACE_LEYE">
+		Альт. левый глаз
+	</string>
+	<string name="ATTACH_FACE_REYE">
+		Альт. правый глаз
+	</string>
+	<string name="ATTACH_FACE_TONGUE">
+		Язык
+	</string>
+	<string name="ATTACH_GROIN">
+		Пах
+	</string>
+	<string name="ATTACH_HIND_LFOOT">
+		Левая задняя нога
+	</string>
+	<string name="ATTACH_HIND_RFOOT">
+		Правая задняя нога
+	</string>
 	<string name="CursorPos">
 		Строка [LINE], столбец [COLUMN]
 	</string>
@@ -4247,10 +4346,10 @@ support@secondlife.com.
 		Оффлайн
 	</string>
 	<string name="not_online_msg">
-		Пользователь оффлайн - сообщение будет сохранено и доставлено позже.
+		Пользователь не в онлайне - сообщение будет сохранено и доставлено позже.
 	</string>
 	<string name="not_online_inventory">
-		Пользователь оффлайн - инвентарь сохранен.
+		Пользователь не в онлайне - инвентарь сохранен.
 	</string>
 	<string name="answered_call">
 		На ваш звонок ответили
diff --git a/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml
index 53938117fd..867e15a3ca 100644
--- a/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
 	<text name="AvatarText">
 		Avatar
 	</text>
-	<slider label="Maksimum karmaşıklık:" name="IndirectMaxComplexity" tool_tip="Görsel olarak karmaşık yapıdaki bir avatarın hangi noktada jelibon gibi tek renkli olarak çizileceğini kontrol eder"/>
+	<slider label="Maksimum karmaşıklık:" name="IndirectMaxComplexity" tool_tip="Görsel olarak karmaşık bir avatarın hangi noktadan itibaren JellyDolll olarak çizileceğini kontrol eder"/>
 	<text name="IndirectMaxComplexityText">
 		0
 	</text>
diff --git a/indra/newview/skins/default/xui/tr/menu_attachment_other.xml b/indra/newview/skins/default/xui/tr/menu_attachment_other.xml
index 8a669a28f7..d09174dcc0 100644
--- a/indra/newview/skins/default/xui/tr/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/tr/menu_attachment_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="Aİ" name="Send IM..."/>
 	<menu_item_call label="Ara" name="Call"/>
 	<menu_item_call label="Gruba Davet Et" name="Invite..."/>
+	<menu_item_call label="İskeleti Sıfırla" name="Reset Skeleton"/>
 	<menu_item_call label="Engelle" name="Avatar Mute"/>
 	<menu_item_call label="Raporla" name="abuse"/>
 	<menu_item_call label="Dondur" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/tr/menu_attachment_self.xml b/indra/newview/skins/default/xui/tr/menu_attachment_self.xml
index c49f817a45..9027f09d8e 100644
--- a/indra/newview/skins/default/xui/tr/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/tr/menu_attachment_self.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Dış Görünümümü Düzenle" name="Edit Outfit"/>
 	<menu_item_call label="Şeklimi Düzenle" name="Edit My Shape"/>
 	<menu_item_call label="Konum Yüksekliği" name="Hover Height"/>
+	<menu_item_call label="İskeleti Sıfırla" name="Reset Skeleton"/>
 	<menu_item_call label="Arkadaşlarım" name="Friends..."/>
 	<menu_item_call label="Gruplarım" name="Groups..."/>
 	<menu_item_call label="Profilim" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_other.xml b/indra/newview/skins/default/xui/tr/menu_avatar_other.xml
index e4ba3a5616..9e95b3033a 100644
--- a/indra/newview/skins/default/xui/tr/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/tr/menu_avatar_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="Aİ" name="Send IM..."/>
 	<menu_item_call label="Ara" name="Call"/>
 	<menu_item_call label="Gruba Davet Et" name="Invite..."/>
+	<menu_item_call label="İskeleti Sıfırla" name="Reset Skeleton"/>
 	<menu_item_call label="Engelle" name="Avatar Mute"/>
 	<menu_item_call label="Raporla" name="abuse"/>
 	<menu_item_call label="Dondur" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_self.xml b/indra/newview/skins/default/xui/tr/menu_avatar_self.xml
index 4dfa42c347..3078733478 100644
--- a/indra/newview/skins/default/xui/tr/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/tr/menu_avatar_self.xml
@@ -26,6 +26,7 @@
 	<menu_item_call label="Dış Görünümümü Düzenle" name="Edit Outfit"/>
 	<menu_item_call label="Şeklimi Düzenle" name="Edit My Shape"/>
 	<menu_item_call label="Konum Yüksekliği" name="Hover Height"/>
+	<menu_item_call label="İskeleti Sıfırla" name="Reset Skeleton"/>
 	<menu_item_call label="Arkadaşlarım" name="Friends..."/>
 	<menu_item_call label="Gruplarım" name="Groups..."/>
 	<menu_item_call label="Profilim" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index 324e549a75..39636f2ebf 100644
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -22,7 +22,6 @@
 			<menu_item_check label="Rahatsız Etme" name="Do Not Disturb"/>
 		</menu>
 		<menu_item_call label="L$ Satın Al..." name="Buy and Sell L$"/>
-		<menu_item_call label="Satıcı Giden Kutusu..." name="MerchantOutbox"/>
 		<menu_item_call label="Pazaryeri ilanları..." name="MarketplaceListings"/>
 		<menu_item_call label="Hesap kontrol paneli..." name="Manage My Account"/>
 		<menu_item_call label="Tercihler..." name="Preferences"/>
@@ -419,6 +418,7 @@
 			<menu_item_check label="Ayrıntı Seviyesi Bilgisini Devre Dışı Bırak" name="Disable LOD"/>
 			<menu_item_check label="Debug Character Vis" name="Debug Character Vis"/>
 			<menu_item_check label="Çarpışma İskeletini Göster" name="Show Collision Skeleton"/>
+			<menu_item_check label="Kemikleri Göster" name="Show Bones"/>
 			<menu_item_check label="Aracı Hedefini Göster" name="Display Agent Target"/>
 			<menu_item_call label="Aksesuarların Dökümünü Al" name="Dump Attachments"/>
 			<menu_item_call label="Avatar Dokuları İçin Hata Ayıklama" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
index a982dc03ed..fb38486a9e 100644
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -480,6 +480,9 @@ Dış görünüm klasöründe hiç giysi, vücut bölümü ya da aksesuar yok.
 	<notification name="CannotWearInfoNotComplete">
 		Bu öğe henüz yüklenmediği için kullanamazsınız. Lütfen bir dakika sonra tekrar deneyin.
 	</notification>
+	<notification name="MustEnterPasswordToLogIn">
+		Oturum açmak için lütfen parolanızı girin.
+	</notification>
 	<notification name="MustHaveAccountToLogIn">
 		Hata! Boş bırakılan alan(lar) var.
 Avatarınızın Kullanıcı adını girmeniz gerekmektedir.
@@ -548,6 +551,9 @@ Not: Bu işlem önbelleği temizleyecek.
 	<notification name="ChangeConnectionPort">
 		Port ayarları, [APP_NAME] uygulamasını yeniden başlattıktan sonra geçerli olur.
 	</notification>
+	<notification name="ChangeDeferredDebugSetting">
+		Bu hata ayıklama ayarı değişikliği [APP_NAME] uygulamasını yeniden başlattıktan sonra geçerli olacak.
+	</notification>
 	<notification name="ChangeSkin">
 		Yeni dış katman [APP_NAME] uygulamasını yeniden başlattıktan sonra görüntülenecek.
 	</notification>
@@ -1366,12 +1372,13 @@ Yeni bir ana konum ayarlamak isteyebilirsiniz.
 			<ignore name="ignore" text="Giysilerin karşıdan yüklenmesi uzun zaman alıyor"/>
 		</form>
 	</notification>
-	<notification name="RegionAndAgentComplexity">
-		[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 Görsel karmaşıklık] seviyeniz: [AGENT_COMPLEXITY].
+	<notification name="AgentComplexityWithVisibility">
+		[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] düzeyiniz [AGENT_COMPLEXITY].
 [OVERLIMIT_MSG]
+		<usetemplate ignoretext="Avatarımın karmaşıklık düzeyi çok yüksekse beni uyar" name="notifyignore"/>
 	</notification>
 	<notification name="AgentComplexity">
-		[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 Görsel karmaşıklık] seviyeniz: [AGENT_COMPLEXITY].
+		[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] düzeyiniz [AGENT_COMPLEXITY].
 	</notification>
 	<notification name="FirstRun">
 		[APP_NAME] yüklemesi tamamlandı.
@@ -1486,6 +1493,10 @@ Lütfen sadece bir nesne seçin ve tekrar deneyin.
 		Geçerli yüzeyi bu şekilde kaydetmeyi, yüzey yükseltme/alçaltma sınırları için merkez olarak kullanmayı ve &apos;Geri Çevir&apos; aracı için varsayılan olarak ayarlamayı gerçekten istiyor musunuz?
 		<usetemplate name="okcancelbuttons" notext="İptal" yestext="Tamam"/>
 	</notification>
+	<notification name="ConfirmTextureHeights">
+		Yükselti Ayarları için girdiğiniz düşük değer, yüksek değerden daha fazla. Devam edilsin mi?
+		<usetemplate canceltext="Tekrar Sorma" name="yesnocancelbuttons" notext="İptal Et" yestext="Tamam"/>
+	</notification>
 	<notification name="MaxAllowedAgentOnRegion">
 		Sadece [MAX_AGENTS] tane İzin Verilen Sakin belirleyebilirsiniz.
 	</notification>
@@ -1723,14 +1734,6 @@ Gruptan ayrılmak istiyor musunuz?
 		Gruptan ayrılınamıyor. Gruptan ayrılamazsınız çünkü grubun son sahibisiniz. Lütfen önce sahip rolüne başka bir üye atayın.
 		<usetemplate name="okbutton" yestext="Tamam"/>
 	</notification>
-	<notification name="GroupDepartError">
-		Gruptan ayrılma işlemi yapılamıyor: [reason].
-		<usetemplate name="okbutton" yestext="Tamam"/>
-	</notification>
-	<notification name="GroupDepart">
-		[group_name] grubundan ayrıldınız.
-		<usetemplate name="okbutton" yestext="Tamam"/>
-	</notification>
 	<notification name="ConfirmKick">
 		Tüm Sakinleri GERÇEKTEN ağ dışına çıkarmak istiyor musunuz?
 		<usetemplate name="okcancelbuttons" notext="İptal Et" yestext="Tüm Sakinleri Çıkar"/>
@@ -2400,6 +2403,10 @@ Bu işlemi tamamlamadan önce Rahatsız Etme&apos;yi kapatmak ister misiniz?
 		Çöp kutunuzun içeriğini kalıcı olarak silmek istediğinize emin misiniz?
 		<usetemplate ignoretext="Envanter Çöp Kutusu klasörünü boşaltmadan önce doğrulama iste" name="okcancelignore" notext="İptal" yestext="Tamam"/>
 	</notification>
+	<notification name="TrashIsFull">
+		Çöpte yer kalmamış. Bu durum oturum açma sırasında sorun yaşamanıza neden olabilir.
+		<usetemplate name="okcancelbuttons" notext="Çöpü daha sonra boşaltacağım" yestext="Çöp kutusunu şimdi boşalt"/>
+	</notification>
 	<notification name="ConfirmClearBrowserCache">
 		Seyahat, web ve arama geçmişinizi silmek istediğinize emin misiniz?
 		<usetemplate name="okcancelbuttons" notext="İptal" yestext="Tamam"/>
@@ -2984,7 +2991,7 @@ Bu bölgede kalmaya devam ederseniz oturumunuz sonlandırılacak.
 Bu bölgede kalmaya devam ederseniz oturumunuz sonlandırılacak.
 	</notification>
 	<notification name="LoadWebPage">
-		[URL] web sayfası yüklensin mi?
+		Bu web sayfası yüklensin mi: [URL] ?
 
 [MESSAGE]
 
@@ -3257,11 +3264,15 @@ Güvenliğiniz için birkaç saniye engellenecek.
 	<notification name="AttachmentSaved">
 		Aksesuar kaydedildi.
 	</notification>
-	<notification name="PresetNotSaved">
-		[NAME] ön ayarı kaydedilirken hata oluştu.
+	<notification name="AppearanceToXMLSaved">
+		Görünüm XML olarak [PATH] konumuna kaydedildi
 	</notification>
-	<notification name="PresetNotDeleted">
-		[NAME] ön ayarı silinirken hata oluştu.
+	<notification name="AppearanceToXMLFailed">
+		Görünüm XML olarak kaydedilemedi.
+    icon=&quot;notifytip.tga&quot;
+	name=&quot;PresetNotDeleted&quot;
+    type=&quot;notifytip&quot;&gt;
+[NAME] ön ayarı silinirken hata oluştu.
 	</notification>
 	<notification name="UnableToFindHelpTopic">
 		Bu öğe için yardım başlığı bulunamıyor.
@@ -4069,6 +4080,9 @@ Lütfen bir dakika sonra tekrar deneyin.
 	<notification name="CantAttachNotEnoughScriptResources">
 		Nesneyi iliştirmek için yeterli komut dosyası kaynağı mevcut değil!
 	</notification>
+	<notification name="IllegalAttachment">
+		Aksesuar avatarda var olmayan bir noktaya karşılık geliyor. Bunun yerine göğüs kısmına eklendi.
+	</notification>
 	<notification name="CantDropItemTrialUser">
 		Buraya nesne düşüremezsiniz; Ücretsiz Deneme alanını deneyin.
 	</notification>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/tr/panel_preferences_alerts.xml
index 46a4793c53..b0f026b285 100644
--- a/indra/newview/skins/default/xui/tr/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
 	<text name="tell_me_label">
 		Bana söyle:
 	</text>
-	<check_box label="L$ harcadığımda veya aldığımda" name="notify_money_change_checkbox"/>
+	<check_box label="L$ harcadığımda" name="notify_money_spend_checkbox"/>
 	<check_box label="Arkadaşlarım oturum açtığında veya kapattığında" name="friends_online_notify_checkbox"/>
+	<check_box label="L$ aldığımda" name="notify_money_received_checkbox"/>
 	<text name="show_label">
 		Daima göster:
 	</text>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
index 13984c2792..9cfa7d61f4 100644
--- a/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
 	<text name="BetterText">
 		Daha iyi
 	</text>
+	<slider label="Avatarın Maksimum Karmaşıklığı:" name="IndirectMaxComplexity" tool_tip="Görsel olarak karmaşık bir avatarın hangi noktadan itibaren JellyDolll olarak çizileceğini kontrol eder"/>
+	<text name="IndirectMaxComplexityText">
+		0
+	</text>
 	<check_box initial_value="true" label="Atmosferik gölgeleyiciler" name="WindLightUseAtmosShaders"/>
 	<check_box initial_value="true" label="Gelişmiş Aydınlatma Modeli" name="UseLightShaders"/>
 	<button label="Ayarları ön ayar olarak kaydet..." name="PrefSaveButton"/>
 	<button label="Ön ayarı yükle..." name="PrefLoadButton"/>
+	min_val=&quot;0,125&quot;
 	<button label="Ön ayarı sil..." name="PrefDeleteButton"/>
 	<button label="Önerilen ayarlara dön" name="Defaults"/>
 	<button label="Gelişmiş Ayarlar..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_sound_devices.xml b/indra/newview/skins/default/xui/tr/panel_sound_devices.xml
index 982ef2ea3b..be3299b89c 100644
--- a/indra/newview/skins/default/xui/tr/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/tr/panel_sound_devices.xml
@@ -16,9 +16,9 @@
 		Çıktı
 	</text>
 	<text name="My volume label">
-		Ses düzeyim:
+		Mik. ses düzeyi:
 	</text>
-	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Bu kaydırıcıyı kullanarak ses düzeyini değiştirin"/>
+	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Bu kaydırma butonunu kullanarak mikrofonun ses düzeyini değiştirin"/>
 	<text name="wait_text">
 		Lütfen bekleyin
 	</text>
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
index 67c9197907..6aad65da22 100644
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -39,7 +39,10 @@
 	</string>
 	<string name="AboutHeader">
 		[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
-[[VIEWER_RELEASE_NOTES_URL] [Sürüm Notları]]
+[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
+	</string>
+	<string name="BuildConfig">
+		Yapı Konfigürasyonu [BUILD_CONFIG]
 	</string>
 	<string name="AboutPosition">
 		&lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP]) üzerinde bulunan [REGION] içerisinde [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] konumundasınız
@@ -59,12 +62,12 @@ Grafik Kartı: [GRAPHICS_CARD]
 		Windows Grafik Sürücüsü Sürümü: [GRAPHICS_DRIVER_VERSION]
 	</string>
 	<string name="AboutLibs">
-		OpenGL Sürümü: [OPENGL_VERSION]
+		OpenGL Sürümü [OPENGL_VERSION]
 
 J2C Kod Çözücü Sürümü: [J2C_VERSION]
 Ses Sürücüsü Sürümü: [AUDIO_DRIVER_VERSION]
 LLCEFLib/CEF Sürümü: [LLCEFLIB_VERSION]
-Ses Sunucusu Sürümü: [VOICE_VERSION]
+Ses Sunucu Sürümü: [VOICE_VERSION]
 	</string>
 	<string name="AboutTraffic">
 		Kaybolan Paketler: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
@@ -72,6 +75,9 @@ Ses Sunucusu Sürümü: [VOICE_VERSION]
 	<string name="ErrorFetchingServerReleaseNotesURL">
 		Sunucu sürümü notları URL&apos;si alınırken hata oluştu.
 	</string>
+	<string name="BuildConfiguration">
+		Yapı Konfigürasyonu
+	</string>
 	<string name="ProgressRestoring">
 		Geri yükleniyor...
 	</string>
@@ -1387,6 +1393,9 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
 	<string name="BodyPartsRightLeg">
 		Sağ Bacak
 	</string>
+	<string name="BodyPartsEnhancedSkeleton">
+		Gelişmiş İskelet
+	</string>
 	<string name="GraphicsQualityLow">
 		Düşük
 	</string>
@@ -1835,6 +1844,51 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
 	<string name="Avatar Center">
 		Avatar Merkezi
 	</string>
+	<string name="Left Ring Finger">
+		Sol Yüzük Parmağı
+	</string>
+	<string name="Right Ring Finger">
+		Sağ Yüzük Parmağı
+	</string>
+	<string name="Tail Base">
+		Kuyruk Tabanı
+	</string>
+	<string name="Tail Tip">
+		Kuyruk Ucu
+	</string>
+	<string name="Left Wing">
+		Sol Kanat
+	</string>
+	<string name="Right Wing">
+		Sağ Kanat
+	</string>
+	<string name="Jaw">
+		Pençe
+	</string>
+	<string name="Alt Left Ear">
+		Altrntf Sol Kulak
+	</string>
+	<string name="Alt Right Ear">
+		Altrntf Sağ Kulak
+	</string>
+	<string name="Alt Left Eye">
+		Altrntf Sol Göz
+	</string>
+	<string name="Alt Right Eye">
+		Altrntf Sağ Göz
+	</string>
+	<string name="Tongue">
+		Dil
+	</string>
+	<string name="Groin">
+		Kasık
+	</string>
+	<string name="Left Hind Foot">
+		Sol Arka Ayak
+	</string>
+	<string name="Right Hind Foot">
+		Sağ Arka Ayak
+	</string>
 	<string name="Invalid Attachment">
 		Geçersiz Aksesuar Noktası
 	</string>
@@ -2224,12 +2278,12 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
 	<string name="ATTACH_BELLY">
 		Göbek
 	</string>
-	<string name="ATTACH_RPEC">
-		Sağ Göğüs
-	</string>
-	<string name="ATTACH_LPEC">
+	<string name="ATTACH_LEFT_PEC">
 		Sol Göğüs
 	</string>
+	<string name="ATTACH_RIGHT_PEC">
+		Sağ Göğüs
+	</string>
 	<string name="ATTACH_HUD_CENTER_2">
 		BÜG 2. Merkez
 	</string>
@@ -2260,6 +2314,51 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
 	<string name="ATTACH_AVATAR_CENTER">
 		Avatar Merkezi
 	</string>
+	<string name="ATTACH_LHAND_RING1">
+		Sol Yüzük Parmağı
+	</string>
+	<string name="ATTACH_RHAND_RING1">
+		Sağ Yüzük Parmağı
+	</string>
+	<string name="ATTACH_TAIL_BASE">
+		Kuyruk Tabanı
+	</string>
+	<string name="ATTACH_TAIL_TIP">
+		Kuyruk Ucu
+	</string>
+	<string name="ATTACH_LWING">
+		Sol Kanat
+	</string>
+	<string name="ATTACH_RWING">
+		Sağ Kanat
+	</string>
+	<string name="ATTACH_FACE_JAW">
+		Pençe
+	</string>
+	<string name="ATTACH_FACE_LEAR">
+		Altrntf Sol Kulak
+	</string>
+	<string name="ATTACH_FACE_REAR">
+		Altrntf Sağ Kulak
+	</string>
+	<string name="ATTACH_FACE_LEYE">
+		Altrntf Sol Göz
+	</string>
+	<string name="ATTACH_FACE_REYE">
+		Altrntf Sağ Göz
+	</string>
+	<string name="ATTACH_FACE_TONGUE">
+		Dil
+	</string>
+	<string name="ATTACH_GROIN">
+		Kasık
+	</string>
+	<string name="ATTACH_HIND_LFOOT">
+		Sol Arka Ayak
+	</string>
+	<string name="ATTACH_HIND_RFOOT">
+		Sağ Arka Ayak
+	</string>
 	<string name="CursorPos">
 		Satır [LINE], Sütun [COLUMN]
 	</string>
@@ -4249,6 +4348,12 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
 	<string name="OfflineStatus">
 		Çevrimdışı
 	</string>
+	<string name="not_online_msg">
+		Kullanıcı çevrimiçi değil - mesaj saklanıp daha sonra iletilecek.
+	</string>
+	<string name="not_online_inventory">
+		Kullanıcı çevrimiçi değil - envanter kaydedildi.
+	</string>
 	<string name="answered_call">
 		Aramanız yanıtlandı
 	</string>
diff --git a/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml
index f9c2fe47e7..2a00bb6172 100644
--- a/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
 	<text name="AvatarText">
 		化身
 	</text>
-	<slider label="最大複雜度:" name="IndirectMaxComplexity" tool_tip="控制在何時機下讓複雜化身呈像為「單色軟糖娃娃」"/>
+	<slider label="最大複雜度:" name="IndirectMaxComplexity" tool_tip="控制在何時機下讓複雜化身呈像為 JellyDoll"/>
 	<text name="IndirectMaxComplexityText">
 		0
 	</text>
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
index ace1302250..69bc4e7632 100644
--- a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="通話" name="Call"/>
 	<menu_item_call label="邀請加入群組" name="Invite..."/>
+	<menu_item_call label="重設骨架" name="Reset Skeleton"/>
 	<menu_item_call label="封鎖" name="Avatar Mute"/>
 	<menu_item_call label="回報" name="abuse"/>
 	<menu_item_call label="凍結" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
index d9e6eff897..cf56d7c86b 100644
--- a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="編輯我的裝扮" name="Edit Outfit"/>
 	<menu_item_call label="編輯我的體形" name="Edit My Shape"/>
 	<menu_item_call label="懸浮高度" name="Hover Height"/>
+	<menu_item_call label="重設骨架" name="Reset Skeleton"/>
 	<menu_item_call label="我的朋友" name="Friends..."/>
 	<menu_item_call label="我的群組" name="Groups..."/>
 	<menu_item_call label="我的個人檔案" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
index 0e0d1cc3d2..b58ec1d8cb 100644
--- a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
@@ -6,6 +6,7 @@
 	<menu_item_call label="IM" name="Send IM..."/>
 	<menu_item_call label="通話" name="Call"/>
 	<menu_item_call label="邀請加入群組" name="Invite..."/>
+	<menu_item_call label="重設骨架" name="Reset Skeleton"/>
 	<menu_item_call label="封鎖" name="Avatar Mute"/>
 	<menu_item_call label="回報" name="abuse"/>
 	<menu_item_call label="凍結" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
index a644a45df6..e2ddb57307 100644
--- a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
@@ -26,6 +26,7 @@
 	<menu_item_call label="編輯我的裝扮" name="Edit Outfit"/>
 	<menu_item_call label="編輯我的體形" name="Edit My Shape"/>
 	<menu_item_call label="懸浮高度" name="Hover Height"/>
+	<menu_item_call label="重設骨架" name="Reset Skeleton"/>
 	<menu_item_call label="我的朋友" name="Friends..."/>
 	<menu_item_call label="我的群組" name="Groups..."/>
 	<menu_item_call label="我的個人檔案" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index 41590d60c7..f2971491ac 100644
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -22,7 +22,6 @@
 			<menu_item_check label="請勿打擾" name="Do Not Disturb"/>
 		</menu>
 		<menu_item_call label="購買 L$…" name="Buy and Sell L$"/>
-		<menu_item_call label="商家發件匣…" name="MerchantOutbox"/>
 		<menu_item_call label="Marketplace 刊登…" name="MarketplaceListings"/>
 		<menu_item_call label="帳戶主控臺…" name="Manage My Account"/>
 		<menu_item_call label="偏好設定…" name="Preferences"/>
@@ -419,6 +418,7 @@
 			<menu_item_check label="停用細節層次" name="Disable LOD"/>
 			<menu_item_check label="除錯字元可見性" name="Debug Character Vis"/>
 			<menu_item_check label="顯示碰撞骨架" name="Show Collision Skeleton"/>
+			<menu_item_check label="顯示骨頭" name="Show Bones"/>
 			<menu_item_check label="顯示用戶目標" name="Display Agent Target"/>
 			<menu_item_call label="傾印附件" name="Dump Attachments"/>
 			<menu_item_call label="除錯化身材質" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml
index 3f08496a68..463afab1c0 100644
--- a/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/indra/newview/skins/default/xui/zh/notifications.xml
@@ -480,6 +480,9 @@
 	<notification name="CannotWearInfoNotComplete">
 		無法穿戴該物件,它尚未完成載入。 請稍候再試。
 	</notification>
+	<notification name="MustEnterPasswordToLogIn">
+		請輸入密碼以便登入。
+	</notification>
 	<notification name="MustHaveAccountToLogIn">
 		糟糕! 發現有內容留白。
 你必須為化身輸入一個使用者名稱。
@@ -548,6 +551,9 @@
 	<notification name="ChangeConnectionPort">
 		重新啟動 [APP_NAME] 後將啟用新的埠設定。
 	</notification>
+	<notification name="ChangeDeferredDebugSetting">
+		這個除錯設定將在重新啟動 [APP_NAME] 後啟用。
+	</notification>
 	<notification name="ChangeSkin">
 		重新啟動 [APP_NAME] 後將顯現新的皮膚。
 	</notification>
@@ -1359,12 +1365,13 @@
 			<ignore name="ignore" text="服裝花太多時間下載"/>
 		</form>
 	</notification>
-	<notification name="RegionAndAgentComplexity">
-		你的[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 視覺複雜度]是[AGENT_COMPLEXITY]。
+	<notification name="AgentComplexityWithVisibility">
+		你的[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 化身複雜度]是[AGENT_COMPLEXITY]。
 [OVERLIMIT_MSG]
+		<usetemplate ignoretext="警告我化身的複雜度是否可能過高" name="notifyignore"/>
 	</notification>
 	<notification name="AgentComplexity">
-		你的[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 視覺複雜度]是[AGENT_COMPLEXITY]。
+		你的[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 化身複雜度]是[AGENT_COMPLEXITY]。
 	</notification>
 	<notification name="FirstRun">
 		[APP_NAME] 安裝完成。
@@ -1479,6 +1486,10 @@ SHA1 指紋:[MD5_DIGEST]
 		你真的要確定產出目前地形,使其成為地形升/降極限的中間值,並設為「復原」工具的預設值?
 		<usetemplate name="okcancelbuttons" notext="取消" yestext="確定"/>
 	</notification>
+	<notification name="ConfirmTextureHeights">
+		你設的海拔範圍值,低值大於高值。  繼續?
+		<usetemplate canceltext="不要問" name="yesnocancelbuttons" notext="取消" yestext="確定"/>
+	</notification>
 	<notification name="MaxAllowedAgentOnRegion">
 		你最多只能有 [MAX_AGENTS] 位允許居民。
 	</notification>
@@ -1713,14 +1724,6 @@ SHA1 指紋:[MD5_DIGEST]
 		無法離開群組。 你是此群組僅存的所有人,不得離開群組。 請先把所有人職銜指派給另一人。
 		<usetemplate name="okbutton" yestext="確定"/>
 	</notification>
-	<notification name="GroupDepartError">
-		無法離開群組:[reason]。
-		<usetemplate name="okbutton" yestext="確定"/>
-	</notification>
-	<notification name="GroupDepart">
-		你已經離開[group_name]群組。
-		<usetemplate name="okbutton" yestext="確定"/>
-	</notification>
 	<notification name="ConfirmKick">
 		你確定要踢出這網格內的全部居民?
 		<usetemplate name="okcancelbuttons" notext="取消" yestext="踢出全部居民"/>
@@ -2390,6 +2393,10 @@ SHA1 指紋:[MD5_DIGEST]
 		你確定你要對你垃圾筒中的內容進行刪除?
 		<usetemplate ignoretext="在我清空收納區垃圾筒資料夾前確認" name="okcancelignore" notext="取消" yestext="確定"/>
 	</notification>
+	<notification name="TrashIsFull">
+		你的垃圾桶快滿了。 這可能會造成登入的問題。
+		<usetemplate name="okcancelbuttons" notext="我稍後再清空垃圾桶" yestext="現在清空垃圾桶"/>
+	</notification>
 	<notification name="ConfirmClearBrowserCache">
 		你確定要刪除你的旅行、網頁及搜尋歷史紀錄嗎?
 		<usetemplate name="okcancelbuttons" notext="取消" yestext="確定"/>
@@ -2973,11 +2980,11 @@ SHA1 指紋:[MD5_DIGEST]
 如果你繼續留在這地區,你將會被登出。
 	</notification>
 	<notification name="LoadWebPage">
-		載入網頁 [URL]?
+		載入網頁 [URL]?
 
 [MESSAGE]
 
-來源物件:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;(所有人:[NAME_SLURL])
+來源物件:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;(所有人是[NAME_SLURL])
 		<form name="form">
 			<button name="Gotopage" text="前往頁面"/>
 			<button name="Cancel" text="取消"/>
@@ -3246,11 +3253,15 @@ SHA1 指紋:[MD5_DIGEST]
 	<notification name="AttachmentSaved">
 		附件已儲存。
 	</notification>
-	<notification name="PresetNotSaved">
-		儲存預設名稱[NAME]時出錯。
+	<notification name="AppearanceToXMLSaved">
+		外觀已經存成位於[PATH]的XML
 	</notification>
-	<notification name="PresetNotDeleted">
-		刪除預設名稱[NAME]時出錯。
+	<notification name="AppearanceToXMLFailed">
+		將外觀存為XML失敗。
+    icon=&quot;notifytip.tga&quot;
+	name=&quot;PresetNotDeleted&quot;
+    type=&quot;notifytip&quot;&gt;
+刪除預設名稱[NAME]時出錯。
 	</notification>
 	<notification name="UnableToFindHelpTopic">
 		找不到這個元件的幫助主題。
@@ -4065,6 +4076,9 @@ SHA1 指紋:[MD5_DIGEST]
 	<notification name="CantAttachNotEnoughScriptResources">
 		腳本資源不足,無法附著物件!
 	</notification>
+	<notification name="IllegalAttachment">
+		這個附件要求了化身上不存在的點。 因此已將該附件附著到胸部。
+	</notification>
 	<notification name="CantDropItemTrialUser">
 		你無法在此卸除物件,請到「自由嘗試」區域再試。
 	</notification>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/zh/panel_preferences_alerts.xml
index 94eb3c1389..212880df55 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
 	<text name="tell_me_label">
 		告訴我:
 	</text>
-	<check_box label="當我花費或取得 L$" name="notify_money_change_checkbox"/>
+	<check_box label="當我花用 L$ 時" name="notify_money_spend_checkbox"/>
 	<check_box label="當我的朋友上線或離線" name="friends_online_notify_checkbox"/>
+	<check_box label="當我得到 L$ 時" name="notify_money_received_checkbox"/>
 	<text name="show_label">
 		總是顯示:
 	</text>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
index 8c4d2f9c18..b5c36668f6 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
 	<text name="BetterText">
 		最佳
 	</text>
+	<slider label="化身最大複雜度:" name="IndirectMaxComplexity" tool_tip="控制在何時機下讓複雜化身呈像為 JellyDoll"/>
+	<text name="IndirectMaxComplexityText">
+		0
+	</text>
 	<check_box initial_value="true" label="大氣著色" name="WindLightUseAtmosShaders"/>
 	<check_box initial_value="true" label="進階照明模型" name="UseLightShaders"/>
 	<button label="將設定存為預設值 …" name="PrefSaveButton"/>
 	<button label="載入預設..." name="PrefLoadButton"/>
+	min_val=&quot;0.125&quot;
 	<button label="刪除自訂配置…" name="PrefDeleteButton"/>
 	<button label="重設為我們建議的設定" name="Defaults"/>
 	<button label="進階設定…" name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_sound_devices.xml b/indra/newview/skins/default/xui/zh/panel_sound_devices.xml
index fa4e24a605..e29ffe31af 100644
--- a/indra/newview/skins/default/xui/zh/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/zh/panel_sound_devices.xml
@@ -16,9 +16,9 @@
 		輸出
 	</text>
 	<text name="My volume label">
-		我的音量:
+		麥克風音量:
 	</text>
-	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="用這控制條改變音量"/>
+	<slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="用這個控制條調整麥克風音量"/>
 	<text name="wait_text">
 		請稍候
 	</text>
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
index 2ce310b224..5ce5adf3f0 100644
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -41,6 +41,9 @@
 		[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
 [[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
 	</string>
+	<string name="BuildConfig">
+		建製設置 [BUILD_CONFIG]
+	</string>
 	<string name="AboutPosition">
 		你的方位是 [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1],地區名:[REGION],主機:&lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
 第二人生URL:&lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -72,6 +75,9 @@ LLCEFLib/CEF版本:[LLCEFLIB_VERSION]
 	<string name="ErrorFetchingServerReleaseNotesURL">
 		擷取伺服器版本說明 URL 時出錯。
 	</string>
+	<string name="BuildConfiguration">
+		建製設置
+	</string>
 	<string name="ProgressRestoring">
 		回存中...
 	</string>
@@ -1382,6 +1388,9 @@ http://secondlife.com/viewer-access-faq
 	<string name="BodyPartsRightLeg">
 		右腿
 	</string>
+	<string name="BodyPartsEnhancedSkeleton">
+		增強版骨架
+	</string>
 	<string name="GraphicsQualityLow">
 		低
 	</string>
@@ -1830,6 +1839,51 @@ http://secondlife.com/viewer-access-faq
 	<string name="Avatar Center">
 		化身中心
 	</string>
+	<string name="Left Ring Finger">
+		左無名指
+	</string>
+	<string name="Right Ring Finger">
+		右無名指
+	</string>
+	<string name="Tail Base">
+		尾巴基部
+	</string>
+	<string name="Tail Tip">
+		尾巴末梢
+	</string>
+	<string name="Left Wing">
+		左翼
+	</string>
+	<string name="Right Wing">
+		右翼
+	</string>
+	<string name="Jaw">
+		顎
+	</string>
+	<string name="Alt Left Ear">
+		替代左耳
+	</string>
+	<string name="Alt Right Ear">
+		替代右耳
+	</string>
+	<string name="Alt Left Eye">
+		替代左眼
+	</string>
+	<string name="Alt Right Eye">
+		替代右眼
+	</string>
+	<string name="Tongue">
+		舌頭
+	</string>
+	<string name="Groin">
+		鼠蹊
+	</string>
+	<string name="Left Hind Foot">
+		左後腳
+	</string>
+	<string name="Right Hind Foot">
+		右後腳
+	</string>
 	<string name="Invalid Attachment">
 		無效的附接點
 	</string>
@@ -2219,12 +2273,12 @@ http://secondlife.com/viewer-access-faq
 	<string name="ATTACH_BELLY">
 		腹部
 	</string>
-	<string name="ATTACH_RPEC">
-		右胸肌
-	</string>
-	<string name="ATTACH_LPEC">
+	<string name="ATTACH_LEFT_PEC">
 		左胸肌
 	</string>
+	<string name="ATTACH_RIGHT_PEC">
+		右胸肌
+	</string>
 	<string name="ATTACH_HUD_CENTER_2">
 		擡頭顯示中央 2
 	</string>
@@ -2255,6 +2309,51 @@ http://secondlife.com/viewer-access-faq
 	<string name="ATTACH_AVATAR_CENTER">
 		化身中心
 	</string>
+	<string name="ATTACH_LHAND_RING1">
+		左無名指
+	</string>
+	<string name="ATTACH_RHAND_RING1">
+		右無名指
+	</string>
+	<string name="ATTACH_TAIL_BASE">
+		尾巴基部
+	</string>
+	<string name="ATTACH_TAIL_TIP">
+		尾巴末梢
+	</string>
+	<string name="ATTACH_LWING">
+		左翼
+	</string>
+	<string name="ATTACH_RWING">
+		右翼
+	</string>
+	<string name="ATTACH_FACE_JAW">
+		顎
+	</string>
+	<string name="ATTACH_FACE_LEAR">
+		替代左耳
+	</string>
+	<string name="ATTACH_FACE_REAR">
+		替代右耳
+	</string>
+	<string name="ATTACH_FACE_LEYE">
+		替代左眼
+	</string>
+	<string name="ATTACH_FACE_REYE">
+		替代右眼
+	</string>
+	<string name="ATTACH_FACE_TONGUE">
+		舌頭
+	</string>
+	<string name="ATTACH_GROIN">
+		鼠蹊
+	</string>
+	<string name="ATTACH_HIND_LFOOT">
+		左後腳
+	</string>
+	<string name="ATTACH_HIND_RFOOT">
+		右後腳
+	</string>
 	<string name="CursorPos">
 		橫行 [LINE],縱列 [COLUMN]
 	</string>
@@ -4244,6 +4343,12 @@ http://secondlife.com/viewer-access-faq
 	<string name="OfflineStatus">
 		離線
 	</string>
+	<string name="not_online_msg">
+		使用者不在線上 - 訊息將留存,稍後傳遞。
+	</string>
+	<string name="not_online_inventory">
+		使用者不在線上 - 收納區已儲存。
+	</string>
 	<string name="answered_call">
 		你的通話已經接通
 	</string>
-- 
cgit v1.2.3


From 72d5ff36f56c4afee85f5863f64f237980341014 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 17 Aug 2016 16:31:28 -0400
Subject: MAINT-6647 - ignore previously created slm files on model upload.
 SL-442 - change coloring for show bones, to highlight joint positions and
 rigging

---
 indra/newview/llface.cpp                |  1 +
 indra/newview/llfloatermodelpreview.cpp | 17 +++++++++++------
 indra/newview/llfloatermodelpreview.h   |  4 ++--
 indra/newview/llvoavatar.cpp            | 31 ++++++++++++++++++-------------
 4 files changed, 32 insertions(+), 21 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index de349a03d4..424bc0228c 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -573,6 +573,7 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)
 				LLRiggedVolume* rigged = volume->getRiggedVolume();
 				if (rigged)
 				{
+                    // BENTO - called when selecting a face during edit of a mesh object
 					LLGLEnable offset(GL_POLYGON_OFFSET_FILL);
 					glPolygonOffset(-1.f, -1.f);
 					gGL.multMatrix((F32*) volume->getRelativeXform().mMatrix);
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 0f0fafcce6..1fd2d429a7 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -1656,12 +1656,11 @@ void LLModelPreview::saveUploadData(bool save_skinweights, bool save_joint_posit
 	if (!mLODFile[LLModel::LOD_HIGH].empty())
 	{
 		std::string filename = mLODFile[LLModel::LOD_HIGH];
-		
-		std::string::size_type i = filename.rfind(".");
-		if (i != std::string::npos)
-		{
-			filename.replace(i, filename.size()-1, ".slm");
-			saveUploadData(filename, save_skinweights, save_joint_positions);
+        std::string slm_filename;
+
+        if (LLModelLoader::getSLMFilename(filename, slm_filename))
+        {
+			saveUploadData(slm_filename, save_skinweights, save_joint_positions);
 		}
 	}
 }
@@ -1818,6 +1817,12 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable
 	}
 	else
 	{
+        // For MAINT-6647, we have set force_disable_slm to true,
+        // which means this code path will never be taken. Trying to
+        // re-use SLM files has never worked properly; in particular,
+        // it tends to force the UI into strange checkbox options
+        // which cannot be altered.
+        
 		//only try to load from slm if viewer is configured to do so and this is the 
 		//initial model load (not an LoD or physics shape)
 		mModelLoader->mTrySLM = gSavedSettings.getBOOL("MeshImportUseSLM") && mUploadData.empty();
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index 217ac35888..c4e42c76bd 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -106,7 +106,7 @@ public:
 	void refresh();
 	
 	void			loadModel(S32 lod);
-	void 			loadModel(S32 lod, const std::string& file_name, bool force_disable_slm = false);
+	void 			loadModel(S32 lod, const std::string& file_name, bool force_disable_slm = true);
 	
 	void onViewOptionChecked(LLUICtrl* ctrl);
 	bool isViewOptionChecked(const LLSD& userdata);
@@ -261,7 +261,7 @@ public:
 	void setPreviewLOD(S32 lod);
 	void clearModel(S32 lod);
     void getJointAliases(JointMap& joint_map);
-	void loadModel(std::string filename, S32 lod, bool force_disable_slm = false);
+	void loadModel(std::string filename, S32 lod, bool force_disable_slm = true);
 	void loadModelCallback(S32 lod);
     bool lodsReady() { return !mGenLOD && mLodsQuery.empty(); }
     void queryLODs() { mGenLOD = true; };
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index db0316ebcd..946db6713e 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -1428,12 +1428,15 @@ void LLVOAvatar::renderBones()
 	avatar_joint_list_t::iterator iter = mSkeleton.begin();
 	avatar_joint_list_t::iterator end  = mSkeleton.end();
 
-    static LLVector3 BASE_COLOR_OCCLUDED(1.0f, 0.0f, 0.0f);
-    static LLVector3 BASE_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
-    static LLVector3 EXTENDED_COLOR_OCCLUDED(0.0f, 1.0f, 0.0f);
-    static LLVector3 EXTENDED_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
+    // For bones with position overrides defined
+    static LLVector3 OVERRIDE_COLOR_OCCLUDED(1.0f, 0.0f, 0.0f);
+    static LLVector3 OVERRIDE_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
+    // For bones which are rigged to by at least one attachment
     static LLVector3 RIGGED_COLOR_OCCLUDED(0.0f, 1.0f, 1.0f);
     static LLVector3 RIGGED_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
+    // For bones not otherwise colored
+    static LLVector3 OTHER_COLOR_OCCLUDED(0.0f, 1.0f, 0.0f);
+    static LLVector3 OTHER_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
     
     static F32 SPHERE_SCALEF = 0.001f;
 
@@ -1446,25 +1449,27 @@ void LLVOAvatar::renderBones()
 		}
 
 		jointp->updateWorldMatrix();
-        LLJoint::SupportCategory sc = jointp->getSupport();
+
         LLVector3 occ_color, visible_color;
 
-        if (jointIsRiggedTo(jointp->getName()))
+        LLVector3 pos;
+        LLUUID mesh_id;
+        if (jointp->hasAttachmentPosOverride(pos,mesh_id))
         {
-            occ_color = RIGGED_COLOR_OCCLUDED;
-            visible_color = RIGGED_COLOR_VISIBLE;
+            occ_color = OVERRIDE_COLOR_OCCLUDED;
+            visible_color = OVERRIDE_COLOR_VISIBLE;
         }
         else
         {
-            if (sc == LLJoint::SUPPORT_BASE)
+            if (jointIsRiggedTo(jointp->getName()))
             {
-                occ_color = BASE_COLOR_OCCLUDED;
-                visible_color = BASE_COLOR_VISIBLE;
+                occ_color = RIGGED_COLOR_OCCLUDED;
+                visible_color = RIGGED_COLOR_VISIBLE;
             }
             else
             {
-                occ_color = EXTENDED_COLOR_OCCLUDED;
-                visible_color = EXTENDED_COLOR_VISIBLE;
+                occ_color = OTHER_COLOR_OCCLUDED;
+                visible_color = OTHER_COLOR_VISIBLE;
             }
         }
         LLVector3 begin_pos(0,0,0);
-- 
cgit v1.2.3


From 1e6d9ba4be8333293841fa35e7650f59adcc245d Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Thu, 18 Aug 2016 11:31:16 -0400
Subject: MAINT-6647 - make SLM files even more dead.

---
 indra/newview/app_settings/settings.xml | 2 +-
 indra/newview/llfloatermodelpreview.cpp | 4 +++-
 2 files changed, 4 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 8735ca6026..0a9f1a44f0 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -6440,7 +6440,7 @@
     <key>Type</key>
     <string>Boolean</string>
     <key>Value</key>
-    <integer>1</integer>
+    <integer>0</integer>
   </map>
   <key>MeshUploadLogXML</key>
   <map>
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 1fd2d429a7..3b7f09b27b 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -4244,7 +4244,9 @@ void LLFloaterModelPreview::onUpload(void* user_data)
 	bool upload_skinweights = mp->childGetValue("upload_skin").asBoolean();
 	bool upload_joint_positions = mp->childGetValue("upload_joints").asBoolean();
 
-	mp->mModelPreview->saveUploadData(upload_skinweights, upload_joint_positions);
+
+    // MAINT-6647 - removed SLM files
+	//mp->mModelPreview->saveUploadData(upload_skinweights, upload_joint_positions);
 
 	gMeshRepo.uploadModel(mp->mModelPreview->mUploadData, mp->mModelPreview->mPreviewScale,
 						  mp->childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions, mp->mUploadModelUrl,
-- 
cgit v1.2.3


From d23bb7e05667d722c38208419c137a0bb13ca6c4 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 19 Aug 2016 09:47:26 -0400
Subject: MAINT-6647 - make SLM behavior still available if MeshImportUseSLM is
 true; still defaults to false.

---
 indra/newview/llfloatermodelpreview.cpp | 10 ++++------
 indra/newview/llfloatermodelpreview.h   |  4 ++--
 2 files changed, 6 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 3b7f09b27b..93775b62ed 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -1667,10 +1667,6 @@ void LLModelPreview::saveUploadData(bool save_skinweights, bool save_joint_posit
 
 void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinweights, bool save_joint_positions)
 {
-	if (!gSavedSettings.getBOOL("MeshImportUseSLM"))
-	{
-		return;
-	}
 
 	std::set<LLPointer<LLModel> > meshes;
 	std::map<LLModel*, std::string> mesh_binary;
@@ -4245,8 +4241,10 @@ void LLFloaterModelPreview::onUpload(void* user_data)
 	bool upload_joint_positions = mp->childGetValue("upload_joints").asBoolean();
 
 
-    // MAINT-6647 - removed SLM files
-	//mp->mModelPreview->saveUploadData(upload_skinweights, upload_joint_positions);
+	if (gSavedSettings.getBOOL("MeshImportUseSLM"))
+	{
+        mp->mModelPreview->saveUploadData(upload_skinweights, upload_joint_positions);
+    }
 
 	gMeshRepo.uploadModel(mp->mModelPreview->mUploadData, mp->mModelPreview->mPreviewScale,
 						  mp->childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions, mp->mUploadModelUrl,
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index c4e42c76bd..217ac35888 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -106,7 +106,7 @@ public:
 	void refresh();
 	
 	void			loadModel(S32 lod);
-	void 			loadModel(S32 lod, const std::string& file_name, bool force_disable_slm = true);
+	void 			loadModel(S32 lod, const std::string& file_name, bool force_disable_slm = false);
 	
 	void onViewOptionChecked(LLUICtrl* ctrl);
 	bool isViewOptionChecked(const LLSD& userdata);
@@ -261,7 +261,7 @@ public:
 	void setPreviewLOD(S32 lod);
 	void clearModel(S32 lod);
     void getJointAliases(JointMap& joint_map);
-	void loadModel(std::string filename, S32 lod, bool force_disable_slm = true);
+	void loadModel(std::string filename, S32 lod, bool force_disable_slm = false);
 	void loadModelCallback(S32 lod);
     bool lodsReady() { return !mGenLOD && mLodsQuery.empty(); }
     void queryLODs() { mGenLOD = true; };
-- 
cgit v1.2.3


From 278825191bdbcc61d398d85c9377c4e921423dde Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Tue, 23 Aug 2016 15:08:14 -0400
Subject: TEST - non-SSE code path for matrix ops used in mesh skinning.

---
 indra/newview/lldrawpoolavatar.cpp | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 843cd9b249..e9524189ed 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -1628,6 +1628,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(
             LLSkinningUtil::getPerVertexSkinMatrix(weight[j].getF32ptr(), mat, false, final_mat, max_joints);
 			
 			LLVector4a& v = vol_face.mPositions[j];
+
 			LLVector4a t;
 			LLVector4a dst;
 			bind_shape_matrix.affineTransform(v, t);
-- 
cgit v1.2.3


From 2de32f2485a5a9c570f4437056bc1486f6fe8da0 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Wed, 24 Aug 2016 10:50:23 -0400
Subject: SL-427 - trying less frequent computeBodySize() updates to avoid
 'camera at sea' and related issues.

---
 indra/newview/llvoavatar.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 946db6713e..9a26d8f78f 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3605,7 +3605,8 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
         // that affect the body size calculation, computed body size
         // can get stale much more easily. Simplest fix is to update
         // it frequently.
-        computeBodySize();
+        // SL-427: this appears to be too frequent, moving to only do on animation state change.
+        // computeBodySize();
     
 		// correct for the fact that the pelvis is not necessarily the center 
 		// of the agent's physical representation
@@ -5093,6 +5094,12 @@ void LLVOAvatar::processAnimationStateChanges()
 //-----------------------------------------------------------------------------
 BOOL LLVOAvatar::processSingleAnimationStateChange( const LLUUID& anim_id, BOOL start )
 {
+    // SL-402, SL-427 - we need to update body size often enough to
+    // keep appearances in sync, but not so often that animations
+    // cause constant jiggling of the body or camera. Possible
+    // compromise is to do it on animation changes:
+    computeBodySize();
+    
 	BOOL result = FALSE;
 
 	if ( start ) // start animation
-- 
cgit v1.2.3


From 1848a9267bf2cd4352a80e1e27059194518dc344 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Thu, 25 Aug 2016 10:42:34 -0400
Subject: SL-427 - debug logging for AvatarBodySize will give details about
 when and why body size changed

---
 indra/newview/llvoavatar.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 9a26d8f78f..e9f00f04fa 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3606,7 +3606,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
         // can get stale much more easily. Simplest fix is to update
         // it frequently.
         // SL-427: this appears to be too frequent, moving to only do on animation state change.
-        // computeBodySize();
+        //computeBodySize();
     
 		// correct for the fact that the pelvis is not necessarily the center 
 		// of the agent's physical representation
-- 
cgit v1.2.3


From d07a8b9965b54fca34b239a51af46b996a58d553 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 2 Sep 2016 08:41:22 -0400
Subject: SL-124 - small comment cleanups

---
 indra/newview/llface.cpp          | 2 +-
 indra/newview/llfasttimerview.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 424bc0228c..3d5e2d356e 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -573,7 +573,7 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)
 				LLRiggedVolume* rigged = volume->getRiggedVolume();
 				if (rigged)
 				{
-                    // BENTO - called when selecting a face during edit of a mesh object
+                    // called when selecting a face during edit of a mesh object
 					LLGLEnable offset(GL_POLYGON_OFFSET_FILL);
 					glPolygonOffset(-1.f, -1.f);
 					gGL.multMatrix((F32*) volume->getRelativeXform().mMatrix);
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index e9b5403dea..d1e77f57e2 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -904,7 +904,7 @@ void LLFastTimerView::doAnalysisDefault(std::string baseline, std::string target
 			base[label]["Samples"].asInteger());			
 	}
 
-	// BENTO - this currently crashes
+	// This currently crashes, possibly due to a race condition in shutdown:
 	// exportCharts(baseline, target);
 
 	os.flush();
-- 
cgit v1.2.3