From 76f5b15269765de65fd52b6966466456fb9dfc19 Mon Sep 17 00:00:00 2001 From: Tank_Master Date: Thu, 27 Jun 2013 13:26:29 -0700 Subject: [PATCH 01/16] Add AMD Radeon HD Mobile 7000 and 8000 series GPUs to GPU table --- indra/newview/gpu_table.txt | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 1fe9c7de6f..6677962c90 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -157,14 +157,31 @@ ATI Mobility Radeon HD 5400 .*ATI.*Mobility.*HD *54.* 2 1 1 4.2 ATI Mobility Radeon HD 5500 .*ATI.*Mobility.*HD *55.* 3 1 0 0 ATI Mobility Radeon HD 5600 .*ATI.*Mobility.*HD *56.* 3 1 1 4.2 ATI Mobility Radeon HD 5700 .*ATI.*Mobility.*HD *57.* 3 1 1 4.1 -ATI Mobility Radeon HD 6200 .*ATI.*Mobility.*HD *62.* 3 1 0 0 -ATI Mobility Radeon HD 6300 .*ATI.*Mobility.*HD *63.* 3 1 1 4.2 +ATI Mobility Radeon HD 6200M .*ATI.*Mobility.*HD *62.* 3 1 0 0 +ATI Mobility Radeon HD 6300M .*ATI.*Mobility.*HD *63.* 3 1 1 4.2 ATI Mobility Radeon HD 6400M .*ATI.*Mobility.*HD *64.* 3 1 0 0 ATI Mobility Radeon HD 6500M .*ATI.*Mobility.*HD *65.* 5 1 1 4.2 ATI Mobility Radeon HD 6600M .*ATI.*Mobility.*HD *66.* 5 1 0 0 ATI Mobility Radeon HD 6700M .*ATI.*Mobility.*HD *67.* 5 1 0 0 +//ATI Radeon HD 6700M .*ATI.*Radeon.*HD *67..M.* 5 1 0 0 TM-testing ATI Mobility Radeon HD 6800M .*ATI.*Mobility.*HD *68.* 5 1 0 0 ATI Mobility Radeon HD 6900M .*ATI.*Mobility.*HD *69.* 5 1 0 0 +ATI Radeon HD 7200M .*ATI.*Radeon.*HD *72..M.* 3 1 0 0 +ATI Radeon HD 7300M .*ATI.*Radeon.*HD *73..M.* 3 1 0 0 +ATI Radeon HD 7400M .*ATI.*Radeon.*HD *74..M.* 3 1 0 0 +ATI Radeon HD 7500M .*ATI.*Radeon.*HD *75..M.* 5 1 0 0 +ATI Radeon HD 7600M .*ATI.*Radeon.*HD *76..M.* 5 1 0 0 +ATI Radeon HD 7700M .*ATI.*Radeon.*HD *77..M.* 5 1 0 0 +ATI Radeon HD 7800M .*ATI.*Radeon.*HD *78..M.* 5 1 0 0 +ATI Radeon HD 7900M .*ATI.*Radeon.*HD *79..M.* 5 1 0 0 +ATI Radeon HD 8200M .*ATI.*Radeon.*HD *82..M.* 3 1 0 0 +ATI Radeon HD 8300M .*ATI.*Radeon.*HD *83..M.* 3 1 0 0 +ATI Radeon HD 8400M .*ATI.*Radeon.*HD *84..M.* 5 1 0 0 +ATI Radeon HD 8500M .*ATI.*Radeon.*HD *85..M.* 5 1 0 0 +ATI Radeon HD 8600M .*ATI.*Radeon.*HD *86..M.* 5 1 0 0 +ATI Radeon HD 8700M .*ATI.*Radeon.*HD *87..M.* 5 1 0 0 +ATI Radeon HD 8800M .*ATI.*Radeon.*HD *88..M.* 5 1 0 0 +ATI Radeon HD 8900M .*ATI.*Radeon.*HD *89..M.* 5 1 0 0 ATI Radeon HD 2300 .*ATI.*Radeon HD *23.. 0 1 1 3.3 ATI Radeon HD 2400 .*ATI.*Radeon HD *24.. 1 1 1 4 ATI Radeon HD 2600 .*ATI.*Radeon HD *26.. 2 1 1 3.3 From b72f2d6987a25afb8fe2634b539d0150e126ed8e Mon Sep 17 00:00:00 2001 From: Tank_Master Date: Thu, 27 Jun 2013 16:05:50 -0700 Subject: [PATCH 02/16] Modify AMD 6000M series in the GPU table --- indra/newview/gpu_table.txt | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 6677962c90..efbafc4e2d 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -157,15 +157,14 @@ ATI Mobility Radeon HD 5400 .*ATI.*Mobility.*HD *54.* 2 1 1 4.2 ATI Mobility Radeon HD 5500 .*ATI.*Mobility.*HD *55.* 3 1 0 0 ATI Mobility Radeon HD 5600 .*ATI.*Mobility.*HD *56.* 3 1 1 4.2 ATI Mobility Radeon HD 5700 .*ATI.*Mobility.*HD *57.* 3 1 1 4.1 -ATI Mobility Radeon HD 6200M .*ATI.*Mobility.*HD *62.* 3 1 0 0 -ATI Mobility Radeon HD 6300M .*ATI.*Mobility.*HD *63.* 3 1 1 4.2 -ATI Mobility Radeon HD 6400M .*ATI.*Mobility.*HD *64.* 3 1 0 0 -ATI Mobility Radeon HD 6500M .*ATI.*Mobility.*HD *65.* 5 1 1 4.2 -ATI Mobility Radeon HD 6600M .*ATI.*Mobility.*HD *66.* 5 1 0 0 -ATI Mobility Radeon HD 6700M .*ATI.*Mobility.*HD *67.* 5 1 0 0 -//ATI Radeon HD 6700M .*ATI.*Radeon.*HD *67..M.* 5 1 0 0 TM-testing -ATI Mobility Radeon HD 6800M .*ATI.*Mobility.*HD *68.* 5 1 0 0 -ATI Mobility Radeon HD 6900M .*ATI.*Mobility.*HD *69.* 5 1 0 0 +ATI Radeon HD 6200M .*ATI.*Radeon.*HD *62..M.* 3 1 0 0 +ATI Radeon HD 6300M .*ATI.*Radeon.*HD *63..M.* 3 1 1 4.2 +ATI Radeon HD 6400M .*ATI.*Radeon.*HD *64..M.* 3 1 0 0 +ATI Radeon HD 6500M .*ATI.*Radeon.*HD *65..M.* 5 1 1 4.2 +ATI Radeon HD 6600M .*ATI.*Radeon.*HD *66..M.* 5 1 0 0 +ATI Radeon HD 6700M .*ATI.*Radeon.*HD *67..M.* 5 1 0 0 +ATI Radeon HD 6800M .*ATI.*Radeon.*HD *68..M.* 5 1 0 0 +ATI Radeon HD 6900M .*ATI.*Radeon.*HD *69..M.* 5 1 0 0 ATI Radeon HD 7200M .*ATI.*Radeon.*HD *72..M.* 3 1 0 0 ATI Radeon HD 7300M .*ATI.*Radeon.*HD *73..M.* 3 1 0 0 ATI Radeon HD 7400M .*ATI.*Radeon.*HD *74..M.* 3 1 0 0 From b06a4d144df22ba445c6c751290f81a086f630ce Mon Sep 17 00:00:00 2001 From: Tank_Master Date: Thu, 27 Jun 2013 16:09:08 -0700 Subject: [PATCH 03/16] Refactor AMD GPU list, put AMD ASUS together, near top, move ATI Radeon HD 7000 to after ATI Radeon HD 6000 series --- indra/newview/gpu_table.txt | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index efbafc4e2d..1d3e1fd63e 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -103,18 +103,6 @@ ATI M56 .*ATI.*M56.* 1 1 0 0 ATI M71 .*ATI.*M71.* 1 1 0 0 ATI M72 .*ATI.*M72.* 1 1 0 0 ATI M76 .*ATI.*M76.* 3 1 0 0 -ATI Radeon HD 64xx .*ATI.*AMD Radeon.* HD [67]4..[MG] 2 1 1 4.2 -ATI Radeon HD 65xx .*ATI.*AMD Radeon.* HD [67]5..[MG] 2 1 1 4.2 -ATI Radeon HD 66xx .*ATI.*AMD Radeon.* HD [67]6..[MG] 3 1 1 4.2 -ATI Radeon HD 7100 .*ATI.*AMD Radeon.* HD 71.* 2 1 0 0 -ATI Radeon HD 7200 .*ATI.*AMD Radeon.* HD 72.* 2 1 0 0 -ATI Radeon HD 7300 .*ATI.*AMD Radeon.* HD 73.* 2 1 0 4.2 -ATI Radeon HD 7400 .*ATI.*AMD Radeon.* HD 74.* 2 1 0 4.2 -ATI Radeon HD 7500 .*ATI.*AMD Radeon.* HD 75.* 3 1 1 4.2 -ATI Radeon HD 7600 .*ATI.*AMD Radeon.* HD 76.* 3 1 0 4.2 -ATI Radeon HD 7700 .*ATI.*AMD Radeon.* HD 77.* 4 1 1 4.2 -ATI Radeon HD 7800 .*ATI.*AMD Radeon.* HD 78.* 5 1 1 4.2 -ATI Radeon HD 7900 .*ATI.*AMD Radeon.* HD 79.* 5 1 1 4.2 ATI ASUS HD7100 .*ATI.*ASUS.* HD71.* 2 1 0 0 ATI ASUS HD7200 .*ATI.*ASUS.* HD72.* 2 1 0 0 ATI ASUS HD7300 .*ATI.*ASUS.* HD73.* 2 1 0 0 @@ -124,6 +112,8 @@ ATI ASUS HD7600 .*ATI.*ASUS.* HD76.* 3 1 0 0 ATI ASUS HD7700 .*ATI.*ASUS.* HD77.* 4 1 1 4.2 ATI ASUS HD7800 .*ATI.*ASUS.* HD78.* 5 1 1 4.2 ATI ASUS HD7900 .*ATI.*ASUS.* HD79.* 5 1 1 4.2 +ATI ASUS EAH5400 .*ATI.*ASUS EAH54.. 3 1 1 4.2 +ATI ASUS EAH5500 .*ATI.*ASUS EAH55.. 3 1 1 4.2 ATI Mobility Radeon 4100 .*ATI.*Mobility.*41.. 1 1 1 3.3 ATI Mobility Radeon 7xxx .*ATI.*Mobility.*Radeon 7.* 0 1 1 1.3 ATI Mobility Radeon 8xxx .*ATI.*Mobility.*Radeon 8.* 0 1 0 0 @@ -203,10 +193,8 @@ ATI Radeon HD 4500 .*ATI.*Radeon HD *45.. 2 1 1 3.3 ATI Radeon HD 4600 .*ATI.*Radeon HD *46.. 3 1 1 4 ATI Radeon HD 4700 .*ATI.*Radeon HD *47.. 3 1 1 3.3 ATI Radeon HD 4800 .*ATI.*Radeon HD *48.. 3 1 1 4 -ATI ASUS EAH5400 .*ATI.*ASUS EAH54.. 3 1 1 4.2 ATI Radeon HD 5400 .*ATI.*Radeon HD *54.. 3 1 1 4.2 ATI Radeon HD 5500 .*ATI.*Radeon HD *55.. 3 1 1 4.2 -ATI ASUS EAH5500 .*ATI.*ASUS EAH55.. 3 1 1 4.2 ATI Radeon HD 5600 .*ATI.*Radeon HD *56.. 3 1 1 4.2 ATI Radeon HD 5700 .*ATI.*Radeon HD *57.. 3 1 1 4.2 ATI Radeon HD 5800 .*ATI.*Radeon HD *58.. 4 1 1 4.2 @@ -219,6 +207,15 @@ ATI Radeon HD 6600 .*ATI.*Radeon HD *66.. 3 1 1 4.2 ATI Radeon HD 6700 .*ATI.*Radeon HD *67.. 3 1 1 4.2 ATI Radeon HD 6800 .*ATI.*Radeon HD *68.. 4 1 1 4.2 ATI Radeon HD 6900 .*ATI.*Radeon HD *69.. 5 1 1 4.2 +ATI Radeon HD 7100 .*ATI.*Radeon HD 71.* 2 1 0 0 +ATI Radeon HD 7200 .*ATI.*Radeon HD 72.* 2 1 0 0 +ATI Radeon HD 7300 .*ATI.*Radeon HD 73.* 2 1 0 4.2 +ATI Radeon HD 7400 .*ATI.*Radeon HD 74.* 2 1 0 4.2 +ATI Radeon HD 7500 .*ATI.*Radeon HD 75.* 3 1 1 4.2 +ATI Radeon HD 7600 .*ATI.*Radeon HD 76.* 3 1 0 4.2 +ATI Radeon HD 7700 .*ATI.*Radeon HD 77.* 4 1 1 4.2 +ATI Radeon HD 7800 .*ATI.*Radeon HD 78.* 5 1 1 4.2 +ATI Radeon HD 7900 .*ATI.*Radeon HD 79.* 5 1 1 4.2 ATI Radeon OpenGL .*ATI.*Radeon OpenGL.* 0 0 0 0 ATI Radeon 2100 .*ATI.*Radeon 21.. 0 1 1 2.1 ATI Radeon 3000 .*ATI.*Radeon 30.. 1 1 1 4 From 2118aef0edd1cdd309c6e2318828bd9cbfb0c257 Mon Sep 17 00:00:00 2001 From: Tank_Master Date: Thu, 27 Jun 2013 17:07:46 -0700 Subject: [PATCH 04/16] Updated AMD mobile strings to also include G and D series, updated AMD desktop varents to handle more cases. --- indra/newview/gpu_table.txt | 148 ++++++++++++++++++------------------ 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 1d3e1fd63e..f59482437a 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -20,12 +20,12 @@ // // // Class Numbers: -// 0 - Defaults to low graphics settings. No shaders on by default -// 1 - Defaults to mid graphics settings. Basic shaders on by default -// 2 - Defaults to high graphics settings. Atmospherics on by default. -// 3 - Same as 2, but with lighting and shadows enabled. -// 4 - Same as 3, but with ambient occlusion enabled. -// 5 - Same as 4, but with shadows set to "Sun/Moon+Projectors." +// 0 - Defaults to low graphics settings. No shaders on by default +// 1 - Defaults to low-mid graphics settings. Basic shaders on by default +// 2 - Defaults to mid graphics settings. Atmospherics on by default +// 3 - Defaults to mid-high graphics settings. Advanced Lighting Model on by default +// 4 - Defaults to high graphics settings. Ambient Occlusion on by default +// 5 - Defaults to high-ultra graphics settings. Shadows set to "Sun/Moon+Projectors." // // Supported Number: // 0 - We claim to not support this card. @@ -147,75 +147,75 @@ ATI Mobility Radeon HD 5400 .*ATI.*Mobility.*HD *54.* 2 1 1 4.2 ATI Mobility Radeon HD 5500 .*ATI.*Mobility.*HD *55.* 3 1 0 0 ATI Mobility Radeon HD 5600 .*ATI.*Mobility.*HD *56.* 3 1 1 4.2 ATI Mobility Radeon HD 5700 .*ATI.*Mobility.*HD *57.* 3 1 1 4.1 -ATI Radeon HD 6200M .*ATI.*Radeon.*HD *62..M.* 3 1 0 0 -ATI Radeon HD 6300M .*ATI.*Radeon.*HD *63..M.* 3 1 1 4.2 -ATI Radeon HD 6400M .*ATI.*Radeon.*HD *64..M.* 3 1 0 0 -ATI Radeon HD 6500M .*ATI.*Radeon.*HD *65..M.* 5 1 1 4.2 -ATI Radeon HD 6600M .*ATI.*Radeon.*HD *66..M.* 5 1 0 0 -ATI Radeon HD 6700M .*ATI.*Radeon.*HD *67..M.* 5 1 0 0 -ATI Radeon HD 6800M .*ATI.*Radeon.*HD *68..M.* 5 1 0 0 -ATI Radeon HD 6900M .*ATI.*Radeon.*HD *69..M.* 5 1 0 0 -ATI Radeon HD 7200M .*ATI.*Radeon.*HD *72..M.* 3 1 0 0 -ATI Radeon HD 7300M .*ATI.*Radeon.*HD *73..M.* 3 1 0 0 -ATI Radeon HD 7400M .*ATI.*Radeon.*HD *74..M.* 3 1 0 0 -ATI Radeon HD 7500M .*ATI.*Radeon.*HD *75..M.* 5 1 0 0 -ATI Radeon HD 7600M .*ATI.*Radeon.*HD *76..M.* 5 1 0 0 -ATI Radeon HD 7700M .*ATI.*Radeon.*HD *77..M.* 5 1 0 0 -ATI Radeon HD 7800M .*ATI.*Radeon.*HD *78..M.* 5 1 0 0 -ATI Radeon HD 7900M .*ATI.*Radeon.*HD *79..M.* 5 1 0 0 -ATI Radeon HD 8200M .*ATI.*Radeon.*HD *82..M.* 3 1 0 0 -ATI Radeon HD 8300M .*ATI.*Radeon.*HD *83..M.* 3 1 0 0 -ATI Radeon HD 8400M .*ATI.*Radeon.*HD *84..M.* 5 1 0 0 -ATI Radeon HD 8500M .*ATI.*Radeon.*HD *85..M.* 5 1 0 0 -ATI Radeon HD 8600M .*ATI.*Radeon.*HD *86..M.* 5 1 0 0 -ATI Radeon HD 8700M .*ATI.*Radeon.*HD *87..M.* 5 1 0 0 -ATI Radeon HD 8800M .*ATI.*Radeon.*HD *88..M.* 5 1 0 0 -ATI Radeon HD 8900M .*ATI.*Radeon.*HD *89..M.* 5 1 0 0 -ATI Radeon HD 2300 .*ATI.*Radeon HD *23.. 0 1 1 3.3 -ATI Radeon HD 2400 .*ATI.*Radeon HD *24.. 1 1 1 4 -ATI Radeon HD 2600 .*ATI.*Radeon HD *26.. 2 1 1 3.3 -ATI Radeon HD 2900 .*ATI.*Radeon HD *29.. 3 1 1 3.3 -ATI Radeon HD 3000 .*ATI.*Radeon HD *30.. 0 1 0 0 -ATI Radeon HD 3100 .*ATI.*Radeon HD *31.. 1 1 0 0 -ATI Radeon HD 3200 .*ATI.*Radeon HD *32.. 1 1 1 4 -ATI Radeon HD 3300 .*ATI.*Radeon HD *33.. 1 1 1 3.3 -ATI Radeon HD 3400 .*ATI.*Radeon HD *34.. 1 1 1 4 -ATI Radeon HD 3500 .*ATI.*Radeon HD *35.. 2 1 0 0 -ATI Radeon HD 3600 .*ATI.*Radeon HD *36.. 3 1 1 3.3 -ATI Radeon HD 3700 .*ATI.*Radeon HD *37.. 3 1 0 0 +ATI Radeon HD 6200M .*ATI.*Radeon.*HD *62..[DGM].* 3 1 0 0 +ATI Radeon HD 6300M .*ATI.*Radeon.*HD *63..[DGM].* 3 1 1 4.2 +ATI Radeon HD 6400M .*ATI.*Radeon.*HD *64..[DGM].* 3 1 0 0 +ATI Radeon HD 6500M .*ATI.*Radeon.*HD *65..[DGM].* 4 1 1 4.2 +ATI Radeon HD 6600M .*ATI.*Radeon.*HD *66..[DGM].* 4 1 0 0 +ATI Radeon HD 6700M .*ATI.*Radeon.*HD *67..[DGM].* 4 1 0 0 +ATI Radeon HD 6800M .*ATI.*Radeon.*HD *68..[DGM].* 4 1 0 0 +ATI Radeon HD 6900M .*ATI.*Radeon.*HD *69..[DGM].* 4 1 0 0 +ATI Radeon HD 7200M .*ATI.*Radeon.*HD *72..[DGM].* 3 1 0 0 +ATI Radeon HD 7300M .*ATI.*Radeon.*HD *73..[DGM].* 3 1 0 0 +ATI Radeon HD 7400M .*ATI.*Radeon.*HD *74..[DGM].* 3 1 0 0 +ATI Radeon HD 7500M .*ATI.*Radeon.*HD *75..[DGM].* 4 1 0 0 +ATI Radeon HD 7600M .*ATI.*Radeon.*HD *76..[DGM].* 4 1 0 0 +ATI Radeon HD 7700M .*ATI.*Radeon.*HD *77..[DGM].* 4 1 0 0 +ATI Radeon HD 7800M .*ATI.*Radeon.*HD *78..[DGM].* 4 1 0 0 +ATI Radeon HD 7900M .*ATI.*Radeon.*HD *79..[DGM].* 4 1 0 0 +ATI Radeon HD 8200M .*ATI.*Radeon.*HD *82..[DGM].* 3 1 0 0 +ATI Radeon HD 8300M .*ATI.*Radeon.*HD *83..[DGM].* 3 1 0 0 +ATI Radeon HD 8400M .*ATI.*Radeon.*HD *84..[DGM].* 4 1 0 0 +ATI Radeon HD 8500M .*ATI.*Radeon.*HD *85..[DGM].* 4 1 0 0 +ATI Radeon HD 8600M .*ATI.*Radeon.*HD *86..[DGM].* 4 1 0 0 +ATI Radeon HD 8700M .*ATI.*Radeon.*HD *87..[DGM].* 4 1 0 0 +ATI Radeon HD 8800M .*ATI.*Radeon.*HD *88..[DGM].* 4 1 0 0 +ATI Radeon HD 8900M .*ATI.*Radeon.*HD *89..[DGM].* 4 1 0 0 +ATI Radeon HD 2300 .*ATI.*Radeon HD *23.* 0 1 1 3.3 +ATI Radeon HD 2400 .*ATI.*Radeon HD *24.* 1 1 1 4 +ATI Radeon HD 2600 .*ATI.*Radeon HD *26.* 2 1 1 3.3 +ATI Radeon HD 2900 .*ATI.*Radeon HD *29.* 3 1 1 3.3 +ATI Radeon HD 3000 .*ATI.*Radeon HD *30.* 0 1 0 0 +ATI Radeon HD 3100 .*ATI.*Radeon HD *31.* 1 1 0 0 +ATI Radeon HD 3200 .*ATI.*Radeon HD *32.* 1 1 1 4 +ATI Radeon HD 3300 .*ATI.*Radeon HD *33.* 1 1 1 3.3 +ATI Radeon HD 3400 .*ATI.*Radeon HD *34.* 1 1 1 4 +ATI Radeon HD 3500 .*ATI.*Radeon HD *35.* 2 1 0 0 +ATI Radeon HD 3600 .*ATI.*Radeon HD *36.* 3 1 1 3.3 +ATI Radeon HD 3700 .*ATI.*Radeon HD *37.* 3 1 0 0 ATI HD3700 .*ATI.* HD37.. 3 1 0 3.3 -ATI Radeon HD 3800 .*ATI.*Radeon HD *38.. 3 1 1 4 -ATI Radeon HD 4100 .*ATI.*Radeon HD *41.. 1 1 0 0 -ATI Radeon HD 4200 .*ATI.*Radeon HD *42.. 1 1 1 4 -ATI Radeon HD 4300 .*ATI.*Radeon HD *43.. 2 1 1 4 -ATI Radeon HD 4400 .*ATI.*Radeon HD *44.. 2 1 0 0 -ATI Radeon HD 4500 .*ATI.*Radeon HD *45.. 2 1 1 3.3 -ATI Radeon HD 4600 .*ATI.*Radeon HD *46.. 3 1 1 4 -ATI Radeon HD 4700 .*ATI.*Radeon HD *47.. 3 1 1 3.3 -ATI Radeon HD 4800 .*ATI.*Radeon HD *48.. 3 1 1 4 -ATI Radeon HD 5400 .*ATI.*Radeon HD *54.. 3 1 1 4.2 -ATI Radeon HD 5500 .*ATI.*Radeon HD *55.. 3 1 1 4.2 -ATI Radeon HD 5600 .*ATI.*Radeon HD *56.. 3 1 1 4.2 -ATI Radeon HD 5700 .*ATI.*Radeon HD *57.. 3 1 1 4.2 -ATI Radeon HD 5800 .*ATI.*Radeon HD *58.. 4 1 1 4.2 -ATI Radeon HD 5900 .*ATI.*Radeon HD *59.. 4 1 1 4.2 -ATI Radeon HD 6200 .*ATI.*Radeon HD *62.. 0 1 1 4.2 -ATI Radeon HD 6300 .*ATI.*Radeon HD *63.. 1 1 1 4.2 -ATI Radeon HD 6400 .*ATI.*Radeon HD *64.. 3 1 1 4.2 -ATI Radeon HD 6500 .*ATI.*Radeon HD *65.. 3 1 1 4.2 -ATI Radeon HD 6600 .*ATI.*Radeon HD *66.. 3 1 1 4.2 -ATI Radeon HD 6700 .*ATI.*Radeon HD *67.. 3 1 1 4.2 -ATI Radeon HD 6800 .*ATI.*Radeon HD *68.. 4 1 1 4.2 -ATI Radeon HD 6900 .*ATI.*Radeon HD *69.. 5 1 1 4.2 -ATI Radeon HD 7100 .*ATI.*Radeon HD 71.* 2 1 0 0 -ATI Radeon HD 7200 .*ATI.*Radeon HD 72.* 2 1 0 0 -ATI Radeon HD 7300 .*ATI.*Radeon HD 73.* 2 1 0 4.2 -ATI Radeon HD 7400 .*ATI.*Radeon HD 74.* 2 1 0 4.2 -ATI Radeon HD 7500 .*ATI.*Radeon HD 75.* 3 1 1 4.2 -ATI Radeon HD 7600 .*ATI.*Radeon HD 76.* 3 1 0 4.2 -ATI Radeon HD 7700 .*ATI.*Radeon HD 77.* 4 1 1 4.2 -ATI Radeon HD 7800 .*ATI.*Radeon HD 78.* 5 1 1 4.2 -ATI Radeon HD 7900 .*ATI.*Radeon HD 79.* 5 1 1 4.2 +ATI Radeon HD 3800 .*ATI.*Radeon HD *38.* 3 1 1 4 +ATI Radeon HD 4100 .*ATI.*Radeon HD *41.* 1 1 0 0 +ATI Radeon HD 4200 .*ATI.*Radeon HD *42.* 1 1 1 4 +ATI Radeon HD 4300 .*ATI.*Radeon HD *43.* 2 1 1 4 +ATI Radeon HD 4400 .*ATI.*Radeon HD *44.* 2 1 0 0 +ATI Radeon HD 4500 .*ATI.*Radeon HD *45.* 2 1 1 3.3 +ATI Radeon HD 4600 .*ATI.*Radeon HD *46.* 3 1 1 4 +ATI Radeon HD 4700 .*ATI.*Radeon HD *47.* 3 1 1 3.3 +ATI Radeon HD 4800 .*ATI.*Radeon HD *48.* 3 1 1 4 +ATI Radeon HD 5400 .*ATI.*Radeon HD *54.* 3 1 1 4.2 +ATI Radeon HD 5500 .*ATI.*Radeon HD *55.* 3 1 1 4.2 +ATI Radeon HD 5600 .*ATI.*Radeon HD *56.* 3 1 1 4.2 +ATI Radeon HD 5700 .*ATI.*Radeon HD *57.* 3 1 1 4.2 +ATI Radeon HD 5800 .*ATI.*Radeon HD *58.* 4 1 1 4.2 +ATI Radeon HD 5900 .*ATI.*Radeon HD *59.* 4 1 1 4.2 +ATI Radeon HD 6200 .*ATI.*Radeon HD *62.* 0 1 1 4.2 +ATI Radeon HD 6300 .*ATI.*Radeon HD *63.* 1 1 1 4.2 +ATI Radeon HD 6400 .*ATI.*Radeon HD *64.* 3 1 1 4.2 +ATI Radeon HD 6500 .*ATI.*Radeon HD *65.* 3 1 1 4.2 +ATI Radeon HD 6600 .*ATI.*Radeon HD *66.* 3 1 1 4.2 +ATI Radeon HD 6700 .*ATI.*Radeon HD *67.* 3 1 1 4.2 +ATI Radeon HD 6800 .*ATI.*Radeon HD *68.* 4 1 1 4.2 +ATI Radeon HD 6900 .*ATI.*Radeon HD *69.* 5 1 1 4.2 +ATI Radeon HD 7100 .*ATI.*Radeon HD *71.* 2 1 0 0 +ATI Radeon HD 7200 .*ATI.*Radeon HD *72.* 2 1 0 0 +ATI Radeon HD 7300 .*ATI.*Radeon HD *73.* 2 1 0 4.2 +ATI Radeon HD 7400 .*ATI.*Radeon HD *74.* 2 1 0 4.2 +ATI Radeon HD 7500 .*ATI.*Radeon HD *75.* 3 1 1 4.2 +ATI Radeon HD 7600 .*ATI.*Radeon HD *76.* 3 1 0 4.2 +ATI Radeon HD 7700 .*ATI.*Radeon HD *77.* 4 1 1 4.2 +ATI Radeon HD 7800 .*ATI.*Radeon HD *78.* 5 1 1 4.2 +ATI Radeon HD 7900 .*ATI.*Radeon HD *79.* 5 1 1 4.2 ATI Radeon OpenGL .*ATI.*Radeon OpenGL.* 0 0 0 0 ATI Radeon 2100 .*ATI.*Radeon 21.. 0 1 1 2.1 ATI Radeon 3000 .*ATI.*Radeon 30.. 1 1 1 4 From abdae208d4acba3dae9c37f434af6da847523707 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Fri, 28 Jun 2013 09:38:36 +0200 Subject: [PATCH 05/16] Updated Polish translation There is no need to shorten these strings --- .../newview/skins/default/xui/pl/panel_preferences_colors.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_colors.xml b/indra/newview/skins/default/xui/pl/panel_preferences_colors.xml index 26bcbc5041..93d9a61c1c 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_colors.xml @@ -169,10 +169,10 @@ - Przezrocz. konsoli: + Przezroczystość konsoli: - + From e03a8baf0d19a510bedd0032292b6192f3e27a62 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sun, 30 Jun 2013 16:24:48 +0200 Subject: [PATCH 06/16] Fixed copy&paste error in scriptlibrary_lsl.xml --- indra/newview/app_settings/scriptlibrary_lsl.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/app_settings/scriptlibrary_lsl.xml b/indra/newview/app_settings/scriptlibrary_lsl.xml index 508e281380..11c0c1087c 100644 --- a/indra/newview/app_settings/scriptlibrary_lsl.xml +++ b/indra/newview/app_settings/scriptlibrary_lsl.xml @@ -2197,7 +2197,7 @@ Clears (deletes) the media and all params from the given face. llSetLinkPrimitiveParamsFast(integer linknumber,list rules) Set primitive parameters for linknumber based on rules. - llSetLinkPrimitiveParams + llGetLinkPrimitiveParams desc llGetLinkPrimitiveParams(integer linknumber,list rules) From d9b0b1e83ed82fa3d12357f77906cdaf516fe5e4 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sun, 30 Jun 2013 16:27:34 +0200 Subject: [PATCH 07/16] FIRE-10752: Fixed typo in German translation, found by JogiTE Clip --- indra/newview/skins/default/xui/de/panel_preferences_chat.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml index 8b1f35fa64..4cd502907d 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml @@ -40,7 +40,7 @@ - + From e036d4863c374d68f98126b990b43694156dc9a6 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Sun, 30 Jun 2013 22:29:25 +0200 Subject: [PATCH 08/16] Minor adjustements for Phoenix mode default settings --- .../newview/app_settings/settings_phoenix.xml | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/indra/newview/app_settings/settings_phoenix.xml b/indra/newview/app_settings/settings_phoenix.xml index cd3605b923..a590a6ac73 100644 --- a/indra/newview/app_settings/settings_phoenix.xml +++ b/indra/newview/app_settings/settings_phoenix.xml @@ -447,5 +447,29 @@ 0 + FSLegacyMinimize + + Comment + Minimize floaters to bottom left instead of top left. + Persist + 1 + Type + Boolean + Value + 1 + + + FSLegacyEdgeSnap + + Comment + Use old method for adjusting edge snap regions. + Persist + 1 + Type + Boolean + Value + 1 + + From 6c6070ba78ff526e06ad9b42bc4d5c1ad08a3fdd Mon Sep 17 00:00:00 2001 From: Techwolf Lupindo Date: Sun, 30 Jun 2013 20:59:28 -0400 Subject: [PATCH 09/16] Area search improvments. Added multi-region support. Controled by exclude filter. Added child prim support. Controled by exclude filter. Fix crash when region got disconnected when search is active. Added a check for areasearch active to prevent spamming the logs in llselectmgr.cpp. --- indra/newview/fsareasearch.cpp | 147 ++++++++++++------ indra/newview/fsareasearch.h | 13 +- indra/newview/llselectmgr.cpp | 9 ++ .../default/xui/en/floater_fs_area_search.xml | 16 ++ 4 files changed, 136 insertions(+), 49 deletions(-) diff --git a/indra/newview/fsareasearch.cpp b/indra/newview/fsareasearch.cpp index 98b754157a..39774cba2d 100644 --- a/indra/newview/fsareasearch.cpp +++ b/indra/newview/fsareasearch.cpp @@ -54,6 +54,7 @@ #include "llcombobox.h" #include "llnotificationsutil.h" #include "fswsassetblacklist.h" +#include "llworld.h" // max number of objects that can be (de-)selected in a single packet. @@ -112,6 +113,8 @@ FSAreaSearch::FSAreaSearch(const LLSD& key) : mExcludeAttachment(true), mExcludeTempary(true), mExcludePhysics(true), + mExcludeChildPrims(true), + mExcludeNeighborRegines(true), mColumnDistance(true), mColumnName(true), mColumnDescription(true), @@ -120,8 +123,7 @@ FSAreaSearch::FSAreaSearch(const LLSD& key) : mColumnCreator(true), mColumnLastOwner(true), mRequestQueuePause(false), - mRequestNeedsSent(false), - mOutstandingRequests(0) + mRequestNeedsSent(false) { //TODO: Multi-floater support and get rid of the singletin. mInstance = this; @@ -252,13 +254,25 @@ void FSAreaSearch::checkRegion() if (mInstance && mActive) { // Check if we changed region, and if we did, clear the object details cache. - LLViewerRegion* region = gAgent.getRegion(); - if (region != mLastRegion) + LLViewerRegion* region = gAgent.getRegion(); // getRegion can return NULL if disconnected. + if (region && (region != mLastRegion)) { + if (!mExcludeNeighborRegines) + { + std::vector uniqueRegions; + region->getNeighboringRegions(uniqueRegions); + if(std::find(uniqueRegions.begin(), uniqueRegions.end(), mLastRegion) != uniqueRegions.end()) + { + // Crossed into a neighboring regine, no need to clear everything. + mLastRegion = region; + return; + } + // else teleported into a new regine + } mLastRegion = region; mRequested = 0; mObjectDetails.clear(); - mOutstandingRequests = 0; + mRegionRequests.clear(); mLastProptiesRecievedTimer.start(); mPanelList->getResultList()->deleteAllItems(); mPanelList->setCounterText(); @@ -276,7 +290,7 @@ void FSAreaSearch::refreshList(bool cache_clear) { mRequested = 0; mObjectDetails.clear(); - mOutstandingRequests = 0; + mRegionRequests.clear(); mLastProptiesRecievedTimer.start(); } else @@ -304,6 +318,13 @@ void FSAreaSearch::findObjects() return; } + LLViewerRegion* our_region = gAgent.getRegion(); + if (!our_region) + { + // Got disconnected or is in the middle of a teleport. + return; + } + LL_DEBUGS("FSAreaSearch_spammy") << "Doing a FSAreaSearch::findObjects" << LL_ENDL; mLastUpdateTimer.stop(); // stop sets getElapsedTimeF32() time to zero. @@ -313,7 +334,6 @@ void FSAreaSearch::findObjects() mRefresh = false; mSearchableObjects = 0; S32 object_count = gObjectList.getNumObjects(); - LLViewerRegion* our_region = gAgent.getRegion(); for (S32 i = 0; i < object_count; i++) { @@ -338,6 +358,7 @@ void FSAreaSearch::findObjects() FSObjectProperties& details = mObjectDetails[object_id]; details.id = object_id; details.local_id = objectp->getLocalID(); + details.region_handle = objectp->getRegion()->getHandle(); mRequestNeedsSent = true; mRequested++; } @@ -354,6 +375,7 @@ void FSAreaSearch::findObjects() // object came back into view details.request = FSObjectProperties::NEED; details.local_id = objectp->getLocalID(); + details.region_handle = objectp->getRegion()->getHandle(); mRequestNeedsSent = true; mRequested++; } @@ -396,15 +418,9 @@ void FSAreaSearch::findObjects() } bool FSAreaSearch::isSearchableObject(LLViewerObject* objectp, LLViewerRegion* our_region) -{ - //TODO: add child prim support - if (!(objectp->isRoot() || (objectp->isAttachment() && objectp->isRootEdit()))) - { - return false; - } - - //TODO: add mult-region support - if (!(objectp->getRegion() == our_region)) +{ + // need to be connected to regine object is in. + if (!objectp->getRegion()) { return false; } @@ -431,6 +447,16 @@ bool FSAreaSearch::isSearchableObject(LLViewerObject* objectp, LLViewerRegion* o // Excludes //----------------------------------------------------------------------- + if (mExcludeChildPrims && !(objectp->isRoot() || (objectp->isAttachment() && objectp->isRootEdit()))) + { + return false; + } + + if (mExcludeNeighborRegines && !(objectp->getRegion() == our_region)) + { + return false; + } + if (mExcludeAttachment && objectp->isAttachment()) { return false; @@ -477,9 +503,10 @@ void FSAreaSearch::processRequestQueue() failed_count++; } } - - mOutstandingRequests = 0; + + mRegionRequests.clear(); mLastProptiesRecievedTimer.start(); + if (!mRequestNeedsSent) { LL_DEBUGS("FSAreaSearch") << "No pending requests found."<< LL_ENDL; @@ -496,46 +523,60 @@ void FSAreaSearch::processRequestQueue() { return; } + mRequestNeedsSent = false; - if (mOutstandingRequests > (MAX_OBJECTS_PER_PACKET + 128)) + for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); + iter != LLWorld::getInstance()->getRegionList().end(); ++iter) { - return; - } - - std::vector request_list; - - for (std::map::iterator object_it = mObjectDetails.begin(); - object_it != mObjectDetails.end(); - ++object_it) - { - if (object_it->second.request == FSObjectProperties::NEED) + LLViewerRegion* regionp = *iter; + U64 region_handle = regionp->getHandle(); + if (mRegionRequests[region_handle] > (MAX_OBJECTS_PER_PACKET + 128)) { - request_list.push_back(object_it->second.local_id); - object_it->second.request = FSObjectProperties::SENT; - mOutstandingRequests++; - if (mOutstandingRequests >= ((MAX_OBJECTS_PER_PACKET * 3) - 3)) + mRequestNeedsSent = true; + return; + } + + std::vector request_list; + bool need_continue = false; + + for (std::map::iterator object_it = mObjectDetails.begin(); + object_it != mObjectDetails.end(); + ++object_it) + { + if (object_it->second.request == FSObjectProperties::NEED && object_it->second.region_handle == region_handle) { - requestObjectProperties(request_list, true); - requestObjectProperties(request_list, false); - return; + request_list.push_back(object_it->second.local_id); + object_it->second.request = FSObjectProperties::SENT; + mRegionRequests[region_handle]++; + if (mRegionRequests[region_handle] >= ((MAX_OBJECTS_PER_PACKET * 3) - 3)) + { + requestObjectProperties(request_list, true, regionp); + requestObjectProperties(request_list, false, regionp); + mRequestNeedsSent = true; + need_continue = true; + break; + } } } - } - if (!request_list.empty()) - { - requestObjectProperties(request_list, true); - requestObjectProperties(request_list, false); + if (need_continue) + { + continue; + } + + if (!request_list.empty()) + { + requestObjectProperties(request_list, true, regionp); + requestObjectProperties(request_list, false, regionp); + } } - mRequestNeedsSent = false; } -void FSAreaSearch::requestObjectProperties(const std::vector& request_list, bool select) +void FSAreaSearch::requestObjectProperties(const std::vector& request_list, bool select, LLViewerRegion* regionp) { bool start_new_message = true; S32 select_count = 0; LLMessageSystem* msg = gMessageSystem; - LLViewerRegion* regionp = gAgent.getRegion(); for (std::vector::const_iterator iter = request_list.begin(); iter != request_list.end(); ++iter) @@ -564,7 +605,7 @@ void FSAreaSearch::requestObjectProperties(const std::vector& request_list, if(msg->isSendFull(NULL) || select_count >= MAX_OBJECTS_PER_PACKET) { LL_DEBUGS("FSAreaSearch") << "Sent one full " << (select ? "ObjectSelect" : "ObjectDeselect") << " message with " << select_count << " object data blocks." << LL_ENDL; - msg->sendReliable(regionp->getHost() ); + msg->sendReliable(regionp->getHost()); select_count = 0; start_new_message = true; } @@ -573,7 +614,7 @@ void FSAreaSearch::requestObjectProperties(const std::vector& request_list, if (!start_new_message) { LL_DEBUGS("FSAreaSearch") << "Sent one partcial " << (select ? "ObjectSelect" : "ObjectDeselect") << " message with " << select_count << " object data blocks." << LL_ENDL; - msg->sendReliable(regionp->getHost() ); + msg->sendReliable(regionp->getHost()); } } @@ -626,7 +667,7 @@ void FSAreaSearch::processObjectProperties(LLMessageSystem* msg) { mRequested--; } - mOutstandingRequests--; + mRegionRequests[details.region_handle]--; counter_text_update = true; } @@ -1687,6 +1728,14 @@ BOOL FSPanelAreaSearchFilter::postBuild() mCheckboxExcludeTempary->set(TRUE); mCheckboxExcludeTempary->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); + mCheckboxExcludeChildPrim = getChild("exclude_childprim"); + mCheckboxExcludeChildPrim->set(TRUE); + mCheckboxExcludeChildPrim->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); + + mCheckboxExcludeNeighborRegines = getChild("exclude_neighbor_regine"); + mCheckboxExcludeNeighborRegines->set(TRUE); + mCheckboxExcludeNeighborRegines->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); + mButtonApply = getChild("apply"); mButtonApply->setClickedCallback(boost::bind(&FSAreaSearch::onButtonClickedSearch, mFSAreaSearch)); @@ -1758,6 +1807,10 @@ void FSPanelAreaSearchFilter::onCommitCheckbox() mFSAreaSearch->setExcludeAttachment(false); } mFSAreaSearch->setFilterAttachment(mCheckboxAttachment->get()); + + mFSAreaSearch->setExcludeChildPrims(mCheckboxExcludeChildPrim->get()); + + mFSAreaSearch->setExcludeNeighborRegines(mCheckboxExcludeNeighborRegines->get()); } void FSPanelAreaSearchFilter::onCommitSpin() diff --git a/indra/newview/fsareasearch.h b/indra/newview/fsareasearch.h index f839ac24d1..d889b563a8 100644 --- a/indra/newview/fsareasearch.h +++ b/indra/newview/fsareasearch.h @@ -80,6 +80,7 @@ struct FSObjectProperties uuid_vec_t texture_ids; bool name_requested; U32 local_id; + U64 region_handle; typedef enum e_object_properties_request { @@ -143,6 +144,8 @@ public: void setExcludeAttachment(bool b) { mExcludeAttachment = b; } void setExcludeTempary(bool b) { mExcludeTempary = b; } void setExcludePhysics(bool b) { mExcludePhysics = b; } + void setExcludeChildPrims(bool b) { mExcludeChildPrims = b; } + void setExcludeNeighborRegines(bool b) { mExcludeNeighborRegines = b; } void setFilterForSaleMin(S32 s) { mFilterForSaleMin = s; } void setFilterForSaleMax(S32 s) { mFilterForSaleMax = s; } @@ -161,9 +164,11 @@ public: void setColumnGroup(bool b) { mColumnGroup = b; } void setColumnCreator(bool b) { mColumnCreator = b; } void setColumnLastOwner(bool b) { mColumnLastOwner = b; } + + bool isActive() { return mActive; } private: - void requestObjectProperties(const std::vector& request_list, bool select); + void requestObjectProperties(const std::vector< U32 >& request_list, bool select, LLViewerRegion* regionp); void matchObject(FSObjectProperties& details, LLViewerObject* objectp); void getNameFromUUID(LLUUID& id, std::string& name, BOOL group, bool& name_requested); @@ -178,7 +183,7 @@ private: bool mActive; bool mRequestQueuePause; bool mRequestNeedsSent; - S32 mOutstandingRequests; + std::map mRegionRequests; std::string mSearchName; std::string mSearchDescription; @@ -225,6 +230,8 @@ private: bool mExcludeAttachment; bool mExcludeTempary; bool mExcludePhysics; + bool mExcludeChildPrims; + bool mExcludeNeighborRegines; bool mFilterLocked; bool mFilterPhysicial; @@ -377,6 +384,8 @@ private: LLCheckBoxCtrl* mCheckboxExcludeAttachment; LLCheckBoxCtrl* mCheckboxExcludePhysics; LLCheckBoxCtrl* mCheckboxExcludeTempary; + LLCheckBoxCtrl* mCheckboxExcludeChildPrim; + LLCheckBoxCtrl* mCheckboxExcludeNeighborRegines; }; diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 2e7fd7dc5e..9fb62e223e 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -100,6 +100,7 @@ #include "llviewernetwork.h" #include "llworld.h" // Aurora Sim +#include "fsareasearch.h" #include "llglheaders.h" @@ -5113,7 +5114,15 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data if (!node) { + // area search + FSAreaSearch* area_search_floater = LLFloaterReg::getTypedInstance("area_search"); + if(!(area_search_floater && area_search_floater->isActive())) // Don't spam the log when areasearch is active. + { + // llwarns << "Couldn't find object " << id << " selected." << llendl; + // area search + } + // } else { diff --git a/indra/newview/skins/default/xui/en/floater_fs_area_search.xml b/indra/newview/skins/default/xui/en/floater_fs_area_search.xml index cc9f3396ce..208c0eef54 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_area_search.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_area_search.xml @@ -520,6 +520,22 @@ name="exclude_temporary" label="Temporary" width="80"/> + +