diff options
67 files changed, 3800 insertions, 3600 deletions
diff --git a/autobuild.xml b/autobuild.xml index 11c2da52dc..d7cba5d6b3 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -1,2704 +1,2704 @@ -<?xml version="1.0" ?> -<llsd> -<map> -    <key>installables</key> -    <map> -      <key>GLOD</key> -      <map> -        <key>license</key> -        <string>GLOD</string> -        <key>license_file</key> -        <string>LICENSES/glod.txt</string> -        <key>name</key> -        <string>GLOD</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>b2fe1c860613a68e74d4384be418ffee</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/232684/arch/Darwin/installer/glod-1.0pre4-darwin-20110610.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c0c64dae149d0892343e2ff300fd06b9</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/232684/arch/Linux/installer/glod-1.0pre4-linux-20110611.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>842208365f5b108dac4c7c733b99da9c</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/232684/arch/CYGWIN/installer/glod-1.0pre4-windows-20110610.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>SDL</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/SDL.txt</string> -        <key>name</key> -        <string>SDL</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>69ae3b1c9cdb0ebc0d0e1ac8413e3eb7</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.14-linux-20110309.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>apr_suite</key> -      <map> -        <key>license</key> -        <string>apache</string> -        <key>license_file</key> -        <string>LICENSES/apr_suite.txt</string> -        <key>name</key> -        <string>apr_suite</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>2dfcd809e747f714b3fe0bf82a175812</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/Darwin/installer/apr_suite-1.4.5-darwin-20120618.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>f38c966a430012dc157fdc104f23a59b</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/Linux/installer/apr_suite-1.4.5-linux-20120618.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>4a9d040582342699c58c886c5ccd2caf</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/CYGWIN/installer/apr_suite-1.4.5-windows-20120618.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>ares</key> -      <map> -        <key>license</key> -        <string>c-ares</string> -        <key>license_file</key> -        <string>LICENSES/c-ares.txt</string> -        <key>name</key> -        <string>ares</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e6caaeea16131e1f2343ecd7765e3147</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20110217.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0745872db83d45f4ab3bdc697d98e264</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/223275/arch/Linux/installer/ares-1.7.1-linux-20110310.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1dcec6babd249a2597114d4ac226c461</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/220963/arch/CYGWIN/installer/ares-1.7.1-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>boost</key> -      <map> -        <key>license</key> -        <string>boost</string> -        <key>license_file</key> -        <string>LICENSES/boost.txt</string> -        <key>name</key> -        <string>boost</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ac37d0038c91b0672fa31a02731f0eac</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/Darwin/installer/boost-1.52.0-darwin-20121218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>146ed8a8c2ef8ab3f0a6c4f214fc5c22</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/Linux/installer/boost-1.52.0-linux-20121218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3ea60f17d986b7e8a3351298734bdca4</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/CYGWIN/installer/boost-1.52.0-windows-20121218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>colladadom</key> -      <map> -        <key>license</key> -        <string>scea</string> -        <key>license_file</key> -        <string>LICENSES/collada.txt</string> -        <key>name</key> -        <string>colladadom</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>480b27a0cb39a4adfcdeabef895de3e1</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/227230/arch/Darwin/installer/colladadom-2.2-darwin-20110420.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>be7321370b69b6d66938b82a9230a067</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/233450/arch/Linux/installer/colladadom-2.2-linux-20110621.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a9f548eb6f9aaf292508a8b09c7f2f73</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226584/arch/CYGWIN/installer/colladadom-2.2-windows-20110413.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>curl</key> -      <map> -        <key>license</key> -        <string>curl</string> -        <key>license_file</key> -        <string>LICENSES/curl.txt</string> -        <key>name</key> -        <string>curl</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>aaea644191807f51051cefa2fac11069</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-darwin-20110316.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>2d9377951d99a1aa4735cea8d4b5aa71</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-linux-20110316.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fea96aa2a7d513397317194f3d6c979b</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>db</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/db.txt</string> -        <key>name</key> -        <string>db</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>8f57c413e0786681cbcb9ed2fb8a6d37</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/db-5.1.25-linux-20110309.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>dbusglib</key> -      <map> -        <key>license</key> -        <string>AFL2.1</string> -        <key>license_file</key> -        <string>LICENSES/dbus-glib.txt</string> -        <key>name</key> -        <string>dbusglib</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>94b058b9a81114dc4567bd78e4335425</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbus_glib-0.76-linux-20110310.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>dictionaries</key> -      <map> -        <key>license</key> -        <string>various open</string> -        <key>license_file</key> -        <string>LICENSES/dictionaries.txt</string> -        <key>name</key> -        <string>dictionaries</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>06a6c49eb1873e95623d3d2d07aee903</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/Darwin/installer/dictionaries-1-darwin-20120616.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>4f0ca21d27e0cd0b002149062b0a4b25</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/Linux/installer/dictionaries-1-linux-20120616.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>7520d75f6af325328322201c888191d4</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/CYGWIN/installer/dictionaries-1-windows-20120616.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>elfio</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/elfio.txt</string> -        <key>name</key> -        <string>elfio</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>031e6315a5c0829c9b9a2ec18aeb7ae3</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-elfio/rev/222074/arch/Linux/installer/elfio-1.0.3-linux-20110225.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>expat</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/expat.txt</string> -        <key>name</key> -        <string>expat</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>180e03d0be1f1acfc3244e78742d7bef</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Darwin/installer/expat-2.0.1-darwin-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9bd79781b58e556ab1c36084ec4a1c0c</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Linux/installer/expat-2.0.1-linux-20110219.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e72db1bda49b205ebdf4945d4ed2b8f8</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-2.0.1-windows-20110215.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>fmod</key> -      <map> -        <key>license</key> -        <string>fmod</string> -        <key>license_file</key> -        <string>LICENSES/fmod.txt</string> -        <key>name</key> -        <string>fmod</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>61ead113e6479452e6b690c84b4e9d30</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Darwin/installer/fmod-3.75-darwin-20110222.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0c61d643db54d2e5999be8254569d8b3</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Linux/installer/fmod-3.75-linux-20110223.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d9a9a6ad86895353bcd63374a4c1a91d</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/CYGWIN/installer/fmod-3.75-windows-20110222.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>fontconfig</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/fontconfig.txt</string> -        <key>name</key> -        <string>fontconfig</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>d8b08b657247566bde5fd853c7622478</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.8.0-linux-20110311.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>freeglut</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/freeglut.txt</string> -        <key>name</key> -        <string>freeglut</string> -        <key>platforms</key> -        <map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>825d5a9bafcc5bfe28dc4c1c4f87c576</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freeglut/rev/221064/arch/CYGWIN/installer/freeglut-2.6.0-windows-20110214.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>freetype</key> -      <map> -        <key>license</key> -        <string>freetype</string> -        <key>license_file</key> -        <string>LICENSES/freetype.txt</string> -        <key>name</key> -        <string>freetype</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c0eacb6348e032fbc69cfdc4bd215ee4</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-darwin-20110307.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9f8a9dc39fd7c3da0fb3533782d1fddf</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freetype/rev/226814/arch/Linux/installer/freetype-2.3.9-linux-20110418.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>271349827b939406162ce42e42cd18e0</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-windows-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>glext</key> -      <map> -        <key>license</key> -        <string>glext</string> -        <key>license_file</key> -        <string>LICENSES/glext.txt</string> -        <key>name</key> -        <string>glext</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5de58ca0fe19abf68b25956762ee0d29</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5de58ca0fe19abf68b25956762ee0d29</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>glh_linear</key> -      <map> -        <key>license</key> -        <string>glh_linear</string> -        <key>license_file</key> -        <string>LICENSES/glh_linear.txt</string> -        <key>name</key> -        <string>glh_linear</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>366f940f2634b0e05954646927620bfd</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20101004.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>26f2df1f0b0fa01e94e0253e322f3583</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20101001.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>57f8be28bbaa2505ae3b59deb2c77cdf</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20101011.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>glui</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/glui.txt</string> -        <key>name</key> -        <string>glui</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>bd2f84ef8bd308570e2e532a371dc2ef</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-darwin-20110309.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e006635a741420a15f40bbdac13bd8d7</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-windows-20110214.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>google_breakpad</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/google_breakpad.txt</string> -        <key>name</key> -        <string>google_breakpad</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>21babc394dbf8572830f2e85adec7b9f</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-darwin-20110202.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>204b02a9480c411232255798839431a2</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-linux-20110311.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>627c51136e14e64c5d39933f3abd3bdf</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-windows-20110218.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>googlemock</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/googlemock.txt</string> -        <key>name</key> -        <string>googlemock</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>886ee428f058005ab7f90f61784ec9d9</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-darwin-20101004.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>782ca04e56d8eab755adcae297cafa7c</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-linux-20101001.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>212701468920519f3989677cea9ca4f1</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gmock-1.5.0-windows-20110224.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>gstreamer</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/gstreamer.txt</string> -        <key>name</key> -        <string>gstreamer</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ddbc0a64ad788107877fee777403592c</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20101013.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>gtk-atk-pango-glib</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/gtk-atk-pango-glib.txt</string> -        <key>name</key> -        <string>gtk-atk-pango-glib</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>03694ade27f53199229c03cbbda89214</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20101001.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>c257d718abdde8cfe8a0af26175161a7</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-windows-20101001a.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>havok-source</key> -      <map> -        <key>license</key> -        <string>havok-ares</string> -        <key>license_file</key> -        <string>LICENSES/havok.txt</string> -        <key>name</key> -        <string>havok-source</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e6feee3b452c2f70ce8558e30d6bc10a</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/Darwin/installer/havok_source-2012.1-darwin-20121219.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0c0d2058ba48446e274d6595d1d8063e</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/Linux/installer/havok_source-2012.1-linux-20121219.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>88391b6e08d473506d406ca6f3e88cfb</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/CYGWIN/installer/havok_source-2012.1-windows-20121219.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>jpeglib</key> -      <map> -        <key>license</key> -        <string>jpeglib</string> -        <key>license_file</key> -        <string>LICENSES/jpeglib.txt</string> -        <key>name</key> -        <string>jpeglib</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>71bd6efbf508e1f2e7d98a6195a93e9e</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-darwin-20110228.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>dcca1db348831cdb7c6b26dc4076c597</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-jpeglib/rev/224895/arch/Linux/installer/jpeglib-8c-linux-20110323.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a202ec58cef9097c94acfa958ed6da8d</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-windows-20110217.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>jsoncpp</key> -      <map> -        <key>license</key> -        <string>jsoncpp</string> -        <key>license_file</key> -        <string>LICENSES/jsoncpp.txt</string> -        <key>name</key> -        <string>jsoncpp</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>de8b96120c274e052abb4f692861be46</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-darwin-20110131.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>840cd9455638c0ea52c613cfddd07d5b</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-linux-20110315.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>afff2018e6a887c281b072eecdd9343e</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-windows-20110208.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>kdu</key> -      <map> -        <key>license</key> -        <string>kdu</string> -        <key>license_file</key> -        <string>LICENSES/kdu.txt</string> -        <key>name</key> -        <string>kdu</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a5b2dff0d97b643227a58473e5c57906</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/256978/arch/Darwin/installer/kdu-7.0.0-darwin-20120515.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fbf8a4f78dff986d7c16b3a0437e033e</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/223538/arch/Linux/installer/kdu-6.4.1-linux-20110311.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6d80d35524e1c0c32d3385014d02d48c</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/256978/arch/CYGWIN/installer/kdu-7.0.0-windows-20120515.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>libhunspell</key> -      <map> -        <key>license</key> -        <string>libhunspell</string> -        <key>license_file</key> -        <string>LICENSES/hunspell.txt</string> -        <key>name</key> -        <string>libhunspell</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6f5db0ef258df6e5c93c843ec559db6d</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/Darwin/installer/libhunspell-1.3.2-darwin-20120616.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0c432d2626aea2e91a56335879c92965</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/Linux/installer/libhunspell-1.3.2-linux-20120616.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6a140e5620826aa5e587b4157f57b389</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/CYGWIN/installer/libhunspell-1.3.2-windows-20120616.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>libpng</key> -      <map> -        <key>license</key> -        <string>libpng</string> -        <key>license_file</key> -        <string>LICENSES/libpng.txt</string> -        <key>name</key> -        <string>libpng</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6fe1adf12d98bce9111f60ee762007b9</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-darwin-20110222.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0681ab7e1988dfdbdad7dd9edb7760ee</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-linux-20110223.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>f194ba857ca8dd86483a3ef24535d0db</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libpng/rev/226532/arch/CYGWIN/installer/libpng-1.5.1-windows-20110413.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>libuuid</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/libuuid.txt</string> -        <key>name</key> -        <string>libuuid</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>873e8e99d29711df2efa30646dca1795</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/uuid-1.6.2-linux-20110315.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>libxml</key> -      <map> -        <key>license</key> -        <string>mit</string> -        <key>license_file</key> -        <string>LICENSES/libxml.txt</string> -        <key>name</key> -        <string>libxml</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>6414642528f42dac1cd9a012c99cd748</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux-20101013.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>llphysicsextensions_source</key> -      <map> -        <key>license</key> -        <string>TEMPORARY</string> -        <key>license_file</key> -        <string>LICENSES/llphysicsextensions.txt</string> -        <key>name</key> -        <string>llphysicsextensions_source</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0578fa67ef9906c6aaa326f51db2669f</string> -              <key>hash_algorithm</key> -              <string>md5</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120814.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>b706fdeed4ce2182d434043dc33d9d1d</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20120814.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>0cebd359ea732a7db363d88f9886a1ef</string> -              <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120814.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -        <key>version</key> -        <string>0.2</string> -      </map> -      <key>llphysicsextensions_stub</key> -      <map> -        <key>license</key> -        <string>TEMPORARY</string> -        <key>license_file</key> -        <string>LICENSES/llphysicsextensions.txt</string> -        <key>name</key> -        <string>llphysicsextensions_stub</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3ae798d4dfb54a1d806ee5f8b31f7626</string> -              <key>hash_algorithm</key> -              <string>md5</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120814.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>aa8a2f25e8629cf5e6a96cc0eb93de8e</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120814.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3ea4cee6a8dd4c89fbfd3ad6abd703c2</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120814.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -        <key>version</key> -        <string>0.2</string> -      </map> -      <key>llqtwebkit</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/llqtwebkit.txt</string> -        <key>name</key> -        <string>llqtwebkit</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>4a98d727561cd1f4ac5ee02907411df1</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20120228.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>f50e5f0cc880c55b3f0f7e67dc8f7221</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/Linux/installer/llqtwebkit-4.7.1-linux-20120228.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5e3cd6af397e853a963a6de40d440ff4</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20120228.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>mesa</key> -      <map> -        <key>license</key> -        <string>mesa</string> -        <key>license_file</key> -        <string>LICENSES/mesa.txt</string> -        <key>name</key> -        <string>mesa</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1f600840463c7327ea17486821425750</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20100930.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>ndofdev</key> -      <map> -        <key>license</key> -        <string>linden</string> -        <key>license_file</key> -        <string>LICENSES/libndofdev.txt</string> -        <key>name</key> -        <string>ndofdev</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>674d37d2ba76a2df7f18c47bf50b5d03</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-darwin-20110308.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>9bf7a96c1d2fadb180fda91740c945c6</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libndofdev-linux/rev/233137/arch/Linux/installer/libndofdev-0.3-linux-20110617.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3a4bec9562ed6ac53e85abcb1afc5fc0</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-windows-20110223.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>nvapi</key> -      <map> -        <key>license</key> -        <string>NVAPI</string> -        <key>license_file</key> -        <string>LICENSES/NVAPI_SDK_License_Agreement.pdf</string> -        <key>name</key> -        <string>nvapi</string> -        <key>platforms</key> -        <map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>baf519d36dffe4e4a59471450e391d01</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-nvapi/rev/267102/arch/CYGWIN/installer/nvapi-304-windows-20121116.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>ogg-vorbis</key> -      <map> -        <key>license</key> -        <string>ogg-vorbis</string> -        <key>license_file</key> -        <string>LICENSES/ogg-vorbis.txt</string> -        <key>name</key> -        <string>ogg-vorbis</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>e849bc2b779fb7cc5e81aeb021a542c0</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Darwin/installer/ogg_vorbis-1.2.2-1.3.2-darwin-20110510.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>71eaa462eb0bf8842277a3436483a354</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2-linux-20110511.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>291dbba89dd8162b76f2c2d82e908c6f</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/CYGWIN/installer/ogg_vorbis-1.2.2-1.3.2-windows-20110510.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>openSSL</key> -      <map> -        <key>license</key> -        <string>openSSL</string> -        <key>license_file</key> -        <string>LICENSES/openssl.txt</string> -        <key>name</key> -        <string>openSSL</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>facee34b8bd57ad602157e65a5af1a49</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openssl-0.9.8q-darwin-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>3d40be8566fa4b9df9a38e2a0f9ea467</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/226882/arch/Linux/installer/openssl-1.0.0d-linux-20110418.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>774c7f0a0312bee3054757a623e227bc</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/220986/arch/CYGWIN/installer/openssl-0.9.8q-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>openal_soft</key> -      <map> -        <key>license</key> -        <string>lgpl</string> -        <key>license_file</key> -        <string>LICENSES/OPENAL.txt</string> -        <key>name</key> -        <string>openal_soft</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fccdca18a950ac9363c6fb39118b80e1</string> -              <key>hash_algorithm</key> -              <string>md5</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-3ad86a1c-linux-20110114.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>04df406f3e5d04cf176660bdac66c3a1</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-1.12.854-1.1.0-windows-20110301.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -        <key>version</key> -        <string>3ad86a1c</string> -      </map> -      <key>openjpeg</key> -      <map> -        <key>license</key> -        <string>openjpeg</string> -        <key>license_file</key> -        <string>LICENSES/openjpeg.txt</string> -        <key>name</key> -        <string>openjpeg</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>4be51c7cca7d84831e30b63279df7ae5</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>fb2382014c79e0049746e4e29bd834f9</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>ca5765af55f798724d601720afdf6953</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>pcre</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/pcre-license.txt</string> -        <key>name</key> -        <string>pcre</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a8e74694a0f4248228c13c845ed0a6f8</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Darwin/installer/pcre-7.6-darwin-20110504.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>bb0abe962b3b8208ed2dab0424aab33d</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Linux/installer/pcre-7.6-linux-20110504.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -        </map> -      </map> -      <key>quicktime</key> -      <map> -        <key>license</key> -        <string>quicktime</string> -        <key>license_file</key> -        <string>LICENSES/quicktime.txt</string> -        <key>name</key> -        <string>quicktime</string> -        <key>platforms</key> -        <map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>52e49ab6937b09882389da0dbaec17f5</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/quicktime-7.3-windows-20110127.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>slvoice</key> -      <map> -        <key>license</key> -        <string>vivox</string> -        <key>license_file</key> -        <string>LICENSES/slvoice.txt</string> -        <key>name</key> -        <string>slvoice</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>24e735ae005f3ce7a21a09cc02cece17</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/231678/arch/Darwin/installer/slvoice-3.2.0002.10426-darwin-20110601.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>8a0bc982367d6fdc20a28b391cd40566</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/231678/arch/Linux/installer/slvoice-3.2.0002.10426-linux-20110601.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>1e821cc7d25eabad013b7f3db260dd6b</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/231678/arch/CYGWIN/installer/slvoice-3.2.0002.10426-windows-20110601.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>tcmalloc</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/google-perftools.txt</string> -        <key>name</key> -        <string>tcmalloc</string> -        <key>platforms</key> -        <map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>8aedfdcf670348c18a9991ae1b384a61</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/Linux/installer/gperftools-2.0-linux-20120727.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>f62841804acb91e1309603a84f3f0ce8</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/CYGWIN/installer/gperftools-2.0-windows-20120727.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>tut</key> -      <map> -        <key>license</key> -        <string>bsd</string> -        <key>license_file</key> -        <string>LICENSES/tut.txt</string> -        <key>name</key> -        <string>tut</string> -        <key>platforms</key> -        <map> -          <key>common</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5c6d3e606f027e78f056cb77b20f228e</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-2008-11-30-common-20101001.tar.bz2</string> -            </map> -            <key>name</key> -            <string>common</string> -          </map> -        </map> -      </map> -      <key>xmlrpc-epi</key> -      <map> -        <key>license</key> -        <string>xmlrpc-epi</string> -        <key>license_file</key> -        <string>LICENSES/xmlrpc-epi.txt</string> -        <key>name</key> -        <string>xmlrpc-epi</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>a3e0fb4b4a51b01690a99747a1cca531</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-darwin-20110307.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>174ab797440157956eda7061dae37564</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-linux-20110314.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5181d1a8f2516928ac064d72acf164a4</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-windows-20110224.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -      <key>zlib</key> -      <map> -        <key>license</key> -        <string>zlib</string> -        <key>license_file</key> -        <string>LICENSES/zlib.txt</string> -        <key>name</key> -        <string>zlib</string> -        <key>platforms</key> -        <map> -          <key>darwin</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>49b8de20f3bb43537f51311894a72de1</string> -              <key>url</key> -              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.5-darwin-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>darwin</string> -          </map> -          <key>linux</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>7b4cf3aa2c04937d0a20761516587896</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/223739/arch/Linux/installer/zlib-1.2.5-linux-20110314.tar.bz2</string> -            </map> -            <key>name</key> -            <string>linux</string> -          </map> -          <key>windows</key> -          <map> -            <key>archive</key> -            <map> -              <key>hash</key> -              <string>5852192646681817fc3c3a8c95e91c1e</string> -              <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/220983/arch/CYGWIN/installer/zlib-1.2.5-windows-20110211.tar.bz2</string> -            </map> -            <key>name</key> -            <string>windows</string> -          </map> -        </map> -      </map> -    </map> -    <key>package_description</key> -    <map> -      <key>description</key> -      <string>Spell checking dictionaries</string> -      <key>license</key> -      <string>various open</string> -      <key>name</key> -      <string>dictionaries</string> -      <key>platforms</key> -      <map> -        <key>common</key> -        <map> -          <key>configurations</key> -          <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -              </map> -              <key>configure</key> -              <map> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=TRUE</string> -                </array> -              </map> -              <key>name</key> -              <string>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map> -            <key>RelWithDebInfo</key> -            <map> -              <key>build</key> -              <map> -              </map> -              <key>configure</key> -              <map> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=TRUE</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfoOS</string> -            </map> -            <key>Release</key> -            <map> -              <key>build</key> -              <map> -              </map> -              <key>configure</key> -              <map> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=Release</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=TRUE</string> -                </array> -              </map> -              <key>name</key> -              <string>Release</string> -            </map> -            <key>ReleaseOS</key> -            <map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>command</key> -                <string>cmake</string> -                <key>options</key> -                <array> -                  <string>-DCMAKE_BUILD_TYPE:STRING=Release</string> -                  <string>-DWORD_SIZE:STRING=32</string> -                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>ReleaseOS</string> -            </map> -          </map> -          <key>name</key> -          <string>common</string> -        </map> -        <key>darwin</key> -        <map> -          <key>build_directory</key> -          <string>build-darwin-i386</string> -          <key>configurations</key> -          <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>filters</key> -                <array> -                  <string>setenv</string> -                </array> -                <key>options</key> -                <array> -                  <string>-configuration Debug</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration Debug</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map> -            <key>RelWithDebInfo</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>filters</key> -                <array> -                  <string>setenv</string> -                </array> -                <key>options</key> -                <array> -                  <string>-configuration RelWithDebInfo</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>default</key> -              <string>True</string> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration RelWithDebInfo</string> -                  <string>-project SecondLife.xcodeproj</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfoOS</string> -            </map> -            <key>Release</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>filters</key> -                <array> -                  <string>setenv</string> -                </array> -                <key>options</key> -                <array> -                  <string>-configuration Release</string> -                  <string>-project SecondLife.xcodeproj</string> -                  <string>-DENABLE_SIGNING:BOOL=YES</string> -                  <string>-DSIGNING_IDENTITY:STRING="Developer ID Application: Linden Research, Inc."</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>Release</string> -            </map> -            <key>ReleaseOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>xcodebuild</string> -                <key>options</key> -                <array> -                  <string>-configuration Release</string> -                  <string>-project SecondLife.xcodeproj</string> -                  <string>-DENABLE_SIGNING:BOOL=YES</string> -                  <string>-DSIGNING_IDENTITY:STRING="Developer ID Application: Linden Research, Inc."</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Xcode'</string> -                </array> -              </map> -              <key>name</key> -              <string>ReleaseOS</string> -            </map> -          </map> -          <key>name</key> -          <string>darwin</string> -        </map> -        <key>linux</key> -        <map> -          <key>build_directory</key> -          <string>build-linux-i686</string> -          <key>configurations</key> -          <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 12</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 2</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map> -            <key>RelWithDebInfo</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 12</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>default</key> -              <string>True</string> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 2</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfoOS</string> -            </map> -            <key>Release</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 12</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>../indra</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>Release</string> -            </map> -            <key>ReleaseOS</key> -            <map> -              <key>build</key> -              <map> -                <key>command</key> -                <string>make</string> -                <key>options</key> -                <array> -                  <string>-j 2</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>'Unix Makefiles'</string> -                </array> -              </map> -              <key>name</key> -              <string>ReleaseOS</string> -            </map> -            <key>default</key> -            <map> -              <key>build</key> -              <map> -              </map> -              <key>name</key> -              <string>default</string> -            </map> -          </map> -          <key>name</key> -          <string>linux</string> -        </map> -        <key>windows</key> -        <map> -          <key>build_directory</key> -          <string>build-vc100</string> -          <key>configurations</key> -          <map> -            <key>Debug</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>BuildConsole</string> -                <key>options</key> -                <array> -                  <string>/build</string> -                  <string>"/cfg=Debug|Win32"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>..\indra</string> -                  <string>&&</string> -                  <string>..\indra\tools\vstool\VSTool.exe</string> -                  <string>--solution</string> -                  <string>SecondLife.sln</string> -                  <string>--config</string> -                  <string>Debug</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                </array> -              </map> -              <key>name</key> -              <string>Debug</string> -            </map> -            <key>DebugOS</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>msbuild.exe</string> -                <key>options</key> -                <array> -                  <string>/p:Configuration=Debug</string> -                  <string>/p:Platform=Win32</string> -                  <string>/t:Build</string> -                  <string>/p:useenv=true</string> -                  <string>/verbosity:minimal</string> -                  <string>/toolsversion:4.0</string> -                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>..\indra</string> -                  <string>&&</string> -                  <string>..\indra\tools\vstool\VSTool.exe</string> -                  <string>--solution</string> -                  <string>SecondLife.sln</string> -                  <string>--config</string> -                  <string>Debug</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                  <string>-DUNATTENDED:BOOL=ON</string> -                  <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>DebugOS</string> -            </map> -            <key>RelWithDebInfo</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>BuildConsole</string> -                <key>options</key> -                <array> -                  <string>/build</string> -                  <string>"/cfg=RelWithDebInfo|Win32"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>..\indra</string> -                  <string>&&</string> -                  <string>..\indra\tools\vstool\VSTool.exe</string> -                  <string>--solution</string> -                  <string>SecondLife.sln</string> -                  <string>--config</string> -                  <string>RelWithDebInfo</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                </array> -              </map> -              <key>default</key> -              <string>True</string> -              <key>name</key> -              <string>RelWithDebInfo</string> -            </map> -            <key>RelWithDebInfoOS</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>msbuild.exe</string> -                <key>options</key> -                <array> -                  <string>/p:Configuration=RelWithDebInfo</string> -                  <string>/p:Platform=Win32</string> -                  <string>/t:Build</string> -                  <string>/p:useenv=true</string> -                  <string>/verbosity:minimal</string> -                  <string>/toolsversion:4.0</string> -                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>..\indra</string> -                  <string>&&</string> -                  <string>..\indra\tools\vstool\VSTool.exe</string> -                  <string>--solution</string> -                  <string>SecondLife.sln</string> -                  <string>--config</string> -                  <string>RelWithDebInfo</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                  <string>-DUNATTENDED:BOOL=ON</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                  <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>RelWithDebInfoOS</string> -            </map> -            <key>Release</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>BuildConsole</string> -                <key>options</key> -                <array> -                  <string>/build</string> -                  <string>"/cfg=Release|Win32"</string> -                  <string>"/CL_ADD=/m:1"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>..\indra</string> -                  <string>&&</string> -                  <string>..\indra\tools\vstool\VSTool.exe</string> -                  <string>--solution</string> -                  <string>SecondLife.sln</string> -                  <string>--config</string> -                  <string>Release</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                </array> -              </map> -              <key>name</key> -              <string>Release</string> -            </map> -            <key>ReleaseOS</key> -            <map> -              <key>build</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>SecondLife.sln</string> -                </array> -                <key>command</key> -                <string>msbuild.exe</string> -                <key>options</key> -                <array> -                  <string>/p:Configuration=Release</string> -                  <string>/p:Platform=Win32</string> -                  <string>/t:Build</string> -                  <string>/p:useenv=true</string> -                  <string>/verbosity:minimal</string> -                  <string>/toolsversion:4.0</string> -                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string> -                </array> -              </map> -              <key>configure</key> -              <map> -                <key>arguments</key> -                <array> -                  <string>..\indra</string> -                  <string>&&</string> -                  <string>..\indra\tools\vstool\VSTool.exe</string> -                  <string>--solution</string> -                  <string>SecondLife.sln</string> -                  <string>--config</string> -                  <string>Release</string> -                  <string>--startup</string> -                  <string>secondlife-bin</string> -                </array> -                <key>options</key> -                <array> -                  <string>-G</string> -                  <string>"Visual Studio 10"</string> -                  <string>-DUNATTENDED:BOOL=ON</string> -                  <string>-DINSTALL_PROPRIETARY=FALSE</string> -                  <string>-DUSE_KDU=FALSE</string> -                  <string>-DFMOD=FALSE</string> -                </array> -              </map> -              <key>name</key> -              <string>ReleaseOS</string> -            </map> -          </map> -          <key>name</key> -          <string>windows</string> -        </map> -      </map> -      <key>version</key> -      <string>1.0</string> -    </map> -    <key>type</key> -    <string>autobuild</string> -    <key>version</key> -    <string>1.2</string> -  </map> -</llsd> +<?xml version="1.0" ?>
 +<llsd>
 +<map>
 +    <key>installables</key>
 +    <map>
 +      <key>GLOD</key>
 +      <map>
 +        <key>license</key>
 +        <string>GLOD</string>
 +        <key>license_file</key>
 +        <string>LICENSES/glod.txt</string>
 +        <key>name</key>
 +        <string>GLOD</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>b2fe1c860613a68e74d4384be418ffee</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/232684/arch/Darwin/installer/glod-1.0pre4-darwin-20110610.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>c0c64dae149d0892343e2ff300fd06b9</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/232684/arch/Linux/installer/glod-1.0pre4-linux-20110611.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>842208365f5b108dac4c7c733b99da9c</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/232684/arch/CYGWIN/installer/glod-1.0pre4-windows-20110610.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>SDL</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/SDL.txt</string>
 +        <key>name</key>
 +        <string>SDL</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>69ae3b1c9cdb0ebc0d0e1ac8413e3eb7</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.14-linux-20110309.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>apr_suite</key>
 +      <map>
 +        <key>license</key>
 +        <string>apache</string>
 +        <key>license_file</key>
 +        <string>LICENSES/apr_suite.txt</string>
 +        <key>name</key>
 +        <string>apr_suite</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>2dfcd809e747f714b3fe0bf82a175812</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/Darwin/installer/apr_suite-1.4.5-darwin-20120618.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>f38c966a430012dc157fdc104f23a59b</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/Linux/installer/apr_suite-1.4.5-linux-20120618.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>4a9d040582342699c58c886c5ccd2caf</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/CYGWIN/installer/apr_suite-1.4.5-windows-20120618.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>ares</key>
 +      <map>
 +        <key>license</key>
 +        <string>c-ares</string>
 +        <key>license_file</key>
 +        <string>LICENSES/c-ares.txt</string>
 +        <key>name</key>
 +        <string>ares</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>4dd93da518dc00319cadac43dce2676b</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/239515/arch/Darwin/installer/ares-1.7.5-darwin-20110825.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>c223c0df8ebdab02a5bd785c21459875</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/239515/arch/Linux/installer/ares-1.7.5-linux-20110825.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a0a002359e44a9c68f897b45217abf7e</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/239515/arch/CYGWIN/installer/ares-1.7.5-windows-20110825.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>boost</key>
 +      <map>
 +        <key>license</key>
 +        <string>boost</string>
 +        <key>license_file</key>
 +        <string>LICENSES/boost.txt</string>
 +        <key>name</key>
 +        <string>boost</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>ac37d0038c91b0672fa31a02731f0eac</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/Darwin/installer/boost-1.52.0-darwin-20121218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>146ed8a8c2ef8ab3f0a6c4f214fc5c22</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/Linux/installer/boost-1.52.0-linux-20121218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>3ea60f17d986b7e8a3351298734bdca4</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/CYGWIN/installer/boost-1.52.0-windows-20121218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>colladadom</key>
 +      <map>
 +        <key>license</key>
 +        <string>scea</string>
 +        <key>license_file</key>
 +        <string>LICENSES/collada.txt</string>
 +        <key>name</key>
 +        <string>colladadom</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>480b27a0cb39a4adfcdeabef895de3e1</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/227230/arch/Darwin/installer/colladadom-2.2-darwin-20110420.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>be7321370b69b6d66938b82a9230a067</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/233450/arch/Linux/installer/colladadom-2.2-linux-20110621.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a9f548eb6f9aaf292508a8b09c7f2f73</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226584/arch/CYGWIN/installer/colladadom-2.2-windows-20110413.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>curl</key>
 +      <map>
 +        <key>license</key>
 +        <string>curl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/curl.txt</string>
 +        <key>name</key>
 +        <string>curl</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6f6b4fc6268e7935e82e694ed3f5912a</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/249347/arch/Darwin/installer/curl-7.24.0-darwin-20120213.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>384e6d46f2f4228117cda7eea396df06</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/263749/arch/Linux/installer/curl-7.24.0-linux-20120820.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>56c72a3b4d6faab81a4d66a630a67c83</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/249347/arch/CYGWIN/installer/curl-7.24.0-windows-20120213.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>db</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/db.txt</string>
 +        <key>name</key>
 +        <string>db</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>8f57c413e0786681cbcb9ed2fb8a6d37</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/db-5.1.25-linux-20110309.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>dbusglib</key>
 +      <map>
 +        <key>license</key>
 +        <string>AFL2.1</string>
 +        <key>license_file</key>
 +        <string>LICENSES/dbus-glib.txt</string>
 +        <key>name</key>
 +        <string>dbusglib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>94b058b9a81114dc4567bd78e4335425</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbus_glib-0.76-linux-20110310.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>dictionaries</key>
 +      <map>
 +        <key>license</key>
 +        <string>various open</string>
 +        <key>license_file</key>
 +        <string>LICENSES/dictionaries.txt</string>
 +        <key>name</key>
 +        <string>dictionaries</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>06a6c49eb1873e95623d3d2d07aee903</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/Darwin/installer/dictionaries-1-darwin-20120616.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>4f0ca21d27e0cd0b002149062b0a4b25</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/Linux/installer/dictionaries-1-linux-20120616.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>7520d75f6af325328322201c888191d4</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/CYGWIN/installer/dictionaries-1-windows-20120616.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>elfio</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/elfio.txt</string>
 +        <key>name</key>
 +        <string>elfio</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>031e6315a5c0829c9b9a2ec18aeb7ae3</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-elfio/rev/222074/arch/Linux/installer/elfio-1.0.3-linux-20110225.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>expat</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/expat.txt</string>
 +        <key>name</key>
 +        <string>expat</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>180e03d0be1f1acfc3244e78742d7bef</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Darwin/installer/expat-2.0.1-darwin-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>9bd79781b58e556ab1c36084ec4a1c0c</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Linux/installer/expat-2.0.1-linux-20110219.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e72db1bda49b205ebdf4945d4ed2b8f8</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-2.0.1-windows-20110215.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>fmod</key>
 +      <map>
 +        <key>license</key>
 +        <string>fmod</string>
 +        <key>license_file</key>
 +        <string>LICENSES/fmod.txt</string>
 +        <key>name</key>
 +        <string>fmod</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>61ead113e6479452e6b690c84b4e9d30</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Darwin/installer/fmod-3.75-darwin-20110222.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0c61d643db54d2e5999be8254569d8b3</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Linux/installer/fmod-3.75-linux-20110223.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d9a9a6ad86895353bcd63374a4c1a91d</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/CYGWIN/installer/fmod-3.75-windows-20110222.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>fontconfig</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/fontconfig.txt</string>
 +        <key>name</key>
 +        <string>fontconfig</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>d8b08b657247566bde5fd853c7622478</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.8.0-linux-20110311.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>freeglut</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/freeglut.txt</string>
 +        <key>name</key>
 +        <string>freeglut</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>825d5a9bafcc5bfe28dc4c1c4f87c576</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freeglut/rev/221064/arch/CYGWIN/installer/freeglut-2.6.0-windows-20110214.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>freetype</key>
 +      <map>
 +        <key>license</key>
 +        <string>freetype</string>
 +        <key>license_file</key>
 +        <string>LICENSES/freetype.txt</string>
 +        <key>name</key>
 +        <string>freetype</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>c0eacb6348e032fbc69cfdc4bd215ee4</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-darwin-20110307.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>9f8a9dc39fd7c3da0fb3533782d1fddf</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freetype/rev/226814/arch/Linux/installer/freetype-2.3.9-linux-20110418.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>271349827b939406162ce42e42cd18e0</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-windows-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>glext</key>
 +      <map>
 +        <key>license</key>
 +        <string>glext</string>
 +        <key>license_file</key>
 +        <string>LICENSES/glext.txt</string>
 +        <key>name</key>
 +        <string>glext</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5de58ca0fe19abf68b25956762ee0d29</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5de58ca0fe19abf68b25956762ee0d29</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>glh_linear</key>
 +      <map>
 +        <key>license</key>
 +        <string>glh_linear</string>
 +        <key>license_file</key>
 +        <string>LICENSES/glh_linear.txt</string>
 +        <key>name</key>
 +        <string>glh_linear</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>366f940f2634b0e05954646927620bfd</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20101004.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>26f2df1f0b0fa01e94e0253e322f3583</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20101001.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>57f8be28bbaa2505ae3b59deb2c77cdf</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20101011.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>glui</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/glui.txt</string>
 +        <key>name</key>
 +        <string>glui</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>bd2f84ef8bd308570e2e532a371dc2ef</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-darwin-20110309.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e006635a741420a15f40bbdac13bd8d7</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-windows-20110214.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>google_breakpad</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/google_breakpad.txt</string>
 +        <key>name</key>
 +        <string>google_breakpad</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>21babc394dbf8572830f2e85adec7b9f</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-darwin-20110202.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>204b02a9480c411232255798839431a2</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-linux-20110311.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>627c51136e14e64c5d39933f3abd3bdf</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-windows-20110218.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>googlemock</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/googlemock.txt</string>
 +        <key>name</key>
 +        <string>googlemock</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>886ee428f058005ab7f90f61784ec9d9</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-darwin-20101004.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>782ca04e56d8eab755adcae297cafa7c</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-linux-20101001.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>212701468920519f3989677cea9ca4f1</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gmock-1.5.0-windows-20110224.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>gstreamer</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/gstreamer.txt</string>
 +        <key>name</key>
 +        <string>gstreamer</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>ddbc0a64ad788107877fee777403592c</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20101013.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>gtk-atk-pango-glib</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/gtk-atk-pango-glib.txt</string>
 +        <key>name</key>
 +        <string>gtk-atk-pango-glib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>03694ade27f53199229c03cbbda89214</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20101001.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>c257d718abdde8cfe8a0af26175161a7</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-windows-20101001a.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>havok-source</key>
 +      <map>
 +        <key>license</key>
 +        <string>havok-ares</string>
 +        <key>license_file</key>
 +        <string>LICENSES/havok.txt</string>
 +        <key>name</key>
 +        <string>havok-source</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e6feee3b452c2f70ce8558e30d6bc10a</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/Darwin/installer/havok_source-2012.1-darwin-20121219.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0c0d2058ba48446e274d6595d1d8063e</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/Linux/installer/havok_source-2012.1-linux-20121219.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>88391b6e08d473506d406ca6f3e88cfb</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/CYGWIN/installer/havok_source-2012.1-windows-20121219.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>jpeglib</key>
 +      <map>
 +        <key>license</key>
 +        <string>jpeglib</string>
 +        <key>license_file</key>
 +        <string>LICENSES/jpeglib.txt</string>
 +        <key>name</key>
 +        <string>jpeglib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>71bd6efbf508e1f2e7d98a6195a93e9e</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-darwin-20110228.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>dcca1db348831cdb7c6b26dc4076c597</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-jpeglib/rev/224895/arch/Linux/installer/jpeglib-8c-linux-20110323.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a202ec58cef9097c94acfa958ed6da8d</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-windows-20110217.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>jsoncpp</key>
 +      <map>
 +        <key>license</key>
 +        <string>jsoncpp</string>
 +        <key>license_file</key>
 +        <string>LICENSES/jsoncpp.txt</string>
 +        <key>name</key>
 +        <string>jsoncpp</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>de8b96120c274e052abb4f692861be46</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-darwin-20110131.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>840cd9455638c0ea52c613cfddd07d5b</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-linux-20110315.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>afff2018e6a887c281b072eecdd9343e</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-windows-20110208.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>kdu</key>
 +      <map>
 +        <key>license</key>
 +        <string>kdu</string>
 +        <key>license_file</key>
 +        <string>LICENSES/kdu.txt</string>
 +        <key>name</key>
 +        <string>kdu</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a5b2dff0d97b643227a58473e5c57906</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/256978/arch/Darwin/installer/kdu-7.0.0-darwin-20120515.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fbf8a4f78dff986d7c16b3a0437e033e</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/223538/arch/Linux/installer/kdu-6.4.1-linux-20110311.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6d80d35524e1c0c32d3385014d02d48c</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/256978/arch/CYGWIN/installer/kdu-7.0.0-windows-20120515.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>libhunspell</key>
 +      <map>
 +        <key>license</key>
 +        <string>libhunspell</string>
 +        <key>license_file</key>
 +        <string>LICENSES/hunspell.txt</string>
 +        <key>name</key>
 +        <string>libhunspell</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6f5db0ef258df6e5c93c843ec559db6d</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/Darwin/installer/libhunspell-1.3.2-darwin-20120616.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0c432d2626aea2e91a56335879c92965</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/Linux/installer/libhunspell-1.3.2-linux-20120616.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6a140e5620826aa5e587b4157f57b389</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/CYGWIN/installer/libhunspell-1.3.2-windows-20120616.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>libpng</key>
 +      <map>
 +        <key>license</key>
 +        <string>libpng</string>
 +        <key>license_file</key>
 +        <string>LICENSES/libpng.txt</string>
 +        <key>name</key>
 +        <string>libpng</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6fe1adf12d98bce9111f60ee762007b9</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-darwin-20110222.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0681ab7e1988dfdbdad7dd9edb7760ee</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-linux-20110223.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>f194ba857ca8dd86483a3ef24535d0db</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libpng/rev/226532/arch/CYGWIN/installer/libpng-1.5.1-windows-20110413.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>libuuid</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/libuuid.txt</string>
 +        <key>name</key>
 +        <string>libuuid</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>873e8e99d29711df2efa30646dca1795</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/uuid-1.6.2-linux-20110315.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>libxml</key>
 +      <map>
 +        <key>license</key>
 +        <string>mit</string>
 +        <key>license_file</key>
 +        <string>LICENSES/libxml.txt</string>
 +        <key>name</key>
 +        <string>libxml</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>6414642528f42dac1cd9a012c99cd748</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux-20101013.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>llphysicsextensions_source</key>
 +      <map>
 +        <key>license</key>
 +        <string>TEMPORARY</string>
 +        <key>license_file</key>
 +        <string>LICENSES/llphysicsextensions.txt</string>
 +        <key>name</key>
 +        <string>llphysicsextensions_source</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0578fa67ef9906c6aaa326f51db2669f</string>
 +              <key>hash_algorithm</key>
 +              <string>md5</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120814.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>b706fdeed4ce2182d434043dc33d9d1d</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20120814.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>0cebd359ea732a7db363d88f9886a1ef</string>
 +              <key>url</key>
 +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120814.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +        <key>version</key>
 +        <string>0.2</string>
 +      </map>
 +      <key>llphysicsextensions_stub</key>
 +      <map>
 +        <key>license</key>
 +        <string>TEMPORARY</string>
 +        <key>license_file</key>
 +        <string>LICENSES/llphysicsextensions.txt</string>
 +        <key>name</key>
 +        <string>llphysicsextensions_stub</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>3ae798d4dfb54a1d806ee5f8b31f7626</string>
 +              <key>hash_algorithm</key>
 +              <string>md5</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120814.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>aa8a2f25e8629cf5e6a96cc0eb93de8e</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120814.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>3ea4cee6a8dd4c89fbfd3ad6abd703c2</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120814.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +        <key>version</key>
 +        <string>0.2</string>
 +      </map>
 +      <key>llqtwebkit</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/llqtwebkit.txt</string>
 +        <key>name</key>
 +        <string>llqtwebkit</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>4a98d727561cd1f4ac5ee02907411df1</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20120228.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>f50e5f0cc880c55b3f0f7e67dc8f7221</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/Linux/installer/llqtwebkit-4.7.1-linux-20120228.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5e3cd6af397e853a963a6de40d440ff4</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20120228.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>mesa</key>
 +      <map>
 +        <key>license</key>
 +        <string>mesa</string>
 +        <key>license_file</key>
 +        <string>LICENSES/mesa.txt</string>
 +        <key>name</key>
 +        <string>mesa</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>1f600840463c7327ea17486821425750</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20100930.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>ndofdev</key>
 +      <map>
 +        <key>license</key>
 +        <string>linden</string>
 +        <key>license_file</key>
 +        <string>LICENSES/libndofdev.txt</string>
 +        <key>name</key>
 +        <string>ndofdev</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>674d37d2ba76a2df7f18c47bf50b5d03</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-darwin-20110308.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>9bf7a96c1d2fadb180fda91740c945c6</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libndofdev-linux/rev/233137/arch/Linux/installer/libndofdev-0.3-linux-20110617.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>3a4bec9562ed6ac53e85abcb1afc5fc0</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-windows-20110223.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>nvapi</key>
 +      <map>
 +        <key>license</key>
 +        <string>NVAPI</string>
 +        <key>license_file</key>
 +        <string>LICENSES/NVAPI_SDK_License_Agreement.pdf</string>
 +        <key>name</key>
 +        <string>nvapi</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>baf519d36dffe4e4a59471450e391d01</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-nvapi/rev/267102/arch/CYGWIN/installer/nvapi-304-windows-20121116.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>ogg-vorbis</key>
 +      <map>
 +        <key>license</key>
 +        <string>ogg-vorbis</string>
 +        <key>license_file</key>
 +        <string>LICENSES/ogg-vorbis.txt</string>
 +        <key>name</key>
 +        <string>ogg-vorbis</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>e849bc2b779fb7cc5e81aeb021a542c0</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Darwin/installer/ogg_vorbis-1.2.2-1.3.2-darwin-20110510.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>71eaa462eb0bf8842277a3436483a354</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2-linux-20110511.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>291dbba89dd8162b76f2c2d82e908c6f</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/CYGWIN/installer/ogg_vorbis-1.2.2-1.3.2-windows-20110510.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>openSSL</key>
 +      <map>
 +        <key>license</key>
 +        <string>openSSL</string>
 +        <key>license_file</key>
 +        <string>LICENSES/openssl.txt</string>
 +        <key>name</key>
 +        <string>openSSL</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>38ea083fe1204ee106b4d44d9811af19</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/249044/arch/Darwin/installer/openssl-1.0.0g-darwin-20120207.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>774c7f0a0312bee3054757a623e227bc</string>
 +              <key>url</key>
 +		   <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/249044/arch/Linux/installer/openssl-1.0.0g-linux-20120207.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>ed6cbaf9860a03bc99ac301277f1452a</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/249044/arch/CYGWIN/installer/openssl-1.0.0g-windows-20120207.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>openal_soft</key>
 +      <map>
 +        <key>license</key>
 +        <string>lgpl</string>
 +        <key>license_file</key>
 +        <string>LICENSES/OPENAL.txt</string>
 +        <key>name</key>
 +        <string>openal_soft</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>7dc5191a3d95074a6ed3bd53f57420e5</string>
 +              <key>hash_algorithm</key>
 +              <string>md5</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-3ad86a1c-linux-20110114.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>04df406f3e5d04cf176660bdac66c3a1</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-1.12.854-1.1.0-windows-20110301.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +        <key>version</key>
 +        <string>3ad86a1c</string>
 +      </map>
 +      <key>openjpeg</key>
 +      <map>
 +        <key>license</key>
 +        <string>openjpeg</string>
 +        <key>license_file</key>
 +        <string>LICENSES/openjpeg.txt</string>
 +        <key>name</key>
 +        <string>openjpeg</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>4be51c7cca7d84831e30b63279df7ae5</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>fb2382014c79e0049746e4e29bd834f9</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>ca5765af55f798724d601720afdf6953</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>pcre</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/pcre-license.txt</string>
 +        <key>name</key>
 +        <string>pcre</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a8e74694a0f4248228c13c845ed0a6f8</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Darwin/installer/pcre-7.6-darwin-20110504.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>bb0abe962b3b8208ed2dab0424aab33d</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Linux/installer/pcre-7.6-linux-20110504.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>quicktime</key>
 +      <map>
 +        <key>license</key>
 +        <string>quicktime</string>
 +        <key>license_file</key>
 +        <string>LICENSES/quicktime.txt</string>
 +        <key>name</key>
 +        <string>quicktime</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>52e49ab6937b09882389da0dbaec17f5</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/quicktime-7.3-windows-20110127.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>slvoice</key>
 +      <map>
 +        <key>license</key>
 +        <string>vivox</string>
 +        <key>license_file</key>
 +        <string>LICENSES/slvoice.txt</string>
 +        <key>name</key>
 +        <string>slvoice</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>24e735ae005f3ce7a21a09cc02cece17</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/231678/arch/Darwin/installer/slvoice-3.2.0002.10426-darwin-20110601.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>8a0bc982367d6fdc20a28b391cd40566</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/231678/arch/Linux/installer/slvoice-3.2.0002.10426-linux-20110601.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>1e821cc7d25eabad013b7f3db260dd6b</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/231678/arch/CYGWIN/installer/slvoice-3.2.0002.10426-windows-20110601.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>tcmalloc</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/google-perftools.txt</string>
 +        <key>name</key>
 +        <string>tcmalloc</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>8aedfdcf670348c18a9991ae1b384a61</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/Linux/installer/gperftools-2.0-linux-20120727.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>f62841804acb91e1309603a84f3f0ce8</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/CYGWIN/installer/gperftools-2.0-windows-20120727.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>tut</key>
 +      <map>
 +        <key>license</key>
 +        <string>bsd</string>
 +        <key>license_file</key>
 +        <string>LICENSES/tut.txt</string>
 +        <key>name</key>
 +        <string>tut</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>common</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5c6d3e606f027e78f056cb77b20f228e</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-2008-11-30-common-20101001.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>common</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>xmlrpc-epi</key>
 +      <map>
 +        <key>license</key>
 +        <string>xmlrpc-epi</string>
 +        <key>license_file</key>
 +        <string>LICENSES/xmlrpc-epi.txt</string>
 +        <key>name</key>
 +        <string>xmlrpc-epi</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>a3e0fb4b4a51b01690a99747a1cca531</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-darwin-20110307.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>174ab797440157956eda7061dae37564</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-linux-20110314.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5181d1a8f2516928ac064d72acf164a4</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-windows-20110224.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +      <key>zlib</key>
 +      <map>
 +        <key>license</key>
 +        <string>zlib</string>
 +        <key>license_file</key>
 +        <string>LICENSES/zlib.txt</string>
 +        <key>name</key>
 +        <string>zlib</string>
 +        <key>platforms</key>
 +        <map>
 +          <key>darwin</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>49b8de20f3bb43537f51311894a72de1</string>
 +              <key>url</key>
 +              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.5-darwin-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>darwin</string>
 +          </map>
 +          <key>linux</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>7b4cf3aa2c04937d0a20761516587896</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/223739/arch/Linux/installer/zlib-1.2.5-linux-20110314.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>linux</string>
 +          </map>
 +          <key>windows</key>
 +          <map>
 +            <key>archive</key>
 +            <map>
 +              <key>hash</key>
 +              <string>5852192646681817fc3c3a8c95e91c1e</string>
 +              <key>url</key>
 +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/220983/arch/CYGWIN/installer/zlib-1.2.5-windows-20110211.tar.bz2</string>
 +            </map>
 +            <key>name</key>
 +            <string>windows</string>
 +          </map>
 +        </map>
 +      </map>
 +    </map>
 +    <key>package_description</key>
 +    <map>
 +      <key>description</key>
 +      <string>Spell checking dictionaries</string>
 +      <key>license</key>
 +      <string>various open</string>
 +      <key>name</key>
 +      <string>dictionaries</string>
 +      <key>platforms</key>
 +      <map>
 +        <key>common</key>
 +        <map>
 +          <key>configurations</key>
 +          <map>
 +            <key>Debug</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=TRUE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Debug</string>
 +            </map>
 +            <key>DebugOS</key>
 +            <map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>DebugOS</string>
 +            </map>
 +            <key>RelWithDebInfo</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=TRUE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</key>
 +            <map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=Release</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=TRUE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Release</string>
 +            </map>
 +            <key>ReleaseOS</key>
 +            <map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>command</key>
 +                <string>cmake</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-DCMAKE_BUILD_TYPE:STRING=Release</string>
 +                  <string>-DWORD_SIZE:STRING=32</string>
 +                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>ReleaseOS</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>common</string>
 +        </map>
 +        <key>darwin</key>
 +        <map>
 +          <key>build_directory</key>
 +          <string>build-darwin-i386</string>
 +          <key>configurations</key>
 +          <map>
 +            <key>Debug</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>filters</key>
 +                <array>
 +                  <string>setenv</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration Debug</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Debug</string>
 +            </map>
 +            <key>DebugOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration Debug</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>DebugOS</string>
 +            </map>
 +            <key>RelWithDebInfo</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>filters</key>
 +                <array>
 +                  <string>setenv</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration RelWithDebInfo</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>default</key>
 +              <string>True</string>
 +              <key>name</key>
 +              <string>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration RelWithDebInfo</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>filters</key>
 +                <array>
 +                  <string>setenv</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration Release</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                  <string>-DENABLE_SIGNING:BOOL=YES</string>
 +                  <string>-DSIGNING_IDENTITY:STRING="Developer ID Application: Linden Research, Inc."</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Release</string>
 +            </map>
 +            <key>ReleaseOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>xcodebuild</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-configuration Release</string>
 +                  <string>-project SecondLife.xcodeproj</string>
 +                  <string>-DENABLE_SIGNING:BOOL=YES</string>
 +                  <string>-DSIGNING_IDENTITY:STRING="Developer ID Application: Linden Research, Inc."</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Xcode'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>ReleaseOS</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>darwin</string>
 +        </map>
 +        <key>linux</key>
 +        <map>
 +          <key>build_directory</key>
 +          <string>build-linux-i686</string>
 +          <key>configurations</key>
 +          <map>
 +            <key>Debug</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 12</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Debug</string>
 +            </map>
 +            <key>DebugOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 2</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>DebugOS</string>
 +            </map>
 +            <key>RelWithDebInfo</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 12</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>default</key>
 +              <string>True</string>
 +              <key>name</key>
 +              <string>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 2</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 12</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>../indra</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Release</string>
 +            </map>
 +            <key>ReleaseOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>command</key>
 +                <string>make</string>
 +                <key>options</key>
 +                <array>
 +                  <string>-j 2</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>'Unix Makefiles'</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>ReleaseOS</string>
 +            </map>
 +            <key>default</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +              </map>
 +              <key>name</key>
 +              <string>default</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>linux</string>
 +        </map>
 +        <key>windows</key>
 +        <map>
 +          <key>build_directory</key>
 +          <string>build-vc100</string>
 +          <key>configurations</key>
 +          <map>
 +            <key>Debug</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>BuildConsole</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/build</string>
 +                  <string>"/cfg=Debug|Win32"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>..\indra</string>
 +                  <string>&&</string>
 +                  <string>..\indra\tools\vstool\VSTool.exe</string>
 +                  <string>--solution</string>
 +                  <string>SecondLife.sln</string>
 +                  <string>--config</string>
 +                  <string>Debug</string>
 +                  <string>--startup</string>
 +                  <string>secondlife-bin</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Debug</string>
 +            </map>
 +            <key>DebugOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>msbuild.exe</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/p:Configuration=Debug</string>
 +                  <string>/p:Platform=Win32</string>
 +                  <string>/t:Build</string>
 +                  <string>/p:useenv=true</string>
 +                  <string>/verbosity:minimal</string>
 +                  <string>/toolsversion:4.0</string>
 +                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>..\indra</string>
 +                  <string>&&</string>
 +                  <string>..\indra\tools\vstool\VSTool.exe</string>
 +                  <string>--solution</string>
 +                  <string>SecondLife.sln</string>
 +                  <string>--config</string>
 +                  <string>Debug</string>
 +                  <string>--startup</string>
 +                  <string>secondlife-bin</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                  <string>-DUNATTENDED:BOOL=ON</string>
 +                  <string>-DUSE_KDU=FALSE</string>
 +                  <string>-DFMOD=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>DebugOS</string>
 +            </map>
 +            <key>RelWithDebInfo</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>BuildConsole</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/build</string>
 +                  <string>"/cfg=RelWithDebInfo|Win32"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>..\indra</string>
 +                  <string>&&</string>
 +                  <string>..\indra\tools\vstool\VSTool.exe</string>
 +                  <string>--solution</string>
 +                  <string>SecondLife.sln</string>
 +                  <string>--config</string>
 +                  <string>RelWithDebInfo</string>
 +                  <string>--startup</string>
 +                  <string>secondlife-bin</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                </array>
 +              </map>
 +              <key>default</key>
 +              <string>True</string>
 +              <key>name</key>
 +              <string>RelWithDebInfo</string>
 +            </map>
 +            <key>RelWithDebInfoOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>msbuild.exe</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/p:Configuration=RelWithDebInfo</string>
 +                  <string>/p:Platform=Win32</string>
 +                  <string>/t:Build</string>
 +                  <string>/p:useenv=true</string>
 +                  <string>/verbosity:minimal</string>
 +                  <string>/toolsversion:4.0</string>
 +                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>..\indra</string>
 +                  <string>&&</string>
 +                  <string>..\indra\tools\vstool\VSTool.exe</string>
 +                  <string>--solution</string>
 +                  <string>SecondLife.sln</string>
 +                  <string>--config</string>
 +                  <string>RelWithDebInfo</string>
 +                  <string>--startup</string>
 +                  <string>secondlife-bin</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                  <string>-DUNATTENDED:BOOL=ON</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                  <string>-DUSE_KDU=FALSE</string>
 +                  <string>-DFMOD=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>RelWithDebInfoOS</string>
 +            </map>
 +            <key>Release</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>BuildConsole</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/build</string>
 +                  <string>"/cfg=Release|Win32"</string>
 +                  <string>"/CL_ADD=/m:1"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>..\indra</string>
 +                  <string>&&</string>
 +                  <string>..\indra\tools\vstool\VSTool.exe</string>
 +                  <string>--solution</string>
 +                  <string>SecondLife.sln</string>
 +                  <string>--config</string>
 +                  <string>Release</string>
 +                  <string>--startup</string>
 +                  <string>secondlife-bin</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>Release</string>
 +            </map>
 +            <key>ReleaseOS</key>
 +            <map>
 +              <key>build</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>SecondLife.sln</string>
 +                </array>
 +                <key>command</key>
 +                <string>msbuild.exe</string>
 +                <key>options</key>
 +                <array>
 +                  <string>/p:Configuration=Release</string>
 +                  <string>/p:Platform=Win32</string>
 +                  <string>/t:Build</string>
 +                  <string>/p:useenv=true</string>
 +                  <string>/verbosity:minimal</string>
 +                  <string>/toolsversion:4.0</string>
 +                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string>
 +                </array>
 +              </map>
 +              <key>configure</key>
 +              <map>
 +                <key>arguments</key>
 +                <array>
 +                  <string>..\indra</string>
 +                  <string>&&</string>
 +                  <string>..\indra\tools\vstool\VSTool.exe</string>
 +                  <string>--solution</string>
 +                  <string>SecondLife.sln</string>
 +                  <string>--config</string>
 +                  <string>Release</string>
 +                  <string>--startup</string>
 +                  <string>secondlife-bin</string>
 +                </array>
 +                <key>options</key>
 +                <array>
 +                  <string>-G</string>
 +                  <string>"Visual Studio 10"</string>
 +                  <string>-DUNATTENDED:BOOL=ON</string>
 +                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
 +                  <string>-DUSE_KDU=FALSE</string>
 +                  <string>-DFMOD=FALSE</string>
 +                </array>
 +              </map>
 +              <key>name</key>
 +              <string>ReleaseOS</string>
 +            </map>
 +          </map>
 +          <key>name</key>
 +          <string>windows</string>
 +        </map>
 +      </map>
 +      <key>version</key>
 +      <string>1.0</string>
 +    </map>
 +    <key>type</key>
 +    <string>autobuild</string>
 +    <key>version</key>
 +    <string>1.2</string>
 +  </map>
 +</llsd>
 diff --git a/doc/contributions.txt b/doc/contributions.txt index f2c249c7c1..33b2ded81d 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -750,6 +750,7 @@ Marine Kelley  MartinRJ Fayray      STORM-1844      STORM-1845 +    STORM-1934  Matthew Anthony  Matthew Dowd  	VWR-1344 diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 5cce8ff2c4..e019c17280 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -236,6 +236,7 @@ set(llcommon_HEADER_FILES      llstrider.h      llstring.h      llstringtable.h +    llstaticstringtable.h      llsys.h      llthread.h      llthreadsafequeue.h diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h index 034546c3f3..8042fe2502 100644 --- a/indra/llcommon/llapr.h +++ b/indra/llcommon/llapr.h @@ -164,14 +164,20 @@ public:  	~LLAtomic32<Type>() {};  	operator const Type() { apr_uint32_t data = apr_atomic_read32(&mData); return Type(data); } +	 +	Type	CurrentValue() const { apr_uint32_t data = apr_atomic_read32(const_cast< volatile apr_uint32_t* >(&mData)); return Type(data); } +  	Type operator =(const Type& x) { apr_atomic_set32(&mData, apr_uint32_t(x)); return Type(mData); }  	void operator -=(Type x) { apr_atomic_sub32(&mData, apr_uint32_t(x)); }  	void operator +=(Type x) { apr_atomic_add32(&mData, apr_uint32_t(x)); }  	Type operator ++(int) { return apr_atomic_inc32(&mData); } // Type++  	Type operator --(int) { return apr_atomic_dec32(&mData); } // approximately --Type (0 if final is 0, non-zero otherwise) + +	Type operator ++() { return apr_atomic_inc32(&mData); } // Type++ +	Type operator --() { return apr_atomic_dec32(&mData); } // approximately --Type (0 if final is 0, non-zero otherwise)  private: -	apr_uint32_t mData; +	volatile apr_uint32_t mData;  };  typedef LLAtomic32<U32> LLAtomicU32; diff --git a/indra/llcommon/lleventapi.h b/indra/llcommon/lleventapi.h index 1a37d780b6..10c7e7a23f 100644 --- a/indra/llcommon/lleventapi.h +++ b/indra/llcommon/lleventapi.h @@ -41,12 +41,13 @@   * Deriving from LLInstanceTracker lets us enumerate instances.   */  class LL_COMMON_API LLEventAPI: public LLDispatchListener, -                  public LLInstanceTracker<LLEventAPI, std::string> +                  public INSTANCE_TRACKER_KEYED(LLEventAPI, std::string)  {      typedef LLDispatchListener lbase; -    typedef LLInstanceTracker<LLEventAPI, std::string> ibase; +    typedef INSTANCE_TRACKER_KEYED(LLEventAPI, std::string) ibase;  public: +      /**       * @param name LLEventPump name on which this LLEventAPI will listen. This       * also serves as the LLInstanceTracker instance key. diff --git a/indra/llcommon/lleventtimer.h b/indra/llcommon/lleventtimer.h index 7f42623d01..e55f851758 100644 --- a/indra/llcommon/lleventtimer.h +++ b/indra/llcommon/lleventtimer.h @@ -33,9 +33,10 @@  #include "lltimer.h"  // class for scheduling a function to be called at a given frequency (approximate, inprecise) -class LL_COMMON_API LLEventTimer : public LLInstanceTracker<LLEventTimer> +class LL_COMMON_API LLEventTimer : public INSTANCE_TRACKER(LLEventTimer)  {  public: +  	LLEventTimer(F32 period);	// period is the amount of time between each call to tick() in seconds  	LLEventTimer(const LLDate& time);  	virtual ~LLEventTimer(); diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h index e42e549df5..440d42ab5a 100644 --- a/indra/llcommon/llfasttimer.h +++ b/indra/llcommon/llfasttimer.h @@ -63,7 +63,7 @@ public:  	// stores a "named" timer instance to be reused via multiple LLFastTimer stack instances  	class LL_COMMON_API NamedTimer -	:	public LLInstanceTracker<NamedTimer> +	:	public LLInstanceTracker<NamedTimer, InstanceTrackType_NamedTimer >  	{  		friend class DeclareTimer;  	public: @@ -137,10 +137,11 @@ public:  	// used to statically declare a new named timer  	class LL_COMMON_API DeclareTimer -	:	public LLInstanceTracker<DeclareTimer> +	:	public LLInstanceTracker< DeclareTimer, InstanceTrackType_DeclareTimer >  	{  		friend class LLFastTimer;  	public: +  		DeclareTimer(const std::string& name, bool open);  		DeclareTimer(const std::string& name); diff --git a/indra/llcommon/llinstancetracker.cpp b/indra/llcommon/llinstancetracker.cpp index 5dc3ea5d7b..0804be358f 100644 --- a/indra/llcommon/llinstancetracker.cpp +++ b/indra/llcommon/llinstancetracker.cpp @@ -32,18 +32,14 @@  // external library headers  // other Linden headers -//static  -void * & LLInstanceTrackerBase::getInstances(std::type_info const & info) -{ -	typedef std::map<std::string, void *> InstancesMap; -	static InstancesMap instances; +static void* sInstanceTrackerData[ kInstanceTrackTypeCount ] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +void * & LLInstanceTrackerBase::getInstances(InstanceTrackType t) +{  	// std::map::insert() is just what we want here. You attempt to insert a  	// (key, value) pair. If the specified key doesn't yet exist, it inserts  	// the pair and returns a std::pair of (iterator, true). If the specified  	// key DOES exist, insert() simply returns (iterator, false). One lookup  	// handles both cases. -	return instances.insert(InstancesMap::value_type(info.name(), -													 InstancesMap::mapped_type())) -		.first->second; -} +	return sInstanceTrackerData[t]; +}
\ No newline at end of file diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h index 403df08990..c31f579f30 100644 --- a/indra/llcommon/llinstancetracker.h +++ b/indra/llcommon/llinstancetracker.h @@ -38,6 +38,33 @@  #include <boost/iterator/transform_iterator.hpp>  #include <boost/iterator/indirect_iterator.hpp> +enum InstanceTrackType +{ +	InstanceTrackType_LLEventAPI, +	InstanceTrackType_LLEventTimer, +	InstanceTrackType_NamedTimer, +	InstanceTrackType_DeclareTimer, +	InstanceTrackType_LLLeap, +	InstanceTrackType_LLGLNamePool, +	InstanceTrackType_LLConsole, +	InstanceTrackType_LLFloater, +	InstanceTrackType_LLFloaterWebContent, +	InstanceTrackType_LLLayoutStack, +	InstanceTrackType_LLNotificationContext, +	InstanceTrackType_LLWindow, +	InstanceTrackType_LLControlGroup, +	InstanceTrackType_LLControlCache, +	InstanceTrackType_LLMediaCtrl, +	InstanceTrackType_LLNameListCtrl, +	InstanceTrackType_LLToast, +	InstanceTrackType_Keyed,	// for integ tests +	InstanceTrackType_Unkeyed,	// for integ tests +	kInstanceTrackTypeCount +}; + +#define INSTANCE_TRACKER(T)			LLInstanceTracker< T, InstanceTrackType_##T > +#define INSTANCE_TRACKER_KEYED(T,K)	LLInstanceTracker< T, InstanceTrackType_##T, K > +  /**   * Base class manages "class-static" data that must actually have singleton   * semantics: one instance per process, rather than one instance per module as @@ -47,14 +74,15 @@ class LL_COMMON_API LLInstanceTrackerBase : public boost::noncopyable  {  protected:  	/// Get a process-unique void* pointer slot for the specified type_info -	static void * & getInstances(std::type_info const & info); +	//static void * & getInstances(std::type_info const & info); +	static void * & getInstances(InstanceTrackType t);  	/// Find or create a STATICDATA instance for the specified TRACKED class.  	/// STATICDATA must be default-constructible. -	template<typename STATICDATA, class TRACKED> +	template<typename STATICDATA, class TRACKED, class INST, InstanceTrackType TRACKEDTYPE>  	static STATICDATA& getStatic()  	{ -		void *& instances = getInstances(typeid(TRACKED)); +		void *& instances = getInstances(TRACKEDTYPE);  		if (! instances)  		{  			instances = new STATICDATA; @@ -78,16 +106,16 @@ protected:  /// The (optional) key associates a value of type KEY with a given instance of T, for quick lookup  /// If KEY is not provided, then instances are stored in a simple set  /// @NOTE: see explicit specialization below for default KEY==T* case -template<typename T, typename KEY = T*> +template<typename T, enum InstanceTrackType TRACKED, typename KEY = T*>  class LLInstanceTracker : public LLInstanceTrackerBase  { -	typedef LLInstanceTracker<T, KEY> MyT; +	typedef LLInstanceTracker<T, TRACKED, KEY> MyT;  	typedef typename std::map<KEY, T*> InstanceMap;  	struct StaticData: public StaticBase  	{  		InstanceMap sMap;  	}; -	static StaticData& getStatic() { return LLInstanceTrackerBase::getStatic<StaticData, MyT>(); } +	static StaticData& getStatic() { return LLInstanceTrackerBase::getStatic<StaticData, MyT, T, TRACKED>(); }  	static InstanceMap& getMap_() { return getStatic().sMap; }  public: @@ -226,16 +254,16 @@ private:  /// explicit specialization for default case where KEY is T*  /// use a simple std::set<T*> -template<typename T> -class LLInstanceTracker<T, T*> : public LLInstanceTrackerBase +template<typename T, enum InstanceTrackType TRACKED> +class LLInstanceTracker<T, TRACKED, T*> : public LLInstanceTrackerBase  { -	typedef LLInstanceTracker<T, T*> MyT; +	typedef LLInstanceTracker<T, TRACKED, T*> MyT;  	typedef typename std::set<T*> InstanceSet;  	struct StaticData: public StaticBase  	{  		InstanceSet sSet;  	}; -	static StaticData& getStatic() { return LLInstanceTrackerBase::getStatic<StaticData, MyT>(); } +	static StaticData& getStatic() { return LLInstanceTrackerBase::getStatic<StaticData, MyT, T, TRACKED>(); }  	static InstanceSet& getSet_() { return getStatic().sSet; }  public: diff --git a/indra/llcommon/llleap.h b/indra/llcommon/llleap.h index 1a1ad23d39..d4e138f4be 100644 --- a/indra/llcommon/llleap.h +++ b/indra/llcommon/llleap.h @@ -29,9 +29,10 @@   * LLLeap* pointer should be validated before use by   * LLLeap::getInstance(LLLeap*) (see LLInstanceTracker).   */ -class LL_COMMON_API LLLeap: public LLInstanceTracker<LLLeap> +class LL_COMMON_API LLLeap: public INSTANCE_TRACKER(LLLeap)  {  public: +      /**       * Pass a brief string description, mostly for logging purposes. The desc       * need not be unique, but obviously the clearer we can make it, the diff --git a/indra/llcommon/llstaticstringtable.h b/indra/llcommon/llstaticstringtable.h new file mode 100644 index 0000000000..05b0848e30 --- /dev/null +++ b/indra/llcommon/llstaticstringtable.h @@ -0,0 +1,81 @@ +/** 
 + * @file llstringtable.h
 + * @brief The LLStringTable class provides a _fast_ method for finding
 + * unique copies of strings.
 + *
 + * $LicenseInfo:firstyear=2001&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2010, Linden Research, Inc.
 + * 
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + * 
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + * 
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + * 
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +#ifndef LL_STATIC_STRING_TABLE_H
 +#define LL_STATIC_STRING_TABLE_H
 +
 +#include "lldefs.h"
 +#include <boost/unordered_map.hpp>
 +#include "llstl.h"
 +
 +class LLStaticHashedString
 +{
 +public:
 +
 +	LLStaticHashedString(const std::string& s)
 +	{
 +		string_hash = makehash(s);
 +		string		= s;
 +	}
 +
 +	const std::string&	String() const { return string;		}
 +	size_t				Hash()	 const { return string_hash;  }
 +
 +	bool operator==(const LLStaticHashedString& b) const { return Hash() == b.Hash(); }
 +
 +protected:
 +
 +	size_t makehash(const std::string& s)
 +	{
 +		size_t len = s.size();
 +		const char* c = s.c_str();
 +		size_t hashval = 0;
 +		for (size_t i=0; i<len; i++)
 +		{
 +			hashval = ((hashval<<5) + hashval) + *c++;
 +		}
 +		return hashval;
 +	}
 +
 +	std::string string;
 +	size_t		string_hash;
 +};
 +
 +struct LLStaticStringHasher
 +{
 +	enum { bucket_size = 8 };
 +	size_t operator()(const LLStaticHashedString& key_value) const { return key_value.Hash(); }
 +	bool operator()(const LLStaticHashedString& left, const LLStaticHashedString& right) const { return left.Hash() < right.Hash(); }
 +};
 +
 +template< typename MappedObject >
 +class LL_COMMON_API LLStaticStringTable
 +	: public boost::unordered_map< LLStaticHashedString, MappedObject, LLStaticStringHasher >
 +{
 +};
 +
 +#endif
\ No newline at end of file diff --git a/indra/llcommon/llstringtable.h b/indra/llcommon/llstringtable.h index 59d7372ed4..787a046741 100644 --- a/indra/llcommon/llstringtable.h +++ b/indra/llcommon/llstringtable.h @@ -1,217 +1,209 @@ -/**  - * @file llstringtable.h - * @brief The LLStringTable class provides a _fast_ method for finding - * unique copies of strings. - * - * $LicenseInfo:firstyear=2001&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#ifndef LL_STRING_TABLE_H -#define LL_STRING_TABLE_H - -#include "lldefs.h" -#include "llformat.h" -#include "llstl.h" -#include <list> -#include <set> - -#if LL_WINDOWS -# if (_MSC_VER >= 1300 && _MSC_VER < 1400) -#  define STRING_TABLE_HASH_MAP 1 -# endif -#else -//# define STRING_TABLE_HASH_MAP 1 -#endif - -#if STRING_TABLE_HASH_MAP -# if LL_WINDOWS -#  include <hash_map> -# else -#  include <ext/hash_map> -# endif -#endif - -const U32 MAX_STRINGS_LENGTH = 256; - -class LL_COMMON_API LLStringTableEntry -{ -public: -	LLStringTableEntry(const char *str); -	~LLStringTableEntry(); - -	void incCount()		{ mCount++; } -	BOOL decCount()		{ return --mCount; } - -	char *mString; -	S32  mCount; -}; - -class LL_COMMON_API LLStringTable -{ -public: -	LLStringTable(int tablesize); -	~LLStringTable(); - -	char *checkString(const char *str); -	char *checkString(const std::string& str); -	LLStringTableEntry *checkStringEntry(const char *str); -	LLStringTableEntry *checkStringEntry(const std::string& str); - -	char *addString(const char *str); -	char *addString(const std::string& str); -	LLStringTableEntry *addStringEntry(const char *str); -	LLStringTableEntry *addStringEntry(const std::string& str); -	void  removeString(const char *str); - -	S32 mMaxEntries; -	S32 mUniqueEntries; -	 -#if STRING_TABLE_HASH_MAP -#if LL_WINDOWS -	typedef std::hash_multimap<U32, LLStringTableEntry *> string_hash_t; -#else -	typedef __gnu_cxx::hash_multimap<U32, LLStringTableEntry *> string_hash_t; -#endif -	string_hash_t mStringHash; -#else -	typedef std::list<LLStringTableEntry *> string_list_t; -	typedef string_list_t * string_list_ptr_t; -	string_list_ptr_t	*mStringList; -#endif	 -}; - -extern LL_COMMON_API LLStringTable gStringTable; - -//============================================================================ - -// This class is designed to be used locally, -// e.g. as a member of an LLXmlTree -// Strings can be inserted only, then quickly looked up - -typedef const std::string* LLStdStringHandle; - -class LL_COMMON_API LLStdStringTable -{ -public: -	LLStdStringTable(S32 tablesize = 0) -	{ -		if (tablesize == 0) -		{ -			tablesize = 256; // default -		} -		// Make sure tablesize is power of 2 -		for (S32 i = 31; i>0; i--) -		{ -			if (tablesize & (1<<i)) -			{ -				if (tablesize >= (3<<(i-1))) -					tablesize = (1<<(i+1)); -				else -					tablesize = (1<<i); -				break; -			} -		} -		mTableSize = tablesize; -		mStringList = new string_set_t[tablesize]; -	} -	~LLStdStringTable() -	{ -		cleanup(); -		delete[] mStringList; -	} -	void cleanup() -	{ -		// remove strings -		for (S32 i = 0; i<mTableSize; i++) -		{ -			string_set_t& stringset = mStringList[i]; -			for (string_set_t::iterator iter = stringset.begin(); iter != stringset.end(); iter++) -			{ -				delete *iter; -			} -			stringset.clear(); -		} -	} - -	LLStdStringHandle lookup(const std::string& s) -	{ -		U32 hashval = makehash(s); -		return lookup(hashval, s); -	} -	 -	LLStdStringHandle checkString(const std::string& s) -	{ -		U32 hashval = makehash(s); -		return lookup(hashval, s); -	} - -	LLStdStringHandle insert(const std::string& s) -	{ -		U32 hashval = makehash(s); -		LLStdStringHandle result = lookup(hashval, s); -		if (result == NULL) -		{ -			result = new std::string(s); -			mStringList[hashval].insert(result); -		} -		return result; -	} -	LLStdStringHandle addString(const std::string& s) -	{ -		return insert(s); -	} -	 -private: -	U32 makehash(const std::string& s) -	{ -		S32 len = (S32)s.size(); -		const char* c = s.c_str(); -		U32 hashval = 0; -		for (S32 i=0; i<len; i++) -		{ -			hashval = ((hashval<<5) + hashval) + *c++; -		} -		return hashval & (mTableSize-1); -	} -	LLStdStringHandle lookup(U32 hashval, const std::string& s) -	{ -		string_set_t& stringset = mStringList[hashval]; -		LLStdStringHandle handle = &s; -		string_set_t::iterator iter = stringset.find(handle); // compares actual strings -		if (iter != stringset.end()) -		{ -			return *iter; -		} -		else -		{ -			return NULL; -		} -	} -	 -private: -	S32 mTableSize; -	typedef std::set<LLStdStringHandle, compare_pointer_contents<std::string> > string_set_t; -	string_set_t* mStringList; // [mTableSize] -}; - - -#endif +/** 
 + * @file llstringtable.h
 + * @brief The LLStringTable class provides a _fast_ method for finding
 + * unique copies of strings.
 + *
 + * $LicenseInfo:firstyear=2001&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2010, Linden Research, Inc.
 + * 
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + * 
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + * 
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + * 
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +#ifndef LL_STRING_TABLE_H
 +#define LL_STRING_TABLE_H
 +
 +#include "lldefs.h"
 +#include "llformat.h"
 +#include "llstl.h"
 +#include <list>
 +#include <set>
 +
 +#if LL_WINDOWS
 +# if (_MSC_VER >= 1300 && _MSC_VER < 1400)
 +#  define STRING_TABLE_HASH_MAP 1
 +# endif
 +#else
 +//# define STRING_TABLE_HASH_MAP 1
 +#endif
 +
 +const U32 MAX_STRINGS_LENGTH = 256;
 +
 +class LL_COMMON_API LLStringTableEntry
 +{
 +public:
 +	LLStringTableEntry(const char *str);
 +	~LLStringTableEntry();
 +
 +	void incCount()		{ mCount++; }
 +	BOOL decCount()		{ return --mCount; }
 +
 +	char *mString;
 +	S32  mCount;
 +};
 +
 +class LL_COMMON_API LLStringTable
 +{
 +public:
 +	LLStringTable(int tablesize);
 +	~LLStringTable();
 +
 +	char *checkString(const char *str);
 +	char *checkString(const std::string& str);
 +	LLStringTableEntry *checkStringEntry(const char *str);
 +	LLStringTableEntry *checkStringEntry(const std::string& str);
 +
 +	char *addString(const char *str);
 +	char *addString(const std::string& str);
 +	LLStringTableEntry *addStringEntry(const char *str);
 +	LLStringTableEntry *addStringEntry(const std::string& str);
 +	void  removeString(const char *str);
 +
 +	S32 mMaxEntries;
 +	S32 mUniqueEntries;
 +	
 +#if STRING_TABLE_HASH_MAP
 +#if LL_WINDOWS
 +	typedef std::hash_multimap<U32, LLStringTableEntry *> string_hash_t;
 +#else
 +	typedef __gnu_cxx::hash_multimap<U32, LLStringTableEntry *> string_hash_t;
 +#endif
 +	string_hash_t mStringHash;
 +#else
 +	typedef std::list<LLStringTableEntry *> string_list_t;
 +	typedef string_list_t * string_list_ptr_t;
 +	string_list_ptr_t	*mStringList;
 +#endif	
 +};
 +
 +extern LL_COMMON_API LLStringTable gStringTable;
 +
 +//============================================================================
 +
 +// This class is designed to be used locally,
 +// e.g. as a member of an LLXmlTree
 +// Strings can be inserted only, then quickly looked up
 +
 +typedef const std::string* LLStdStringHandle;
 +
 +class LL_COMMON_API LLStdStringTable
 +{
 +public:
 +	LLStdStringTable(S32 tablesize = 0)
 +	{
 +		if (tablesize == 0)
 +		{
 +			tablesize = 256; // default
 +		}
 +		// Make sure tablesize is power of 2
 +		for (S32 i = 31; i>0; i--)
 +		{
 +			if (tablesize & (1<<i))
 +			{
 +				if (tablesize >= (3<<(i-1)))
 +					tablesize = (1<<(i+1));
 +				else
 +					tablesize = (1<<i);
 +				break;
 +			}
 +		}
 +		mTableSize = tablesize;
 +		mStringList = new string_set_t[tablesize];
 +	}
 +	~LLStdStringTable()
 +	{
 +		cleanup();
 +		delete[] mStringList;
 +	}
 +	void cleanup()
 +	{
 +		// remove strings
 +		for (S32 i = 0; i<mTableSize; i++)
 +		{
 +			string_set_t& stringset = mStringList[i];
 +			for (string_set_t::iterator iter = stringset.begin(); iter != stringset.end(); iter++)
 +			{
 +				delete *iter;
 +			}
 +			stringset.clear();
 +		}
 +	}
 +
 +	LLStdStringHandle lookup(const std::string& s)
 +	{
 +		U32 hashval = makehash(s);
 +		return lookup(hashval, s);
 +	}
 +	
 +	LLStdStringHandle checkString(const std::string& s)
 +	{
 +		U32 hashval = makehash(s);
 +		return lookup(hashval, s);
 +	}
 +
 +	LLStdStringHandle insert(const std::string& s)
 +	{
 +		U32 hashval = makehash(s);
 +		LLStdStringHandle result = lookup(hashval, s);
 +		if (result == NULL)
 +		{
 +			result = new std::string(s);
 +			mStringList[hashval].insert(result);
 +		}
 +		return result;
 +	}
 +	LLStdStringHandle addString(const std::string& s)
 +	{
 +		return insert(s);
 +	}
 +	
 +private:
 +	U32 makehash(const std::string& s)
 +	{
 +		S32 len = (S32)s.size();
 +		const char* c = s.c_str();
 +		U32 hashval = 0;
 +		for (S32 i=0; i<len; i++)
 +		{
 +			hashval = ((hashval<<5) + hashval) + *c++;
 +		}
 +		return hashval & (mTableSize-1);
 +	}
 +	LLStdStringHandle lookup(U32 hashval, const std::string& s)
 +	{
 +		string_set_t& stringset = mStringList[hashval];
 +		LLStdStringHandle handle = &s;
 +		string_set_t::iterator iter = stringset.find(handle); // compares actual strings
 +		if (iter != stringset.end())
 +		{
 +			return *iter;
 +		}
 +		else
 +		{
 +			return NULL;
 +		}
 +	}
 +	
 +private:
 +	S32 mTableSize;
 +	typedef std::set<LLStdStringHandle, compare_pointer_contents<std::string> > string_set_t;
 +	string_set_t* mStringList; // [mTableSize]
 +};
 +
 +
 +#endif
 diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 1d56a52c32..6c117f7daf 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -495,15 +495,7 @@ LLThreadSafeRefCount::LLThreadSafeRefCount() :  LLThreadSafeRefCount::LLThreadSafeRefCount(const LLThreadSafeRefCount& src)  { -	if (sMutex) -	{ -		sMutex->lock(); -	}  	mRef = 0; -	if (sMutex) -	{ -		sMutex->unlock(); -	}  }  LLThreadSafeRefCount::~LLThreadSafeRefCount() diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h index 5c8bbca2ca..0d22bc863d 100644 --- a/indra/llcommon/llthread.h +++ b/indra/llcommon/llthread.h @@ -241,47 +241,43 @@ public:  	LLThreadSafeRefCount(const LLThreadSafeRefCount&);  	LLThreadSafeRefCount& operator=(const LLThreadSafeRefCount& ref)   	{ -		if (sMutex) -		{ -			sMutex->lock(); -		}  		mRef = 0; -		if (sMutex) -		{ -			sMutex->unlock(); -		}  		return *this;  	} - -	  	void ref()  	{ -		if (sMutex) sMutex->lock();  		mRef++;  -		if (sMutex) sMutex->unlock();  	}   	S32 unref()  	{ -		llassert(mRef >= 1); -		if (sMutex) sMutex->lock(); -		S32 res = --mRef; -		if (sMutex) sMutex->unlock(); -		if (0 == res)  +		llassert(mRef >= 1);		 +		bool time_to_die = (mRef == 1);		 +		if (time_to_die)  		{ -			delete this;  +			if (sMutex) sMutex->lock(); +			// Looks redundant, but is very much not +			// We need to check again once we've acquired the lock +			// so that two threads who get into the if in parallel +			// don't both attempt to the delete. +			// +			mRef--; +			if (mRef == 0) +				delete this; 			 +			if (sMutex) sMutex->unlock();  			return 0;  		} -		return res; -	}	 +		return --mRef;		 +	}  	S32 getNumRefs() const  	{ -		return mRef; +		const S32 currentVal = mRef.CurrentValue(); +		return currentVal;  	}  private:  -	S32	mRef;  +	LLAtomic32< S32	> mRef;   };  //============================================================================ diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp index 454695ff9f..9d5db4b1d9 100644 --- a/indra/llcommon/tests/llinstancetracker_test.cpp +++ b/indra/llcommon/tests/llinstancetracker_test.cpp @@ -48,16 +48,16 @@ struct Badness: public std::runtime_error      Badness(const std::string& what): std::runtime_error(what) {}  }; -struct Keyed: public LLInstanceTracker<Keyed, std::string> +struct Keyed: public INSTANCE_TRACKER_KEYED(Keyed, std::string)  {      Keyed(const std::string& name): -        LLInstanceTracker<Keyed, std::string>(name), +        INSTANCE_TRACKER_KEYED(Keyed, std::string)(name),          mName(name)      {}      std::string mName;  }; -struct Unkeyed: public LLInstanceTracker<Unkeyed> +struct Unkeyed: public INSTANCE_TRACKER(Unkeyed)  {      Unkeyed(const std::string& thrw="")      { diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp index 51a8eaf998..469ce75434 100644 --- a/indra/llcorehttp/_httpoprequest.cpp +++ b/indra/llcorehttp/_httpoprequest.cpp @@ -339,7 +339,6 @@ void HttpOpRequest::setupCommon(HttpRequest::policy_t policy_id,  	}  } -  // Sets all libcurl options and data for a request.  //  // Used both for initial requests and to 'reload' for @@ -381,13 +380,7 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)  	// Get policy options  	HttpPolicyGlobal & policy(service->getPolicy().getGlobalOptions()); -	mCurlHandle = curl_easy_init(); -	curl_easy_setopt(mCurlHandle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); -	curl_easy_setopt(mCurlHandle, CURLOPT_NOSIGNAL, 1); -	curl_easy_setopt(mCurlHandle, CURLOPT_NOPROGRESS, 1); -	curl_easy_setopt(mCurlHandle, CURLOPT_URL, mReqURL.c_str()); -	curl_easy_setopt(mCurlHandle, CURLOPT_PRIVATE, this); -	curl_easy_setopt(mCurlHandle, CURLOPT_ENCODING, ""); +	mCurlHandle = LLCurlHandleHandler::getInstance()->CreateCurlHandle();  	if (HTTP_ENABLE_LINKSYS_WRT54G_V5_DNS_FIX)  	{ @@ -399,23 +392,14 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)  		// seconds and no RSTs.  		curl_easy_setopt(mCurlHandle, CURLOPT_DNS_CACHE_TIMEOUT, 15);  	} -	else -	{ -		// *TODO:  Revisit this old DNS timeout setting - may no longer be valid -		// I don't think this is valid anymore, the Multi shared DNS -		// cache is working well.  For the case of naked easy handles, -		// consider using a shared DNS object. -		curl_easy_setopt(mCurlHandle, CURLOPT_DNS_CACHE_TIMEOUT, 0); -	} -	curl_easy_setopt(mCurlHandle, CURLOPT_AUTOREFERER, 1); -	curl_easy_setopt(mCurlHandle, CURLOPT_FOLLOWLOCATION, 1); -	curl_easy_setopt(mCurlHandle, CURLOPT_MAXREDIRS, HTTP_REDIRECTS_DEFAULT); +  	curl_easy_setopt(mCurlHandle, CURLOPT_WRITEFUNCTION, writeCallback); -	curl_easy_setopt(mCurlHandle, CURLOPT_WRITEDATA, this); -	curl_easy_setopt(mCurlHandle, CURLOPT_READFUNCTION, readCallback); +	curl_easy_setopt(mCurlHandle, CURLOPT_READFUNCTION,  readCallback);	  	curl_easy_setopt(mCurlHandle, CURLOPT_READDATA, this); -	curl_easy_setopt(mCurlHandle, CURLOPT_SSL_VERIFYPEER, 1); -	curl_easy_setopt(mCurlHandle, CURLOPT_SSL_VERIFYHOST, 0); +	curl_easy_setopt(mCurlHandle, CURLOPT_WRITEDATA, this); +	curl_easy_setopt(mCurlHandle, CURLOPT_URL, mReqURL.c_str()); +	curl_easy_setopt(mCurlHandle, CURLOPT_PRIVATE, this); +	curl_easy_setopt(mCurlHandle, CURLOPT_MAXREDIRS, HTTP_REDIRECTS_DEFAULT);	  	const std::string * opt_value(NULL);  	long opt_long(0L); diff --git a/indra/llcorehttp/_httpoprequest.h b/indra/llcorehttp/_httpoprequest.h index 7b65d17783..e819f74079 100644 --- a/indra/llcorehttp/_httpoprequest.h +++ b/indra/llcorehttp/_httpoprequest.h @@ -29,6 +29,7 @@  #include "linden_common.h"		// Modifies curl/curl.h interfaces +#include "llsingleton.h"  #include <string>  #include <curl/curl.h> @@ -60,12 +61,13 @@ class HttpOptions;  /// the information needed to make a working request which can  /// then be enqueued to a request queue.  /// -  class HttpOpRequest : public HttpOperation  {  public:  	HttpOpRequest(); +	friend class CurlHandleHandler; +  protected:  	virtual ~HttpOpRequest();							// Use release() diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index d614695efb..f989e8ed17 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5291,6 +5291,8 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src)  		LLVector4a::memcpyNonAliased16((F32*) mIndices, (F32*) src.mIndices, idx_size);  	} +	mOptimized = src.mOptimized; +  	//delete   	return *this;  } diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 6da153279c..5b9965680d 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -1813,10 +1813,10 @@ CURL*  LLCurl::newEasyHandle()  	}  	sTotalHandles++; -	CURL* ret = curl_easy_init() ; +	CURL* ret = LLCurlHandleHandler::getInstance()->CreateCurlHandle();  	if(!ret)  	{ -		llwarns << "curl_easy_init failed." << llendl ; +		llwarns << "failed to create curl handle." << llendl ;  	}  	return ret ; @@ -1846,3 +1846,24 @@ void LLCurlFF::check_multi_code(CURLMcode code)  {  	check_curl_multi_code(code);  } + +CURL* LLCurlHandleHandler::the_one_true_curl_handle; + +LLCurlHandleHandler::LLCurlHandleHandler() +{ +	the_one_true_curl_handle = curl_easy_init(); +	curl_easy_setopt(the_one_true_curl_handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); +	curl_easy_setopt(the_one_true_curl_handle, CURLOPT_NOSIGNAL, 1); +	curl_easy_setopt(the_one_true_curl_handle, CURLOPT_NOPROGRESS, 1); +	curl_easy_setopt(the_one_true_curl_handle, CURLOPT_ENCODING, "");	 +	curl_easy_setopt(the_one_true_curl_handle, CURLOPT_AUTOREFERER, 1); +	curl_easy_setopt(the_one_true_curl_handle, CURLOPT_FOLLOWLOCATION, 1);	 +	curl_easy_setopt(the_one_true_curl_handle, CURLOPT_SSL_VERIFYPEER, 1); +	curl_easy_setopt(the_one_true_curl_handle, CURLOPT_SSL_VERIFYHOST, 0); +	curl_easy_setopt(the_one_true_curl_handle, CURLOPT_DNS_CACHE_TIMEOUT, 0); +} + +CURL* LLCurlHandleHandler::CreateCurlHandle() +{ +	return curl_easy_duphandle(the_one_true_curl_handle); +} diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h index 7bcf61e233..a03333157c 100644 --- a/indra/llmessage/llcurl.h +++ b/indra/llmessage/llcurl.h @@ -45,7 +45,7 @@  #include "llqueuedthread.h"  #include "llframetimer.h"  #include "llpointer.h" - +#include "llsingleton.h"  class LLMutex;  class LLCurlThread; @@ -53,6 +53,14 @@ class LLCurlThread;  // For whatever reason, this is not typedef'd in curl.h  typedef size_t (*curl_header_callback)(void *ptr, size_t size, size_t nmemb, void *stream); +class LLCurlHandleHandler : public LLSingleton<LLCurlHandleHandler> +{ +public: +	static CURL* the_one_true_curl_handle; +	LLCurlHandleHandler(); +	static CURL* CreateCurlHandle(); +}; +  class LLCurl  {  	LOG_CLASS(LLCurl); diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index 823de9d361..133c2de1f5 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -350,10 +350,10 @@ public:  	Generic pooling scheme for things which use GL names (used for occlusion queries and vertex buffer objects).  	Prevents thrashing of GL name caches by avoiding calls to glGenFoo and glDeleteFoo.  */ -class LLGLNamePool : public LLInstanceTracker<LLGLNamePool> +class LLGLNamePool : public INSTANCE_TRACKER(LLGLNamePool)  {  public: -	typedef LLInstanceTracker<LLGLNamePool> tracker_t; +	typedef INSTANCE_TRACKER(LLGLNamePool) tracker_t;  	struct NameEntry  	{ diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 7cbf39096e..298a03f32a 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -128,8 +128,8 @@ void LLGLSLShader::unload()  	stop_glerror();  } -BOOL LLGLSLShader::createShader(vector<string> * attributes, -								vector<string> * uniforms, +BOOL LLGLSLShader::createShader(std::vector<LLStaticHashedString> * attributes, +								std::vector<LLStaticHashedString> * uniforms,  								U32 varying_count,  								const char** varyings)  { @@ -209,7 +209,8 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,  		for (S32 i = 0; i < channel_count; i++)  		{ -			uniform1i(llformat("tex%d", i), i); +			LLStaticHashedString uniName(llformat("tex%d", i)); +			uniform1i(uniName, i);  		}  		S32 cur_tex = channel_count; //adjust any texture channels that might have been overwritten @@ -266,7 +267,7 @@ void LLGLSLShader::attachObjects(GLhandleARB* objects, S32 count)  	}  } -BOOL LLGLSLShader::mapAttributes(const vector<string> * attributes) +BOOL LLGLSLShader::mapAttributes(const std::vector<LLStaticHashedString> * attributes)  {  	//before linking, make sure reserved attributes always have consistent locations  	for (U32 i = 0; i < LLShaderMgr::instance()->mReservedAttribs.size(); i++) @@ -300,7 +301,7 @@ BOOL LLGLSLShader::mapAttributes(const vector<string> * attributes)  		{  			for (U32 i = 0; i < numAttributes; i++)  			{ -				const char* name = (*attributes)[i].c_str(); +				const char* name = (*attributes)[i].String().c_str();  				S32 index = glGetAttribLocationARB(mProgramObject, name);  				if (index != -1)  				{ @@ -316,7 +317,7 @@ BOOL LLGLSLShader::mapAttributes(const vector<string> * attributes)  	return FALSE;  } -void LLGLSLShader::mapUniform(GLint index, const vector<string> * uniforms) +void LLGLSLShader::mapUniform(GLint index, const vector<LLStaticHashedString> * uniforms)  {  	if (index == -1)  	{ @@ -341,7 +342,8 @@ void LLGLSLShader::mapUniform(GLint index, const vector<string> * uniforms)  			is_array[0] = 0;  		} -		mUniformMap[name] = location; +		LLStaticHashedString hashedName(name); +		mUniformMap[hashedName] = location;  		LL_DEBUGS("ShaderLoading") << "Uniform " << name << " is at location " << location << LL_ENDL;  		//find the index of this uniform @@ -362,7 +364,7 @@ void LLGLSLShader::mapUniform(GLint index, const vector<string> * uniforms)  			for (U32 i = 0; i < uniforms->size(); i++)  			{  				if ( (mUniform[i+LLShaderMgr::instance()->mReservedUniforms.size()] == -1) -					&& ((*uniforms)[i] == name)) +					&& ((*uniforms)[i].String() == name))  				{  					//found it  					mUniform[i+LLShaderMgr::instance()->mReservedUniforms.size()] = location; @@ -386,7 +388,7 @@ GLint LLGLSLShader::mapUniformTextureChannel(GLint location, GLenum type)  	return -1;  } -BOOL LLGLSLShader::mapUniforms(const vector<string> * uniforms) +BOOL LLGLSLShader::mapUniforms(const vector<LLStaticHashedString> * uniforms)  {  	BOOL res = TRUE; @@ -793,18 +795,18 @@ void LLGLSLShader::uniformMatrix4fv(U32 index, U32 count, GLboolean transpose, c  	}  } -GLint LLGLSLShader::getUniformLocation(const string& uniform) +GLint LLGLSLShader::getUniformLocation(const LLStaticHashedString& uniform)  {  	GLint ret = -1;  	if (mProgramObject > 0)  	{ -		std::map<string, GLint>::iterator iter = mUniformMap.find(uniform); +		LLStaticStringTable<GLint>::iterator iter = mUniformMap.find(uniform);  		if (iter != mUniformMap.end())  		{  			if (gDebugGL)  			{  				stop_glerror(); -				if (iter->second != glGetUniformLocationARB(mProgramObject, uniform.c_str())) +				if (iter->second != glGetUniformLocationARB(mProgramObject, uniform.String().c_str()))  				{  					llerrs << "Uniform does not match." << llendl;  				} @@ -841,10 +843,10 @@ GLint LLGLSLShader::getAttribLocation(U32 attrib)  	}  } -void LLGLSLShader::uniform1i(const string& uniform, GLint v) +void LLGLSLShader::uniform1i(const LLStaticHashedString& uniform, GLint v)  {  	GLint location = getUniformLocation(uniform); -				 +  	if (location >= 0)  	{  		std::map<GLint, LLVector4>::iterator iter = mValue.find(location); @@ -857,10 +859,10 @@ void LLGLSLShader::uniform1i(const string& uniform, GLint v)  	}  } -void LLGLSLShader::uniform1f(const string& uniform, GLfloat v) +void LLGLSLShader::uniform1f(const LLStaticHashedString& uniform, GLfloat v)  {  	GLint location = getUniformLocation(uniform); -				 +  	if (location >= 0)  	{  		std::map<GLint, LLVector4>::iterator iter = mValue.find(location); @@ -873,10 +875,10 @@ void LLGLSLShader::uniform1f(const string& uniform, GLfloat v)  	}  } -void LLGLSLShader::uniform2f(const string& uniform, GLfloat x, GLfloat y) +void LLGLSLShader::uniform2f(const LLStaticHashedString& uniform, GLfloat x, GLfloat y)  {  	GLint location = getUniformLocation(uniform); -				 +  	if (location >= 0)  	{  		std::map<GLint, LLVector4>::iterator iter = mValue.find(location); @@ -890,10 +892,10 @@ void LLGLSLShader::uniform2f(const string& uniform, GLfloat x, GLfloat y)  } -void LLGLSLShader::uniform3f(const string& uniform, GLfloat x, GLfloat y, GLfloat z) +void LLGLSLShader::uniform3f(const LLStaticHashedString& uniform, GLfloat x, GLfloat y, GLfloat z)  {  	GLint location = getUniformLocation(uniform); -				 +  	if (location >= 0)  	{  		std::map<GLint, LLVector4>::iterator iter = mValue.find(location); @@ -906,23 +908,7 @@ void LLGLSLShader::uniform3f(const string& uniform, GLfloat x, GLfloat y, GLfloa  	}  } -void LLGLSLShader::uniform4f(const string& uniform, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ -	GLint location = getUniformLocation(uniform); - -	if (location >= 0) -	{ -		std::map<GLint, LLVector4>::iterator iter = mValue.find(location); -		LLVector4 vec(x,y,z,w); -		if (iter == mValue.end() || shouldChange(iter->second,vec)) -		{ -			glUniform4fARB(location, x,y,z,w); -			mValue[location] = vec; -		} -	} -} - -void LLGLSLShader::uniform1fv(const string& uniform, U32 count, const GLfloat* v) +void LLGLSLShader::uniform1fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v)  {  	GLint location = getUniformLocation(uniform); @@ -938,10 +924,10 @@ void LLGLSLShader::uniform1fv(const string& uniform, U32 count, const GLfloat* v  	}  } -void LLGLSLShader::uniform2fv(const string& uniform, U32 count, const GLfloat* v) +void LLGLSLShader::uniform2fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v)  {  	GLint location = getUniformLocation(uniform); -				 +  	if (location >= 0)  	{  		std::map<GLint, LLVector4>::iterator iter = mValue.find(location); @@ -954,10 +940,10 @@ void LLGLSLShader::uniform2fv(const string& uniform, U32 count, const GLfloat* v  	}  } -void LLGLSLShader::uniform3fv(const string& uniform, U32 count, const GLfloat* v) +void LLGLSLShader::uniform3fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v)  {  	GLint location = getUniformLocation(uniform); -				 +  	if (location >= 0)  	{  		std::map<GLint, LLVector4>::iterator iter = mValue.find(location); @@ -970,7 +956,7 @@ void LLGLSLShader::uniform3fv(const string& uniform, U32 count, const GLfloat* v  	}  } -void LLGLSLShader::uniform4fv(const string& uniform, U32 count, const GLfloat* v) +void LLGLSLShader::uniform4fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v)  {  	GLint location = getUniformLocation(uniform); @@ -988,27 +974,7 @@ void LLGLSLShader::uniform4fv(const string& uniform, U32 count, const GLfloat* v  	}  } -void LLGLSLShader::uniformMatrix2fv(const string& uniform, U32 count, GLboolean transpose, const GLfloat* v) -{ -	GLint location = getUniformLocation(uniform); -				 -	if (location >= 0) -	{ -		glUniformMatrix2fvARB(location, count, transpose, v); -	} -} - -void LLGLSLShader::uniformMatrix3fv(const string& uniform, U32 count, GLboolean transpose, const GLfloat* v) -{ -	GLint location = getUniformLocation(uniform); -				 -	if (location >= 0) -	{ -		glUniformMatrix3fvARB(location, count, transpose, v); -	} -} - -void LLGLSLShader::uniformMatrix4fv(const string& uniform, U32 count, GLboolean transpose, const GLfloat* v) +void LLGLSLShader::uniformMatrix4fv(const LLStaticHashedString& uniform, U32 count, GLboolean transpose, const GLfloat* v)  {  	GLint location = getUniformLocation(uniform); diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index 5c68cb46eb..619c3559ea 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -29,6 +29,7 @@  #include "llgl.h"  #include "llrender.h" +#include "llstaticstringtable.h"  class LLShaderFeatures  { @@ -75,16 +76,16 @@ public:  	static bool sNoFixedFunction;  	void unload(); -	BOOL createShader(std::vector<std::string> * attributes, -						std::vector<std::string> * uniforms, +	BOOL createShader(std::vector<LLStaticHashedString> * attributes, +						std::vector<LLStaticHashedString> * uniforms,  						U32 varying_count = 0,  						const char** varyings = NULL);  	BOOL attachObject(std::string object);  	void attachObject(GLhandleARB object);  	void attachObjects(GLhandleARB* objects = NULL, S32 count = 0); -	BOOL mapAttributes(const std::vector<std::string> * attributes); -	BOOL mapUniforms(const std::vector<std::string> * uniforms); -	void mapUniform(GLint index, const std::vector<std::string> * uniforms); +	BOOL mapAttributes(const std::vector<LLStaticHashedString> * attributes); +	BOOL mapUniforms(const std::vector<LLStaticHashedString> *); +	void mapUniform(GLint index, const std::vector<LLStaticHashedString> *);  	void uniform1i(U32 index, GLint i);  	void uniform1f(U32 index, GLfloat v);  	void uniform2f(U32 index, GLfloat x, GLfloat y); @@ -95,29 +96,26 @@ public:  	void uniform2fv(U32 index, U32 count, const GLfloat* v);  	void uniform3fv(U32 index, U32 count, const GLfloat* v);  	void uniform4fv(U32 index, U32 count, const GLfloat* v); -	void uniform1i(const std::string& uniform, GLint i); -	void uniform1f(const std::string& uniform, GLfloat v); -	void uniform2f(const std::string& uniform, GLfloat x, GLfloat y); -	void uniform3f(const std::string& uniform, GLfloat x, GLfloat y, GLfloat z); -	void uniform4f(const std::string& uniform, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -	void uniform1iv(const std::string& uniform, U32 count, const GLint* i); -	void uniform1fv(const std::string& uniform, U32 count, const GLfloat* v); -	void uniform2fv(const std::string& uniform, U32 count, const GLfloat* v); -	void uniform3fv(const std::string& uniform, U32 count, const GLfloat* v); -	void uniform4fv(const std::string& uniform, U32 count, const GLfloat* v);  	void uniformMatrix2fv(U32 index, U32 count, GLboolean transpose, const GLfloat *v);  	void uniformMatrix3fv(U32 index, U32 count, GLboolean transpose, const GLfloat *v);  	void uniformMatrix4fv(U32 index, U32 count, GLboolean transpose, const GLfloat *v); -	void uniformMatrix2fv(const std::string& uniform, U32 count, GLboolean transpose, const GLfloat *v); -	void uniformMatrix3fv(const std::string& uniform, U32 count, GLboolean transpose, const GLfloat *v); -	void uniformMatrix4fv(const std::string& uniform, U32 count, GLboolean transpose, const GLfloat *v); +	void uniform1i(const LLStaticHashedString& uniform, GLint i); +	void uniform1f(const LLStaticHashedString& uniform, GLfloat v); +	void uniform2f(const LLStaticHashedString& uniform, GLfloat x, GLfloat y); +	void uniform3f(const LLStaticHashedString& uniform, GLfloat x, GLfloat y, GLfloat z); +	void uniform1fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v); +	void uniform2fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v); +	void uniform3fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v); +	void uniform4fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v); +	void uniformMatrix4fv(const LLStaticHashedString& uniform, U32 count, GLboolean transpose, const GLfloat *v);  	void setMinimumAlpha(F32 minimum);  	void vertexAttrib4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);  	void vertexAttrib4fv(U32 index, GLfloat* v); -	GLint getUniformLocation(const std::string& uniform); +	//GLint getUniformLocation(const std::string& uniform); +	GLint getUniformLocation(const LLStaticHashedString& uniform);	  	GLint getUniformLocation(U32 index);  	GLint getAttribLocation(U32 attrib); @@ -143,7 +141,7 @@ public:  	GLhandleARB mProgramObject;  	std::vector<GLint> mAttribute; //lookup table of attribute enum to attribute channel  	std::vector<GLint> mUniform;   //lookup table of uniform enum to uniform location -	std::map<std::string, GLint> mUniformMap;  //lookup map of uniform name to uniform location +	LLStaticStringTable<GLint> mUniformMap; //lookup map of uniform name to uniform location  	std::map<GLint, LLVector4> mValue; //lookup map of uniform location to last known value  	std::vector<GLint> mTexture;  	S32 mActiveTextureChannels; diff --git a/indra/llrender/llpostprocess.cpp b/indra/llrender/llpostprocess.cpp index c0045c8044..4c36185b08 100644 --- a/indra/llrender/llpostprocess.cpp +++ b/indra/llrender/llpostprocess.cpp @@ -31,6 +31,21 @@  #include "llsdserialize.h"  #include "llrender.h" +static LLStaticHashedString sRenderTexture("RenderTexture"); +static LLStaticHashedString sBrightness("brightness"); +static LLStaticHashedString sContrast("contrast"); +static LLStaticHashedString sContrastBase("contrastBase"); +static LLStaticHashedString sSaturation("saturation"); +static LLStaticHashedString sLumWeights("lumWeights"); +static LLStaticHashedString sNoiseTexture("NoiseTexture"); +static LLStaticHashedString sBrightMult("brightMult"); +static LLStaticHashedString sNoiseStrength("noiseStrength"); +static LLStaticHashedString sExtractLow("extractLow"); +static LLStaticHashedString sExtractHigh("extractHigh"); +static LLStaticHashedString sBloomStrength("bloomStrength"); +static LLStaticHashedString sTexelSize("texelSize"); +static LLStaticHashedString sBlurDirection("blurDirection"); +static LLStaticHashedString sBlurWidth("blurWidth");  LLPostProcess * gPostProcess = NULL; @@ -258,12 +273,12 @@ void LLPostProcess::applyColorFilterShader(void)  void LLPostProcess::createColorFilterShader(void)  {  	/// Define uniform names -	colorFilterUniforms["RenderTexture"] = 0; -	colorFilterUniforms["brightness"] = 0; -	colorFilterUniforms["contrast"] = 0; -	colorFilterUniforms["contrastBase"] = 0; -	colorFilterUniforms["saturation"] = 0; -	colorFilterUniforms["lumWeights"] = 0; +	colorFilterUniforms[sRenderTexture] = 0; +	colorFilterUniforms[sBrightness] = 0; +	colorFilterUniforms[sContrast] = 0; +	colorFilterUniforms[sContrastBase] = 0; +	colorFilterUniforms[sSaturation] = 0; +	colorFilterUniforms[sLumWeights] = 0;  }  void LLPostProcess::applyNightVisionShader(void) @@ -307,11 +322,11 @@ void LLPostProcess::applyNightVisionShader(void)  void LLPostProcess::createNightVisionShader(void)  {  	/// Define uniform names -	nightVisionUniforms["RenderTexture"] = 0; -	nightVisionUniforms["NoiseTexture"] = 0; -	nightVisionUniforms["brightMult"] = 0;	 -	nightVisionUniforms["noiseStrength"] = 0; -	nightVisionUniforms["lumWeights"] = 0;	 +	nightVisionUniforms[sRenderTexture] = 0; +	nightVisionUniforms[sNoiseTexture] = 0; +	nightVisionUniforms[sBrightMult] = 0;	 +	nightVisionUniforms[sNoiseStrength] = 0; +	nightVisionUniforms[sLumWeights] = 0;	  	createNoiseTexture(mNoiseTexture);  } @@ -326,25 +341,25 @@ void LLPostProcess::createBloomShader(void)  	createTexture(mTempBloomTexture, unsigned(screenW * 0.5), unsigned(screenH * 0.5));  	/// Create Bloom Extract Shader -	bloomExtractUniforms["RenderTexture"] = 0; -	bloomExtractUniforms["extractLow"] = 0; -	bloomExtractUniforms["extractHigh"] = 0;	 -	bloomExtractUniforms["lumWeights"] = 0;	 +	bloomExtractUniforms[sRenderTexture] = 0; +	bloomExtractUniforms[sExtractLow] = 0; +	bloomExtractUniforms[sExtractHigh] = 0;	 +	bloomExtractUniforms[sLumWeights] = 0;	  	/// Create Bloom Blur Shader -	bloomBlurUniforms["RenderTexture"] = 0; -	bloomBlurUniforms["bloomStrength"] = 0;	 -	bloomBlurUniforms["texelSize"] = 0; -	bloomBlurUniforms["blurDirection"] = 0; -	bloomBlurUniforms["blurWidth"] = 0; +	bloomBlurUniforms[sRenderTexture] = 0; +	bloomBlurUniforms[sBloomStrength] = 0;	 +	bloomBlurUniforms[sTexelSize] = 0; +	bloomBlurUniforms[sBlurDirection] = 0; +	bloomBlurUniforms[sBlurWidth] = 0;  }  void LLPostProcess::getShaderUniforms(glslUniforms & uniforms, GLhandleARB & prog)  {  	/// Find uniform locations and insert into map	 -	std::map<const char *, GLuint>::iterator i; +	glslUniforms::iterator i;  	for (i  = uniforms.begin(); i != uniforms.end(); ++i){ -		i->second = glGetUniformLocationARB(prog, i->first); +		i->second = glGetUniformLocationARB(prog, i->first.String().c_str());  	}  } diff --git a/indra/llrender/llpostprocess.h b/indra/llrender/llpostprocess.h index e19de44c60..6894505753 100644 --- a/indra/llrender/llpostprocess.h +++ b/indra/llrender/llpostprocess.h @@ -1,266 +1,267 @@ -/**  - * @file llpostprocess.h - * @brief LLPostProcess class definition - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#ifndef LL_POSTPROCESS_H -#define LL_POSTPROCESS_H - -#include <map> -#include <fstream> -#include "llgl.h" -#include "llglheaders.h" - -class LLPostProcess  -{ -public: - -	typedef enum _QuadType { -		QUAD_NORMAL, -		QUAD_NOISE, -		QUAD_BLOOM_EXTRACT, -		QUAD_BLOOM_COMBINE -	} QuadType; - -	/// GLSL Shader Encapsulation Struct -	typedef std::map<const char *, GLuint> glslUniforms; - -	struct PostProcessTweaks : public LLSD { -		inline PostProcessTweaks() : LLSD(LLSD::emptyMap()) -		{ -		} - -		inline LLSD & brightMult() { -			return (*this)["brightness_multiplier"]; -		} - -		inline LLSD & noiseStrength() { -			return (*this)["noise_strength"]; -		} - -		inline LLSD & noiseSize() { -			return (*this)["noise_size"]; -		} - -		inline LLSD & extractLow() { -			return (*this)["extract_low"]; -		} - -		inline LLSD & extractHigh() { -			return (*this)["extract_high"]; -		} - -		inline LLSD & bloomWidth() { -			return (*this)["bloom_width"]; -		} - -		inline LLSD & bloomStrength() { -			return (*this)["bloom_strength"]; -		} - -		inline LLSD & brightness() { -			return (*this)["brightness"]; -		} - -		inline LLSD & contrast() { -			return (*this)["contrast"]; -		} - -		inline LLSD & contrastBaseR() { -			return (*this)["contrast_base"][0]; -		} - -		inline LLSD & contrastBaseG() { -			return (*this)["contrast_base"][1]; -		} - -		inline LLSD & contrastBaseB() { -			return (*this)["contrast_base"][2]; -		} - -		inline LLSD & contrastBaseIntensity() { -			return (*this)["contrast_base"][3]; -		} - -		inline LLSD & saturation() { -			return (*this)["saturation"]; -		} - -		inline LLSD & useNightVisionShader() { -			return (*this)["enable_night_vision"]; -		} - -		inline LLSD & useBloomShader() { -			return (*this)["enable_bloom"]; -		} - -		inline LLSD & useColorFilter() { -			return (*this)["enable_color_filter"]; -		} - - -		inline F32 getBrightMult() const { -			return F32((*this)["brightness_multiplier"].asReal()); -		} - -		inline F32 getNoiseStrength() const { -			return F32((*this)["noise_strength"].asReal()); -		} - -		inline F32 getNoiseSize() const { -			return F32((*this)["noise_size"].asReal()); -		} - -		inline F32 getExtractLow() const { -			return F32((*this)["extract_low"].asReal()); -		} - -		inline F32 getExtractHigh() const { -			return F32((*this)["extract_high"].asReal()); -		} - -		inline F32 getBloomWidth() const { -			return F32((*this)["bloom_width"].asReal()); -		} - -		inline F32 getBloomStrength() const { -			return F32((*this)["bloom_strength"].asReal()); -		} - -		inline F32 getBrightness() const { -			return F32((*this)["brightness"].asReal()); -		} - -		inline F32 getContrast() const { -			return F32((*this)["contrast"].asReal()); -		} - -		inline F32 getContrastBaseR() const { -			return F32((*this)["contrast_base"][0].asReal()); -		} - -		inline F32 getContrastBaseG() const { -			return F32((*this)["contrast_base"][1].asReal()); -		} - -		inline F32 getContrastBaseB() const { -			return F32((*this)["contrast_base"][2].asReal()); -		} - -		inline F32 getContrastBaseIntensity() const { -			return F32((*this)["contrast_base"][3].asReal()); -		} - -		inline F32 getSaturation() const { -			return F32((*this)["saturation"].asReal()); -		} - -	}; -	 -	bool initialized; -	PostProcessTweaks tweaks; - -	// the map of all availible effects -	LLSD mAllEffects; - -private: -	LLPointer<LLImageGL> mSceneRenderTexture ; -	LLPointer<LLImageGL> mNoiseTexture ; -	LLPointer<LLImageGL> mTempBloomTexture ; - -public: -	LLPostProcess(void); - -	~LLPostProcess(void); - -	void apply(unsigned int width, unsigned int height); -	void invalidate() ; - -	/// Perform global initialization for this class. -	static void initClass(void); - -	// Cleanup of global data that's only inited once per class. -	static void cleanupClass(); - -	void setSelectedEffect(std::string const & effectName); - -	inline std::string const & getSelectedEffect(void) const { -		return mSelectedEffectName; -	} - -	void saveEffect(std::string const & effectName); - -private: -		/// read in from file -	std::string mShaderErrorString; -	unsigned int screenW; -	unsigned int screenH; - -	float noiseTextureScale; -	 -	/// Shader Uniforms -	glslUniforms nightVisionUniforms; -	glslUniforms bloomExtractUniforms; -	glslUniforms bloomBlurUniforms; -	glslUniforms colorFilterUniforms; - -	// the name of currently selected effect in mAllEffects -	// invariant: tweaks == mAllEffects[mSelectedEffectName] -	std::string mSelectedEffectName; - -	/// General functions -	void initialize(unsigned int width, unsigned int height); -	void doEffects(void); -	void applyShaders(void); -	bool shadersEnabled(void); - -	/// Night Vision Functions -	void createNightVisionShader(void); -	void applyNightVisionShader(void); - -	/// Bloom Functions -	void createBloomShader(void); -	void applyBloomShader(void); - -	/// Color Filter Functions -	void createColorFilterShader(void); -	void applyColorFilterShader(void); - -	/// OpenGL Helper Functions -	void getShaderUniforms(glslUniforms & uniforms, GLhandleARB & prog); -	void createTexture(LLPointer<LLImageGL>& texture, unsigned int width, unsigned int height); -	void copyFrameBuffer(U32 & texture, unsigned int width, unsigned int height); -	void createNoiseTexture(LLPointer<LLImageGL>& texture); -	bool checkError(void); -	void checkShaderError(GLhandleARB shader); -	void drawOrthoQuad(unsigned int width, unsigned int height, QuadType type); -	void viewOrthogonal(unsigned int width, unsigned int height); -	void changeOrthogonal(unsigned int width, unsigned int height); -	void viewPerspective(void); -}; - -extern LLPostProcess * gPostProcess; - - -#endif // LL_POSTPROCESS_H +/** 
 + * @file llpostprocess.h
 + * @brief LLPostProcess class definition
 + *
 + * $LicenseInfo:firstyear=2007&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2010, Linden Research, Inc.
 + * 
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + * 
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + * 
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + * 
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +#ifndef LL_POSTPROCESS_H
 +#define LL_POSTPROCESS_H
 +
 +#include <map>
 +#include <fstream>
 +#include "llgl.h"
 +#include "llglheaders.h"
 +#include "llstaticstringtable.h"
 +
 +class LLPostProcess 
 +{
 +public:
 +
 +	typedef enum _QuadType {
 +		QUAD_NORMAL,
 +		QUAD_NOISE,
 +		QUAD_BLOOM_EXTRACT,
 +		QUAD_BLOOM_COMBINE
 +	} QuadType;
 +
 +	/// GLSL Shader Encapsulation Struct
 +	typedef LLStaticStringTable<GLuint> glslUniforms;
 +
 +	struct PostProcessTweaks : public LLSD {
 +		inline PostProcessTweaks() : LLSD(LLSD::emptyMap())
 +		{
 +		}
 +
 +		inline LLSD & brightMult() {
 +			return (*this)["brightness_multiplier"];
 +		}
 +
 +		inline LLSD & noiseStrength() {
 +			return (*this)["noise_strength"];
 +		}
 +
 +		inline LLSD & noiseSize() {
 +			return (*this)["noise_size"];
 +		}
 +
 +		inline LLSD & extractLow() {
 +			return (*this)["extract_low"];
 +		}
 +
 +		inline LLSD & extractHigh() {
 +			return (*this)["extract_high"];
 +		}
 +
 +		inline LLSD & bloomWidth() {
 +			return (*this)["bloom_width"];
 +		}
 +
 +		inline LLSD & bloomStrength() {
 +			return (*this)["bloom_strength"];
 +		}
 +
 +		inline LLSD & brightness() {
 +			return (*this)["brightness"];
 +		}
 +
 +		inline LLSD & contrast() {
 +			return (*this)["contrast"];
 +		}
 +
 +		inline LLSD & contrastBaseR() {
 +			return (*this)["contrast_base"][0];
 +		}
 +
 +		inline LLSD & contrastBaseG() {
 +			return (*this)["contrast_base"][1];
 +		}
 +
 +		inline LLSD & contrastBaseB() {
 +			return (*this)["contrast_base"][2];
 +		}
 +
 +		inline LLSD & contrastBaseIntensity() {
 +			return (*this)["contrast_base"][3];
 +		}
 +
 +		inline LLSD & saturation() {
 +			return (*this)["saturation"];
 +		}
 +
 +		inline LLSD & useNightVisionShader() {
 +			return (*this)["enable_night_vision"];
 +		}
 +
 +		inline LLSD & useBloomShader() {
 +			return (*this)["enable_bloom"];
 +		}
 +
 +		inline LLSD & useColorFilter() {
 +			return (*this)["enable_color_filter"];
 +		}
 +
 +
 +		inline F32 getBrightMult() const {
 +			return F32((*this)["brightness_multiplier"].asReal());
 +		}
 +
 +		inline F32 getNoiseStrength() const {
 +			return F32((*this)["noise_strength"].asReal());
 +		}
 +
 +		inline F32 getNoiseSize() const {
 +			return F32((*this)["noise_size"].asReal());
 +		}
 +
 +		inline F32 getExtractLow() const {
 +			return F32((*this)["extract_low"].asReal());
 +		}
 +
 +		inline F32 getExtractHigh() const {
 +			return F32((*this)["extract_high"].asReal());
 +		}
 +
 +		inline F32 getBloomWidth() const {
 +			return F32((*this)["bloom_width"].asReal());
 +		}
 +
 +		inline F32 getBloomStrength() const {
 +			return F32((*this)["bloom_strength"].asReal());
 +		}
 +
 +		inline F32 getBrightness() const {
 +			return F32((*this)["brightness"].asReal());
 +		}
 +
 +		inline F32 getContrast() const {
 +			return F32((*this)["contrast"].asReal());
 +		}
 +
 +		inline F32 getContrastBaseR() const {
 +			return F32((*this)["contrast_base"][0].asReal());
 +		}
 +
 +		inline F32 getContrastBaseG() const {
 +			return F32((*this)["contrast_base"][1].asReal());
 +		}
 +
 +		inline F32 getContrastBaseB() const {
 +			return F32((*this)["contrast_base"][2].asReal());
 +		}
 +
 +		inline F32 getContrastBaseIntensity() const {
 +			return F32((*this)["contrast_base"][3].asReal());
 +		}
 +
 +		inline F32 getSaturation() const {
 +			return F32((*this)["saturation"].asReal());
 +		}
 +
 +	};
 +	
 +	bool initialized;
 +	PostProcessTweaks tweaks;
 +
 +	// the map of all availible effects
 +	LLSD mAllEffects;
 +
 +private:
 +	LLPointer<LLImageGL> mSceneRenderTexture ;
 +	LLPointer<LLImageGL> mNoiseTexture ;
 +	LLPointer<LLImageGL> mTempBloomTexture ;
 +
 +public:
 +	LLPostProcess(void);
 +
 +	~LLPostProcess(void);
 +
 +	void apply(unsigned int width, unsigned int height);
 +	void invalidate() ;
 +
 +	/// Perform global initialization for this class.
 +	static void initClass(void);
 +
 +	// Cleanup of global data that's only inited once per class.
 +	static void cleanupClass();
 +
 +	void setSelectedEffect(std::string const & effectName);
 +
 +	inline std::string const & getSelectedEffect(void) const {
 +		return mSelectedEffectName;
 +	}
 +
 +	void saveEffect(std::string const & effectName);
 +
 +private:
 +		/// read in from file
 +	std::string mShaderErrorString;
 +	unsigned int screenW;
 +	unsigned int screenH;
 +
 +	float noiseTextureScale;
 +	
 +	/// Shader Uniforms
 +	glslUniforms nightVisionUniforms;
 +	glslUniforms bloomExtractUniforms;
 +	glslUniforms bloomBlurUniforms;
 +	glslUniforms colorFilterUniforms;
 +
 +	// the name of currently selected effect in mAllEffects
 +	// invariant: tweaks == mAllEffects[mSelectedEffectName]
 +	std::string mSelectedEffectName;
 +
 +	/// General functions
 +	void initialize(unsigned int width, unsigned int height);
 +	void doEffects(void);
 +	void applyShaders(void);
 +	bool shadersEnabled(void);
 +
 +	/// Night Vision Functions
 +	void createNightVisionShader(void);
 +	void applyNightVisionShader(void);
 +
 +	/// Bloom Functions
 +	void createBloomShader(void);
 +	void applyBloomShader(void);
 +
 +	/// Color Filter Functions
 +	void createColorFilterShader(void);
 +	void applyColorFilterShader(void);
 +
 +	/// OpenGL Helper Functions
 +	void getShaderUniforms(glslUniforms & uniforms, GLhandleARB & prog);
 +	void createTexture(LLPointer<LLImageGL>& texture, unsigned int width, unsigned int height);
 +	void copyFrameBuffer(U32 & texture, unsigned int width, unsigned int height);
 +	void createNoiseTexture(LLPointer<LLImageGL>& texture);
 +	bool checkError(void);
 +	void checkShaderError(GLhandleARB shader);
 +	void drawOrthoQuad(unsigned int width, unsigned int height, QuadType type);
 +	void viewOrthogonal(unsigned int width, unsigned int height);
 +	void changeOrthogonal(unsigned int width, unsigned int height);
 +	void viewPerspective(void);
 +};
 +
 +extern LLPostProcess * gPostProcess;
 +
 +
 +#endif // LL_POSTPROCESS_H
 diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index dada27557e..14962fe58e 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -227,33 +227,33 @@ bool LLTexUnit::bind(LLTexture* texture, bool for_rendering, bool forceBind)  	stop_glerror();  	if (mIndex >= 0)  	{ -		gGL.flush(); +	gGL.flush(); -		LLImageGL* gl_tex = NULL ; +	LLImageGL* gl_tex = NULL ;  		if (texture != NULL && (gl_tex = texture->getGLTexture())) -		{ +	{  			if (gl_tex->getTexName()) //if texture exists -			{ -				//in audit, replace the selected texture by the default one. -				if ((mCurrTexture != gl_tex->getTexName()) || forceBind) -				{ -					activate(); -					enable(gl_tex->getTarget()); -					mCurrTexture = gl_tex->getTexName(); -					glBindTexture(sGLTextureType[gl_tex->getTarget()], mCurrTexture); -					if(gl_tex->updateBindStats(gl_tex->mTextureMemory)) -					{ -						texture->setActive() ; -						texture->updateBindStatsForTester() ; -					} -					mHasMipMaps = gl_tex->mHasMipMaps; -					if (gl_tex->mTexOptionsDirty) -					{ -						gl_tex->mTexOptionsDirty = false; -						setTextureAddressMode(gl_tex->mAddressMode); -						setTextureFilteringOption(gl_tex->mFilterOption); -					} -				} +	{ +	//in audit, replace the selected texture by the default one. +	if ((mCurrTexture != gl_tex->getTexName()) || forceBind) +	{ +		activate(); +		enable(gl_tex->getTarget()); +		mCurrTexture = gl_tex->getTexName(); +		glBindTexture(sGLTextureType[gl_tex->getTarget()], mCurrTexture); +		if(gl_tex->updateBindStats(gl_tex->mTextureMemory)) +		{ +			texture->setActive() ; +			texture->updateBindStatsForTester() ; +		} +		mHasMipMaps = gl_tex->mHasMipMaps; +		if (gl_tex->mTexOptionsDirty) +		{ +			gl_tex->mTexOptionsDirty = false; +			setTextureAddressMode(gl_tex->mAddressMode); +			setTextureFilteringOption(gl_tex->mFilterOption); +		} +	}  			}  			else  			{ diff --git a/indra/llui/llconsole.h b/indra/llui/llconsole.h index f32f1dd74c..b264aeb7eb 100644 --- a/indra/llui/llconsole.h +++ b/indra/llui/llconsole.h @@ -34,9 +34,10 @@  class LLSD; -class LLConsole : public LLFixedBuffer, public LLUICtrl, public LLInstanceTracker<LLConsole> +class LLConsole : public LLFixedBuffer, public LLUICtrl, public INSTANCE_TRACKER(LLConsole)  {  public: +  	typedef enum e_font_size  	{  		MONOSPACE = -1, diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index aef63bcf93..113fdf10e4 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -112,15 +112,18 @@ struct LLCoordFloater : LLCoord<LL_COORD_FLOATER>  	bool operator!=(const LLCoordFloater& other) const { return !(*this == other); }  	void setFloater(LLFloater& floater); + +	  }; -class LLFloater : public LLPanel, public LLInstanceTracker<LLFloater> +class LLFloater : public LLPanel, public INSTANCE_TRACKER(LLFloater)  {  	friend class LLFloaterView;  	friend class LLFloaterReg;  	friend class LLMultiFloater;  public: +  	struct KeyCompare  	{  //		static bool compare(const LLSD& a, const LLSD& b); diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h index 648cd5fdce..26b8a7f973 100644 --- a/indra/llui/lllayoutstack.h +++ b/indra/llui/lllayoutstack.h @@ -34,9 +34,10 @@  class LLLayoutPanel; -class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack> +class LLLayoutStack : public LLView, public INSTANCE_TRACKER(LLLayoutStack)  {  public: +  	typedef enum e_layout_orientation  	{  		HORIZONTAL, diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index d7534c416d..faeba8f6eb 100644 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -136,10 +136,11 @@ typedef LLFunctorRegistration<LLNotificationResponder> LLNotificationFunctorRegi  // context data that can be looked up via a notification's payload by the display logic  // derive from this class to implement specific contexts -class LLNotificationContext : public LLInstanceTracker<LLNotificationContext, LLUUID> +class LLNotificationContext : public INSTANCE_TRACKER_KEYED(LLNotificationContext, LLUUID)  {  public: -	LLNotificationContext() : LLInstanceTracker<LLNotificationContext, LLUUID>(LLUUID::generateNewID()) + +	LLNotificationContext() : INSTANCE_TRACKER_KEYED(LLNotificationContext, LLUUID)(LLUUID::generateNewID())  	{  	} diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h index e9147d552e..06d7e4907a 100644 --- a/indra/llwindow/llwindow.h +++ b/indra/llwindow/llwindow.h @@ -39,9 +39,10 @@ class LLWindowCallbacks;  // Refer to llwindow_test in test/common/llwindow for usage example -class LLWindow : public LLInstanceTracker<LLWindow> +class LLWindow : public INSTANCE_TRACKER(LLWindow)  {  public: +  	struct LLWindowResolution  	{  		S32 mWidth; diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp index 53d9380f4f..561f4fdc73 100644 --- a/indra/llxml/llcontrol.cpp +++ b/indra/llxml/llcontrol.cpp @@ -316,7 +316,7 @@ LLPointer<LLControlVariable> LLControlGroup::getControl(const std::string& name)  ////////////////////////////////////////////////////////////////////////////  LLControlGroup::LLControlGroup(const std::string& name) -:	LLInstanceTracker<LLControlGroup, std::string>(name) +:	INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)(name)  {  	mTypeString[TYPE_U32] = "U32";  	mTypeString[TYPE_S32] = "S32"; diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h index ee7d1d50b7..6ea010f4f9 100644 --- a/indra/llxml/llcontrol.h +++ b/indra/llxml/llcontrol.h @@ -180,7 +180,7 @@ T convert_from_llsd(const LLSD& sd, eControlType type, const std::string& contro  }  //const U32 STRING_CACHE_SIZE = 10000; -class LLControlGroup : public LLInstanceTracker<LLControlGroup, std::string> +class LLControlGroup : public INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)  {  	LOG_CLASS(LLControlGroup); @@ -197,7 +197,7 @@ public:  	~LLControlGroup();  	void cleanup(); -	typedef LLInstanceTracker<LLControlGroup, std::string>::instance_iter instance_iter; +	typedef INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)::instance_iter instance_iter;  	LLControlVariablePtr getControl(const std::string& name); @@ -306,7 +306,7 @@ public:  //! without have to manually create and bind a listener to a local  //! object.  template <class T> -class LLControlCache : public LLRefCount, public LLInstanceTracker<LLControlCache<T>, std::string> +class LLControlCache : public LLRefCount, public LLInstanceTracker<LLControlCache<T>, InstanceTrackType_LLControlCache, std::string>  {  public:  	// This constructor will declare a control if it doesn't exist in the contol group @@ -314,7 +314,7 @@ public:  					const std::string& name,   					const T& default_value,   					const std::string& comment) -	:	LLInstanceTracker<LLControlCache<T>, std::string >(name) +	:	LLInstanceTracker<LLControlCache<T>, InstanceTrackType_LLControlCache, std::string >(name)  	{  		if(!group.controlExists(name))  		{ @@ -329,7 +329,7 @@ public:  	LLControlCache(LLControlGroup& group,  					const std::string& name) -	:	LLInstanceTracker<LLControlCache<T>, std::string >(name) +	:	LLInstanceTracker<LLControlCache<T>, InstanceTrackType_LLControlCache, std::string >(name)  	{  		if(!group.controlExists(name))  		{ diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index d046b22133..d29181a3ce 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -577,6 +577,12 @@ F32 LLDrawable::updateXform(BOOL undamped)  			mVObjp->dirtySpatialGroup();  		}  	} +	else if (!isRoot() +		&& (   dist_vec_squared(old_pos, target_pos) > 0.f +			|| (1.f - dot(old_rot, target_rot)) > 0.f)) +        { // update child prims moved from LSL +                gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION, TRUE); +        }  	else if (!getVOVolume() && !isAvatar())  	{  		movePartition(); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index c3cf744222..d5afa25c9c 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1165,85 +1165,85 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  	{ //render rigged attachments  		if (!avatarp->isVisuallyMuted())  		{ -			if (pass == 3) -			{ -				if (is_deferred_render) -				{ -					renderDeferredRiggedSimple(avatarp); -				} -				else -				{ -					renderRiggedSimple(avatarp); -				} -			} +	if (pass == 3) +	{ +		if (is_deferred_render) +		{ +			renderDeferredRiggedSimple(avatarp); +		} +		else +		{ +			renderRiggedSimple(avatarp); +		} +	}  			else if (pass == 4) -			{ -				if (is_deferred_render) -				{ -					renderDeferredRiggedBump(avatarp); -				} -				else -				{ -					renderRiggedFullbright(avatarp); -				} -			} +	{ +		if (is_deferred_render) +		{ +			renderDeferredRiggedBump(avatarp); +		} +		else +		{ +			renderRiggedFullbright(avatarp); +		} +	}  			else if (pass == 5) -			{ -				renderRiggedShinySimple(avatarp); -			} +	{ +		renderRiggedShinySimple(avatarp); +	}  			else if (pass == 6) -			{ -				renderRiggedFullbrightShiny(avatarp); -			} +	{ +		renderRiggedFullbrightShiny(avatarp); +	}  			else if (pass >= 7 && pass < 9) -			{ -				if (pass == 7) -				{ -					renderRiggedAlpha(avatarp); -				} +	{ +		if (pass == 7) +		{ +			renderRiggedAlpha(avatarp); +		}  				else if (pass == 8) -				{ -					renderRiggedFullbrightAlpha(avatarp); -				} -			} +		{ +			renderRiggedFullbrightAlpha(avatarp); +		} +	}  			else if (pass == 9) -			{ -				renderRiggedGlow(avatarp); -			} +	{ +		renderRiggedGlow(avatarp); +	}  		}  	}  	else  	{ -		if ((sShaderLevel >= SHADER_LEVEL_CLOTH)) -		{ -			LLMatrix4 rot_mat; -			LLViewerCamera::getInstance()->getMatrixToLocal(rot_mat); -			LLMatrix4 cfr(OGL_TO_CFR_ROTATION); -			rot_mat *= cfr; +	if ((sShaderLevel >= SHADER_LEVEL_CLOTH)) +	{ +		LLMatrix4 rot_mat; +		LLViewerCamera::getInstance()->getMatrixToLocal(rot_mat); +		LLMatrix4 cfr(OGL_TO_CFR_ROTATION); +		rot_mat *= cfr; -			LLVector4 wind; -			wind.setVec(avatarp->mWindVec); -			wind.mV[VW] = 0; -			wind = wind * rot_mat; -			wind.mV[VW] = avatarp->mWindVec.mV[VW]; - -			sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_WIND, 1, wind.mV); -			F32 phase = -1.f * (avatarp->mRipplePhase); - -			F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f); -			LLVector4 sin_params(freq, freq, freq, phase); -			sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_SINWAVE, 1, sin_params.mV); - -			LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f); -			gravity = gravity * rot_mat; -			sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_GRAVITY, 1, gravity.mV); -		} +		LLVector4 wind; +		wind.setVec(avatarp->mWindVec); +		wind.mV[VW] = 0; +		wind = wind * rot_mat; +		wind.mV[VW] = avatarp->mWindVec.mV[VW]; -		if( !single_avatar || (avatarp == single_avatar) ) -		{ -			avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE); -		} +		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_WIND, 1, wind.mV); +		F32 phase = -1.f * (avatarp->mRipplePhase); + +		F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f); +		LLVector4 sin_params(freq, freq, freq, phase); +		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_SINWAVE, 1, sin_params.mV); + +		LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f); +		gravity = gravity * rot_mat; +		sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_GRAVITY, 1, gravity.mV);  	} + +	if( !single_avatar || (avatarp == single_avatar) ) +	{ +		avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE); +	} +}  }  void LLDrawPoolAvatar::getRiggedGeometry(LLFace* face, LLPointer<LLVertexBuffer>& buffer, U32 data_mask, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face) diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 5a4f9591f7..7e95046479 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -1370,9 +1370,14 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  					LLGLDisable blend(GL_BLEND);  					gGL.setColorMask(TRUE, TRUE);  					gNormalMapGenProgram.bind(); -					gNormalMapGenProgram.uniform1f("norm_scale", gSavedSettings.getF32("RenderNormalMapScale")); -					gNormalMapGenProgram.uniform1f("stepX", 1.f/bump->getWidth()); -					gNormalMapGenProgram.uniform1f("stepY", 1.f/bump->getHeight()); + +					static LLStaticHashedString sNormScale("norm_scale"); +					static LLStaticHashedString sStepX("stepX"); +					static LLStaticHashedString sStepY("stepY"); + +					gNormalMapGenProgram.uniform1f(sNormScale, gSavedSettings.getF32("RenderNormalMapScale")); +					gNormalMapGenProgram.uniform1f(sStepX, 1.f/bump->getWidth()); +					gNormalMapGenProgram.uniform1f(sStepY, 1.f/bump->getHeight());  					LLVector2 v((F32) bump->getWidth()/gPipeline.mScreen.getWidth(),  								(F32) bump->getHeight()/gPipeline.mScreen.getHeight()); diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index b5faff7968..b0e69aa9b5 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -152,7 +152,8 @@ void LLDrawPoolWLSky::renderDome(F32 camHeightLocal, LLGLSLShader * shader) cons  	gGL.translatef(0.f,-camHeightLocal, 0.f);  	// Draw WL Sky	 -	shader->uniform3f("camPosLocal", 0.f, camHeightLocal, 0.f); +	static LLStaticHashedString sCamPosLocal("camPosLocal"); +	shader->uniform3f(sCamPosLocal, 0.f, camHeightLocal, 0.f);  	gSky.mVOWLSkyp->drawDome(); @@ -207,7 +208,8 @@ void LLDrawPoolWLSky::renderStars(void) const  	if (LLGLSLShader::sNoFixedFunction)  	{  		gCustomAlphaProgram.bind(); -		gCustomAlphaProgram.uniform1f("custom_alpha", star_alpha.mV[3]); +		static LLStaticHashedString sCustomAlpha("custom_alpha"); +		gCustomAlphaProgram.uniform1f(sCustomAlpha, star_alpha.mV[3]);  	}  	else  	{ diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index ef91a459e7..86e5f20812 100755 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -57,6 +57,9 @@ extern BOOL gGLDebugLoggingEnabled;  #define LL_MAX_INDICES_COUNT 1000000 +static LLStaticHashedString sTextureIndexIn("texture_index_in"); +static LLStaticHashedString sColorIn("color_in"); +  BOOL LLFace::sSafeRenderSelect = TRUE; // FALSE  #define DOTVEC(a,b) (a.mV[0]*b.mV[0] + a.mV[1]*b.mV[1] + a.mV[2]*b.mV[2]) @@ -1438,7 +1441,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  			vp[2] = 0;  			vp[3] = 0; -			gTransformPositionProgram.uniform1i("texture_index_in", val); +			gTransformPositionProgram.uniform1i(sTextureIndexIn, val);  			glBeginTransformFeedback(GL_POINTS);  			buff->setBuffer(LLVertexBuffer::MAP_VERTEX); @@ -1456,7 +1459,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  			S32 val = *((S32*) color.mV); -			gTransformColorProgram.uniform1i("color_in", val); +			gTransformColorProgram.uniform1i(sColorIn, val);  			glBeginTransformFeedback(GL_POINTS);  			buff->setBuffer(LLVertexBuffer::MAP_VERTEX);  			push_for_transform(buff, vf.mNumVertices, mGeomCount); @@ -1477,7 +1480,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  						 (glow << 16) |  						 (glow << 24); -			gTransformColorProgram.uniform1i("color_in", glow32); +			gTransformColorProgram.uniform1i(sColorIn, glow32);  			glBeginTransformFeedback(GL_POINTS);  			buff->setBuffer(LLVertexBuffer::MAP_VERTEX);  			push_for_transform(buff, vf.mNumVertices, mGeomCount); diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp index 116bd241c4..664f7d4fd6 100644 --- a/indra/newview/llfloaterhardwaresettings.cpp +++ b/indra/newview/llfloaterhardwaresettings.cpp @@ -89,8 +89,10 @@ void LLFloaterHardwareSettings::refresh()  void LLFloaterHardwareSettings::refreshEnabledState()  { +    F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple"); +      	S32 min_tex_mem = LLViewerTextureList::getMinVideoRamSetting(); -	S32 max_tex_mem = LLViewerTextureList::getMaxVideoRamSetting(); +	S32 max_tex_mem = LLViewerTextureList::getMaxVideoRamSetting(false, mem_multiplier);  	getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMinValue(min_tex_mem);  	getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMaxValue(max_tex_mem); diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index 3fe2518de6..94c3f4149c 100644 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -54,7 +54,7 @@ LLFloaterWebContent::_Params::_Params()  LLFloaterWebContent::LLFloaterWebContent( const Params& params )  :	LLFloater( params ), -	LLInstanceTracker<LLFloaterWebContent, std::string>(params.id()), +	INSTANCE_TRACKER_KEYED(LLFloaterWebContent, std::string)(params.id()),  	mWebBrowser(NULL),  	mAddressCombo(NULL),  	mSecureLockIcon(NULL), diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h index cfc87e9015..409c15fb0b 100644 --- a/indra/newview/llfloaterwebcontent.h +++ b/indra/newview/llfloaterwebcontent.h @@ -40,10 +40,11 @@ class LLIconCtrl;  class LLFloaterWebContent :  	public LLFloater,  	public LLViewerMediaObserver, -	public LLInstanceTracker<LLFloaterWebContent, std::string> +	public INSTANCE_TRACKER_KEYED(LLFloaterWebContent, std::string)  {  public: -	typedef LLInstanceTracker<LLFloaterWebContent, std::string> instance_tracker_t; + +	typedef INSTANCE_TRACKER_KEYED(LLFloaterWebContent, std::string) instance_tracker_t;      LOG_CLASS(LLFloaterWebContent);  	struct _Params : public LLInitParam::Block<_Params> diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index 362308c176..0228807dc8 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -1698,7 +1698,8 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,  		gGL.getModelviewMatrix().inverse().mult_vec_matrix(plane); -		gClipProgram.uniform4fv("clip_plane", 1, plane.v); +		static LLStaticHashedString sClipPlane("clip_plane"); +		gClipProgram.uniform4fv(sClipPlane, 1, plane.v);  		BOOL particles = gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_PARTICLES);  		BOOL clouds = gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS); diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 99b4707158..48730f0f20 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -81,7 +81,7 @@ LLMediaCtrl::Params::Params()  LLMediaCtrl::LLMediaCtrl( const Params& p) :  	LLPanel( p ), -	LLInstanceTracker<LLMediaCtrl, LLUUID>(LLUUID::generateNewID()), +	INSTANCE_TRACKER_KEYED(LLMediaCtrl, LLUUID)(LLUUID::generateNewID()),  	mTextureDepthBytes( 4 ),  	mBorder(NULL),  	mFrequentUpdates( true ), diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index 7f2a5e1642..4fed21bf22 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -42,10 +42,11 @@ class LLMediaCtrl :  	public LLPanel,  	public LLViewerMediaObserver,  	public LLViewerMediaEventEmitter, -	public LLInstanceTracker<LLMediaCtrl, LLUUID> +	public INSTANCE_TRACKER_KEYED(LLMediaCtrl, LLUUID)  {  	LOG_CLASS(LLMediaCtrl);  public: +  	struct Params : public LLInitParam::Block<Params, LLPanel::Params>   	{  		Optional<std::string>	start_url; diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index ae48898e82..306f29f703 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -1918,7 +1918,7 @@ void LLMeshLODResponder::completedRaw(U32 status, const std::string& reason,  	if (data_size < mRequestedBytes)  	{ -		if (status == 499 || status == 503) +		if (status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE)  		{ //timeout or service unavailable, try again  			llwarns << "Timeout or service unavailable, retrying." << llendl;  			LLMeshRepository::sHTTPRetryCount++; @@ -1926,7 +1926,7 @@ void LLMeshLODResponder::completedRaw(U32 status, const std::string& reason,  		}  		else  		{ -			llassert(status == 499 || status == 503); //intentionally trigger a breakpoint +			llassert(status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE); //intentionally trigger a breakpoint  			llwarns << "Unhandled status " << status << llendl;  		}  		return; @@ -1982,7 +1982,7 @@ void LLMeshSkinInfoResponder::completedRaw(U32 status, const std::string& reason  	if (data_size < mRequestedBytes)  	{ -		if (status == 499 || status == 503) +		if (status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE)  		{ //timeout or service unavailable, try again  			llwarns << "Timeout or service unavailable, retrying." << llendl;  			LLMeshRepository::sHTTPRetryCount++; @@ -1990,7 +1990,7 @@ void LLMeshSkinInfoResponder::completedRaw(U32 status, const std::string& reason  		}  		else  		{ -			llassert(status == 499 || status == 503); //intentionally trigger a breakpoint +			llassert(status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE); //intentionally trigger a breakpoint  			llwarns << "Unhandled status " << status << llendl;  		}  		return; @@ -2045,7 +2045,7 @@ void LLMeshDecompositionResponder::completedRaw(U32 status, const std::string& r  	if (data_size < mRequestedBytes)  	{ -		if (status == 499 || status == 503) +		if (status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE)  		{ //timeout or service unavailable, try again  			llwarns << "Timeout or service unavailable, retrying." << llendl;  			LLMeshRepository::sHTTPRetryCount++; @@ -2053,7 +2053,7 @@ void LLMeshDecompositionResponder::completedRaw(U32 status, const std::string& r  		}  		else  		{ -			llassert(status == 499 || status == 503); //intentionally trigger a breakpoint +			llassert(status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE); //intentionally trigger a breakpoint  			llwarns << "Unhandled status " << status << llendl;  		}  		return; @@ -2109,7 +2109,7 @@ void LLMeshPhysicsShapeResponder::completedRaw(U32 status, const std::string& re  	if (data_size < mRequestedBytes)  	{ -		if (status == 499 || status == 503) +		if (status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE)  		{ //timeout or service unavailable, try again  			llwarns << "Timeout or service unavailable, retrying." << llendl;  			LLMeshRepository::sHTTPRetryCount++; @@ -2117,7 +2117,7 @@ void LLMeshPhysicsShapeResponder::completedRaw(U32 status, const std::string& re  		}  		else  		{ -			llassert(status == 499 || status == 503); //intentionally trigger a breakpoint +			llassert(status == HTTP_INTERNAL_ERROR || status == HTTP_SERVICE_UNAVAILABLE); //intentionally trigger a breakpoint  			llwarns << "Unhandled status " << status << llendl;  		}  		return; @@ -2170,16 +2170,16 @@ void LLMeshHeaderResponder::completedRaw(U32 status, const std::string& reason,  		//	<< "Header responder failed with status: "  		//	<< status << ": " << reason << llendl; -		// 503 (service unavailable) or 499 (timeout) +		// 503 (service unavailable) or 499 (internal Linden-generated error)  		// can be due to server load and can be retried  		// TODO*: Add maximum retry logic, exponential backoff  		// and (somewhat more optional than the others) retries  		// again after some set period of time -		llassert(status == 503 || status == 499); +		llassert(status == HTTP_SERVICE_UNAVAILABLE || status == HTTP_REQUEST_TIME_OUT || status == HTTP_INTERNAL_ERROR); -		if (status == 503 || status == 499) +		if (status == HTTP_SERVICE_UNAVAILABLE || status == HTTP_REQUEST_TIME_OUT || status == HTTP_INTERNAL_ERROR)  		{ //retry  			llwarns << "Timeout or service unavailable, retrying." << llendl;  			LLMeshRepository::sHTTPRetryCount++; @@ -2191,7 +2191,7 @@ void LLMeshHeaderResponder::completedRaw(U32 status, const std::string& reason,  		}  		else  		{ -			llwarns << "Unhandled status." << llendl; +			llwarns << "Unhandled status: " << status << llendl;  		}  	} diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h index 09c3d49fe7..103806a1bd 100644 --- a/indra/newview/llnamelistctrl.h +++ b/indra/newview/llnamelistctrl.h @@ -64,9 +64,10 @@ private:  class LLNameListCtrl -:	public LLScrollListCtrl, public LLInstanceTracker<LLNameListCtrl> +:	public LLScrollListCtrl, public INSTANCE_TRACKER(LLNameListCtrl)  {  public: +  	typedef enum e_name_type  	{  		INDIVIDUAL, diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 9dfb29b905..49debe67f6 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -572,7 +572,7 @@ S32	LLToast::notifyParent(const LLSD& info)  //static  void LLToast::updateClass()  { -	for (LLInstanceTracker<LLToast>::instance_iter iter = LLInstanceTracker<LLToast>::beginInstances(); iter != LLInstanceTracker<LLToast>::endInstances(); )  +	for (INSTANCE_TRACKER(LLToast)::instance_iter iter = INSTANCE_TRACKER(LLToast)::beginInstances(); iter != INSTANCE_TRACKER(LLToast)::endInstances(); )   	{  		LLToast& toast = *iter++; diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index e1d99b1bcb..8f77e7b78b 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -69,10 +69,11 @@ private :   * Represents toast pop-up.   * This is a parent view for all toast panels.   */ -class LLToast : public LLModalDialog, public LLInstanceTracker<LLToast> +class LLToast : public LLModalDialog, public INSTANCE_TRACKER(LLToast)  {  	friend class LLToastLifeTimer;  public: +  	typedef boost::function<void (LLToast* toast)> toast_callback_t;  	typedef boost::signals2::signal<void (LLToast* toast)> toast_signal_t;  	typedef boost::signals2::signal<void (LLToast* toast, bool mouse_enter)> toast_hover_check_signal_t; diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index c7677759af..7d7889845d 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -52,6 +52,13 @@  #define UNIFORM_ERRS LL_ERRS("Shader")  #endif +static LLStaticHashedString sTexture0("texture0"); +static LLStaticHashedString sTexture1("texture1"); +static LLStaticHashedString sTex0("tex0"); +static LLStaticHashedString sTex1("tex1"); +static LLStaticHashedString sGlowMap("glowMap"); +static LLStaticHashedString sScreenMap("screenMap"); +  // Lots of STL stuff in here, using namespace std to keep things more readable  using std::vector;  using std::pair; @@ -2049,8 +2056,8 @@ BOOL LLViewerShaderMgr::loadShadersObject()  		if (success)  		{ //lldrawpoolbump assumes "texture0" has channel 0 and "texture1" has channel 1  			gObjectBumpProgram.bind(); -			gObjectBumpProgram.uniform1i("texture0", 0); -			gObjectBumpProgram.uniform1i("texture1", 1); +			gObjectBumpProgram.uniform1i(sTexture0, 0); +			gObjectBumpProgram.uniform1i(sTexture1, 1);  			gObjectBumpProgram.unbind();  		}  	} @@ -2609,7 +2616,7 @@ BOOL LLViewerShaderMgr::loadShadersInterface()  		if (success)  		{  			gSplatTextureRectProgram.bind(); -			gSplatTextureRectProgram.uniform1i("screenMap", 0); +			gSplatTextureRectProgram.uniform1i(sScreenMap, 0);  			gSplatTextureRectProgram.unbind();  		}  	} @@ -2625,8 +2632,8 @@ BOOL LLViewerShaderMgr::loadShadersInterface()  		if (success)  		{  			gGlowCombineProgram.bind(); -			gGlowCombineProgram.uniform1i("glowMap", 0); -			gGlowCombineProgram.uniform1i("screenMap", 1); +			gGlowCombineProgram.uniform1i(sGlowMap, 0); +			gGlowCombineProgram.uniform1i(sScreenMap, 1);  			gGlowCombineProgram.unbind();  		}  	} @@ -2642,8 +2649,8 @@ BOOL LLViewerShaderMgr::loadShadersInterface()  		if (success)  		{  			gGlowCombineFXAAProgram.bind(); -			gGlowCombineFXAAProgram.uniform1i("glowMap", 0); -			gGlowCombineFXAAProgram.uniform1i("screenMap", 1); +			gGlowCombineFXAAProgram.uniform1i(sGlowMap, 0); +			gGlowCombineFXAAProgram.uniform1i(sScreenMap, 1);  			gGlowCombineFXAAProgram.unbind();  		}  	} @@ -2660,8 +2667,8 @@ BOOL LLViewerShaderMgr::loadShadersInterface()  		if (success)  		{  			gTwoTextureAddProgram.bind(); -			gTwoTextureAddProgram.uniform1i("tex0", 0); -			gTwoTextureAddProgram.uniform1i("tex1", 1); +			gTwoTextureAddProgram.uniform1i(sTex0, 0); +			gTwoTextureAddProgram.uniform1i(sTex1, 1);  		}  	} @@ -2676,7 +2683,7 @@ BOOL LLViewerShaderMgr::loadShadersInterface()  		if (success)  		{  			gOneTextureNoColorProgram.bind(); -			gOneTextureNoColorProgram.uniform1i("tex0", 0); +			gOneTextureNoColorProgram.uniform1i(sTex0, 0);  		}  	} @@ -2691,7 +2698,7 @@ BOOL LLViewerShaderMgr::loadShadersInterface()  		if (success)  		{  			gSolidColorProgram.bind(); -			gSolidColorProgram.uniform1i("tex0", 0); +			gSolidColorProgram.uniform1i(sTex0, 0);  			gSolidColorProgram.unbind();  		}  	} diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h index b8552d2d95..dd1325277c 100644 --- a/indra/newview/llviewershadermgr.h +++ b/indra/newview/llviewershadermgr.h @@ -127,6 +127,8 @@ public:  	/* virtual */ void updateShaderUniforms(LLGLSLShader * shader);  private: + +	UniformVec mShinyUniforms;  	// the list of shaders we need to propagate parameters to.  	std::vector<LLGLSLShader *> mShaderList; diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index b9f5c432d0..82d990cf97 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1191,7 +1191,7 @@ S32 LLViewerTextureList::getMinVideoRamSetting()  //static  // Returns max setting for TextureMemory (in MB) -S32 LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended) +S32 LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended, float mem_multiplier)  {  	S32 max_texmem;  	if (gGLManager.mVRAM != 0) @@ -1235,7 +1235,10 @@ S32 LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended)  		max_texmem = llmin(max_texmem, (S32)(system_ram/2));  	else  		max_texmem = llmin(max_texmem, (S32)(system_ram)); -		 +     +    // limit the texture memory to a multiple of the default if we've found some cards to behave poorly otherwise +	max_texmem = llmin(max_texmem, (S32) (mem_multiplier * (F32) max_texmem)); +  	max_texmem = llclamp(max_texmem, getMinVideoRamSetting(), MAX_VIDEO_RAM_IN_MEGA_BYTES);   	return max_texmem; @@ -1248,7 +1251,7 @@ void LLViewerTextureList::updateMaxResidentTexMem(S32 mem)  	// Initialize the image pipeline VRAM settings  	S32 cur_mem = gSavedSettings.getS32("TextureMemory");  	F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple"); -	S32 default_mem = getMaxVideoRamSetting(true); // recommended default +	S32 default_mem = getMaxVideoRamSetting(true, mem_multiplier); // recommended default  	if (mem == 0)  	{  		mem = cur_mem > 0 ? cur_mem : default_mem; @@ -1258,10 +1261,7 @@ void LLViewerTextureList::updateMaxResidentTexMem(S32 mem)  		mem = default_mem;  	} -	// limit the texture memory to a multiple of the default if we've found some cards to behave poorly otherwise -	mem = llmin(mem, (S32) (mem_multiplier * (F32) default_mem)); - -	mem = llclamp(mem, getMinVideoRamSetting(), getMaxVideoRamSetting()); +	mem = llclamp(mem, getMinVideoRamSetting(), getMaxVideoRamSetting(false, mem_multiplier));  	if (mem != cur_mem)  	{  		gSavedSettings.setS32("TextureMemory", mem); diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h index 3dda973d3f..88dea4448b 100644 --- a/indra/newview/llviewertexturelist.h +++ b/indra/newview/llviewertexturelist.h @@ -114,7 +114,7 @@ public:  	void setDebugFetching(LLViewerFetchedTexture* tex, S32 debug_level);  	static S32 getMinVideoRamSetting(); -	static S32 getMaxVideoRamSetting(bool get_recommended = false); +	static S32 getMaxVideoRamSetting(bool get_recommended, float mem_multiplier);  private:  	void updateImagesDecodePriorities(); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index b0f23fca42..7adf18b6d0 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3846,10 +3846,13 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons  	}  	//build matrix palette -	LLMatrix4a mp[64]; +	static const size_t kMaxJoints = 64; + +	LLMatrix4a mp[kMaxJoints];  	LLMatrix4* mat = (LLMatrix4*) mp; -	for (U32 j = 0; j < skin->mJointNames.size(); ++j) +	U32 maxJoints = llmin(skin->mJointNames.size(), kMaxJoints); +	for (U32 j = 0; j < maxJoints; ++j)  	{  		LLJoint* joint = avatar->getJoint(skin->mJointNames[j]);  		if (joint) @@ -3904,8 +3907,10 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons  						F32 w = wght[k];  						LLMatrix4a src; -						src.setMul(mp[idx[k]], w); - +						// Insure ref'd bone is in our clamped array of mats +						llassert(idx[k] < kMaxJoints); +						// clamp k to kMaxJoints to avoid reading garbage off stack in release +						src.setMul(mp[idx[(k < kMaxJoints) ? k : 0]], w);  						final_mat.add(src);  					} @@ -5042,8 +5047,8 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  					flexi = flexi || facep->getViewerObject()->getVolume()->isUnique();  				} +				}  			} -		}  		if (flexi && buffer_usage && buffer_usage != GL_STREAM_DRAW_ARB) diff --git a/indra/newview/llwaterparamset.h b/indra/newview/llwaterparamset.h index b28585af59..368cb0ccba 100644 --- a/indra/newview/llwaterparamset.h +++ b/indra/newview/llwaterparamset.h @@ -33,6 +33,7 @@  #include "v4math.h"  #include "v4color.h"  #include "llviewershadermgr.h" +#include "llstringtable.h"  class LLWaterParamSet; @@ -47,6 +48,9 @@ public:  private:  	LLSD mParamValues; +	std::vector<LLStaticHashedString> mParamHashedNames; + +	void updateHashedNames();  public: @@ -140,6 +144,17 @@ inline void LLWaterParamSet::setAll(const LLSD& val)  			mParamValues[mIt->first] = mIt->second;  		}  	} +	updateHashedNames(); +} + +inline void LLWaterParamSet::updateHashedNames() +{ +	mParamHashedNames.clear(); +	// Iterate through values +	for(LLSD::map_iterator iter = mParamValues.beginMap(); iter != mParamValues.endMap(); ++iter) +	{ +		mParamHashedNames.push_back(LLStaticHashedString(iter->first)); +	}  }  inline const LLSD& LLWaterParamSet::getAll() diff --git a/indra/newview/llwlparamset.cpp b/indra/newview/llwlparamset.cpp index b04d30db55..745cdae441 100644 --- a/indra/newview/llwlparamset.cpp +++ b/indra/newview/llwlparamset.cpp @@ -38,6 +38,22 @@  #include <sstream> +static LLStaticHashedString sStarBrightness("star_brightness"); +static LLStaticHashedString sPresetNum("preset_num"); +static LLStaticHashedString sSunAngle("sun_angle"); +static LLStaticHashedString sEastAngle("east_angle"); +static LLStaticHashedString sEnableCloudScroll("enable_cloud_scroll"); +static LLStaticHashedString sCloudScrollRate("cloud_scroll_rate"); +static LLStaticHashedString sLightNorm("lightnorm"); +static LLStaticHashedString sCloudDensity("cloud_pos_density1"); +static LLStaticHashedString sCloudScale("cloud_scale"); +static LLStaticHashedString sCloudShadow("cloud_shadow"); +static LLStaticHashedString sDensityMultiplier("density_multiplier"); +static LLStaticHashedString sDistanceMultiplier("distance_multiplier"); +static LLStaticHashedString sHazeDensity("haze_density"); +static LLStaticHashedString sHazeHorizon("haze_horizon"); +static LLStaticHashedString sMaxY("max_y"); +  LLWLParamSet::LLWLParamSet(void) :  	mName("Unnamed Preset"),  	mCloudScrollXOffset(0.f), mCloudScrollYOffset(0.f)	 @@ -48,21 +64,24 @@ static LLFastTimer::DeclareTimer FTM_WL_PARAM_UPDATE("WL Param Update");  void LLWLParamSet::update(LLGLSLShader * shader) const   {	  	LLFastTimer t(FTM_WL_PARAM_UPDATE); - -	for(LLSD::map_const_iterator i = mParamValues.beginMap(); -		i != mParamValues.endMap(); -		++i) +	LLSD::map_const_iterator i = mParamValues.beginMap(); +	std::vector<LLStaticHashedString>::const_iterator n = mParamHashedNames.begin(); +	for(;(i != mParamValues.endMap()) && (n != mParamHashedNames.end());++i, n++)  	{ -		const std::string& param = i->first; +		const LLStaticHashedString& param = *n; -		if (param == "star_brightness" || param == "preset_num" || param == "sun_angle" || -			param == "east_angle" || param == "enable_cloud_scroll" || -			param == "cloud_scroll_rate" || param == "lightnorm" )  +		// check that our pre-hashed names are still tracking the mParamValues map correctly +		// +		llassert(param.String() == i->first); + +		if (param == sStarBrightness || param == sPresetNum || param == sSunAngle || +			param == sEastAngle || param == sEnableCloudScroll || +			param == sCloudScrollRate || param == sLightNorm )   		{  			continue;  		} -		if (param == "cloud_pos_density1") +		if (param == sCloudDensity)  		{  			LLVector4 val;  			val.mV[0] = F32(i->second[0].asReal()) + mCloudScrollXOffset; @@ -74,10 +93,10 @@ void LLWLParamSet::update(LLGLSLShader * shader) const  			shader->uniform4fv(param, 1, val.mV);  			stop_glerror();  		} -		else if (param == "cloud_scale" || param == "cloud_shadow" || -				 param == "density_multiplier" || param == "distance_multiplier" || -				 param == "haze_density" || param == "haze_horizon" || -				 param == "max_y" ) +		else if (param == sCloudScale || param == sCloudShadow || +				 param == sDensityMultiplier || param == sDistanceMultiplier || +				 param == sHazeDensity || param == sHazeHorizon || +				 param == sMaxY )  		{  			F32 val = (F32) i->second[0].asReal(); @@ -378,3 +397,13 @@ void LLWLParamSet::updateCloudScrolling(void)  		mCloudScrollYOffset += F32(delta_t * (getCloudScrollY() - 10.f) / 100.f);  	}  } + +void LLWLParamSet::updateHashedNames() +{ +	mParamHashedNames.clear(); +	// Iterate through values +	for(LLSD::map_iterator iter = mParamValues.beginMap(); iter != mParamValues.endMap(); ++iter) +	{ +		mParamHashedNames.push_back(LLStaticHashedString(iter->first)); +	} +}
\ No newline at end of file diff --git a/indra/newview/llwlparamset.h b/indra/newview/llwlparamset.h index b087119dd5..3e9f77ba6c 100644 --- a/indra/newview/llwlparamset.h +++ b/indra/newview/llwlparamset.h @@ -29,9 +29,11 @@  #include <string>  #include <map> +#include <vector>  #include "v4math.h"  #include "v4color.h" +#include "llstaticstringtable.h"  class LLWLParamSet;  class LLGLSLShader; @@ -47,9 +49,12 @@ public:  private:  	LLSD mParamValues; -	 +	std::vector<LLStaticHashedString> mParamHashedNames; +  	float mCloudScrollXOffset, mCloudScrollYOffset; +	void updateHashedNames(); +  public:  	LLWLParamSet(); @@ -177,6 +182,8 @@ inline void LLWLParamSet::setAll(const LLSD& val)  	if(val.isMap()) {  		mParamValues = val;  	} + +	updateHashedNames();  }  inline const LLSD& LLWLParamSet::getAll() diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index d9771af254..54a62a858a 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -253,6 +253,17 @@ LLFastTimer::DeclareTimer FTM_RENDER_DEFERRED("Deferred Shading");  static LLFastTimer::DeclareTimer FTM_STATESORT_DRAWABLE("Sort Drawables");  static LLFastTimer::DeclareTimer FTM_STATESORT_POSTSORT("Post Sort"); +static LLStaticHashedString sTint("tint"); +static LLStaticHashedString sAmbiance("ambiance"); +static LLStaticHashedString sAlphaScale("alpha_scale"); +static LLStaticHashedString sNormMat("norm_mat"); +static LLStaticHashedString sOffset("offset"); +static LLStaticHashedString sScreenRes("screenRes"); +static LLStaticHashedString sDelta("delta"); +static LLStaticHashedString sDistFactor("dist_factor"); +static LLStaticHashedString sKern("kern"); +static LLStaticHashedString sKernScale("kern_scale"); +  //----------------------------------------  std::string gPoolNames[] =   { @@ -4621,9 +4632,9 @@ void LLPipeline::renderDebug()  					if (LLGLSLShader::sNoFixedFunction)  					{					  						gPathfindingProgram.bind();			 -						gPathfindingProgram.uniform1f("tint", 1.f); -						gPathfindingProgram.uniform1f("ambiance", 1.f); -						gPathfindingProgram.uniform1f("alpha_scale", 1.f); +						gPathfindingProgram.uniform1f(sTint, 1.f); +						gPathfindingProgram.uniform1f(sAmbiance, 1.f); +						gPathfindingProgram.uniform1f(sAlphaScale, 1.f);  					}  					//Requried character physics capsule render parameters @@ -4640,7 +4651,7 @@ void LLPipeline::renderDebug()  							llPathingLibInstance->renderSimpleShapeCapsuleID( gGL, id, pos, rot );				  							gGL.setColorMask(true, false);  							LLGLEnable blend(GL_BLEND); -							gPathfindingProgram.uniform1f("alpha_scale", 0.90f); +							gPathfindingProgram.uniform1f(sAlphaScale, 0.90f);  							llPathingLibInstance->renderSimpleShapeCapsuleID( gGL, id, pos, rot );  							gPathfindingProgram.bind();  						} @@ -4667,9 +4678,9 @@ void LLPipeline::renderDebug()  					{					  						gPathfindingProgram.bind(); -						gPathfindingProgram.uniform1f("tint", 1.f); -						gPathfindingProgram.uniform1f("ambiance", ambiance); -						gPathfindingProgram.uniform1f("alpha_scale", 1.f); +						gPathfindingProgram.uniform1f(sTint, 1.f); +						gPathfindingProgram.uniform1f(sAmbiance, ambiance); +						gPathfindingProgram.uniform1f(sAlphaScale, 1.f);  					}  					if ( !pathfindingConsole->isRenderWorld() ) @@ -4693,7 +4704,7 @@ void LLPipeline::renderDebug()  						if ( pathfindingConsole->isRenderWorld() )  						{					  							LLGLEnable blend(GL_BLEND); -							gPathfindingProgram.uniform1f("alpha_scale", 0.66f); +							gPathfindingProgram.uniform1f(sAlphaScale, 0.66f);  							llPathingLibInstance->renderNavMesh();  						}  						else @@ -4705,8 +4716,8 @@ void LLPipeline::renderDebug()  						if (LLGLSLShader::sNoFixedFunction)  						{  							gPathfindingNoNormalsProgram.bind(); -							gPathfindingNoNormalsProgram.uniform1f("tint", 1.f); -							gPathfindingNoNormalsProgram.uniform1f("alpha_scale", 1.f); +							gPathfindingNoNormalsProgram.uniform1f(sTint, 1.f); +							gPathfindingNoNormalsProgram.uniform1f(sAlphaScale, 1.f);  							llPathingLibInstance->renderNavMeshEdges();  							gPathfindingProgram.bind();  						} @@ -4746,7 +4757,7 @@ void LLPipeline::renderDebug()  							gGL.setColorMask(true, false);  							//render the bookends  							LLGLEnable blend(GL_BLEND); -							gPathfindingProgram.uniform1f("alpha_scale", 0.90f); +							gPathfindingProgram.uniform1f(sAlphaScale, 0.90f);  							llPathingLibInstance->renderPathBookend( gGL, LLPathingLib::LLPL_START );  							llPathingLibInstance->renderPathBookend( gGL, LLPathingLib::LLPL_END );  							gPathfindingProgram.bind(); @@ -4764,7 +4775,7 @@ void LLPipeline::renderDebug()  						if (LLGLSLShader::sNoFixedFunction)  						{  							LLGLEnable blend(GL_BLEND); -							gPathfindingProgram.uniform1f("alpha_scale", 0.90f); +							gPathfindingProgram.uniform1f(sAlphaScale, 0.90f);  							llPathingLibInstance->renderSimpleShapes( gGL, gAgent.getRegion()->getWaterHeight() );  						}  						else @@ -4812,7 +4823,7 @@ void LLPipeline::renderDebug()  							LLGLEnable blend(GL_BLEND);  							{ -								gPathfindingProgram.uniform1f("ambiance", ambiance); +								gPathfindingProgram.uniform1f(sAmbiance, ambiance);  								{ //draw solid overlay  									LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_LEQUAL); @@ -4827,8 +4838,8 @@ void LLPipeline::renderDebug()  								if (pathfindingConsole->isRenderXRay())  								{ -									gPathfindingProgram.uniform1f("tint", gSavedSettings.getF32("PathfindingXRayTint")); -									gPathfindingProgram.uniform1f("alpha_scale", gSavedSettings.getF32("PathfindingXRayOpacity")); +									gPathfindingProgram.uniform1f(sTint, gSavedSettings.getF32("PathfindingXRayTint")); +									gPathfindingProgram.uniform1f(sAlphaScale, gSavedSettings.getF32("PathfindingXRayOpacity"));  									LLGLEnable blend(GL_BLEND);  									LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_GREATER); @@ -4836,13 +4847,13 @@ void LLPipeline::renderDebug()  									if (gSavedSettings.getBOOL("PathfindingXRayWireframe"))  									{ //draw hidden wireframe as darker and less opaque -										gPathfindingProgram.uniform1f("ambiance", 1.f); +										gPathfindingProgram.uniform1f(sAmbiance, 1.f);  										llPathingLibInstance->renderNavMeshShapesVBO( render_order[i] );				  									}  									else  									{  										glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );	 -										gPathfindingProgram.uniform1f("ambiance", ambiance); +										gPathfindingProgram.uniform1f(sAmbiance, ambiance);  										llPathingLibInstance->renderNavMeshShapesVBO( render_order[i] );				  										glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);  									} @@ -4850,9 +4861,9 @@ void LLPipeline::renderDebug()  								{ //draw visible wireframe as brighter, thicker and more opaque  									glPolygonOffset(offset, offset); -									gPathfindingProgram.uniform1f("ambiance", 1.f); -									gPathfindingProgram.uniform1f("tint", 1.f); -									gPathfindingProgram.uniform1f("alpha_scale", 1.f); +									gPathfindingProgram.uniform1f(sAmbiance, 1.f); +									gPathfindingProgram.uniform1f(sTint, 1.f); +									gPathfindingProgram.uniform1f(sAlphaScale, 1.f);  									glLineWidth(gSavedSettings.getF32("PathfindingLineWidth"));  									LLGLDisable blendOut(GL_BLEND); @@ -4884,19 +4895,19 @@ void LLPipeline::renderDebug()  						glLineWidth(2.0f);	  						LLGLEnable cull(GL_CULL_FACE); -						gPathfindingProgram.uniform1f("tint", gSavedSettings.getF32("PathfindingXRayTint")); -						gPathfindingProgram.uniform1f("alpha_scale", gSavedSettings.getF32("PathfindingXRayOpacity")); +						gPathfindingProgram.uniform1f(sTint, gSavedSettings.getF32("PathfindingXRayTint")); +						gPathfindingProgram.uniform1f(sAlphaScale, gSavedSettings.getF32("PathfindingXRayOpacity"));  						if (gSavedSettings.getBOOL("PathfindingXRayWireframe"))  						{ //draw hidden wireframe as darker and less opaque  							glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );	 -							gPathfindingProgram.uniform1f("ambiance", 1.f); +							gPathfindingProgram.uniform1f(sAmbiance, 1.f);  							llPathingLibInstance->renderNavMesh();  							glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );	  						}	  						else  						{ -							gPathfindingProgram.uniform1f("ambiance", ambiance); +							gPathfindingProgram.uniform1f(sAmbiance, ambiance);  							llPathingLibInstance->renderNavMesh();  						} @@ -4904,8 +4915,8 @@ void LLPipeline::renderDebug()  						if (LLGLSLShader::sNoFixedFunction)  						{  							gPathfindingNoNormalsProgram.bind(); -							gPathfindingNoNormalsProgram.uniform1f("tint", gSavedSettings.getF32("PathfindingXRayTint")); -							gPathfindingNoNormalsProgram.uniform1f("alpha_scale", gSavedSettings.getF32("PathfindingXRayOpacity")); +							gPathfindingNoNormalsProgram.uniform1f(sTint, gSavedSettings.getF32("PathfindingXRayTint")); +							gPathfindingNoNormalsProgram.uniform1f(sAlphaScale, gSavedSettings.getF32("PathfindingXRayOpacity"));  							llPathingLibInstance->renderNavMeshEdges();  							gPathfindingProgram.bind();  						} @@ -7965,7 +7976,7 @@ void LLPipeline::renderDeferredLighting()  					}  				} -				gDeferredSunProgram.uniform3fv("offset", slice, offset); +				gDeferredSunProgram.uniform3fv(sOffset, slice, offset);  				{  					LLGLDisable blend(GL_BLEND); @@ -8009,10 +8020,10 @@ void LLPipeline::renderDeferredLighting()  				x += 1.f;  			} -			gDeferredBlurLightProgram.uniform2f("delta", 1.f, 0.f); -			gDeferredBlurLightProgram.uniform1f("dist_factor", dist_factor); -			gDeferredBlurLightProgram.uniform3fv("kern", kern_length, gauss[0].mV); -			gDeferredBlurLightProgram.uniform1f("kern_scale", blur_size * (kern_length/2.f - 0.5f)); +			gDeferredBlurLightProgram.uniform2f(sDelta, 1.f, 0.f); +			gDeferredBlurLightProgram.uniform1f(sDistFactor, dist_factor); +			gDeferredBlurLightProgram.uniform3fv(sKern, kern_length, gauss[0].mV); +			gDeferredBlurLightProgram.uniform1f(sKernScale, blur_size * (kern_length/2.f - 0.5f));  			{  				LLGLDisable blend(GL_BLEND); @@ -8029,7 +8040,7 @@ void LLPipeline::renderDeferredLighting()  			mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);  			mDeferredLight.bindTarget(); -			gDeferredBlurLightProgram.uniform2f("delta", 0.f, 1.f); +			gDeferredBlurLightProgram.uniform2f(sDelta, 0.f, 1.f);  			{  				LLGLDisable blend(GL_BLEND); @@ -10259,7 +10270,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  		avatar->mImpostor.clear();  		renderGeom(camera);  	} - +	  	LLDrawPoolAvatar::sMinimumAlpha = old_alpha;  	{ //create alpha mask based on depth buffer (grey out if muted) @@ -10312,13 +10323,13 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  		}  		{ -			gGL.begin(LLRender::QUADS); -			gGL.vertex3f(-1, -1, clip_plane); -			gGL.vertex3f(1, -1, clip_plane); -			gGL.vertex3f(1, 1, clip_plane); -			gGL.vertex3f(-1, 1, clip_plane); -			gGL.end(); -			gGL.flush(); +		gGL.begin(LLRender::QUADS); +		gGL.vertex3f(-1, -1, clip_plane); +		gGL.vertex3f(1, -1, clip_plane); +		gGL.vertex3f(1, 1, clip_plane); +		gGL.vertex3f(-1, 1, clip_plane); +		gGL.end(); +		gGL.flush();  		}  		if (LLGLSLShader::sNoFixedFunction) diff --git a/indra/newview/tests/llagentaccess_test.cpp b/indra/newview/tests/llagentaccess_test.cpp index 3ba25f3c10..426ad40342 100644 --- a/indra/newview/tests/llagentaccess_test.cpp +++ b/indra/newview/tests/llagentaccess_test.cpp @@ -40,7 +40,7 @@  static U32 test_preferred_maturity = SIM_ACCESS_PG;  LLControlGroup::LLControlGroup(const std::string& name) -	: LLInstanceTracker<LLControlGroup, std::string>(name) +	: INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)(name)  {  } diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index 7705b4c567..25da5939f1 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -167,7 +167,7 @@ std::string LLGridManager::getAppSLURLBase(const std::string& grid_name)  LLControlGroup gSavedSettings("Global");  LLControlGroup::LLControlGroup(const std::string& name) : -	LLInstanceTracker<LLControlGroup, std::string>(name){} +	INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)(name){}  LLControlGroup::~LLControlGroup() {}  void LLControlGroup::setBOOL(const std::string& name, BOOL val) {}  BOOL LLControlGroup::getBOOL(const std::string& name) { return FALSE; } diff --git a/indra/newview/tests/llremoteparcelrequest_test.cpp b/indra/newview/tests/llremoteparcelrequest_test.cpp index ed66066b0a..da273132db 100644 --- a/indra/newview/tests/llremoteparcelrequest_test.cpp +++ b/indra/newview/tests/llremoteparcelrequest_test.cpp @@ -69,7 +69,7 @@ void LLAgent::sendReliableMessage(void) { }  LLUUID gAgentSessionID;  LLUUID gAgentID;  LLUIColor::LLUIColor(void) { } -LLControlGroup::LLControlGroup(std::string const & name) : LLInstanceTracker<LLControlGroup, std::string>(name) { } +LLControlGroup::LLControlGroup(std::string const & name) : INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)(name) { }  LLControlGroup::~LLControlGroup(void) { }  void LLUrlEntryParcel::processParcelInfo(const LLUrlEntryParcel::LLParcelData& parcel_data) { } diff --git a/indra/newview/tests/llsecapi_test.cpp b/indra/newview/tests/llsecapi_test.cpp index 703603e2db..83a4149971 100644 --- a/indra/newview/tests/llsecapi_test.cpp +++ b/indra/newview/tests/llsecapi_test.cpp @@ -37,7 +37,7 @@  // Mock objects for the dependencies of the code we're testing                                 LLControlGroup::LLControlGroup(const std::string& name) -: LLInstanceTracker<LLControlGroup, std::string>(name) {} +: INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)(name) {}  LLControlGroup::~LLControlGroup() {}  BOOL LLControlGroup::declareString(const std::string& name,                                     const std::string& initial_val, diff --git a/indra/newview/tests/llsechandler_basic_test.cpp b/indra/newview/tests/llsechandler_basic_test.cpp index 0235400976..814010028f 100644 --- a/indra/newview/tests/llsechandler_basic_test.cpp +++ b/indra/newview/tests/llsechandler_basic_test.cpp @@ -69,7 +69,7 @@ extern bool _cert_hostname_wildcard_match(const std::string& hostname, const std  std::string gFirstName;  std::string gLastName;  LLControlGroup::LLControlGroup(const std::string& name) -: LLInstanceTracker<LLControlGroup, std::string>(name) {} +: INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)(name) {}  LLControlGroup::~LLControlGroup() {}  BOOL LLControlGroup::declareString(const std::string& name,                                     const std::string& initial_val, diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp index 09343ef227..d7debd6c67 100644 --- a/indra/newview/tests/llslurl_test.cpp +++ b/indra/newview/tests/llslurl_test.cpp @@ -35,7 +35,7 @@  // Mock objects for the dependencies of the code we're testing  LLControlGroup::LLControlGroup(const std::string& name) -: LLInstanceTracker<LLControlGroup, std::string>(name) {} +: INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)(name) {}  LLControlGroup::~LLControlGroup() {}  BOOL LLControlGroup::declareString(const std::string& name,                                     const std::string& initial_val, diff --git a/indra/newview/tests/lltranslate_test.cpp b/indra/newview/tests/lltranslate_test.cpp index fd9527d631..c13660332d 100644 --- a/indra/newview/tests/lltranslate_test.cpp +++ b/indra/newview/tests/lltranslate_test.cpp @@ -295,7 +295,7 @@ LLControlGroup gSavedSettings("test");  std::string LLUI::getLanguage() { return "en"; }  std::string LLTrans::getString(const std::string &xml_desc, const LLStringUtil::format_map_t& args) { return "dummy"; } -LLControlGroup::LLControlGroup(const std::string& name) : LLInstanceTracker<LLControlGroup, std::string>(name) {} +LLControlGroup::LLControlGroup(const std::string& name) : INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)(name) {}  std::string LLControlGroup::getString(const std::string& name) { return "dummy"; }  LLControlGroup::~LLControlGroup() {} diff --git a/indra/newview/tests/llviewerhelputil_test.cpp b/indra/newview/tests/llviewerhelputil_test.cpp index 710881d811..102cad8852 100644 --- a/indra/newview/tests/llviewerhelputil_test.cpp +++ b/indra/newview/tests/llviewerhelputil_test.cpp @@ -47,7 +47,7 @@ static std::string gOS;  // Mock objects for the dependencies of the code we're testing  LLControlGroup::LLControlGroup(const std::string& name) -	: LLInstanceTracker<LLControlGroup, std::string>(name) {} +	: INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)(name) {}  LLControlGroup::~LLControlGroup() {}  BOOL LLControlGroup::declareString(const std::string& name,  				   const std::string& initial_val, diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp index a1e97ea17e..725b5122fb 100644 --- a/indra/newview/tests/llviewernetwork_test.cpp +++ b/indra/newview/tests/llviewernetwork_test.cpp @@ -35,7 +35,7 @@  // Mock objects for the dependencies of the code we're testing  LLControlGroup::LLControlGroup(const std::string& name) -: LLInstanceTracker<LLControlGroup, std::string>(name) {} +: INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)(name) {}  LLControlGroup::~LLControlGroup() {}  BOOL LLControlGroup::declareString(const std::string& name,                                     const std::string& initial_val, diff --git a/indra/newview/tests/llworldmipmap_test.cpp b/indra/newview/tests/llworldmipmap_test.cpp index e7ef017760..47453a1b1a 100644 --- a/indra/newview/tests/llworldmipmap_test.cpp +++ b/indra/newview/tests/llworldmipmap_test.cpp @@ -46,7 +46,7 @@ void LLViewerTexture::setBoostLevel(S32 ) { }  LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const std::string&, BOOL, LLViewerTexture::EBoostLevel, S8,   																		 LLGLint, LLGLenum, const LLUUID& ) { return NULL; } -LLControlGroup::LLControlGroup(const std::string& name) : LLInstanceTracker<LLControlGroup, std::string>(name) { } +LLControlGroup::LLControlGroup(const std::string& name) : INSTANCE_TRACKER_KEYED(LLControlGroup, std::string)(name) { }  LLControlGroup::~LLControlGroup() { }  std::string LLControlGroup::getString(const std::string& ) { return std::string("test_url"); }  LLControlGroup gSavedSettings("test_settings");  | 
