Jump to content
The Character Copy service for Beta is currently unavailable ×

Bopper

Members
  • Posts

    3842
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by Bopper

  1. Good point, I overlooked the Res(Heal) being unnecessary.
  2. I'll add more to this later with numbers, but in general Regeneration should have high levels of resistance to regen and heal debuffs. It should also have scaling regeneration based on health levels (similar to Super Reflexes with scaling resists). Updated: Here is a breakdown of what I'd like to see with Regeneration using a Brute as an example. First a breakdown of what I've done: All 3 Auto powers have Res(Regeneration) included. For a brute this is 25.95% each for a final build total of 77.85% Res(Regeneration) All 3 Auto powers have unenhanceable scaling Regeneration added as an effect. It begins to kick in when your health dips below 75%. For every 1% of HP lost after 75%, you gain 2% Regeneration (for each Auto power, so 6% total). This allows you a maximum of 150% Regeneration at 0% HP, so combining all 3 Auto powers, this is a maximum of 450% Regeneration at 0% HP, 300% Regeneration at 25% HP, 150% Regeneration at 50% HP, and 0% Regeneration at 75%+ HP. I overhauled Quick Recovery and made it Perseverance. It's sort of a hybrid of Gamma Boost (scaling Regen/Recovery based on Health) and Inexhaustible (small max HP increase and various debuff resists). I overhauled Revive. I made it Return to Glory, which is basically a 2nd Moment of Glory that you can use (longer cooldown though), but you can also use it as a Revive if you fall in battle. I made numerous other changes, but I can explain them all below. Changes: Added the unenhanceable scaling Regeneration and changed the Activate period from 10s to 1s, that way the scaling Regeneration will update more frequently. Changes: Removed the 15% Res(Toxic) and replaced it with a 9.375% Res(All). This resistance is not enhanceable, which allows us to remove the "Not affected by outside buffs/debuffs" flag. This comes into play later with Instant Healing. Changes: This is an overhaul of quick recovery. The 30% Recovery bonus will now scale with current HP% (I think this should be buffed up, but good enough for now). We add a +Max HP effect that is worth 10% base HP, with half of this effect being enhanceable. Also added the scaling regeneration (0-150%, based on current HP%). Added a 25.95% Resistance to Regeneration and Slows and a 51.9% Resistance to Endurance Drain. Also changed the activation period to 1s to accomodate the scaling Regeneration/Recovery. Changes: This used to be Dull Pain. I tweaked it to have a smaller cooldown (240s instead of 360s), but also it is a smaller buff to +Max HP (30% instead of 40%) and Heal (449.78 instead of 599.7). The reasons for this change, I wanted to make it easier to reach perma buff, now needing only +100% Recharge instead of +200% Recharge, and I wanted the self heal to be available more often. The net of the +Max HP does not change, thanks to Perseverance we will still get a +40% MaxHP, with half of that enhanceable. Changes: Minor change here. There was a 50% Regeneration effect that was unenhanceable, I bumped it up to 100% Regeneration effect unenhanceable. This now gives the toggle 200% Regeneration, half unenhanceable. Changes: Added the unenhanceable scaling regeneration and added a 25.95% Resistance to Regeneration and Recharge debuffs. Also changed the Activate period from 10s to 1s to accomodate the scaling regeneration. Changes: I reduced the cooldown from 650s to 600s. Also added a Strength to Regeneration/Heal buff for 90s. This will give a 29.8% strength boost to the regeneration of Fast Healing, Integration and Health, and will give a 29.8% strength boost to the heals of Numb Pain and Reconstruction (which is why I made the Resistance unenhanceable). Changes: Made this power the T8, increased the effect duration from 15s to 20s, and increased the cooldown from 240s to 300s. Also, I removed the Stun protection (since we already get that in 2 other powers) and replaced it with Fear protection. Also reduced the cast time from 2.57s to 1.5s. Changes: This is an overhaul of Revive. You can still use this like a revive, but instead of getting 15s of Untouchable, you get 20s of Moment of Glory. You also can use this power while alive as a 2nd Moment of Glory. The cooldown was increased from 300s to 360s to accomodate the added capability (I probably should make it 420s or 480s, but I'll be generous to start).
  3. It'll be awhile before I can do another update, so you're safe for now. What I produced today was all manual. I happened to be working on updating the Mids database with corrected sniper info so I knew the numbers off hand, so I quickly copy and pasted from my spreadsheet and manually added the extra damage info.
  4. This is what I came up with. I did not include interrupt time, but that usually can be inferred by looking at the difference between the Fast Snipe cast time and the Slow Snipe cast time (it's not always correct doing it this way, but it's good enough). For quick snipes I show their base damage as well as their maximum damage. *Edit: Trimmed some fat off the table and cleaned up formatting* Blaster Name Lvl Acc Base Dmg Scale Max Scale Dmg Max Dmg DPA Max DPA Cast Arcana Rch End Rng Blaster AR Snipe Sniper Rifle 1 1.25 62.5615 4.5000 - 281.527 - 96.944 - 2.67 2.904 12 14.35 150 Blaster AR Snipe Sniper Rifle 1 1 62.5615 2.2800 2.7600 142.640 172.670 83.124 100.623 1.5 1.716 12 14.35 150 Blaster Archery Snipe Ranged Shot 1 1.39 62.5615 4.5000 - 281.527 - 73.544 - 3.67 3.828 12 14.35 150 Blaster Archery Snipe Ranged Shot 1 1.16 62.5615 2.2800 2.7600 142.640 172.670 77.186 93.436 1.67 1.848 12 14.35 150 Blaster BR Snipe Penetrating Ray 1 1.25 62.5615 4.5000 - 281.527 - 78.992 - 3.4 3.564 12 14.35 150 Blaster BR Snipe Penetrating Ray 1 1.05 62.5615 2.2800 2.7600 142.640 172.670 77.186 93.436 1.67 1.848 12 14.35 150 Blaster Dark Snipe Moonbeam 1 1.2 62.5615 4.5000 - 281.527 - 78.992 - 3.33 3.564 12 14.35 150 Blaster Dark Snipe Moonbeam 1 1 62.5615 2.2800 2.7600 142.640 172.670 90.051 109.009 1.33 1.584 12 14.35 150 Blaster Electric Snipe Zapp 1 1.2 62.5615 4.5000 - 281.527 - 78.992 - 3.33 3.564 12 14.35 150 Blaster Electric Snipe Zapp 1 1 62.5615 2.2800 2.7600 142.640 172.670 90.051 109.009 1.33 1.584 12 14.35 150 Blaster Energy Snipe Sniper Blast 1 1.2 62.5615 4.5000 - 281.527 - 78.992 - 3.33 3.564 12 14.35 150 Blaster Energy Snipe Sniper Blast 1 1 62.5615 2.2800 2.7600 142.640 172.670 90.051 109.009 1.33 1.584 12 14.35 150 Blaster Fire Snipe Blazing Bolt 1 1.2 62.5615 5.0314 - 314.769 - 82.228 - 3.67 3.828 12 14.35 150 Blaster Fire Snipe Blazing Bolt 1 1 62.5615 2.8114 3.2914 175.883 205.912 95.175 111.424 1.67 1.848 12 14.35 150 Blaster Psychic Snipe Psionic Lance 1 1.2 62.5615 4.5000 - 281.527 - 88.866 - 3 3.168 12 14.35 175 Blaster Psychic Snipe Psionic Lance 1 1 62.5615 2.2800 2.7600 142.640 172.670 90.051 109.009 1.33 1.584 12 14.35 175 Blaster Radiation Snipe Proton Volley 1 1.2 62.5615 4.5000 - 281.527 - 78.992 - 3.33 3.564 12 14.35 150 Blaster Radiation Snipe Proton Volley 1 1 62.5615 2.2800 2.7600 142.640 172.670 90.051 109.009 1.33 1.584 12 14.35 150 Corruptor Name Lvl Acc Base Dmg Scale Max Scale Dmg Max Dmg DPA Max DPA Cast Arcana Rch End Rng Corruptor Archery Snipe Ranged Shot 18 1.16 41.7077 2.2800 2.7600 95.094 115.113 51.458 62.291 1.67 1.848 12 14.35 150 Corruptor Archery Snipe Ranged Shot 18 1.39 41.7077 4.5000 - 187.685 - 49.029 - 3.67 3.828 12 14.35 150 Corruptor AssaultRifle Snipe Sniper Rifle 12 1 41.7077 2.2800 2.7600 95.094 115.113 55.416 67.082 1.5 1.716 12 14.35 150 Corruptor AssaultRifle Snipe Sniper Rifle 12 1.25 41.7077 4.5000 - 187.685 - 64.630 - 2.67 2.904 12 14.35 150 Corruptor BeamRifle Snipe Penetrating Ray 18 1.05 41.7077 2.2800 2.7600 95.094 115.113 51.458 62.291 1.67 1.848 12 14.35 150 Corruptor BeamRifle Snipe Penetrating Ray 18 1.25 41.7077 4.5000 - 187.685 - 52.661 - 3.4 3.564 12 14.35 150 Corruptor DarkBlast Snipe Moonbeam 2 1 41.7077 2.2800 2.7600 95.094 115.113 60.034 72.673 1.33 1.584 12 14.35 150 Corruptor DarkBlast Snipe Moonbeam 2 1.2 41.7077 4.5000 - 187.685 - 52.661 - 3.33 3.564 12 14.35 150 Corruptor ElectricalBlast Snipe Zapp 12 1 41.7077 2.2800 2.7600 95.094 115.113 60.034 72.673 1.33 1.584 12 14.35 150 Corruptor ElectricalBlast Snipe Zapp 12 1.2 41.7077 4.5000 - 187.685 - 52.661 - 3.33 3.564 12 14.35 150 Corruptor EnergyBlast Snipe Sniper Blast 8 1 41.7077 2.2800 2.7600 95.094 115.113 60.034 72.673 1.33 1.584 12 14.35 150 Corruptor EnergyBlast Snipe Sniper Blast 8 1.2 41.7077 4.5000 - 187.685 - 52.661 - 3.33 3.564 12 14.35 150 Corruptor FireBlast Snipe Blazing Bolt 26 1 41.7077 2.8114 3.2914 117.255 137.275 63.450 74.283 1.67 1.848 12 14.35 150 Corruptor FireBlast Snipe Blazing Bolt 26 1.2 41.7077 5.0314 - 209.846 - 54.819 - 3.67 3.828 12 14.35 150 Corruptor PsychicBlast Snipe Psionic Lance 2 1 41.7077 2.2800 2.7600 95.094 115.113 60.034 72.673 1.33 1.584 12 14.35 175 Corruptor PsychicBlast Snipe Psionic Lance 2 1.2 41.7077 4.5000 - 187.685 - 59.244 - 3 3.168 12 14.35 175 Corruptor RadiationBlast Snipe Proton Volley 8 1 41.7077 2.2800 2.7600 95.094 115.113 60.034 72.673 1.33 1.584 12 14.35 150 Corruptor RadiationBlast Snipe Proton Volley 8 1.2 41.7077 4.5000 - 187.685 - 52.661 - 3.33 3.564 12 14.35 150 Defender Name Lvl Acc Base Dmg Scale Max Scale Dmg Max Dmg DPA Max DPA Cast Arcana Rch End Rng Defender BR Snipe Penetrating Ray 1 1.25 36.1466 4.5000 - 162.660 - 45.640 - 3.4 3.564 12 14.35 150 Defender BR Snipe Penetrating Ray 1 1.05 36.1466 2.2800 2.7600 82.414 99.765 44.596 53.985 1.67 1.848 12 14.35 150 Defender Dark Snipe Moonbeam 1 1.2 36.1466 4.5000 - 162.660 - 45.640 - 3.33 3.564 12 14.35 150 Defender Dark Snipe Moonbeam 1 1 36.1466 2.2800 2.7600 82.414 99.765 52.029 62.983 1.33 1.584 12 14.35 150 Defender Electric Snipe Zapp 1 1.2 36.1466 4.5000 - 162.660 - 45.640 - 3.33 3.564 12 14.35 150 Defender Electric Snipe Zapp 1 1 36.1466 2.2800 2.7600 82.414 99.765 52.029 62.983 1.33 1.584 12 14.35 150 Defender Energy Snipe Sniper Blast 1 1.2 36.1466 4.5000 - 162.660 - 45.640 - 3.33 3.564 12 14.35 150 Defender Energy Snipe Sniper Blast 1 1 36.1466 2.2800 2.7600 82.414 99.765 52.029 62.983 1.33 1.584 12 14.35 150 Defender Fire Snipe Blazing Bolt 1 1.2 36.1466 5.0314 - 181.867 - 47.510 - 3.67 3.828 12 14.35 150 Defender Fire Snipe Blazing Bolt 1 1 36.1466 2.8114 3.2914 101.621 118.971 54.990 64.379 1.67 1.848 12 14.35 150 Defender Psychic Snipe Psionic Lance 1 1.2 36.1466 4.5000 - 162.660 - 51.345 - 3 3.168 12 14.35 175 Defender Psychic Snipe Psionic Lance 1 1 36.1466 2.2800 2.7600 82.414 99.765 52.029 62.983 1.33 1.584 12 14.35 175 Defender Radiation Snipe Proton Volley 1 1.2 36.1466 4.5000 - 162.660 - 45.640 - 3.33 3.564 12 14.35 150 Defender Radiation Snipe Proton Volley 1 1 36.1466 2.2800 2.7600 82.414 99.765 52.029 62.983 1.33 1.584 12 14.35 150 Dominator Name Lvl Acc Base Dmg Scale Max Scale Dmg Max Dmg DPA Max DPA Cast Arcana Rch End Rng Dominator DarkAssault Snipe Moon Beam 35 1.2 52.8297 2.6700 3.5600 141.055 188.074 89.050 118.733 1.33 1.584 20 18.51 175 Dominator DarkAssault Snipe Moon Beam 35 1.2 52.8297 4.5000 - 237.734 - 52.971 - 4.33 4.488 20 18.51 175 Dominator ElectricityAssault Snipe Zapp 20 1.2 52.8297 2.6700 3.5600 141.055 188.074 89.050 118.733 1.33 1.584 20 18.51 150 Dominator ElectricityAssault Snipe Zapp 20 1.2 52.8297 4.5000 - 237.734 - 66.704 - 3.33 3.564 20 18.51 150 Dominator EnergyAssault Snipe Sniper Blast 35 1 52.8297 2.6700 3.5600 141.055 188.074 89.050 118.733 1.33 1.584 20 18.51 150 Dominator EnergyAssault Snipe Sniper Blast 35 1.2 52.8297 4.5000 - 237.734 - 66.704 - 3.33 3.564 20 18.51 150 Dominator FieryAssault Snipe Blazing Bolt 35 1 52.8297 3.2014 4.0914 169.127 216.145 91.519 116.962 1.67 1.848 20 18.51 150 Dominator FieryAssault Snipe Blazing Bolt 35 1.2 52.8297 5.0314 - 265.805 - 69.437 - 3.67 3.828 20 18.51 150 Dominator MartialAssault Snipe Masterful Throw 35 1 52.8297 2.6700 3.5600 141.055 188.074 89.050 118.733 1.33 1.584 20 18.51 150 Dominator MartialAssault Snipe Masterful Throw 35 1.2 52.8297 4.5000 - 237.734 - 69.270 - 3.17 3.432 20 18.51 150 Dominator PsionicAssault Snipe Psionic Lance 35 1 52.8297 2.6700 3.5600 141.055 188.074 89.050 118.733 1.33 1.584 20 18.51 175 Dominator PsionicAssault Snipe Psionic Lance 35 1.2 52.8297 4.5000 - 237.734 - 75.042 - 3 3.168 20 18.51 175 Dominator RadioactiveAssault Snipe Proton Volley 35 1 52.8297 2.6700 3.5600 141.055 188.074 89.050 118.733 1.33 1.584 20 18.51 150 Dominator RadioactiveAssault Snipe Proton Volley 35 1.2 52.8297 4.5000 - 237.734 - 66.704 - 3.33 3.564 20 18.51 150 Stalker Epic Name Lvl Acc Base Dmg Scale Max Scale Dmg Max Dmg DPA Max DPA Cast Arcana Rch End Rng Stalker EpicMaceMastery Snipe Mace Beam 35 1.05 55.6102 1.7500 2.3000 97.318 127.903 43.368 56.998 2 2.244 24 17.94 150 Stalker EpicMaceMastery Snipe Mace Beam 35 1.25 55.6102 3.5600 - 197.972 - 38.456 - 5 5.148 24 17.94 150 Stalker EpicMuMastery Snipe Zapp 35 1 55.6102 1.7500 2.3000 97.318 127.903 61.438 80.747 1.33 1.584 24 17.94 150 Stalker EpicMuMastery Snipe Zapp 35 1.2 55.6102 3.5600 - 197.972 - 44.111 - 4.33 4.488 24 17.94 150 Stalker EpicSoulMastery Snipe Moonbeam 35 1 55.6102 1.7500 2.3000 97.318 127.903 61.438 80.747 1.33 1.584 24 17.94 150 Stalker EpicSoulMastery Snipe Moonbeam 35 1.2 55.6102 3.5600 - 197.972 - 44.111 - 4.33 4.488 24 17.94 150 Scrapper Epic Name Lvl Acc Base Dmg Scale Max Scale Dmg Max Dmg DPA Max DPA Cast Arcana Rch End Rng Scrapper EpicMaceMastery Snipe Mace Beam 35 1.05 62.5615 1.7500 2.3000 109.483 143.891 48.789 64.123 2 2.244 24 17.94 150 Scrapper EpicMaceMastery Snipe Mace Beam 35 1.25 62.5615 3.5600 - 222.719 - 43.263 - 5 5.148 24 17.94 150 Scrapper EpicMuMastery Snipe Zapp 35 1 62.5615 1.7500 2.3000 109.483 143.891 69.118 90.841 1.33 1.584 24 17.94 150 Scrapper EpicMuMastery Snipe Zapp 35 1.2 62.5615 3.5600 - 222.719 - 49.625 - 4.33 4.488 24 17.94 150 Scrapper EpicSoulMastery Snipe Moonbeam 35 1 62.5615 1.7500 2.3000 109.483 143.891 69.118 90.841 1.33 1.584 24 17.94 150 Scrapper EpicSoulMastery Snipe Moonbeam 35 1.2 62.5615 3.5600 - 222.719 - 49.625 - 4.33 4.488 24 17.94 150
  5. https://forums.homecomingservers.com/code-of-conduct/
  6. Absolutely, and in this case TW was compared to the other sets and was deemed an outlier.
  7. I thought about this more this morning. Although it's true, I was not considering it, but now that I am I don't think there's a difference. Regeneration translates to HP/sec as so: HP/sec = (MaxHP / 240) x Regen% HP added = HP/sec x Time So if we looked at our health pools over time, we would have the following: MaxHP + HP/sec x Time = MaxHP + (MaxHP / 240) x Regen% x Time = MaxHP x (1 + Time x Regen% / 240) If I use one of my examples from earlier (+25% HP is equivalent to 20% Resistance), and assume both builds have the same Regen% and we analyze for the same amount of time, then there is no difference to the analysis. It scales as it would before. Scenario A: +25% HP, 0% Resistance Total HP = MaxHP x (1 + Time x Regen%/240) = 1.25 x BaseHP x (1 + Time x Regen% / 240) Damage to kill = Total HP / (1 - Res) = Total HP / (1 - 0%) = 1.25 BaseHP x (1 + Time x Regen% / 240) Scenario B: +0% HP, 20% Resistance Total HP = BaseHP x (1 + Time x Regen% / 240) Damage to kill = Total HP / (1 - Res) = Total HP / (1 - 0.20) = 1.25 x BaseHP x (1 + Time x Regen% / 240) As you can see, this remains the same, and always should.
  8. I most certainly am not. Regeneration is a frequency metric, and to apply it in such a case would require a time interval. That greatly over-complicates the analysis, especially in this situation where we're just looking for a relationship between Resistance added and Max HP added. If you would like to see that type of math factored in, I recommend my Survivability Tool. You can apply your HP, Regen, Defense, Resistance, To-Hit Debuffs, and Damage Debuffs, and my tool will output metrics for the builds projected survivability (I do not factor in debuffs that could be applied on you, that would require turning a simple spreadsheet into a full-on simulator program).
  9. That is a safe assumption to make, not so much to assume it is wrong but rather one should not always blindly trust what Mids gives you. In regards to Mids, if someone is using the latest version they should be getting the correct Proc Probabilites most of the time. There are a few gotchas, mostly in regards to pseudopets. But click powers and toggle auras should be correct. However, there is a bug that could cause confusion. For some reason the PPM of the proc that used to show when you hover over an enhancement now has been replaced with a somewhat erroneous proc probability. I say somewhat because it's actually taking the PPM and trying to calculate the probability to proc for a 10s auto (I don't know why). So rule of thumb, when you see this, multiply the % by 6 and you will get the original PPM of the power. That's a Mids bug. For some reason that proc is still using the old 20% flat rate percentage instead of PPM. So that is why you're seeing worse performance. The actual proc itself does the same damage (71.75) and same PPM (3.5) as most other damage procs.
  10. Follow this link to my tools. Go to the sheet that does Proc Probabilities and you will have a list of damage by level shown for Regular damage procs and Epic procs
  11. Ways to address balancing TW: Playability 📈 OP'ness 📉 Thank you for coming to my TED Talk.
  12. Made a new update (check original post for the excel spreadsheet). Shout out to @carroto for assisting on magnitude expressions. I added a simple tweak to my tool to recognize when a magnitude expression is being used to scale the damage scale. This is a big fix for many Snipe attacks. For example, a scale of 2.28 might be used, but is multiplied by 0.3 and 0.7 to split the damage to 30% smashing and 70% energy. My original tool didn't handle this and would see two effects that were both 2.28 scale and added them up to become 4.56 scale. Although this was mainly an issue with Snipes, there could be some other examples that this fix would address (if not on live, potentially in future releases as magnitude expressions become more common).
  13. @carroto thanks for all the hard work on this. I'm just now getting to look at it, but one thing stood out to me. Can you find for me the power that has this magnitude expression? I couldn't find it when I tried. ((((minmax(((source>cur.kToHit - 0.75) / 0.22), -1.0, 1.0) * 0.210526316) + 1) * @StdResult) / 3) * 0.33 Edit: Disregard, I found it to be a contamination effect from beam rifle. So it won't impact my stuff, luckily.
  14. Yeah, i'll take it. If you can populate a list of unique mag expressions, that would be helpful.
  15. I am using MATLAB. The challenge I have with mag expressions are the various parameters it could use. Snipes use ToHit from the character, SavageMelee uses the count from Blood Frenzy. These require user inputs to plug in for those expressions. I could maybe try to parse every mag expression in the game to see what needs to be handled, but for my spreadsheets it does no good. I'm not gonna display every permutation of damage values a power can do. But it might help you out where you have the user input parameters of their build already.
  16. I haven't released a tool, just the spreadsheets from the tool.
  17. Keep in mind, the higher recharge is what gives Doms the higher quick snipe damage. Even factoring in AT modifiers it does more damage than the blaster version. And I am in full agreement, I have completely ignored magnitude expressions, it's a ton of work to get it to handle everything correctly. I might revisit it, though. If I can just strip out the multiplier it uses (the *0.3, or /4, for example), it would go a long ways. So I might mess with that tonight.
  18. for snipe info, checkout these patch notes
  19. I'm not on a computer at the moment to look at all this, but the 0.3 and 0.7 is done just to split the sniper damage to be 30% of one damage type and 70% of the other. It's very messy, i know. Take a look at Proton Volley and you'll see its quick snipe does 4 ticks of damage. But instead of setting the scale to be 1/4th of what it normally would be, they baked in the 1/4th into the magnitude expression.
  20. Got an example? I don't think I'm on the same page with you.
  21. Yes, there is a magnitude expression that makes things difficult. Same for things like savage melee. I just use the base scale, personally. As for including autos/pseudopets/toggles, it would be a straight line (so no dependence on varying recharge). It still is useful, as people can see the probability of procing every 10s Edit: if you do damage % on A/P/Ts though, you should do what i did in one of my tools. Convert it to DPA. So if a toggle or auto does X damage every activation period, it gets a DPA of X_A. And the proc will have a DPA of Prob x ProcDamage / 10s. Then you can do the % calc from there
  22. While you're looking into updates to the tool, I notice you do not have the auto/toggle/pseudopets proc calculation. It looks like you're still using recharge when in fact they don't (and they don't use slotted recharge in its calculation either). I was thinking about it and it might not be a good idea. There are some powers that don't do damage but can take procs. So those will show up as infinite gains to proc damage and would wash everything else out. And since you have it set up to show multiple powers on one graph, the recharge to damage translation for one power will not match that of another power. So disregard this suggestion, i see it breaking things.
  23. I hope you're around when Page 6 comes to Beta. We need folks who can provide that level of rigor in their testing.
×
×
  • Create New...