summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.hgtags3
-rw-r--r--BuildParams8
-rw-r--r--indra/llplugin/llpluginclassmedia.cpp18
-rw-r--r--indra/llplugin/llpluginclassmedia.h9
-rw-r--r--indra/llplugin/llpluginclassmediaowner.h3
-rw-r--r--indra/llui/lliconctrl.h1
-rw-r--r--indra/llui/llmenugl.cpp3
-rw-r--r--indra/media_plugins/webkit/media_plugin_webkit.cpp14
-rw-r--r--indra/newview/app_settings/settings.xml38
-rw-r--r--indra/newview/app_settings/settings_minimal.xml6
-rw-r--r--indra/newview/llagentlistener.cpp4
-rw-r--r--indra/newview/llappviewer.cpp40
-rw-r--r--indra/newview/llappviewer.h1
-rw-r--r--indra/newview/llappviewerlinux.cpp2
-rw-r--r--indra/newview/llappviewermacosx.cpp2
-rw-r--r--indra/newview/llcommanddispatcherlistener.cpp2
-rwxr-xr-xindra/newview/llcommandhandler.cpp15
-rw-r--r--indra/newview/llcommandhandler.h1
-rw-r--r--indra/newview/llfirstuse.cpp6
-rw-r--r--indra/newview/llfloaterhelpbrowser.cpp1
-rw-r--r--indra/newview/llhints.cpp16
-rw-r--r--indra/newview/llmediactrl.cpp57
-rw-r--r--indra/newview/llmediactrl.h11
-rw-r--r--indra/newview/llnavigationbar.cpp3
-rw-r--r--indra/newview/llpanellogin.cpp21
-rw-r--r--indra/newview/llpanellogin.h4
-rw-r--r--indra/newview/llstartup.cpp2
-rw-r--r--indra/newview/lltoolpie.cpp232
-rw-r--r--indra/newview/llurldispatcher.cpp25
-rw-r--r--indra/newview/llurldispatcher.h3
-rw-r--r--indra/newview/llurldispatcherlistener.cpp2
-rw-r--r--indra/newview/llviewerdisplay.cpp4
-rw-r--r--indra/newview/llviewermedia.cpp21
-rw-r--r--indra/newview/llviewermediafocus.cpp12
-rw-r--r--indra/newview/llviewermenu.cpp62
-rw-r--r--indra/newview/llviewerparcelmedia.cpp6
-rw-r--r--indra/newview/llviewerregion.cpp2
-rw-r--r--indra/newview/llviewerwindow.cpp13
-rw-r--r--indra/newview/llworldmapview.cpp2
-rw-r--r--indra/newview/skins/default/xui/en/floater_preferences.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_media_ctrl.xml31
-rw-r--r--indra/newview/skins/default/xui/en/menu_text_editor.xml15
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_hint.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_hint_image.xml40
-rw-r--r--indra/newview/skins/default/xui/en/panel_login.xml1
-rw-r--r--indra/newview/skins/minimal/textures/click_to_move.pngbin0 -> 8188 bytes
-rw-r--r--indra/newview/skins/minimal/textures/textures.xml1
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_avatar_icon.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_bottomtray.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_favorites.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_group_plus.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_hide_navbar.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_imchiclet_adhoc.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_imchiclet_group.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_imchiclet_p2p.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_inv_offer_chiclet.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_inventory.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_inventory_add.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_mini_map.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_navbar.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_nearby_chat.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_object_icon.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_people_groups.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_place_add_button.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_script_chiclet.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_slurl.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/menu_topinfobar.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/panel_login.xml1
-rw-r--r--install.xml1898
70 files changed, 2408 insertions, 310 deletions
diff --git a/.hgtags b/.hgtags
index 2f6fd6e0e7..39f39ee122 100644
--- a/.hgtags
+++ b/.hgtags
@@ -86,6 +86,3 @@ c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1
c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1
9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2
9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2
-56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start
-c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1
-c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1
diff --git a/BuildParams b/BuildParams
index 00fa326ccd..9666e79dd7 100644
--- a/BuildParams
+++ b/BuildParams
@@ -68,6 +68,7 @@ viewer-pre-release.login_channel = "Second Life Release"
viewer-pre-release.build_debug_release_separately = true
viewer-pre-release.build_viewer_update_version_manager = true
#viewer-pre-release.release-viewer.jira = DRTVWR-13
+
# =======================================
# brad
# ========================================
@@ -155,12 +156,7 @@ media.build_viewer_update_version_manager = false
# oz
# ================
-oz-viewer-devreview.build_debug_release_separately = true
-viewer-devreview.build_debug_release_separately = true
-oz_viewer-poreview.build_debug_release_separately = true
-oz-project-1.build_debug_release_separately = true
-oz-project-2.build_debug_release_separately = true
-oz-project-3.build_debug_release_separately = true
+oz_viewer-devreview.build_debug_release_separately = true
# ========================================
# enus
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 26a20cede8..2103216536 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -144,8 +144,10 @@ void LLPluginClassMedia::reset()
mStatusText.clear();
mProgressPercent = 0;
mClickURL.clear();
+ mClickNavType.clear();
mClickTarget.clear();
mClickUUID.clear();
+ mStatusCode = 0;
// media_time class
mCurrentTime = 0.0f;
@@ -1024,9 +1026,15 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
else if(message_name == "click_nofollow")
{
mClickURL = message.getValue("uri");
+ mClickNavType = message.getValue("nav_type");
mClickTarget.clear();
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW);
}
+ else if(message_name == "navigate_error_page")
+ {
+ mStatusCode = message.getValueS32("status_code");
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_ERROR_PAGE);
+ }
else if(message_name == "cookie_set")
{
if(mOwner)
@@ -1192,16 +1200,6 @@ void LLPluginClassMedia::browse_back()
sendMessage(message);
}
-void LLPluginClassMedia::set_status_redirect(int code, const std::string &url)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_status_redirect");
-
- message.setValueS32("code", code);
- message.setValue("url", url);
-
- sendMessage(message);
-}
-
void LLPluginClassMedia::setBrowserUserAgent(const std::string& user_agent)
{
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_user_agent");
diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h
index 618e928a08..cf8d8b26b9 100644
--- a/indra/llplugin/llpluginclassmedia.h
+++ b/indra/llplugin/llpluginclassmedia.h
@@ -199,7 +199,6 @@ public:
void browse_reload(bool ignore_cache = false);
void browse_forward();
void browse_back();
- void set_status_redirect(int code, const std::string &url);
void setBrowserUserAgent(const std::string& user_agent);
void proxyWindowOpened(const std::string &target, const std::string &uuid);
void proxyWindowClosed(const std::string &uuid);
@@ -227,11 +226,17 @@ public:
// This is valid after MEDIA_EVENT_CLICK_LINK_HREF or MEDIA_EVENT_CLICK_LINK_NOFOLLOW
std::string getClickURL() const { return mClickURL; };
+ // This is valid after MEDIA_EVENT_CLICK_LINK_NOFOLLOW
+ std::string getClickNavType() const { return mClickNavType; };
+
// This is valid after MEDIA_EVENT_CLICK_LINK_HREF
std::string getClickTarget() const { return mClickTarget; };
// This is valid during MEDIA_EVENT_CLICK_LINK_HREF and MEDIA_EVENT_GEOMETRY_CHANGE
std::string getClickUUID() const { return mClickUUID; };
+
+ // This is valid after MEDIA_EVENT_NAVIGATE_ERROR_PAGE
+ S32 getStatusCode() const { return mStatusCode; };
// These are valid during MEDIA_EVENT_GEOMETRY_CHANGE
S32 getGeometryX() const { return mGeometryX; };
@@ -378,12 +383,14 @@ protected:
int mProgressPercent;
std::string mLocation;
std::string mClickURL;
+ std::string mClickNavType;
std::string mClickTarget;
std::string mClickUUID;
S32 mGeometryX;
S32 mGeometryY;
S32 mGeometryWidth;
S32 mGeometryHeight;
+ S32 mStatusCode;
std::string mAuthURL;
std::string mAuthRealm;
std::string mHoverText;
diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h
index 42e93cc6d7..5a4fb1ce90 100644
--- a/indra/llplugin/llpluginclassmediaowner.h
+++ b/indra/llplugin/llpluginclassmediaowner.h
@@ -52,12 +52,13 @@ public:
MEDIA_EVENT_STATUS_TEXT_CHANGED, // browser has updated the status text
MEDIA_EVENT_NAME_CHANGED, // browser has updated the name of the media (typically <title> tag)
MEDIA_EVENT_LOCATION_CHANGED, // browser location (URL) has changed (maybe due to internal navagation/frames/etc)
+ MEDIA_EVENT_NAVIGATE_ERROR_PAGE, // browser navigated to a page that resulted in an HTTP error
MEDIA_EVENT_CLICK_LINK_HREF, // I'm not entirely sure what the semantics of these two are
MEDIA_EVENT_CLICK_LINK_NOFOLLOW,
MEDIA_EVENT_CLOSE_REQUEST, // The plugin requested its window be closed (currently hooked up to javascript window.close in webkit)
MEDIA_EVENT_PICK_FILE_REQUEST, // The plugin wants the user to pick a file
MEDIA_EVENT_GEOMETRY_CHANGE, // The plugin requested its window geometry be changed (per the javascript window interface)
-
+
MEDIA_EVENT_PLUGIN_FAILED_LAUNCH, // The plugin failed to launch
MEDIA_EVENT_PLUGIN_FAILED, // The plugin died unexpectedly
diff --git a/indra/llui/lliconctrl.h b/indra/llui/lliconctrl.h
index e9bdab2d47..669e126266 100644
--- a/indra/llui/lliconctrl.h
+++ b/indra/llui/lliconctrl.h
@@ -69,6 +69,7 @@ public:
void setColor(const LLColor4& color) { mColor = color; }
void setImage(LLPointer<LLUIImage> image) { mImagep = image; }
+ const LLPointer<LLUIImage> getImage() { return mImagep; }
private:
void setIconImageDrawSize() ;
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index f0374de98f..8de9c769e2 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -3105,9 +3105,6 @@ void LLMenuGL::showPopup(LLView* spawning_view, LLMenuGL* menu, S32 x, S32 y)
CURSOR_HEIGHT + MOUSE_CURSOR_PADDING * 2);
menu->translateIntoRectWithExclusion( menu_region_rect, mouse_rect, FALSE );
menu->getParent()->sendChildToFront(menu);
-
-
-
}
///============================================================================
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index e24ee6629e..9ba8edbb59 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -492,6 +492,15 @@ private:
////////////////////////////////////////////////////////////////////////////////
// virtual
+ void onNavigateErrorPage(const EventType& event)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_error_page");
+ message.setValueS32("status_code", event.getIntValue());
+ sendMessage(message);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
void onLocationChange(const EventType& event)
{
if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
@@ -519,6 +528,11 @@ private:
{
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow");
message.setValue("uri", event.getEventUri());
+#if LLQTWEBKIT_API_VERSION >= 7
+ message.setValue("nav_type", event.getNavigationType());
+#else
+ message.setValue("nav_type", "clicked");
+#endif
sendMessage(message);
}
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 14f1b3c4ba..1468067f63 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3210,14 +3210,14 @@
<map>
<key>Comment</key>
<string>Specifies that you have not logged in with the viewer since you performed a clean install</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstSelectedDisabledPopups</key>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>FirstSelectedDisabledPopups</key>
<map>
<key>Comment</key>
<string>Return false if there is not disabled popup selected in the list of floater preferences popups</string>
@@ -12608,5 +12608,27 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>GenericErrorPageURL</key>
+ <map>
+ <key>Comment</key>
+ <string>URL to set as a property on LLMediaControl to navigate to if the a page completes with a 400-499 HTTP status code</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/404.html</string>
+ </map>
+ <key>DestinationsAndAvatarsVisibility</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether destination panel or avatar picker are open (0=destination guide, 1=avatar picker, default=nothing)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
</map>
</llsd>
diff --git a/indra/newview/app_settings/settings_minimal.xml b/indra/newview/app_settings/settings_minimal.xml
index 03656f2a53..490da2c9d4 100644
--- a/indra/newview/app_settings/settings_minimal.xml
+++ b/indra/newview/app_settings/settings_minimal.xml
@@ -61,7 +61,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/damballah/howto/index.html?topic=[TOPIC]</string>
+ <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/howto/index.html?topic=[TOPIC]</string>
</map>
<key>PreferredMaturity</key>
<map>
@@ -345,7 +345,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/damballah/guide.html</string>
+ <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/guide.html</string>
</map>
<key>AvatarPickerURL</key>
<map>
@@ -356,7 +356,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/damballah/avatars.html</string>
+ <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/avatars.html</string>
</map>
<key>LogInventoryDecline</key>
<map>
diff --git a/indra/newview/llagentlistener.cpp b/indra/newview/llagentlistener.cpp
index d520debc31..e6f1c04675 100644
--- a/indra/newview/llagentlistener.cpp
+++ b/indra/newview/llagentlistener.cpp
@@ -64,7 +64,7 @@ void LLAgentListener::requestTeleport(LLSD const & event_data) const
params.append(event_data["x"]);
params.append(event_data["y"]);
params.append(event_data["z"]);
- LLCommandDispatcher::dispatch("teleport", params, LLSD(), NULL, true);
+ LLCommandDispatcher::dispatch("teleport", params, LLSD(), NULL, "clicked", true);
// *TODO - lookup other LLCommandHandlers for "agent", "classified", "event", "group", "floater", "parcel", "login", login_refresh", "balance", "chat"
// should we just compose LLCommandHandler and LLDispatchListener?
}
@@ -74,7 +74,7 @@ void LLAgentListener::requestTeleport(LLSD const & event_data) const
LLVector3(event_data["x"].asReal(),
event_data["y"].asReal(),
event_data["z"].asReal())).getSLURLString();
- LLURLDispatcher::dispatch(url, NULL, false);
+ LLURLDispatcher::dispatch(url, "clicked", NULL, false);
}
}
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index f6fe7ecd01..c993acb283 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -78,7 +78,6 @@
#include "llvoicechannel.h"
#include "llvoavatarself.h"
#include "llsidetray.h"
-#include "llfeaturemanager.h"
#include "llurlmatch.h"
#include "lltextutil.h"
#include "lllogininstance.h"
@@ -755,7 +754,7 @@ bool LLAppViewer::init()
//
// Various introspection concerning the libs we're using - particularly
- // the libs involved in getting to a full login screen.
+ // the libs involved in getting to a full login screen.
//
LL_INFOS("InitInfo") << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << LL_ENDL;
LL_INFOS("InitInfo") << "libcurl version is: " << LLCurl::getVersionString() << LL_ENDL;
@@ -2731,6 +2730,20 @@ void LLAppViewer::checkForCrash(void)
}
+//
+// This function decides whether the client machine meets the minimum requirements to
+// run in a maximized window, per the consensus of davep, boa and nyx on 3/30/2011.
+//
+bool LLAppViewer::meetsRequirementsForMaximizedStart()
+{
+ bool maximizedOk = (LLFeatureManager::getInstance()->getGPUClass() >= GPU_CLASS_2);
+
+ const U32 one_gigabyte_kb = 1024 * 1024;
+ maximizedOk &= (gSysMemory.getPhysicalMemoryKB() >= one_gigabyte_kb);
+
+ return maximizedOk;
+}
+
bool LLAppViewer::initWindow()
{
LL_INFOS("AppInit") << "Initializing window..." << LL_ENDL;
@@ -2750,7 +2763,8 @@ bool LLAppViewer::initWindow()
const S32 NEVER_SUBMIT_REPORT = 2;
bool use_watchdog = false;
int watchdog_enabled_setting = gSavedSettings.getS32("WatchdogEnabled");
- if(watchdog_enabled_setting == -1){
+ if(watchdog_enabled_setting == -1)
+ {
use_watchdog = !LLFeatureManager::getInstance()->isFeatureAvailable("WatchdogDisabled");
}
else
@@ -2767,11 +2781,6 @@ bool LLAppViewer::initWindow()
LLNotificationsUI::LLNotificationManager::getInstance();
- if (gSavedSettings.getBOOL("WindowMaximized"))
- {
- gViewerWindow->mWindow->maximize();
- }
-
if (!gNoRender)
{
//
@@ -2801,6 +2810,21 @@ bool LLAppViewer::initWindow()
LLAppViewer::instance()->forceErrorLLError();
}
+ //
+ // Determine if the window should start maximized on initial run based
+ // on graphics capability
+ //
+ if (gSavedSettings.getBOOL("FirstLoginThisInstall") && meetsRequirementsForMaximizedStart())
+ {
+ LL_INFOS("AppInit") << "This client met the requirements for a maximized initial screen." << LL_ENDL;
+ gSavedSettings.setBOOL("WindowMaximized", TRUE);
+ }
+
+ if (gSavedSettings.getBOOL("WindowMaximized"))
+ {
+ gViewerWindow->mWindow->maximize();
+ }
+
LLUI::sWindow = gViewerWindow->getWindow();
// Show watch cursor
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 0226211735..61ee6a7cf1 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -187,6 +187,7 @@ protected:
virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this.
+ virtual bool meetsRequirementsForMaximizedStart(); // Used on first login to decide to launch maximized
private:
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index 898cc1c0ba..523c2e3adf 100644
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -233,7 +233,7 @@ gboolean viewer_app_api_GoSLURL(ViewerAppAPI *obj, gchar *slurl, gboolean **succ
std::string url = slurl;
LLMediaCtrl* web = NULL;
const bool trusted_browser = false;
- if (LLURLDispatcher::dispatch(url, web, trusted_browser))
+ if (LLURLDispatcher::dispatch(url, "", web, trusted_browser))
{
// bring window to foreground, as it has just been "launched" from a URL
// todo: hmm, how to get there from here?
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index 1cd80986d8..c2916717bd 100644
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -500,7 +500,7 @@ OSErr AEGURLHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn)
LLMediaCtrl* web = NULL;
const bool trusted_browser = false;
- LLURLDispatcher::dispatch(url, web, trusted_browser);
+ LLURLDispatcher::dispatch(url, "", web, trusted_browser);
}
return(result);
diff --git a/indra/newview/llcommanddispatcherlistener.cpp b/indra/newview/llcommanddispatcherlistener.cpp
index 5744d055a9..586f45fd8f 100644
--- a/indra/newview/llcommanddispatcherlistener.cpp
+++ b/indra/newview/llcommanddispatcherlistener.cpp
@@ -65,7 +65,7 @@ void LLCommandDispatcherListener::dispatch(const LLSD& params) const
trusted_browser = params["trusted"].asBoolean();
}
LLCommandDispatcher::dispatch(params["cmd"], params["params"], params["query"], NULL,
- trusted_browser);
+ "clicked", trusted_browser);
}
void LLCommandDispatcherListener::enumerate(const LLSD& params) const
diff --git a/indra/newview/llcommandhandler.cpp b/indra/newview/llcommandhandler.cpp
index 1b6ba02aac..bb1fb41fae 100755
--- a/indra/newview/llcommandhandler.cpp
+++ b/indra/newview/llcommandhandler.cpp
@@ -35,7 +35,7 @@
// system includes
#include <boost/tokenizer.hpp>
-#define THROTTLE_PERIOD 5 // required secs between throttled commands
+#define THROTTLE_PERIOD 20 // required secs between throttled commands
static LLCommandDispatcherListener sCommandDispatcherListener;
@@ -59,6 +59,7 @@ public:
const LLSD& params,
const LLSD& query_map,
LLMediaCtrl* web,
+ const std::string& nav_type,
bool trusted_browser);
private:
@@ -91,6 +92,7 @@ bool LLCommandHandlerRegistry::dispatch(const std::string& cmd,
const LLSD& params,
const LLSD& query_map,
LLMediaCtrl* web,
+ const std::string& nav_type,
bool trusted_browser)
{
static bool slurl_blocked = false;
@@ -120,6 +122,14 @@ bool LLCommandHandlerRegistry::dispatch(const std::string& cmd,
return true;
case LLCommandHandler::UNTRUSTED_THROTTLE:
+ // if users actually click on a link, we don't need to throttle it
+ // (throttling mechanism is used to prevent an avalanche of clicks via
+ // javascript
+ if ( nav_type == "clicked" )
+ {
+ break;
+ }
+
cur_time = LLTimer::getElapsedSeconds();
if (cur_time < last_throttle_time + THROTTLE_PERIOD)
{
@@ -166,10 +176,11 @@ bool LLCommandDispatcher::dispatch(const std::string& cmd,
const LLSD& params,
const LLSD& query_map,
LLMediaCtrl* web,
+ const std::string& nav_type,
bool trusted_browser)
{
return LLCommandHandlerRegistry::instance().dispatch(
- cmd, params, query_map, web, trusted_browser);
+ cmd, params, query_map, web, nav_type, trusted_browser);
}
static std::string lookup(LLCommandHandler::EUntrustedAccess value);
diff --git a/indra/newview/llcommandhandler.h b/indra/newview/llcommandhandler.h
index 1e65b6de23..1e0895565a 100644
--- a/indra/newview/llcommandhandler.h
+++ b/indra/newview/llcommandhandler.h
@@ -95,6 +95,7 @@ public:
const LLSD& params,
const LLSD& query_map,
LLMediaCtrl* web,
+ const std::string& nav_type,
bool trusted_browser);
// Execute a command registered via the above mechanism,
// passing string parameters.
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index d63685e1af..2c4153688a 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -121,7 +121,11 @@ void LLFirstUse::notMoving(bool enable)
{
// fire off 2 notifications and rely on filtering to select the relevant one
firstUseNotification("FirstNotMoving", enable, "HintMove", LLSD(), LLSD().with("target", "move_btn").with("direction", "top"));
- firstUseNotification("FirstNotMoving", enable, "HintMoveArrows", LLSD(), LLSD().with("target", "bottom_tray").with("direction", "top").with("hint_image", "arrow_keys.png").with("down_arrow", ""));
+ firstUseNotification("FirstNotMoving", enable, "HintMoveClick", LLSD(), LLSD()
+ .with("target", "nav_bar")
+ .with("direction", "bottom")
+ .with("hint_image", "click_to_move.png")
+ .with("up_arrow", ""));
}
// static
diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp
index a650886d89..627defd006 100644
--- a/indra/newview/llfloaterhelpbrowser.cpp
+++ b/indra/newview/llfloaterhelpbrowser.cpp
@@ -50,6 +50,7 @@ BOOL LLFloaterHelpBrowser::postBuild()
{
mBrowser = getChild<LLMediaCtrl>("browser");
mBrowser->addObserver(this);
+ mBrowser->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
childSetAction("open_browser", onClickOpenWebBrowser, this);
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index c4dcaf11f9..722d67caf9 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -191,6 +191,8 @@ BOOL LLHintPopup::postBuild()
LLRect text_bounds = hint_text.getTextBoundingRect();
S32 delta_height = text_bounds.getHeight() - hint_text.getRect().getHeight();
reshape(getRect().getWidth(), getRect().getHeight() + delta_height);
+ hint_text.reshape(hint_text.getRect().getWidth(), hint_text.getRect().getHeight() + delta_height);
+// hint_text.translate(0, -delta_height);
return TRUE;
}
@@ -211,6 +213,20 @@ void LLHintPopup::draw()
alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeInTime, 0.f, 1.f);
}
+ LLIconCtrl& hint_icon = getChildRef<LLIconCtrl>("hint_image");
+
+ LLUIImagePtr hint_image = hint_icon.getImage();
+ S32 image_height = hint_image.isNull() ? 0 : hint_image->getHeight();
+ S32 image_width = hint_image.isNull() ? 0 : hint_image->getWidth();
+
+ S32 delta_height = image_height - hint_icon.getParent()->getParent()->getRect().getHeight();
+ hint_icon.getParent()->reshape(image_width, hint_icon.getParent()->getRect().getHeight());
+ hint_icon.getParent()->getParent()->reshape(hint_icon.getParent()->getParent()->getRect().getWidth(), image_height);
+ hint_icon.getParent()->getParent()->translate(0, -delta_height);
+
+ LLRect hint_rect = getLocalRect();
+ reshape(hint_rect.getWidth(), hint_rect.getHeight() + delta_height);
+
{ LLViewDrawContext context(alpha);
if (mTarget.empty())
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 9493fddf50..5007f1c17a 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -44,6 +44,7 @@
#include "llslurl.h"
#include "lluictrlfactory.h" // LLDefaultChildRegistry
#include "llkeyboard.h"
+#include "llviewermenu.h"
// linden library includes
#include "llfocusmgr.h"
@@ -73,6 +74,7 @@ LLMediaCtrl::Params::Params()
texture_height("texture_height", 1024),
caret_color("caret_color"),
initial_mime_type("initial_mime_type"),
+ error_page_url("error_page_url"),
media_id("media_id"),
trusted_content("trusted_content", false),
focus_on_click("focus_on_click", true)
@@ -102,9 +104,11 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
mTextureHeight ( 1024 ),
mClearCache(false),
mHomePageMimeType(p.initial_mime_type),
+ mErrorPageURL(p.error_page_url),
mTrusted(p.trusted_content),
mWindowShade(NULL),
- mHoverTextChanged(false)
+ mHoverTextChanged(false),
+ mContextMenu(NULL)
{
{
LLColor4 color = p.caret_color().get();
@@ -149,7 +153,6 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
LLMediaCtrl::~LLMediaCtrl()
{
-
if (mMediaSource)
{
mMediaSource->remObserver( this );
@@ -304,10 +307,12 @@ BOOL LLMediaCtrl::handleRightMouseUp( S32 x, S32 y, MASK mask )
BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask )
{
if (LLPanel::handleRightMouseDown(x, y, mask)) return TRUE;
- convertInputCoords(x, y);
+
+ S32 media_x = x, media_y = y;
+ convertInputCoords(media_x, media_y);
if (mMediaSource)
- mMediaSource->mouseDown(x, y, mask, 1);
+ mMediaSource->mouseDown(media_x, media_y, mask, 1);
gFocusMgr.setMouseCapture( this );
@@ -316,6 +321,12 @@ BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask )
setFocus( TRUE );
}
+ if (mContextMenu)
+ {
+ mContextMenu->show(x, y);
+ LLMenuGL::showPopup(this, mContextMenu, x, y);
+ }
+
return TRUE;
}
@@ -378,6 +389,8 @@ void LLMediaCtrl::onFocusLost()
//
BOOL LLMediaCtrl::postBuild ()
{
+ mContextMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(
+ "menu_media_ctrl.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2));
return TRUE;
}
@@ -503,22 +516,6 @@ bool LLMediaCtrl::canNavigateForward()
////////////////////////////////////////////////////////////////////////////////
//
-void LLMediaCtrl::set404RedirectUrl( std::string redirect_url )
-{
- if(mMediaSource && mMediaSource->hasMedia())
- mMediaSource->getMediaPlugin()->set_status_redirect( 404, redirect_url );
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLMediaCtrl::clr404RedirectUrl()
-{
- if(mMediaSource && mMediaSource->hasMedia())
- mMediaSource->getMediaPlugin()->set_status_redirect(404, "");
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
void LLMediaCtrl::clearCache()
{
if(mMediaSource)
@@ -626,6 +623,16 @@ void LLMediaCtrl::setTarget(const std::string& target)
}
}
+void LLMediaCtrl::setErrorPageURL(const std::string& url)
+{
+ mErrorPageURL = url;
+}
+
+const std::string& LLMediaCtrl::getErrorPageURL()
+{
+ return mErrorPageURL;
+}
+
////////////////////////////////////////////////////////////////////////////////
//
bool LLMediaCtrl::setCaretColor(unsigned int red, unsigned int green, unsigned int blue)
@@ -976,6 +983,16 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
};
break;
+ case MEDIA_EVENT_NAVIGATE_ERROR_PAGE:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAVIGATE_ERROR_PAGE" << LL_ENDL;
+ if ( mErrorPageURL.length() > 0 )
+ {
+ navigateTo(mErrorPageURL, "text/html");
+ };
+ };
+ break;
+
case MEDIA_EVENT_CLICK_LINK_HREF:
{
LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << self->getClickTarget() << "\", uri is " << self->getClickURL() << LL_ENDL;
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 38a74f90d3..28666e620f 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -34,6 +34,7 @@
class LLViewBorder;
class LLUICtrlFactory;
+class LLContextMenu;
////////////////////////////////////////////////////////////////////////////////
//
@@ -63,6 +64,7 @@ public:
Optional<std::string> initial_mime_type;
Optional<std::string> media_id;
+ Optional<std::string> error_page_url;
Params();
};
@@ -113,10 +115,9 @@ public:
void setTarget(const std::string& target);
- // set/clear URL to visit when a 404 page is reached
- void set404RedirectUrl( std::string redirect_url );
- void clr404RedirectUrl();
-
+ void setErrorPageURL(const std::string& url);
+ const std::string& getErrorPageURL();
+
// Clear the browser cache when the instance gets loaded
void clearCache();
@@ -179,6 +180,7 @@ public:
std::string mHomePageUrl;
std::string mHomePageMimeType;
std::string mCurrentNavUrl;
+ std::string mErrorPageURL;
std::string mTarget;
bool mIgnoreUIScale;
bool mAlwaysRefresh;
@@ -194,6 +196,7 @@ public:
bool mClearCache;
class LLWindowShade* mWindowShade;
bool mHoverTextChanged;
+ LLContextMenu* mContextMenu;
};
#endif // LL_LLMediaCtrl_H
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 3b160ddc8e..b8832dfd8e 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -57,6 +57,7 @@
#include "llviewercontrol.h"
#include "llfloatermediabrowser.h"
#include "llweb.h"
+#include "llhints.h"
#include "llinventorymodel.h"
#include "lllandmarkactions.h"
@@ -324,6 +325,8 @@ BOOL LLNavigationBar::postBuild()
LLTeleportHistory::getInstance()->setHistoryChangedCallback(
boost::bind(&LLNavigationBar::onTeleportHistoryChanged, this));
+ LLHints::registerHintTarget("nav_bar", LLView::getHandle());
+
return TRUE;
}
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 903cf4780d..7820ac3ecd 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -214,7 +214,9 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
}
updateLocationCombo(false);
- gSavedSettings.getControl("SessionSettingsFile")->getSignal()->connect(boost::bind(&onModeChange));
+ LLUICtrl& mode_combo = getChildRef<LLUICtrl>("mode_combo");
+ mode_combo.setValue(gSavedSettings.getString("SessionSettingsFile"));
+ mode_combo.setCommitCallback(boost::bind(&LLPanelLogin::onModeChange, this, getChild<LLUICtrl>("mode_combo")->getValue(), _2));
LLComboBox* server_choice_combo = sInstance->getChild<LLComboBox>("server_combo");
server_choice_combo->setCommitCallback(onSelectServer, NULL);
@@ -1159,23 +1161,26 @@ void LLPanelLogin::updateLoginPanelLinks()
sInstance->getChildView("forgot_password_text")->setVisible( system_grid);
}
-//static
-void LLPanelLogin::onModeChange()
+void LLPanelLogin::onModeChange(const LLSD& original_value, const LLSD& new_value)
{
- LLNotificationsUtil::add("ModeChange", LLSD(), LLSD(), boost::bind(&onModeChangeConfirm, _1, _2));
+ if (original_value.asString() != new_value.asString())
+ {
+ LLNotificationsUtil::add("ModeChange", LLSD(), LLSD(), boost::bind(&LLPanelLogin::onModeChangeConfirm, this, original_value, new_value, _1, _2));
+ }
}
-//static
-void LLPanelLogin::onModeChangeConfirm(const LLSD& notification, const LLSD& response)
+void LLPanelLogin::onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
switch (option)
{
case 0:
- LLAppViewer::instance()->requestQuit();
+ gSavedSettings.getControl("SessionSettingsFile")->set(new_value);
+ LLAppViewer::instance()->forceQuit();
break;
case 1:
- // do nothing
+ // revert to original value
+ getChild<LLUICtrl>("mode_combo")->setValue(original_value);
break;
default:
break;
diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h
index 1430bec832..9cc5e3456a 100644
--- a/indra/newview/llpanellogin.h
+++ b/indra/newview/llpanellogin.h
@@ -98,8 +98,8 @@ private:
static void onServerComboLostFocus(LLFocusableElement*);
static void updateServerCombo();
static void updateStartSLURL();
- static void onModeChange();
- static void onModeChangeConfirm(const LLSD& notification, const LLSD& response);
+ void onModeChange(const LLSD& original_value, const LLSD& new_value);
+ void onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response);
static void updateLoginPanelLinks();
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 8fccb35886..bfa8cf09fd 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2717,7 +2717,7 @@ bool LLStartUp::dispatchURL()
|| (dx*dx > SLOP*SLOP)
|| (dy*dy > SLOP*SLOP) )
{
- LLURLDispatcher::dispatch(getStartSLURL().getSLURLString(),
+ LLURLDispatcher::dispatch(getStartSLURL().getSLURLString(), "clicked",
NULL, false);
}
return true;
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 9549f180df..95bd210ae3 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -37,7 +37,7 @@
#include "llavatarnamecache.h"
#include "llviewercontrol.h"
#include "llfocusmgr.h"
-//#include "llfirstuse.h"
+#include "llfirstuse.h"
#include "llfloaterland.h"
#include "llfloaterreg.h"
#include "llfloaterscriptdebug.h"
@@ -528,42 +528,17 @@ void LLToolPie::selectionPropertiesReceived()
BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
{
- if (!mMouseOutsideSlop
- && mMouseButtonDown
- && gSavedSettings.getBOOL("ClickToWalk"))
- {
- S32 delta_x = x - mMouseDownX;
- S32 delta_y = y - mMouseDownY;
- S32 threshold = gSavedSettings.getS32("DragAndDropDistanceThreshold");
- if (delta_x * delta_x + delta_y * delta_y > threshold * threshold)
- {
- startCameraSteering();
- }
- }
-
mHoverPick = gViewerWindow->pickImmediate(x, y, FALSE);
-
- if (inCameraSteerMode())
- {
- steerCameraWithMouse(x, y);
- gViewerWindow->setCursor(UI_CURSOR_TOOLGRAB);
- return TRUE;
- }
-
- // perform a separate pick that detects transparent objects since they respond to 1-click actions
- LLPickInfo click_action_pick = gViewerWindow->pickImmediate(x, y, TRUE);
-
- // Show screen-space highlight glow effect
- bool show_highlight = false;
LLViewerObject *parent = NULL;
LLViewerObject *object = mHoverPick.getObject();
-
if (object)
{
parent = object->getRootEdit();
}
- LLViewerObject* click_action_object = click_action_pick.getObject();
+ // Show screen-space highlight glow effect
+ bool show_highlight = false;
+
if (handleMediaHover(mHoverPick))
{
// *NOTE: If you think the hover glow conflicts with the media outline, you
@@ -572,39 +547,70 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
// cursor set by media object
lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
}
- else if (click_action_object && useClickAction(mask, click_action_object, click_action_object->getRootEdit()))
+ else if (!mMouseOutsideSlop
+ && mMouseButtonDown
+ && gSavedSettings.getBOOL("ClickToWalk"))
{
- show_highlight = true;
- ECursorType cursor = cursorFromObject(click_action_object);
- gViewerWindow->setCursor(cursor);
- lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
+ S32 delta_x = x - mMouseDownX;
+ S32 delta_y = y - mMouseDownY;
+ S32 threshold = gSavedSettings.getS32("DragAndDropDistanceThreshold");
+ if (delta_x * delta_x + delta_y * delta_y > threshold * threshold)
+ {
+ startCameraSteering();
+ steerCameraWithMouse(x, y);
+ gViewerWindow->setCursor(UI_CURSOR_TOOLGRAB);
+ }
+ else
+ {
+ gViewerWindow->setCursor(UI_CURSOR_ARROW);
+ }
}
-
- else if ((object && !object->isAvatar() && object->usePhysics())
- || (parent && !parent->isAvatar() && parent->usePhysics()))
+ else if (inCameraSteerMode())
{
- show_highlight = true;
+ steerCameraWithMouse(x, y);
gViewerWindow->setCursor(UI_CURSOR_TOOLGRAB);
- lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
- }
- else if ( (object && object->flagHandleTouch())
- || (parent && parent->flagHandleTouch()))
- {
- show_highlight = true;
- gViewerWindow->setCursor(UI_CURSOR_HAND);
- lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
}
else
{
- gViewerWindow->setCursor(UI_CURSOR_ARROW);
- lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
+ // perform a separate pick that detects transparent objects since they respond to 1-click actions
+ LLPickInfo click_action_pick = gViewerWindow->pickImmediate(x, y, TRUE);
+
+ LLViewerObject* click_action_object = click_action_pick.getObject();
- if(!object)
+ if (click_action_object && useClickAction(mask, click_action_object, click_action_object->getRootEdit()))
+ {
+ show_highlight = true;
+ ECursorType cursor = cursorFromObject(click_action_object);
+ gViewerWindow->setCursor(cursor);
+ lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
+ }
+
+ else if ((object && !object->isAvatar() && object->usePhysics())
+ || (parent && !parent->isAvatar() && parent->usePhysics()))
+ {
+ show_highlight = true;
+ gViewerWindow->setCursor(UI_CURSOR_TOOLGRAB);
+ lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
+ }
+ else if ( (object && object->flagHandleTouch())
+ || (parent && parent->flagHandleTouch()))
+ {
+ show_highlight = true;
+ gViewerWindow->setCursor(UI_CURSOR_HAND);
+ lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
+ }
+ else
{
- LLViewerMediaFocus::getInstance()->clearHover();
+ gViewerWindow->setCursor(UI_CURSOR_ARROW);
+ lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
}
}
+ if(!object)
+ {
+ LLViewerMediaFocus::getInstance()->clearHover();
+ }
+
static LLCachedControl<bool> enable_highlight(
gSavedSettings, "RenderHoverGlowEnable", false);
LLDrawable* drawable = NULL;
@@ -662,6 +668,8 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask)
mAutoPilotDestination->setDuration(3.f);
handle_go_to();
+ LLFirstUse::notMoving(false);
+
mBlockClickToWalk = false;
return TRUE;
@@ -1430,6 +1438,7 @@ bool LLToolPie::handleMediaClick(const LLPickInfo& pick)
{
// Make sure keyboard focus is set to the media focus object.
gFocusMgr.setKeyboardFocus(LLViewerMediaFocus::getInstance());
+ LLEditMenuHandler::gEditMenuHandler = LLViewerMediaFocus::instance().getFocusedMediaImpl();
media_impl->mouseDown(pick.mUVCoords, gKeyboard->currentMask(TRUE));
mMediaMouseCaptureID = mep->getMediaID();
@@ -1709,8 +1718,13 @@ void LLToolPie::showVisualContextMenuEffect()
effectp->setDuration(0.25f);
}
+typedef enum e_near_far
+{
+ NEAR_INTERSECTION,
+ FAR_INTERSECTION
+} ENearFar;
-bool intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& ray_dir, const LLVector3& sphere_center, F32 sphere_radius, LLVector3& intersection_pt)
+bool intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& ray_dir, const LLVector3& sphere_center, F32 sphere_radius, e_near_far near_far, LLVector3& intersection_pt)
{
// do ray/sphere intersection by solving quadratic equation
LLVector3 sphere_to_ray_start_vec = ray_pt - sphere_center;
@@ -1718,10 +1732,11 @@ bool intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& ray_di
F32 C = sphere_to_ray_start_vec.lengthSquared() - (sphere_radius * sphere_radius);
F32 discriminant = B*B - 4.f*C;
- if (discriminant > 0.f)
+ if (discriminant >= 0.f)
{ // intersection detected, now find closest one
F32 t0 = (-B - sqrtf(discriminant)) / 2.f;
- if (t0 > 0.f)
+
+ if (t0 > 0.f && near_far == NEAR_INTERSECTION)
{
intersection_pt = ray_pt + ray_dir * t0;
}
@@ -1732,12 +1747,15 @@ bool intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& ray_di
}
return true;
}
-
- return false;
+ else
+ { // no intersection
+ return false;
+ }
}
void LLToolPie::startCameraSteering()
{
+ LLFirstUse::notMoving(false);
mMouseOutsideSlop = true;
mBlockClickToWalk = true;
@@ -1786,64 +1804,80 @@ void LLToolPie::startCameraSteering()
void LLToolPie::steerCameraWithMouse(S32 x, S32 y)
{
- const F32 MIN_ROTATION_RADIUS_FRACTION = 0.2f;
-
+ const LLViewerCamera& camera = LLViewerCamera::instance();
+ const LLCoordFrame& rotation_frame = gAgent.getFrameAgent();
const LLVector3 pick_pos = gAgent.getPosAgentFromGlobal(mSteerPick.mPosGlobal);
- const LLVector3 rotation_center = gAgent.getFrameAgent().getOrigin();
- // FIXME: get this to work with camera tilt (i.e. sitting on a rotating object)
- const LLVector3 rotation_up_axis(LLVector3::z_axis);
-
- LLVector3 object_rotation_center = rotation_center + parallel_component(pick_pos - rotation_center, rotation_up_axis);
- F32 min_rotation_radius = MIN_ROTATION_RADIUS_FRACTION * dist_vec(rotation_center, LLViewerCamera::instance().getOrigin());;
- F32 pick_distance_from_rotation_center = llclamp(dist_vec(pick_pos, object_rotation_center), min_rotation_radius, F32_MAX);
+ const LLVector3 pick_rotation_center = rotation_frame.getOrigin() + parallel_component(pick_pos - rotation_frame.getOrigin(), rotation_frame.getUpAxis());
+ const F32 MIN_ROTATION_RADIUS_FRACTION = 0.2f;
+ const F32 min_rotation_radius = MIN_ROTATION_RADIUS_FRACTION * dist_vec(pick_rotation_center, camera.getOrigin());;
+ const F32 pick_distance_from_rotation_center = llclamp(dist_vec(pick_pos, pick_rotation_center), min_rotation_radius, F32_MAX);
+ const LLVector3 camera_to_rotation_center = pick_rotation_center - camera.getOrigin();
+ const LLVector3 adjusted_camera_pos = LLViewerCamera::instance().getOrigin() + projected_vec(camera_to_rotation_center, rotation_frame.getUpAxis());
+ const F32 camera_distance_from_rotation_center = dist_vec(adjusted_camera_pos, pick_rotation_center);
- LLVector3 mouse_ray = orthogonal_component(gViewerWindow->mouseDirectionGlobal(x, y), rotation_up_axis);
+ LLVector3 mouse_ray = orthogonal_component(gViewerWindow->mouseDirectionGlobal(x, y), rotation_frame.getUpAxis());
mouse_ray.normalize();
- LLVector3 old_mouse_ray = orthogonal_component(gViewerWindow->mouseDirectionGlobal(mMouseSteerX, mMouseSteerY), rotation_up_axis);
+ LLVector3 old_mouse_ray = orthogonal_component(gViewerWindow->mouseDirectionGlobal(mMouseSteerX, mMouseSteerY), rotation_frame.getUpAxis());
old_mouse_ray.normalize();
- LLVector3 camera_pos = gAgentCamera.getCameraPositionAgent();
- LLVector3 camera_to_rotation_center = object_rotation_center - camera_pos;
- LLVector3 adjusted_camera_pos = camera_pos + projected_vec(camera_to_rotation_center, rotation_up_axis);
- LLVector3 rotation_fwd_axis = LLViewerCamera::instance().getAtAxis() - projected_vec(LLViewerCamera::instance().getAtAxis(), rotation_up_axis);
- rotation_fwd_axis.normalize();
- F32 pick_dist = dist_vec(pick_pos, adjusted_camera_pos);
-
+ F32 yaw_angle;
+ F32 old_yaw_angle;
LLVector3 mouse_on_sphere;
- bool mouse_hit_sphere = intersect_ray_with_sphere(adjusted_camera_pos + (mouse_ray * pick_dist * 1.1f),
- -1.f * mouse_ray,
- object_rotation_center,
- pick_distance_from_rotation_center,
- mouse_on_sphere);
-
LLVector3 old_mouse_on_sphere;
- intersect_ray_with_sphere(adjusted_camera_pos + (old_mouse_ray * pick_dist * 1.1f),
- -1.f * old_mouse_ray,
- object_rotation_center,
- pick_distance_from_rotation_center,
- old_mouse_on_sphere);
- if (mouse_hit_sphere)
+ if (intersect_ray_with_sphere(
+ adjusted_camera_pos,
+ mouse_ray,
+ pick_rotation_center,
+ pick_distance_from_rotation_center,
+ FAR_INTERSECTION,
+ mouse_on_sphere))
{
- // calculate rotation frame in screen space
- LLVector3 screen_rotation_up_axis = orthogonal_component(rotation_up_axis, LLViewerCamera::instance().getAtAxis());
- screen_rotation_up_axis.normalize();
-
- LLVector3 screen_rotation_left_axis = screen_rotation_up_axis % LLViewerCamera::instance().getAtAxis();
+ LLVector3 mouse_sphere_offset = mouse_on_sphere - pick_rotation_center;
+ yaw_angle = atan2f(mouse_sphere_offset * rotation_frame.getLeftAxis(), mouse_sphere_offset * rotation_frame.getAtAxis());
+ }
+ else
+ {
+ yaw_angle = F_PI_BY_TWO + asinf(pick_distance_from_rotation_center / camera_distance_from_rotation_center);
+ if (mouse_ray * rotation_frame.getLeftAxis() < 0.f)
+ {
+ yaw_angle *= -1.f;
+ }
+ }
- LLVector3 rotation_furthest_pt = object_rotation_center + pick_distance_from_rotation_center * rotation_fwd_axis;
- F32 mouse_lateral_distance = llclamp(((mouse_on_sphere - rotation_furthest_pt) * screen_rotation_left_axis) / pick_distance_from_rotation_center, -1.f, 1.f);
- F32 old_mouse_lateral_distance = llclamp(((old_mouse_on_sphere - rotation_furthest_pt) * screen_rotation_left_axis) / pick_distance_from_rotation_center, -1.f, 1.f);
+ if (intersect_ray_with_sphere(
+ adjusted_camera_pos,
+ old_mouse_ray,
+ pick_rotation_center,
+ pick_distance_from_rotation_center,
+ FAR_INTERSECTION,
+ old_mouse_on_sphere))
+ {
+ LLVector3 mouse_sphere_offset = old_mouse_on_sphere - pick_rotation_center;
+ old_yaw_angle = atan2f(mouse_sphere_offset * rotation_frame.getLeftAxis(), mouse_sphere_offset * rotation_frame.getAtAxis());
+ }
+ else
+ {
+ old_yaw_angle = F_PI_BY_TWO + asinf(pick_distance_from_rotation_center / camera_distance_from_rotation_center);
- F32 yaw_angle = asinf(mouse_lateral_distance);
- F32 old_yaw_angle = asinf(old_mouse_lateral_distance);
+ if (mouse_ray * rotation_frame.getLeftAxis() < 0.f)
+ {
+ old_yaw_angle *= -1.f;
+ }
+ }
- F32 delta_angle = yaw_angle - old_yaw_angle;
- if (!mClockwise) delta_angle *= -1.f;
+ const F32 delta_angle = yaw_angle - old_yaw_angle;
+ if (mClockwise)
+ {
gAgent.yaw(delta_angle);
- mMouseSteerX = x;
- mMouseSteerY = y;
}
+ else
+ {
+ gAgent.yaw(-delta_angle);
+ }
+
+ mMouseSteerX = x;
+ mMouseSteerY = y;
}
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index ebbb045f0a..ed4d278e90 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -53,6 +53,7 @@ class LLURLDispatcherImpl
{
public:
static bool dispatch(const LLSLURL& slurl,
+ const std::string& nav_type,
LLMediaCtrl* web,
bool trusted_browser);
// returns true if handled or explicitly blocked.
@@ -61,6 +62,7 @@ public:
private:
static bool dispatchCore(const LLSLURL& slurl,
+ const std::string& nav_type,
bool right_mouse,
LLMediaCtrl* web,
bool trusted_browser);
@@ -71,6 +73,7 @@ private:
// Returns true if handled.
static bool dispatchApp(const LLSLURL& slurl,
+ const std::string& nav_type,
bool right_mouse,
LLMediaCtrl* web,
bool trusted_browser);
@@ -78,7 +81,7 @@ private:
// by showing panel in Search floater.
// Returns true if handled or explicitly blocked.
- static bool dispatchRegion(const LLSLURL& slurl, bool right_mouse);
+ static bool dispatchRegion(const LLSLURL& slurl, const std::string& nav_type, bool right_mouse);
// handles secondlife://Ahern/123/45/67/
// Returns true if handled.
@@ -97,6 +100,7 @@ private:
// static
bool LLURLDispatcherImpl::dispatchCore(const LLSLURL& slurl,
+ const std::string& nav_type,
bool right_mouse,
LLMediaCtrl* web,
bool trusted_browser)
@@ -105,9 +109,9 @@ bool LLURLDispatcherImpl::dispatchCore(const LLSLURL& slurl,
switch(slurl.getType())
{
case LLSLURL::APP:
- return dispatchApp(slurl, right_mouse, web, trusted_browser);
+ return dispatchApp(slurl, nav_type, right_mouse, web, trusted_browser);
case LLSLURL::LOCATION:
- return dispatchRegion(slurl, right_mouse);
+ return dispatchRegion(slurl, nav_type, right_mouse);
default:
return false;
}
@@ -122,11 +126,12 @@ bool LLURLDispatcherImpl::dispatchCore(const LLSLURL& slurl,
// static
bool LLURLDispatcherImpl::dispatch(const LLSLURL& slurl,
+ const std::string& nav_type,
LLMediaCtrl* web,
bool trusted_browser)
{
const bool right_click = false;
- return dispatchCore(slurl, right_click, web, trusted_browser);
+ return dispatchCore(slurl, nav_type, right_click, web, trusted_browser);
}
// static
@@ -135,11 +140,12 @@ bool LLURLDispatcherImpl::dispatchRightClick(const LLSLURL& slurl)
const bool right_click = true;
LLMediaCtrl* web = NULL;
const bool trusted_browser = false;
- return dispatchCore(slurl, right_click, web, trusted_browser);
+ return dispatchCore(slurl, "clicked", right_click, web, trusted_browser);
}
// static
bool LLURLDispatcherImpl::dispatchApp(const LLSLURL& slurl,
+ const std::string& nav_type,
bool right_mouse,
LLMediaCtrl* web,
bool trusted_browser)
@@ -147,7 +153,7 @@ bool LLURLDispatcherImpl::dispatchApp(const LLSLURL& slurl,
llinfos << "cmd: " << slurl.getAppCmd() << " path: " << slurl.getAppPath() << " query: " << slurl.getAppQuery() << llendl;
const LLSD& query_map = LLURI::queryMap(slurl.getAppQuery());
bool handled = LLCommandDispatcher::dispatch(
- slurl.getAppCmd(), slurl.getAppPath(), query_map, web, trusted_browser);
+ slurl.getAppCmd(), slurl.getAppPath(), query_map, web, nav_type, trusted_browser);
// alert if we didn't handle this secondlife:///app/ SLURL
// (but still return true because it is a valid app SLURL)
@@ -159,7 +165,7 @@ bool LLURLDispatcherImpl::dispatchApp(const LLSLURL& slurl,
}
// static
-bool LLURLDispatcherImpl::dispatchRegion(const LLSLURL& slurl, bool right_mouse)
+bool LLURLDispatcherImpl::dispatchRegion(const LLSLURL& slurl, const std::string& nav_type, bool right_mouse)
{
if(slurl.getType() != LLSLURL::LOCATION)
{
@@ -287,10 +293,11 @@ LLTeleportHandler gTeleportHandler;
// static
bool LLURLDispatcher::dispatch(const std::string& slurl,
+ const std::string& nav_type,
LLMediaCtrl* web,
bool trusted_browser)
{
- return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), web, trusted_browser);
+ return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), nav_type, web, trusted_browser);
}
// static
@@ -310,7 +317,7 @@ bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl)
// *TODO: Make this trust model more refined. JC
const bool trusted_browser = true;
LLMediaCtrl* web = NULL;
- return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), web, trusted_browser);
+ return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_browser);
}
diff --git a/indra/newview/llurldispatcher.h b/indra/newview/llurldispatcher.h
index b07db4da3f..6309a97af5 100644
--- a/indra/newview/llurldispatcher.h
+++ b/indra/newview/llurldispatcher.h
@@ -33,6 +33,7 @@ class LLURLDispatcher
public:
static bool dispatch(const std::string& slurl,
+ const std::string& nav_type,
LLMediaCtrl* web,
bool trusted_browser);
// At startup time and on clicks in internal web browsers,
@@ -41,6 +42,8 @@ public:
// secondlife://RegionName/123/45/67/
// secondlife:///app/agent/3d6181b0-6a4b-97ef-18d8-722652995cf1/show
// sl://app/foo/bar
+ // @param nav_type
+ // type of navigation type (see LLQtWebKit::LLWebPage::acceptNavigationRequest)
// @param web
// Pointer to LLMediaCtrl sending URL, can be NULL
// @param trusted_browser
diff --git a/indra/newview/llurldispatcherlistener.cpp b/indra/newview/llurldispatcherlistener.cpp
index d0441d7bfa..c7b9afafef 100644
--- a/indra/newview/llurldispatcherlistener.cpp
+++ b/indra/newview/llurldispatcherlistener.cpp
@@ -61,7 +61,7 @@ void LLURLDispatcherListener::dispatch(const LLSD& params) const
// But for testing, allow a caller to specify untrusted.
trusted_browser = params["trusted"].asBoolean();
}
- LLURLDispatcher::dispatch(params["url"], NULL, trusted_browser);
+ LLURLDispatcher::dispatch(params["url"], "clicked", NULL, trusted_browser);
}
void LLURLDispatcherListener::dispatchRightClick(const LLSD& params) const
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 41b7c13826..2f8f842ce7 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -1066,8 +1066,8 @@ bool get_hud_matrices(const LLRect& screen_region, glh::matrix4f &proj, glh::mat
F32 scale_y = (F32)gViewerWindow->getWorldViewHeightScaled() / (F32)screen_region.getHeight();
mat.set_scale(glh::vec3f(scale_x, scale_y, 1.f));
mat.set_translate(
- glh::vec3f(clamp_rescale((F32)screen_region.getCenterX(), 0.f, (F32)gViewerWindow->getWorldViewWidthScaled(), 0.5f * scale_x * aspect_ratio, -0.5f * scale_x * aspect_ratio),
- clamp_rescale((F32)screen_region.getCenterY(), 0.f, (F32)gViewerWindow->getWorldViewHeightScaled(), 0.5f * scale_y, -0.5f * scale_y),
+ glh::vec3f(clamp_rescale((F32)(screen_region.getCenterX() - screen_region.mLeft), 0.f, (F32)gViewerWindow->getWorldViewWidthScaled(), 0.5f * scale_x * aspect_ratio, -0.5f * scale_x * aspect_ratio),
+ clamp_rescale((F32)(screen_region.getCenterY() - screen_region.mBottom), 0.f, (F32)gViewerWindow->getWorldViewHeightScaled(), 0.5f * scale_y, -0.5f * scale_y),
0.f));
proj *= mat;
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 499165135a..037e22584f 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -2543,23 +2543,7 @@ bool LLViewerMediaImpl::handleKeyHere(KEY key, MASK mask)
// Menu keys should be handled by the menu system and not passed to UI elements, but this is how LLTextEditor and LLLineEditor do it...
if( MASK_CONTROL & mask )
{
- if( 'C' == key )
- {
- mMediaSource->copy();
- result = true;
- }
- else
- if( 'V' == key )
- {
- mMediaSource->paste();
- result = true;
- }
- else
- if( 'X' == key )
- {
- mMediaSource->cut();
- result = true;
- }
+ result = true;
}
if(!result)
@@ -3000,7 +2984,8 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
{
LL_DEBUGS("Media") << "MEDIA_EVENT_CLICK_LINK_NOFOLLOW, uri is: " << plugin->getClickURL() << LL_ENDL;
std::string url = plugin->getClickURL();
- LLURLDispatcher::dispatch(url, NULL, mTrustedBrowser);
+ std::string nav_type = plugin->getClickNavType();
+ LLURLDispatcher::dispatch(url, nav_type, NULL, mTrustedBrowser);
}
break;
case MEDIA_EVENT_CLICK_LINK_HREF:
diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index de52aa17d1..4543a1ba9a 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -113,6 +113,11 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
media_impl->focus(true);
gFocusMgr.setKeyboardFocus(this);
+ LLViewerMediaImpl* impl = getFocusedMediaImpl();
+ if (impl)
+ {
+ LLEditMenuHandler::gEditMenuHandler = impl;
+ }
// We must do this before processing the media HUD zoom, or it may zoom to the wrong face.
update();
@@ -139,6 +144,13 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
{
gFocusMgr.setKeyboardFocus(NULL);
}
+
+ LLViewerMediaImpl* impl = getFocusedMediaImpl();
+ if (LLEditMenuHandler::gEditMenuHandler == impl)
+ {
+ LLEditMenuHandler::gEditMenuHandler = NULL;
+ }
+
mFocusedImplID = LLUUID::null;
if (objectp.notNull())
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 7c8f363f11..113916ada3 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -856,40 +856,36 @@ void toggle_destination_and_avatar_picker(const LLSD& show)
LLButton* avatar_btn = gViewerWindow->getRootView()->getChildView("bottom_tray")->getChild<LLButton>("avatar_btn");
LLButton* destination_btn = gViewerWindow->getRootView()->getChildView("bottom_tray")->getChild<LLButton>("destination_btn");
- switch(panel_idx)
- {
- case 0:
- if (!destinations->getVisible())
- {
- container->setVisible(true);
- destinations->setVisible(true);
- avatar_picker->setVisible(false);
- LLFirstUse::notUsingDestinationGuide(false);
- avatar_btn->setToggleState(false);
- destination_btn->setToggleState(true);
- return;
- }
- break;
- case 1:
- if (!avatar_picker->getVisible())
- {
- container->setVisible(true);
- destinations->setVisible(false);
- avatar_picker->setVisible(true);
- avatar_btn->setToggleState(true);
- destination_btn->setToggleState(false);
- return;
- }
- break;
- default:
- break;
+ if (panel_idx == 0
+ && !destinations->getVisible())
+ { // opening destinations guide
+ container->setVisible(true);
+ destinations->setVisible(true);
+ avatar_picker->setVisible(false);
+ LLFirstUse::notUsingDestinationGuide(false);
+ avatar_btn->setToggleState(false);
+ destination_btn->setToggleState(true);
+ gSavedSettings.setS32("DestinationsAndAvatarsVisibility", 0);
+ }
+ else if (panel_idx == 1
+ && !avatar_picker->getVisible())
+ { // opening avatar picker
+ container->setVisible(true);
+ destinations->setVisible(false);
+ avatar_picker->setVisible(true);
+ avatar_btn->setToggleState(true);
+ destination_btn->setToggleState(false);
+ gSavedSettings.setS32("DestinationsAndAvatarsVisibility", 1);
+ }
+ else
+ { // toggling off dest guide or avatar picker
+ container->setVisible(false);
+ destinations->setVisible(false);
+ avatar_picker->setVisible(false);
+ avatar_btn->setToggleState(false);
+ destination_btn->setToggleState(false);
+ gSavedSettings.setS32("DestinationsAndAvatarsVisibility", -1);
}
-
- container->setVisible(false);
- destinations->setVisible(false);
- avatar_picker->setVisible(false);
- avatar_btn->setToggleState(false);
- destination_btn->setToggleState(false);
};
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 40f0b43313..dfa35edef4 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -539,6 +539,12 @@ void LLViewerParcelMedia::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent
};
break;
+ case MEDIA_EVENT_NAVIGATE_ERROR_PAGE:
+ {
+ LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAVIGATE_ERROR_PAGE" << LL_ENDL;
+ };
+ break;
+
case MEDIA_EVENT_CLICK_LINK_HREF:
{
LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << self->getClickTarget() << "\", uri is " << self->getClickURL() << LL_ENDL;
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index e1d3e8a0b3..6ae143d299 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -111,7 +111,7 @@ public:
}
// Process the SLapp as if it was a secondlife://{PLACE} SLurl
- LLURLDispatcher::dispatch(url, web, true);
+ LLURLDispatcher::dispatch(url, "clicked", web, true);
return true;
}
};
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 8e049e76df..2a06b0ec8b 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -925,7 +925,7 @@ LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *wi
{
if (drop)
{
- LLURLDispatcher::dispatch( dropped_slurl.getSLURLString(), NULL, true );
+ LLURLDispatcher::dispatch( dropped_slurl.getSLURLString(), "clicked", NULL, true );
return LLWindowCallbacks::DND_MOVE;
}
return LLWindowCallbacks::DND_COPY;
@@ -1316,7 +1316,7 @@ void LLViewerWindow::handleDataCopy(LLWindow *window, S32 data_type, void *data)
std::string url = (const char*)data;
LLMediaCtrl* web = NULL;
const bool trusted_browser = false;
- if (LLURLDispatcher::dispatch(url, web, trusted_browser))
+ if (LLURLDispatcher::dispatch(url, "clicked", web, trusted_browser))
{
// bring window to foreground, as it has just been "launched" from a URL
mWindow->bringToFront();
@@ -1801,19 +1801,18 @@ void LLViewerWindow::initWorldUI()
LLMediaCtrl* avatar_picker = avatar_picker_destination_guide_container->findChild<LLMediaCtrl>("avatar_picker_contents");
if (destinations)
{
+ destinations->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
destinations->navigateTo(gSavedSettings.getString("DestinationGuideURL"), "text/html");
}
if (avatar_picker)
{
+ avatar_picker->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
avatar_picker->navigateTo(gSavedSettings.getString("AvatarPickerURL"), "text/html");
}
- if (gSavedSettings.getBOOL("FirstLoginThisInstall"))
- {
- toggle_destination_and_avatar_picker(0);
- gSavedSettings.setBOOL("FirstLoginThisInstall", FALSE);
- }
+ // show destinations by default
+ toggle_destination_and_avatar_picker(gSavedSettings.getS32("DestinationsAndAvatarsVisibility"));
}
// Destroy the UI
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 8ef3a3b839..8cdb615686 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -1745,7 +1745,7 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
// Invoke the event details floater if someone is clicking on an event.
LLSD params(LLSD::emptyArray());
params.append(event_id);
- LLCommandDispatcher::dispatch("event", params, LLSD(), NULL, true);
+ LLCommandDispatcher::dispatch("event", params, LLSD(), NULL, "clicked", true);
break;
}
case MAP_ITEM_LAND_FOR_SALE:
diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml
index 8eee8f44b5..ef670bdd52 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences.xml
@@ -96,7 +96,7 @@
filename="panel_preferences_colors.xml"
label="Colors"
layout="topleft"
- help_topic="preferences_im_tab"
+ help_topic="preferences_colors_tab"
name="colors" />
<panel
class="panel_preference"
diff --git a/indra/newview/skins/default/xui/en/menu_media_ctrl.xml b/indra/newview/skins/default/xui/en/menu_media_ctrl.xml
new file mode 100644
index 0000000000..c39c26f25f
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_media_ctrl.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ name="media ctrl context menu">
+ <menu_item_call
+ label="Cut"
+ layout="topleft"
+ name="Cut">
+ <menu_item_call.on_click
+ function="Edit.Cut" />
+ <menu_item_call.on_enable
+ function="Edit.EnableCut" />
+ </menu_item_call>
+ <menu_item_call
+ label="Copy"
+ layout="topleft"
+ name="Copy">
+ <menu_item_call.on_click
+ function="Edit.Copy" />
+ <menu_item_call.on_enable
+ function="Edit.EnableCopy" />
+ </menu_item_call>
+ <menu_item_call
+ label="Paste"
+ layout="topleft"
+ name="Paste">
+ <menu_item_call.on_click
+ function="Edit.Paste" />
+ <menu_item_call.on_enable
+ function="Edit.EnablePaste" />
+ </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_text_editor.xml b/indra/newview/skins/default/xui/en/menu_text_editor.xml
index ecd96088e7..fe8489166b 100644
--- a/indra/newview/skins/default/xui/en/menu_text_editor.xml
+++ b/indra/newview/skins/default/xui/en/menu_text_editor.xml
@@ -4,8 +4,7 @@
<menu_item_call
label="Cut"
layout="topleft"
- name="Cut"
- shortcut="control|X">
+ name="Cut">
<menu_item_call.on_click
function="Edit.Cut" />
<menu_item_call.on_enable
@@ -14,8 +13,7 @@
<menu_item_call
label="Copy"
layout="topleft"
- name="Copy"
- shortcut="control|C">
+ name="Copy">
<menu_item_call.on_click
function="Edit.Copy" />
<menu_item_call.on_enable
@@ -24,8 +22,7 @@
<menu_item_call
label="Paste"
layout="topleft"
- name="Paste"
- shortcut="control|V">
+ name="Paste">
<menu_item_call.on_click
function="Edit.Paste" />
<menu_item_call.on_enable
@@ -34,8 +31,7 @@
<menu_item_call
label="Delete"
layout="topleft"
- name="Delete"
- shortcut="Del">
+ name="Delete">
<menu_item_call.on_click
function="Edit.Delete" />
<menu_item_call.on_enable
@@ -44,8 +40,7 @@
<menu_item_call
label="Select All"
layout="topleft"
- name="Select All"
- shortcut="control|A">
+ name="Select All">
<menu_item_call.on_click
function="Edit.SelectAll" />
<menu_item_call.on_enable
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 433f623273..8f5a95a504 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -7030,11 +7030,15 @@ Hiding the Speak button will disable the voice feature.
</notification>
<notification
- name="HintMoveArrows"
+ name="HintMoveClick"
label="Move"
type="hint"
unique="true">
- To walk, use the directional keys on your keyboard. You can run by pressing the Up arrow twice.
+Click to Walk
+Click anywhere on the ground to walk to that spot.
+
+Click and Drag to Rotate View
+Click and drag anywhere on the world to rotate your view
<tag>custom_skin</tag>
</notification>
diff --git a/indra/newview/skins/default/xui/en/panel_hint.xml b/indra/newview/skins/default/xui/en/panel_hint.xml
index e2e9d0aef0..f7434f0330 100644
--- a/indra/newview/skins/default/xui/en/panel_hint.xml
+++ b/indra/newview/skins/default/xui/en/panel_hint.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
width="205"
- height="100">
+ height="34">
<text name="hint_title"
font="SansSerifMedium"
left="8"
@@ -15,8 +15,8 @@
left="8"
right="197"
top="26"
- bottom="92"
- follows="all"
+ bottom="26"
+ follows="left|right|bottom"
text_color="Black"
wrap="true"/>
<button right="197"
diff --git a/indra/newview/skins/default/xui/en/panel_hint_image.xml b/indra/newview/skins/default/xui/en/panel_hint_image.xml
index 00b6e42497..df05d50dc5 100644
--- a/indra/newview/skins/default/xui/en/panel_hint_image.xml
+++ b/indra/newview/skins/default/xui/en/panel_hint_image.xml
@@ -1,33 +1,43 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
- width="205"
- height="140"
+ width="305"
+ height="40"
layout="topleft">
<text name="hint_title"
font="SansSerifMedium"
left="8"
- right="180"
+ right="290"
top="8"
bottom="20"
follows="left|right|top"
text_color="Black"
wrap="false"/>
- <icon name="hint_image"
- left="42"
- top="25"
- width="115"
- height="86"
- image_name="arrow_keys.png"
- />
+ <layout_stack left="0"
+ top="25"
+ width="305"
+ height="0"
+ follows="left|top|right"
+ orientation="horizontal">
+ <layout_panel auto_resize="true" width="100"/>
+ <layout_panel auto_resize="true" width="0">
+ <icon name="hint_image"
+ top="0"
+ left="0"
+ height="0"
+ width="0"
+ follows="all"/>
+ </layout_panel>
+ <layout_panel auto_resize="true" width="100"/>
+ </layout_stack>
<text name="hint_text"
left="8"
- right="197"
- top_pad="5"
- bottom="120"
- follows="all"
+ right="297"
+ top="30"
+ bottom="30"
+ follows="left|right|bottom"
text_color="Black"
wrap="true"/>
- <button right="197"
+ <button right="297"
top="8"
width="16"
height="16"
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 4c2faddfe4..8d0f1437e6 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -133,7 +133,6 @@ label="Remember password"
max_chars="128"
tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
top_pad="0"
- control_name="SessionSettingsFile"
name="mode_combo"
width="110">
<combo_box.item
diff --git a/indra/newview/skins/minimal/textures/click_to_move.png b/indra/newview/skins/minimal/textures/click_to_move.png
new file mode 100644
index 0000000000..74e3faa8ff
--- /dev/null
+++ b/indra/newview/skins/minimal/textures/click_to_move.png
Binary files differ
diff --git a/indra/newview/skins/minimal/textures/textures.xml b/indra/newview/skins/minimal/textures/textures.xml
index 3e2f5cd397..b4848a0619 100644
--- a/indra/newview/skins/minimal/textures/textures.xml
+++ b/indra/newview/skins/minimal/textures/textures.xml
@@ -2,6 +2,7 @@
<textures version="101">
<texture name="Button_Separator" file_name="bottomtray/button_separator.png" preload="true" />
<texture name="arrow_keys.png"/>
+ <texture name="click_to_move" file_name="click_to_move.png"/>
<texture name="bottomtray_close_off" file_name="bottomtray/close_off.png" preload="true" />
<texture name="bottomtray_close_over" file_name="bottomtray/close_over.png" preload="true" />
<texture name="bottomtray_close_press" file_name="bottomtray/close_press.png" preload="true" />
diff --git a/indra/newview/skins/minimal/xui/en/menu_avatar_icon.xml b/indra/newview/skins/minimal/xui/en/menu_avatar_icon.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_avatar_icon.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_avatar_icon.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_bottomtray.xml b/indra/newview/skins/minimal/xui/en/menu_bottomtray.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_bottomtray.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_bottomtray.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_favorites.xml b/indra/newview/skins/minimal/xui/en/menu_favorites.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_favorites.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_favorites.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_group_plus.xml b/indra/newview/skins/minimal/xui/en/menu_group_plus.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_group_plus.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_group_plus.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_hide_navbar.xml b/indra/newview/skins/minimal/xui/en/menu_hide_navbar.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_hide_navbar.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_hide_navbar.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_imchiclet_adhoc.xml b/indra/newview/skins/minimal/xui/en/menu_imchiclet_adhoc.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_imchiclet_adhoc.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_imchiclet_adhoc.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_imchiclet_group.xml b/indra/newview/skins/minimal/xui/en/menu_imchiclet_group.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_imchiclet_group.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_imchiclet_group.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_imchiclet_p2p.xml b/indra/newview/skins/minimal/xui/en/menu_imchiclet_p2p.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_imchiclet_p2p.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_imchiclet_p2p.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_inv_offer_chiclet.xml b/indra/newview/skins/minimal/xui/en/menu_inv_offer_chiclet.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_inv_offer_chiclet.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_inv_offer_chiclet.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_inventory.xml b/indra/newview/skins/minimal/xui/en/menu_inventory.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_inventory.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_inventory_add.xml b/indra/newview/skins/minimal/xui/en/menu_inventory_add.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_inventory_add.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_inventory_add.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_mini_map.xml b/indra/newview/skins/minimal/xui/en/menu_mini_map.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_mini_map.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_mini_map.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_navbar.xml b/indra/newview/skins/minimal/xui/en/menu_navbar.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_navbar.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_navbar.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_nearby_chat.xml b/indra/newview/skins/minimal/xui/en/menu_nearby_chat.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_nearby_chat.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_nearby_chat.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_object_icon.xml b/indra/newview/skins/minimal/xui/en/menu_object_icon.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_object_icon.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_object_icon.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_people_groups.xml b/indra/newview/skins/minimal/xui/en/menu_people_groups.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_people_groups.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_people_groups.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_place_add_button.xml b/indra/newview/skins/minimal/xui/en/menu_place_add_button.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_place_add_button.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_place_add_button.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_script_chiclet.xml b/indra/newview/skins/minimal/xui/en/menu_script_chiclet.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_script_chiclet.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_script_chiclet.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_slurl.xml b/indra/newview/skins/minimal/xui/en/menu_slurl.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_slurl.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_slurl.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_topinfobar.xml b/indra/newview/skins/minimal/xui/en/menu_topinfobar.xml
index 9ebab9ef98..d3d9e2ef8a 100644
--- a/indra/newview/skins/minimal/xui/en/menu_topinfobar.xml
+++ b/indra/newview/skins/minimal/xui/en/menu_topinfobar.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu/>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/panel_login.xml b/indra/newview/skins/minimal/xui/en/panel_login.xml
index ef058e5567..3903658e71 100644
--- a/indra/newview/skins/minimal/xui/en/panel_login.xml
+++ b/indra/newview/skins/minimal/xui/en/panel_login.xml
@@ -134,7 +134,6 @@ top="20"
max_chars="128"
top_pad="0"
tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
- control_name="SessionSettingsFile"
name="mode_combo"
width="120">
<combo_box.item
diff --git a/install.xml b/install.xml
new file mode 100644
index 0000000000..9658a4195a
--- /dev/null
+++ b/install.xml
@@ -0,0 +1,1898 @@
+<?xml version="1.0" ?>
+<llsd>
+<map>
+ <key>installables</key>
+ <map>
+ <key>GL</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 1991-2000 Silicon Graphics, Inc.</string>
+ <key>description</key>
+ <string>A standard for 3D Graphics rendering engine.</string>
+ <key>license</key>
+ <string>GL</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>0bd2795a2afe09f6c563f2f888f24cc9</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-darwin-20080613.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>2ab29212a7f3acdaebf10059af816be0</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-linux-20080812.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>9c3dff3817f1105f9054401fdef1fe50</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-linux64-20080909.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>91155239b02f576384603795d41eb971</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-windows-20090505.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>SDL</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga</string>
+ <key>description</key>
+ <string>The Simple DirectMedia Layer libraries are used for handling input and basic window/GL setup on the Linux client. Packages also include cursors.</string>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>fce0ff7d2cdf0f36c1647e6a3916e29e</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.12-linux-20090218.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>apr_suite</key>
+ <map>
+ <key>license</key>
+ <string>apache 2.0</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>115d8ac44a91efdb173e9b3e478c46b6</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.3.7-darwin-20090805.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>7b84cd6a3c601a104d9c09e58ef2f50c</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.2.8-linux-20080812.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>1a7e1186855d48d8316ce86803095f70</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.2.8-linux64-20080909a.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>a02619c1e30a3db02d3883bf1ad7a1e6</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.3.8-windows-20090911.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>ares</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright 1998 by the Massachusetts Institute of Technology.</string>
+ <key>description</key>
+ <string>Performs DNS requests and name resolves asynchronously. Used with libcurl to keep all HTTP operations async.</string>
+ <key>license</key>
+ <string>c-ares</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>cdb2f5c4a5a1f9ecd75bc1dbdd4db8e9</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20100606.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>91694429e391efeea1de974df26032a2</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-linux-20100527.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>c4242416e0b2e642c0bf062a19a250e4</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.3.0-linux64-20080909.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>4b84738eec2e21b0c096d53b79ee2681</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-windows-20100611a.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>artwork-common</key>
+ <map>
+ <key>copyright</key>
+ <string>(C) 2008 Linden Research, Inc.</string>
+ <key>description</key>
+ <string>Second Life(TM) Viewer Artwork</string>
+ <key>license</key>
+ <string>artwork</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>5e047437d73d1017bf270a6c6e936f23</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/artwork-common-20090415.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>5e047437d73d1017bf270a6c6e936f23</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/artwork-common-20090415.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>5e047437d73d1017bf270a6c6e936f23</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/artwork-common-20090415.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>berkeley</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 1990-1999 Sleepycat Software. All rights reserved.</string>
+ <key>description</key>
+ <string>a high-performance, embedded database library</string>
+ <key>license</key>
+ <string>sleepycat</string>
+ </map>
+ <key>boost</key>
+ <map>
+ <key>copyright</key>
+ <string>various</string>
+ <key>description</key>
+ <string>A set of portable C++ libraries which provide a wide set of functionality. </string>
+ <key>license</key>
+ <string>boost</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>71defd179827bf172b76d6020023e0e8</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-darwin-20100222a.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>4db3d74e40d149eeec06f4d97a609bb1</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100624.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>af4badd6b2c10bc4db82ff1256695892</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux64-20100119.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>72e6e2eff5d146a107f3059b6c31fb95</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-windows-20100630.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>curl</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 1996 - 2008, Daniel Stenberg, &lt;daniel@haxx.se&gt;.</string>
+ <key>description</key>
+ <string>Client-side URL transfer library. Handles moving data across the net in many different protocols. Used to GET/POST/PUT/DELETE web resources. </string>
+ <key>license</key>
+ <string>curl</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>ca8f0134fa5ab6f34a6eeb8d0896c9b0</string>
+ <key>url</key>
+ <uri>https://s3.amazonaws.com/automated-builds-secondlife-com/hg/repo/brad_curl-autobuild/rev/216961/arch/Darwin/installer/curl-7.21.1-darwin-20101214.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>9c9b629b62bf874d550c430ad678dc04</string>
+ <key>url</key>
+ <uri>https://s3.amazonaws.com/automated-builds-secondlife-com/hg/repo/brad_curl-autobuild/rev/216961/arch/Linux/installer/curl-7.21.1-linux-20101215.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>6994192cea7ab2d885a158a3de474273</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.16.4a-linux64-20090303.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>48691883065a82d53691d73aae81d4c1</string>
+ <key>url</key>
+ <uri>https://s3.amazonaws.com/automated-builds-secondlife-com/hg/repo/brad_curl-autobuild/rev/216961/arch/CYGWIN/installer/curl-7.21.1-windows-20101214.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>dbghelp</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright Microsoft Corporation</string>
+ <key>description</key>
+ <string>dbghelp: Debug helper from Microsoft Debugging Tools For Windows</string>
+ <key>license</key>
+ <string>MSDTW</string>
+ <key>packages</key>
+ <map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>b7563064037e032143ca2d610aae5153</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbghelp-6.11.1.404-windows-20090520.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>dbusglib</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc.</string>
+ <key>description</key>
+ <string>dbus/dbus-glib: headers only</string>
+ <key>license</key>
+ <string>AFL2.1</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>eb25444142d4102b0ce1b7ffaadb071e</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbusglib-linux-20080707.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>elfio</key>
+ <map>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>82ea408af2f968cfe5f013ab241323ef</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/elfio-1.0.3-linux-20080812.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>expat</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd</string>
+ <key>description</key>
+ <string>An XML parser library written in C. It is a stream-oriented parser in which an application registers handlers for things the parser might find in the XML document (like start tags).</string>
+ <key>license</key>
+ <string>mit</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>c457a0a041ac4946265889a503d26c3d</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-darwin-20090805.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>67b470fd446b08c9831d1039674eae4e</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-linux-20080812.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>278c61871419b9a4d50a4f88b7922403</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-linux64-20080909.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>5dbbdb4a9b5bec86d180ef20a5f8ccfb</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-windows-20090917.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>fmod</key>
+ <map>
+ <key>copyright</key>
+ <string>FMOD Sound System, copyright (C) Firelight Technologies Pty, Ltd., 1994-2006.</string>
+ <key>description</key>
+ <string>Audio engine and mp3 stream decoder .</string>
+ <key>license</key>
+ <string>fmod</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>261bcd3387066cf0a1d46549400052b5</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/fmod-3.75-darwin-20101007.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>8490d97430c12c2e1ac19ff80a8d4db4</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/fmod-3.75-linux-20101007.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>bab1babcb01ff9849b7f072d352e1ecd</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/fmod-3.75-windows-20101007.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>fontconfig</key>
+ <map>
+ <key>license</key>
+ <string>mit</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>9af6a1ed39fa540bfcaa402b0ea22f78</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.2.3-linux-20080613.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>freeglut</key>
+ <map>
+ <key>license</key>
+ <string>mit</string>
+ <key>packages</key>
+ <map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>fcbb695ff203775fad96d184bf5f34fc</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freeglut-2.4.0-windows-20090608.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>freetype</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright</string>
+ <key>description</key>
+ <string>Font</string>
+ <key>license</key>
+ <string>freetype</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>f00144dfb597140f328774c3244f0c3e</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.3.9-darwin-20090922.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>9de3f44be65645c7f6af236139596942</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.3.9-linux-2010-02-19a-nommap.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>35f6fa557ba90f9cda0a18d1af2055a4</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.1.5-linux64-20080909.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>88980fd6d91ac541b62dea877ebe6ba6</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.3.9-windows-20090917.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>glh_linear</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 2000 Cass Everitt; Copyright (c) 2000 NVIDIA Corporation; All rights reserved.</string>
+ <key>description</key>
+ <string>nVidia NVParse SDK: platform-indepenedent C++ Apple OpenGL helper library</string>
+ <key>license</key>
+ <string>glh_linear</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>23bd9a75e5a2365a827461e6c324f52b</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20080613.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>23bd9a75e5a2365a827461e6c324f52b</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20080812.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>2965646aea1d2a6aec1fbc431c02733f</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20080613.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>38b9ddfe8dceff55ee4351016a937d1b</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20080613.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>glib</key>
+ <map>
+ <key>description</key>
+ <string>GLib is a library containing many useful C routines for things such as trees, hashes, and lists.</string>
+ <key>license</key>
+ <string>gpl</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>6cc5ce1fafd10299fdb890b3d4c3cf53</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-darwin-20080817.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>2f1a9e14f9213c2c9564c1c1cfdd6d47</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-linux-20080817.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>3d5e29d444dde4815b36082eedfc775a</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glib-2.0-windows-20080817.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>glui</key>
+ <map>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>84f792a860691d0fad6d1de6eeb31baa</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-darwin-20090623a.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>5b8631fe510d4ebaeb965c673937e1e7</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.3.6-windows-freeglut-20090608.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>google</key>
+ <map>
+ <key>license</key>
+ <string>mit</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>40db900872612615e849f17cbdfd2c27</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google-linux-20080812.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>google-perftools</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 2005, Google Inc.</string>
+ <key>description</key>
+ <string>Heap performance and validity checking tools from google. Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.</string>
+ <key>license</key>
+ <string>bsd</string>
+ <key>packages</key>
+ <map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>32dba32ddd460a08e082898ebba6315c</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google-perftools-1.0-windows-20090406.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>google_breakpad</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 2006, Google Inc.</string>
+ <key>description</key>
+ <string>An open-source multi-platform crash reporting system </string>
+ <key>license</key>
+ <string>bsd</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>ced4010b59f1a579caa7fe3c18512499</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-darwin-20100528a.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>29c3e7dad60bbf02c811786436d99523</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-linux-20100521b.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>0859d47242990125f17eaab30bece2ff</string>
+ <key>url</key>
+ <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/google_breakpad-0.0.0-rev599-windows-20100524.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>googlemock</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright 2008, Google Inc.</string>
+ <key>description</key>
+ <string>Google C++ Mocking Framework (or Google Mock for short) is a library for writing and using C++ mock classes.</string>
+ <key>license</key>
+ <string>bsd</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>4863e9fea433d0a4be761ea5d3e8346a</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-darwin-20090626.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>877dabecf84339690191c6115c76366e</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-linux32-20090527.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>f601a82ea91030974072da8924cae41e</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-windows-20090921.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>gstreamer</key>
+ <map>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>c829b638b6eef71ca63418cb9aea46a2</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20080613.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>befc7520fe01250f39458f65c29bc584</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux64-20080909.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>gtk-atk-pango-glib</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald</string>
+ <key>description</key>
+ <string>Libraries associated with GTK for gui features. atk: interfaces for accessibility; glib: low-level core functionality for using GTK+ and GNOME; pango: layout/rendering of text w/ emphasis on internationalization.</string>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>21c16a74f8fc9a62e3ab944a6eb7403d</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20080616.tar.bz</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>d963750bcd333a108b3697d220c87d09</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-windows-20080613.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>havok</key>
+ <map>
+ <key>copyright</key>
+ <string>on file</string>
+ <key>description</key>
+ <string>Physics engine for the simulator</string>
+ <key>license</key>
+ <string>havok</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>f64c08771a4fc456db2a55b47302078b</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/havok-4.6-darwin-20080812.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>af7b1fc9072443009f19e43fb3c8342f</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/havok-4.6.1-linux-20081029.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>cd4076d6caf5fabff36bf48bd01e4ba8</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/havok-4.6.1-linux64-20081030.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>f25fbb29c2275267233c79f0c68ca37f</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/havok-4.6.1-windows-20081030.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>jpeglib</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 2003, Yves Piguet.</string>
+ <key>description</key>
+ <string>An open-source JPEG (JFIF) library</string>
+ <key>license</key>
+ <string>jpeglib</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>8d38d74c481e9aab4518c8f2a7d52800</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-darwin-20080812.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>8aa8e01e0c21f60f0ede0ffb04e9214f</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-linux-20081218.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>0e7facf7d48531d20c0cd6a3c3f04021</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-linux64-20080909.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>6a6bb0143a2561e3276dab4bcfa425ef</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-windows-20090917a.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>jsoncpp</key>
+ <map>
+ <key>copyright</key>
+ <string>json-cpp library released to Public Domain by Baptiste Lepilleur &lt;blep@users.sourceforge.net&gt;</string>
+ <key>description</key>
+ <string>jsoncpp is an implementation of a JSON (http://json.org) reader and writer in C++.</string>
+ <key>license</key>
+ <string>jsoncpp</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>4c6b949778099a63550898f00f3e6a5e</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-svn-r69-darwin-20090923.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>a2a94b8ca1d32f23e3e668d64023514e</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-svn-r69-linux-20090922.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>a06ab38628ab7b53b8f3326cd942a6a8</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-svn-r69-linux64-20090922.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>caf152cfc730737c124f7612cf68fbd3</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-svn-r69-windows-20090922.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>kdu</key>
+ <map>
+ <key>copyright</key>
+ <string>on file</string>
+ <key>description</key>
+ <string>Kakadu (KDU) JPEG-2000 decoder library. </string>
+ <key>license</key>
+ <string>kdu</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>8261994de5af6581e08c26fefe1b2810</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/kdu-6.4.1-darwin-20101123.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>ed3e58899a424684dad49c94ba3813e7</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/kdu-6.4.1-linux-20101124.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>066e089a5d9faeaf131e1f4e4860a163</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/kdu-6.4.1-windows-20101123.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>libmono</key>
+ <map>
+ <key>copyright</key>
+ <string>(C) 2005 Novell, Inc. http://www.novell.com</string>
+ <key>description</key>
+ <string>An open source implementation of the ECMA/ISO ECMA-334 Common L\
+anguage Infrstructure (CLI) international standard</string>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>39a803fcbe6f11b72358fc78b7777b6c</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libmono-darwin-20080724.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>9bc0f8b7d5e0ff194b6d5635daf9ae3a</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libmono-1.2.6-linux-20080816a.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>451521b4cb57c35caf3efb8dcf99b99e</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libmono-1.2.6-linux64-20080926.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>6712a09311a914752f47d5d62562a239</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libmono-1.2.6-windows-20080903.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>libpng</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 2004, 2006-2008 Glenn Randers-Pehrson</string>
+ <key>description</key>
+ <string>An open, extensible image format with lossless compression. PNG Reference Library </string>
+ <key>license</key>
+ <string>libpng</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>82659b48831cbf58bf04b86602939e0b</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.35-darwin-20090304.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>f5e84c991f6e3caacb26db259593cbea</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.35-linux-20090304.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>5ee1e62bde38520c7f134c4afb9ac9b1</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.35-linux64-20090304.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>c781cd9846cf20afb90ac40ad1a0ce9d</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.35-windows-20090917.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>libuuid</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;</string>
+ <key>description</key>
+ <string>Generates UUIDs under Linux. Originally a part of the ext2fs filesystem. Also see lluuid.cpp for all platforms. Part of the e2fsprogs package.</string>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>91b194aed4b38bc23493b198009a8c6a</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libuuid-linux-20090417.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>libxml</key>
+ <map>
+ <key>license</key>
+ <string>mit</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>4b5d2dcfe8a49b73fb69f10aab441092</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux-20080613.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>921d7f980519101afb74623e29e9d175</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux64-20080909.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>llqtwebkit</key>
+ <map>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>f07b063cdc207479b111576dc74127f0</string>
+ <key>url</key>
+ <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-darwin-qt4.7.1-20110322.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>5d743c93b970abe685b185de83001a6e</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20100923.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>1e66b1ecab911a60ba50b59361ef62e1</string>
+ <key>url</key>
+ <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.7.1-20110317.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>mesa</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (C) 1999-2007 Brian Paul All Rights Reserved.</string>
+ <key>description</key>
+ <string>Mesa 3-D graphics library. Provides the required Apple OpenGL headers under Linux.</string>
+ <key>license</key>
+ <string>mesa</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>70d0bbe1145fff29a0131349c898260e</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20080812.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>56630977f9261bd82039b0da08a0685c</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-6.2.1-linux64-20081016.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>82cdcdcb2d0615389a7480485ea35f4c</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-windows-20080613.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>mysql</key>
+ <map>
+ <key>license</key>
+ <string>gpl</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>df27f2db244ea2762759a06cd75ada4e</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/mysql-darwin-20080812.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>cc86b4cc858655e23704d1168325d7b9</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/mysqlclient-linux-20090320.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>98bac06680dca907e783d8dd4aa9edde</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/mysql-windows-20080804.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>ndofdev</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 2007, 3Dconnexion, Inc. - All rights reserved.</string>
+ <key>description</key>
+ <string>in use on windows and darwin for joystick support.</string>
+ <key>license</key>
+ <string>linden</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>17999c47e17f2dd9e12a22372ce8ff14</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-darwin-20080812.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>9469c3732a33a154fa0a2807b9f36ccc</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-linux-0.2-20080828.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>f0df8a1e60991095e3adca1450b8c9c0</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-windows-20090917.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>ogg-vorbis</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (C) 2008 Xiph.org Foundation</string>
+ <key>description</key>
+ <string>Ogg: container format Vorbis: audio compression scheme</string>
+ <key>license</key>
+ <string>ogg-vorbis</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>a6843398b780645c4897c9776c688926</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.03-1.1.2-darwin-20080812.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>6dc0536329a0aadf76e3054ffd4da61c</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.2.0-linux-20081201.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>964c71e6ee22be1bcaf6d480e74cdd14</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.2.0-linux64-20080909.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>9bf1fea65e66b2cd3075e6ffd7eb57ad</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.1.3-1.2.0-windows-20080723.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>openSSL</key>
+ <map>
+ <key>license</key>
+ <string>openSSL</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>11d2be4f2b172430747b7d4a6739e3d8</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.8l-darwin-20100428.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>f219ef07b02e2abb9282345c3a8f2b39</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.7c-linux-20080812.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>00b23f28a2457d9dabbaff0b29ee7323</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.8g-linux64-20080909.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>dd85209081b832e836de6e1538541d89</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.8j-windows-20090129.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>openal-soft</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (C) 2008 by authors.</string>
+ <key>description</key>
+ <string>3D Audio library</string>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>a0757244e3e6688fde2ffeea35cc1f96</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-darwin-20080924.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>75a7004ab14bea46594b1c652f1a6040</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-linux-20100120-3ad86a1c.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>5ad0a3ab623356c1ad61394ba238f99f</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-soft-1.6.372-linux64-20081219.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>a0757244e3e6688fde2ffeea35cc1f96</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-windows-20080924.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>openjpeg</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium</string>
+ <key>description</key>
+ <string>An open-source JPEG-2000 library; a slower alternative to Kadaku. Used in the open source release </string>
+ <key>license</key>
+ <string>openjpeg</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>23313fda213a2496945435db2a0ee78b</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.3.0-darwin-20090501.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>02af0dad64803e0d821bc09e6038682c</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.3-linux-20081124b.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>44f1bc9d47e4a54fc274c213f2cb565f</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.2.0-linux64-20080909.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>41541a98106894e28a6bf585010fea65</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.3-windows-20090407.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>pth</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 1999-2006 Ralf S. Engelschall &lt;rse@gnu.org&gt;</string>
+ <key>description</key>
+ <string>Portable cooperative threads package, used to support Boost.Coroutine on Mac OS X 10.4</string>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>216cb6217a06c64dfae30a55ab8b975c</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-darwin-20090923.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>c5c2f73847c126e679d925beab48c7d4</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-linux-20090427.tar.bz2</uri>
+ </map>
+ <key>linux32</key>
+ <map>
+ <key>md5sum</key>
+ <string>c5c2f73847c126e679d925beab48c7d4</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-linux32-20090427.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>c5c2f73847c126e679d925beab48c7d4</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-linux64-20090427.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>c5c2f73847c126e679d925beab48c7d4</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-windows-20090427.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>pulseaudio</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright 2004-2006 Lennart Poettering, Copyright 2006 Pierre Ossman (ossman@cendio.se) for Cendio AB</string>
+ <key>description</key>
+ <string>pulseaudio: headers only</string>
+ <key>license</key>
+ <string>lgpl</string>
+ <key>packages</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>30cb00069fe2a545fbf7be1070386236</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/linux-pulse-headers-0.9.14.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>quicktime</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (C) 1990-2007 by Apple Computer, Inc., all rights reserved.</string>
+ <key>description</key>
+ <string>Separate download. Used to play in-world video clips on a prim. </string>
+ <key>license</key>
+ <string>quicktime</string>
+ <key>packages</key>
+ <map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>be45825cc14ede53790ac93c58307dcb</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/quicktime-sdk-windows-7.3-20091110.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>smartheap</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (C) 1991-2000 Compuware Corporation. All Rights Reserved.</string>
+ <key>description</key>
+ <string>Memory Management Library</string>
+ <key>license</key>
+ <string>smartheap</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>f54131b5f228e805c64c2e4e6c96579a</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/smartheap-6.0.2-darwin-20080610.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>499208522bf7d7843e1d014d64214e06</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/smartheap-6.0.2-linux-20080610.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>78fd47017f21d11eae43bca3e38a3e1e</string>
+ <key>url</key>
+ <uri>scp:install-packages.lindenlab.com:/local/www/install-packages/doc/smartheap-6.0.2-windows-20080611.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>tut</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright 2002-2006 Vladimir Dyuzhev, Copyright 2007 Denis Kononenko, Copyright 2008 Michal Rzechonek</string>
+ <key>description</key>
+ <string>C++ Template Unit Test</string>
+ <key>license</key>
+ <string>bsd</string>
+ <key>packages</key>
+ <map>
+ <key>common</key>
+ <map>
+ <key>md5sum</key>
+ <string>a1b8a118ba9df1f2a73f6aafa7980e83</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-2008-11-30-common-20081208.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>unistd</key>
+ <map>
+ <key>copyright</key>
+ <string>(c) 2008 Linden Lab.</string>
+ <key>description</key>
+ <string>Placeholder file to make flex happy on windows.</string>
+ <key>license</key>
+ <string>linden</string>
+ <key>packages</key>
+ <map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>6353aff33d7d03b22055aec76f53a866</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/unistd-windows-20080611.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>slvoice</key>
+ <map>
+ <key>copyright</key>
+ <string> </string>
+ <key>license</key>
+ <string>vivox</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>2f9b3528d4b5f858fb8dcee4b6dd5188</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-darwin-20101117a.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>cde4728b8a75a76c72a8785815cb769f</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-linux-20101117a.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>940ac55a6d0141c958bf2b14939d8474</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-windows-20101117a.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>xmlrpc-epi</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright 2000 Epinions, Inc.</string>
+ <key>description</key>
+ <string>Implementation of the xmlrpc protocol in C that provides an API for developers to serialize RPC requests to and from XML. </string>
+ <key>license</key>
+ <string>xmlrpc-epi</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>2d3a918c88d756422c1a8139ebe15f56</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-darwin-20080812.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>84a219199240ea70f54439c02acef0cd</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-linux-20080812.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>dc67b896c56116df8e18f2d1bbd07031</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-linux64-20080909.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>262629bcaa39dcf7266caa50da01a599</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-windows-20091016.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ <key>zlib</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler</string>
+ <key>description</key>
+ <string>A Massively Spiffy Yet Delicately Unobtrusive Compression Library (Also Free, Not to Mention Unencumbered by Patents)</string>
+ <key>license</key>
+ <string>zlib</string>
+ <key>packages</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>md5sum</key>
+ <string>c844e1b05723ce078dbbd5aea9cdd3ad</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.1.4-darwin-20080818.tar.bz2</uri>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>md5sum</key>
+ <string>26fe88213c213dc6153690ab142c25ca</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.3dfsg-linux-20091208.tar.bz2</uri>
+ </map>
+ <key>linux64</key>
+ <map>
+ <key>md5sum</key>
+ <string>4bddfb2c6dd7b1470a3ed675ac14bd9a</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.3-linux64-20080909.tar.bz2</uri>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>md5sum</key>
+ <string>73baf52a740d151fddbc2a008369c462</string>
+ <key>url</key>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.3-windows-20090921.tar.bz2</uri>
+ </map>
+ </map>
+ </map>
+ </map>
+ <key>licenses</key>
+ <map>
+ <key>AFL2.1</key>
+ <map>
+ <key>url</key>
+ <string>http://opensource-definition.org/licenses/afl-2.1.html</string>
+ </map>
+ <key>GL</key>
+ <map>
+ <key>url</key>
+ <string>http://www.xfree86.org/4.4.0/LICENSE9.html#sgi</string>
+ </map>
+ <key>MSDTW</key>
+ <map>
+ <key>text</key>
+ <string>MICROSOFT SOFTWARE LICENSE TERMS
+MICROSOFT DEBUGGING TOOLS FOR WINDOWS
+These license terms are an agreement between Microsoft Corporation (or based on where you live, one of
+its affiliates) and you. Please read them. They apply to the software named above, which includes the
+media on which you received it, if any. The terms also apply to any Microsoft
+* updates,
+* supplements,
+* Internet-based services
+* support services, and
+* Debugging symbol files that you may access over the internet
+for this software, unless other terms accompany those items. If so, those terms apply.
+By using the software, you accept these terms. If you do not accept them, do not use the
+software.
+If you comply with these license terms, you have the rights below.
+1. INSTALLATION AND USE RIGHTS. One user may install and use any number of copies of the
+software on your devices to design, develop, debug and test your programs.
+2. ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.
+a. Distributable Code. The software contains code that you are permitted to distribute in programs
+you develop if you comply with the terms below.
+i. Right to Use and Distribute. The code and text files listed below are “Distributable Code.”
+* REDIST.TXT Files. You may copy and distribute the object code form of code listed in
+REDIST.TXT files.
+* Sample Code. You may modify, copy, and distribute the source and object code form of
+code marked as “sample.”
+* Third Party Distribution. You may permit distributors of your programs to copy and
+distribute the Distributable Code as part of those programs.
+ii. Distribution Requirements. For any Distributable Code you distribute, you must
+* add significant primary functionality to it in your programs;
+* require distributors and external end users to agree to terms that protect it at least as much
+as this agreement;
+* display your valid copyright notice on your programs; and
+* indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees,
+related to the distribution or use of your programs.
+iii. Distribution Restrictions. You may not
+* alter any copyright, trademark or patent notice in the Distributable Code;
+* distribute any symbol files which you may access or use under these license terms for the
+software;
+* use Microsoft’s trademarks in your programs’ names or in a way that suggests your
+programs come from or are endorsed by Microsoft;
+* distribute Distributable Code to run on a platform other than the Windows platform;
+* include Distributable Code in malicious, deceptive or unlawful programs; or
+* modify or distribute the source code of any Distributable Code so that any part of it
+becomes subject to an Excluded License. An Excluded License is one that requires, as a
+condition of use, modification or distribution, that
+* the code be disclosed or distributed in source code form; or
+* others have the right to modify it.
+3. SCOPE OF LICENSE. The software is licensed, not sold. This agreement only gives you some rights
+to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights
+despite this limitation, you may use the software only as expressly permitted in this agreement. In
+doing so, you must comply with any technical limitations in the software that only allow you to use it in
+certain ways. You may not
+* work around any technical limitations in the software;
+* reverse engineer, decompile or disassemble the software, except and only to the extent that
+applicable law expressly permits, despite this limitation;
+* make more copies of the software than specified in this agreement or allowed by applicable law,
+despite this limitation;
+* publish the software for others to copy;
+* rent, lease or lend the software;
+* transfer the software or this agreement to any third party; or
+* use the software for commercial software hosting services.
+4. INTERNET-BASED SERVICES. Microsoft provides Internet-based services with the software. It may
+change or cancel them at any time.
+a. Consent for Internet-Based Services. The software contains features which may connect to
+Microsoft or service provider computer systems over the Internet. In some cases, you will not
+receive a separate notice when they connect. You may switch these features on or you may
+choose not to use them. For more information about these features, see
+http://www.microsoft.com/info/privacy/default.mspx. By using these features, you consent to the transmission of
+this information. Microsoft does not use the information to identify or contact you.
+b. Misuse of Internet-based Services. You may not use these services in any way that could
+harm them or impair anyone else’s use of them. You may not use the services to try to gain
+unauthorized access to any service, data, account or network by any means.
+
+5. BACKUP COPY. You may make one backup copy of the software. You may use it only to reinstall the
+software.
+6. DOCUMENTATION. Any person that has valid access to your computer or internal network may copy
+and use the documentation for your internal, reference purposes.
+7. EXPORT RESTRICTIONS. The software is subject to United States export laws and regulations. You
+must comply with all domestic and international export laws and regulations that apply to the software.
+These laws include restrictions on destinations, end users and end use. For additional information, see
+www.microsoft.com/exporting.
+8. SUPPORT SERVICES. Because this software is “as is,” we may not provide support services for it.
+9. ENTIRE AGREEMENT. This agreement, and the terms for supplements, updates, Internet-based
+services and support services that you use, are the entire agreement for the software and support
+services.
+10. APPLICABLE LAW.
+a. United States. If you acquired the software in the United States, Washington state law governs
+the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of
+laws principles. The laws of the state where you live govern all other claims, including claims under
+state consumer protection laws, unfair competition laws, and in tort.
+b. Outside the United States. If you acquired the software in any other country, the laws of that
+country apply.
+11. LEGAL EFFECT. This agreement describes certain legal rights. You may have other rights under the
+laws of your country. You may also have rights with respect to the party from whom you acquired the
+software. This agreement does not change your rights under the laws of your country if the laws of
+your country do not permit it to do so.
+12. DISCLAIMER OF WARRANTY. The software is licensed “as-is.” You bear the risk of using
+it. Microsoft gives no express warranties, guarantees or conditions. You may have
+additional consumer rights under your local laws which this agreement cannot change. To
+the extent permitted under your local laws, Microsoft excludes the implied warranties of
+merchantability, fitness for a particular purpose and non-infringement.
+13. LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES. You can recover from
+Microsoft and its suppliers only direct damages up to U.S. $5.00. You cannot recover any
+other damages, including consequential, lost profits, special, indirect or incidental
+damages.
+This limitation applies to
+* anything related to the software, services, content (including code) on third party Internet sites, or
+third party programs; and
+* claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence,
+or other tort to the extent permitted by applicable law.
+It also applies even if Microsoft knew or should have known about the possibility of the damages. The
+above limitation or exclusion may not apply to you because your country may not allow the exclusion or
+limitation of incidental, consequential or other damages.
+ </string>
+ </map>
+ <key>apache 2.0</key>
+ <map>
+ <key>url</key>
+ <string>http://www.apache.org/licenses/LICENSE-2.0</string>
+ </map>
+ <key>artwork</key>
+ <map>
+ <key>text</key>
+ <string>COPYRIGHT AND PERMISSION NOTICE
+
+Second Life(TM) Viewer Artwork. Copyright (C) 2008 Linden Research, Inc.
+
+Linden Research, Inc. ("Linden Lab") licenses the Second Life viewer
+artwork and other works in the files distributed with this Notice under
+the Creative Commons Attribution-Share Alike 3.0 License, available at
+http://creativecommons.org/licenses/by-sa/3.0/legalcode. For the license
+summary, see http://creativecommons.org/licenses/by-sa/3.0/.
+
+Notwithstanding the foregoing, all of Linden Lab's trademarks, including
+but not limited to the Second Life brand name and Second Life Eye-in-Hand
+logo, are subject to our trademark policy at
+http://secondlife.com/corporate/trademark/.
+
+If you distribute any copies or adaptations of the Second Life viewer
+artwork or any other works in these files, you must include this Notice
+and clearly identify any changes made to the original works. Include
+this Notice and information where copyright notices are usually included,
+for example, after your own copyright notice acknowledging your use of
+the Second Life viewer artwork, in a text file distributed with your
+program, in your application's About window, or on a credits page for
+your work.
+</string>
+ <key>url</key>
+ <string>http://svn.secondlife.com/svn/linden/trunk/doc/LICENSE-logos.txt</string>
+ </map>
+ <key>boost</key>
+ <map>
+ <key>url</key>
+ <string>http://www.boost.org/LICENSE_1_0.txt</string>
+ </map>
+ <key>bsd</key>
+ <map>
+ <key>url</key>
+ <string>http://www.opensource.org/licenses/bsd-license.php</string>
+ </map>
+ <key>c-ares</key>
+ <map>
+ <key>text</key>
+ <string>http://daniel.haxx.se/projects/c-ares/license.html</string>
+ </map>
+ <key>curl</key>
+ <map>
+ <key>url</key>
+ <string>http://curl.haxx.se/docs/copyright.html</string>
+ </map>
+ <key>fmod</key>
+ <map>
+ <key>url</key>
+ <string>http://www.fmod.org/ifmodlicense.html</string>
+ </map>
+ <key>freetype</key>
+ <map>
+ <key>url</key>
+ <string>http://freetype.sourceforge.net/FTL.TXT</string>
+ </map>
+ <key>glh_linear</key>
+ <map>
+ <key>text</key>
+ <string>glh - is a platform-indepenedent C++ OpenGL helper library
+
+Copyright (c) 2000 Cass Everitt
+Copyright (c) 2000 NVIDIA Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+
+Redistributions of source code must retain the above
+copyright notice, this list of conditions and the following
+disclaimer.
+Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following
+disclaimer in the documentation and/or other materials
+provided with the distribution.
+The names of contributors to this software may not be used
+to endorse or promote products derived from this software
+without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+Cass Everitt - cass@r3.nu
+
+</string>
+ </map>
+ <key>glut</key>
+ <map>
+ <key>url</key>
+ <string>http://www.xmission.com/~nate/glut/README-win32.txt</string>
+ </map>
+ <key>gpl</key>
+ <map>
+ <key>url</key>
+ <string>http://www.gnu.org/licenses/gpl.html</string>
+ </map>
+ <key>havok</key>
+ <map>
+ <key>text</key>
+ <string>on file</string>
+ </map>
+ <key>intel</key>
+ <map>
+ <key>text</key>
+ <string>Haven't yet found.
+</string>
+ </map>
+ <key>jpeglib</key>
+ <map>
+ <key>text</key>
+ <string>http://nyctergatis.com/jpeglib/</string>
+ </map>
+ <key>jsoncpp</key>
+ <map>
+ <key>text</key>
+ <string>The json-cpp library and this documentation are in Public Domain. Retrieved from http://jsoncpp.sourceforge.net/ on 2009-09-04.</string>
+ <key>url</key>
+ <string>http://jsoncpp.sourceforge.net</string>
+ </map>
+ <key>kdu</key>
+ <map>
+ <key>text</key>
+ <string>jpeg2000 license #00024 (on file)</string>
+ </map>
+ <key>lgpl</key>
+ <map>
+ <key>url</key>
+ <string>http://www.gnu.org/copyleft/lgpl.html</string>
+ </map>
+ <key>libpng</key>
+ <map>
+ <key>text</key>
+ <string>http://www.libpng.org/pub/png/src/libpng-LICENSE.txt</string>
+ </map>
+ <key>linden</key>
+ <map>
+ <key>text</key>
+ <string>Using this license for Linden Lab owned library files</string>
+ </map>
+ <key>mesa</key>
+ <map>
+ <key>url</key>
+ <string>http://www.mesa3d.org/license.html</string>
+ </map>
+ <key>mit</key>
+ <map>
+ <key>text</key>
+ <string>http://www.jclark.com/xml/copying.txt</string>
+ </map>
+ <key>ogg-vorbis</key>
+ <map>
+ <key>url</key>
+ <string>http://www.xiph.org/licenses/bsd/</string>
+ </map>
+ <key>openSSL</key>
+ <map>
+ <key>url</key>
+ <string>http://www.openssl.org/source/license.html</string>
+ </map>
+ <key>openjpeg</key>
+ <map>
+ <key>url</key>
+ <string>http://www.openjpeg.org/BSDlicense.txt</string>
+ </map>
+ <key>quicktime</key>
+ <map>
+ <key>text</key>
+ <string>ENGLISH
+
+Apple Computer, Inc.
+QuickTime 7 Software Developer Kit (SDK)
+Software License Agreement
+
+PLEASE READ THIS SOFTWARE LICENSE AGREEMENT ("LICENSE") BEFORE USING THE SOFTWARE. BY USING THE SOFTWARE, YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS LICENSE. IF YOU ARE ACCESSING THE SOFTWARE ELECTRONICALLY, SIGNIFY YOUR AGREEMENT TO BE BOUND BY THE TERMS OF THIS LICENSE BY CLICKING THE "AGREE/ACCEPT" BUTTON. IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENSE, RETURN THE APPLE SOFTWARE TO THE PLACE WHERE YOU OBTAINED IT FOR A REFUND OR, IF THE SOFTWARE WAS ACCESSED ELECTRONICALLY, CLICK "DISAGREE/DECLINE".
+
+IMPORTANT NOTE: To the extent this software may be used to reproduce materials, it is licensed to you only for reproduction of materials you are authorized or legally permitted to reproduce.
+
+1. License. Any software, tools, utilities, sample code, documentation, fonts, API?s, header files and other materials accompanying this License, whether on disk, print or electronic documentation, in read only memory, or any other media, (collectively, the "Apple Software") are licensed, not sold, to you by Apple Computer, Inc. ("Apple") for use only under the terms of this License, and Apple reserves all rights not expressly granted to you. The rights granted herein are limited to Apple's and its licensors' intellectual property rights in the Apple Software and do not include any other patents or intellectual property rights. You own the media on which the Apple Software is recorded but Apple and/or Apple's licensor(s) retain ownership of the Apple Software itself. The Apple Software in this package and any copies, modifications and derivative works that this License authorizes you to make are subject to this License.
+
+2. Permitted Uses and Restrictions. You may use the Apple Software to develop application software that is compatible with, and runs only on Mac OS X and/or Windows platforms with QuickTime installed. Except for compiling header files and linking libraries as necessary to build your application software, you have no right to modify, incorporate into or include in combination with your own programs, license or otherwise redistribute any portion of the Apple Software. Your software application may not interfere with the functionality of QuickTime Player or the QuickTime Plug-in, including but not limited to file type or MIME type associations that are registered to QuickTime. You may make only as many internal use copies of the Apple Software as reasonably necessary to use the Apple Software as permitted in this paragraph and distribute such copies only to your employees whose job duties require them to so use the Apple Software. You must reproduce on each copy of the Apple Software or portion thereof, the Apple copyright notice and any other proprietary legends that were on the original copy of the Apple Software. Except as expressly permitted in this License, you may not decompile, reverse engineer, disassemble, modify, rent, lease, loan, sublicense, distribute or create derivative works based upon the Apple Software in whole or part. Your rights under this License will terminate automatically without notice from Apple if you fail to comply with any term(s) of this License. In addition, Apple reserves the right to terminate this License if a new version of Apple's operating system software or the Apple Software is released which is incompatible with the Apple Software.
+
+3. Disclaimer Of Warranty. The Apple Software may be "alpha", "beta", "development", pre-release, untested, and/or not fully tested and may contain errors that could cause failures or loss of data, be incomplete or contain inaccuracies. YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT USE OF THE APPLE SOFTWARE IS AT YOUR SOLE RISK AND THAT THE ENTIRE RISK AS TO SATISFACTORY QUALITY, PERFORMANCE, ACCURACY AND EFFORT IS WITH YOU. EXCEPT FOR THE LIMITED WARRANTY ON MEDIA SET FORTH ABOVE AND TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE APPLE SOFTWARE IS PROVIDED "AS IS", WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND, AND APPLE AND APPLE'S LICENSORS (COLLECTIVELY REFERRED TO AS "APPLE" FOR THE PURPOSES OF SECTIONS 4 AND 5) HEREBY DISCLAIM ALL WARRANTIES AND CONDITIONS WITH RESPECT TO THE APPLE SOFTWARE, EITHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT, AND NON-INFRINGEMENT OF THIRD PARTY RIGHTS. APPLE DOES NOT WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE APPLE SOFTWARE, THAT THE FUNCTIONS CONTAINED IN THE APPLE SOFTWARE WILL MEET YOUR REQUIREMENTS, THAT THE OPERATION OF THE APPLE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT DEFECTS IN THE APPLE SOFTWARE WILL BE CORRECTED. NO ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE SHALL CREATE A WARRANTY. SHOULD THE APPLE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES OR LIMITATIONS ON APPLICABLE STATUTORY RIGHTS OF A CONSUMER, SO THE ABOVE EXCLUSION AND LIMITATIONS MAY NOT APPLY TO YOU.
+
+4. Limitation Of Liability. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT SHALL APPLE BE LIABLE FOR PERSONAL INJURY, OR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES WHATSOEVER, INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, LOSS OF DATA, BUSINESS INTERRUPTION OR ANY OTHER COMMERCIAL DAMAGES OR LOSSES, ARISING OUT OF OR RELATED TO YOUR USE OR INABILITY TO USE THE APPLE SOFTWARE, HOWEVER CAUSED, REGARDLESS OF THE THEORY OF LIABILITY (CONTRACT, TORT OR OTHERWISE) AND EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY FOR PERSONAL INJURY, OR OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY TO YOU. In no event shall Apple's total liability to you for all damages (other than as may be required by applicable law in cases involving personal injury) exceed the amount of fifty dollars ($50.00). The foregoing limitations will apply even if the above stated remedy fails of its essential purpose.
+
+5. Export Control. You may not use or otherwise export or reexport the Apple Product except as authorized by United States law and the laws of the jurisdiction in which the Apple Product was obtained. In particular, but without limitation, the Apple Product may not be exported or re-exported (a) into any U.S. embargoed countries or (b) to anyone on the U.S. Treasury Department's list of Specially Designated Nationals or the U.S. Department of Commerce Denied Person?s List or Entity List. By using the Apple Product, you represent and warrant that you are not located in any such country or on any such list.
+
+6. Government End Users. The Apple Software and related documentation are "Commercial Items", as that term is defined at 48 C.F.R. ?2.101, consisting of "Commercial Computer Software" and "Commercial Computer Software Documentation", as such terms are used in 48 C.F.R. ?12.212 or 48 C.F.R. ?227.7202, as applicable. Consistent with 48 C.F.R. ?12.212 or 48 C.F.R. ?227.7202-1through 227.7202-4, as applicable, the Commercial Computer Software and Commercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial Items and (b) with only those rights as are granted to all other end users pursuant to the terms and conditions herein. Unpublished-rights reserved under the copyright laws of the United States.
+
+7. Controlling Law and Severability. This License will be governed by and construed in accordance with the laws of the State of California, as applied to agreements entered into and to be performed entirely within California between California residents. This License shall not be governed by the United Nations Convention on Contracts for the International Sale of Goods, the application of which is expressly excluded. If for any reason a court of competent jurisdiction finds any provision, or portion thereof, to be unenforceable, the remainder of this License shall continue in full force and effect.
+
+8. Complete Agreement. This License constitutes the entire agreement between the parties with respect to the use of the Apple Software licensed hereunder and supersedes all prior or contemporaneous understandings regarding such subject matter. No amendment to or modification of this License will be binding unless in writing and signed by Apple. Any translation of this License is done for local requirements and in the event of a dispute between the English and any non-English versions, the English version of this License shall govern.
+
+EA0300
+</string>
+ </map>
+ <key>sleepycat</key>
+ <map>
+ <key>url</key>
+ <string>http://opensource.org/licenses/sleepycat.php</string>
+ </map>
+ <key>smartheap</key>
+ <map>
+ <key>text</key>
+ <string>on file
+</string>
+ </map>
+ <key>things</key>
+ <map>
+ </map>
+ <key>vivox</key>
+ <map>
+ <key>text</key>
+ <string>on file</string>
+ </map>
+ <key>xmlrpc-epi</key>
+ <map>
+ <key>url</key>
+ <string>http://xmlrpc-epi.sourceforge.net/main.php?t=license</string>
+ </map>
+ <key>zlib</key>
+ <map>
+ <key>url</key>
+ <string>http://www.gzip.org/zlib/zlib_license.html</string>
+ </map>
+ </map>
+ </map>
+</llsd>