diff --git a/CNAME b/CNAME deleted file mode 100644 index 70a7fed..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -bl3skills.com diff --git a/assets/hunters/Beastmaster/300.png b/assets/hunters/Beastmaster/300.png new file mode 100644 index 0000000..aff1053 Binary files /dev/null and b/assets/hunters/Beastmaster/300.png differ diff --git a/assets/hunters/Beastmaster/301.png b/assets/hunters/Beastmaster/301.png new file mode 100644 index 0000000..8d9b2bf Binary files /dev/null and b/assets/hunters/Beastmaster/301.png differ diff --git a/assets/hunters/Beastmaster/310.png b/assets/hunters/Beastmaster/310.png new file mode 100644 index 0000000..3b93c3f Binary files /dev/null and b/assets/hunters/Beastmaster/310.png differ diff --git a/assets/hunters/Beastmaster/311.png b/assets/hunters/Beastmaster/311.png new file mode 100644 index 0000000..9ad1f6f Binary files /dev/null and b/assets/hunters/Beastmaster/311.png differ diff --git a/assets/hunters/Beastmaster/312.png b/assets/hunters/Beastmaster/312.png new file mode 100644 index 0000000..e917e00 Binary files /dev/null and b/assets/hunters/Beastmaster/312.png differ diff --git a/assets/hunters/Beastmaster/320.png b/assets/hunters/Beastmaster/320.png new file mode 100644 index 0000000..d4641a4 Binary files /dev/null and b/assets/hunters/Beastmaster/320.png differ diff --git a/assets/hunters/Beastmaster/321.png b/assets/hunters/Beastmaster/321.png new file mode 100644 index 0000000..dec2987 Binary files /dev/null and b/assets/hunters/Beastmaster/321.png differ diff --git a/assets/hunters/Beastmaster/322.png b/assets/hunters/Beastmaster/322.png new file mode 100644 index 0000000..731fea7 Binary files /dev/null and b/assets/hunters/Beastmaster/322.png differ diff --git a/assets/hunters/Beastmaster/323.png b/assets/hunters/Beastmaster/323.png new file mode 100644 index 0000000..dab18b3 Binary files /dev/null and b/assets/hunters/Beastmaster/323.png differ diff --git a/assets/hunters/Beastmaster/330.png b/assets/hunters/Beastmaster/330.png new file mode 100644 index 0000000..442da7b Binary files /dev/null and b/assets/hunters/Beastmaster/330.png differ diff --git a/assets/hunters/Beastmaster/331.png b/assets/hunters/Beastmaster/331.png new file mode 100644 index 0000000..e9f84a5 Binary files /dev/null and b/assets/hunters/Beastmaster/331.png differ diff --git a/assets/hunters/Beastmaster/332.png b/assets/hunters/Beastmaster/332.png new file mode 100644 index 0000000..aa168a7 Binary files /dev/null and b/assets/hunters/Beastmaster/332.png differ diff --git a/assets/hunters/Beastmaster/333.png b/assets/hunters/Beastmaster/333.png new file mode 100644 index 0000000..b7eeae9 Binary files /dev/null and b/assets/hunters/Beastmaster/333.png differ diff --git a/assets/hunters/Beastmaster/340.png b/assets/hunters/Beastmaster/340.png new file mode 100644 index 0000000..dc45988 Binary files /dev/null and b/assets/hunters/Beastmaster/340.png differ diff --git a/assets/hunters/Beastmaster/341.png b/assets/hunters/Beastmaster/341.png new file mode 100644 index 0000000..dcacedf Binary files /dev/null and b/assets/hunters/Beastmaster/341.png differ diff --git a/assets/hunters/Beastmaster/342.png b/assets/hunters/Beastmaster/342.png new file mode 100644 index 0000000..0635080 Binary files /dev/null and b/assets/hunters/Beastmaster/342.png differ diff --git a/assets/hunters/Beastmaster/343.png b/assets/hunters/Beastmaster/343.png new file mode 100644 index 0000000..7efe2dc Binary files /dev/null and b/assets/hunters/Beastmaster/343.png differ diff --git a/assets/hunters/Beastmaster/344.png b/assets/hunters/Beastmaster/344.png new file mode 100644 index 0000000..439f457 Binary files /dev/null and b/assets/hunters/Beastmaster/344.png differ diff --git a/assets/hunters/Beastmaster/350.png b/assets/hunters/Beastmaster/350.png new file mode 100644 index 0000000..26213df Binary files /dev/null and b/assets/hunters/Beastmaster/350.png differ diff --git a/assets/hunters/Beastmaster/351.png b/assets/hunters/Beastmaster/351.png new file mode 100644 index 0000000..d2f895e Binary files /dev/null and b/assets/hunters/Beastmaster/351.png differ diff --git a/assets/hunters/Beastmaster/352.png b/assets/hunters/Beastmaster/352.png new file mode 100644 index 0000000..3bd2c87 Binary files /dev/null and b/assets/hunters/Beastmaster/352.png differ diff --git a/assets/hunters/Beastmaster/360.png b/assets/hunters/Beastmaster/360.png new file mode 100644 index 0000000..8116afc Binary files /dev/null and b/assets/hunters/Beastmaster/360.png differ diff --git a/assets/hunters/Gunner/300.png b/assets/hunters/Gunner/300.png new file mode 100644 index 0000000..046d134 Binary files /dev/null and b/assets/hunters/Gunner/300.png differ diff --git a/assets/hunters/Gunner/310.png b/assets/hunters/Gunner/310.png new file mode 100644 index 0000000..1578286 Binary files /dev/null and b/assets/hunters/Gunner/310.png differ diff --git a/assets/hunters/Gunner/311.png b/assets/hunters/Gunner/311.png new file mode 100644 index 0000000..3a9c9e1 Binary files /dev/null and b/assets/hunters/Gunner/311.png differ diff --git a/assets/hunters/Gunner/312.png b/assets/hunters/Gunner/312.png new file mode 100644 index 0000000..3075591 Binary files /dev/null and b/assets/hunters/Gunner/312.png differ diff --git a/assets/hunters/Gunner/320.png b/assets/hunters/Gunner/320.png new file mode 100644 index 0000000..beb3e93 Binary files /dev/null and b/assets/hunters/Gunner/320.png differ diff --git a/assets/hunters/Gunner/321.png b/assets/hunters/Gunner/321.png new file mode 100644 index 0000000..8806886 Binary files /dev/null and b/assets/hunters/Gunner/321.png differ diff --git a/assets/hunters/Gunner/322.png b/assets/hunters/Gunner/322.png new file mode 100644 index 0000000..7705eed Binary files /dev/null and b/assets/hunters/Gunner/322.png differ diff --git a/assets/hunters/Gunner/323.png b/assets/hunters/Gunner/323.png new file mode 100644 index 0000000..e2934c6 Binary files /dev/null and b/assets/hunters/Gunner/323.png differ diff --git a/assets/hunters/Gunner/330.png b/assets/hunters/Gunner/330.png new file mode 100644 index 0000000..e454be8 Binary files /dev/null and b/assets/hunters/Gunner/330.png differ diff --git a/assets/hunters/Gunner/331.png b/assets/hunters/Gunner/331.png new file mode 100644 index 0000000..aba1185 Binary files /dev/null and b/assets/hunters/Gunner/331.png differ diff --git a/assets/hunters/Gunner/340.png b/assets/hunters/Gunner/340.png new file mode 100644 index 0000000..deace16 Binary files /dev/null and b/assets/hunters/Gunner/340.png differ diff --git a/assets/hunters/Gunner/341.png b/assets/hunters/Gunner/341.png new file mode 100644 index 0000000..dc770d5 Binary files /dev/null and b/assets/hunters/Gunner/341.png differ diff --git a/assets/hunters/Gunner/342.png b/assets/hunters/Gunner/342.png new file mode 100644 index 0000000..473b0bd Binary files /dev/null and b/assets/hunters/Gunner/342.png differ diff --git a/assets/hunters/Gunner/350.png b/assets/hunters/Gunner/350.png new file mode 100644 index 0000000..3aab936 Binary files /dev/null and b/assets/hunters/Gunner/350.png differ diff --git a/assets/hunters/Gunner/351.png b/assets/hunters/Gunner/351.png new file mode 100644 index 0000000..62ef40c Binary files /dev/null and b/assets/hunters/Gunner/351.png differ diff --git a/assets/hunters/Gunner/352.png b/assets/hunters/Gunner/352.png new file mode 100644 index 0000000..9afeb86 Binary files /dev/null and b/assets/hunters/Gunner/352.png differ diff --git a/assets/hunters/Gunner/353.png b/assets/hunters/Gunner/353.png new file mode 100644 index 0000000..14d676f Binary files /dev/null and b/assets/hunters/Gunner/353.png differ diff --git a/assets/hunters/Gunner/360.png b/assets/hunters/Gunner/360.png new file mode 100644 index 0000000..69c02ec Binary files /dev/null and b/assets/hunters/Gunner/360.png differ diff --git a/assets/hunters/Operative/300.png b/assets/hunters/Operative/300.png new file mode 100644 index 0000000..c1ad0e3 Binary files /dev/null and b/assets/hunters/Operative/300.png differ diff --git a/assets/hunters/Operative/310.png b/assets/hunters/Operative/310.png new file mode 100644 index 0000000..d1345fc Binary files /dev/null and b/assets/hunters/Operative/310.png differ diff --git a/assets/hunters/Operative/311.png b/assets/hunters/Operative/311.png new file mode 100644 index 0000000..afccc46 Binary files /dev/null and b/assets/hunters/Operative/311.png differ diff --git a/assets/hunters/Operative/312.png b/assets/hunters/Operative/312.png new file mode 100644 index 0000000..9578947 Binary files /dev/null and b/assets/hunters/Operative/312.png differ diff --git a/assets/hunters/Operative/320.png b/assets/hunters/Operative/320.png new file mode 100644 index 0000000..50dbfdc Binary files /dev/null and b/assets/hunters/Operative/320.png differ diff --git a/assets/hunters/Operative/321.png b/assets/hunters/Operative/321.png new file mode 100644 index 0000000..1f8826c Binary files /dev/null and b/assets/hunters/Operative/321.png differ diff --git a/assets/hunters/Operative/322.png b/assets/hunters/Operative/322.png new file mode 100644 index 0000000..91b0352 Binary files /dev/null and b/assets/hunters/Operative/322.png differ diff --git a/assets/hunters/Operative/323.png b/assets/hunters/Operative/323.png new file mode 100644 index 0000000..d612ff8 Binary files /dev/null and b/assets/hunters/Operative/323.png differ diff --git a/assets/hunters/Operative/330.png b/assets/hunters/Operative/330.png new file mode 100644 index 0000000..916934f Binary files /dev/null and b/assets/hunters/Operative/330.png differ diff --git a/assets/hunters/Operative/331.png b/assets/hunters/Operative/331.png new file mode 100644 index 0000000..39a167c Binary files /dev/null and b/assets/hunters/Operative/331.png differ diff --git a/assets/hunters/Operative/332.png b/assets/hunters/Operative/332.png new file mode 100644 index 0000000..b269ef1 Binary files /dev/null and b/assets/hunters/Operative/332.png differ diff --git a/assets/hunters/Operative/340.png b/assets/hunters/Operative/340.png new file mode 100644 index 0000000..212a76b Binary files /dev/null and b/assets/hunters/Operative/340.png differ diff --git a/assets/hunters/Operative/341.png b/assets/hunters/Operative/341.png new file mode 100644 index 0000000..380345b Binary files /dev/null and b/assets/hunters/Operative/341.png differ diff --git a/assets/hunters/Operative/342.png b/assets/hunters/Operative/342.png new file mode 100644 index 0000000..446ab7b Binary files /dev/null and b/assets/hunters/Operative/342.png differ diff --git a/assets/hunters/Operative/350.png b/assets/hunters/Operative/350.png new file mode 100644 index 0000000..499e169 Binary files /dev/null and b/assets/hunters/Operative/350.png differ diff --git a/assets/hunters/Operative/351.png b/assets/hunters/Operative/351.png new file mode 100644 index 0000000..9c9a02b Binary files /dev/null and b/assets/hunters/Operative/351.png differ diff --git a/assets/hunters/Operative/352.png b/assets/hunters/Operative/352.png new file mode 100644 index 0000000..f5c3481 Binary files /dev/null and b/assets/hunters/Operative/352.png differ diff --git a/assets/hunters/Operative/360.png b/assets/hunters/Operative/360.png new file mode 100644 index 0000000..58ae674 Binary files /dev/null and b/assets/hunters/Operative/360.png differ diff --git a/assets/hunters/Siren/300.png b/assets/hunters/Siren/300.png new file mode 100644 index 0000000..ebce268 Binary files /dev/null and b/assets/hunters/Siren/300.png differ diff --git a/assets/hunters/Siren/310.png b/assets/hunters/Siren/310.png new file mode 100644 index 0000000..31f6eac Binary files /dev/null and b/assets/hunters/Siren/310.png differ diff --git a/assets/hunters/Siren/311.png b/assets/hunters/Siren/311.png new file mode 100644 index 0000000..3bdb50e Binary files /dev/null and b/assets/hunters/Siren/311.png differ diff --git a/assets/hunters/Siren/312.png b/assets/hunters/Siren/312.png new file mode 100644 index 0000000..61e8ed9 Binary files /dev/null and b/assets/hunters/Siren/312.png differ diff --git a/assets/hunters/Siren/320.png b/assets/hunters/Siren/320.png new file mode 100644 index 0000000..812c9f7 Binary files /dev/null and b/assets/hunters/Siren/320.png differ diff --git a/assets/hunters/Siren/321.png b/assets/hunters/Siren/321.png new file mode 100644 index 0000000..d05e1ef Binary files /dev/null and b/assets/hunters/Siren/321.png differ diff --git a/assets/hunters/Siren/322.png b/assets/hunters/Siren/322.png new file mode 100644 index 0000000..36fcf30 Binary files /dev/null and b/assets/hunters/Siren/322.png differ diff --git a/assets/hunters/Siren/323.png b/assets/hunters/Siren/323.png new file mode 100644 index 0000000..f526814 Binary files /dev/null and b/assets/hunters/Siren/323.png differ diff --git a/assets/hunters/Siren/324.png b/assets/hunters/Siren/324.png new file mode 100644 index 0000000..4162cdb Binary files /dev/null and b/assets/hunters/Siren/324.png differ diff --git a/assets/hunters/Siren/330.png b/assets/hunters/Siren/330.png new file mode 100644 index 0000000..1fac3bb Binary files /dev/null and b/assets/hunters/Siren/330.png differ diff --git a/assets/hunters/Siren/331.png b/assets/hunters/Siren/331.png new file mode 100644 index 0000000..f88455d Binary files /dev/null and b/assets/hunters/Siren/331.png differ diff --git a/assets/hunters/Siren/332.png b/assets/hunters/Siren/332.png new file mode 100644 index 0000000..b854e78 Binary files /dev/null and b/assets/hunters/Siren/332.png differ diff --git a/assets/hunters/Siren/340.png b/assets/hunters/Siren/340.png new file mode 100644 index 0000000..5c9c0a7 Binary files /dev/null and b/assets/hunters/Siren/340.png differ diff --git a/assets/hunters/Siren/341.png b/assets/hunters/Siren/341.png new file mode 100644 index 0000000..04c432f Binary files /dev/null and b/assets/hunters/Siren/341.png differ diff --git a/assets/hunters/Siren/350.png b/assets/hunters/Siren/350.png new file mode 100644 index 0000000..1fab19d Binary files /dev/null and b/assets/hunters/Siren/350.png differ diff --git a/assets/hunters/Siren/351.png b/assets/hunters/Siren/351.png new file mode 100644 index 0000000..61f0ce3 Binary files /dev/null and b/assets/hunters/Siren/351.png differ diff --git a/assets/hunters/Siren/352.png b/assets/hunters/Siren/352.png new file mode 100644 index 0000000..1a98600 Binary files /dev/null and b/assets/hunters/Siren/352.png differ diff --git a/assets/hunters/Siren/353.png b/assets/hunters/Siren/353.png new file mode 100644 index 0000000..f1e0c1d Binary files /dev/null and b/assets/hunters/Siren/353.png differ diff --git a/assets/hunters/Siren/360.png b/assets/hunters/Siren/360.png new file mode 100644 index 0000000..96df1ee Binary files /dev/null and b/assets/hunters/Siren/360.png differ diff --git a/beastmaster/index.html b/beastmaster/index.html deleted file mode 100644 index 06de562..0000000 --- a/beastmaster/index.html +++ /dev/null @@ -1 +0,0 @@ -Borderlands 3 Skill Planner \ No newline at end of file diff --git a/bundle.014faa49.js b/bundle.014faa49.js new file mode 100644 index 0000000..3fbd881 --- /dev/null +++ b/bundle.014faa49.js @@ -0,0 +1,2 @@ +!function(e){function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}var t={};a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)a.d(n,r,function(a){return e[a]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p="/",a(a.s=0)}({"/Yqc":function(e,a){function t(){return"serviceWorker"in navigator&&("https:"===window.location.protocol||"localhost"===window.location.hostname||0===window.location.hostname.indexOf("127."))}a.install=function(e){if(e||(e={}),t()){var a=navigator.serviceWorker.register("/sw.js",{}),n=function(e){function a(){switch(s.state){case"redundant":r("onUpdateFailed"),s.onstatechange=null;break;case"installing":0;break;case"installed":n||r("onUpdateReady");break;case"activated":r("onUpdated"),s.onstatechange=null}}function t(){switch(s.state){case"redundant":s.onstatechange=null;break;case"installing":case"installed":break;case"activated":r("onInstalled"),s.onstatechange=null}}var n,i,s=e.installing||e.waiting;s&&!s.onstatechange&&(e.active?(a(),i=a):(t(),i=t),e.waiting&&(n=!0),s.onstatechange=i)},r=function(a){"function"==typeof e[a]&&e[a]({source:"ServiceWorker"})};a.then((function(e){e&&(n(e),e.onupdatefound=function(){n(e)})})).catch((function(e){return r("onError"),Promise.reject(e)}))}else;},a.applyUpdate=function(e,a){t()&&navigator.serviceWorker.getRegistration().then((function(t){t&&t.waiting?(t.waiting.postMessage({action:"skipWaiting"}),e&&e()):a&&a()}))},a.update=function(){t()&&navigator.serviceWorker.getRegistration().then((function(e){if(e)return e.update()}))}},0:function(e,a,t){e.exports=t("QfWi")},"31cR":function(e){e.exports={skill:"_3JH8h",enabled:"_1mLSi",usable:"_1xemn",augment:"_3VkFk",actionSkill:"-z8wv",chevron:"_2t_-G",diamond:"_2ej0d",image:"_8ejWg",ranks:"_3DD7O",skillTitle:"_394yV",description:"_1S9-f",effect:"oiyDq"}},"9fQE":function(e,a,t){"use strict";(function(e){function n(a){let{path:t}=a;return e("nav",null,[{name:"Zane",path:"/operative"},{name:"Amara",path:"/siren"},{name:"FL4K",path:"/beastmaster"},{name:"Moze",path:"/gunner"}].map(a=>t===a.path?null:e(r.a,{href:a.path},a.name)))}t.d(a,"a",(function(){return n}));var r=t("Y3FI")}).call(this,t("gDde").h)},"Et/u":function(e,a,t){"use strict";function n(e,a){return Math.round(e*a*10)/10}function r(e,a,t){return Math.floor(e*t)}var i=t("LMbI");a.a={Brawl:{0:{Phaseslam:{text:"Amara leaps into the air and Slams the ground, dealing damage to all nearby enemies and knocking them up. Element: Shock.",effect:e=>`Damage: ${r(e,0,98)} (increases with character level)\nCooldown: 35 Seconds`,type:i.a.ACTION_SKILL,ranks:0}},1:{"Root to Rise":{ranks:5,text:"Amara gains increased Maximum Health.",effect:e=>`Maximum Health: +${n(e,8)}%`},"Personal Space":{ranks:3,text:"Amara's weapon shots deal Bonus Damage based on the distance to her target. The closer the target, the greater the bonus.",effect:e=>`Bonus Damage: Up to +${n(e,18)}% of damage dealt`},Clarity:{ranks:5,text:"Amara constantly regenerates health. The lower her health, the more powerful the regeneration. After using an Action Skill, this bonus is doubled for a few seconds.",effect:e=>`Health Regen: Up to +${n(e,1)}% of Missing Health/sec\nAdditional Regen: Up to +${n(e,1)}% of Missing Health/sec\nDuration: 5 seconds`}},2:{"Arms Deal":{ranks:5,text:"Amara deals increased Splash Damage and takes reduced Splash Damage.",effect:e=>`Splash Damage: +${n(e,4)}%\nSplash Damage Resistance: +${function(e){switch(e){case 1:return 12;case 2:return 21;case 3:return 28;case 4:return 35;case 5:return 40;default:return 0}}(e)}%`},Samsara:{ranks:3,text:"Whenever Amara deals damage to an enemy with her Action Skill, she adds a stack of Samsara. For every stack of Samsara, Amara gains increased Gun Damage and Health Regeneration for a few seconds. Stacks decay after a few seconds.",effect:e=>`Gun Damage: +${n(e,1.7)}% per stack\nHealth Regen: +${n(e,1.7)}% of Missing Health/sec per stack\nMaximum Stacks: 5\nDuration: 20 seconds`},"Helping Hand(s)":{ranks:5,text:"For a few seconds after using her Action Skill, Amara's arms remain active and grant her Damage Resistance.",effect:e=>`Damage Resistance: +${function(e){switch(e){case 1:return 12;case 2:return 21;case 3:return 28;case 4:return 35;case 5:return 40;default:return 0}}(e)}%\nDuration: 15 seconds`},"Blight Tiger":{ranks:0,text:"Converts Amara's Action Skill to Corrosive Damage.",effect:()=>"Action Skill Element: Corrosive.",type:i.a.AUGMENT_DIAMOND}},3:{Fracture:{ranks:0,text:"Amara summons a line of fists that erupt from the ground, dealing damage to enemies in front of Amara. Element: Shock.",effect:e=>`Damage: ${r(e,0,88)} (increases with character level)\nCooldown: 28 seconds`,type:i.a.AUGMENT_ACTION_SKILL},Mindfulness:{ranks:3,text:"Whenever Amara takes damage, she gains a stack of Mindfulness. For every stack of Mindfulness, Amara gains improved Shield Regeneration Delay and Movement Speed. Stacks decay after a few seconds.",effect:e=>`Shield Regeneration Delay: -${function(e){switch(e){case 1:return 9;case 2:return 17;case 3:return 23;default:return 0}}(e)}% per stack\nMovement Speed: +${n(e,1.4)}% per stack\nMaximum Stacks: 25\nDuration: 5 seconds`},"Find Your Center":{ranks:1,text:"Amara gains increased Melee Damage. Additionally, for a few seconds after using her Action Skill, Amara gains increased Melee Range.",effect:()=>"Melee Damage: +100%\nMelee Range: +75%\nDuration: 20 seconds"},Vigor:{ranks:3,text:"Kill Skill. Killing an enemy with Amara's Action Skill grants all allies increased Movement Speed for a few seconds.",effect:e=>`Team Movement Speed: +${n(e,3.333)}%\nDuration: 8 seconds`},Revelation:{ranks:0,text:"Amara's Action Skill now creates a Nova when it damages enemies, dealing damage to all nearby enemies.",effect:e=>`Nova Damage: ${r(e,0,41)} (increases with character level)\nAction Skill Damage: -15%`,type:i.a.AUGMENT_CHEVRON}},4:{Downfall:{ranks:0,text:"Amara leaps into the air and shoots an Elemental Beam below her, followed by a Slam. Element: Shock.",effect:e=>`Beam Damage: ${r(e,0,14)} per second (increases with character level)\nSlam Damage: ${r(e,0,95)} (increases with character level)\nCooldown: 47 seconds`,type:i.a.AUGMENT_ACTION_SKILL},"One With Nature":{ranks:5,text:"Amara gains increased Maximum Health and Elemental Damage Resistance to her Action Skill Element.",effect:e=>`Maximum Health: +${n(e,5)}%\nElemental Damage Resistance: +${function(e){switch(e){case 1:return 12;case 2:return 21;case 3:return 28;case 4:return 35;case 5:return 40;default:return 0}}(e)}%`}},5:{"Do Unto Others":{ranks:1,text:"Whenever an enemy damages Amara, she automatically throws an energy orb back at them, dealing Action Skill Elemental Damage. This skill has a short cooldown.",effect:()=>"Cooldown: 8 seconds"},"Jab Cross":{ranks:5,text:"Whenever Amara deals melee damage to an enemy, she gains increased Action Skill Damage and increased Gun Damage for a few seconds.",effect:e=>`Action Skill Damage: +${n(e,15)}%\nGun Damage: +${n(e,3)}%\nDuration: 10 seconds`},"Guardian Angel":{ranks:1,text:"When Amara enters Fight For Your Life, she immediately gains a Second Wind, restores her health, and creates an Action Skill Elemental Nova that may knock back nearby enemies. This skill has a long cooldown.",effect:()=>"Health Restored: 50% of Maximum Health\nCooldown: 120 seconds"},Glamour:{ranks:0,text:"Enemies damaged by Amara's Action Skill become confused and temporarily attack their allies. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are confused as well.",effect:()=>"Confuse Duration: 8 seconds\nAction Skill Damage: -10%\nAction Skill Cooldown: +20%",type:i.a.AUGMENT_CHEVRON}},6:{Blitz:{ranks:1,text:"Melee Override. Press [Melee key] while aiming at an enemy to make Amara dash a short distance forward and perform a special melee strike, dealing Elemental Melee Damage. If a Blitz melee attack kills an enemy, Blitz's cooldown is immediately reset.",effect:()=>"Melee Damage: +100%\nCooldown: 8 seconds"}}},"Mystical Assault":{0:{Phasecast:{text:"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Element: Shock.",effect:e=>`Damage: ${r(e,0,92)}\nCooldown: 28 Seconds`,type:i.a.ACTION_SKILL,ranks:0}},1:{"Do Harm":{ranks:5,text:"Killing an enemy grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Action Skill Damage is temporarily increased.",effect:e=>`Action Skill Dmg: +${n(e,.9)}% per Rush stack consumed\nMaximum Rush Stacks: 10\nDuration: 20 seconds`},"Fast Hand(s)":{ranks:3,text:"Amara's Reload Speed, Weapon Swap Speed, and Mode Switch Speed are improved.",effect:e=>`Reload Speed: +${function(e){switch(e){case 1:return 7;case 2:return 14;case 3:return 19;default:return 0}}(e)}%\nWeapon Swap Speed: +${function(e){switch(e){case 1:return 16;case 2:return 28;case 3:return 36;default:return 0}}(e)}%\nMode Switch Speed: +${function(e){switch(e){case 1:return 16;case 2:return 28;case 3:return 36;default:return 0}}(e)}%`},"Violent Tapestry":{ranks:5,text:"Applying a Status Effect grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Status Effect Chance is temporarily increased.",effect:e=>`StatusEffect Chance: +${n(e,.6)}% per Rush stack consumed\nMaximum Rush Stacks: 10\nDuration: 20 seconds`}},2:{Alacrity:{ranks:5,text:"Amara gains increased Reload Speed for every stack of Rush. After consuming Rush stacks, this bonus is increased for a few seconds.",effect:e=>`Reload Speed: +${n(e,.4)}% per Rush stack\nAdditional Reload Speed: +${function(e){switch(e){case 1:return.6;case 2:return 1.2;case 3:return 1.8;case 4:return 2.3;case 5:return 2.9;default:return 0}}(e)}% per Rush stack consumed\nDuration: 8 seconds`},Transcend:{ranks:3,text:"Amara gains increased Accuracy and Critical Hit Damage for a few seconds after activating her Action Skill.",effect:e=>`Accuracy: +${function(e){switch(e){case 1:return 17;case 2:return 29;case 3:return 38;default:return 0}}(e)}%\nCritical Hit Damage: +${n(e,9)}%\nDuration: 12 seconds`},Restless:{ranks:5,text:"Amara gains increased Action Skill Cooldown Rate.",effect:e=>`Action Skill Cooldown Rate: +${n(e,5)}%`},"Soul Sap":{ranks:0,text:"A portion of all damage dealt by Amara's Action Skill is returned to her or a nearby ally as health.",effect:()=>"Action Skill Life Steal: 30% of damage dealt",type:i.a.AUGMENT_CHEVRON}},3:{Deliverance:{ranks:0,text:"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Whenever Amara's Astral Projection damages an enemy or object, it releases homing Elemental Projectiles that trigger her Action Skill Elemental Effect on enemies. Element: Shock.",effect:e=>`Damage: ${r(e,0,86)} (increases with character level)\nElemental Projectiles: 3 per enemy or object hit\nCooldown: 28 seconds`,type:i.a.AUGMENT_ACTION_SKILL},Ascendant:{ranks:1,text:"All Action Skill Augments gain increased effects.",effect:()=>"Soul Sap Life Steal: +20%\nAllure Radius: +100%\nGlamour Duration: +50%\nRevelation Damage: +25%\nStillness of Mind: Breaks 0.75 sec after taking dmg"},"Stillness of Mind":{ranks:0,text:"Enemies damaged by Amara's Action Skill become phaselocked until they are damaged or the duration ends. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are also phaselocked.",effect:()=>"Phaselock Duration: 6 seconds\nAction Skill Damage: -25%\nAction Skill Cooldown: +15%",type:i.a.AUGMENT_CHEVRON}},4:{Reverberation:{ranks:0,text:"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Astral Projection deals increased damage for every enemy it hits. Element: Shock.",effect:e=>`Damage: ${r(e,0,88)} (increases with character level)\nDamage Bonus: +50% per enemy hit\nCooldown: 30 seconds`,type:i.a.AUGMENT_ACTION_SKILL},"From Rest":{ranks:3,text:"Amara gains improved Fire Rate and Charge Time.",effect:e=>`Fire Rate: +${n(e,4)}%\nCharge Time: +${function(e){switch(e){case 1:return 21;case 2:return 34;case 3:return 44;default:return 0}}(e)}%`},"Laid Bare":{ranks:3,text:"Enemies take increased damage from all sources for a few seconds after being damaged by Amara's Action Skill.",effect:e=>`Damage Increase: +${n(e,8.333)}%\nDuration: 8 seconds`},Wrath:{ranks:3,text:"Amara gains increased Gun Damage. This effect is increased after she activates her Action Skill for a few seconds.",effect:e=>`Gun Damage: +${function(e){switch(e){case 1:return 6.7;case 2:return 13.3;case 3:return 20;default:return 0}}(e)}%\nAdditional Gun Damage: +${function(e){switch(e){case 1:return 6.7;case 2:return 13.3;case 3:return 20;default:return 0}}(e)}%\nDuration: 8 seconds`}},5:{Remnant:{ranks:3,text:"When Amara kills an enemy with a Gun or Action Skill, she creates a homing projectile that seeks out a new enemy dealing her Action Skill Elemental Damage. Any Overkill Damage is added to the projectile's damage.",effect:e=>`Remnant Base Damage: ${r(e,0,9)} (increases with character level)`},Awakening:{ranks:3,text:"Amara's Rush stacks gain increased effectiveness.",effect:e=>`Rush Stack Effectiveness: +${n(e,10)}%`},Tandava:{ranks:0,text:"Amara sends forward an Astral Projection of herself. When it hits a target, it explodes, damaging all nearby enemies. Element: Shock.",effect:e=>`Damage: ${r(e,0,91)} (increases with character level)\nCooldown: 35 seconds`,type:i.a.AUGMENT_ACTION_SKILL}},6:{Avatar:{ranks:1,text:"Amara's Action Skill can be activated while it's cooling down. This skill may only be used once per completed cooldown.\n\nAdditionally, increases Amara's Maximum Rush Stacks.\n\nAdditionally, if Amara's Action Skill kills an enemy, it refunds half of her Rush stacks.",effect:()=>"Maximum Rush Stacks: +10"}}},"Fist of the Elements":{0:{Phasegrasp:{text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:e=>`Skill Duration: 7 seconds\nCooldown: 16 seconds\nGrasp Immune Damage: ${r(e,0,28)} (increases with character level)`,type:i.a.ACTION_SKILL,ranks:0}},1:{Anima:{ranks:5,text:"Amara's Status Effects deal increased damage over time and have increased duration. Her Action Skill Status Effect deals further increased damage.",effect:e=>`Setatus Effect Damage: +${n(e,4)}%\nStatus Effect Duration: +${n(e,20)}%\nAction Skill Status Effect Damage: +${n(e,8)}%`},"Steady Hands":{ranks:3,text:"Amara gains increased Weapon Handling and Accuracy.",effect:e=>`Handling: +${function(e){switch(e){case 1:return 14;case 2:return 24;case 3:return 32;default:return 0}}(e)}%\nAccuracy: +${function(e){switch(e){case 1:return 13;case 2:return 23;case 3:return 31;default:return 0}}(e)}%`},Infusion:{ranks:5,text:"Convert a portion of damage dealt by Amara's weapons into her Action Skill Element.",effect:e=>`Converted Damage: ${n(e,8)}%`}},2:{Tempest:{ranks:5,text:"Amara deals increased Elemental Damage. Shock Damage is further increased.",effect:e=>`Other Elemental Damage: +${n(e,6)}%\nShock Damage: +${n(e,4)}%`},"Illuminated Fist":{ranks:1,text:"Amara gains increased Melee Damage and her Melee Damage is converted to Action Skill Element.",effect:()=>"Melee Damage: +75%"},Wildfire:{ranks:5,text:"Whenever Amara applies a Status Effect to an enemy, it has a chance to spread to a nearby enemy.",effect:e=>`Spread Chance: +${n(e,8)}%`},Soulfire:{ranks:0,text:"Converts Amara's Action Skill to Incendiary Damage.",effect:()=>"Action Skill Element: Incendiary.",type:i.a.AUGMENT_DIAMOND}},3:{"The Eternal Fist":{ranks:0,text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Whenever the Grasped enemy is killed, a new fist seeks out and Grasps a new target. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:e=>`Bonus Targets: Up to +4\nnCooldown: 20 seconds\nGrasp Immune Damage: ${r(e,0,28)} (increases with character level)`,type:i.a.AUGMENT_ACTION_SKILL},Dread:{ranks:1,text:"Amara's Gun Damage is increased for a few seconds after an enemy is Grasped. Whenever any player kills a Grasped enemy, their current weapon is instantly reloaded.",effect:()=>"Gun Damage: +15%\nDuration: 8 seconds"},Allure:{ranks:0,text:"Amara's Action Skill creates a singularity that pulls in enemies.",effect:()=>"Duration: 2.5 seconds\nAction Skill Damage: -20%",type:i.a.AUGMENT_CHEVRON}},4:{Indiscriminate:{ranks:3,text:"Amara's bullets that damage enemies have a chance to ricochet and deal decreased damage to other nearby enemies. Ricochet Chance and Damage are increased if target is affected by Phasegrasp or Stillness of Mind.",effect:e=>`Ricochet Chance: +${n(e,10)}%\nRicochet Damage: -50%\nAction Skill Ricochet Chance: +${n(e,20)}%\nAction Skill Ricochet Damage: -25%`},"Deep Well":{ranks:1,text:"Amara gains increased Magazine Size with elemental weapons.",effect:()=>"Magazine Size: +20%"},Catharsis:{ranks:3,text:"Whenever Amara triggers an elemental effect on an enemy, when that enemy dies that enemy explodes, dealing her attuned element damage along with any other element that is currently inflicted upon that enemy. This skill has a short cooldown.",effect:e=>`Damage: ${r(e,0,4)} (increases with character level)\nCooldown: 8 seconds`},"Ties That Bind":{ranks:0,text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Enemies near the Grasped target are linked, and any damage dealt to a linked target is shared between all other linked targets. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:e=>`Linked Damage: 35% of damage dealt\nDuration: 7 seconds\nCooldown: 18 seconds\nGrasp Immune Damage: ${r(e,0,34)} (increases with character level)`,type:i.a.AUGMENT_ACTION_SKILL}},5:{"Fist Over Matter":{ranks:0,text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. After Grasping the targeted enemy, large fists appear and constantly smash the area, dealing damage to nearby enemies. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:e=>`Damage: ${r(e,0,35)} (increases with character level)\nDuration: 7 seconds\nCooldown: 28 seconds\nGrasp Immune Damage: ${r(e,0,39)} (increases with character level)`,type:i.a.AUGMENT_ACTION_SKILL},Sustainment:{ranks:5,text:"Amara gains Life Steal whenever she deals Elemental Damage with her weapon.",effect:e=>`Elemental Weapon Life Steal: +${n(e,4)}% of damage dealt`},Conflux:{ranks:5,text:"Whenever Amara applies a Status Effect to an enemy, she gains a chance to randomly Electrocute, Ignite, or Melt that enemy.",effect:e=>`Extra Status Effect Chance: +${n(e,7)}%`}},6:{"Forceful Expression":{ranks:1,text:"Amara's guns deal Bonus Elemental Damage based on her Action Skill Element.",effect:()=>"Bonus Elemental Damage: +18% of damage dealt"}}},"Enlightened Force":{0:{Phaseflare:{text:"Amara summons an Orb of Elemental Energy that deals constant elemental damage to nearby enemies.\n\nPressing [Melee key] near the Orb causes it to fly towards toward an enemy and damage them. Addiontally, every time Amara uses a melee attack on the Orb, it gains Increased Damage based on the damage she dealt to it.\n\nPressing [Action Skill key] causes the Orb to return to Amara.",effect:e=>`Impact Damage: ${r(e,0,27)} (increases with character level)\nArea Damage: ${r(e,0,5)} per second (increases with character level)\nDuration: 30 seconds\nCooldown:48seconds`,type:i.a.ACTION_SKILL,ranks:0}},1:{"Trust In Yourself":{ranks:5,text:"Whenever an enemy breaks Amara's shield, she gains increased Reload Speed, Charge Speed, and Weapon Swap Speed for a short time. This effect is doubled if Amara's shield is broken by a melee attack.",effect:e=>`Reload Speed: ${n(e,4)}%\nCharge Speed: +${n(e,8)}%\nWeapon Swap Speed: +${n(e,16)}\nDuration: 24 seconds`},"No Mistakes In Nature":{ranks:5,text:"Whenever Amara inflicts a Status Effect on an enemy, she gains increased Melee Damage for a short time.",effect:e=>`Melee Damage: +${n(e,13)}%\nDuration: 12 seconds`},"Heavy Rain":{ranks:5,text:"Amara's weapons gain increased Projectile Speed and Splash Damage.",effect:e=>`Projectile Speed: +${n(e,14)}%\nSplash Damage: +${n(e,7)}%`}},2:{"Glow Up":{ranks:0,text:"Instead of dealing Splash Damage to enemies, Amara's Orb grants nearby allies Health Regeneration. Amara my also press [Melee key] while near the orb to send it to a downed ally, granting them a Second Wind.",effect:e=>`Impact Damage: ${r(e,0,29)}\nHealing: ${r(e,0,6)} health per second\nDuration: 34 seconds\n Cooldown: 28 seconds`,type:i.a.AUGMENT_ACTION_SKILL},"Go With The Flow":{ranks:3,text:"Whenever Amara Freezes an enemy, she gains increased Movement Speed and Weapon Damage for a short time.",effect:e=>`Gun Damage: +${n(e,7)}%\nMovement Speed: +${n(e,3)}%\nDuration: 16 seconds`},"Unweave The Rainbow":{ranks:3,text:"Amara deals Bonus Damage of her attuned element whenever she deals Melee Damage or Splash Damage to frozen enemies.",effect:e=>`Bonus Damage: ${n(e,11)}% of damage dealt`},"Ebb And Flow":{ranks:3,text:"Whenever Amara kills an enemy with a melee attack, she gains a portion of the damage dealt back as health.",effect:e=>`Life Steal: ${n(e,21)}% of damage dealt`},"Cold Hearted":{ranks:0,text:"Converts Amara's Action Skill to Cryo Damage.",effect:()=>"Action Skill Element: Cryo.",type:i.a.AUGMENT_DIAMOND}},3:{"Shooting Star":{ranks:0,text:"Amara summons an Orb of Elemental Energy that deals constant elemental damage to nearby enemies. Pressing [Melee key] near the Orb causes it to fly forwards toward an enemy and damage them which also increases the amount of Overal Damage the Orb deals to enemies. Additionally, the Elemental Orb continually fires Elemental Projectiles at the last enemy Amara damaged. Pressing [Action Skill key] causes the ORb to return to Amara. ",effect:e=>`Impact Damage: ${r(e,0,21)}\nArea Damage: ${r(e,0,4)} per second\nDuration: 26 seconds\nCooldown: 44 seconds`,type:i.a.AUGMENT_ACTION_SKILL},"Combo Breaker":{ranks:1,text:"Killing an enemy with Melee Damage has a chance to reset Amara's Action Skill Cooldown.",effect:e=>`Reset Chance: ${n(e,20)}%`},Expedite:{ranks:0,text:"Whenever Amara kills an enemy with her Action Skill, she gains increased Action Skill Cooldown Rate until she activates her Action Skill again.",effect:()=>"Cooldown Rate: +30% per enemy killed",type:i.a.AUGMENT_CHEVRON}},4:{"Joyful Freedom":{ranks:5,text:"After activating her Action Skill, Amara gains increased Melee Damage for a short time.",effect:e=>`Melee Damage: ${n(e,14)}%\nDuration: 12 seconds`},"Burn Both Ends":{ranks:5,text:"After activating her Action Skill, Amara gains Increased Threat for a short time, drawing the attention of all enemies in a huge radius.\n\nWhenever Amara is dealt damage by an enemy, she gains Increased Damage for a short time. This effect stacks.",effect:e=>`Damage: +${n(e,1)}%\nMax Stacks: 15\nDuration: 8 seconds`}},5:{"Light Fantastic":{ranks:0,text:"Amara summons an Orb of Elemental Energy that deals constant elemental damage to nearby enemies. Whenever Amara damages an enemy, the Elemental Orb automatically travels to that enemy, the Elemental Orb gains Increased Damage. Pressing [Action Skill key] causes the Orb to return to Amara.",effect:e=>`Impact Damage: ${r(e,0,18)}\nArea Damage: ${r(e,0,4)} per second\nDuration: 24 seconds\nCooldown: 44 seconds`,type:i.a.AUGMENT_ACTION_SKILL},"Body And Mind":{ranks:3,text:"Kill Skill. Amara's melee attacks deal Bonus Splash Damage for a short time.",effect:e=>`Splash Damage: ${r(e,0,4)}\nDuration: 12 seconds`},"Free The Soul":{ranks:1,text:"Kill Skill. Whenever Amara kills a frozen enemy, splinters fly out from that enemy and home to nearby enemies, dealing Cryo Damage. This skill has a short cooldown.",effect:e=>`Damage: ${r(e,0,35)}\nCooldown: 3 seconds`},Atman:{ranks:3,text:"Amara gains increased Skill Damage.",effect:e=>`Skill Damage: +${n(e,9)}%`}},6:{"Clear The Mind":{ranks:1,text:"Kill Skill. After killing an enemy, Amara ignores enemie's Elemental Damage Resistance for a short time. This does not affect Elemental Immunity.",effect:()=>"Duration: 8 seconds"}}}}},Fl18:function(e,a,t){"use strict";(function(e){var n=t("laFY"),r=t.n(n),i=e("span",null,e("a",{href:"https://borderlands.com/"},"Official Borderlands website")," - ",e("a",{href:"https://github.com/seigler/bl3skills.com"},"Source Code")," - ",e("a",{href:"https://github.com/seigler/bl3skills.com/labels/bug"},e("img",{alt:"GitHub issues: bugs",src:"https://img.shields.io/github/issues-raw/seigler/bl3skills.com/bug"}))," ",e("a",{href:"https://github.com/seigler/bl3skills.com/labels/enhancement"},e("img",{alt:"GitHub issues: enhancements",src:"https://img.shields.io/github/issues-raw/seigler/bl3skills.com/enhancement"}))," ",e("img",{alt:"GitHub contributors",src:"https://img.shields.io/github/contributors/seigler/bl3skills.com"}));a.a=function(){return e("footer",{class:r.a.footer},i)}}).call(this,t("gDde").h)},G9Up:function(e,a,t){"use strict";(function(e){var n=t("Y3FI"),r=t("NZ6x"),i=t("cY+X"),s=t("rFP/"),o=t("x3c/"),l=t("cQx2"),c=e(n.b,null,e(r.a,{path:"/"}),e(i.a,{path:"/operative"}),e(s.a,{path:"/siren"}),e(o.a,{path:"/beastmaster"}),e(l.a,{path:"/gunner"}));a.a=()=>c}).call(this,t("gDde").h)},J3pd:function(e,a,t){"use strict";(function(e){function n(){return(n=Object.assign?Object.assign.bind():function(e){for(var a=1;a(r,i)=>{this.setState(Object(d.a)(this.state,{type:"skillChange",skillName:e,treeIndex:a,treeName:t,tierIndex:n,newValue:i,oldValue:r}))},p=Object.keys(this.state.skills).map((a,t)=>e("div",{class:`${f.a.tree} ${[f.a.green,f.a.blue,f.a.red,f.a.purple][t]}`},e("style",null,`.${f.a.tree}:nth-child(${t+1}) { --invested: ${this.state.invested[t]}; --treeindex: ${t};}`),e("h2",{class:f.a.treeName},a),e("div",{class:f.a.skills},Object.keys(this.state.skills[a]).map((r,o)=>e("div",{class:f.a.tier},Object.keys(this.state.skills[a][r]).map((l,c)=>e(s.a,n({},this.state.skills[a][r][l],{name:l,enabled:this.state.invested[t]>=5*o-5,level:Object(h.a)(this.state),image:`../../assets/hunters/${i}/${t}${o}${c}.png`,onChange:g(l,t,a,o)})))))))),k=Object(h.a)(this.state);return e("div",null,e("div",{class:f.a.header},e("h1",{class:f.a.title},t,e("div",{class:f.a.subtitle},"the ",i)),e("div",{class:f.a.sidepanel},e("div",{class:f.a.level},"Level ",k),e("div",{class:f.a.reset},e("a",{onClick:()=>{Object(c.b)(u),this.setState({invested:[0,0,0,0],skills:u||{}})}},"Reset"))),e(o.a,{path:l})),e("main",null,e("div",{class:f.a.VaultHunter,onContextMenu:r},e("div",{class:f.a.trees},p))),m)}}}).call(this,t("gDde").h)},LMbI:function(e,a){"use strict";a.a={ACTION_SKILL:1,AUGMENT_CHEVRON:2,AUGMENT_DIAMOND:3,AUGMENT_ACTION_SKILL:4}},MKmk:function(e){e.exports={VaultHunter:"_2zgqJ",header:"_1Jomm",title:"_17kLY",subtitle:"_3J3hw",sidepanel:"_2UO55",level:"xH9ts",reset:"K9CBr",trees:"_3ek45",tier:"_3Ch4X",treeName:"_1WAM2",tree:"gRWZY",skills:"_2Su0b",green:"-Pl7G",blue:"_1nm1I",red:"_3T1pZ",purple:"Fmsm1"}},NZ6x:function(e,a,t){"use strict";(function(e){var n=t("Y3FI"),r=t("Fl18"),i=t("odKX"),s=t.n(i),o=e(r.a,null);a.a=function(){return e("div",null,e("div",{class:s.a.splash},e("div",{class:s.a.wrapper},e("h1",null,e("div",{class:s.a.disclaimer},"(Unofficial)"),"Borderlands 3 skill calculator"),[{name:"Zane",job:"the Operative",path:"/operative"},{name:"Amara",job:"the Siren",path:"/siren"},{name:"FL4K",job:"the Beastmaster",path:"/beastmaster"},{name:"Moze",job:"the Gunner",path:"/gunner"}].map(a=>e(n.a,{class:s.a.link,href:a.path},e("div",{class:s.a.name},a.name,e("div",{class:s.a.job},a.job)))))),o)}}).call(this,t("gDde").h)},QfWi:function(e,a,t){"use strict";t.r(a);var n=t("gDde"),r=t("G9Up");t("pyAK");let i=document.querySelector("#app");Object(n.render)(Object(n.h)(r.a,null),i,i.firstElementChild);t("/Yqc").install()},Y3FI:function(e,a,t){"use strict";function n(e,a){for(var t in a)e[t]=a[t];return e}function r(e,a){return e.ranka.rank?-1:e.index-a.index}function i(e,a){return e.index=a,e.rank=function(e){return e.attributes.default?0:(a=e.attributes.path,s(a).map(o).join(""));var a}(e),e.attributes}function s(e){return e.replace(/(^\/+|\/+$)/g,"").split("/")}function o(e){return":"==e.charAt(0)?1+"*+?".indexOf(e.charAt(e.length-1))||4:5}function l(){var e;return""+((e=k&&k.location?k.location:k&&k.getCurrentLocation?k.getCurrentLocation():"undefined"!=typeof location?location:D).pathname||"")+(e.search||"")}function c(e,a){return void 0===a&&(a=!1),"string"!=typeof e&&e.url&&(a=e.replace,e=e.url),function(e){for(var a=y.length;a--;)if(y[a].canRoute(e))return!0;return!1}(e)&&function(e,a){void 0===a&&(a="push"),k&&k[a]?k[a](e):"undefined"!=typeof history&&history[a+"State"]&&history[a+"State"](null,null,e)}(e,a?"replace":"push"),d(e)}function d(e){for(var a=!1,t=0;t0},a.prototype.routeTo=function(e){return this._didRoute=!1,this.setState({url:e}),this.updating?this.canRoute(e):(this.forceUpdate(),this._didRoute)},a.prototype.componentWillMount=function(){y.push(this),this.updating=!0},a.prototype.componentDidMount=function(){var e=this;k&&(this.unlisten=k.listen((function(a){e.routeTo(""+(a.pathname||"")+(a.search||""))}))),this.updating=!1},a.prototype.componentWillUnmount=function(){"function"==typeof this.unlisten&&this.unlisten(),y.splice(y.indexOf(this),1)},a.prototype.componentWillUpdate=function(){this.updating=!0},a.prototype.componentDidUpdate=function(){this.updating=!1},a.prototype.getMatchingChildren=function(e,a,t){return e.filter(i).sort(r).map((function(e){var r=function(e,a,t){var n,r=/(?:\?([^#]*))?(#.*)?$/,i=e.match(r),o={};if(i&&i[1])for(var l=i[1].split("&"),c=0;c"Movement Speed: +5.0%"},"Fade Away":{text:"FL4K cloaks, turning invisible. FL4K can fire 3 shots while cloaked, and each shot is automatically a Critical Hit. While cloaked, FL4K has increased Movement Speed and Health Regeneration.",type:r.a.ACTION_SKILL,ranks:0,effect:()=>"Fade Away Bonus Damage: 200% of damage dealt\nCloaked Movement Speed: +25%\nHealth Regeneration: +3% of Max Health per second\nCooldown: 45 seconds\nDuration: 15 seconds"}},1:{"Self-Repairing System":{text:"FL4K's Maximum Health is increased, and they constantly regenerate health.",ranks:5,effect:e=>`Health Regeneration: ${n(e,.3)}% of Max Health/sec\nMaximum Health: +${n(e,6)}%`},"Sic'Em":{text:"Attack Command has lowered Cooldown and increased Damage.",ranks:3,effect:e=>`Attack Command Damage: +${n(e,10)}%\nAttack Command Cooldown: -${n(e,10)}%`},"Furious Attack":{text:"Hunter Skill. After shooting an enemy, FL4K gains a stack of Furious Attack.\n\nFor each stack of Furious Attack, FL4K's Handling and Gun Damage are increased, and their pet gains increased Damage per stack. Stacks decay after a few seconds.",ranks:5,effect:e=>`Gun Damage: +${n(e,.4)}% per stack\nHandling: +${function(e){switch(e){case 1:return 1;case 2:return 2;case 3:return 2.9;case 4:return 3.8;case 5:return 4.8;default:return 0}}(e)}% per stack\nPet Damage: +${n(e,.6)}% per stack\nMaximum Stacks: 10\nDuration: 4 seconds`}},2:{"Guerrillas In The Mist":{text:"Fade Away no longer ends after FL4K attacks, at the cost of Critical Hit Damage and Fade Away duration being reduced.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Critical Hit Damage: 25% of damage dealt\nFade Away Duration: 5 seconds"},"Eager To Impress":{text:"Kill Skill. Whenever FL4K kills an enemy, Action Skill Cooldown Time is reduced.\n\nWhenever FL4K's pet kills an enemy, Action Skill Cooldown Time is reduced even more and Attack Command's duration is refreshed.",ranks:5,effect:e=>`FL4K Kill Action Skill Cooldown: -${n(e,.25)} seconds\nPet Kill Action Skill Cooldown: -${n(e,.5)} seconds`},"All My BFF's":{text:"Allies share a portion of FL4K's total Health Regeneration. FL4K's pet shares twice the amount of Health Regeneration.",ranks:3,effect:e=>`Allies' Health Regen: +${Math.round(n(e,16.666))}% of FL4K's Health Regen\nPet Health Regen: +${Math.round(n(e,33.333))}% of FL4K's Health Regen`},Overclocked:{text:"FL4K gains increased Fire Rate. FL4K gains even more Fire Rate after reloading.",ranks:5,effect:e=>`Fire Rate after Reloading: +${n(e,2)}%\nFire Rate : +${n(e,2)}%\nDuration: 4 seconds`}},3:{"Not My Circus":{text:"After Fade Away ends, FL4K's pet will Taunt, drawing the attention of all enemies in a huge radius.\nFor a few seconds after Taunting, the pet gains powerful Damage Resistance.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Pet Damage Resistance: +80%\nPet Taunt Duration: 6 seconds"},"Lick The Wounds":{text:"When FL4K is in Fight For Your Life, their pet will attempt to revive them. If it does, it gains increased Damage for a short time.",ranks:1,effect:()=>"Pet Damage: +30%\nDuration: 60 seconds"},"Turn Tail And Run":{text:"While moving, FL4K constantly regenerates health and gains Damage Resistance.\n\nWhile still, FL4K gains Gun Damage and Fire Rate.",ranks:3,effect:e=>`Health Regen While Moving: +${n(e,.3)}% Max Health/sec\nDamage Resistance: +${function(e){switch(e){case 1:return 6.5;case 2:return 12.3;case 3:return 17.4;default:return 0}}(e)}% while moving\nGun Damage While Still: +${n(e,8.333)}%\nFire Rate While Still: +${n(e,4)}%`},"Beefcake Jabber":{text:"FL4K's Jabber evolves into a Beefcake, discarding its pistol and equipping a Shotgun. While accompanied by the Beefcake, FL4K gains increased Movement Speed and Maximum Health. When FL4K issues an Attack Command, the Beefcake will summon a melee weapon to deliver a powerful attack that knocks enemies back.",type:r.a.AUGMENT_DIAMOND,ranks:0,effect:()=>"Movement Speed: +5%\nMaximum Health: +10%"}},4:{"Until You Are Dead":{text:"The Health Regeneration and Movement Speed of Fade Away persists for a short time after the skill has ended.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Post Cloak Duration: 10 seconds"},"The Fast And The Furryous":{text:"While above half health, FL4K's Gun Damage and Movement Speed are increased, and their pet gains increased Damage.",ranks:3,effect:e=>`Gun Damage: +${Math.round(n(e,8.333))}%\nPet Damage: +${n(e,10)}%\nMovement Speed: +${n(e,3.333)}%e`},"Hidden Machine":{text:"When an enemy has no target or is attacking a different target, FL4K deals increased damage against them.",ranks:5,effect:e=>`Damage: +${n(e,6)}%`},"Gunslinger Jabber":{text:"FL4K's Jabber upgrades his gear and equips an SMG. While accompanied by the Gunslinger, FL4K gains increased Movement Speed and Critical Hit Damage. When FL4K issues an Attack Command, the Gunslinger equips a Rocket Launcher to attack the target.",type:r.a.AUGMENT_DIAMOND,ranks:0,effect:()=>"Movement Speed: +5%\nCritical Hit Damage: +5%"}},5:{"Unblinking Eye":{text:"During Fade Away, successive hits on the same target increase FL4K's Critical Damage per hit. Unblinking Eye resets every 3 hits.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Additional Fade Away Bonus Damage: +75% of damage dealt per hit"},"Rage And Recover":{text:"Kill Skill. After killing an enemy, FL4K and FL4K's pet regenerate health for a few seconds.",ranks:5,effect:e=>`Health Regeneration: +${n(e,1.6)}% of Missing Health/sec\nDuration: 3 seconds`}},6:{"The Power Inside":{text:"FL4K and FL4K's pet gain increased Damage when FL4K activates an Action Skill. If FL4K is at full health, the increased Damage is doubled.",ranks:1,effect:()=>"Damage: +25%\nDuration: 15 seconds"}}},Master:{0:{"Guard Skag":{text:"FL4K is joined by a loyal Skag companion, which will increase FL4K's Damage. Hold [Pet Skill key] to issue an Attack Command, which will cause the Skag to vomit acid onto enemies.",type:r.a.AUGMENT_DIAMOND,ranks:0,effect:()=>"Damage: +5%"},"Gamma Burst":{text:"FL4K creates a Rift at a target location, teleporting their pet through the Rift and dealing Radiation Damage to nearby enemies. Additionally, FL4K's pet becomes irradiated, growing in size and dealing bonus Radiation Damage when it attacks. Using Gamma Burst while FL4K's pet is downed or dead will revive the pet at the targeted location with 30% of its health, but will double Action Skill Cooldown Time.",type:r.a.ACTION_SKILL,ranks:0,effect:()=>"Damage 56: (increases with character level)\nDuration: 20 seconds\nCooldown: 30 seconds"}},1:{Ferocity:{text:"FL4K's Pet deals increased damage.",ranks:5,effect:e=>`Pet Damage: +${n(e,10)}%`},"Persistence Hunter":{text:"Increases FL4K's Gun Damage and Action Skill Duration.",ranks:3,effect:e=>`Gun Damage: +${n(e,4)}%\nAction Skill Duration: +${n(e,15)}%`},"Go For The Eyes!":{text:"When FL4K's pet attacks an enemy, the first melee attack is an automatic Critical Hit that deals increased damage.",ranks:5,effect:e=>`Pet Critical Hit Damage: ${n(e,15)}%`}},2:{"Atomic Aroma":{text:"While Gamma Burst is active, FL4K's pet is surrounded by a Radiation Aura, constantly damaging all nearby enemies.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Radiation Damage: 4 per second (increases with character level)"},"Who Rescued Who?":{text:"Whenever FL4K's Pet deals damage, FL4K regenerates health for a few seconds. Whenever FL4K deals damage to an enemy, their Pet's health is restored for a portion of the damage dealt.",ranks:5,effect:e=>`Health Regeneration: +${n(e,.4)}% of Max Health/sec\nPet Health Restored: +${n(e,1)}% of damage dealt`},"He Bites!":{text:"When FL4K's pet takes damage, the pet returns some of that damage to the attacker.",ranks:3,effect:e=>`Damage Returned: ${n(e,5)}% of damage received`},Frenzy:{text:"Hunter Skill. When FL4K's pet deals damage, FL4K and their pet gain a stack of Frenzy. Each stack of Frenzy increases Damage. The stacks decay after a few seconds.",ranks:5,effect:e=>`Damage: +${n(e,.8)}% per stack\nMaximum Stacks: 10`}},3:{"Empathic Rage":{text:"For the duration of Gamma Burst, Damage dealt by FL4K is increased.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Damage: +20%"},"Psycho Head On A Stick":{text:"Hunter Kill Skill. Whenever FL4K kills an enemy, their pet gains increased Movement Speed and Damage for a few seconds.",ranks:1,effect:()=>"Pet Damage: +20%\nPet Movement Speed: +12%\nDuration: 8 seconds"},"Hive Mind":{text:"When FL4K takes damage, a portion of all damage they take is inflicted on their pet instead and their pet deals Bonus Damage for a short time.",ranks:3,effect:e=>`Damage Shared: ${n(e,5)}%\nPet Bonus Damage: +${n(e,7.5)}%`},"Great Horned Skag":{text:"FL4K's Skag evolves into a larger Great Horned Skag, which will increase FL4K's Damage and Gun Damage.\n\nWhen FL4K issues an Attack Command, the Great Horned Skag will charge at enemies and knock them into the air.",type:r.a.AUGMENT_DIAMOND,ranks:0,effect:()=>"Damage: +5%\nGun Damage: +10%"}},4:{Endurance:{text:"When FL4K or FL4K's pet kills an enemy while Gamma Burst is active, the duration of Gamma Burst is extended and pet damage is increased. These effects can stack up to 5 times.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Gamma Burst Duration: +3 seconds per kill\nPet Damage: +10% per kill"},"Barbaric Yawp":{text:"Increases the power of Pet Bonuses granted to FL4K.",ranks:5,effect:e=>`Pet Bonuses: +${n(e,40)}%`},"Mutated Defenses":{text:"When FL4K's pet is at low health, it gains Damage Reduction and regenerates health. This skill has a long cooldown.",ranks:1,effect:()=>"Health Regeneration: +40% of Max Health Pet Health over 6 seconds\nPet Damage Resistance: +30% for 6s\nCooldown: 15 seconds"},"Eridian Skag":{text:"FL4K's Skag evolves into an Eridian Skag, which will increase FL4K's Damage and Fire Rate.\n\nWhen FL4K issues an Attack Command, their Eridian Skag pulls nearby enemies in by generating a Singularity.",type:r.a.AUGMENT_DIAMOND,ranks:0,effect:()=>"Damage: +5%\nFire Rate: +5%"}},5:{"Burst Aid":{text:"After using Gamma Burst, the Rift remains for the duration of the skill. While standing near the Rift, FL4K and their allies rapidly Regenerate Health.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Health Regeneration: +20% of Max Health/sec"},"Pack Tactics":{text:"All damage dealt by FL4K and their pet is increased.\n\nAdditionally, the Maximum Health of both FL4K and their pet is increased.",ranks:3,effect:e=>`Pet and FL4K Damage: +${n(e,7)}%\nPet and FL4K Maximum Health: +${n(e,5)}%`},"Shared Spirit":{text:"While FL4K is at low health, a portion of all damage they take is converted into healing for their pet instead.",ranks:1,effect:()=>"Damage Converted: 50%"}},6:{Dominance:{text:"Whenever FL4K attacks an enemy with a melee attack or scores a Critical Hit with a weapon while aiming down sights they establish Dominance over that enemy turning it into an ally for a short time. if the enemy is a Beast, the duration is doubled.\n\nWhile under the effect of Dominance, other enemies are more likely to attack it and it constantly loses health until it dies or the effect ends. Once Dominance ends, a Radiation Nova is created centered around that enemy. Only one enemy can be under the effect of Dominance at a time and an enemy may only be affected once.",ranks:1,effect:()=>"Duration: 12 seconds\nTarget Loses 2% of Maximum Health per second\nNova Damage: 12 (scales with level)"}}},Hunter:{0:{"Spiderant Centurion":{text:"FL4K is joined by a loyal Spiderant companion, which will cause FL4K to constant regenerate health.\n\nHold [Pet Skill key] to issue an Attack Command, which will cause the Spiderant to charge into enemies.",type:r.a.AUGMENT_DIAMOND,ranks:0,effect:()=>"Health Regeneration: 1% of Max Health per second"},"Rakk Attack!":{text:"FL4K sends forward 2 Rakk to dive-bomb enemies. This skill has multiple charges. Element: Incendiary.",type:r.a.ACTION_SKILL,ranks:0,effect:()=>"Damage: 35 (increases with character level)\nCooldown: 18 seconds\nSkill Charges: 2\nDeals Incendiary Elemental Damage"}},1:{"Interplanetary Stalker":{text:"Hunter Kill Skill. Whenever FL4K kills an enemy, they gain a stack of Interplanetary Stalker. For each stack of Interplanetary Stalker, they and their pet gain a bonus to all damage dealt\n\nAdditionally, they gain a unique stacking bonus depending on the type of enemy killed. Each unique bonus can stack up to 3 times. Each stack decays after a short time.",ranks:5,effect:e=>`Damage: +${n(e,2)}% per stack\nPet Damage: +${n(e,1)}% per stack\nRobot Bonus: +${n(e,1.5)}% Corrosive Damage per stack\nHuman Bonus: +${n(e,3)}% Action Skill Damage per stack\nBeast Bonus: +${function(e){switch(e){case 1:return 2;case 2:return 3;case 3:return 5;case 4:return 6;case 5:return 7;default:return 0}}(e)}% Movement Speed per stack\nMaximum Stacks: 3`},"Leave No Trace":{text:"When FL4K scores a Critical Hit, there is a chance for 1 ammo to be added to their magazine.",ranks:3,effect:e=>`Ammo Chance: +${n(e,12)}%\nCooldown: 0.3 seconds`},"Second Intention":{text:"Hunter Kill Skill. Whenever FL4K kills an enemy, they gain increased Reload Speed. This bonus is increased if FL4K scores a Critical Kill.",ranks:5,effect:e=>`Reload Speed: +${Math.ceil(n(e,2.6))}%\nCritical Kill Reload Speed: +${function(e){switch(e){case 1:return 6;case 2:return 11;case 3:return 15;case 4:return 19;case 5:return 23;default:return 0}}(e)}%\nDuration: 5 seconds`}},2:{"Rakk Open A Cold One":{text:"Converts FL4K's Rakk to Cryo Damage.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Rakk Attack! Element: Cryo"},"Hunter's Eye":{text:"FL4K gains bonuses when fighting different types of enemies.",ranks:5,effect:e=>`Human Bonus: +${n(e,2.48)}% Critical Hit Damage\nRobot Bonus: +${n(e,6)}% Armor Damage\nBeast Bonus: +${function(e){switch(e){case 1:return 5.3;case 2:return 10.1;case 3:return 14.4;case 4:return 18.3;case 5:return 21.9;default:return 0}}(e)}% Damage Resistance`},"Head Count":{text:"Whenever FL4K scores a Critical Hit, there is a chance their Action Skill Cooldown is reduced.",ranks:3,effect:e=>`Cooldown Reduction Chance: +${n(e,10)}%\nAction Skill Cooldown: -2 seconds`},"Ambush Predator":{text:"While there are no enemies nearby, FL4K's Weapon Handling and Critical Hit Damage are increased.",ranks:5,effect:e=>`Handling: +${function(e){switch(e){case 1:return 17;case 2:return 29;case 3:return 38;case 4:return 44;case 5:return 50;default:return 0}}(e)}%\nCritical Hit Damage: +${n(e,4)}%`}},3:{"Falconer's Feast":{text:"When FL4K's Rakk damage an enemy, a portion of FL4K's health is restored.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Health Restored: 7% of Maximum Health"},"Two F4ng":{text:"FL4K has a chance to fire an extra projectile per shot.",ranks:5,effect:e=>`Extra Projectile Chance: +${n(e,5)}%`},"Spiderant Scorcher":{text:"FL4K's Spiderant evolves into a Scorcher, occasionally dealing Incendiary Damage to all enemies nearby. While accompanied by the Scorcher, FL4K constantly regenerates health and deals increased Elemental Damage.\n\nWhen FL4K issues an Attack Command, the Scorcher will charge enemies.",type:r.a.AUGMENT_DIAMOND,ranks:0,effect:()=>"Health Regeneration: +1% of Max Health per second\nElemental Damage: +10%"}},4:{"Flock'N'Load":{text:"FL4K sends forward additional Rakk.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Additional Rakk: +2"},"Big Game":{text:"FL4K's Hunter Skills become much more effective and have a longer duration.",ranks:3,effect:e=>`Hunter Skill Duration: +${Math.round(n(e,33.333))}%\nHunter Skill Effects: +${n(e,10)}%`},"The Most Dangerous Game":{text:"Hunter Kill Skill. Whenever FL4K kills a Badass or stronger enemy, they gain increased Critical Hit Damage, Gun Damage, and Handling for a long time and their pet receives increased Damage for a long time.\n\nAdditionally, they receive a cash reward from the Intergalactic Bureau of Bounty Hunting.",ranks:3,effect:e=>`Gun Damage: +${n(e,8.33)}%\nCritical Hit Damage: +${Math.round(n(e,3.333))}%\nHandling: +${function(e){switch(e){case 1:return 14.3;case 2:return 25;case 3:return 33.3;default:return 0}}(e)}%\nPet Damage: +${n(e,9)}%\nDuration: 120 seconds`},"Spiderant Countess":{text:"FL4K's Spiderant evolves into a Countess, which will cause FL4K to constantly regenerate health and gain Damage Resistance.\n\nWhen FL4K issues an Attack Command, the Countess will burrow underground and then emerge dealing Corrosive Damage in an area.",type:r.a.AUGMENT_DIAMOND,ranks:0,effect:()=>"Health Regeneration: +1% of Max Health per second\nDamage Resistance: +5%"}},5:{Rakkcelerate:{text:"FL4K's Rakk have increased Cooldown Rate and gain an Additional Charge.",type:r.a.AUGMENT_CHEVRON,ranks:0,effect:()=>"Skill Charges: +1\nCooldown Rate: +20%"},"Galactic Shadow":{text:"FL4K deals increased Critical Hit Damage, and enemies are less likely to attack them.",ranks:1,effect:()=>"Critical Hit Damage: +15%"},"Grim Harvest":{text:"FL4K gains increased Gun Damage and Action Skill Damage. FL4K's pet gains increased Damage.",ranks:5,effect:e=>`Gun Damage: +${n(e,3)}%\nAction Skill Damage: +${n(e,10)}%\nPet Damage: +${n(e,7)}%`}},6:{Megavore:{text:"FL4K gains a chance to score a Critical Hit with weapons against any part of enemies.",ranks:1,effect:()=>"Critical Hit Chance: +20%"}}},Trapper:{0:{"Pet Ion Loader":{ranks:0,text:"FL4K is joined by a loyal Mini ION Loader Bot companion, armed with a Shock Sniper Rifle and Homing Shock Orbs that can be shot to trigger a Shock Nova. While accompanied by the ION Loader, FL4K gains increased Elemental Damage Resistance.\nHold [Pet Skill key] to issue an Attack Command, which causes the ION Loader to fire a powerful Eye Laser at the enemy.",effect:()=>"Elemental Resistance: +30%",type:r.a.AUGMENT_DIAMOND},"Gravity Snare":{ranks:0,text:"FL4K tosses out a Trap that Knocks Up and temporarily Stuns nearby enemies. After being deployed, the Trap periodically continues to Knock Up and Stun enemies for the duration. While standing near the Trap, pressing [Action Skill key] will pick up the Trap, ending the action skill early and refunding a portion of the remaining duration.",effect:()=>"Duration: 16 seconds\nCooldown: 36 seconds",type:r.a.ACTION_SKILL}},1:{"Gotta Go Fast":{ranks:5,text:"FL4K's pet gains increased Movement Speed and Damage.",effect:e=>`Pet Damage: +${n(e,7)}%\nPet Movement Speed: +${n(e,8)}%`},"Success Imminent":{ranks:5,text:"Whenever FL4K's or their pet's shield breaks or is filled, they and their pet create a Radation Nova. This skill has a short cooldown.",effect:e=>`Nova Damage: ${n(e,6)} (scales with level)\nCooldown: 3 seconds`},"Agility Training":{ranks:5,text:"FL4K and their pet gain increased Reload Speed.",effect:e=>`Reload Speed: +${n(e,8)}%`}},2:{Forage:{ranks:0,text:"Whenever an enemy trapped by FL4K is knocked into the air, they drop ammo, health boosters, and shield boosters.",effect:()=>"",type:r.a.AUGMENT_CHEVRON},"Better Toys":{ranks:3,text:"FL4K and their pet gain increased Shield Recharge Rate and improved Shield Recharge Delay.",effect:e=>`Shield Recharge Rate: +${n(e,6)}%\nShield Recharge Delay: -${n(e,8)}%`},"Combat Veterinarian":{ranks:1,text:"Whenever FL4K shoots the same enemy their pet is attacking, FL4K's Pet gains a portion of the damage dealt back as health.",effect:()=>"Life Steal: 30% of damage dealt"},Throatripper:{ranks:3,text:"Hunter Skill. FL4K's pet's acttacks have a chance to score a Critical Hit, dealing increased damage.",effect:e=>`Critical Chance: +${n(e,5)}%`}},3:{"Wide Net":{ranks:0,text:"FL4K's Trap gains increased Duration and increased Radius.",effect:()=>"Trap Duration: +25%\nTrap Radius: +100%",type:r.a.AUGMENT_CHEVRON},"Lethal Force Authorized":{ranks:1,text:"Whenever Fl4K's Loader Bot pet would go into Fight For Your Life, it turns into an EXP Loader instead and seeks out a nearby enemy before self-destructing, dealing damage to all nearby enemies.\nFL4K's pet's respawn time is reduced.",effect:()=>"Pet Respawn Time: -50%\nEXP Loader Damage: 89 (scales with level)"},"Take This!":{ranks:1,text:"FL4K's pet gains a copy of FL4K's shield.",effect:()=>""},"Bul Loader":{ranks:0,text:"FL4K's ION Loader upgrades into a BUL Loader, discarding it's sniper rifle and equipping a Shotgun. FL4K's BUL Loader also gains increased Damage Resistance and a powerful Roundhouse Melee Attack. While accompanies by the BUL Loader, FL4K's Shield Capacity is increased.\n\nWhen FL4K issues an Attack Command, the BUL Loader Briefly turns into a BullDozer to charge at enemies and knocks them up.",effect:()=>"Shield Capacity: +20.0%",type:r.a.AUGMENT_DIAMOND}},4:{"Trap Card":{ranks:0,text:"If FL4K would go into Fight For Your Life while their Trap is readied, they automatically throw a Trap at the enemy that downed them.",effect:()=>"Duration: 16 seconds",type:r.a.AUGMENT_CHEVRON},"Monkey Do!":{ranks:5,text:"FL4K's pet gains increased Critical Hit Damage.\n\nWhenever FL4K's Pet scores a Critical Hit, FL4K's next shot deals Bonus Damage based on their weapon's damage.",effect:e=>`Pet Critical Hit Damage: +${n(e,14)}%\nBonus Damage: ${n(e,14)}% of weapon damage`},"Wooly Armor":{ranks:1,text:"While FL4K's shields are full, their pet gains Damage Reduction.",effect:()=>"Pet Damage Reduction: +75%"},"Not Even A Challenge":{ranks:5,text:"Whenever FL4K's pet kills an enemy, FL4K gains increased Action Skill Duration and Action Skill Cooldown Rate for a short time. This effect stacks.",effect:e=>`Cooldown Rate: +${n(e,7)}%\nAction Skill Duration: +${n(e,7)}%\nDuration: 12 seconds\nMax Stacks: 10`},"War Loader":{ranks:0,text:"FL4K's ION Loader Upgrades into a WAR Loader, discarding it's sniper rifle and equipping an Incendiary Shotgun and Grenades. While accompanied by the WAR Loader, FL4K gains increased Fire Rate.\n\nWhen FL4K issues an Attack Command, the WAR loader unleashes a barrage of missles at the target.",effect:()=>"Fire Rate: +12.0%",type:r.a.AUGMENT_DIAMOND}},5:{"Blind With Anger":{ranks:0,text:"FL4K's Trap no longer Knocks Up or Stuns enemies. Instead, the Trap confuses nearby enemies, causing them to attack their allies for a short time. Once deployed, the Trap continues to periodically confuse enemies for the duration.",effect:()=>"Confuse Duration: 8 seconds",type:r.a.AUGMENT_CHEVRON},"Fuzzy Math":{ranks:5,text:"Whenever FL4K or their pet scores a Critical Hit, a portion of FL4K's and their pet's shields are restored.",effect:e=>`Shield REstore: +${n(e,3)}% of Max Shields`},"Keep Them Safe":{ranks:5,text:"Whenever FL4K issues an Attack Command, if FL4K's or their pet's shield is less than half full a portion of FL4K's and their pet's shields are restored. This has a short cooldown.",effect:e=>`Shield Restore: ${n(e,10)}% of Max Shields\nCooldown: 12 seconds`}},6:{Capacitance:{ranks:1,text:"Whenever FL4K activiates their Action Skill, they gain greatly increased Shield Capacity for a short time and immediately begin rechargin their shields. This skill has a short cooldown.",effect:()=>"Shield Capacity: +100%\nDuration: 16 seconds\nCooldown: 16 seconds"}}}}},cQx2:function(e,a,t){"use strict";(function(e){function n(a){let{path:t}=a;return e(r.a,{name:"Moze",discipline:"Gunner",skills:i.a,path:t})}t.d(a,"a",(function(){return n}));var r=t("J3pd"),i=t("fuh5")}).call(this,t("gDde").h)},"cY+X":function(e,a,t){"use strict";(function(e){function n(a){let{path:t}=a;return e(r.a,{name:"Zane",discipline:"Operative",skills:i.a,path:t})}t.d(a,"a",(function(){return n}));var r=t("J3pd"),i=t("xtEN")}).call(this,t("gDde").h)},eDOM:function(e,a,t){"use strict";function n(e){return e.invested.reduce((e,a)=>e+a,2)}t.d(a,"a",(function(){return n}))},fuh5:function(e,a,t){"use strict";function n(e,a){return Math.round(e*a*10)/10}var r=t("LMbI");a.a={"Bottomless Mags":{0:{Minigun:{text:"The Minigun is capable of sustained rapid fire. Firing for long periods causes the Minigun to overheat, rendering it inoperable for a few seconds. Element: Non-Elemental.",type:r.a.ACTION_SKILL,effect:()=>"Put a little lead in the air and see what falls over."}},1:{"Cloud of Lead":{text:"Occasionally, Moze's and Iron Bear's shots will deal additional Incendiary Damage and won't consume ammo.",ranks:5,effect:e=>`Effects are triggered every ${9-e} shots\nBonus Incendiary Damage: +${function(e,a){return Math.round(e*a*100)/100}(e,2.25)}%`},"Dakka Bear":{text:"Adds a manned turret to the back of Iron Bear. While manned, Iron Bear and its rider gain increased damage.",ranks:1,effect:()=>"Iron Bear Damage: +50%\nIron Cub Damage: +20%"},"Matched Set":{text:"Moze's currently equipped weapon gains a stacking bonus to Magazine Size and Decreased Heat Per Shot for every piece of equipped gear that has a matching manufacturer.",ranks:5,effect:e=>`Magazine Size: +${n(e,2)}% per matched gear\nHeat Per Shot: -${function(e){switch(e){case 1:return 2;case 2:return 4;case 3:return 6;case 4:return 9;case 5:return 11;default:return 0}}(e)}% per matched gear`}},2:{"Let Off Some Steam":{text:"Minigun deals more damage as heat increases, and can be fired for longer before overheating.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Minigun Damage: Up to +80%\nMinigun Heat Capacity: +35%"},"Stoke the Embers":{text:"Increases Moze and Iron Bear's Incendiary Damage.",ranks:3,effect:e=>`Incendiary Damage: +${n(e,10)}%`},Redistribution:{text:"After Moze scores a Critical Hit, she regenerates ammo and health for a few seconds.The lower her health, the more powerful the regeneration.",ranks:1,effect:()=>"Ammo Regeneration: +5% of Magazine Size/sec\nHealth Regen: Up to +2.5% of Missing Health/sec\nDuration: 3 seconds"},Scrappy:{text:"While moving, Moze's Weapon Damage, Handling, Weapon Swap, and Mode Switch Speed are increased.",ranks:5,effect:e=>`Weapon Damage: +${n(e,6)}%\nHandling: +${function(e){switch(e){case 1:return 10.7;case 2:return 19.4;case 3:return 26.5;case 4:return 32.4;case 5:return 37.5;default:return 0}}(e)}%\nWeapon Swap Speed: +${function(e){switch(e){case 1:return 16;case 2:return 27.5;case 3:return 36.3;case 4:return 43.2;case 5:return 48.7;default:return 0}}(e)}%\nMode Switch Speed: +${function(e){switch(e){case 1:return 16;case 2:return 27.5;case 3:return 36.3;case 4:return 43.2;case 5:return 48.7;default:return 0}}(e)}%`},Salamander:{text:"The Salamander is a flamethrower that deals Incendiary Damage to enemies at close range. Though the Salamander has infinite ammo, it drains Fuel with use.",type:r.a.AUGMENT_ACTION_SKILL,effect:()=>"Fire... for effect."}},3:{"General Winter":{text:"Minigun fires Cryo rounds which reduce Heat Gain and Fuel Drain.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Minigun Fuel Drain: -40%\nCryo Efficiency: +20%\nMinigun Element: Cryo"},"Rushin' Offensive":{text:"Moze can sprint and shoot at the same time. While sprinting, Moze's weapons gain Life Steal.",ranks:1,effect:()=>"Life Steal: 8% of damage dealt"},"Scorching RPM's":{text:"Moze gains increased Fire Rate and Critical Hit Damage. Iron Bear gains increased Hard Point damage.",ranks:5,effect:e=>`Fire Rate: +${n(e,3)}%\nCritical Hit Damage: +${n(e,4)}%\nIron Bear Damage: +${n(e,5)}%`},"Fuel Economy":{text:"Reduces Salamander's Fuel Drain. Additionally, Iron Bear's Movement Speed is increased after damaging an enemy with Salamander.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Salamander Fuel Drain: -25%\nIron Bear Movement Speed: +50%\nMovement Speed Duration: 3 seconds"}},4:{"Exploding. Bullets.":{text:"Minigun fires Explosive Rounds that deal increased Splash Damage, but its Fire Rate is decreased.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Minigun Damage: +232%\nMinigun Fire Rate: -75%"},"The Iron Bank":{text:"Increases Moze's Magazine Size.",ranks:5,effect:e=>`Magazine Size: +${n(e,7)}%`},"Specialist Bear":{text:"Equipping two of the same Weapons on Iron Bear increases the damage they deal.",ranks:1,effect:e=>`Iron Bear Damage: +${n(e,60)}%`},"Chemical Warfare":{text:"Salamander now deals Corrosive Damage. Additionally, Salamander's Melt Damage is increased.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Salamander Element: Corrosive\nSalamander Melt Damage: +125%"}},5:{"Some for the Road":{text:"Moze gains infinite ammo for a few seconds after exiting Iron Bear.",ranks:1,effect:()=>"Duration: 5 seconds"},"Click, Click...":{text:"Moze gains increased Gun Damage as her magazine empties. The less ammo there is remaining, the greater the increase. If Moze has a COV gun equipped, she gains Gun Damage as her gun's heat increases.",ranks:3,effect:e=>`Gun Damage: Up to +${n(e,20)}%`},"Molten Roar":{text:"The Salamander burst-fires 3 projectiles with increased Damage, the first of which leaves a large Incendiary area.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Damage: +100%"}},6:{Forge:{text:"Moze constantly regenerates ammo for her currently equipped weapon.",ranks:1,effect:()=>"Ammo Regeneration: +5% of Magazine Size/sec"}}},"Demolition Woman":{0:{"V-35 Grenade Launcher":{text:"The V-35 is a semi-automatic grenade launcher. Its grenades are not affected by Moze's equipped grenade mod. Element: Non-Elemental.",type:r.a.ACTION_SKILL,ranks:0,effect:()=>"For when the V-34 just isn't enough"}},1:{"Fire in the Skag Den":{text:"Whenever Moze and Iron Bear deal Splash Damage, they deal bonus Incendiary Damage.",ranks:5,effect:e=>`Bonus Incendiary Damage: +${n(e,3)}% of damage dealt`},Deadlines:{text:"Firing Iron Bear Weapons drains less Fuel. Killing an enemy while Iron Bear is active increases Fuel. This skill has diminishing returns.",ranks:3,effect:e=>`Fuel Returned: Up to ${n(e,2)}%\nFuel Drain: -${function(e){switch(e){case 1:return 11;case 2:return 22;case 3:return 30;default:return 0}}(e)}%`},Grizzled:{text:"Kill Skill. Killing an enemy reduces Moze's remaining Action Skill Cooldown Time. This skill has diminishing returns.",ranks:5,effect:e=>`Iron Bear Cooldown: -${1*e} seconds`}},2:{"Shaped Charge":{text:"Direct hits with the V-35 deal increased damage.",type:r.a.AUGMENT_CHEVRON,effect:()=>"V-35 Direct Hit Damage: +35%"},"Means of Destruction":{text:"Whenever Moze deals Splash Damage, there is a chance to add ammo to her currently equipped weapon's magazine, with a smaller chance to return a grenade.",ranks:3,effect:e=>`Ammo Chance: +${n(e,3.333)}%\nGrenade Chance: +${n(e,2)}%\nCooldown: 0.3 seconds`},"Torgue Cross-Promotion":{text:"All Splash Damage dealt by Moze has a chance to double in size. Additionally, Moze and Iron Bear deal increased Splash Damage.",ranks:5,effect:e=>`Splash Damage: +${n(e,6)}%\nChance to Double Splash Radius: +${n(e,3)}%`},"Stainless Steel Bear":{text:"Iron Bear gains additional armor, increased Maximum Fuel, and increased Damage.",ranks:5,effect:e=>`Maximum Fuel: +${n(e,4)}%\nIron Bear Armor: +${n(e,6)}%\nIron Bear Damage: +${n(e,4)}%`},"Vanquisher Rocket Pod":{text:"The Vanquisher Rocket Pod is a rocket launcher capable of rapid-firing volleys of unguided explosive rockets. Element: Non-Elemental.",type:r.a.AUGMENT_ACTION_SKILL,effect:()=>"If you want guidance, get a sherpa. If you want explosions, get a Vladof."}},3:{"Musical Chairs":{text:"Occasionally, the V-35 fires a Singularity Grenade that pulls in nearby enemies before exploding.",type:r.a.AUGMENT_CHEVRON,effect:()=>"V-35 Singularity: Every 7th grenade"},"Pull the Holy Pin":{text:"Moze's grenades have a chance to score a Critical Hit, dealing greatly increased damage. Sources of Critical Hit Damage do not affect grenade Critical Hits.",ranks:3,effect:e=>`Grenade Critical Hit Chance: +${n(e,10)}%`},"Auto Bear":{text:"After Moze exits Iron Bear, it will remain deployed in place for a short time. While Auto Bear remains active, it will target and attack nearby enemies until its duration ends, then it will charge at an enemy and self-destruct.",ranks:1,effect:()=>"Auto Bear Duration: 15 seconds"},"Active Tracking":{text:"The Vanquisher Rocket Pod now fires homing rockets and has increased Reload Speed. Hold down [Action Skill key] and aim at enemies to designate up to 6 targets. Releasing Fire Button launches a volley of homing rockets at the designated targets.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Vanquisher Reload Speed: +25%"}},4:{"Lock and Speedload":{text:"The V-35's Reload Speed is greatly increased and it now fires a 5-round burst.",type:r.a.AUGMENT_CHEVRON,effect:()=>"V-35 Reload Speed: +25%"},Vampyr:{text:"Whenever Moze damages an enemy with a thrown grenade, for every enemy hit, she restores a portion of her missing health. Iron Bear restores armor for every enemy it deals Splash Damage to.",ranks:5,effect:e=>`Moze Health Restored: ${n(e,4)}% of Missing Health per enemy hit\nIron Bear Health Restored: ${n(e,2)}% of Missing Armor per enemy hit`},"Why Can't I Carry All These Grenades":{text:"Increases Moze's grenade carrying capacity.",ranks:3,effect:e=>"Grenade Capacity: +"+e},"Target Softening":{text:"The Vanquisher Rocket Pod deals greatly reduced damage per rocket, but fires in a 6-rocket spread. Additionally, enemies hit by Vanquisher Rocket Pod rockets take increased damage from all sources.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Vanquisher Damage: -74%\nEnemy Damage Taken: +15%"}},5:{"To the Last":{text:"Moze gains the ability to throw grenades while in Fight For Your Life. If she threw a grenade before gaining a Second Wind, a grenade is refunded.",ranks:1,effect:()=>"The greatest enemy is one with nothing to lose... and a grenade."},"Explosive Punctuation":{text:"When Moze deals Splash Damage, her Action Skill Cooldown Rate is briefly increased.",ranks:5,effect:e=>`Action Skill Cooldown Rate: +${n(e,8)}%`},"Hammerdown Protocol":{text:"Instead of a volley of conventional rockets, the Vanquisher Rocket Pod launches a single rocket with a nuclear warhead, dealing massive Radiation Damage.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Vanquisher Damage: +600%\nVanquisher Magazine Size: 1\nVanquisher Element: Raditation\n"}},6:{"Short Fuse":{text:"Whenever Moze deals Gun Damage, there is a chance of a secondary explosion centered on the target.",ranks:1,effect:()=>"Secondary Explosion Chance: 20%\nSecondary Explosion Damage: 75% of Gun Damage"}}},"Shield of Retribution":{0:{Railgun:{text:"The Railgun fires electrified high-velocity projectiles that deal Shock Damage.",type:r.a.ACTION_SKILL,effect:()=>"It's like a bullet, only bigger. And faster. And wrapped in lightning."}},1:{"Selfless Vengeance":{text:"Whenever Moze reloads, she loses a small portion of her health and grants additional Incendiary Damage to her and her allies' rounds for a few seconds.",ranks:5,effect:e=>`Bonus Incendiary Damage: +${n(e,3)}% of gun damage dealt\nCurrent Health Removed: ${n(e,1)}\nDuration: ${e+5} seconds`},"Security Bear":{text:"Iron Bear gains a bubble shield that reduces damage taken. The shield deactivates if it sustains too much damage, reactivating after a short cooldown.\nIf Iron Cub is equipped, it gains Damage Reduction instead.",ranks:1,effect:()=>"Bubble Recharge Delay: 5 seconds\n50% of Iron Bear Maximum Armor added as Shields\nIron Cub Damage Reduction: +50%"},"Armored Infantry":{text:"While Moze's shields are active, she gains Damage Resistance and increased Gun Damage.",ranks:5,effect:e=>`Gun Damage: +${n(e,3)}%\nDamage Resistance: +${function(e){switch(e){case 1:return 3;case 2:return 6;case 3:return 8;case 4:return 11;case 5:return 13;default:return 0}}(e)}%`}},2:{"Hell on Rails":{text:"Railgun now fires superheated rounds that deal Incendiary Damge, but have increased Fuel Drain per shot.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Railgun Fuel Drain: +8%\nRailgun Element: Incendiary"},"Drowning in Brass":{text:"Kill Skill. Killing an enemy grants Moze a stack of Drowning in Brass.\n\nFor each stack of Drowning in Brass, Moze's Fire Rate is reduced, but Gun Damage is increased for both her and her allies.",ranks:5,effect:e=>`Gun Damage: +${n(e,4)}% per stack\nMoze Fire Rate: -${n(e,.5)}% per stack\nMaximum Stacks: 3\nDuration: 15 seconds`},"Thin Red Line":{text:"A portion of Moze's health is Reserved and cannot be restored, but her Maximum Shield is increased by the same amount.",ranks:3,effect:e=>n(e,20)+"% Max Health Reserved and Added to Max Shield"},"Vladof Ingenuity":{text:"Moze's Maximum Shield and Shield Recharge Rate are increased, and she gains resistance to Shock Damage.",ranks:5,effect:e=>`Shield Recharge Rate: +${n(e,4)}%Maximum Shield: +${n(e,6)}%\n\nShock Damage Resistance: +${function(e){switch(e){case 1:return 15;case 2:return 26;case 3:return 35;case 4:return 42;case 5:return 47;default:return 0}}(e)}%`},"Bear Fist":{text:"The Bear Fist is a pneumatic-driven fist that deals massive damage to a single target at close range. Element: Non-Elemental.",type:r.a.AUGMENT_ACTION_SKILL,effect:()=>"Vladof supports the right to bear armored bear arms."}},3:{"Capacitive Armature":{text:"When Railgun hits an enemy, it chains to nearby enemies, dealing reduced Shock Damage to more targets.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Splinter Damage: -30%"},"Full Can of Whoop-Ass":{text:"Entering Iron Bear causes Moze's and her allies' shields to immediately begin recharging at an increased Shield Recharge Rate.",ranks:1,effect:()=>"Shield Recharge Rate: +25%"},"Experimental Munitions":{text:"Whenever Moze and Iron Bear score a Critical Hit, they deal bonus Incendiary Damage.",ranks:1,effect:e=>`Bonus Incendiary Damage: +${n(e,15)}% of damage dealt`},"Wild Swing":{text:"Whenever Bear Fist hits an enemy, it deals random Bonus Elemental Damage to that enemy and all enemies nearby.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Bear Fist Bonus Elemental Damage: +35% of damage dealt"}},4:{"Corrosive Sabot Round":{text:"Railgun now fires a specialty round that deals reduced damage and explodes after a short delay.\nRailgun shots have reduced Fuel Drain and the Magazine Size is increased.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Railgun Fuel Drain: -50%\nRailgun Damage: -15%\nRailgun Magazine Size: +2\nRailgun Element:Corrosive"},"Behind the Iron Curtain":{text:"Moze's Shield Recharge Delay is reduced, and her Shield Recharge Rate is increased.",ranks:3,effect:e=>`Shield Recharge Rate: +${n(e,11)}%\nShield Recharge Delay: -${function(e){switch(e){case 1:return 12;case 2:return 21;case 3:return 28;default:return 0}}(e)}%`},"Desperate Measures":{text:"Moze's Gun Damage and Iron Bear's Damage is increased depending on how low their health is. The lower their health, the greater the increase.",ranks:3,effect:e=>`Damage: Up to +${Math.round(n(e,16.5))}%`},"Close the Distance":{text:"Instead of punching, Iron Bear now launches its Bear Fist forward and grabs enemies at greatly increased range, dealing Shock Damage and pulling them back to Iron Bear.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Step into my office."}},5:{"Phalanx Doctrine":{text:"Kill Skill. After killing an enemy, Moze gains a stack of Phalanx Doctrine. For every stack of Phalanx Doctrine, Moze's Maximum Shield and Gun Damage are increased. Each stack lasts 30 seconds.\n\nThere is no stack limit.",ranks:5,effect:e=>`Gun Damage: +${n(e,2)}% per stack\nMax Shields: +${n(e,3)}% per stack\nDuration: 30 seconds`},"Force Feedback":{text:"Whenever Moze scores a Critical Kill, her shields immediately begin recharging and she instantly regains a portion of her shield.",ranks:1,effect:()=>"Shields Restored: 10% of Maximum Shield"},Shockhammer:{text:"Bear Fist is now capable of sustained rapid fire punching. Additionally, Bear Fist has reduced Fuel Drain and deals Bonus Shock Damage with each hit.",type:r.a.AUGMENT_CHEVRON,effect:()=>"Bonus Shock Damage: +60% of damage dealt\nFuel Drain: -40%"}},6:{"Tenacious Defense":{text:"Whenever Moze's shield is fully depleted, she instantly restores a portion of her shield, and her Gun Damage is increased for a short time. This skill can only trigger after Moze's shields have fully recharged.",ranks:1,effect:()=>"Gun Damage: +30%\nShields Restored: 40% of Maximum Shield\nDuration: 30 seconds"}}},"Bear Mother":{0:{"Iron Cub":{ranks:0,text:"Moze Summons Iron Cub in place of Iron Bear. Iron Cub equips two of whatever weapon is equipped in the remaining Action Skill slot. While deployed, Iron Cub follows Moze and will target and attack enemies for the duration.\nSkills that affect Iron Bear affect Iron Cub. Iron Cub still uses Fuel, but usses less of it and deals less damage (because it's smaller).",effect:()=>""}},1:{Biofuel:{ranks:5,text:"Whenever Moze or Iron Bear ignites an enemy, they both regenerate health for a short time.",effect:e=>`Health Regen: Up to +${n(e,.7)}% per sec\nIron Bear Armor Regen: Up to +${n(e,.5)}% per sec\nDuration: 8 seconds`},"Big Surplus":{ranks:3,text:"While Moze's Action Skill is cooling down, she deals bonus Incendiary Damage.",effect:e=>`Bonus Damage: ${n(e,5)}% of Gun Damage`},"Really Big Guns":{ranks:5,text:"Iron Bear gains increased Damage.",effect:e=>`Iron Bear Damage: +${n(e,4)}%`}},2:{"Double Time":{ranks:3,text:"While Moze's Action Skill is active, she and Iron Bear gain increased Movement Speed.",effect:e=>`Movement Speed: +${n(e,12)}%`},"Harmonious Havoc":{ranks:5,text:"Moze gains increased Gun Damage for each weapon, shield, and grenade that matches the element of her gun.",effect:e=>`Gun Damage: +${n(e,2)}% per matching item`},"Explosive Fury":{ranks:3,text:"Moze and Iron Bear gain increased Status Effect Damage and Status Effect Chance.",effect:e=>`Status Effect Chance: +${n(e,9)}%\nStatus Effect Damage: +${n(e,5)}%`},"Fuel For The Fire":{ranks:0,text:"Whenever Moze or Iron Cub inflicts a Status Effect on an enemy, Iron Cub's armor is restored.",effect:()=>"12% of Max Armor",type:r.a.AUGMENT_CHEVRON}},3:{"Baby Nukes":{ranks:0,text:"Whenever Iron Cub is deployed or destroyed, it triggers a nuclear explosion, dealing massive Radation Damage.",effect:()=>"Damage: 123 (scales with level)",type:r.a.AUGMENT_CHEVRON},"Fired Up":{ranks:1,text:"Whenever Moze or Iron Bear applies a Status Effect to an enemy, she gains increased Fire Rate for a short time. This effect stacks.",effect:()=>"Fire Rate: +5%\nDuration: 12 seconds\nMax Stacks: 5"}},4:{"Nitrotrinadium Engines":{ranks:5,text:"Iron Bear gains increased Maximum Fuel and Action Skill Cooldown Rate.",effect:e=>`Maximum Fuel: +${n(e,5)}%\nAction Skill Cooldown Rate: +${n(e,4)}%`},"Never Going To Give You Up":{ranks:5,text:"Whenever Moze or Iron Bear applies a Status Effect to an enemy, Iron Bear gains Fuel. This skill had diminishing returns.",effect:()=>"Fuel Returned: Up to 15%"},"My Little Friend":{ranks:0,text:"Iron Cub spawns with Incendiary Vladof Assault Riffle in addition to Iron Cub's other weapons.",effect:()=>"",type:r.a.AUGMENT_CHEVRON}},5:{"Efficiency Engine":{ranks:0,text:"Moze gains increased Gun Damage. The longer Iron Cub has been active, the greater the bonus.",effect:e=>`Gun Damage: +${n(e,.5)}% per second`,type:r.a.AUGMENT_CHEVRON},"Feature Creep":{ranks:1,text:"Iron Bear gains increased Damage and Damage Resistance.",effect:()=>"Iron Bear Damage: +18%\nIron Bear Damage Resistance: +45%"},"Limit Break":{ranks:3,text:"Moze gains increased Action Skill Cooldown Rate whenever she or Iron Bear inflicts a Status Effect on an enemy. This effect stacks.",effect:e=>`Cooldown Rate: +${n(e,4)}%\nDuration: 12 seconds\nMax Stacks: 10`},"Superior Firepower":{ranks:1,text:"Whenever Moze or Iron Bear inflicts a Status Effect on an enemy, they gain increased Status Effect Damage.",effect:()=>"Status Effect Damage: +20%\nDuration: 8 seconds\nMax Stacks: 5"}},6:{"Running On Fumes":{ranks:1,text:"Whenever Moze or Iron Bear ignites an enemy, Iron Bear does not consume fuel for a short time.",effect:()=>"Duration: 6 seconds"}}}}},gDde:function(e){!function(){"use strict";function a(e,a){var t,n,r,i,s=E;for(i=arguments.length;i-- >2;)R.push(arguments[i]);for(a&&null!=a.children&&(R.length||R.push(a.children),delete a.children);R.length;)if((n=R.pop())&&void 0!==n.pop)for(i=n.length;i--;)R.push(n[i]);else"boolean"==typeof n&&(n=null),(r="function"!=typeof e)&&(null==n?n="":"number"==typeof n?n+="":"string"!=typeof n&&(r=!1)),r&&t?s[s.length-1]+=n:s===E?s=[n]:s.push(n),t=r;var o=new b;return o.nodeName=e,o.children=s,o.attributes=null==a?void 0:a,o.key=null==a?void 0:a.key,void 0!==M.vnode&&M.vnode(o),o}function t(e,a){for(var t in a)e[t]=a[t];return e}function n(e,a){null!=e&&("function"==typeof e?e(a):e.current=a)}function r(e){!e.__d&&(e.__d=!0)&&1==N.push(e)&&(M.debounceRendering||_)(i)}function i(){for(var e;e=N.pop();)e.__d&&A(e)}function s(e,a,t){return"string"==typeof a||"number"==typeof a?void 0!==e.splitText:"string"==typeof a.nodeName?!e._componentConstructor&&o(e,a.nodeName):t||e._componentConstructor===a.nodeName}function o(e,a){return e.__n===a||e.nodeName.toLowerCase()===a.toLowerCase()}function l(e){var a=t({},e.attributes);a.children=e.children;var n=e.nodeName.defaultProps;if(void 0!==n)for(var r in n)void 0===a[r]&&(a[r]=n[r]);return a}function c(e){var a=e.parentNode;a&&a.removeChild(e)}function d(e,a,t,r,i){if("className"===a&&(a="class"),"key"===a);else if("ref"===a)n(t,null),n(r,e);else if("class"!==a||i)if("style"===a){if(r&&"string"!=typeof r&&"string"!=typeof t||(e.style.cssText=r||""),r&&"object"==typeof r){if("string"!=typeof t)for(var s in t)s in r||(e.style[s]="");for(var s in r)e.style[s]="number"==typeof r[s]&&!1===T.test(s)?r[s]+"px":r[s]}}else if("dangerouslySetInnerHTML"===a)r&&(e.innerHTML=r.__html||"");else if("o"==a[0]&&"n"==a[1]){var o=a!==(a=a.replace(/Capture$/,""));a=a.toLowerCase().substring(2),r?t||e.addEventListener(a,h,o):e.removeEventListener(a,h,o),(e.__l||(e.__l={}))[a]=r}else if("list"!==a&&"type"!==a&&!i&&a in e){try{e[a]=null==r?"":r}catch(e){}null!=r&&!1!==r||"spellcheck"==a||e.removeAttribute(a)}else{var l=i&&a!==(a=a.replace(/^xlink:?/,""));null==r||!1===r?l?e.removeAttributeNS("http://www.w3.org/1999/xlink",a.toLowerCase()):e.removeAttribute(a):"function"!=typeof r&&(l?e.setAttributeNS("http://www.w3.org/1999/xlink",a.toLowerCase(),r):e.setAttribute(a,r))}else e.className=r||""}function h(e){return this.__l[e.type](M.event&&M.event(e)||e)}function u(){for(var e;e=F.shift();)M.afterMount&&M.afterMount(e),e.componentDidMount&&e.componentDidMount()}function f(e,a,t,n,r,i){L++||($=null!=r&&void 0!==r.ownerSVGElement,H=null!=e&&!("__preactattr_"in e));var s=m(e,a,t,n,i);return r&&s.parentNode!==r&&r.appendChild(s),--L||(H=!1,i||u()),s}function m(e,a,t,n,r){var i=e,s=$;if(null!=a&&"boolean"!=typeof a||(a=""),"string"==typeof a||"number"==typeof a)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=a&&(e.nodeValue=a):(i=document.createTextNode(a),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),p(e,!0))),i.__preactattr_=!0,i;var l=a.nodeName;if("function"==typeof l)return w(e,a,t,n);if($="svg"===l||"foreignObject"!==l&&$,l+="",(!e||!o(e,l))&&(i=function(e,a){var t=a?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e);return t.__n=e,t}(l,$),e)){for(;e.firstChild;)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),p(e,!0)}var c=i.firstChild,d=i.__preactattr_,h=a.children;if(null==d){d=i.__preactattr_={};for(var u=i.attributes,f=u.length;f--;)d[u[f].name]=u[f].value}return!H&&h&&1===h.length&&"string"==typeof h[0]&&null!=c&&void 0!==c.splitText&&null==c.nextSibling?c.nodeValue!=h[0]&&(c.nodeValue=h[0]):(h&&h.length||null!=c)&&g(i,h,t,n,H||null!=d.dangerouslySetInnerHTML),y(i,a.attributes,d),$=s,i}function g(e,a,t,n,r){var i,o,l,d,h,u=e.childNodes,f=[],g={},k=0,y=0,S=u.length,D=0,v=a?a.length:0;if(0!==S)for(var A=0;A2?[].slice.call(arguments,2):e.children)},createRef:function(){return{}},Component:x,render:function(e,a,t){return f(t,e,{},!1,a,!1)},rerender:i,options:M}}()},gqmc:function(e,a,t){"use strict";function n(e){let a=0,t=[0,0,0],n=0;for(let r of Object.values(e)){let e=0,i=0;for(let a of Object.values(r)){let t=0;for(let e of Object.values(a)){if(e.invested<0||e.invested>e.ranks)return!1;t+=e.invested||0}if(t>0&&e+5<5*i)return!1;e+=t,i+=1}t[n]=e,a+=e,n+=1}return!(a>69)&&t}function r(e){for(var a=1;a`Rank ${e} effect`),type:g=null,enabled:p=!0,image:k=null,onChange:y=(()=>null)}=a;const S=[i.a.AUGMENT_CHEVRON,i.a.AUGMENT_DIAMOND,i.a.AUGMENT_ACTION_SKILL].includes(g);let D=null;return g===i.a.ACTION_SKILL&&(D=o.a.actionSkill),g===i.a.AUGMENT_CHEVRON&&(D=o.a.chevron),g===i.a.AUGMENT_DIAMOND&&(D=o.a.diamond),g===i.a.AUGMENT_ACTION_SKILL&&(D=o.a.actionSkill),e("div",{class:[o.a.skill,S?o.a.augment:"",D,p?o.a.enabled:"",p&&(0===d||h>0)?o.a.usable:""].join(" "),onClick:t,onContextMenu:t},e("div",{class:o.a.image},e("img",{src:k,alt:n(r)})),p&&d>0&&e("div",{class:o.a.ranks},h,"/",d),e("div",{class:o.a.description},e("h3",{class:o.a.skillTitle},r),s,h>0&&e("div",{class:o.a.effect},"Current Effect:",l,m(h,f)),null!==g&&e("div",{class:o.a.effect},m(1,f)),null==g&&h"Duration: 14 seconds\nCooldown: 24 seconds\nGun Damage Amp: +25%",type:i.a.ACTION_SKILL,ranks:0}},1:{Adrenaline:{text:"Zane gains increased Action Skill Cooldown Rate. This bonus is based on the amount of shield he has. The more percent full, the greater the bonus.",ranks:5,effect:e=>`Action Skill Cooldown Rate: Up to +${n(e,7)}%`},"Hearty Stock":{text:"Zane gains increased Maximum Shield Capacity.",ranks:3,effect:e=>`Maximum Shield: +${n(e,10)}%`},"Ready for Action":{text:"Zane gains improved Shield Recharge Rate and Shield Recharge Delay.",ranks:5,effect:e=>`Shield Recharge Rate: +${n(e,6)}%\nShield Recharge Delay: -${n(e,7)}%`}},2:{"Charged Relay":{text:"Whenever Zane or an ally touches the Barrier, they gain increased Movement Speed and Reload Speed for a few seconds.",ranks:0,effect:()=>"Reload Speed: +20%\nMovement Speed: +11%\nDuration: 8 seconds",type:i.a.AUGMENT_CHEVRON},Brainfreeze:{text:"Whenever Zane scores a Critical Hit on an enemy, there is a chance they will be Slowed. This effect stacks until the target is Frozen.",ranks:5,effect:e=>`Slow Chance: ${n(e,4)}%`},"Stiff Upper Lip":{text:"Whenever Zane is damaged, he gains Damage Resistance against that damage type.",ranks:3,effect:e=>`Damage Resistance: +${function(e){switch(e){case 1:return 6;case 2:return 12;case 3:return 16;default:return 0}}(e)}%`},"Rise to the Occasion":{text:"Zane gains Health Regeneration. The lower his shield is, the higher the bonus.",ranks:5,effect:e=>`Health Regeneration: Up to +${n(e,1)}% of Max Health/sec`}},3:{"Nanites or Some Shite":{text:"Zane and his allies gain Health Regeneration, increased Reload Speed, and greatly improved Shield Recharge Delay while near his Barrier.\n\nThe lower their health, the more health is regenerated.",ranks:0,effect:()=>"Team Health Regen: Up to +4% of Max Health/sec\nTeam Shield Recharge Delay: -33%\nTeam Reload Speed: +11%",type:i.a.AUGMENT_CHEVRON},"Distributed Denial":{text:"Zane's Barrier gains the effects of his currently equipped Shield Mod. Additionally, shield effects are applied to all allies near the Barrier. Bonuses to Zane are reduced.",ranks:1},"All-Rounder":{text:"Zane's Barrier becomes a dome, covering all sides.",ranks:0,effect:()=>"Cooldown: +20%",type:i.a.AUGMENT_CHEVRON}},4:{Retaliation:{text:"Zane and allies near the Barrier gain increased Gun Damage for a few seconds after the Barrier takes damage.",ranks:0,effect:()=>"Team Gun Damage: +10%\nDuration: 3 seconds",type:i.a.AUGMENT_CHEVRON},"Really Expensive Jacket":{text:"Elemental Status Effects applied to Zane have reduced duration.",ranks:1,effect:()=>"Status Effect Duration: -50%"},"Best Served Cold":{text:"Kill Skill. Whenever Zane kills an enemy, they create a Cryo Nova, dealing damage to all nearby enemies. This skill has a short cooldown.",ranks:5,effect:e=>`Cryo Damage: ${r(e,0,2)} (increases with character level)\nCooldown: 3 seconds`},"Futility Belt":{text:"Zane gains resistance to non-elemental damage.\n\nKill Skill. After killing an enemy, all elemental damage Zane takes is converted to non-elemental damage.",ranks:1,effect:()=>"Non-Elemental Damage Resistance: +15%\nDuration: 8 seconds"},"Deterrence Field":{text:"Enemies that touch the Barrier take Shock Damage and are staggered.",ranks:0,effect:()=>`Shock Damage: ${r(1,0,27)} (increases with character level)`,type:i.a.AUGMENT_CHEVRON}},5:{Refreshment:{text:"Whenever Zane damages a frozen enemy with his weapon, he gains some of that damage back as health.",ranks:3,effect:e=>`Life Steal: +${n(e,8)}% of damage dealt`},"Calm, Cool, Collected":{text:"Whenever Zane Freezes an enemy, his shield instantly begins recharging.\n\nIf Zane's shields are already full, he regenerates health for a few seconds.\n\nIf Zane's health is already full, his Action Skill Cooldowns and Durations are immediately reset.",ranks:1,effect:()=>"Health Regeneration: +3% of Max Health per second\nHealth Regeneration Duration: 3 seconds"},"Nerves of Steel":{text:"Zane gains increasing Accuracy and Handling. The longer his shield is full, the greater the bonuses.",ranks:3,effect:e=>`Accuracy: +${n(e,2)}% per second\nHandling: +${function(e){switch(e){case 1:return 2.4;case 2:return 4.8;case 3:return 7;default:return 0}}(e)}% per second\nMaximum Stacks: 15`}},6:{"Confident Competence":{text:"While Zane's shields are active, he gains increased Gun Damage and Accuracy. These bonuses are based on the amount of shields he has. The more percent full, the greater the bonuses.",ranks:1,effect:()=>"Gun Damage: Up to +40%\nAccuracy: Up to +33%"}}},Hitman:{0:{SNTNL:{text:"Send into battle an automated SNTNL drone that continually flies through the environment and attacks enemies with its Machine Guns. Pressing [Action Skill key] while SNTNL is active causes it to attack the enemy under Zane's crosshairs, if any. Machine Gun Element: Non-Elemental.",effect:e=>`Machine Gun Damage: ${r(e,0,6)} (increases with character level)\nDuration: 24 seconds\nCooldown: 60 seconds`,type:i.a.ACTION_SKILL,ranks:0}},1:{"Violent Speed":{text:"Kill Skill. After killing an enemy, Zane gains increased Movement Speed for a few seconds. This effect stacks twice.",ranks:5,effect:e=>`Movement Speed: +${n(e,4)}%\nDuration: 8 seconds\nMaximum Stacks: 2`},"Cold Bore":{text:"Zane gains increased Weapon Swap Speed. The next shot fired after swapping weapons deals Bonus Cryo Damage.",ranks:5,effect:e=>`Weapon Swap Speed: +${function(e){switch(e){case 1:return 13;case 2:return 23;case 3:return 31;case 4:return 38;case 5:return 43;default:return 0}}(e)}%\nBonus Cryo Damage: +${n(e,40)}% of damage dealt`},"Violent Momentum":{text:"Zane's Gun Damage is increased while moving. The quicker he moves, the greater the bonus.",ranks:5,effect:e=>`Gun Damage: +${n(e,4)}% at default walk speed`}},2:{"Winter's Drone":{text:"Converts SNTNL's primary weapons to Cryo Damage.",ranks:0,type:i.a.AUGMENT_CHEVRON,effect:()=>"SNTNL Weapons Element: Cryo"},"Cool Hand":{text:"Zane gains increased Reload Speed.\nKill Skill. After killing an enemy, Zane's Reload Speed is increased for a few seconds. This effect stacks twice.",ranks:5,effect:e=>`Reload Speed: +${n(e,3)}%\nAdditional Reload Speed: +${function(e){switch(e){case 1:return 4;case 2:return 9;case 3:return 13;case 4:return 18;case 5:return 22;default:return 0}}(e)}%\nDuration: 8 seconds\nMaximum Stacks: 2`},"Drone Delivery":{text:"SNTRY will occasionally drop a free grenade based on your current grenade mod while attacking enemies.",ranks:1,effect:()=>"Cooldown: 15 seconds"},Salvation:{text:"Kill Skill. After killing an enemy, Zane's weapons gain Life Steal for a few seconds.",ranks:5,effect:e=>`Life Steal: +${function(e){switch(e){case 1:return 2;case 2:return 4;case 3:return 7;case 4:return 9;case 5:return 11;default:return 0}}(e)}% of damage dealt\nDuration: 8 seconds`}},3:{"Bad Dose":{text:"SNTNL occasionally shoots out a beam of Radiation that weakens enemies and buffs Zane.\n\nFor every weakened enemy, Zane's Movement Speed and Fire Rate are increased.\n\nWeakened enemies have decreased Movement Speed and Attack Speed.",ranks:0,effect:e=>`Fire Rate: +2% per affected enemy\nMovement Speed: +6% per affected enemy\nBeam Damage: ${r(e,0,4)} (increases with character level)\nDuration: 12 seconds\nCooldown: 8 seconds`,type:i.a.AUGMENT_CHEVRON},"Seein' Red":{text:"Activating an Action Skill automatically activates all of Zane's Kill Skills.",ranks:1,effect:()=>"Kill Skill Bonus: +15%"},"Static Field":{text:"SNTNL emits a static field that sends a Shock Beam to nearby enemies, draining their shields and replenishing Zane's.",ranks:0,effect:()=>"Shield Damage: 2/sec (increases with character level)\nCooldown: 2 seconds",type:i.a.AUGMENT_CHEVRON}},4:{Boomsday:{text:"SNTNL adds a rocket pod to its primary weapons, allowing it to shoot rockets as well as machine guns. Element: Non-Elemental.",ranks:0,effect:e=>`Rocket Damage: ${r(e,0,32)} (increases with character level)`,type:i.a.AUGMENT_CHEVRON},"Violent Violence":{text:"Kill Skill. After killing an enemy, Zane gains increased Fire Rate for a few seconds. This effect stacks twice.",ranks:5,effect:e=>`Fire Rate: +${function(e){switch(e){case 1:return 4;case 2:return 7;case 3:return 11;case 4:return 15;case 5:return 19;default:return 0}}(e)}%\nCooldown: 8 seconds\nMaximum Stacks: 2`},"Playing Dirty":{text:"Kill Skill. After killing an enemy, Zane's next five shots all have a chance to fire an additional projectile.",ranks:5,effect:e=>`Extra Shot Chance: ${n(e,11.6)}%`},"Almighty Ordnance":{text:"Hold down [Action Skill key] while SNTNL is deployed to paint a target area. SNTNL fires a missile barrage at that area, and if an enemy is killed, SNTNL's duration is reset. This can only be used once per Action Skill use.",ranks:0,effect:e=>`Missile Damage: ${r(e,0,56)} (increases with character level)\nMissiles per Barrage: 4`,type:i.a.AUGMENT_CHEVRON}},5:{"Good Misfortune":{text:"Kill Skill. Killing an enemy increases Zane's Action Skill Duration. This skill has diminishing returns.",ranks:3,effect:e=>`Action Skill Duration Returned: +${n(e,4.666)}% of Max Duration`}},6:{"Death Follows Close":{text:"All of Zane's Kill Skills gain increased effect and duration.",ranks:1,effect:()=>"Kill Skill Bonus: +25%\nKill Skill Duration: +7 seconds"}}},"Doubled Agent":{0:{"Digi-Clone":{text:"Spawn a Digi-Clone of Zane. The Digi-Clone stays in place, but distracts and fires at enemies. Pressing [Action Skill key] while the Digi-Clone is active causes Zane and the Digi-Clone to swap places.",effect:()=>"Duration: 15 seconds\nCooldown: 28 seconds",type:i.a.ACTION_SKILL,ranks:0}},1:{Synchronicity:{text:"Zane gains increased Gun Damage for each active Action Skill.",ranks:5,effect:e=>`Gun Damage: +${n(e,4)}% per active Action Skill`},Praemunitus:{text:"Zane and his Digi-Clone gain increased Magazine Size.",ranks:3,effect:e=>`Magazine Size: +${n(e,8.333)}%`},"Borrowed Time":{text:"Zane gains increased Action Skill Duration for each active Action Skill.",ranks:5,effect:e=>`Action Skill Duration: +${n(e,6)}% per active Action Skill`}},2:{"Binary System":{text:"Whenever Zane swaps places with his Digi-Clone, a Cryo Nova is triggered around Zane and his Digi-Clone.",ranks:0,effect:e=>`Cryo Damage: ${r(e,0,46)} (increases with character level)`,type:i.a.AUGMENT_CHEVRON},Donnybrook:{text:"Kill Skill. Whenever Zane kills an enemy, he and his Digi-Clone receive increased Gun Damage and gain Health Regeneration for a few seconds. This effect stacks twice.",ranks:5,effect:e=>`Gun Damage: +${n(e,3)}%\nHealth Regeneration: +${n(e,.5)}% of Missing Health/sec\nDuration: 8 seconds\nMaximum Stacks: 2`},"Fractal Frags":{text:"The Digi-Clone throws a copy of Zane's current grenade mod when it is first activated. If the Digi-Clone is killed, it drops a free grenade.\nKill Skill. Killing an enemy while the Digi-Clone is active gives the Digi-Clone a chance to throw a grenade.",ranks:1,effect:()=>"Grenade Chance: 30%"},"Duct Tape Mod":{text:"The first shot fired from Zane's gun has a chance to also fire a grenade. This skill has a short cooldown.",ranks:5,effect:e=>`Grenade Chance: up to ${n(e,4)}%\nCooldown: 4 seconds`}},3:{Schadenfreude:{text:"Whenever the Digi-Clone takes damage, Zane's shield is restored by a portion of that damage.",ranks:0,effect:()=>"Shields Restored: 100% of damage taken by Digi-Clone",type:i.a.AUGMENT_CHEVRON},"Quick Breather":{text:"Whenever Zane swaps places with his Digi-Clone, his shield immediately begins recharging and restores health to his clone.",ranks:1,effect:()=>"Digi-Clone Health Restored: 50% of Max Health"},"Which One's Real?":{text:"Enemies are more likely to target the Digi-Clone for a few seconds after it's summoned and after swapping places.",ranks:0,effect:()=>"Duration: 4 seconds",type:i.a.AUGMENT_CHEVRON}},4:{Dopplebanger:{text:"Hold down [Action Skill key] to end the action skill early. When Zane's Action Skill is ended, the Digi-Clone explodes, dealing Splash Damage to all nearby enemies. The more Action Skill time remaining, the greater the damage.",ranks:0,effect:e=>`Damage: Up to ${r(e,0,280)} (increases with character level)`,type:i.a.AUGMENT_CHEVRON},"Pocket Full of Grenades":{text:"Kill Skill. After killing an enemy, Zane gains Grenade Regeneration for a few seconds.",ranks:3,effect:e=>`Grenade Regeneration: +${n(e,5)}% per second\nDuration: 8 seconds`},"Old-U":{text:"Press [Action Skill key] during Fight For Your Life if Digi-Clone is active to destroy the Digi-Clone and immediately gain a Second Wind with full health.",ranks:1,effect:()=>"Health Restored: 100% of Maximum Health"},"Supersonic Man":{text:"Whenever one or more of Zane's Action Skills are active, he gains increased Movement Speed for each active Action Skill.",ranks:3,effect:e=>`Movement Speed: +${n(e,4)}% per active Action Skill`},"Digital Distribution":{text:"If Zane takes health damage while the Digi-Clone is active, a portion of that damage is shared on his Digi-Clone instead.",ranks:0,effect:()=>"Damage Health Shared: 75%",type:i.a.AUGMENT_CHEVRON}},5:{"Like a Ghost":{text:"Zane and his Digi-Clone gain a chance to ignore bullets. This chance is increased for a few seconds after activating an Action Skill. This effect stacks.",ranks:3,effect:e=>`Ignore Bullet Chance: +${n(e,5)}%\nAdditional Ignore Bullet Chance: +${n(e,5)}%\nDuration: 8 seconds`},"Boom. Enhance.":{text:"Whenever Zane summons his Digi-Clone, it consumes up to 3 grenades. For every grenade consumed, the Digi-Clone gains increased Gun Damage, Maximum Health, Fire Rate, Reload Speed, and Digi-Clone Duration.",ranks:1,effect:()=>"Digi-Clone Gun Damage: +20% per grenade\nDigi-Clone Maximum Health: +81% per grenade\nDigi-Clone Fire Rate: +5% per grenade\nDigi-Clone Reload Speed: +31% per grenade\nDigi-Clone Duration: +25% per grenade"},"Trick of the Light":{text:"Zane deals Bonus Cryo Damage to enemies that aren't targeting him.",ranks:3,effect:e=>`Bonus Cryo Damage: +${n(e,15)}% of damage dealt`}},6:{"Double Barrel":{text:"The Digi-Clone is equipped with a copy of Zane's Current Weapon when activated. Swapping places with the Digi-Clone causes Zane and his Digi-Clone to gain increased Gun Damage.",ranks:1,effect:()=>"Gun Damage: +25%\nItem Duping: +100%\nDigi-Clone Gun Damage: +25%"}}},"The Professional":{0:{"MNTIS Shoulder Cannon":{ranks:0,text:"Zane equips a Shoulder Mount ed Cannon. Pressing [Action Skill key] causes Zane to fire his cannon at his crosshairs and consume one charge.",type:i.a.ACTION_SKILL,effect:()=>"Max Charges: 3\nCooldown: 12 seconds\nDamage: 46"}},1:{"Man Of Focus":{ranks:5,text:"Activating an Action Skill grants Zane increased Accuracy and Handling for a short time. This effect stacks.",effect:e=>`Accuarcy: +${n(e,function(e){switch(e){case 1:return 7;case 2:return 14;case 3:return 19;case 4:return 24;case 5:return 29;default:return 0}}(e))}%\nHandling: +${n(e,function(e){switch(e){case 1:return 7.4;case 2:return 13.8;case 3:return 19.4;case 4:return 24.2;case 5:return 28.6;default:return 0}}(e))}%\nDuration: 12 seconds\nMax Stacks: 10`},Renegade:{ranks:3,text:"After scoring a Critical Hit, Zane Regenerates Health for a short time.",effect:e=>`Health Regeneration: up to +${n(e,.5)}% Max Health / sec\nDuration: 12 seconds`},"Déjà Vu":{ranks:5,text:"Whenever Zane kills an enemy with a Critical Hit, there is a chance for 1 ammo to be added to his magazine.",effect:e=>`Chance to add ammo: ${n(e,9)}%`}},2:{"Colder Shoulder":{ranks:0,text:"Converts Zane's MNTIS Shoulder Cannon damage to Cryo Damage but deals reduced damage. Additionally, Zane gains Increased Cryo Freeze Rate.",type:i.a.AUGMENT_CHEVRON,effect:()=>"Cannon Damage: -10%\nFreeze Rate: +20%"},"Headman's Hand":{ranks:5,text:"Kill Skill. Zane gains increased Critical Hit Damage. This effect stacks twice.",effect:e=>`Critical Hit Damage: +${n(e,4)}%\nDuration: 8 seconds`},"Tunnel Vision":{ranks:3,text:"While moving, Zane gains increased Accuracy and Handling. The quicker Zane moves, the greater the bonus.",effect:e=>`Accuracy: up to +${n(e,10)}% at default walk speed\nHandling: up to +${n(e,11)}% at default walk speed`},Commitment:{ranks:5,text:"Kill Skill. Zane gains increased Gun Damage and Action Skill Cooldown Rate.",effect:e=>`Gun Damage: +${n(e,4)}%\nCooldown Rate: +${n(e,4)}%`}},3:{Wetwork:{ranks:0,text:"Whenever Zane kills an enemy with his Shoulder Cannon, that enemy explodes into an Elemental Puddle.",effect:()=>"Explosion Damage: 32 (increases with character level)\nPuddle Damage: 18 per second (increases with character level)",type:i.a.AUGMENT_CHEVRON},Fugitive:{ranks:1,text:"Zane can sprint and shoot at the same time.",effect:()=>""},"Brain Drain":{ranks:0,text:"Whenever Zane kills an enemy with a Critical Hit from his Shoulder Cannon, two charges are instantly returned.",effect:()=>"",type:i.a.AUGMENT_CHEVRON}},4:{"No Way Out":{ranks:0,text:"Whenever Zane damages an enemy with his Shoulder Cannon, that enemy is pulled to him and takes Increased Damage for a short time. Additionally, Zane's MNTIS Shoulder Cannon cooldown time is increased.",effect:()=>"Cooldown: +20%\nDamage Increase: +25%\nDuration: 6 seconds",type:i.a.AUGMENT_CHEVRON},"Domino Effect":{ranks:5,text:"Whenever Zane scores a Critical Hit, he gains increased Fire Rate and Reload Speed for a short time. If he scores a Critical Hit with his Action Skill, he doubles this effect.",effect:e=>`Reload Speed: +${n(e,4)}%\nFire Rate: +${n(e,3)}%\nDuration: 8 seconds`},"The Art Of War":{ranks:5,text:"After activating an Action Skill or Action Skill Ability, Zane's next short fired from his weapon deals Increased Damage. This effect stacks.",effect:e=>`Gun Damage: +${n(e,3)}%\nMax Stacks: 10`}},5:{"Sheer Will":{ranks:3,text:"Zane gains increased Action Skill Cooldown Rate. Scoring a Critical Hit increases this effect. This effect stacks.",effect:e=>`Cooldown Rate: +${n(e,5)}%\nCooldown Rate: +${n(e,2.5)}% after Critical Hit\nDuration: 8 seconds\nMax Stacks: 15`},Eraser:{ranks:3,text:"Zane's Critical Hits pierce through enemies for all weapons, dealing Increased Damage for every enemy pierced.",effect:e=>`Pierced Shot Damage: +${n(e,40)}%`},Proliferation:{ranks:0,text:"Zane's MNTIS Shoulder Cannon gains Additional Charges and deals Increased Damage based on the number of charges remaining.",effect:()=>"Additional Charges: +2\nCannon Damage: +20% per charge",type:i.a.AUGMENT_CHEVRON}},6:{"Our Man Flint":{ranks:1,text:"While aiming down sights, Zane's weapons deal Bonus Damage and automatically apply their Status Effect when he scores a Critical Hit.",effect:()=>"Bonus Damage: 25% of damage dealt"}}}}}}); +//# sourceMappingURL=bundle.014faa49.js.map \ No newline at end of file diff --git a/bundle.014faa49.js.map b/bundle.014faa49.js.map new file mode 100644 index 0000000..25fcfb7 --- /dev/null +++ b/bundle.014faa49.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../node_modules/offline-plugin/runtime.js","webpack:///./components/Skill/index.css","webpack:///./components/Nav/index.js","webpack:///./pages/Siren/skills.js","webpack:///./components/Footer/index.js","webpack:///./components/App/index.js","webpack:///./components/VaultHunter/index.js","webpack:///./constants/skills.js","webpack:///./components/VaultHunter/index.css","webpack:///./pages/Home/index.js","webpack:///./index.js","webpack:///../node_modules/preact-router/dist/preact-router.es.js","webpack:///./pages/Beastmaster/skills.js","webpack:///./pages/Gunner/index.js","webpack:///./pages/Operative/index.js","webpack:///./components/VaultHunter/selectors.js","webpack:///./pages/Gunner/skills.js","webpack:///../node_modules/preact/dist/preact.min.js","webpack:///./components/VaultHunter/investmentValidator.js","webpack:///./components/VaultHunter/reducer.js","webpack:///./components/Footer/index.css","webpack:///./pages/Home/index.css","webpack:///../node_modules/deepmerge/dist/umd.js","webpack:///./components/Skill/index.js","webpack:///./pages/Siren/index.js","webpack:///./components/VaultHunter/hashHandler.js","webpack:///./pages/Beastmaster/index.js","webpack:///./pages/Operative/skills.js"],"names":["__webpack_require__","moduleId","installedModules","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","hasSW","navigator","window","location","protocol","hostname","indexOf","install","options","registration","serviceWorker","register","handleUpdating","onUpdateStateChange","sw","state","sendEvent","onstatechange","ignoreWaiting","onInstallStateChange","stateChangeHandler","installing","waiting","active","event","source","then","reg","onupdatefound","catch","err","Promise","reject","applyUpdate","callback","errback","getRegistration","postMessage","action","update","Nav","_ref","path","h","map","page","Link","href","percent","rank","unit","Math","round","flat","level","floor","skills","text","effect","type","SKILLS","ACTION_SKILL","ranks","getArmsDealSplashDamageResistance","getHelpingHandsDamageResistance","AUGMENT_DIAMOND","AUGMENT_ACTION_SKILL","getMindfulnessShieldRegenerationDelay","AUGMENT_CHEVRON","getOneWithNatureElementalDamageResistance","getFastHandsReloadSpeed","getFastHandsWeaponSwapSpeed","getFastHandsModeSwitchSpeed","getAlacrityReloadSpeedAfterActionSkill","getTranscendAccuracy","getFromRestChargeTime","getWrathGunDamage","getWrathGunDamageAfterActionSkill","getSteadyHandsHandling","getSteadyHandsAccuracy","alt","src","class","style","footer","Router","Home","Operative","Siren","Beastmaster","Gunner","App","contextKiller","preventDefault","_ref2","Footer","VaultHunter","Component","constructor","props","super","this","invested","componentDidMount","setState","reducer","getHash","render","discipline","initialSkills","skillChangeListenerFactory","skillName","treeIndex","treeName","tierIndex","oldValue","newValue","trees","keys","tree","green","blue","red","purple","tier","skillIndex","Skill","_extends","enabled","getLevel","image","onChange","header","title","subtitle","sidepanel","reset","onClick","resetSkills","setHash","onContextMenu","splash","wrapper","disclaimer","job","link","elem","document","querySelector","firstElementChild","require","assign","obj","pathRankSort","a","b","index","prepareVNodeForRanking","vnode","attributes","default","segmentize","rankSegment","join","rankChild","url","replace","split","segment","charAt","length","getCurrentUrl","customHistory","getCurrentLocation","EMPTY","pathname","search","route","ROUTERS","canRoute","history","setUrl","routeTo","didRoute","i$1","subscribers","routeFromLink","node","getAttribute","target","match","handleLinkClick","e","button","currentTarget","prevent","stopImmediatePropagation","stopPropagation","delegateLinkHandler","ctrlKey","metaKey","altKey","shiftKey","String","nodeName","toUpperCase","__preactattr_","for","hasAttribute","parentNode","EMPTY$1","eventListenersInitialized","Component$$1","addEventListener","__proto__","shouldComponentUpdate","static","getMatchingChildren","children","_didRoute","updating","forceUpdate","componentWillMount","push","this$1","unlisten","listen","componentWillUnmount","splice","componentWillUpdate","componentDidUpdate","invoke","filter","sort","matches","opts","ret","decodeURIComponent","slice","max","param","flags","plus","star","val","exec","newProps","ref","Boolean","ref$1","current","previous","previousUrl","router","Route","component","getFuriousAttackHandling","getTurnTailAndRunDamageResistance","getInterplanetaryStalkerBeastMovementSpeed","ceil","getSecondIntentionCriticalKillReloadSpeed","getHuntersEyeDamageResistance","getAmbushPredatorHandling","getMostDangerousGameHandling","reduce","total","percentTwoDecimals","getMatchedSetHeatPerShot","getScrappyHandling","getScrappyWeaponSwapSpeed","getScrappyModeSwitchSpeed","getDeadlinesFuelDrain","getArmoredInfantryDamageResistance","getVladofIngenuityShockDamageResistance","getBehindTheIronCurtainShieldRechargeDelay","W","arguments","P","pop","T","M","__d","V","debounceRendering","D","x","splitText","_componentConstructor","__n","toLowerCase","u","defaultProps","removeChild","cssText","E","test","innerHTML","__html","substring","_","removeEventListener","__l","removeAttribute","removeAttributeNS","setAttributeNS","setAttribute","className","f","A","shift","afterMount","H","R","ownerSVGElement","B","appendChild","_component","nodeValue","createTextNode","replaceChild","v","N","createElementNS","createElement","firstChild","nextSibling","dangerouslySetInnerHTML","y","childNodes","g","w","C","k","__k","trim","insertBefore","lastChild","previousSibling","F","U","__b","__x","__r","getDerivedStateFromProps","base","componentWillReceiveProps","context","__c","__p","syncComponentUpdates","__s","S","getChildContext","getSnapshotBeforeUpdate","L","__u","afterUpdate","__h","beforeUnmount","resolve","setTimeout","cloneElement","createRef","rerender","investmentValidator","totalSpent","treeTotals","values","treeTotal","tierTotal","skill","newSkills","deepmerge","skillChangeTotals","_objectSpread","loadSkillsTotals","isSpecial","stringValue","toString","$$typeof","REACT_ELEMENT_TYPE","isReactElement","cloneUnlessOtherwiseSpecified","clone","isMergeableObject","Array","isArray","defaultArrayMerge","concat","element","mergeObject","destination","forEach","customMerge","getMergeFunction","arrayMerge","sourceIsArray","isNonNullObject","all","array","Error","prev","next","factory","getInitials","string","clickListener","min","isAugment","includes","shapeStyle","actionSkill","chevron","diamond","augment","usable","description","skillTitle","_ref3","skillsState","hashparts","JSON","parse","stringify","parseInt","getStiffUpperLipDamageResistance","getNervesOfSteelHandling","getColdBoreWeaponSwapSpeed","getCoolHandAfterKillReloadSpeed","getSalvationLifeSteal","getViolentViolenceFireRate","getManOfFocusAccuracy","getManOfFocusHandling"],"mappings":"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","file":"bundle.014faa49.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","var appCacheIframe;\n\nfunction hasSW() {\n \n return 'serviceWorker' in navigator && (\n window.location.protocol === 'https:' ||\n window.location.hostname === 'localhost' ||\n window.location.hostname.indexOf('127.') === 0\n );\n \n}\n\nfunction install(options) {\n options || (options = {});\n\n \n if (hasSW()) {\n var registration = navigator.serviceWorker\n .register(\n \"/sw.js\", {\n \n \n }\n );\n\n \n var handleUpdating = function(registration) {\n var sw = registration.installing || registration.waiting;\n var ignoreInstalling;\n var ignoreWaiting;\n\n // No SW or already handled\n if (!sw || sw.onstatechange) return;\n\n var stateChangeHandler;\n\n // Already has SW\n if (registration.active) {\n onUpdateStateChange();\n stateChangeHandler = onUpdateStateChange;\n } else {\n onInstallStateChange();\n stateChangeHandler = onInstallStateChange;\n }\n\n ignoreInstalling = true;\n if (registration.waiting) {\n ignoreWaiting = true;\n }\n\n sw.onstatechange = stateChangeHandler;\n\n function onUpdateStateChange() {\n switch (sw.state) {\n case 'redundant': {\n sendEvent('onUpdateFailed');\n sw.onstatechange = null;\n } break;\n\n case 'installing': {\n if (!ignoreInstalling) {\n sendEvent('onUpdating');\n }\n } break;\n\n case 'installed': {\n if (!ignoreWaiting) {\n sendEvent('onUpdateReady');\n }\n } break;\n\n case 'activated': {\n sendEvent('onUpdated');\n sw.onstatechange = null;\n } break;\n }\n }\n\n function onInstallStateChange() {\n switch (sw.state) {\n case 'redundant': {\n // Failed to install, ignore\n sw.onstatechange = null;\n } break;\n\n case 'installing': {\n // Installing, ignore\n } break;\n\n case 'installed': {\n // Installed, wait activation\n } break;\n\n case 'activated': {\n sendEvent('onInstalled');\n sw.onstatechange = null;\n } break;\n }\n }\n };\n\n var sendEvent = function(event) {\n if (typeof options[event] === 'function') {\n options[event]({\n source: 'ServiceWorker'\n });\n }\n };\n\n registration.then(function(reg) {\n // WTF no reg?\n if (!reg) return;\n\n // Installed but Shift-Reloaded (page is not controller by SW),\n // update might be ready at this point (more than one tab opened).\n // Anyway, if page is hard-reloaded, then it probably already have latest version\n // but it's not controlled by SW yet. Applying update will claim this page\n // to be controlled by SW. Maybe set flag to not reload it?\n // if (!navigator.serviceWorker.controller) return;\n\n handleUpdating(reg);\n reg.onupdatefound = function() {\n handleUpdating(reg);\n };\n }).catch(function(err) {\n sendEvent('onError');\n return Promise.reject(err);\n });\n \n\n return;\n }\n \n\n \n}\n\nfunction applyUpdate(callback, errback) {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration || !registration.waiting) {\n errback && errback();\n return;\n }\n\n registration.waiting.postMessage({\n action: 'skipWaiting'\n });\n\n callback && callback();\n });\n\n return;\n }\n \n\n \n}\n\nfunction update() {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration) return;\n return registration.update();\n });\n }\n \n\n \n}\n\n\n\nexports.install = install;\nexports.applyUpdate = applyUpdate;\nexports.update = update;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"skill\":\"_3JH8h\",\"enabled\":\"_1mLSi\",\"usable\":\"_1xemn\",\"augment\":\"_3VkFk\",\"actionSkill\":\"-z8wv\",\"chevron\":\"_2t_-G\",\"diamond\":\"_2ej0d\",\"image\":\"_8ejWg\",\"ranks\":\"_3DD7O\",\"skillTitle\":\"_394yV\",\"description\":\"_1S9-f\",\"effect\":\"oiyDq\"};","import { Link } from 'preact-router';\n\nexport default function Nav ({ path }) {\n const pages = [\n { name: 'Zane', path: '/operative' },\n { name: 'Amara', path: '/siren' },\n { name: 'FL4K', path: '/beastmaster' },\n { name: 'Moze', path: '/gunner' },\n ];\n return (\n \n );\n}\n","/* eslint-disable space-before-function-paren */\nimport SKILLS from '@constants/skills';\n\nfunction percent(rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\nfunction flat(rank, level, unit) {\n return Math.floor(rank * unit);\n}\n\n// Arms Deal Splash Damage Resistance\nfunction getArmsDealSplashDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Helping Hand(s) Damage Resistance\nfunction getHelpingHandsDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Mindfulness Shield Regeneration Delay\nfunction getMindfulnessShieldRegenerationDelay(rank) {\n switch (rank) {\n case 1:\n return 9;\n case 2:\n return 17;\n case 3:\n return 23;\n default:\n return 0;\n }\n}\n\n// One With Nature Elemental Damage Resistance\nfunction getOneWithNatureElementalDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Reload Speed\nfunction getFastHandsReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 7;\n case 2:\n return 14;\n case 3:\n return 19;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Weapon Swap Speed\nfunction getFastHandsWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 28;\n case 3:\n return 36;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Mode Switch Speed\nfunction getFastHandsModeSwitchSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 28;\n case 3:\n return 36;\n default:\n return 0;\n }\n}\n\n// Alacrity Reload Speed After Action Skill\nfunction getAlacrityReloadSpeedAfterActionSkill(rank) {\n switch (rank) {\n case 1:\n return 0.6;\n case 2:\n return 1.2;\n case 3:\n return 1.8;\n case 4:\n return 2.3;\n case 5:\n return 2.9;\n default:\n return 0;\n }\n}\n\n// Transcend Accuracy\nfunction getTranscendAccuracy(rank) {\n switch (rank) {\n case 1:\n return 17;\n case 2:\n return 29;\n case 3:\n return 38;\n default:\n return 0;\n }\n}\n\n// From Rest Charge Time\nfunction getFromRestChargeTime(rank) {\n switch (rank) {\n case 1:\n return 21;\n case 2:\n return 34;\n case 3:\n return 44;\n default:\n return 0;\n }\n}\n\n// Wrath Gun Damage\nfunction getWrathGunDamage(rank) {\n switch (rank) {\n case 1:\n return 6.7;\n case 2:\n return 13.3;\n case 3:\n return 20;\n default:\n return 0;\n }\n}\n\n// Wrath Gun Damage After Action Skill\nfunction getWrathGunDamageAfterActionSkill(rank) {\n switch (rank) {\n case 1:\n return 6.7;\n case 2:\n return 13.3;\n case 3:\n return 20;\n default:\n return 0;\n }\n}\n\n// Steady Hands Handling\nfunction getSteadyHandsHandling(rank) {\n switch (rank) {\n case 1:\n return 14;\n case 2:\n return 24;\n case 3:\n return 32;\n default:\n return 0;\n }\n}\n\n// Steady Hands Accuracy\nfunction getSteadyHandsAccuracy(rank) {\n switch (rank) {\n case 1:\n return 13;\n case 2:\n return 23;\n case 3:\n return 31;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Brawl\": {\n \"0\": {\n \"Phaseslam\": {\n text: \"Amara leaps into the air and Slams the ground, dealing damage to all nearby enemies and knocking them up. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 98)} (increases with character level)\\nCooldown: 35 Seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Root to Rise\": {\n ranks: 5,\n text: \"Amara gains increased Maximum Health.\",\n effect: (rank, level) => `Maximum Health: +${percent(rank, 8)}%`,\n },\n \"Personal Space\": {\n ranks: 3,\n text: \"Amara's weapon shots deal Bonus Damage based on the distance to her target. The closer the target, the greater the bonus.\",\n effect: (rank, level) => `Bonus Damage: Up to +${percent(rank, 18)}% of damage dealt`,\n },\n \"Clarity\": {\n ranks: 5,\n text: \"Amara constantly regenerates health. The lower her health, the more powerful the regeneration. After using an Action Skill, this bonus is doubled for a few seconds.\",\n effect: (rank, level) => `Health Regen: Up to +${percent(rank, 1)}% of Missing Health/sec\\nAdditional Regen: Up to +${percent(rank, 1)}% of Missing Health/sec\\nDuration: 5 seconds`,\n },\n },\n \"2\": {\n \"Arms Deal\": {\n ranks: 5,\n text: \"Amara deals increased Splash Damage and takes reduced Splash Damage.\",\n effect: (rank, level) => `Splash Damage: +${percent(rank, 4)}%\\nSplash Damage Resistance: +${getArmsDealSplashDamageResistance(rank)}%`,\n },\n \"Samsara\": {\n ranks: 3,\n text: \"Whenever Amara deals damage to an enemy with her Action Skill, she adds a stack of Samsara. For every stack of Samsara, Amara gains increased Gun Damage and Health Regeneration for a few seconds. Stacks decay after a few seconds.\",\n effect: (rank, level) => `Gun Damage: +${percent(rank, 1.7)}% per stack\\nHealth Regen: +${percent(rank, 1.7)}% of Missing Health/sec per stack\\nMaximum Stacks: 5\\nDuration: 20 seconds`,\n },\n \"Helping Hand(s)\": {\n ranks: 5,\n text: \"For a few seconds after using her Action Skill, Amara's arms remain active and grant her Damage Resistance.\",\n effect: (rank, level) => `Damage Resistance: +${getHelpingHandsDamageResistance(rank)}%\\nDuration: 15 seconds`,\n },\n \"Blight Tiger\": {\n ranks: 0,\n text: \"Converts Amara's Action Skill to Corrosive Damage.\",\n effect: (rank, level) => `Action Skill Element: Corrosive.`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"Fracture\": {\n ranks: 0,\n text: \"Amara summons a line of fists that erupt from the ground, dealing damage to enemies in front of Amara. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 88)} (increases with character level)\\nCooldown: 28 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Mindfulness\": {\n ranks: 3,\n text: \"Whenever Amara takes damage, she gains a stack of Mindfulness. For every stack of Mindfulness, Amara gains improved Shield Regeneration Delay and Movement Speed. Stacks decay after a few seconds.\",\n effect: (rank, level) => `Shield Regeneration Delay: -${getMindfulnessShieldRegenerationDelay(rank)}% per stack\\nMovement Speed: +${percent(rank, 1.4)}% per stack\\nMaximum Stacks: 25\\nDuration: 5 seconds`,\n },\n \"Find Your Center\": {\n ranks: 1,\n text: \"Amara gains increased Melee Damage. Additionally, for a few seconds after using her Action Skill, Amara gains increased Melee Range.\",\n effect: (rank, level) => `Melee Damage: +100%\\nMelee Range: +75%\\nDuration: 20 seconds`,\n },\n \"Vigor\": {\n ranks: 3,\n text: \"Kill Skill. Killing an enemy with Amara's Action Skill grants all allies increased Movement Speed for a few seconds.\",\n effect: (rank, level) => `Team Movement Speed: +${percent(rank, 3.333)}%\\nDuration: 8 seconds`,\n },\n \"Revelation\": {\n ranks: 0,\n text: \"Amara's Action Skill now creates a Nova when it damages enemies, dealing damage to all nearby enemies.\",\n effect: (rank, level) => `Nova Damage: ${flat(rank, level, 41)} (increases with character level)\\nAction Skill Damage: -15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Downfall\": {\n ranks: 0,\n text: \"Amara leaps into the air and shoots an Elemental Beam below her, followed by a Slam. Element: Shock.\",\n effect: (rank, level) => `Beam Damage: ${flat(rank, level, 14)} per second (increases with character level)\\nSlam Damage: ${flat(rank, level, 95)} (increases with character level)\\nCooldown: 47 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"One With Nature\": {\n ranks: 5,\n text: \"Amara gains increased Maximum Health and Elemental Damage Resistance to her Action Skill Element.\",\n effect: (rank, level) => `Maximum Health: +${percent(rank, 5)}%\\nElemental Damage Resistance: +${getOneWithNatureElementalDamageResistance(rank)}%`,\n },\n },\n \"5\": {\n \"Do Unto Others\": {\n ranks: 1,\n text: \"Whenever an enemy damages Amara, she automatically throws an energy orb back at them, dealing Action Skill Elemental Damage. This skill has a short cooldown.\",\n effect: (rank, level) => `Cooldown: 8 seconds`,\n },\n \"Jab Cross\": {\n ranks: 5,\n text: \"Whenever Amara deals melee damage to an enemy, she gains increased Action Skill Damage and increased Gun Damage for a few seconds.\",\n effect: (rank, level) => `Action Skill Damage: +${percent(rank, 15)}%\\nGun Damage: +${percent(rank, 3)}%\\nDuration: 10 seconds`,\n },\n \"Guardian Angel\": {\n ranks: 1,\n text: \"When Amara enters Fight For Your Life, she immediately gains a Second Wind, restores her health, and creates an Action Skill Elemental Nova that may knock back nearby enemies. This skill has a long cooldown.\",\n effect: (rank, level) => `Health Restored: 50% of Maximum Health\\nCooldown: 120 seconds`,\n },\n \"Glamour\": {\n ranks: 0,\n text: \"Enemies damaged by Amara's Action Skill become confused and temporarily attack their allies. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are confused as well.\",\n effect: (rank, level) => `Confuse Duration: 8 seconds\\nAction Skill Damage: -10%\\nAction Skill Cooldown: +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"6\": {\n \"Blitz\": {\n ranks: 1,\n text: \"Melee Override. Press [Melee key] while aiming at an enemy to make Amara dash a short distance forward and perform a special melee strike, dealing Elemental Melee Damage. If a Blitz melee attack kills an enemy, Blitz's cooldown is immediately reset.\",\n effect: (rank, level) => `Melee Damage: +100%\\nCooldown: 8 seconds`,\n },\n },\n },\n \"Mystical Assault\": {\n \"0\": {\n \"Phasecast\": {\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 92)}\\nCooldown: 28 Seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Do Harm\": {\n ranks: 5,\n text: \"Killing an enemy grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Action Skill Damage is temporarily increased.\",\n effect: (rank, level) => `Action Skill Dmg: +${percent(rank, 0.9)}% per Rush stack consumed\\nMaximum Rush Stacks: 10\\nDuration: 20 seconds`,\n },\n \"Fast Hand(s)\": {\n ranks: 3,\n text: \"Amara's Reload Speed, Weapon Swap Speed, and Mode Switch Speed are improved.\",\n effect: (rank, level) => `Reload Speed: +${getFastHandsReloadSpeed(rank)}%\\nWeapon Swap Speed: +${getFastHandsWeaponSwapSpeed(rank)}%\\nMode Switch Speed: +${getFastHandsModeSwitchSpeed(rank)}%`,\n },\n \"Violent Tapestry\": {\n ranks: 5,\n text: \"Applying a Status Effect grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Status Effect Chance is temporarily increased.\",\n effect: (rank, level) => `StatusEffect Chance: +${percent(rank, 0.6)}% per Rush stack consumed\\nMaximum Rush Stacks: 10\\nDuration: 20 seconds`,\n },\n },\n \"2\": {\n \"Alacrity\": {\n ranks: 5,\n text: \"Amara gains increased Reload Speed for every stack of Rush. After consuming Rush stacks, this bonus is increased for a few seconds.\",\n effect: (rank, level) => `Reload Speed: +${percent(rank, 0.4)}% per Rush stack\\nAdditional Reload Speed: +${getAlacrityReloadSpeedAfterActionSkill(rank)}% per Rush stack consumed\\nDuration: 8 seconds`,\n },\n \"Transcend\": {\n ranks: 3,\n text: \"Amara gains increased Accuracy and Critical Hit Damage for a few seconds after activating her Action Skill.\",\n effect: (rank, level) => `Accuracy: +${getTranscendAccuracy(rank)}%\\nCritical Hit Damage: +${percent(rank, 9)}%\\nDuration: 12 seconds`,\n },\n \"Restless\": {\n ranks: 5,\n text: \"Amara gains increased Action Skill Cooldown Rate.\",\n effect: (rank, level) => `Action Skill Cooldown Rate: +${percent(rank, 5)}%`,\n },\n \"Soul Sap\": {\n ranks: 0,\n text: \"A portion of all damage dealt by Amara's Action Skill is returned to her or a nearby ally as health.\",\n effect: (rank, level) => `Action Skill Life Steal: 30% of damage dealt`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"3\": {\n \"Deliverance\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Whenever Amara's Astral Projection damages an enemy or object, it releases homing Elemental Projectiles that trigger her Action Skill Elemental Effect on enemies. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 86)} (increases with character level)\\nElemental Projectiles: 3 per enemy or object hit\\nCooldown: 28 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Ascendant\": {\n ranks: 1,\n text: \"All Action Skill Augments gain increased effects.\",\n effect: (rank, level) => `Soul Sap Life Steal: +20%\\nAllure Radius: +100%\\nGlamour Duration: +50%\\nRevelation Damage: +25%\\nStillness of Mind: Breaks 0.75 sec after taking dmg`,\n },\n \"Stillness of Mind\": {\n ranks: 0,\n text: \"Enemies damaged by Amara's Action Skill become phaselocked until they are damaged or the duration ends. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are also phaselocked.\",\n effect: (rank, level) => `Phaselock Duration: 6 seconds\\nAction Skill Damage: -25%\\nAction Skill Cooldown: +15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Reverberation\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Astral Projection deals increased damage for every enemy it hits. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 88)} (increases with character level)\\nDamage Bonus: +50% per enemy hit\\nCooldown: 30 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"From Rest\": {\n ranks: 3,\n text: \"Amara gains improved Fire Rate and Charge Time.\",\n effect: (rank, level) => `Fire Rate: +${percent(rank, 4)}%\\nCharge Time: +${getFromRestChargeTime(rank)}%`,\n },\n \"Laid Bare\": {\n ranks: 3,\n text: \"Enemies take increased damage from all sources for a few seconds after being damaged by Amara's Action Skill.\",\n effect: (rank, level) => `Damage Increase: +${percent(rank, 8.333)}%\\nDuration: 8 seconds`,\n },\n \"Wrath\": {\n ranks: 3,\n text: \"Amara gains increased Gun Damage. This effect is increased after she activates her Action Skill for a few seconds.\",\n effect: (rank, level) => `Gun Damage: +${getWrathGunDamage(rank)}%\\nAdditional Gun Damage: +${getWrathGunDamageAfterActionSkill(rank)}%\\nDuration: 8 seconds`,\n },\n },\n \"5\": {\n \"Remnant\": {\n ranks: 3,\n text: \"When Amara kills an enemy with a Gun or Action Skill, she creates a homing projectile that seeks out a new enemy dealing her Action Skill Elemental Damage. Any Overkill Damage is added to the projectile's damage.\",\n effect: (rank, level) => `Remnant Base Damage: ${flat(rank, level, 9)} (increases with character level)`,\n },\n \"Awakening\": {\n ranks: 3,\n text: \"Amara's Rush stacks gain increased effectiveness.\",\n effect: (rank, level) => `Rush Stack Effectiveness: +${percent(rank, 10)}%`,\n },\n \"Tandava\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself. When it hits a target, it explodes, damaging all nearby enemies. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 91)} (increases with character level)\\nCooldown: 35 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n },\n \"6\": {\n \"Avatar\": {\n ranks: 1,\n text: \"Amara's Action Skill can be activated while it's cooling down. This skill may only be used once per completed cooldown.\\n\\nAdditionally, increases Amara's Maximum Rush Stacks.\\n\\nAdditionally, if Amara's Action Skill kills an enemy, it refunds half of her Rush stacks.\",\n effect: (rank, level) => `Maximum Rush Stacks: +10`,\n },\n },\n },\n \"Fist of the Elements\": {\n \"0\": {\n \"Phasegrasp\": {\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Skill Duration: 7 seconds\\nCooldown: 16 seconds\\nGrasp Immune Damage: ${flat(rank, level, 28)} (increases with character level)`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Anima\": {\n ranks: 5,\n text: \"Amara's Status Effects deal increased damage over time and have increased duration. Her Action Skill Status Effect deals further increased damage.\",\n effect: (rank, level) => `Setatus Effect Damage: +${percent(rank, 4)}%\\nStatus Effect Duration: +${percent(rank, 20)}%\\nAction Skill Status Effect Damage: +${percent(rank, 8)}%`,\n },\n \"Steady Hands\": {\n ranks: 3,\n text: \"Amara gains increased Weapon Handling and Accuracy.\",\n effect: (rank, level) => `Handling: +${getSteadyHandsHandling(rank)}%\\nAccuracy: +${getSteadyHandsAccuracy(rank)}%`,\n },\n \"Infusion\": {\n ranks: 5,\n text: \"Convert a portion of damage dealt by Amara's weapons into her Action Skill Element.\",\n effect: (rank, level) => `Converted Damage: ${percent(rank, 8)}%`,\n },\n },\n \"2\": {\n \"Tempest\": {\n ranks: 5,\n text: \"Amara deals increased Elemental Damage. Shock Damage is further increased.\",\n effect: (rank, level) => `Other Elemental Damage: +${percent(rank, 6)}%\\nShock Damage: +${percent(rank, 4)}%`,\n },\n \"Illuminated Fist\": {\n ranks: 1,\n text: \"Amara gains increased Melee Damage and her Melee Damage is converted to Action Skill Element.\",\n effect: (rank, level) => `Melee Damage: +75%`,\n },\n \"Wildfire\": {\n ranks: 5,\n text: \"Whenever Amara applies a Status Effect to an enemy, it has a chance to spread to a nearby enemy.\",\n effect: (rank, level) => `Spread Chance: +${percent(rank, 8)}%`,\n },\n \"Soulfire\": {\n ranks: 0,\n text: \"Converts Amara's Action Skill to Incendiary Damage.\",\n effect: (rank, level) => `Action Skill Element: Incendiary.`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"The Eternal Fist\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Whenever the Grasped enemy is killed, a new fist seeks out and Grasps a new target. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Bonus Targets: Up to +4\\nnCooldown: 20 seconds\\nGrasp Immune Damage: ${flat(rank, level, 28)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Dread\": {\n ranks: 1,\n text: \"Amara's Gun Damage is increased for a few seconds after an enemy is Grasped. Whenever any player kills a Grasped enemy, their current weapon is instantly reloaded.\",\n effect: (rank, level) => `Gun Damage: +15%\\nDuration: 8 seconds`,\n },\n \"Allure\": {\n ranks: 0,\n text: \"Amara's Action Skill creates a singularity that pulls in enemies.\",\n effect: (rank, level) => `Duration: 2.5 seconds\\nAction Skill Damage: -20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Indiscriminate\": {\n ranks: 3,\n text: \"Amara's bullets that damage enemies have a chance to ricochet and deal decreased damage to other nearby enemies. Ricochet Chance and Damage are increased if target is affected by Phasegrasp or Stillness of Mind.\",\n effect: (rank, level) => `Ricochet Chance: +${percent(rank, 10)}%\\nRicochet Damage: -50%\\nAction Skill Ricochet Chance: +${percent(rank, 20)}%\\nAction Skill Ricochet Damage: -25%`,\n },\n \"Deep Well\": {\n ranks: 1,\n text: \"Amara gains increased Magazine Size with elemental weapons.\",\n effect: (rank, level) => `Magazine Size: +20%`,\n },\n \"Catharsis\": {\n ranks: 3,\n text: \"Whenever Amara triggers an elemental effect on an enemy, when that enemy dies that enemy explodes, dealing her attuned element damage along with any other element that is currently inflicted upon that enemy. This skill has a short cooldown.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 4)} (increases with character level)\\nCooldown: 8 seconds`,\n },\n \"Ties That Bind\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Enemies near the Grasped target are linked, and any damage dealt to a linked target is shared between all other linked targets. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Linked Damage: 35% of damage dealt\\nDuration: 7 seconds\\nCooldown: 18 seconds\\nGrasp Immune Damage: ${flat(rank, level, 34)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n },\n \"5\": {\n \"Fist Over Matter\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. After Grasping the targeted enemy, large fists appear and constantly smash the area, dealing damage to nearby enemies. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 35)} (increases with character level)\\nDuration: 7 seconds\\nCooldown: 28 seconds\\nGrasp Immune Damage: ${flat(rank, level, 39)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Sustainment\": {\n ranks: 5,\n text: \"Amara gains Life Steal whenever she deals Elemental Damage with her weapon.\",\n effect: (rank, level) => `Elemental Weapon Life Steal: +${percent(rank, 4)}% of damage dealt`,\n },\n \"Conflux\": {\n ranks: 5,\n text: \"Whenever Amara applies a Status Effect to an enemy, she gains a chance to randomly Electrocute, Ignite, or Melt that enemy.\",\n effect: (rank, level) => `Extra Status Effect Chance: +${percent(rank, 7)}%`,\n },\n },\n \"6\": {\n \"Forceful Expression\": {\n ranks: 1,\n text: \"Amara's guns deal Bonus Elemental Damage based on her Action Skill Element.\",\n effect: (rank, level) => `Bonus Elemental Damage: +18% of damage dealt`,\n },\n },\n },\n \"Enlightened Force\": {\n \"0\": {\n \"Phaseflare\": {\n text: \"Amara summons an Orb of Elemental Energy that deals constant elemental damage to nearby enemies.\\n\\nPressing [Melee key] near the Orb causes it to fly towards toward an enemy and damage them. Addiontally, every time Amara uses a melee attack on the Orb, it gains Increased Damage based on the damage she dealt to it.\\n\\nPressing [Action Skill key] causes the Orb to return to Amara.\",\n effect: (rank, level) => `Impact Damage: ${flat(rank, level, 27)} (increases with character level)\\nArea Damage: ${flat(rank, level, 5)} per second (increases with character level)\\nDuration: 30 seconds\\nCooldown:48seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0\n }\n },\n \"1\": {\n \"Trust In Yourself\": {\n ranks: 5,\n text: \"Whenever an enemy breaks Amara's shield, she gains increased Reload Speed, Charge Speed, and Weapon Swap Speed for a short time. This effect is doubled if Amara's shield is broken by a melee attack.\",\n effect: (rank, level) => `Reload Speed: ${percent(rank, 4)}%\\nCharge Speed: +${percent(rank, 8)}%\\nWeapon Swap Speed: +${percent(rank, 16)}\\nDuration: 24 seconds`,\n },\n \"No Mistakes In Nature\": {\n ranks: 5,\n text: \"Whenever Amara inflicts a Status Effect on an enemy, she gains increased Melee Damage for a short time.\",\n effect: (rank, level) => `Melee Damage: +${percent(rank, 13)}%\\nDuration: 12 seconds`\n },\n \"Heavy Rain\": {\n ranks: 5,\n text: \"Amara's weapons gain increased Projectile Speed and Splash Damage.\",\n effect: (rank, level) => `Projectile Speed: +${percent(rank, 14)}%\\nSplash Damage: +${percent(rank, 7)}%`\n }\n },\n \"2\": {\n \"Glow Up\": {\n ranks: 0,\n text: \"Instead of dealing Splash Damage to enemies, Amara's Orb grants nearby allies Health Regeneration. Amara my also press [Melee key] while near the orb to send it to a downed ally, granting them a Second Wind.\",\n effect: (rank, level) => `Impact Damage: ${flat(rank, level, 29)}\\nHealing: ${flat(rank, level, 6)} health per second\\nDuration: 34 seconds\\n Cooldown: 28 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Go With The Flow\": {\n ranks: 3,\n text: \"Whenever Amara Freezes an enemy, she gains increased Movement Speed and Weapon Damage for a short time.\",\n effect: (rank, level) => `Gun Damage: +${percent(rank, 7)}%\\nMovement Speed: +${percent(rank, 3)}%\\nDuration: 16 seconds`\n },\n \"Unweave The Rainbow\": {\n ranks: 3,\n text: \"Amara deals Bonus Damage of her attuned element whenever she deals Melee Damage or Splash Damage to frozen enemies.\",\n effect: (rank, level) => `Bonus Damage: ${percent(rank, 11)}% of damage dealt`\n },\n \"Ebb And Flow\": {\n ranks: 3,\n text: \"Whenever Amara kills an enemy with a melee attack, she gains a portion of the damage dealt back as health.\",\n effect: (rank, level) => `Life Steal: ${percent(rank, 21)}% of damage dealt`\n },\n \"Cold Hearted\": {\n ranks: 0,\n text: \"Converts Amara's Action Skill to Cryo Damage.\",\n effect: (rank, level) => `Action Skill Element: Cryo.`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"Shooting Star\": {\n ranks: 0,\n text: \"Amara summons an Orb of Elemental Energy that deals constant elemental damage to nearby enemies. Pressing [Melee key] near the Orb causes it to fly forwards toward an enemy and damage them which also increases the amount of Overal Damage the Orb deals to enemies. Additionally, the Elemental Orb continually fires Elemental Projectiles at the last enemy Amara damaged. Pressing [Action Skill key] causes the ORb to return to Amara. \",\n effect: (rank, level) => `Impact Damage: ${flat(rank, level, 21)}\\nArea Damage: ${flat(rank, level, 4)} per second\\nDuration: 26 seconds\\nCooldown: 44 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Combo Breaker\": {\n ranks: 1,\n text: \"Killing an enemy with Melee Damage has a chance to reset Amara's Action Skill Cooldown.\",\n effect: (rank, level) => `Reset Chance: ${percent(rank, 20)}%`\n },\n \"Expedite\": {\n ranks: 0,\n text: \"Whenever Amara kills an enemy with her Action Skill, she gains increased Action Skill Cooldown Rate until she activates her Action Skill again.\",\n effect: (rank, level) => `Cooldown Rate: +30% per enemy killed`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Joyful Freedom\": {\n ranks: 5,\n text: \"After activating her Action Skill, Amara gains increased Melee Damage for a short time.\",\n effect: (rank, level) => `Melee Damage: ${percent(rank, 14)}%\\nDuration: 12 seconds`\n },\n \"Burn Both Ends\": {\n ranks: 5,\n text: \"After activating her Action Skill, Amara gains Increased Threat for a short time, drawing the attention of all enemies in a huge radius.\\n\\nWhenever Amara is dealt damage by an enemy, she gains Increased Damage for a short time. This effect stacks.\",\n effect: (rank, level) => `Damage: +${percent(rank, 1)}%\\nMax Stacks: 15\\nDuration: 8 seconds`\n },\n },\n \"5\": {\n \"Light Fantastic\": {\n ranks: 0,\n text: \"Amara summons an Orb of Elemental Energy that deals constant elemental damage to nearby enemies. Whenever Amara damages an enemy, the Elemental Orb automatically travels to that enemy, the Elemental Orb gains Increased Damage. Pressing [Action Skill key] causes the Orb to return to Amara.\",\n effect: (rank, level) => `Impact Damage: ${flat(rank, level, 18)}\\nArea Damage: ${flat(rank, level, 4)} per second\\nDuration: 24 seconds\\nCooldown: 44 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Body And Mind\": {\n ranks: 3,\n text: \"Kill Skill. Amara's melee attacks deal Bonus Splash Damage for a short time.\",\n effect: (rank, level) => `Splash Damage: ${flat(rank, level, 4)}\\nDuration: 12 seconds`\n },\n \"Free The Soul\": {\n ranks: 1,\n text: \"Kill Skill. Whenever Amara kills a frozen enemy, splinters fly out from that enemy and home to nearby enemies, dealing Cryo Damage. This skill has a short cooldown.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 35)}\\nCooldown: 3 seconds`\n },\n \"Atman\": {\n ranks: 3,\n text: \"Amara gains increased Skill Damage.\",\n effect: (rank, level) => `Skill Damage: +${percent(rank, 9)}%`\n },\n },\n \"6\": {\n \"Clear The Mind\": {\n ranks: 1,\n text: \"Kill Skill. After killing an enemy, Amara ignores enemie's Elemental Damage Resistance for a short time. This does not affect Elemental Immunity.\",\n effect: (rank, level) => `Duration: 8 seconds`\n },\n }\n }\n};\n\nexport default skills;\n","import style from './index.css';\n\nexport default function () {\n return (\n \n );\n}\n","import { Router } from 'preact-router';\n\nimport Home from '@pages/Home';\nimport Operative from '@pages/Operative';\nimport Siren from '@pages/Siren';\nimport Beastmaster from '@pages/Beastmaster';\nimport Gunner from '@pages/Gunner';\n\nconst App = () =>\n (\n \n \n \n \n \n );\n\nexport default App;\n","// import { useReducer } from 'preact/hooks'; // Downgraded from Preact 10 for compat with @pwa/cli\nimport { Component } from 'preact';\nimport Skill from '@components/Skill';\nimport Nav from '@components/Nav';\nimport Footer from '@components/Footer';\nimport { getHash, setHash } from './hashHandler';\nimport reducer from './reducer';\nimport { getLevel } from './selectors';\nimport style from './index.css';\n\nfunction contextKiller (event) {\n event.preventDefault();\n return false;\n}\n\nexport default class VaultHunter extends Component {\n constructor (props) {\n super(props);\n this.state = {\n invested: [0, 0, 0, 0],\n skills: props.skills || {},\n };\n }\n\n componentDidMount () {\n this.setState(reducer(this.state, {\n type: 'loadSkills',\n skills: getHash(this.state.skills),\n }));\n }\n\n render ({\n name = 'Unnamed',\n discipline = 'Classless',\n path,\n skills: initialSkills,\n }) {\n const skillChangeListenerFactory = (skillName, treeIndex, treeName, tierIndex) => {\n return (oldValue, newValue) => {\n this.setState(reducer(this.state, {\n type: 'skillChange',\n skillName,\n treeIndex,\n treeName,\n tierIndex,\n newValue,\n oldValue,\n }));\n };\n };\n\n const resetSkills = () => {\n setHash(initialSkills);\n this.setState({\n invested: [0, 0, 0, 0],\n skills: initialSkills || {},\n });\n };\n\n const trees =\n Object.keys(this.state.skills).map((treeName, treeIndex) => {\n return (\n
\n \n

{ treeName }

\n
\n { Object.keys(this.state.skills[treeName]).map((tier, tierIndex) =>\n
\n { Object.keys(this.state.skills[treeName][tier]).map((skillName, skillIndex) =>\n = 5 * tierIndex - 5}\n level={getLevel(this.state)}\n image={`../../assets/hunters/${discipline}/${treeIndex}${tierIndex}${skillIndex}.png`}\n onChange={skillChangeListenerFactory(skillName, treeIndex, treeName, tierIndex)}\n />\n ) }\n
\n ) }\n
\n
\n );\n });\n\n const level = getLevel(this.state);\n\n return (\n
\n
\n

{ name }\n
the { discipline }
\n

\n
\n
Level { level }
\n \n
\n
\n
\n
\n
\n { trees }\n
\n
\n
\n
\n
\n );\n }\n}\n","export default {\n ACTION_SKILL: 1,\n AUGMENT_CHEVRON: 2,\n AUGMENT_DIAMOND: 3,\n AUGMENT_ACTION_SKILL: 4,\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VaultHunter\":\"_2zgqJ\",\"header\":\"_1Jomm\",\"title\":\"_17kLY\",\"subtitle\":\"_3J3hw\",\"sidepanel\":\"_2UO55\",\"level\":\"xH9ts\",\"reset\":\"K9CBr\",\"trees\":\"_3ek45\",\"tier\":\"_3Ch4X\",\"treeName\":\"_1WAM2\",\"tree\":\"gRWZY\",\"skills\":\"_2Su0b\",\"green\":\"-Pl7G\",\"blue\":\"_1nm1I\",\"red\":\"_3T1pZ\",\"purple\":\"Fmsm1\"};","import { Link } from 'preact-router';\nimport Footer from '@components/Footer';\nimport style from './index.css';\n\nexport default function () {\n const pages = [\n { name: 'Zane', job: 'the Operative', path: '/operative' },\n { name: 'Amara', job: 'the Siren', path: '/siren' },\n { name: 'FL4K', job: 'the Beastmaster', path: '/beastmaster' },\n { name: 'Moze', job: 'the Gunner', path: '/gunner' },\n ];\n return (\n
\n
\n
\n

(Unofficial)
Borderlands 3 skill calculator

\n { pages.map(page => {\n return (\n \n
\n {page.name}\n
\n {page.job}\n
\n
\n \n );\n }) }\n
\n
\n
\n
\n );\n}\n","import { h, render } from 'preact';\nimport App from '@components/App';\nimport './index.css';\n\nlet elem = document.querySelector('#app');\nlet root = render(, elem, elem.firstElementChild);\n\nif (process.env.NODE_ENV === 'development' && module.hot) {\n // enable preact devtools\n require('preact/debug');\n // respond to HMR updates\n module.hot.accept('@components/App', New => {\n New = require('@components/App').default;\n root = render(, elem, root);\n });\n} else if (process.env.NODE_ENV === 'production') {\n // Service Worker registration\n require('offline-plugin/runtime').install();\n}\n","import { Component, cloneElement, h } from 'preact';\n\nvar EMPTY$1 = {};\n\nfunction assign(obj, props) {\n\t// eslint-disable-next-line guard-for-in\n\tfor (var i in props) {\n\t\tobj[i] = props[i];\n\t}\n\treturn obj;\n}\n\nfunction exec(url, route, opts) {\n\tvar reg = /(?:\\?([^#]*))?(#.*)?$/,\n\t\tc = url.match(reg),\n\t\tmatches = {},\n\t\tret;\n\tif (c && c[1]) {\n\t\tvar p = c[1].split('&');\n\t\tfor (var i=0; i b.rank) ? -1 :\n\t\t(a.index - b.index)\n\t);\n}\n\n// filter out VNodes without attributes (which are unrankeable), and add `index`/`rank` properties to be used in sorting.\nfunction prepareVNodeForRanking(vnode, index) {\n\tvnode.index = index;\n\tvnode.rank = rankChild(vnode);\n\treturn vnode.attributes;\n}\n\nfunction segmentize(url) {\n\treturn url.replace(/(^\\/+|\\/+$)/g, '').split('/');\n}\n\nfunction rankSegment(segment) {\n\treturn segment.charAt(0)==':' ? (1 + '*+?'.indexOf(segment.charAt(segment.length-1))) || 4 : 5;\n}\n\nfunction rank(path) {\n\treturn segmentize(path).map(rankSegment).join('');\n}\n\nfunction rankChild(vnode) {\n\treturn vnode.attributes.default ? 0 : rank(vnode.attributes.path);\n}\n\nvar customHistory = null;\n\nvar ROUTERS = [];\n\nvar subscribers = [];\n\nvar EMPTY = {};\n\nfunction isPreactElement(node) {\n\treturn node.__preactattr_!=null || typeof Symbol!=='undefined' && node[Symbol.for('preactattr')]!=null;\n}\n\nfunction setUrl(url, type) {\n\tif ( type === void 0 ) type='push';\n\n\tif (customHistory && customHistory[type]) {\n\t\tcustomHistory[type](url);\n\t}\n\telse if (typeof history!=='undefined' && history[type+'State']) {\n\t\thistory[type+'State'](null, null, url);\n\t}\n}\n\n\nfunction getCurrentUrl() {\n\tvar url;\n\tif (customHistory && customHistory.location) {\n\t\turl = customHistory.location;\n\t}\n\telse if (customHistory && customHistory.getCurrentLocation) {\n\t\turl = customHistory.getCurrentLocation();\n\t}\n\telse {\n\t\turl = typeof location!=='undefined' ? location : EMPTY;\n\t}\n\treturn (\"\" + (url.pathname || '') + (url.search || ''));\n}\n\n\n\nfunction route(url, replace) {\n\tif ( replace === void 0 ) replace=false;\n\n\tif (typeof url!=='string' && url.url) {\n\t\treplace = url.replace;\n\t\turl = url.url;\n\t}\n\n\t// only push URL into history if we can handle it\n\tif (canRoute(url)) {\n\t\tsetUrl(url, replace ? 'replace' : 'push');\n\t}\n\n\treturn routeTo(url);\n}\n\n\n/** Check if the given URL can be handled by any router instances. */\nfunction canRoute(url) {\n\tfor (var i=ROUTERS.length; i--; ) {\n\t\tif (ROUTERS[i].canRoute(url)) { return true; }\n\t}\n\treturn false;\n}\n\n\n/** Tell all router instances to handle the given URL. */\nfunction routeTo(url) {\n\tvar didRoute = false;\n\tfor (var i=0; i 0;\n\t};\n\n\t/** Re-render children with a new URL to match against. */\n\tRouter.prototype.routeTo = function routeTo (url) {\n\t\tthis._didRoute = false;\n\t\tthis.setState({ url: url });\n\n\t\t// if we're in the middle of an update, don't synchronously re-route.\n\t\tif (this.updating) { return this.canRoute(url); }\n\n\t\tthis.forceUpdate();\n\t\treturn this._didRoute;\n\t};\n\n\tRouter.prototype.componentWillMount = function componentWillMount () {\n\t\tROUTERS.push(this);\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidMount = function componentDidMount () {\n\t\tvar this$1 = this;\n\n\t\tif (customHistory) {\n\t\t\tthis.unlisten = customHistory.listen(function (location) {\n\t\t\t\tthis$1.routeTo((\"\" + (location.pathname || '') + (location.search || '')));\n\t\t\t});\n\t\t}\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.componentWillUnmount = function componentWillUnmount () {\n\t\tif (typeof this.unlisten==='function') { this.unlisten(); }\n\t\tROUTERS.splice(ROUTERS.indexOf(this), 1);\n\t};\n\n\tRouter.prototype.componentWillUpdate = function componentWillUpdate () {\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidUpdate = function componentDidUpdate () {\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.getMatchingChildren = function getMatchingChildren (children, url, invoke) {\n\t\treturn children\n\t\t\t.filter(prepareVNodeForRanking)\n\t\t\t.sort(pathRankSort)\n\t\t\t.map( function (vnode) {\n\t\t\t\tvar matches = exec(url, vnode.attributes.path, vnode.attributes);\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (invoke !== false) {\n\t\t\t\t\t\tvar newProps = { url: url, matches: matches };\n\t\t\t\t\t\tassign(newProps, matches);\n\t\t\t\t\t\tdelete newProps.ref;\n\t\t\t\t\t\tdelete newProps.key;\n\t\t\t\t\t\treturn cloneElement(vnode, newProps);\n\t\t\t\t\t}\n\t\t\t\t\treturn vnode;\n\t\t\t\t}\n\t\t\t}).filter(Boolean);\n\t};\n\n\tRouter.prototype.render = function render (ref, ref$1) {\n\t\tvar children = ref.children;\n\t\tvar onChange = ref.onChange;\n\t\tvar url = ref$1.url;\n\n\t\tvar active = this.getMatchingChildren(children, url, true);\n\n\t\tvar current = active[0] || null;\n\t\tthis._didRoute = !!current;\n\n\t\tvar previous = this.previousUrl;\n\t\tif (url!==previous) {\n\t\t\tthis.previousUrl = url;\n\t\t\tif (typeof onChange==='function') {\n\t\t\t\tonChange({\n\t\t\t\t\trouter: this,\n\t\t\t\t\turl: url,\n\t\t\t\t\tprevious: previous,\n\t\t\t\t\tactive: active,\n\t\t\t\t\tcurrent: current\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current;\n\t};\n\n\treturn Router;\n}(Component));\n\nvar Link = function (props) { return (\n\th('a', assign({ onClick: handleLinkClick }, props))\n); };\n\nvar Route = function (props) { return h(props.component, props); };\n\nRouter.subscribers = subscribers;\nRouter.getCurrentUrl = getCurrentUrl;\nRouter.route = route;\nRouter.Router = Router;\nRouter.Route = Route;\nRouter.Link = Link;\n\nexport { subscribers, getCurrentUrl, route, Router, Route, Link };export default Router;\n//# sourceMappingURL=preact-router.es.js.map\n","/* eslint-disable space-before-function-paren */\nimport SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\n\n/* These three skills dont follow a linear patch for some increases. Data came from official builder.\nhttps://borderlands.com/en-US/characters/fl4k/#-\nMight be different in game but I haven't played FL4K yet!\nThere are probably diminishing return algorithms for these but this was quicker than figuring that out. */\n\n// Hunter's Eye Damage Resistance\nfunction getHuntersEyeDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 5.3;\n case 2:\n return 10.1;\n case 3:\n return 14.4;\n case 4:\n return 18.3;\n case 5:\n return 21.9;\n default:\n return 0;\n }\n}\n\n// Ambush Predator Handling\nfunction getAmbushPredatorHandling(rank) {\n switch (rank) {\n case 1:\n return 17;\n case 2:\n return 29;\n case 3:\n return 38;\n case 4:\n return 44;\n case 5:\n return 50;\n default:\n return 0;\n }\n}\n\n// The Most Dangerous Game Handling\nfunction getMostDangerousGameHandling(rank) {\n switch (rank) {\n case 1:\n return 14.3;\n case 2:\n return 25.0;\n case 3:\n return 33.3;\n default:\n return 0;\n }\n}\n\n// Furious Attack Handling\nfunction getFuriousAttackHandling(rank) {\n switch (rank) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 3:\n return 2.9;\n case 4:\n return 3.8;\n case 5:\n return 4.8;\n default:\n return 0;\n }\n}\n\n// Turn Tail And Run Damage Resistance\nfunction getTurnTailAndRunDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 6.5;\n case 2:\n return 12.3;\n case 3:\n return 17.4;\n default:\n return 0;\n }\n}\n\n// Interplanetary Stalker Beast Movement Speed\nfunction getInterplanetaryStalkerBeastMovementSpeed(rank) {\n switch (rank) {\n case 1:\n return 2;\n case 2:\n return 3;\n case 3:\n return 5;\n case 4:\n return 6;\n case 5:\n return 7;\n default:\n return 0;\n }\n}\n\n// Second Intention Critical Kill Reload Speed\nfunction getSecondIntentionCriticalKillReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 6;\n case 2:\n return 11;\n case 3:\n return 15;\n case 4:\n return 19;\n case 5:\n return 23;\n default:\n return 0;\n }\n}\n\n// Success Imminent Damage\nfunction getSuccessImminetDamage(rank) {\n switch (rank) {\n case 1:\n return 6;\n case 2:\n return 11;\n case 3:\n return 17;\n case 4:\n return 22;\n case 5:\n return 28;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Stalker\": {\n \"0\": {\n \"Jabber Sidekick\": {\n text: \"FL4K is joined by a loyal Jabber companion, armed with a Pistol. While accompanied by the Jabber, FL4K's Movement Speed is increased.\\n\\nHold [Pet Skill key] to issue an Attack Command, which will cause the Jabber to throw a Radiation Barrel at enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5.0%`,\n },\n \"Fade Away\": {\n text: \"FL4K cloaks, turning invisible. FL4K can fire 3 shots while cloaked, and each shot is automatically a Critical Hit. While cloaked, FL4K has increased Movement Speed and Health Regeneration.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Fade Away Bonus Damage: 200% of damage dealt\\nCloaked Movement Speed: +25%\\nHealth Regeneration: +3% of Max Health per second\\nCooldown: 45 seconds\\nDuration: 15 seconds`,\n },\n },\n \"1\": {\n \"Self-Repairing System\": {\n text: \"FL4K's Maximum Health is increased, and they constantly regenerate health.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: ${percent(rank, 0.3)}% of Max Health/sec\\nMaximum Health: +${percent(rank, 6)}%`,\n },\n \"Sic'Em\": {\n text: \"Attack Command has lowered Cooldown and increased Damage.\",\n ranks: 3,\n effect: (rank, level) => `Attack Command Damage: +${percent(rank, 10)}%\\nAttack Command Cooldown: -${percent(rank, 10)}%`,\n },\n \"Furious Attack\": {\n text: \"Hunter Skill. After shooting an enemy, FL4K gains a stack of Furious Attack.\\n\\nFor each stack of Furious Attack, FL4K's Handling and Gun Damage are increased, and their pet gains increased Damage per stack. Stacks decay after a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 0.4)}% per stack\\nHandling: +${getFuriousAttackHandling(rank)}% per stack\\nPet Damage: +${percent(rank, 0.6)}% per stack\\nMaximum Stacks: 10\\nDuration: 4 seconds`,\n },\n },\n \"2\": {\n \"Guerrillas In The Mist\": {\n text: \"Fade Away no longer ends after FL4K attacks, at the cost of Critical Hit Damage and Fade Away duration being reduced.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Critical Hit Damage: 25% of damage dealt\\nFade Away Duration: 5 seconds`,\n },\n \"Eager To Impress\": {\n text: \"Kill Skill. Whenever FL4K kills an enemy, Action Skill Cooldown Time is reduced.\\n\\nWhenever FL4K's pet kills an enemy, Action Skill Cooldown Time is reduced even more and Attack Command's duration is refreshed.\",\n ranks: 5,\n effect: (rank, level) => `FL4K Kill Action Skill Cooldown: -${percent(rank, 0.25)} seconds\\nPet Kill Action Skill Cooldown: -${percent(rank, 0.5)} seconds`,\n },\n \"All My BFF's\": {\n text: \"Allies share a portion of FL4K's total Health Regeneration. FL4K's pet shares twice the amount of Health Regeneration.\",\n ranks: 3,\n effect: (rank, level) => `Allies' Health Regen: +${Math.round(percent(rank, 16.666))}% of FL4K's Health Regen\\nPet Health Regen: +${Math.round(percent(rank, 33.333))}% of FL4K's Health Regen`,\n },\n \"Overclocked\": {\n text: \"FL4K gains increased Fire Rate. FL4K gains even more Fire Rate after reloading.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate after Reloading: +${percent(rank, 2)}%\\nFire Rate : +${percent(rank, 2)}%\\nDuration: 4 seconds`,\n },\n },\n \"3\": {\n \"Not My Circus\": {\n text: \"After Fade Away ends, FL4K's pet will Taunt, drawing the attention of all enemies in a huge radius.\\nFor a few seconds after Taunting, the pet gains powerful Damage Resistance.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Pet Damage Resistance: +80%\\nPet Taunt Duration: 6 seconds`,\n },\n \"Lick The Wounds\": {\n text: \"When FL4K is in Fight For Your Life, their pet will attempt to revive them. If it does, it gains increased Damage for a short time.\",\n ranks: 1,\n effect: (rank, level) => `Pet Damage: +30%\\nDuration: 60 seconds`,\n },\n \"Turn Tail And Run\": {\n text: \"While moving, FL4K constantly regenerates health and gains Damage Resistance.\\n\\nWhile still, FL4K gains Gun Damage and Fire Rate.\",\n ranks: 3,\n effect: (rank, level) => `Health Regen While Moving: +${percent(rank, 0.3)}% Max Health/sec\\nDamage Resistance: +${getTurnTailAndRunDamageResistance(rank)}% while moving\\nGun Damage While Still: +${percent(rank, 8.333)}%\\nFire Rate While Still: +${percent(rank, 4)}%`,\n },\n \"Beefcake Jabber\": {\n text: \"FL4K's Jabber evolves into a Beefcake, discarding its pistol and equipping a Shotgun. While accompanied by the Beefcake, FL4K gains increased Movement Speed and Maximum Health. When FL4K issues an Attack Command, the Beefcake will summon a melee weapon to deliver a powerful attack that knocks enemies back.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5%\\nMaximum Health: +10%`,\n },\n },\n \"4\": {\n \"Until You Are Dead\": {\n text: \"The Health Regeneration and Movement Speed of Fade Away persists for a short time after the skill has ended.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Post Cloak Duration: 10 seconds`,\n },\n \"The Fast And The Furryous\": {\n text: \"While above half health, FL4K's Gun Damage and Movement Speed are increased, and their pet gains increased Damage.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${Math.round(percent(rank, 8.333))}%\\nPet Damage: +${percent(rank, 10)}%\\nMovement Speed: +${percent(rank, 3.333)}%e`,\n },\n \"Hidden Machine\": {\n text: \"When an enemy has no target or is attacking a different target, FL4K deals increased damage against them.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 6)}%`,\n },\n \"Gunslinger Jabber\": {\n text: \"FL4K's Jabber upgrades his gear and equips an SMG. While accompanied by the Gunslinger, FL4K gains increased Movement Speed and Critical Hit Damage. When FL4K issues an Attack Command, the Gunslinger equips a Rocket Launcher to attack the target.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5%\\nCritical Hit Damage: +5%`,\n },\n },\n \"5\": {\n \"Unblinking Eye\": {\n text: \"During Fade Away, successive hits on the same target increase FL4K's Critical Damage per hit. Unblinking Eye resets every 3 hits.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Additional Fade Away Bonus Damage: +75% of damage dealt per hit`,\n },\n \"Rage And Recover\": {\n text: \"Kill Skill. After killing an enemy, FL4K and FL4K's pet regenerate health for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: +${percent(rank, 1.6)}% of Missing Health/sec\\nDuration: 3 seconds`,\n },\n },\n \"6\": {\n \"The Power Inside\": {\n text: \"FL4K and FL4K's pet gain increased Damage when FL4K activates an Action Skill. If FL4K is at full health, the increased Damage is doubled.\",\n ranks: 1,\n effect: (rank, level) => `Damage: +25%\\nDuration: 15 seconds`,\n },\n },\n },\n \"Master\": {\n \"0\": {\n \"Guard Skag\": {\n text: \"FL4K is joined by a loyal Skag companion, which will increase FL4K's Damage. Hold [Pet Skill key] to issue an Attack Command, which will cause the Skag to vomit acid onto enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%`,\n },\n \"Gamma Burst\": {\n text: \"FL4K creates a Rift at a target location, teleporting their pet through the Rift and dealing Radiation Damage to nearby enemies. Additionally, FL4K's pet becomes irradiated, growing in size and dealing bonus Radiation Damage when it attacks. Using Gamma Burst while FL4K's pet is downed or dead will revive the pet at the targeted location with 30% of its health, but will double Action Skill Cooldown Time.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Damage 56: (increases with character level)\\nDuration: 20 seconds\\nCooldown: 30 seconds`,\n },\n },\n \"1\": {\n \"Ferocity\": {\n text: \"FL4K's Pet deals increased damage.\",\n ranks: 5,\n effect: (rank, level) => `Pet Damage: +${percent(rank, 10)}%`,\n },\n \"Persistence Hunter\": {\n text: \"Increases FL4K's Gun Damage and Action Skill Duration.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}%\\nAction Skill Duration: +${percent(rank, 15)}%`,\n },\n \"Go For The Eyes!\": {\n text: \"When FL4K's pet attacks an enemy, the first melee attack is an automatic Critical Hit that deals increased damage.\",\n ranks: 5,\n effect: (rank, level) => `Pet Critical Hit Damage: ${percent(rank, 15)}%`,\n },\n },\n \"2\": {\n \"Atomic Aroma\": {\n text: \"While Gamma Burst is active, FL4K's pet is surrounded by a Radiation Aura, constantly damaging all nearby enemies.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Radiation Damage: 4 per second (increases with character level)`,\n },\n \"Who Rescued Who?\": {\n text: \"Whenever FL4K's Pet deals damage, FL4K regenerates health for a few seconds. Whenever FL4K deals damage to an enemy, their Pet's health is restored for a portion of the damage dealt.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: +${percent(rank, 0.4)}% of Max Health/sec\\nPet Health Restored: +${percent(rank, 1)}% of damage dealt`,\n },\n \"He Bites!\": {\n text: \"When FL4K's pet takes damage, the pet returns some of that damage to the attacker.\",\n ranks: 3,\n effect: (rank, level) => `Damage Returned: ${percent(rank, 5)}% of damage received`,\n },\n \"Frenzy\": {\n text: \"Hunter Skill. When FL4K's pet deals damage, FL4K and their pet gain a stack of Frenzy. Each stack of Frenzy increases Damage. The stacks decay after a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 0.8)}% per stack\\nMaximum Stacks: 10`,\n },\n },\n \"3\": {\n \"Empathic Rage\": {\n text: \"For the duration of Gamma Burst, Damage dealt by FL4K is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Damage: +20%`,\n },\n \"Psycho Head On A Stick\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, their pet gains increased Movement Speed and Damage for a few seconds.\",\n ranks: 1,\n effect: (rank, level) => `Pet Damage: +20%\\nPet Movement Speed: +12%\\nDuration: 8 seconds`,\n },\n \"Hive Mind\": {\n text: \"When FL4K takes damage, a portion of all damage they take is inflicted on their pet instead and their pet deals Bonus Damage for a short time.\",\n ranks: 3,\n effect: (rank, level) => `Damage Shared: ${percent(rank, 5)}%\\nPet Bonus Damage: +${percent(rank, 7.5)}%`,\n },\n \"Great Horned Skag\": {\n text: \"FL4K's Skag evolves into a larger Great Horned Skag, which will increase FL4K's Damage and Gun Damage.\\n\\nWhen FL4K issues an Attack Command, the Great Horned Skag will charge at enemies and knock them into the air.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%\\nGun Damage: +10%`,\n },\n },\n \"4\": {\n \"Endurance\": {\n text: \"When FL4K or FL4K's pet kills an enemy while Gamma Burst is active, the duration of Gamma Burst is extended and pet damage is increased. These effects can stack up to 5 times.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Gamma Burst Duration: +3 seconds per kill\\nPet Damage: +10% per kill`,\n },\n \"Barbaric Yawp\": {\n text: \"Increases the power of Pet Bonuses granted to FL4K.\",\n ranks: 5,\n effect: (rank, level) => `Pet Bonuses: +${percent(rank, 40)}%`,\n },\n \"Mutated Defenses\": {\n text: \"When FL4K's pet is at low health, it gains Damage Reduction and regenerates health. This skill has a long cooldown.\",\n ranks: 1,\n effect: (rank, level) => `Health Regeneration: +40% of Max Health Pet Health over 6 seconds\\nPet Damage Resistance: +30% for 6s\\nCooldown: 15 seconds`,\n },\n \"Eridian Skag\": {\n text: \"FL4K's Skag evolves into an Eridian Skag, which will increase FL4K's Damage and Fire Rate.\\n\\nWhen FL4K issues an Attack Command, their Eridian Skag pulls nearby enemies in by generating a Singularity.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%\\nFire Rate: +5%`,\n },\n },\n \"5\": {\n \"Burst Aid\": {\n text: \"After using Gamma Burst, the Rift remains for the duration of the skill. While standing near the Rift, FL4K and their allies rapidly Regenerate Health.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: +20% of Max Health/sec`,\n },\n \"Pack Tactics\": {\n text: \"All damage dealt by FL4K and their pet is increased.\\n\\nAdditionally, the Maximum Health of both FL4K and their pet is increased.\",\n ranks: 3,\n effect: (rank, level) => `Pet and FL4K Damage: +${percent(rank, 7)}%\\nPet and FL4K Maximum Health: +${percent(rank, 5)}%`,\n },\n \"Shared Spirit\": {\n text: \"While FL4K is at low health, a portion of all damage they take is converted into healing for their pet instead.\",\n ranks: 1,\n effect: (rank, level) => `Damage Converted: 50%`,\n },\n },\n \"6\": {\n \"Dominance\": {\n text: \"Whenever FL4K attacks an enemy with a melee attack or scores a Critical Hit with a weapon while aiming down sights they establish Dominance over that enemy turning it into an ally for a short time. if the enemy is a Beast, the duration is doubled.\\n\\nWhile under the effect of Dominance, other enemies are more likely to attack it and it constantly loses health until it dies or the effect ends. Once Dominance ends, a Radiation Nova is created centered around that enemy. Only one enemy can be under the effect of Dominance at a time and an enemy may only be affected once.\",\n ranks: 1,\n effect: (rank, level) => `Duration: 12 seconds\\nTarget Loses 2% of Maximum Health per second\\nNova Damage: 12 (scales with level)`,\n },\n },\n },\n \"Hunter\": {\n \"0\": {\n \"Spiderant Centurion\": {\n text: \"FL4K is joined by a loyal Spiderant companion, which will cause FL4K to constant regenerate health.\\n\\nHold [Pet Skill key] to issue an Attack Command, which will cause the Spiderant to charge into enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: 1% of Max Health per second`,\n },\n \"Rakk Attack!\": {\n text: \"FL4K sends forward 2 Rakk to dive-bomb enemies. This skill has multiple charges. Element: Incendiary.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Damage: 35 (increases with character level)\\nCooldown: 18 seconds\\nSkill Charges: 2\\nDeals Incendiary Elemental Damage`,\n },\n },\n \"1\": {\n \"Interplanetary Stalker\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, they gain a stack of Interplanetary Stalker. For each stack of Interplanetary Stalker, they and their pet gain a bonus to all damage dealt\\n\\nAdditionally, they gain a unique stacking bonus depending on the type of enemy killed. Each unique bonus can stack up to 3 times. Each stack decays after a short time.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 2)}% per stack\\nPet Damage: +${percent(rank, 1)}% per stack\\nRobot Bonus: +${percent(rank, 1.5)}% Corrosive Damage per stack\\nHuman Bonus: +${percent(rank, 3)}% Action Skill Damage per stack\\nBeast Bonus: +${getInterplanetaryStalkerBeastMovementSpeed(rank)}% Movement Speed per stack\\nMaximum Stacks: 3`,\n },\n \"Leave No Trace\": {\n text: \"When FL4K scores a Critical Hit, there is a chance for 1 ammo to be added to their magazine.\",\n ranks: 3,\n effect: (rank, level) => `Ammo Chance: +${percent(rank, 12)}%\\nCooldown: 0.3 seconds`,\n },\n \"Second Intention\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, they gain increased Reload Speed. This bonus is increased if FL4K scores a Critical Kill.\",\n ranks: 5,\n effect: (rank, level) => `Reload Speed: +${Math.ceil(percent(rank, 2.6))}%\\nCritical Kill Reload Speed: +${getSecondIntentionCriticalKillReloadSpeed(rank)}%\\nDuration: 5 seconds`,\n },\n },\n \"2\": {\n \"Rakk Open A Cold One\": {\n text: \"Converts FL4K's Rakk to Cryo Damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Rakk Attack! Element: Cryo`,\n },\n \"Hunter's Eye\": {\n text: \"FL4K gains bonuses when fighting different types of enemies.\",\n ranks: 5,\n effect: (rank, level) => `Human Bonus: +${percent(rank, 2.48)}% Critical Hit Damage\\nRobot Bonus: +${percent(rank, 6)}% Armor Damage\\nBeast Bonus: +${getHuntersEyeDamageResistance(rank)}% Damage Resistance`,\n },\n \"Head Count\": {\n text: \"Whenever FL4K scores a Critical Hit, there is a chance their Action Skill Cooldown is reduced.\",\n ranks: 3,\n effect: (rank, level) => `Cooldown Reduction Chance: +${percent(rank, 10)}%\\nAction Skill Cooldown: -2 seconds`,\n },\n \"Ambush Predator\": {\n text: \"While there are no enemies nearby, FL4K's Weapon Handling and Critical Hit Damage are increased.\",\n ranks: 5,\n effect: (rank, level) => `Handling: +${getAmbushPredatorHandling(rank)}%\\nCritical Hit Damage: +${percent(rank, 4)}%`,\n },\n },\n \"3\": {\n \"Falconer's Feast\": {\n text: \"When FL4K's Rakk damage an enemy, a portion of FL4K's health is restored.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Health Restored: 7% of Maximum Health`,\n },\n \"Two F4ng\": {\n text: \"FL4K has a chance to fire an extra projectile per shot.\",\n ranks: 5,\n effect: (rank, level) => `Extra Projectile Chance: +${percent(rank, 5)}%`,\n },\n \"Spiderant Scorcher\": {\n text: \"FL4K's Spiderant evolves into a Scorcher, occasionally dealing Incendiary Damage to all enemies nearby. While accompanied by the Scorcher, FL4K constantly regenerates health and deals increased Elemental Damage.\\n\\nWhen FL4K issues an Attack Command, the Scorcher will charge enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: +1% of Max Health per second\\nElemental Damage: +10%`,\n },\n },\n \"4\": {\n \"Flock'N'Load\": {\n text: \"FL4K sends forward additional Rakk.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Additional Rakk: +2`,\n },\n \"Big Game\": {\n text: \"FL4K's Hunter Skills become much more effective and have a longer duration.\",\n ranks: 3,\n effect: (rank, level) => `Hunter Skill Duration: +${Math.round(percent(rank, 33.333))}%\\nHunter Skill Effects: +${percent(rank, 10)}%`,\n },\n \"The Most Dangerous Game\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills a Badass or stronger enemy, they gain increased Critical Hit Damage, Gun Damage, and Handling for a long time and their pet receives increased Damage for a long time.\\n\\nAdditionally, they receive a cash reward from the Intergalactic Bureau of Bounty Hunting.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 8.33)}%\\nCritical Hit Damage: +${Math.round(percent(rank, 3.333))}%\\nHandling: +${getMostDangerousGameHandling(rank)}%\\nPet Damage: +${percent(rank, 9)}%\\nDuration: 120 seconds`,\n },\n \"Spiderant Countess\": {\n text: \"FL4K's Spiderant evolves into a Countess, which will cause FL4K to constantly regenerate health and gain Damage Resistance.\\n\\nWhen FL4K issues an Attack Command, the Countess will burrow underground and then emerge dealing Corrosive Damage in an area.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: +1% of Max Health per second\\nDamage Resistance: +5%`,\n },\n },\n \"5\": {\n \"Rakkcelerate\": {\n text: \"FL4K's Rakk have increased Cooldown Rate and gain an Additional Charge.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Skill Charges: +1\\nCooldown Rate: +20%`,\n },\n \"Galactic Shadow\": {\n text: \"FL4K deals increased Critical Hit Damage, and enemies are less likely to attack them.\",\n ranks: 1,\n effect: (rank, level) => `Critical Hit Damage: +15%`,\n },\n \"Grim Harvest\": {\n text: \"FL4K gains increased Gun Damage and Action Skill Damage. FL4K's pet gains increased Damage.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3)}%\\nAction Skill Damage: +${percent(rank, 10)}%\\nPet Damage: +${percent(rank, 7)}%`,\n },\n },\n \"6\": {\n \"Megavore\": {\n text: \"FL4K gains a chance to score a Critical Hit with weapons against any part of enemies.\",\n ranks: 1,\n effect: (rank, level) => `Critical Hit Chance: +20%`,\n },\n },\n },\n \"Trapper\": {\n \"0\": {\n \"Pet Ion Loader\": {\n ranks: 0,\n text: \"FL4K is joined by a loyal Mini ION Loader Bot companion, armed with a Shock Sniper Rifle and Homing Shock Orbs that can be shot to trigger a Shock Nova. While accompanied by the ION Loader, FL4K gains increased Elemental Damage Resistance.\\nHold [Pet Skill key] to issue an Attack Command, which causes the ION Loader to fire a powerful Eye Laser at the enemy.\",\n effect: (rank, level) => `Elemental Resistance: +30%`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n \"Gravity Snare\": {\n ranks: 0,\n text: \"FL4K tosses out a Trap that Knocks Up and temporarily Stuns nearby enemies. After being deployed, the Trap periodically continues to Knock Up and Stun enemies for the duration. While standing near the Trap, pressing [Action Skill key] will pick up the Trap, ending the action skill early and refunding a portion of the remaining duration.\",\n effect: (rank, level) => `Duration: 16 seconds\\nCooldown: 36 seconds`,\n type: SKILLS.ACTION_SKILL,\n }\n },\n \"1\": {\n \"Gotta Go Fast\": {\n ranks: 5,\n text: \"FL4K's pet gains increased Movement Speed and Damage.\",\n effect: (rank, level) => `Pet Damage: +${percent(rank, 7)}%\\nPet Movement Speed: +${percent(rank, 8)}%`\n },\n \"Success Imminent\": {\n ranks: 5,\n text: \"Whenever FL4K's or their pet's shield breaks or is filled, they and their pet create a Radation Nova. This skill has a short cooldown.\",\n effect: (rank, level) => `Nova Damage: ${percent(rank, 6)} (scales with level)\\nCooldown: 3 seconds`\n },\n \"Agility Training\": {\n ranks: 5,\n text: \"FL4K and their pet gain increased Reload Speed.\",\n effect: (rank, level) => `Reload Speed: +${percent(rank, 8)}%`\n },\n },\n \"2\": {\n \"Forage\": {\n ranks: 0,\n text: \"Whenever an enemy trapped by FL4K is knocked into the air, they drop ammo, health boosters, and shield boosters.\",\n effect: (rank, level) => ``,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Better Toys\": {\n ranks: 3,\n text: \"FL4K and their pet gain increased Shield Recharge Rate and improved Shield Recharge Delay.\",\n effect: (rank, level) => `Shield Recharge Rate: +${percent(rank, 6)}%\\nShield Recharge Delay: -${percent(rank, 8)}%`\n },\n \"Combat Veterinarian\": {\n ranks: 1,\n text: \"Whenever FL4K shoots the same enemy their pet is attacking, FL4K's Pet gains a portion of the damage dealt back as health.\",\n effect: (rank, level) => `Life Steal: 30% of damage dealt`\n },\n \"Throatripper\": {\n ranks: 3,\n text: \"Hunter Skill. FL4K's pet's acttacks have a chance to score a Critical Hit, dealing increased damage.\",\n effect: (rank, level) => `Critical Chance: +${percent(rank, 5)}%`\n },\n },\n \"3\": {\n \"Wide Net\": {\n ranks: 0,\n text: \"FL4K's Trap gains increased Duration and increased Radius.\",\n effect: (rank, level) => `Trap Duration: +25%\\nTrap Radius: +100%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Lethal Force Authorized\": {\n ranks: 1,\n text: \"Whenever Fl4K's Loader Bot pet would go into Fight For Your Life, it turns into an EXP Loader instead and seeks out a nearby enemy before self-destructing, dealing damage to all nearby enemies.\\nFL4K's pet's respawn time is reduced.\",\n effect: (rank, level) => `Pet Respawn Time: -50%\\nEXP Loader Damage: 89 (scales with level)`\n },\n \"Take This!\": {\n ranks: 1,\n text: \"FL4K's pet gains a copy of FL4K's shield.\",\n effect: (rank, level) => ``\n },\n \"Bul Loader\": {\n ranks: 0,\n text: \"FL4K's ION Loader upgrades into a BUL Loader, discarding it's sniper rifle and equipping a Shotgun. FL4K's BUL Loader also gains increased Damage Resistance and a powerful Roundhouse Melee Attack. While accompanies by the BUL Loader, FL4K's Shield Capacity is increased.\\n\\nWhen FL4K issues an Attack Command, the BUL Loader Briefly turns into a BullDozer to charge at enemies and knocks them up.\",\n effect: (rank, level) => `Shield Capacity: +20.0%`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"4\": {\n \"Trap Card\": {\n ranks: 0,\n text: \"If FL4K would go into Fight For Your Life while their Trap is readied, they automatically throw a Trap at the enemy that downed them.\",\n effect: (rank, level) => `Duration: 16 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Monkey Do!\": {\n ranks: 5,\n text: \"FL4K's pet gains increased Critical Hit Damage.\\n\\nWhenever FL4K's Pet scores a Critical Hit, FL4K's next shot deals Bonus Damage based on their weapon's damage.\",\n effect: (rank, level) => `Pet Critical Hit Damage: +${percent(rank, 14)}%\\nBonus Damage: ${percent(rank, 14)}% of weapon damage`\n },\n \"Wooly Armor\": {\n ranks: 1,\n text: \"While FL4K's shields are full, their pet gains Damage Reduction.\",\n effect: (rank, level) => `Pet Damage Reduction: +75%`\n },\n \"Not Even A Challenge\": {\n ranks: 5,\n text: \"Whenever FL4K's pet kills an enemy, FL4K gains increased Action Skill Duration and Action Skill Cooldown Rate for a short time. This effect stacks.\",\n effect: (rank, level) => `Cooldown Rate: +${percent(rank, 7)}%\\nAction Skill Duration: +${percent(rank, 7)}%\\nDuration: 12 seconds\\nMax Stacks: 10`\n },\n \"War Loader\": {\n ranks: 0,\n text: \"FL4K's ION Loader Upgrades into a WAR Loader, discarding it's sniper rifle and equipping an Incendiary Shotgun and Grenades. While accompanied by the WAR Loader, FL4K gains increased Fire Rate.\\n\\nWhen FL4K issues an Attack Command, the WAR loader unleashes a barrage of missles at the target.\",\n effect: (rank, level) => `Fire Rate: +12.0%`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"5\": {\n \"Blind With Anger\": {\n ranks: 0,\n text: \"FL4K's Trap no longer Knocks Up or Stuns enemies. Instead, the Trap confuses nearby enemies, causing them to attack their allies for a short time. Once deployed, the Trap continues to periodically confuse enemies for the duration.\",\n effect: (rank, level) => `Confuse Duration: 8 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Fuzzy Math\": {\n ranks: 5,\n text: \"Whenever FL4K or their pet scores a Critical Hit, a portion of FL4K's and their pet's shields are restored.\",\n effect: (rank, level) => `Shield REstore: +${percent(rank, 3)}% of Max Shields`\n },\n \"Keep Them Safe\": {\n ranks: 5,\n text: \"Whenever FL4K issues an Attack Command, if FL4K's or their pet's shield is less than half full a portion of FL4K's and their pet's shields are restored. This has a short cooldown.\",\n effect: (rank, level) => `Shield Restore: ${percent(rank, 10)}% of Max Shields\\nCooldown: 12 seconds`\n },\n },\n \"6\": {\n \"Capacitance\": {\n ranks: 1,\n text: \"Whenever FL4K activiates their Action Skill, they gain greatly increased Shield Capacity for a short time and immediately begin rechargin their shields. This skill has a short cooldown.\",\n effect: (rank, level) => `Shield Capacity: +100%\\nDuration: 16 seconds\\nCooldown: 16 seconds`\n },\n\n }\n }\n};\n\nexport default skills;\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Gunner ({ path }) {\n return (\n \n );\n}\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Operative ({ path }) {\n return (\n \n );\n}\n","export function getLevel (state) {\n return state.invested.reduce((total, current) => total + current, 2);\n};\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\n\nfunction percentTwoDecimals (rank, unit) {\n return Math.round(rank * unit * 100) / 100;\n}\n\n// Matched Set Heat Per Shot\nfunction getMatchedSetHeatPerShot(rank) {\n switch (rank) {\n case 1:\n return 2;\n case 2:\n return 4;\n case 3:\n return 6;\n case 4:\n return 9;\n case 5:\n return 11;\n default:\n return 0;\n }\n}\n\n// Scrappy Handling\nfunction getScrappyHandling(rank) {\n switch (rank) {\n case 1:\n return 10.7;\n case 2:\n return 19.4;\n case 3:\n return 26.5;\n case 4:\n return 32.4;\n case 5:\n return 37.5;\n default:\n return 0;\n }\n}\n\n// Scrappy Weapon Swap Speed\nfunction getScrappyWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 27.5;\n case 3:\n return 36.3;\n case 4:\n return 43.2;\n case 5:\n return 48.7;\n default:\n return 0;\n }\n}\n\n// Scrappy Mode Switch Speed\nfunction getScrappyModeSwitchSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 27.5;\n case 3:\n return 36.3;\n case 4:\n return 43.2;\n case 5:\n return 48.7;\n default:\n return 0;\n }\n}\n\n// Armored Infantry Damage Resistance\nfunction getArmoredInfantryDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 3;\n case 2:\n return 6;\n case 3:\n return 8;\n case 4:\n return 11;\n case 5:\n return 13;\n default:\n return 0;\n }\n}\n\n// Vladof Ingenuity Shock Damage Resistance\nfunction getVladofIngenuityShockDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 15;\n case 2:\n return 26;\n case 3:\n return 35;\n case 4:\n return 42;\n case 5:\n return 47;\n default:\n return 0;\n }\n}\n\n// Behind the Iron Curtain Shield Recharge Delay\nfunction getBehindTheIronCurtainShieldRechargeDelay(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n default:\n return 0;\n }\n}\n\n// Deadlines Fuel Drain Modifier\nfunction getDeadlinesFuelDrain(rank) {\n switch (rank) {\n case 1:\n return 11;\n case 2:\n return 22;\n case 3:\n return 30;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Bottomless Mags\": {\n \"0\": {\n \"Minigun\": {\n text: \"The Minigun is capable of sustained rapid fire. Firing for long periods causes the Minigun to overheat, rendering it inoperable for a few seconds. Element: Non-Elemental.\",\n type: SKILLS.ACTION_SKILL,\n effect: (rank, level) => `Put a little lead in the air and see what falls over.`,\n },\n },\n \"1\": {\n \"Cloud of Lead\": {\n text: \"Occasionally, Moze's and Iron Bear's shots will deal additional Incendiary Damage and won't consume ammo.\",\n ranks: 5,\n effect: (rank, level) => `Effects are triggered every ${9 - rank} shots\\nBonus Incendiary Damage: +${percentTwoDecimals(rank, 2.25)}%`,\n },\n \"Dakka Bear\": {\n text: \"Adds a manned turret to the back of Iron Bear. While manned, Iron Bear and its rider gain increased damage.\",\n ranks: 1,\n effect: (rank, level) => `Iron Bear Damage: +50%\\nIron Cub Damage: +20%`,\n },\n \"Matched Set\": {\n text: \"Moze's currently equipped weapon gains a stacking bonus to Magazine Size and Decreased Heat Per Shot for every piece of equipped gear that has a matching manufacturer.\",\n ranks: 5,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 2)}% per matched gear\\nHeat Per Shot: -${getMatchedSetHeatPerShot(rank)}% per matched gear`,\n },\n },\n \"2\": {\n \"Let Off Some Steam\": {\n text: \"Minigun deals more damage as heat increases, and can be fired for longer before overheating.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Damage: Up to +80%\\nMinigun Heat Capacity: +35%`,\n },\n \"Stoke the Embers\": {\n text: \"Increases Moze and Iron Bear's Incendiary Damage.\",\n ranks: 3,\n effect: (rank, level) => `Incendiary Damage: +${percent(rank, 10)}%`,\n },\n \"Redistribution\": {\n text: \"After Moze scores a Critical Hit, she regenerates ammo and health for a few seconds.The lower her health, the more powerful the regeneration.\",\n ranks: 1,\n effect: (rank, level) => `Ammo Regeneration: +5% of Magazine Size/sec\\nHealth Regen: Up to +2.5% of Missing Health/sec\\nDuration: 3 seconds`,\n },\n \"Scrappy\": {\n text: \"While moving, Moze's Weapon Damage, Handling, Weapon Swap, and Mode Switch Speed are increased.\",\n ranks: 5,\n effect: (rank, level) => `Weapon Damage: +${percent(rank, 6)}%\\nHandling: +${getScrappyHandling(rank)}%\\nWeapon Swap Speed: +${getScrappyWeaponSwapSpeed(rank)}%\\nMode Switch Speed: +${getScrappyModeSwitchSpeed(rank)}%`,\n },\n \"Salamander\": {\n text: \"The Salamander is a flamethrower that deals Incendiary Damage to enemies at close range. Though the Salamander has infinite ammo, it drains Fuel with use.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `Fire... for effect.`,\n },\n },\n \"3\": {\n \"General Winter\": {\n text: \"Minigun fires Cryo rounds which reduce Heat Gain and Fuel Drain.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Fuel Drain: -40%\\nCryo Efficiency: +20%\\nMinigun Element: Cryo`,\n },\n \"Rushin' Offensive\": {\n text: \"Moze can sprint and shoot at the same time. While sprinting, Moze's weapons gain Life Steal.\",\n ranks: 1,\n effect: (rank, level) => `Life Steal: 8% of damage dealt`,\n },\n \"Scorching RPM's\": {\n text: \"Moze gains increased Fire Rate and Critical Hit Damage. Iron Bear gains increased Hard Point damage.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate: +${percent(rank, 3)}%\\nCritical Hit Damage: +${percent(rank, 4)}%\\nIron Bear Damage: +${percent(rank, 5)}%`,\n },\n \"Fuel Economy\": {\n text: \"Reduces Salamander's Fuel Drain. Additionally, Iron Bear's Movement Speed is increased after damaging an enemy with Salamander.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Salamander Fuel Drain: -25%\\nIron Bear Movement Speed: +50%\\nMovement Speed Duration: 3 seconds`,\n },\n },\n \"4\": {\n \"Exploding. Bullets.\": {\n text: \"Minigun fires Explosive Rounds that deal increased Splash Damage, but its Fire Rate is decreased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Damage: +232%\\nMinigun Fire Rate: -75%`,\n },\n \"The Iron Bank\": {\n text: \"Increases Moze's Magazine Size.\",\n ranks: 5,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 7)}%`,\n },\n \"Specialist Bear\": {\n text: \"Equipping two of the same Weapons on Iron Bear increases the damage they deal.\",\n ranks: 1,\n effect: (rank, level) => `Iron Bear Damage: +${percent(rank, 60)}%`,\n },\n \"Chemical Warfare\": {\n text: \"Salamander now deals Corrosive Damage. Additionally, Salamander's Melt Damage is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Salamander Element: Corrosive\\nSalamander Melt Damage: +125%`,\n },\n },\n \"5\": {\n \"Some for the Road\": {\n text: \"Moze gains infinite ammo for a few seconds after exiting Iron Bear.\",\n ranks: 1,\n effect: (rank, level) => `Duration: 5 seconds`,\n },\n \"Click, Click...\": {\n text: \"Moze gains increased Gun Damage as her magazine empties. The less ammo there is remaining, the greater the increase. If Moze has a COV gun equipped, she gains Gun Damage as her gun's heat increases.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: Up to +${percent(rank, 20)}%`,\n },\n \"Molten Roar\": {\n text: \"The Salamander burst-fires 3 projectiles with increased Damage, the first of which leaves a large Incendiary area.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Damage: +100%`,\n },\n },\n \"6\": {\n \"Forge\": {\n text: \"Moze constantly regenerates ammo for her currently equipped weapon.\",\n ranks: 1,\n effect: (rank, level) => `Ammo Regeneration: +5% of Magazine Size/sec`,\n },\n },\n },\n \"Demolition Woman\": {\n \"0\": {\n \"V-35 Grenade Launcher\": {\n text: \"The V-35 is a semi-automatic grenade launcher. Its grenades are not affected by Moze's equipped grenade mod. Element: Non-Elemental.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `For when the V-34 just isn't enough`,\n },\n },\n \"1\": {\n \"Fire in the Skag Den\": {\n text: \"Whenever Moze and Iron Bear deal Splash Damage, they deal bonus Incendiary Damage.\",\n ranks: 5,\n effect: (rank, level) => `Bonus Incendiary Damage: +${percent(rank, 3)}% of damage dealt`,\n },\n \"Deadlines\": {\n text: \"Firing Iron Bear Weapons drains less Fuel. Killing an enemy while Iron Bear is active increases Fuel. This skill has diminishing returns.\",\n ranks: 3,\n effect: (rank, level) => `Fuel Returned: Up to ${percent(rank, 2)}%\\nFuel Drain: -${getDeadlinesFuelDrain(rank)}%`,\n },\n \"Grizzled\": {\n text: \"Kill Skill. Killing an enemy reduces Moze's remaining Action Skill Cooldown Time. This skill has diminishing returns.\",\n ranks: 5,\n effect: (rank, level) => `Iron Bear Cooldown: -${rank * 1} seconds`,\n },\n },\n \"2\": {\n \"Shaped Charge\": {\n text: \"Direct hits with the V-35 deal increased damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Direct Hit Damage: +35%`,\n },\n \"Means of Destruction\": {\n text: \"Whenever Moze deals Splash Damage, there is a chance to add ammo to her currently equipped weapon's magazine, with a smaller chance to return a grenade.\",\n ranks: 3,\n effect: (rank, level) => `Ammo Chance: +${percent(rank, 3.333)}%\\nGrenade Chance: +${percent(rank, 2)}%\\nCooldown: 0.3 seconds`,\n },\n \"Torgue Cross-Promotion\": {\n text: \"All Splash Damage dealt by Moze has a chance to double in size. Additionally, Moze and Iron Bear deal increased Splash Damage.\",\n ranks: 5,\n effect: (rank, level) => `Splash Damage: +${percent(rank, 6)}%\\nChance to Double Splash Radius: +${percent(rank, 3)}%`,\n },\n \"Stainless Steel Bear\": {\n text: \"Iron Bear gains additional armor, increased Maximum Fuel, and increased Damage.\",\n ranks: 5,\n effect: (rank, level) => `Maximum Fuel: +${percent(rank, 4)}%\\nIron Bear Armor: +${percent(rank, 6)}%\\nIron Bear Damage: +${percent(rank, 4)}%`,\n },\n \"Vanquisher Rocket Pod\": {\n text: \"The Vanquisher Rocket Pod is a rocket launcher capable of rapid-firing volleys of unguided explosive rockets. Element: Non-Elemental.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `If you want guidance, get a sherpa. If you want explosions, get a Vladof.`,\n },\n },\n \"3\": {\n \"Musical Chairs\": {\n text: \"Occasionally, the V-35 fires a Singularity Grenade that pulls in nearby enemies before exploding.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Singularity: Every 7th grenade`,\n },\n \"Pull the Holy Pin\": {\n text: \"Moze's grenades have a chance to score a Critical Hit, dealing greatly increased damage. Sources of Critical Hit Damage do not affect grenade Critical Hits.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Critical Hit Chance: +${percent(rank, 10)}%`,\n },\n \"Auto Bear\": {\n text: \"After Moze exits Iron Bear, it will remain deployed in place for a short time. While Auto Bear remains active, it will target and attack nearby enemies until its duration ends, then it will charge at an enemy and self-destruct.\",\n ranks: 1,\n effect: (rank, level) => `Auto Bear Duration: 15 seconds`,\n },\n \"Active Tracking\": {\n text: \"The Vanquisher Rocket Pod now fires homing rockets and has increased Reload Speed. Hold down [Action Skill key] and aim at enemies to designate up to 6 targets. Releasing Fire Button launches a volley of homing rockets at the designated targets.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Reload Speed: +25%`,\n },\n },\n \"4\": {\n \"Lock and Speedload\": {\n text: \"The V-35's Reload Speed is greatly increased and it now fires a 5-round burst.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Reload Speed: +25%`,\n },\n \"Vampyr\": {\n text: \"Whenever Moze damages an enemy with a thrown grenade, for every enemy hit, she restores a portion of her missing health. Iron Bear restores armor for every enemy it deals Splash Damage to.\",\n ranks: 5,\n effect: (rank, level) => `Moze Health Restored: ${percent(rank, 4)}% of Missing Health per enemy hit\\nIron Bear Health Restored: ${percent(rank, 2)}% of Missing Armor per enemy hit`,\n },\n \"Why Can't I Carry All These Grenades\": {\n text: \"Increases Moze's grenade carrying capacity.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Capacity: +${rank}`,\n },\n \"Target Softening\": {\n text: \"The Vanquisher Rocket Pod deals greatly reduced damage per rocket, but fires in a 6-rocket spread. Additionally, enemies hit by Vanquisher Rocket Pod rockets take increased damage from all sources.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Damage: -74%\\nEnemy Damage Taken: +15%`,\n },\n },\n \"5\": {\n \"To the Last\": {\n text: \"Moze gains the ability to throw grenades while in Fight For Your Life. If she threw a grenade before gaining a Second Wind, a grenade is refunded.\",\n ranks: 1,\n effect: (rank, level) => `The greatest enemy is one with nothing to lose... and a grenade.`,\n },\n \"Explosive Punctuation\": {\n text: \"When Moze deals Splash Damage, her Action Skill Cooldown Rate is briefly increased.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Cooldown Rate: +${percent(rank, 8)}%`,\n },\n \"Hammerdown Protocol\": {\n text: \"Instead of a volley of conventional rockets, the Vanquisher Rocket Pod launches a single rocket with a nuclear warhead, dealing massive Radiation Damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Damage: +600%\\nVanquisher Magazine Size: 1\\nVanquisher Element: Raditation\\n`,\n },\n },\n \"6\": {\n \"Short Fuse\": {\n text: \"Whenever Moze deals Gun Damage, there is a chance of a secondary explosion centered on the target.\",\n ranks: 1,\n effect: (rank, level) => `Secondary Explosion Chance: 20%\\nSecondary Explosion Damage: 75% of Gun Damage`,\n },\n },\n },\n \"Shield of Retribution\": {\n \"0\": {\n \"Railgun\": {\n text: \"The Railgun fires electrified high-velocity projectiles that deal Shock Damage.\",\n type: SKILLS.ACTION_SKILL,\n effect: (rank, level) => `It's like a bullet, only bigger. And faster. And wrapped in lightning.`,\n },\n },\n \"1\": {\n \"Selfless Vengeance\": {\n text: \"Whenever Moze reloads, she loses a small portion of her health and grants additional Incendiary Damage to her and her allies' rounds for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Bonus Incendiary Damage: +${percent(rank, 3)}% of gun damage dealt\\nCurrent Health Removed: ${percent(rank, 1)}\\nDuration: ${rank + 5} seconds`,\n },\n \"Security Bear\": {\n text: \"Iron Bear gains a bubble shield that reduces damage taken. The shield deactivates if it sustains too much damage, reactivating after a short cooldown.\\nIf Iron Cub is equipped, it gains Damage Reduction instead.\",\n ranks: 1,\n effect: (rank, level) => `Bubble Recharge Delay: 5 seconds\\n50% of Iron Bear Maximum Armor added as Shields\\nIron Cub Damage Reduction: +50%`,\n },\n \"Armored Infantry\": {\n text: \"While Moze's shields are active, she gains Damage Resistance and increased Gun Damage.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3)}%\\nDamage Resistance: +${getArmoredInfantryDamageResistance(rank)}%`,\n },\n },\n \"2\": {\n \"Hell on Rails\": {\n text: \"Railgun now fires superheated rounds that deal Incendiary Damge, but have increased Fuel Drain per shot.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Railgun Fuel Drain: +8%\\nRailgun Element: Incendiary`,\n },\n \"Drowning in Brass\": {\n text: \"Kill Skill. Killing an enemy grants Moze a stack of Drowning in Brass.\\n\\nFor each stack of Drowning in Brass, Moze's Fire Rate is reduced, but Gun Damage is increased for both her and her allies.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}% per stack\\nMoze Fire Rate: -${percent(rank, 0.5)}% per stack\\nMaximum Stacks: 3\\nDuration: 15 seconds`,\n },\n \"Thin Red Line\": {\n text: \"A portion of Moze's health is Reserved and cannot be restored, but her Maximum Shield is increased by the same amount.\",\n ranks: 3,\n effect: (rank, level) => `${percent(rank, 20)}% Max Health Reserved and Added to Max Shield`,\n },\n \"Vladof Ingenuity\": {\n text: \"Moze's Maximum Shield and Shield Recharge Rate are increased, and she gains resistance to Shock Damage.\",\n ranks: 5,\n effect: (rank, level) => `Shield Recharge Rate: +${percent(rank, 4)}%Maximum Shield: +${percent(rank, 6)}%\\n\\nShock Damage Resistance: +${getVladofIngenuityShockDamageResistance(rank)}%`,\n },\n \"Bear Fist\": {\n text: \"The Bear Fist is a pneumatic-driven fist that deals massive damage to a single target at close range. Element: Non-Elemental.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `Vladof supports the right to bear armored bear arms.`,\n },\n },\n \"3\": {\n \"Capacitive Armature\": {\n text: \"When Railgun hits an enemy, it chains to nearby enemies, dealing reduced Shock Damage to more targets.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Splinter Damage: -30%`,\n },\n \"Full Can of Whoop-Ass\": {\n text: \"Entering Iron Bear causes Moze's and her allies' shields to immediately begin recharging at an increased Shield Recharge Rate.\",\n ranks: 1,\n effect: (rank, level) => `Shield Recharge Rate: +25%`,\n },\n \"Experimental Munitions\": {\n text: \"Whenever Moze and Iron Bear score a Critical Hit, they deal bonus Incendiary Damage.\",\n ranks: 1,\n effect: (rank, level) => `Bonus Incendiary Damage: +${percent(rank, 15)}% of damage dealt`,\n },\n \"Wild Swing\": {\n text: \"Whenever Bear Fist hits an enemy, it deals random Bonus Elemental Damage to that enemy and all enemies nearby.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Bear Fist Bonus Elemental Damage: +35% of damage dealt`,\n },\n },\n \"4\": {\n \"Corrosive Sabot Round\": {\n text: \"Railgun now fires a specialty round that deals reduced damage and explodes after a short delay.\\nRailgun shots have reduced Fuel Drain and the Magazine Size is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Railgun Fuel Drain: -50%\\nRailgun Damage: -15%\\nRailgun Magazine Size: +2\\nRailgun Element:Corrosive`,\n },\n \"Behind the Iron Curtain\": {\n text: \"Moze's Shield Recharge Delay is reduced, and her Shield Recharge Rate is increased.\",\n ranks: 3,\n effect: (rank, level) => `Shield Recharge Rate: +${percent(rank, 11)}%\\nShield Recharge Delay: -${getBehindTheIronCurtainShieldRechargeDelay(rank)}%`,\n },\n \"Desperate Measures\": {\n text: \"Moze's Gun Damage and Iron Bear's Damage is increased depending on how low their health is. The lower their health, the greater the increase.\",\n ranks: 3,\n effect: (rank, level) => `Damage: Up to +${Math.round(percent(rank, 16.5))}%`,\n },\n \"Close the Distance\": {\n text: \"Instead of punching, Iron Bear now launches its Bear Fist forward and grabs enemies at greatly increased range, dealing Shock Damage and pulling them back to Iron Bear.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Step into my office.`,\n },\n },\n \"5\": {\n \"Phalanx Doctrine\": {\n text: \"Kill Skill. After killing an enemy, Moze gains a stack of Phalanx Doctrine. For every stack of Phalanx Doctrine, Moze's Maximum Shield and Gun Damage are increased. Each stack lasts 30 seconds.\\n\\nThere is no stack limit.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 2)}% per stack\\nMax Shields: +${percent(rank, 3)}% per stack\\nDuration: 30 seconds`,\n },\n \"Force Feedback\": {\n text: \"Whenever Moze scores a Critical Kill, her shields immediately begin recharging and she instantly regains a portion of her shield.\",\n ranks: 1,\n effect: (rank, level) => `Shields Restored: 10% of Maximum Shield`,\n },\n \"Shockhammer\": {\n text: \"Bear Fist is now capable of sustained rapid fire punching. Additionally, Bear Fist has reduced Fuel Drain and deals Bonus Shock Damage with each hit.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Bonus Shock Damage: +60% of damage dealt\\nFuel Drain: -40%`,\n },\n },\n \"6\": {\n \"Tenacious Defense\": {\n text: \"Whenever Moze's shield is fully depleted, she instantly restores a portion of her shield, and her Gun Damage is increased for a short time. This skill can only trigger after Moze's shields have fully recharged.\",\n ranks: 1,\n effect: (rank, level) => `Gun Damage: +30%\\nShields Restored: 40% of Maximum Shield\\nDuration: 30 seconds`,\n },\n },\n },\n \"Bear Mother\": {\n \"0\": {\n \"Iron Cub\": {\n ranks: 0,\n text: \"Moze Summons Iron Cub in place of Iron Bear. Iron Cub equips two of whatever weapon is equipped in the remaining Action Skill slot. While deployed, Iron Cub follows Moze and will target and attack enemies for the duration.\\nSkills that affect Iron Bear affect Iron Cub. Iron Cub still uses Fuel, but usses less of it and deals less damage (because it's smaller).\", \n effect: (rank, level) => ``\n },\n },\n \"1\": {\n \"Biofuel\": {\n ranks: 5,\n text: \"Whenever Moze or Iron Bear ignites an enemy, they both regenerate health for a short time.\", \n effect: (rank, level) => `Health Regen: Up to +${percent(rank, 0.7)}% per sec\\nIron Bear Armor Regen: Up to +${percent(rank, 0.5)}% per sec\\nDuration: 8 seconds`\n },\n \"Big Surplus\": {\n ranks: 3,\n text: \"While Moze's Action Skill is cooling down, she deals bonus Incendiary Damage.\", \n effect: (rank, level) => `Bonus Damage: ${percent(rank, 5)}% of Gun Damage`\n },\n \"Really Big Guns\": {\n ranks: 5,\n text: \"Iron Bear gains increased Damage.\", \n effect: (rank, level) => `Iron Bear Damage: +${percent(rank, 4)}%`\n }, \n },\n \"2\": {\n \"Double Time\": {\n ranks: 3,\n text: \"While Moze's Action Skill is active, she and Iron Bear gain increased Movement Speed.\", \n effect: (rank, level) => `Movement Speed: +${percent(rank, 12)}%`\n },\n \"Harmonious Havoc\": {\n ranks: 5,\n text: \"Moze gains increased Gun Damage for each weapon, shield, and grenade that matches the element of her gun.\", \n effect: (rank, level) => `Gun Damage: +${percent(rank, 2)}% per matching item`\n },\n \"Explosive Fury\": {\n ranks: 3,\n text: \"Moze and Iron Bear gain increased Status Effect Damage and Status Effect Chance.\", \n effect: (rank, level) => `Status Effect Chance: +${percent(rank, 9)}%\\nStatus Effect Damage: +${percent(rank, 5)}%`\n },\n \"Fuel For The Fire\": {\n ranks: 0,\n text: \"Whenever Moze or Iron Cub inflicts a Status Effect on an enemy, Iron Cub's armor is restored.\", \n effect: (rank, level) => `12% of Max Armor`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"3\": {\n \"Baby Nukes\": {\n ranks: 0,\n text: \"Whenever Iron Cub is deployed or destroyed, it triggers a nuclear explosion, dealing massive Radation Damage.\", \n effect: (rank, level) => `Damage: 123 (scales with level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Fired Up\": {\n ranks: 1,\n text: \"Whenever Moze or Iron Bear applies a Status Effect to an enemy, she gains increased Fire Rate for a short time. This effect stacks.\", \n effect: (rank, level) => `Fire Rate: +5%\\nDuration: 12 seconds\\nMax Stacks: 5`,\n }, \n },\n \"4\": {\n \"Nitrotrinadium Engines\": {\n ranks: 5,\n text: \"Iron Bear gains increased Maximum Fuel and Action Skill Cooldown Rate.\", \n effect: (rank, level) => `Maximum Fuel: +${percent(rank, 5)}%\\nAction Skill Cooldown Rate: +${percent(rank, 4)}%`\n },\n \"Never Going To Give You Up\": {\n ranks: 5,\n text: \"Whenever Moze or Iron Bear applies a Status Effect to an enemy, Iron Bear gains Fuel. This skill had diminishing returns.\", \n effect: (rank, level) => `Fuel Returned: Up to 15%`\n },\n \"My Little Friend\": {\n ranks: 0,\n text: \"Iron Cub spawns with Incendiary Vladof Assault Riffle in addition to Iron Cub's other weapons.\", \n effect: (rank, level) => ``,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Efficiency Engine\": {\n ranks: 0,\n text: \"Moze gains increased Gun Damage. The longer Iron Cub has been active, the greater the bonus.\", \n effect: (rank, level) => `Gun Damage: +${percent(rank, 0.5)}% per second`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Feature Creep\": {\n ranks: 1,\n text: \"Iron Bear gains increased Damage and Damage Resistance.\", \n effect: (rank, level) => `Iron Bear Damage: +18%\\nIron Bear Damage Resistance: +45%`\n },\n \"Limit Break\": {\n ranks: 3,\n text: \"Moze gains increased Action Skill Cooldown Rate whenever she or Iron Bear inflicts a Status Effect on an enemy. This effect stacks.\", \n effect: (rank, level) => `Cooldown Rate: +${percent(rank, 4)}%\\nDuration: 12 seconds\\nMax Stacks: 10`\n },\n \"Superior Firepower\": {\n ranks: 1,\n text: \"Whenever Moze or Iron Bear inflicts a Status Effect on an enemy, they gain increased Status Effect Damage.\", \n effect: (rank, level) => `Status Effect Damage: +20%\\nDuration: 8 seconds\\nMax Stacks: 5`\n },\n },\n \"6\": {\n \"Running On Fumes\": {\n ranks: 1,\n text: \"Whenever Moze or Iron Bear ignites an enemy, Iron Bear does not consume fuel for a short time.\", \n effect: (rank, level) => `Duration: 6 seconds`\n },\n },\n }\n};\n\nexport default skills;\n","!function(){\"use strict\";function e(e,t){var n,o,r,i,l=W;for(i=arguments.length;i-- >2;)P.push(arguments[i]);t&&null!=t.children&&(P.length||P.push(t.children),delete t.children);while(P.length)if((o=P.pop())&&void 0!==o.pop)for(i=o.length;i--;)P.push(o[i]);else\"boolean\"==typeof o&&(o=null),(r=\"function\"!=typeof e)&&(null==o?o=\"\":\"number\"==typeof o?o+=\"\":\"string\"!=typeof o&&(r=!1)),r&&n?l[l.length-1]+=o:l===W?l=[o]:l.push(o),n=r;var a=new T;return a.nodeName=e,a.children=l,a.attributes=null==t?void 0:t,a.key=null==t?void 0:t.key,void 0!==M.vnode&&M.vnode(a),a}function t(e,t){for(var n in t)e[n]=t[n];return e}function n(e,t){null!=e&&(\"function\"==typeof e?e(t):e.current=t)}function o(n,o){return e(n.nodeName,t(t({},n.attributes),o),arguments.length>2?[].slice.call(arguments,2):n.children)}function r(e){!e.__d&&(e.__d=!0)&&1==V.push(e)&&(M.debounceRendering||D)(i)}function i(){var e;while(e=V.pop())e.__d&&x(e)}function l(e,t,n){return\"string\"==typeof t||\"number\"==typeof t?void 0!==e.splitText:\"string\"==typeof t.nodeName?!e._componentConstructor&&a(e,t.nodeName):n||e._componentConstructor===t.nodeName}function a(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function u(e){var n=t({},e.attributes);n.children=e.children;var o=e.nodeName.defaultProps;if(void 0!==o)for(var r in o)void 0===n[r]&&(n[r]=o[r]);return n}function c(e,t){var n=t?document.createElementNS(\"http://www.w3.org/2000/svg\",e):document.createElement(e);return n.__n=e,n}function p(e){var t=e.parentNode;t&&t.removeChild(e)}function s(e,t,o,r,i){if(\"className\"===t&&(t=\"class\"),\"key\"===t);else if(\"ref\"===t)n(o,null),n(r,e);else if(\"class\"!==t||i)if(\"style\"===t){if(r&&\"string\"!=typeof r&&\"string\"!=typeof o||(e.style.cssText=r||\"\"),r&&\"object\"==typeof r){if(\"string\"!=typeof o)for(var l in o)l in r||(e.style[l]=\"\");for(var l in r)e.style[l]=\"number\"==typeof r[l]&&!1===E.test(l)?r[l]+\"px\":r[l]}}else if(\"dangerouslySetInnerHTML\"===t)r&&(e.innerHTML=r.__html||\"\");else if(\"o\"==t[0]&&\"n\"==t[1]){var a=t!==(t=t.replace(/Capture$/,\"\"));t=t.toLowerCase().substring(2),r?o||e.addEventListener(t,_,a):e.removeEventListener(t,_,a),(e.__l||(e.__l={}))[t]=r}else if(\"list\"!==t&&\"type\"!==t&&!i&&t in e){try{e[t]=null==r?\"\":r}catch(e){}null!=r&&!1!==r||\"spellcheck\"==t||e.removeAttribute(t)}else{var u=i&&t!==(t=t.replace(/^xlink:?/,\"\"));null==r||!1===r?u?e.removeAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase()):e.removeAttribute(t):\"function\"!=typeof r&&(u?e.setAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase(),r):e.setAttribute(t,r))}else e.className=r||\"\"}function _(e){return this.__l[e.type](M.event&&M.event(e)||e)}function f(){var e;while(e=A.shift())M.afterMount&&M.afterMount(e),e.componentDidMount&&e.componentDidMount()}function d(e,t,n,o,r,i){H++||(R=null!=r&&void 0!==r.ownerSVGElement,B=null!=e&&!(\"__preactattr_\"in e));var l=h(e,t,n,o,i);return r&&l.parentNode!==r&&r.appendChild(l),--H||(B=!1,i||f()),l}function h(e,t,n,o,r){var i=e,l=R;if(null!=t&&\"boolean\"!=typeof t||(t=\"\"),\"string\"==typeof t||\"number\"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=t&&(e.nodeValue=t):(i=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0))),i.__preactattr_=!0,i;var u=t.nodeName;if(\"function\"==typeof u)return N(e,t,n,o);if(R=\"svg\"===u||\"foreignObject\"!==u&&R,u+=\"\",(!e||!a(e,u))&&(i=c(u,R),e)){while(e.firstChild)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0)}var p=i.firstChild,s=i.__preactattr_,_=t.children;if(null==s){s=i.__preactattr_={};for(var f=i.attributes,d=f.length;d--;)s[f[d].name]=f[d].value}return!B&&_&&1===_.length&&\"string\"==typeof _[0]&&null!=p&&void 0!==p.splitText&&null==p.nextSibling?p.nodeValue!=_[0]&&(p.nodeValue=_[0]):(_&&_.length||null!=p)&&m(i,_,n,o,B||null!=s.dangerouslySetInnerHTML),y(i,t.attributes,s),R=l,i}function m(e,t,n,o,r){var i,a,u,c,s,_=e.childNodes,f=[],d={},m=0,b=0,y=_.length,g=0,w=t?t.length:0;if(0!==y)for(var C=0;C skill.ranks) { return false; }\n tierTotal += skill.invested || 0;\n };\n if (tierTotal > 0 && treeTotal + 5 < tierIndex * 5) { return false; }\n treeTotal += tierTotal;\n tierIndex += 1;\n };\n treeTotals[treeIndex] = treeTotal;\n totalSpent += treeTotal;\n treeIndex += 1;\n };\n if (totalSpent > (50 - 3) + 11 + 11) { return false; }\n return treeTotals;\n}\n","import deepmerge from 'deepmerge';\nimport investmentValidator from './investmentValidator';\nimport { setHash } from './hashHandler';\n\nexport default function reducer (state, action) {\n switch (action.type) {\n case 'skillChange':\n var newSkills = deepmerge(state.skills, {\n [action.treeName]: {\n [action.tierIndex + '']: {\n [action.skillName]: {\n invested: action.newValue,\n }\n }\n }\n });\n const skillChangeTotals = investmentValidator(newSkills);\n if (skillChangeTotals) {\n setHash(newSkills);\n return {\n ...state,\n invested: skillChangeTotals,\n skills: newSkills,\n };\n } else {\n return state;\n }\n case 'loadSkills':\n const loadSkillsTotals = investmentValidator(action.skills);\n if (loadSkillsTotals) {\n return {\n ...state,\n invested: loadSkillsTotals,\n skills: deepmerge(state.skills, action.skills),\n };\n } else {\n return state;\n }\n }\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"Eq4mJ\",\"heart\":\"_37Gl6\",\"moveHeart\":\"_34mPq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"splash\":\"_2_d3x\",\"wrapper\":\"vMurv\",\"link\":\"_3lx8i\",\"name\":\"_1SiOU\",\"job\":\"_3chgr\",\"disclaimer\":\"_3RIFV\"};","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.deepmerge = factory());\n}(this, (function () { 'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nreturn deepmerge_1;\n\n})));\n","import SKILLS from '@constants/skills';\nimport style from './index.css';\n\nfunction getInitials (string) {\n const numWords = (string.match(/\\s/g) || []).length + 1;\n switch (numWords) {\n case 1:\n return string.slice(0, 3);\n case 2:\n return (string.match(/^\\w{1,2}|\\s\\w{1,2}/g) || []).join('').replace(/\\s/g, '');\n default:\n return (string.match(/^\\w|\\s\\w/g) || []).join('').replace(/\\s/g, '');\n }\n}\n\nexport default function Skill ({\n name = '?',\n text = 'Long description',\n ranks = 0,\n invested = 0,\n tier = 0,\n level = 1,\n effect = (rank, level) => `Rank ${rank} effect`,\n type = null,\n enabled = true,\n image = null,\n onChange = (oldValue, newValue) => null,\n}) {\n const isAugment = [\n SKILLS.AUGMENT_CHEVRON,\n SKILLS.AUGMENT_DIAMOND,\n SKILLS.AUGMENT_ACTION_SKILL,\n ].includes(type);\n let shapeStyle = null;\n if (type === SKILLS.ACTION_SKILL) { shapeStyle = style.actionSkill; }\n if (type === SKILLS.AUGMENT_CHEVRON) { shapeStyle = style.chevron; }\n if (type === SKILLS.AUGMENT_DIAMOND) { shapeStyle = style.diamond; }\n if (type === SKILLS.AUGMENT_ACTION_SKILL) { shapeStyle = style.actionSkill; }\n function clickListener (event) {\n var newValue;\n if (event.type === 'click') {\n newValue = Math.min(invested + 1, ranks);\n } else { // (event.type === 'contextmenu')\n newValue = Math.max(invested - 1, 0);\n }\n if (enabled && invested !== newValue) {\n onChange(invested, newValue);\n }\n event.preventDefault();\n return false;\n }\n return (\n 0) ? style.usable : '',\n ].join(' ')}\n onClick={clickListener}\n onContextMenu={clickListener}\n >\n
{getInitials(name)}
\n { enabled && ranks > 0 &&
{invested}/{ranks}
}\n
\n

{name}

\n {text}\n { invested > 0 &&\n
\n Current Effect:
\n {effect(invested, level)}\n
\n }\n { type !== null &&\n
\n {effect(1, level)}\n
\n }\n { type == null && invested < ranks &&\n
\n Next Rank:
\n {effect(invested + 1, level)}\n
\n }\n
\n \n );\n}\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Siren ({ path }) {\n return (\n \n );\n}\n","export function setHash (skillsState) {\n const hashparts = [];\n for (let tree of Object.values(skillsState)) {\n for (let tier of Object.values(tree)) {\n for (let skill of Object.values(tier)) {\n if (skill.type == null) {\n hashparts.push(skill.invested || 0);\n }\n };\n };\n };\n const url = window.location.href.split('#')[0] + '#' + hashparts.join('');\n window.location.replace(url);\n};\n\nexport function getHash (skillsState) {\n const hash = window.location.href.split('#')[1] || '';\n const hashparts = hash.match(/./g) || [];\n const skills = JSON.parse(JSON.stringify(skillsState));\n for (let tree of Object.keys(skills)) {\n for (let tier of Object.keys(skills[tree])) {\n for (let skill of Object.keys(skills[tree][tier])) {\n if (skills[tree][tier][skill].type == null) {\n skills[tree][tier][skill] = { invested: parseInt(hashparts.shift() || 0) };\n } else {\n skills[tree][tier][skill] = {};\n }\n };\n };\n };\n return skills;\n};\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Beastmaster ({ path }) {\n return (\n \n );\n}\n","/* eslint-disable space-before-function-paren */\nimport SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\nfunction flat (rank, level, unit) {\n return Math.floor(rank * unit);\n}\n\n// Stiff Upper Lip Damage Resistance\nfunction getStiffUpperLipDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 6;\n case 2:\n return 12;\n case 3:\n return 16;\n default:\n return 0;\n }\n}\n\n// Nerves of Steel Handling\nfunction getNervesOfSteelHandling(rank) {\n switch (rank) {\n case 1:\n return 2.4;\n case 2:\n return 4.8;\n case 3:\n return 7;\n default:\n return 0;\n }\n}\n\n// Cold Bore Weapon Swap Speed\nfunction getColdBoreWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 13;\n case 2:\n return 23;\n case 3:\n return 31;\n case 4:\n return 38;\n case 5:\n return 43;\n default:\n return 0;\n }\n}\n\n\n// Cool Hand After Kill Reload Speed\nfunction getCoolHandAfterKillReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 4;\n case 2:\n return 9;\n case 3:\n return 13;\n case 4:\n return 18;\n case 5:\n return 22;\n default:\n return 0;\n }\n}\n\n// Man Of Focus Accuracy\nfunction getManOfFocusAccuracy(rank) {\n switch (rank) {\n case 1:\n return 7;\n case 2:\n return 14;\n case 3:\n return 19;\n case 4:\n return 24;\n case 5:\n return 29;\n default:\n return 0;\n }\n}\n\n// Man Of Focus Handling\nfunction getManOfFocusHandling(rank) {\n switch (rank) {\n case 1:\n return 7.4;\n case 2:\n return 13.8;\n case 3:\n return 19.4;\n case 4:\n return 24.2;\n case 5:\n return 28.6;\n default:\n return 0;\n }\n}\n\n// Salvation life steal\nfunction getSalvationLifeSteal(rank) {\n switch (rank) {\n case 1:\n return 2;\n case 2:\n return 4;\n case 3:\n return 7;\n case 4:\n return 9;\n case 5:\n return 11;\n default:\n return 0;\n }\n}\n\nfunction getViolentViolenceFireRate(rank) {\n switch (rank) {\n case 1:\n return 4;\n case 2:\n return 7;\n case 3:\n return 11;\n case 4:\n return 15;\n case 5:\n return 19;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Under Cover\": {\n \"0\": {\n \"Barrier\": {\n text: \"Drop a deployable Barrier that blocks incoming projectiles. Zane and his allies can shoot through the Barrier, dealing increased Gun Damage.\\n\\nPressing [Action Skill key] while Barrier is active picks up and holds the Barrier, but the size and bonuses are decreased.\",\n effect: (rank, level) => `Duration: 14 seconds\\nCooldown: 24 seconds\\nGun Damage Amp: +25%`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Adrenaline\": {\n text: \"Zane gains increased Action Skill Cooldown Rate. This bonus is based on the amount of shield he has. The more percent full, the greater the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Cooldown Rate: Up to +${percent(rank, 7)}%`,\n },\n \"Hearty Stock\": {\n text: \"Zane gains increased Maximum Shield Capacity.\",\n ranks: 3,\n effect: (rank, level) => `Maximum Shield: +${percent(rank, 10)}%`,\n },\n \"Ready for Action\": {\n text: \"Zane gains improved Shield Recharge Rate and Shield Recharge Delay.\",\n ranks: 5,\n effect: (rank, level) => `Shield Recharge Rate: +${percent(rank, 6)}%\\nShield Recharge Delay: -${percent(rank, 7)}%`,\n },\n },\n \"2\": {\n \"Charged Relay\": {\n text: \"Whenever Zane or an ally touches the Barrier, they gain increased Movement Speed and Reload Speed for a few seconds.\",\n ranks: 0,\n effect: (rank, level) => `Reload Speed: +20%\\nMovement Speed: +11%\\nDuration: 8 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Brainfreeze\": {\n text: \"Whenever Zane scores a Critical Hit on an enemy, there is a chance they will be Slowed. This effect stacks until the target is Frozen.\",\n ranks: 5,\n effect: (rank, level) => `Slow Chance: ${percent(rank, 4)}%`,\n },\n \"Stiff Upper Lip\": {\n text: \"Whenever Zane is damaged, he gains Damage Resistance against that damage type.\",\n ranks: 3,\n effect: (rank, level) => `Damage Resistance: +${getStiffUpperLipDamageResistance(rank)}%`,\n },\n \"Rise to the Occasion\": {\n text: \"Zane gains Health Regeneration. The lower his shield is, the higher the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: Up to +${percent(rank, 1)}% of Max Health/sec`,\n },\n },\n \"3\": {\n \"Nanites or Some Shite\": {\n text: \"Zane and his allies gain Health Regeneration, increased Reload Speed, and greatly improved Shield Recharge Delay while near his Barrier.\\n\\nThe lower their health, the more health is regenerated.\",\n ranks: 0,\n effect: (rank, level) => `Team Health Regen: Up to +4% of Max Health/sec\\nTeam Shield Recharge Delay: -33%\\nTeam Reload Speed: +11%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Distributed Denial\": {\n text: \"Zane's Barrier gains the effects of his currently equipped Shield Mod. Additionally, shield effects are applied to all allies near the Barrier. Bonuses to Zane are reduced.\",\n ranks: 1,\n },\n \"All-Rounder\": {\n text: \"Zane's Barrier becomes a dome, covering all sides.\",\n ranks: 0,\n effect: (rank, level) => `Cooldown: +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Retaliation\": {\n text: \"Zane and allies near the Barrier gain increased Gun Damage for a few seconds after the Barrier takes damage.\",\n ranks: 0,\n effect: (rank, level) => `Team Gun Damage: +10%\\nDuration: 3 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Really Expensive Jacket\": {\n text: \"Elemental Status Effects applied to Zane have reduced duration.\",\n ranks: 1,\n effect: (rank, level) => `Status Effect Duration: -50%`,\n },\n \"Best Served Cold\": {\n text: \"Kill Skill. Whenever Zane kills an enemy, they create a Cryo Nova, dealing damage to all nearby enemies. This skill has a short cooldown.\",\n ranks: 5,\n effect: (rank, level) => `Cryo Damage: ${flat(rank, level, 2)} (increases with character level)\\nCooldown: 3 seconds`,\n },\n \"Futility Belt\": {\n text: \"Zane gains resistance to non-elemental damage.\\n\\nKill Skill. After killing an enemy, all elemental damage Zane takes is converted to non-elemental damage.\",\n ranks: 1,\n effect: (rank, level) => `Non-Elemental Damage Resistance: +15%\\nDuration: 8 seconds`,\n },\n \"Deterrence Field\": {\n text: \"Enemies that touch the Barrier take Shock Damage and are staggered.\",\n ranks: 0,\n effect: (rank, level) => `Shock Damage: ${flat(1, level, 27)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Refreshment\": {\n text: \"Whenever Zane damages a frozen enemy with his weapon, he gains some of that damage back as health.\",\n ranks: 3,\n effect: (rank, level) => `Life Steal: +${percent(rank, 8)}% of damage dealt`,\n },\n \"Calm, Cool, Collected\": {\n text: \"Whenever Zane Freezes an enemy, his shield instantly begins recharging.\\n\\nIf Zane's shields are already full, he regenerates health for a few seconds.\\n\\nIf Zane's health is already full, his Action Skill Cooldowns and Durations are immediately reset.\",\n ranks: 1,\n effect: (rank, level) => `Health Regeneration: +3% of Max Health per second\\nHealth Regeneration Duration: 3 seconds`,\n },\n \"Nerves of Steel\": {\n text: \"Zane gains increasing Accuracy and Handling. The longer his shield is full, the greater the bonuses.\",\n ranks: 3,\n effect: (rank, level) => `Accuracy: +${percent(rank, 2)}% per second\\nHandling: +${getNervesOfSteelHandling(rank)}% per second\\nMaximum Stacks: 15`,\n },\n },\n \"6\": {\n \"Confident Competence\": {\n text: \"While Zane's shields are active, he gains increased Gun Damage and Accuracy. These bonuses are based on the amount of shields he has. The more percent full, the greater the bonuses.\",\n ranks: 1,\n effect: (rank, level) => `Gun Damage: Up to +40%\\nAccuracy: Up to +33%`,\n },\n },\n },\n \"Hitman\": {\n \"0\": {\n \"SNTNL\": {\n text: \"Send into battle an automated SNTNL drone that continually flies through the environment and attacks enemies with its Machine Guns. Pressing [Action Skill key] while SNTNL is active causes it to attack the enemy under Zane's crosshairs, if any. Machine Gun Element: Non-Elemental.\",\n effect: (rank, level) => `Machine Gun Damage: ${flat(rank, level, 6)} (increases with character level)\\nDuration: 24 seconds\\nCooldown: 60 seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n }\n },\n \"1\": {\n \"Violent Speed\": {\n text: \"Kill Skill. After killing an enemy, Zane gains increased Movement Speed for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Movement Speed: +${percent(rank, 4)}%\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Cold Bore\": {\n text: \"Zane gains increased Weapon Swap Speed. The next shot fired after swapping weapons deals Bonus Cryo Damage.\",\n ranks: 5,\n effect: (rank, level) => `Weapon Swap Speed: +${getColdBoreWeaponSwapSpeed(rank)}%\\nBonus Cryo Damage: +${percent(rank, 40)}% of damage dealt`,\n },\n \"Violent Momentum\": {\n text: \"Zane's Gun Damage is increased while moving. The quicker he moves, the greater the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}% at default walk speed`,\n },\n },\n \"2\": {\n \"Winter's Drone\": {\n text: \"Converts SNTNL's primary weapons to Cryo Damage.\",\n ranks: 0,\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `SNTNL Weapons Element: Cryo`,\n },\n \"Cool Hand\": {\n text: \"Zane gains increased Reload Speed.\\nKill Skill. After killing an enemy, Zane's Reload Speed is increased for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Reload Speed: +${percent(rank, 3)}%\\nAdditional Reload Speed: +${getCoolHandAfterKillReloadSpeed(rank)}%\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Drone Delivery\": {\n text: \"SNTRY will occasionally drop a free grenade based on your current grenade mod while attacking enemies.\",\n ranks: 1,\n effect: (rank, level) => `Cooldown: 15 seconds`,\n },\n \"Salvation\": {\n text: \"Kill Skill. After killing an enemy, Zane's weapons gain Life Steal for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Life Steal: +${getSalvationLifeSteal(rank)}% of damage dealt\\nDuration: 8 seconds`,\n },\n },\n \"3\": {\n \"Bad Dose\": {\n text: \"SNTNL occasionally shoots out a beam of Radiation that weakens enemies and buffs Zane.\\n\\nFor every weakened enemy, Zane's Movement Speed and Fire Rate are increased.\\n\\nWeakened enemies have decreased Movement Speed and Attack Speed.\",\n ranks: 0,\n effect: (rank, level) => `Fire Rate: +2% per affected enemy\\nMovement Speed: +6% per affected enemy\\nBeam Damage: ${flat(rank, level, 4)} (increases with character level)\\nDuration: 12 seconds\\nCooldown: 8 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Seein' Red\": {\n text: \"Activating an Action Skill automatically activates all of Zane's Kill Skills.\",\n ranks: 1,\n effect: (rank, level) => `Kill Skill Bonus: +15%`\n },\n \"Static Field\": {\n text: \"SNTNL emits a static field that sends a Shock Beam to nearby enemies, draining their shields and replenishing Zane's.\",\n ranks: 0,\n effect: (rank, level) => `Shield Damage: 2/sec (increases with character level)\\nCooldown: 2 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Boomsday\": {\n text: \"SNTNL adds a rocket pod to its primary weapons, allowing it to shoot rockets as well as machine guns. Element: Non-Elemental.\",\n ranks: 0,\n effect: (rank, level) => `Rocket Damage: ${flat(rank, level, 32)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Violent Violence\": {\n text: \"Kill Skill. After killing an enemy, Zane gains increased Fire Rate for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate: +${getViolentViolenceFireRate(rank)}%\\nCooldown: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Playing Dirty\": {\n text: \"Kill Skill. After killing an enemy, Zane's next five shots all have a chance to fire an additional projectile.\",\n ranks: 5,\n effect: (rank, level) => `Extra Shot Chance: ${percent(rank, 11.6)}%`,\n },\n \"Almighty Ordnance\": {\n text: \"Hold down [Action Skill key] while SNTNL is deployed to paint a target area. SNTNL fires a missile barrage at that area, and if an enemy is killed, SNTNL's duration is reset. This can only be used once per Action Skill use.\",\n ranks: 0,\n effect: (rank, level) => `Missile Damage: ${flat(rank, level, 56)} (increases with character level)\\nMissiles per Barrage: 4`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Good Misfortune\": {\n text: \"Kill Skill. Killing an enemy increases Zane's Action Skill Duration. This skill has diminishing returns.\",\n ranks: 3,\n effect: (rank, level) => `Action Skill Duration Returned: +${percent(rank, 4.666)}% of Max Duration`,\n },\n },\n \"6\": {\n \"Death Follows Close\": {\n text: \"All of Zane's Kill Skills gain increased effect and duration.\",\n ranks: 1,\n effect: (rank, level) => `Kill Skill Bonus: +25%\\nKill Skill Duration: +7 seconds`,\n },\n }\n },\n \"Doubled Agent\": {\n \"0\": {\n \"Digi-Clone\": {\n text: \"Spawn a Digi-Clone of Zane. The Digi-Clone stays in place, but distracts and fires at enemies. Pressing [Action Skill key] while the Digi-Clone is active causes Zane and the Digi-Clone to swap places.\",\n effect: (rank, level) => `Duration: 15 seconds\\nCooldown: 28 seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Synchronicity\": {\n text: \"Zane gains increased Gun Damage for each active Action Skill.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}% per active Action Skill`,\n },\n \"Praemunitus\": {\n text: \"Zane and his Digi-Clone gain increased Magazine Size.\",\n ranks: 3,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 8.333)}%`,\n },\n \"Borrowed Time\": {\n text: \"Zane gains increased Action Skill Duration for each active Action Skill.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Duration: +${percent(rank, 6)}% per active Action Skill`,\n },\n },\n \"2\": {\n \"Binary System\": {\n text: \"Whenever Zane swaps places with his Digi-Clone, a Cryo Nova is triggered around Zane and his Digi-Clone.\",\n ranks: 0,\n effect: (rank, level) => `Cryo Damage: ${flat(rank, level, 46)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Donnybrook\": {\n text: \"Kill Skill. Whenever Zane kills an enemy, he and his Digi-Clone receive increased Gun Damage and gain Health Regeneration for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3)}%\\nHealth Regeneration: +${percent(rank, 0.5)}% of Missing Health/sec\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Fractal Frags\": {\n text: \"The Digi-Clone throws a copy of Zane's current grenade mod when it is first activated. If the Digi-Clone is killed, it drops a free grenade.\\nKill Skill. Killing an enemy while the Digi-Clone is active gives the Digi-Clone a chance to throw a grenade.\",\n ranks: 1,\n effect: (rank, level) => `Grenade Chance: 30%`,\n },\n \"Duct Tape Mod\": {\n text: \"The first shot fired from Zane's gun has a chance to also fire a grenade. This skill has a short cooldown.\",\n ranks: 5,\n effect: (rank, level) => `Grenade Chance: up to ${percent(rank, 4)}%\\nCooldown: 4 seconds`,\n },\n },\n \"3\": {\n \"Schadenfreude\": {\n text: \"Whenever the Digi-Clone takes damage, Zane's shield is restored by a portion of that damage.\",\n ranks: 0,\n effect: (rank, level) => `Shields Restored: 100% of damage taken by Digi-Clone`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Quick Breather\": {\n text: \"Whenever Zane swaps places with his Digi-Clone, his shield immediately begins recharging and restores health to his clone.\",\n ranks: 1,\n effect: (rank, level) => `Digi-Clone Health Restored: 50% of Max Health`,\n },\n \"Which One's Real?\": {\n text: \"Enemies are more likely to target the Digi-Clone for a few seconds after it's summoned and after swapping places.\",\n ranks: 0,\n effect: (rank, level) => `Duration: 4 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Dopplebanger\": {\n text: \"Hold down [Action Skill key] to end the action skill early. When Zane's Action Skill is ended, the Digi-Clone explodes, dealing Splash Damage to all nearby enemies. The more Action Skill time remaining, the greater the damage.\",\n ranks: 0,\n effect: (rank, level) => `Damage: Up to ${flat(rank, level, 280)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Pocket Full of Grenades\": {\n text: \"Kill Skill. After killing an enemy, Zane gains Grenade Regeneration for a few seconds.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Regeneration: +${percent(rank, 5)}% per second\\nDuration: 8 seconds`,\n },\n \"Old-U\": {\n text: \"Press [Action Skill key] during Fight For Your Life if Digi-Clone is active to destroy the Digi-Clone and immediately gain a Second Wind with full health.\",\n ranks: 1,\n effect: (rank, level) => `Health Restored: 100% of Maximum Health`,\n },\n \"Supersonic Man\": {\n text: \"Whenever one or more of Zane's Action Skills are active, he gains increased Movement Speed for each active Action Skill.\",\n ranks: 3,\n effect: (rank, level) => `Movement Speed: +${percent(rank, 4)}% per active Action Skill`,\n },\n \"Digital Distribution\": {\n text: \"If Zane takes health damage while the Digi-Clone is active, a portion of that damage is shared on his Digi-Clone instead.\",\n ranks: 0,\n effect: (rank, level) => `Damage Health Shared: 75%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Like a Ghost\": {\n text: \"Zane and his Digi-Clone gain a chance to ignore bullets. This chance is increased for a few seconds after activating an Action Skill. This effect stacks.\",\n ranks: 3,\n effect: (rank, level) => `Ignore Bullet Chance: +${percent(rank, 5)}%\\nAdditional Ignore Bullet Chance: +${percent(rank, 5)}%\\nDuration: 8 seconds`,\n },\n \"Boom. Enhance.\": {\n text: \"Whenever Zane summons his Digi-Clone, it consumes up to 3 grenades. For every grenade consumed, the Digi-Clone gains increased Gun Damage, Maximum Health, Fire Rate, Reload Speed, and Digi-Clone Duration.\",\n ranks: 1,\n effect: (rank, level) => `Digi-Clone Gun Damage: +20% per grenade\\nDigi-Clone Maximum Health: +81% per grenade\\nDigi-Clone Fire Rate: +5% per grenade\\nDigi-Clone Reload Speed: +31% per grenade\\nDigi-Clone Duration: +25% per grenade`,\n },\n \"Trick of the Light\": {\n text: \"Zane deals Bonus Cryo Damage to enemies that aren't targeting him.\",\n ranks: 3,\n effect: (rank, level) => `Bonus Cryo Damage: +${percent(rank, 15)}% of damage dealt`,\n },\n },\n \"6\": {\n \"Double Barrel\": {\n text: \"The Digi-Clone is equipped with a copy of Zane's Current Weapon when activated. Swapping places with the Digi-Clone causes Zane and his Digi-Clone to gain increased Gun Damage.\",\n ranks: 1,\n effect: (rank, level) => `Gun Damage: +25%\\nItem Duping: +100%\\nDigi-Clone Gun Damage: +25%`,\n },\n },\n },\n \"The Professional\": {\n \"0\": {\n \"MNTIS Shoulder Cannon\": {\n ranks: 0,\n text: \"Zane equips a Shoulder Mount ed Cannon. Pressing [Action Skill key] causes Zane to fire his cannon at his crosshairs and consume one charge.\",\n type: SKILLS.ACTION_SKILL,\n effect: (rank, level) => `Max Charges: 3\\nCooldown: 12 seconds\\nDamage: 46`\n },\n },\n \"1\": {\n \"Man Of Focus\": {\n ranks: 5,\n text: \"Activating an Action Skill grants Zane increased Accuracy and Handling for a short time. This effect stacks.\",\n effect: (rank, level) => `Accuarcy: +${percent(rank, getManOfFocusAccuracy(rank))}%\\nHandling: +${percent(rank, getManOfFocusHandling(rank))}%\\nDuration: 12 seconds\\nMax Stacks: 10`\n },\n \"Renegade\": {\n ranks: 3,\n text: \"After scoring a Critical Hit, Zane Regenerates Health for a short time.\",\n effect: (rank, level) => `Health Regeneration: up to +${percent(rank, 0.5)}% Max Health / sec\\nDuration: 12 seconds`\n },\n \"Déjà Vu\": {\n ranks: 5,\n text: \"Whenever Zane kills an enemy with a Critical Hit, there is a chance for 1 ammo to be added to his magazine.\",\n effect: (rank, level) => `Chance to add ammo: ${percent(rank, 9)}%`\n },\n },\n \"2\": {\n \"Colder Shoulder\": {\n ranks: 0,\n text: \"Converts Zane's MNTIS Shoulder Cannon damage to Cryo Damage but deals reduced damage. Additionally, Zane gains Increased Cryo Freeze Rate.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Cannon Damage: -10%\\nFreeze Rate: +20%`\n },\n \"Headman's Hand\": {\n ranks: 5,\n text: \"Kill Skill. Zane gains increased Critical Hit Damage. This effect stacks twice.\",\n effect: (rank, level) => `Critical Hit Damage: +${percent(rank, 4)}%\\nDuration: 8 seconds`\n },\n \"Tunnel Vision\": {\n ranks: 3,\n text: \"While moving, Zane gains increased Accuracy and Handling. The quicker Zane moves, the greater the bonus.\",\n effect: (rank, level) => `Accuracy: up to +${percent(rank, 10)}% at default walk speed\\nHandling: up to +${percent(rank, 11)}% at default walk speed`\n },\n \"Commitment\": {\n ranks: 5,\n text: \"Kill Skill. Zane gains increased Gun Damage and Action Skill Cooldown Rate.\",\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}%\\nCooldown Rate: +${percent(rank, 4)}%`\n },\n },\n \"3\": {\n \"Wetwork\": {\n ranks: 0,\n text: \"Whenever Zane kills an enemy with his Shoulder Cannon, that enemy explodes into an Elemental Puddle.\",\n effect: (rank, level) => `Explosion Damage: 32 (increases with character level)\\nPuddle Damage: 18 per second (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Fugitive\": {\n ranks: 1,\n text: \"Zane can sprint and shoot at the same time.\",\n effect: (rank, level) => ``\n },\n \"Brain Drain\": {\n ranks: 0,\n text: \"Whenever Zane kills an enemy with a Critical Hit from his Shoulder Cannon, two charges are instantly returned.\",\n effect: (rank, level) => ``,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"No Way Out\": {\n ranks: 0,\n text: \"Whenever Zane damages an enemy with his Shoulder Cannon, that enemy is pulled to him and takes Increased Damage for a short time. Additionally, Zane's MNTIS Shoulder Cannon cooldown time is increased.\",\n effect: (rank, level) => `Cooldown: +20%\\nDamage Increase: +25%\\nDuration: 6 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Domino Effect\": {\n ranks: 5,\n text: \"Whenever Zane scores a Critical Hit, he gains increased Fire Rate and Reload Speed for a short time. If he scores a Critical Hit with his Action Skill, he doubles this effect.\",\n effect: (rank, level) => `Reload Speed: +${percent(rank, 4)}%\\nFire Rate: +${percent(rank, 3)}%\\nDuration: 8 seconds`\n },\n \"The Art Of War\": {\n ranks: 5,\n text: \"After activating an Action Skill or Action Skill Ability, Zane's next short fired from his weapon deals Increased Damage. This effect stacks.\",\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3)}%\\nMax Stacks: 10`\n },\n },\n \"5\": {\n \"Sheer Will\": {\n ranks: 3,\n text: \"Zane gains increased Action Skill Cooldown Rate. Scoring a Critical Hit increases this effect. This effect stacks.\",\n effect: (rank, level) => `Cooldown Rate: +${percent(rank, 5)}%\\nCooldown Rate: +${percent(rank, 2.5)}% after Critical Hit\\nDuration: 8 seconds\\nMax Stacks: 15`\n },\n \"Eraser\": {\n ranks: 3,\n text: \"Zane's Critical Hits pierce through enemies for all weapons, dealing Increased Damage for every enemy pierced.\",\n effect: (rank, level) => `Pierced Shot Damage: +${percent(rank, 40)}%`\n },\n \"Proliferation\": {\n ranks: 0,\n text: \"Zane's MNTIS Shoulder Cannon gains Additional Charges and deals Increased Damage based on the number of charges remaining.\",\n effect: (rank, level) => `Additional Charges: +2\\nCannon Damage: +20% per charge`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"6\": {\n \"Our Man Flint\": {\n ranks: 1,\n text: \"While aiming down sights, Zane's weapons deal Bonus Damage and automatically apply their Status Effect when he scores a Critical Hit.\",\n effect: (rank, level) => `Bonus Damage: 25% of damage dealt`\n },\n }\n }\n};\n\nexport default skills;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/bundle.1c326.css b/bundle.1c326.css deleted file mode 100644 index 3ec5b33..0000000 --- a/bundle.1c326.css +++ /dev/null @@ -1 +0,0 @@ -.Eq4mJ{align-self:stretch;font-family:var(--font-header);-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;display:-webkit-box;display:flex;line-height:2;background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),color-stop(8.1%,rgba(0,0,0,.494)),color-stop(15.5%,rgba(0,0,0,.476)),color-stop(22.5%,rgba(0,0,0,.448)),color-stop(29%,rgba(0,0,0,.412)),color-stop(35.3%,rgba(0,0,0,.37)),color-stop(41.2%,rgba(0,0,0,.324)),color-stop(47.1%,rgba(0,0,0,.275)),color-stop(52.9%,rgba(0,0,0,.225)),color-stop(58.8%,rgba(0,0,0,.176)),color-stop(64.7%,rgba(0,0,0,.13)),color-stop(71%,rgba(0,0,0,.088)),color-stop(77.5%,rgba(0,0,0,.052)),color-stop(84.5%,rgba(0,0,0,.024)),color-stop(91.9%,rgba(0,0,0,.006)),to(transparent));background-image:linear-gradient(0deg,rgba(0,0,0,.5) 0,rgba(0,0,0,.494) 8.1%,rgba(0,0,0,.476) 15.5%,rgba(0,0,0,.448) 22.5%,rgba(0,0,0,.412) 29%,rgba(0,0,0,.37) 35.3%,rgba(0,0,0,.324) 41.2%,rgba(0,0,0,.275) 47.1%,rgba(0,0,0,.225) 52.9%,rgba(0,0,0,.176) 58.8%,rgba(0,0,0,.13) 64.7%,rgba(0,0,0,.088) 71%,rgba(0,0,0,.052) 77.5%,rgba(0,0,0,.024) 84.5%,rgba(0,0,0,.006) 91.9%,transparent)}.Eq4mJ span a{color:inherit;-webkit-transition:color var(--transition-duration);transition:color var(--transition-duration)}.Eq4mJ a:focus,.Eq4mJ a:hover{color:#e2264d}._37Gl6{width:2em;height:2em;background:transparent url(/45598562077bdc84281b5330ff4d283e.png) no-repeat;background-size:2900%;margin:0 -.4em}._37Gl6:hover{background-position:100%;-webkit-animation:_34mPq .8s steps(28) forwards;animation:_34mPq .8s steps(28) forwards}@-webkit-keyframes _34mPq{0%{background-position:0}50%{background-position:100%}to{background-position:100%}}@keyframes _34mPq{0%{background-position:0}50%{background-position:100%}to{background-position:100%}}._2_d3x{margin:auto}.vMurv{padding:1rem;background-color:rgba(0,0,0,.5)}._3lx8i,.vMurv{text-align:center}._3lx8i{display:inline-block;margin:.5rem;background-color:#000;color:#ffd900;padding:.25em;font-weight:700;font-size:3rem;text-decoration:none}._3lx8i:focus,._3lx8i:hover{color:#000;background-color:#ffd900}._1SiOU,._3chgr{text-transform:uppercase}._3chgr{font-size:.4em}._3RIFV{position:absolute;-webkit-transform:translate(-100%,50%) rotate(-14deg);transform:translate(-100%,50%) rotate(-14deg);color:red;font-size:.5em;display:inline-block;margin-right:0}._3JH8h{position:relative;-webkit-box-flex:0;flex:0 1 auto;margin:.5rem;padding:0;height:2.5rem;width:2.5rem;line-height:1;display:-webkit-box;display:flex;text-align:center;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;color:hsla(0,0%,100%,.5);--saturation:0;--luminance:0.4}._3JH8h:after,._3JH8h:before{content:"";position:absolute;bottom:0;right:0;height:100%;width:100%;-webkit-clip-path:polygon(0 15%,15% 0,100% 0,100% 85%,85% 100%,0 100%);clip-path:polygon(0 15%,15% 0,100% 0,100% 85%,85% 100%,0 100%)}._3JH8h:before{z-index:2;background-image:-webkit-gradient(linear,left top,left bottom,from(hsl(var(--themeHue),calc(100%*var(--saturation)),calc(20%*var(--luminance)))),to(hsl(var(--themeHue),calc(100%*var(--saturation)),calc(36%*var(--luminance)))));background-image:linear-gradient(180deg,hsl(var(--themeHue),calc(100%*var(--saturation)),calc(20%*var(--luminance))),hsl(var(--themeHue),calc(100%*var(--saturation)),calc(36%*var(--luminance))));-webkit-transform:scale(.9);transform:scale(.9)}._3JH8h:after{z-index:1;background-color:hsl(var(--themeHue),calc(100%*var(--saturation)),calc(65%*var(--luminance)))}._1mLSi{--saturation:0.0;--luminance:0.75;color:var(--whiteText)}._1xemn{--saturation:0.91;--luminance:1}._3JH8h:hover{--themeHue:51;--saturation:1;--luminance:1.2;color:var(--whiteText)}._3VkFk:before{-webkit-transform:scale(.7);transform:scale(.7)}._3VkFk:after{-webkit-transform:scale(.79);transform:scale(.79)}.-z8wv:after,.-z8wv:before{-webkit-clip-path:polygon(50% 0,93.3% 25%,93.3% 75%,50% 100%,6.7% 75%,6.7% 25%);clip-path:polygon(50% 0,93.3% 25%,93.3% 75%,50% 100%,6.7% 75%,6.7% 25%)}._2t_-G:after,._2t_-G:before{-webkit-clip-path:polygon(0 0,50% 25%,100% 0,100% 75%,50% 100%,0 75%);clip-path:polygon(0 0,50% 25%,100% 0,100% 75%,50% 100%,0 75%);-webkit-transform-origin:50% 60%;transform-origin:50% 60%}._2ej0d:after,._2ej0d:before{-webkit-clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}.-z8wv,._3VkFk{margin:0;padding:.5rem;height:3.5em;width:3.5em}._3VkFk{background-color:var(--themeColor)}._3VkFk:first-child{position:absolute;right:100%}._3VkFk:last-child{position:absolute;left:100%}._3VkFk:only-child{position:relative;background-color:transparent;outline:none;left:auto;right:auto}._8ejWg{position:relative;z-index:3;mix-blend-mode:luminosity}._8ejWg>img{width:2.3em;opacity:.5}._1mLSi ._8ejWg>img,._3JH8h:hover ._8ejWg>img{opacity:1}._3DD7O{position:absolute;bottom:-.25rem;right:-.25rem;z-index:4;font-size:.6em;font-style:italic;color:var(--whiteText);font-weight:700;padding:.1em .3em .1em .15em;text-align:center;text-shadow:0 0 .5em #000;border-radius:.4em .2em;background-color:hsl(var(--themeHue),calc(100%*var(--saturation)),calc(30%*var(--luminance)));border:.15em solid;border-color:hsl(var(--themehue),calc(100%*var(--saturation)),calc(10%*var(--luminance)))}._1xemn ._3DD7O{color:hsl(var(--themeHue),91%,80%)}._394yV{margin-bottom:.5rem;font-weight:700}._1S9-f{display:none;z-index:10;text-align:left;font-size:.9rem;white-space:pre-line}.oiyDq{margin-top:.5em}._3JH8h:hover ._1S9-f{pointer-events:none;font-size:.8em;background-color:#1a1a1a;color:var(--whiteText);border:.15rem solid #000;padding:.5rem;display:block;position:absolute;bottom:100%;width:20rem;-webkit-transform:translateX(calc((1 - var(--treeindex))*40%));transform:translateX(calc((1 - var(--treeindex))*40%))}.-z8wv:hover ._1S9-f{bottom:auto;top:100%}._2zgqJ{-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:center;align-items:center;cursor:default}._1Jomm,._2zgqJ{display:-webkit-box;display:flex}._1Jomm{-webkit-box-align:stretch;align-items:stretch;margin:1rem auto}._17kLY{display:block;margin:0 auto;top:3rem;text-align:center;font-size:3rem;color:#ffd900;line-height:1}._3J3hw,._17kLY{text-transform:uppercase}._3J3hw{font-size:.4em}._2UO55{margin-left:.5rem;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;width:6em}._1Jomm>nav>a,._17kLY,.K9CBr>a,.xH9ts{background-color:#000;padding:.5rem}.K9CBr,.K9CBr>a,.xH9ts{position:relative;display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;-webkit-box-flex:1;flex:1}.K9CBr{margin-top:.5rem;cursor:pointer;font-size:.8em}.K9CBr>a:hover{color:#fff;background-color:red}.xH9ts:after{position:absolute;z-index:1;width:10em;top:60%;text-shadow:0 0 .2em #000;text-transform:uppercase;font-size:.8em;font-weight:700;pointer-events:none;text-align:center}._1Jomm>nav{display:-webkit-box;display:flex;-webkit-box-align:stretch;align-items:stretch}._1Jomm>nav>a{margin-left:.5rem;-webkit-writing-mode:vertical-rl;writing-mode:vertical-rl;text-orientation:mixed;text-decoration:none;color:#ffd900;text-transform:uppercase;font-weight:700}._1Jomm>nav>a:hover{background-color:#ffd900;color:#000}._3Ch4X,._3ek45{display:-webkit-box;display:flex}._1WAM2{text-align:center;-webkit-box-ordinal-group:2;order:1;font-size:1em;line-height:1.5rem}.gRWZY{--themeColor:hsl(var(--themeHue),91%,22%);display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;margin:1rem;padding:0 3.5rem;background-image:-webkit-gradient(linear,left bottom,left top,from(var(--themeColor)),to(var(--themeColor)));background-image:linear-gradient(0deg,var(--themeColor),var(--themeColor));background-size:100% calc(100% - 1.5rem);background-repeat:no-repeat;background-position:bottom;background-clip:content-box;color:hsla(0,0%,100%,.8)}._2Su0b{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;height:24.5rem}._2Su0b:before{--gradientStop:calc(var(--invested)*0.7rem + 5.15rem);content:"";position:absolute;top:1.85rem;bottom:0;left:.375rem;right:.375rem;background-image:linear-gradient(180deg,hsl(var(--themeHue),91%,30%) calc(var(--gradientStop) - 1rem),hsl(var(--themeHue),91%,50%) var(--gradientStop),hsl(var(--themeHue),91%,15%) calc(var(--gradientStop) + 1px));border:.15rem solid rgba(0,0,0,.8)}._3Ch4X{width:calc(10.5rem + .5em);-webkit-box-pack:center;justify-content:center;position:relative}.-Pl7G{--themeHue:106}._1nm1I{--themeHue:207}._3T1pZ{--themeHue:18}a{color:inherit}:root{--radius:2px;--whiteText:hsla(0,0%,100%,0.8);--blackText:rgba(0,0,0,0.8);--transition-duration:300ms;--font-header:sans-serif;--font-list:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:1.5vw}@media screen and (min-width:189vh){:root{font-size:2.835vh}}*{margin:0;padding:0}*,:after,:before{box-sizing:border-box}body{position:relative;min-height:100vh;color:#f8f8fa;font-family:var(--font-list);-webkit-font-smoothing:antialiased;background-color:#333;background-image:url(/6274c9808eb08785f146a2b78283b5f6.jpg);background-size:cover;background-position:50%;-webkit-box-pack:center;justify-content:center}body,body>*{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:stretch;align-items:stretch}body>*{-webkit-box-flex:1;flex-grow:1;-webkit-box-pack:justify;justify-content:space-between} \ No newline at end of file diff --git a/bundle.27db9fed.js b/bundle.27db9fed.js deleted file mode 100644 index 4a472c7..0000000 --- a/bundle.27db9fed.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e){function n(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}var t={};n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(a,r,function(n){return e[n]}.bind(null,r));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="/",n(n.s=0)}({"/Yqc":function(e,n){function t(){return"serviceWorker"in navigator&&("https:"===window.location.protocol||"localhost"===window.location.hostname||0===window.location.hostname.indexOf("127."))}n.install=function(e){if(e||(e={}),t()){var n=navigator.serviceWorker.register("/sw.js",{}),a=function(e){function n(){switch(o.state){case"redundant":r("onUpdateFailed"),o.onstatechange=null;break;case"installing":a||r("onUpdating");break;case"installed":i||r("onUpdateReady");break;case"activated":r("onUpdated"),o.onstatechange=null}}function t(){switch(o.state){case"redundant":o.onstatechange=null;break;case"installing":case"installed":break;case"activated":r("onInstalled"),o.onstatechange=null}}var a,i,s,o=e.installing||e.waiting;o&&!o.onstatechange&&(e.active?(n(),s=n):(t(),s=t),a=!0,e.waiting&&(i=!0),o.onstatechange=s)},r=function(n){"function"==typeof e[n]&&e[n]({source:"ServiceWorker"})};n.then(function(e){e&&(a(e),e.onupdatefound=function(){a(e)})}).catch(function(e){return r("onError"),Promise.reject(e)})}},n.applyUpdate=function(e,n){t()&&navigator.serviceWorker.getRegistration().then(function(t){t&&t.waiting?(t.waiting.postMessage({action:"skipWaiting"}),e&&e()):n&&n()})},n.update=function(){t()&&navigator.serviceWorker.getRegistration().then(function(e){if(e)return e.update()})}},0:function(e,n,t){e.exports=t("QfWi")},"31cR":function(e){e.exports={skill:"_3JH8h",enabled:"_1mLSi",usable:"_1xemn",augment:"_3VkFk",actionSkill:"-z8wv",chevron:"_2t_-G",diamond:"_2ej0d",image:"_8ejWg",ranks:"_3DD7O",skillTitle:"_394yV",description:"_1S9-f",effect:"oiyDq"}},"9fQE":function(e,n,t){"use strict";(function(e){function a(n){var t=n.path;return e("nav",null,[{name:"Zane",path:"/operative"},{name:"Amara",path:"/siren"},{name:"FL4K",path:"/beastmaster"},{name:"Moze",path:"/gunner"}].map(function(n){return t===n.path?null:e(r.a,{href:n.path},n.name)}))}t.d(n,"a",function(){return a});var r=t("Y3FI")}).call(this,t("gDde").h)},"Et/u":function(e,n,t){"use strict";function a(e,n){return Math.round(e*n*10)/10}function r(e,n,t){return Math.floor(e*t)}var i=t("LMbI");n.a={Brawl:{0:{Phaseslam:{text:"Amara leaps into the air and Slams the ground, dealing damage to all nearby enemies and knocking them up. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,98)+" (increases with character level)\nCooldown: 35 Seconds"},type:i.a.ACTION_SKILL,ranks:0}},1:{"Root to Rise":{ranks:5,text:"Amara gains increased Maximum Health.",effect:function(e){return"Maximum Health: +"+a(e,8)+"%"}},"Personal Space":{ranks:3,text:"Amara's weapon shots deal Bonus Damage based on the distance to her target. The closer the target, the greater the bonus.",effect:function(e){return"Bonus Damage: Up to +"+a(e,18)+"% of damage dealt"}},Clarity:{ranks:5,text:"Amara constantly regenerates health. The lower her health, the more powerful the regeneration. After using an Action Skill, this bonus is doubled for a few seconds.",effect:function(e){return"Health Regen: Up to +"+a(e,1)+"% of Missing Health/sec\nAdditional Regen: Up to +"+a(e,1)+"% of Missing Health/sec\nDuration: 5 seconds"}}},2:{"Arms Deal":{ranks:5,text:"Amara deals increased Splash Damage and takes reduced Splash Damage.",effect:function(e){return"Splash Damage: +"+a(e,4)+"%\nSplash Damage Resistance: +"+function(e){switch(e){case 1:return 12;case 2:return 21;case 3:return 28;case 4:return 35;case 5:return 40;default:return 0}}(e)+"%"}},Samsara:{ranks:3,text:"Whenever Amara deals damage to an enemy with her Action Skill, she adds a stack of Samsara. For every stack of Samsara, Amara gains increased Gun Damage and Health Regeneration for a few seconds. Stacks decay after a few seconds.",effect:function(e){return"Gun Damage: +"+a(e,1.7)+"% per stack\nHealth Regen: +"+a(e,1.7)+"% of Missing Health/sec per stack\nMaximum Stacks: 5\nDuration: 20 seconds"}},"Helping Hand(s)":{ranks:5,text:"For a few seconds after using her Action Skill, Amara's arms remain active and grant her Damage Resistance.",effect:function(e){return"Damage Resistance: +"+function(e){switch(e){case 1:return 12;case 2:return 21;case 3:return 28;case 4:return 35;case 5:return 40;default:return 0}}(e)+"%\nDuration: 15 seconds"}},"Blight Tiger":{ranks:0,text:"Converts Amara's Action Skill to Corrosive Damage.",effect:function(){return"Action Skill Element: Corrosive."},type:i.a.AUGMENT_DIAMOND}},3:{Fracture:{ranks:0,text:"Amara summons a line of fists that erupt from the ground, dealing damage to enemies in front of Amara. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,88)+" (increases with character level)\nCooldown: 28 seconds"},type:i.a.AUGMENT_ACTION_SKILL},Mindfulness:{ranks:3,text:"Whenever Amara takes damage, she gains a stack of Mindfulness. For every stack of Mindfulness, Amara gains improved Shield Regeneration Delay and Movement Speed. Stacks decay after a few seconds.",effect:function(e){return"Shield Regeneration Delay: -"+function(e){switch(e){case 1:return 9;case 2:return 17;case 3:return 23;default:return 0}}(e)+"% per stack\nMovement Speed: +"+a(e,1.4)+"% per stack\nMaximum Stacks: 25\nDuration: 5 seconds"}},"Find Your Center":{ranks:1,text:"Amara gains increased Melee Damage. Additionally, for a few seconds after using her Action Skill, Amara gains increased Melee Range.",effect:function(){return"Melee Damage: +100%\nMelee Range: +75%\nDuration: 20 seconds"}},Vigor:{ranks:3,text:"Kill Skill. Killing an enemy with Amara's Action Skill grants all allies increased Movement Speed for a few seconds.",effect:function(e){return"Team Movement Speed: +"+a(e,3.333)+"%\nDuration: 8 seconds"}},Revelation:{ranks:0,text:"Amara's Action Skill now creates a Nova when it damages enemies, dealing damage to all nearby enemies.",effect:function(e){return"Nova Damage: "+r(e,0,41)+" (increases with character level)\nAction Skill Damage: -15%"},type:i.a.AUGMENT_CHEVRON}},4:{Downfall:{ranks:0,text:"Amara leaps into the air and shoots an Elemental Beam below her, followed by a Slam. Element: Shock.",effect:function(e){return"Beam Damage: "+r(e,0,14)+" per second (increases with character level)\nSlam Damage: "+r(e,0,95)+" (increases with character level)\nCooldown: 47 seconds"},type:i.a.AUGMENT_ACTION_SKILL},"One With Nature":{ranks:5,text:"Amara gains increased Maximum Health and Elemental Damage Resistance to her Action Skill Element.",effect:function(e){return"Maximum Health: +"+a(e,5)+"%\nElemental Damage Resistance: +"+function(e){switch(e){case 1:return 12;case 2:return 21;case 3:return 28;case 4:return 35;case 5:return 40;default:return 0}}(e)+"%"}}},5:{"Do Unto Others":{ranks:1,text:"Whenever an enemy damages Amara, she automatically throws an energy orb back at them, dealing Action Skill Elemental Damage. This skill has a short cooldown.",effect:function(){return"Cooldown: 8 seconds"}},"Jab Cross":{ranks:5,text:"Whenever Amara deals melee damage to an enemy, she gains increased Action Skill Damage and increased Gun Damage for a few seconds.",effect:function(e){return"Action Skill Damage: +"+a(e,15)+"%\nGun Damage: +"+a(e,3)+"%\nDuration: 10 seconds"}},"Guardian Angel":{ranks:1,text:"When Amara enters Fight For Your Life, she immediately gains a Second Wind, restores her health, and creates an Action Skill Elemental Nova that may knock back nearby enemies. This skill has a long cooldown.",effect:function(){return"Health Restored: 50% of Maximum Health\nCooldown: 120 seconds"}},Glamour:{ranks:0,text:"Enemies damaged by Amara's Action Skill become confused and temporarily attack their allies. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are confused as well.",effect:function(){return"Confuse Duration: 8 seconds\nAction Skill Damage: -10%\nAction Skill Cooldown: +20%"},type:i.a.AUGMENT_CHEVRON}},6:{Blitz:{ranks:1,text:"Melee Override. Press [Melee key] while aiming at an enemy to make Amara dash a short distance forward and perform a special melee strike, dealing Elemental Melee Damage. If a Blitz melee attack kills an enemy, Blitz's cooldown is immediately reset.",effect:function(){return"Melee Damage: +100%\nCooldown: 8 seconds"}}}},"Mystical Assault":{0:{Phasecast:{text:"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,92)+"\nCooldown: 28 Seconds"},type:i.a.ACTION_SKILL,ranks:0}},1:{"Do Harm":{ranks:5,text:"Killing an enemy grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Action Skill Damage is temporarily increased.",effect:function(e){return"Action Skill Dmg: +"+a(e,.9)+"% per Rush stack consumed\nMaximum Rush Stacks: 10\nDuration: 20 seconds"}},"Fast Hand(s)":{ranks:3,text:"Amara's Reload Speed, Weapon Swap Speed, and Mode Switch Speed are improved.",effect:function(e){return"Reload Speed: +"+function(e){switch(e){case 1:return 7;case 2:return 14;case 3:return 19;default:return 0}}(e)+"%\nWeapon Swap Speed: +"+function(e){switch(e){case 1:return 16;case 2:return 28;case 3:return 36;default:return 0}}(e)+"%\nMode Switch Speed: +"+function(e){switch(e){case 1:return 16;case 2:return 28;case 3:return 36;default:return 0}}(e)+"%"}},"Violent Tapestry":{ranks:5,text:"Applying a Status Effect grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Status Effect Chance is temporarily increased.",effect:function(e){return"StatusEffect Chance: +"+a(e,.6)+"% per Rush stack consumed\nMaximum Rush Stacks: 10\nDuration: 20 seconds"}}},2:{Alacrity:{ranks:5,text:"Amara gains increased Reload Speed for every stack of Rush. After consuming Rush stacks, this bonus is increased for a few seconds.",effect:function(e){return"Reload Speed: +"+a(e,.4)+"% per Rush stack\nAdditional Reload Speed: +"+function(e){switch(e){case 1:return.6;case 2:return 1.2;case 3:return 1.8;case 4:return 2.3;case 5:return 2.9;default:return 0}}(e)+"% per Rush stack consumed\nDuration: 8 seconds"}},Transcend:{ranks:3,text:"Amara gains increased Accuracy and Critical Hit Damage for a few seconds after activating her Action Skill.",effect:function(e){return"Accuracy: +"+function(e){switch(e){case 1:return 17;case 2:return 29;case 3:return 38;default:return 0}}(e)+"%\nCritical Hit Damage: +"+a(e,9)+"%\nDuration: 12 seconds"}},Restless:{ranks:5,text:"Amara gains increased Action Skill Cooldown Rate.",effect:function(e){return"Action Skill Cooldown Rate: +"+a(e,5)+"%"}},"Soul Sap":{ranks:0,text:"A portion of all damage dealt by Amara's Action Skill is returned to her or a nearby ally as health.",effect:function(){return"Action Skill Life Steal: 30% of damage dealt"},type:i.a.AUGMENT_CHEVRON}},3:{Deliverance:{ranks:0,text:"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Whenever Amara's Astral Projection damages an enemy or object, it releases homing Elemental Projectiles that trigger her Action Skill Elemental Effect on enemies. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,86)+" (increases with character level)\nElemental Projectiles: 3 per enemy or object hit\nCooldown: 28 seconds"},type:i.a.AUGMENT_ACTION_SKILL},Ascendant:{ranks:1,text:"All Action Skill Augments gain increased effects.",effect:function(){return"Soul Sap Life Steal: +20%\nAllure Radius: +100%\nGlamour Duration: +50%\nStillness of Mind: Breaks 0.75 sec after taking dmg\nRevelation Damage: +25%"}},"Stillness of Mind":{ranks:0,text:"Enemies damaged by Amara's Action Skill become phaselocked until they are damaged or the duration ends. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are also phaselocked.",effect:function(){return"Phaselock Duration: 6 seconds\nAction Skill Damage: -25%\nAction Skill Cooldown: +15%"},type:i.a.AUGMENT_CHEVRON}},4:{Reverberation:{ranks:0,text:"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Astral Projection deals increased damage for every enemy it hits. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,88)+" (increases with character level)\nDamage Bonus: +50% per enemy hit\nCooldown: 30 seconds"},type:i.a.AUGMENT_ACTION_SKILL},"From Rest":{ranks:3,text:"Amara gains improved Fire Rate and Charge Time.",effect:function(e){return"Fire Rate: +"+a(e,4)+"%\nCharge Time: +"+function(e){switch(e){case 1:return 21;case 2:return 34;case 3:return 44;default:return 0}}(e)+"%"}},"Laid Bare":{ranks:3,text:"Enemies take increased damage from all sources for a few seconds after being damaged by Amara's Action Skill.",effect:function(e){return"Damage Increase: +"+a(e,8.333)+"%\nDuration: 8 seconds"}},Wrath:{ranks:3,text:"Amara gains increased Gun Damage. This effect is increased after she activates her Action Skill for a few seconds.",effect:function(e){return"Gun Damage: +"+function(e){switch(e){case 1:return 6.7;case 2:return 13.3;case 3:return 20;default:return 0}}(e)+"%\nAdditional Gun Damage: +"+function(e){switch(e){case 1:return 6.7;case 2:return 13.3;case 3:return 20;default:return 0}}(e)+"%\nDuration: 8 seconds"}}},5:{Remnant:{ranks:3,text:"When Amara kills an enemy with a Gun or Action Skill, she creates a homing projectile that seeks out a new enemy dealing her Action Skill Elemental Damage. Any Overkill Damage is added to the projectile's damage.",effect:function(e){return"Remnant Base Damage: "+r(e,0,9)+" (increases with character level)"}},Awakening:{ranks:3,text:"Amara's Rush stacks gain increased effectiveness.",effect:function(e){return"Rush Stack Effectiveness: +"+a(e,10)+"%"}},Tandava:{ranks:0,text:"Amara sends forward an Astral Projection of herself. When it hits a target, it explodes, damaging all nearby enemies. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,91)+" (increases with character level)\nCooldown: 35 seconds"},type:i.a.AUGMENT_ACTION_SKILL}},6:{Avatar:{ranks:1,text:"Amara's Action Skill can be activated while it's cooling down. This skill may only be used once per completed cooldown. Additionally, increases Amara's Maximum Rush Stacks. Additionally, if Amara's Action Skill kills an enemy, it refunds half of her Rush stacks.",effect:function(){return"Maximum Rush Stacks: +10"}}}},"Fist of the Elements":{0:{Phasegrasp:{text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:function(e){return"Skill Duration: 7 seconds\nCooldown: 16 seconds\nGrasp Immune Damage: "+r(e,0,28)+" (increases with character level)"},type:i.a.ACTION_SKILL,ranks:0}},1:{Anima:{ranks:5,text:"Amara's Status Effects deal increased damage over time and have increased duration. Her Action Skill Status Effect deals further increased damage.",effect:function(e){return"Action Skill Status Effect Damage: +"+a(e,8)+"%\nOther Status Effect Damage: +"+a(e,4)+"%\nStatus Effect Duration: +"+a(e,20)+"%"}},"Steady Hands":{ranks:3,text:"Amara gains increased Weapon Handling and Accuracy.",effect:function(e){return"Handling: +"+function(e){switch(e){case 1:return 14;case 2:return 24;case 3:return 32;default:return 0}}(e)+"%\nAccuracy: +"+function(e){switch(e){case 1:return 13;case 2:return 23;case 3:return 31;default:return 0}}(e)+"%"}},Infusion:{ranks:5,text:"Convert a portion of damage dealt by Amara's weapons into her Action Skill Element.",effect:function(e){return"Converted Damage: "+a(e,8)+"%"}}},2:{Tempest:{ranks:5,text:"Amara deals increased Elemental Damage. Shock Damage is further increased.",effect:function(e){return"Shock Damage: +"+a(e,8)+"%\nOther Elemental Damage: +"+a(e,6)+"%"}},"Illuminated Fist":{ranks:1,text:"Amara gains increased Melee Damage and her Melee Damage is converted to Action Skill Element.",effect:function(){return"Melee Damage: +75%"}},Wildfire:{ranks:5,text:"Whenever Amara applies a Status Effect to an enemy, it has a chance to spread to a nearby enemy.",effect:function(e){return"Spread Chance: +"+a(e,8)+"%"}},Soulfire:{ranks:0,text:"Converts Amara's Action Skill to Incendiary Damage.",effect:function(){return"Action Skill Element: Incendiary."},type:i.a.AUGMENT_DIAMOND}},3:{"The Eternal Fist":{ranks:0,text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Whenever the Grasped enemy is killed, a new fist seeks out and Grasps a new target. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:function(e){return"Bonus Targets: Up to +4\nDuration: 7 seconds\nCooldown: 20 seconds\nGrasp Immune Damage: "+r(e,0,28)+" (increases with character level)"},type:i.a.AUGMENT_ACTION_SKILL},Dread:{ranks:1,text:"Amara's Gun Damage is increased for a few seconds after an enemy is Grasped. Whenever any player kills a Grasped enemy, their current weapon is instantly reloaded.",effect:function(){return"Gun Damage: +15%\nDuration: 8 seconds"}},Allure:{ranks:0,text:"Amara's Action Skill creates a singularity that pulls in enemies.",effect:function(){return"Duration: 2.5 seconds\nAction Skill Damage: -20%"},type:i.a.AUGMENT_CHEVRON}},4:{Indiscriminate:{ranks:3,text:"Amara's bullets that damage enemies have a chance to ricochet and deal decreased damage to other nearby enemies. Ricochet Chance and Damage are increased if target is affected by Phasegrasp or Stillness of Mind.",effect:function(e){return"Ricochet Chance: +"+a(e,10)+"%\nRicochet Damage: 50% of damage dealt\nAction Skill Ricochet Chance: +"+a(e,20)+"%\nAction Skill Ricochet Damage: 75% of damage dealt"}},"Deep Well":{ranks:1,text:"Amara gains increased Magazine Size with elemental weapons.",effect:function(){return"Magazine Size: +20%"}},Catharsis:{ranks:3,text:"Whenever Amara triggers an elemental effect on an enemy, when that enemy dies that enemy explodes, dealing her attuned element damage along with any other element that is currently inflicted upon that enemy. This skill has a short cooldown.",effect:function(e){return"Damage: "+r(e,0,4)+" (increases with character level)\nCooldown: 8 seconds"}},"Ties That Bind":{ranks:0,text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Enemies near the Grasped target are linked, and any damage dealt to a linked target is shared between all other linked targets. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:function(e){return"Linked Damage: 35% of damage dealt\nDuration: 7 seconds\nCooldown: 18 seconds\nGrasp Immune Damage: "+r(e,0,34)+" (increases with character level)"},type:i.a.AUGMENT_ACTION_SKILL}},5:{"Fist Over Matter":{ranks:0,text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. After Grasping the targeted enemy, large fists appear and constantly smash the area, dealing damage to nearby enemies. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.",effect:function(e){return"Damage: "+r(e,0,35)+" (increases with character level)\nDuration: 7 seconds\nCooldown: 28 seconds\nGrasp Immune Damage: "+r(e,0,39)+" (increases with character level)"},type:i.a.AUGMENT_ACTION_SKILL},Sustainment:{ranks:5,text:"Amara gains Life Steal whenever she deals Elemental Damage with her weapon.",effect:function(e){return"Elemental Weapon Life Steal: +"+a(e,4)+"% of damage dealt"}},Conflux:{ranks:5,text:"Whenever Amara applies a Status Effect to an enemy, she gains a chance to randomly Electrocute, Ignite, or Melt that enemy.",effect:function(e){return"Extra Status Effect Chance: +"+a(e,7)+"%"}}},6:{"Forceful Expression":{ranks:1,text:"Amara's guns deal Bonus Elemental Damage based on her Action Skill Element.",effect:function(){return"Bonus Elemental Damage: +18% of damage dealt"}}}}}},Fl18:function(e,n,t){"use strict";(function(e){var a=t("laFY"),r=t.n(a),i=e("span",null,e("a",{href:"https://borderlands.com/"},"Official Borderlands website")," - ",e("a",{href:"https://github.com/seigler/bl3skills.com"},"Source Code")," - ",e("a",{href:"https://github.com/seigler/bl3skills.com/labels/bug"},e("img",{alt:"GitHub issues: bugs",src:"https://img.shields.io/github/issues-raw/seigler/bl3skills.com/bug"}))," ",e("a",{href:"https://github.com/seigler/bl3skills.com/labels/enhancement"},e("img",{alt:"GitHub issues: enhancements",src:"https://img.shields.io/github/issues-raw/seigler/bl3skills.com/enhancement"}))," ",e("img",{alt:"GitHub contributors",src:"https://img.shields.io/github/contributors/seigler/bl3skills.com"}));n.a=function(){return e("footer",{class:r.a.footer},i)}}).call(this,t("gDde").h)},G9Up:function(e,n,t){"use strict";(function(e){var a=t("Y3FI"),r=t("NZ6x"),i=t("cY+X"),s=t("rFP/"),o=t("x3c/"),c=t("cQx2"),l=e(a.b,null,e(r.a,{path:"/"}),e(i.a,{path:"/operative"}),e(s.a,{path:"/siren"}),e(o.a,{path:"/beastmaster"}),e(c.a,{path:"/gunner"}));n.a=function(){return l}}).call(this,t("gDde").h)},J3pd:function(e,n,t){"use strict";(function(e){function a(){return(a=Object.assign||function(e){for(var n=1;n=5*o-5,level:Object(d.a)(t.state),image:"../../assets/hunters/"+g+"/"+r+o+l+".png",onChange:y(c,r,n,o)}))}))})))}),v=Object(d.a)(this.state);return e("div",null,e("div",{class:h.a.header},e("h1",{class:h.a.title},c,e("div",{class:h.a.subtitle},"the ",g)),e("div",{class:h.a.sidepanel},e("div",{class:h.a.level},"Level ",v),e("div",{class:h.a.reset},e("a",{onClick:function(){Object(l.b)(k),t.setState({invested:[0,0,0],skills:k||{}})}},"Reset"))),e(o.a,{path:p})),e("main",null,e("div",{class:h.a.VaultHunter,onContextMenu:r},e("div",{class:h.a.trees},S))),m)},t}(i.Component)}).call(this,t("gDde").h)},LMbI:function(e,n){"use strict";n.a={ACTION_SKILL:1,AUGMENT_CHEVRON:2,AUGMENT_DIAMOND:3,AUGMENT_ACTION_SKILL:4}},MKmk:function(e){e.exports={VaultHunter:"_2zgqJ",header:"_1Jomm",title:"_17kLY",subtitle:"_3J3hw",sidepanel:"_2UO55",level:"xH9ts",reset:"K9CBr",trees:"_3ek45",tier:"_3Ch4X",treeName:"_1WAM2",tree:"gRWZY",skills:"_2Su0b",green:"-Pl7G",blue:"_1nm1I",red:"_3T1pZ"}},NZ6x:function(e,n,t){"use strict";(function(e){var a=t("Y3FI"),r=t("Fl18"),i=t("odKX"),s=t.n(i),o=e(r.a,null);n.a=function(){return e("div",null,e("div",{class:s.a.splash},e("div",{class:s.a.wrapper},e("h1",null,e("div",{class:s.a.disclaimer},"(Unofficial)"),"Borderlands 3 skill calculator"),[{name:"Zane",job:"the Operative",path:"/operative"},{name:"Amara",job:"the Siren",path:"/siren"},{name:"FL4K",job:"the Beastmaster",path:"/beastmaster"},{name:"Moze",job:"the Gunner",path:"/gunner"}].map(function(n){return e(a.a,{class:s.a.link,href:n.path},e("div",{class:s.a.name},n.name,e("div",{class:s.a.job},n.job)))}))),o)}}).call(this,t("gDde").h)},QfWi:function(e,n,t){"use strict";t.r(n);var a=t("gDde"),r=t("G9Up"),i=(t("pyAK"),document.querySelector("#app"));Object(a.render)(Object(a.h)(r.a,null),i,i.firstElementChild);t("/Yqc").install()},Y3FI:function(e,n,t){"use strict";function a(e,n){for(var t in n)e[t]=n[t];return e}function r(e,n){return e.rankn.rank?-1:e.index-n.index}function i(e,n){return e.index=n,e.rank=function(e){return e.attributes.default?0:(n=e.attributes.path,s(n).map(o).join(""));var n}(e),e.attributes}function s(e){return e.replace(/(^\/+|\/+$)/g,"").split("/")}function o(e){return":"==e.charAt(0)?1+"*+?".indexOf(e.charAt(e.length-1))||4:5}function c(){var e;return""+((e=k&&k.location?k.location:k&&k.getCurrentLocation?k.getCurrentLocation():"undefined"!=typeof location?location:v).pathname||"")+(e.search||"")}function l(e,n){return void 0===n&&(n=!1),"string"!=typeof e&&e.url&&(n=e.replace,e=e.url),function(e){for(var n=y.length;n--;)if(y[n].canRoute(e))return!0;return!1}(e)&&function(e,n){void 0===n&&(n="push"),k&&k[n]?k[n](e):"undefined"!=typeof history&&history[n+"State"]&&history[n+"State"](null,null,e)}(e,n?"replace":"push"),u(e)}function u(e){for(var n=!1,t=0;t0},n.prototype.routeTo=function(e){return this._didRoute=!1,this.setState({url:e}),this.updating?this.canRoute(e):(this.forceUpdate(),this._didRoute)},n.prototype.componentWillMount=function(){y.push(this),this.updating=!0},n.prototype.componentDidMount=function(){var e=this;k&&(this.unlisten=k.listen(function(n){e.routeTo(""+(n.pathname||"")+(n.search||""))})),this.updating=!1},n.prototype.componentWillUnmount=function(){"function"==typeof this.unlisten&&this.unlisten(),y.splice(y.indexOf(this),1)},n.prototype.componentWillUpdate=function(){this.updating=!0},n.prototype.componentDidUpdate=function(){this.updating=!1},n.prototype.getMatchingChildren=function(e,n,t){return e.filter(i).sort(r).map(function(e){var r=function(e,n,t){var a,r=/(?:\?([^#]*))?(#.*)?$/,i=e.match(r),o={};if(i&&i[1])for(var c=i[1].split("&"),l=0;l2;)R.push(arguments[i]);for(n&&null!=n.children&&(R.length||R.push(n.children),delete n.children);R.length;)if((a=R.pop())&&void 0!==a.pop)for(i=a.length;i--;)R.push(a[i]);else"boolean"==typeof a&&(a=null),(r="function"!=typeof e)&&(null==a?a="":"number"==typeof a?a+="":"string"!=typeof a&&(r=!1)),r&&t?s[s.length-1]+=a:s===_?s=[a]:s.push(a),t=r;var o=new M;return o.nodeName=e,o.children=s,o.attributes=null==n?void 0:n,o.key=null==n?void 0:n.key,void 0!==C.vnode&&C.vnode(o),o}function t(e,n){for(var t in n)e[t]=n[t];return e}function a(e,n){null!=e&&("function"==typeof e?e(n):e.current=n)}function r(e){!e.__d&&(e.__d=!0)&&1==T.push(e)&&(C.debounceRendering||E)(i)}function i(){for(var e;e=T.pop();)e.__d&&A(e)}function s(e,n,t){return"string"==typeof n||"number"==typeof n?void 0!==e.splitText:"string"==typeof n.nodeName?!e._componentConstructor&&o(e,n.nodeName):t||e._componentConstructor===n.nodeName}function o(e,n){return e.__n===n||e.nodeName.toLowerCase()===n.toLowerCase()}function c(e){var n=t({},e.attributes);n.children=e.children;var a=e.nodeName.defaultProps;if(void 0!==a)for(var r in a)void 0===n[r]&&(n[r]=a[r]);return n}function l(e){var n=e.parentNode;n&&n.removeChild(e)}function u(e,n,t,r,i){if("className"===n&&(n="class"),"key"===n);else if("ref"===n)a(t,null),a(r,e);else if("class"!==n||i)if("style"===n){if(r&&"string"!=typeof r&&"string"!=typeof t||(e.style.cssText=r||""),r&&"object"==typeof r){if("string"!=typeof t)for(var s in t)s in r||(e.style[s]="");for(var s in r)e.style[s]="number"==typeof r[s]&&!1===N.test(s)?r[s]+"px":r[s]}}else if("dangerouslySetInnerHTML"===n)r&&(e.innerHTML=r.__html||"");else if("o"==n[0]&&"n"==n[1]){var o=n!==(n=n.replace(/Capture$/,""));n=n.toLowerCase().substring(2),r?t||e.addEventListener(n,d,o):e.removeEventListener(n,d,o),(e.__l||(e.__l={}))[n]=r}else if("list"!==n&&"type"!==n&&!i&&n in e){try{e[n]=null==r?"":r}catch(e){}null!=r&&!1!==r||"spellcheck"==n||e.removeAttribute(n)}else{var c=i&&n!==(n=n.replace(/^xlink:?/,""));null==r||!1===r?c?e.removeAttributeNS("http://www.w3.org/1999/xlink",n.toLowerCase()):e.removeAttribute(n):"function"!=typeof r&&(c?e.setAttributeNS("http://www.w3.org/1999/xlink",n.toLowerCase(),r):e.setAttribute(n,r))}else e.className=r||""}function d(e){return this.__l[e.type](C.event&&C.event(e)||e)}function f(){for(var e;e=F.shift();)C.afterMount&&C.afterMount(e),e.componentDidMount&&e.componentDidMount()}function h(e,n,t,a,r,i){H++||(L=null!=r&&void 0!==r.ownerSVGElement,G=null!=e&&!("__preactattr_"in e));var s=m(e,n,t,a,i);return r&&s.parentNode!==r&&r.appendChild(s),--H||(G=!1,i||f()),s}function m(e,n,t,a,r){var i=e,s=L;if(null!=n&&"boolean"!=typeof n||(n=""),"string"==typeof n||"number"==typeof n)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=n&&(e.nodeValue=n):(i=document.createTextNode(n),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),p(e,!0))),i.__preactattr_=!0,i;var c=n.nodeName;if("function"==typeof c)return w(e,n,t,a);if(L="svg"===c||"foreignObject"!==c&&L,c+="",(!e||!o(e,c))&&(i=function(e,n){var t=n?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e);return t.__n=e,t}(c,L),e)){for(;e.firstChild;)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),p(e,!0)}var l=i.firstChild,u=i.__preactattr_,d=n.children;if(null==u){u=i.__preactattr_={};for(var f=i.attributes,h=f.length;h--;)u[f[h].name]=f[h].value}return!G&&d&&1===d.length&&"string"==typeof d[0]&&null!=l&&void 0!==l.splitText&&null==l.nextSibling?l.nodeValue!=d[0]&&(l.nodeValue=d[0]):(d&&d.length||null!=l)&&g(i,d,t,a,G||null!=u.dangerouslySetInnerHTML),y(i,n.attributes,u),L=s,i}function g(e,n,t,a,r){var i,o,c,u,d,f=e.childNodes,h=[],g={},k=0,y=0,S=f.length,v=0,D=n?n.length:0;if(0!==S)for(var A=0;A2?[].slice.call(arguments,2):e.children)},createRef:function(){return{}},Component:b,render:function(e,n,t){return h(t,e,{},!1,n,!1)},rerender:i,options:C}}()},gqmc:function(e,n,t){"use strict";function a(e){for(var n=0,t=[0,0,0],a=0,r=0,i=Object.values(e);rh.ranks)return!1;u+=h.invested||0}if(u>0&&s+5<5*o)return!1;s+=u,o+=1}t[a]=s,n+=s,a+=1}return!(n>69)&&t}function r(e){for(var n=1;n0)?o.a.usable:""].join(" "),onClick:t,onContextMenu:t},e("div",{class:o.a.image},e("img",{src:b,alt:a(s)})),w&&h>0&&e("div",{class:o.a.ranks},g,"/",h),e("div",{class:o.a.description},e("h3",{class:o.a.skillTitle},s),d,g>0&&e("div",{class:o.a.effect},"Current Effect:",c,S(g,k)),null!==D&&e("div",{class:o.a.effect},S(1,k)),null==D&&g\n {\n pages.map(page => (\n path === page.path ? null : {page.name}\n ))\n }\n \n );\n}\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\nfunction flat (rank, level, unit) {\n return Math.floor(rank * unit);\n}\n\n// Arms Deal Splash Damage Resistance\nfunction getArmsDealSplashDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Helping Hand(s) Damage Resistance\nfunction getHelpingHandsDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Mindfulness Shield Regeneration Delay\nfunction getMindfulnessShieldRegenerationDelay(rank) {\n switch (rank) {\n case 1:\n return 9;\n case 2:\n return 17;\n case 3:\n return 23;\n default:\n return 0;\n }\n}\n\n// One With Nature Elemental Damage Resistance\nfunction getOneWithNatureElementalDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n case 4:\n return 35;\n case 5:\n return 40;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Reload Speed\nfunction getFastHandsReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 7;\n case 2:\n return 14;\n case 3:\n return 19;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Weapon Swap Speed\nfunction getFastHandsWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 28;\n case 3:\n return 36;\n default:\n return 0;\n }\n}\n\n// Fast Hand(s) Mode Switch Speed\nfunction getFastHandsModeSwitchSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 28;\n case 3:\n return 36;\n default:\n return 0;\n }\n}\n\n// Alacrity Reload Speed After Action Skill\nfunction getAlacrityReloadSpeedAfterActionSkill(rank) {\n switch (rank) {\n case 1:\n return 0.6;\n case 2:\n return 1.2;\n case 3:\n return 1.8;\n case 4:\n return 2.3;\n case 5:\n return 2.9;\n default:\n return 0;\n }\n}\n\n// Transcend Accuracy\nfunction getTranscendAccuracy(rank) {\n switch (rank) {\n case 1:\n return 17;\n case 2:\n return 29;\n case 3:\n return 38;\n default:\n return 0;\n }\n}\n\n// From Rest Charge Time\nfunction getFromRestChargeTime(rank) {\n switch (rank) {\n case 1:\n return 21;\n case 2:\n return 34;\n case 3:\n return 44;\n default:\n return 0;\n }\n}\n\n// Wrath Gun Damage\nfunction getWrathGunDamage(rank) {\n switch (rank) {\n case 1:\n return 6.7;\n case 2:\n return 13.3;\n case 3:\n return 20;\n default:\n return 0;\n }\n}\n\n// Wrath Gun Damage After Action Skill\nfunction getWrathGunDamageAfterActionSkill(rank) {\n switch (rank) {\n case 1:\n return 6.7;\n case 2:\n return 13.3;\n case 3:\n return 20;\n default:\n return 0;\n }\n}\n\n// Steady Hands Handling\nfunction getSteadyHandsHandling(rank) {\n switch (rank) {\n case 1:\n return 14;\n case 2:\n return 24;\n case 3:\n return 32;\n default:\n return 0;\n }\n}\n\n// Steady Hands Accuracy\nfunction getSteadyHandsAccuracy(rank) {\n switch (rank) {\n case 1:\n return 13;\n case 2:\n return 23;\n case 3:\n return 31;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Brawl\": {\n \"0\": {\n \"Phaseslam\": {\n text: \"Amara leaps into the air and Slams the ground, dealing damage to all nearby enemies and knocking them up. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 98)} (increases with character level)\\nCooldown: 35 Seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Root to Rise\": {\n ranks: 5,\n text: \"Amara gains increased Maximum Health.\",\n effect: (rank, level) => `Maximum Health: +${percent(rank, 8)}%`,\n },\n \"Personal Space\": {\n ranks: 3,\n text: \"Amara's weapon shots deal Bonus Damage based on the distance to her target. The closer the target, the greater the bonus.\",\n effect: (rank, level) => `Bonus Damage: Up to +${percent(rank, 18)}% of damage dealt`,\n },\n \"Clarity\": {\n ranks: 5,\n text: \"Amara constantly regenerates health. The lower her health, the more powerful the regeneration. After using an Action Skill, this bonus is doubled for a few seconds.\",\n effect: (rank, level) => `Health Regen: Up to +${percent(rank, 1)}% of Missing Health/sec\\nAdditional Regen: Up to +${percent(rank, 1)}% of Missing Health/sec\\nDuration: 5 seconds`,\n },\n },\n \"2\": {\n \"Arms Deal\": {\n ranks: 5,\n text: \"Amara deals increased Splash Damage and takes reduced Splash Damage.\",\n effect: (rank, level) => `Splash Damage: +${percent(rank, 4)}%\\nSplash Damage Resistance: +${getArmsDealSplashDamageResistance(rank)}%`,\n },\n \"Samsara\": {\n ranks: 3,\n text: \"Whenever Amara deals damage to an enemy with her Action Skill, she adds a stack of Samsara. For every stack of Samsara, Amara gains increased Gun Damage and Health Regeneration for a few seconds. Stacks decay after a few seconds.\",\n effect: (rank, level) => `Gun Damage: +${percent(rank, 1.7)}% per stack\\nHealth Regen: +${percent(rank, 1.7)}% of Missing Health/sec per stack\\nMaximum Stacks: 5\\nDuration: 20 seconds`,\n },\n \"Helping Hand(s)\": {\n ranks: 5,\n text: \"For a few seconds after using her Action Skill, Amara's arms remain active and grant her Damage Resistance.\",\n effect: (rank, level) => `Damage Resistance: +${getHelpingHandsDamageResistance(rank)}%\\nDuration: 15 seconds`,\n },\n \"Blight Tiger\": {\n ranks: 0,\n text: \"Converts Amara's Action Skill to Corrosive Damage.\",\n effect: (rank, level) => `Action Skill Element: Corrosive.`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"Fracture\": {\n ranks: 0,\n text: \"Amara summons a line of fists that erupt from the ground, dealing damage to enemies in front of Amara. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 88)} (increases with character level)\\nCooldown: 28 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Mindfulness\": {\n ranks: 3,\n text: \"Whenever Amara takes damage, she gains a stack of Mindfulness. For every stack of Mindfulness, Amara gains improved Shield Regeneration Delay and Movement Speed. Stacks decay after a few seconds.\",\n effect: (rank, level) => `Shield Regeneration Delay: -${getMindfulnessShieldRegenerationDelay(rank)}% per stack\\nMovement Speed: +${percent(rank, 1.4)}% per stack\\nMaximum Stacks: 25\\nDuration: 5 seconds`,\n },\n \"Find Your Center\": {\n ranks: 1,\n text: \"Amara gains increased Melee Damage. Additionally, for a few seconds after using her Action Skill, Amara gains increased Melee Range.\",\n effect: (rank, level) => `Melee Damage: +100%\\nMelee Range: +75%\\nDuration: 20 seconds`,\n },\n \"Vigor\": {\n ranks: 3,\n text: \"Kill Skill. Killing an enemy with Amara's Action Skill grants all allies increased Movement Speed for a few seconds.\",\n effect: (rank, level) => `Team Movement Speed: +${percent(rank, 3.333)}%\\nDuration: 8 seconds`,\n },\n \"Revelation\": {\n ranks: 0,\n text: \"Amara's Action Skill now creates a Nova when it damages enemies, dealing damage to all nearby enemies.\",\n effect: (rank, level) => `Nova Damage: ${flat(rank, level, 41)} (increases with character level)\\nAction Skill Damage: -15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Downfall\": {\n ranks: 0,\n text: \"Amara leaps into the air and shoots an Elemental Beam below her, followed by a Slam. Element: Shock.\",\n effect: (rank, level) => `Beam Damage: ${flat(rank, level, 14)} per second (increases with character level)\\nSlam Damage: ${flat(rank, level, 95)} (increases with character level)\\nCooldown: 47 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"One With Nature\": {\n ranks: 5,\n text: \"Amara gains increased Maximum Health and Elemental Damage Resistance to her Action Skill Element.\",\n effect: (rank, level) => `Maximum Health: +${percent(rank, 5)}%\\nElemental Damage Resistance: +${getOneWithNatureElementalDamageResistance(rank)}%`,\n },\n },\n \"5\": {\n \"Do Unto Others\": {\n ranks: 1,\n text: \"Whenever an enemy damages Amara, she automatically throws an energy orb back at them, dealing Action Skill Elemental Damage. This skill has a short cooldown.\",\n effect: (rank, level) => `Cooldown: 8 seconds`,\n },\n \"Jab Cross\": {\n ranks: 5,\n text: \"Whenever Amara deals melee damage to an enemy, she gains increased Action Skill Damage and increased Gun Damage for a few seconds.\",\n effect: (rank, level) => `Action Skill Damage: +${percent(rank, 15)}%\\nGun Damage: +${percent(rank, 3)}%\\nDuration: 10 seconds`,\n },\n \"Guardian Angel\": {\n ranks: 1,\n text: \"When Amara enters Fight For Your Life, she immediately gains a Second Wind, restores her health, and creates an Action Skill Elemental Nova that may knock back nearby enemies. This skill has a long cooldown.\",\n effect: (rank, level) => `Health Restored: 50% of Maximum Health\\nCooldown: 120 seconds`,\n },\n \"Glamour\": {\n ranks: 0,\n text: \"Enemies damaged by Amara's Action Skill become confused and temporarily attack their allies. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are confused as well.\",\n effect: (rank, level) => `Confuse Duration: 8 seconds\\nAction Skill Damage: -10%\\nAction Skill Cooldown: +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"6\": {\n \"Blitz\": {\n ranks: 1,\n text: \"Melee Override. Press [Melee key] while aiming at an enemy to make Amara dash a short distance forward and perform a special melee strike, dealing Elemental Melee Damage. If a Blitz melee attack kills an enemy, Blitz's cooldown is immediately reset.\",\n effect: (rank, level) => `Melee Damage: +100%\\nCooldown: 8 seconds`,\n },\n },\n },\n \"Mystical Assault\": {\n \"0\": {\n \"Phasecast\": {\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 92)}\\nCooldown: 28 Seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Do Harm\": {\n ranks: 5,\n text: \"Killing an enemy grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Action Skill Damage is temporarily increased.\",\n effect: (rank, level) => `Action Skill Dmg: +${percent(rank, 0.9)}% per Rush stack consumed\\nMaximum Rush Stacks: 10\\nDuration: 20 seconds`,\n },\n \"Fast Hand(s)\": {\n ranks: 3,\n text: \"Amara's Reload Speed, Weapon Swap Speed, and Mode Switch Speed are improved.\",\n effect: (rank, level) => `Reload Speed: +${getFastHandsReloadSpeed(rank)}%\\nWeapon Swap Speed: +${getFastHandsWeaponSwapSpeed(rank)}%\\nMode Switch Speed: +${getFastHandsModeSwitchSpeed(rank)}%`,\n },\n \"Violent Tapestry\": {\n ranks: 5,\n text: \"Applying a Status Effect grants Amara a stack of Rush. Activating her Action Skill consumes all Rush stacks. For every stack of Rush consumed, Amara's Status Effect Chance is temporarily increased.\",\n effect: (rank, level) => `StatusEffect Chance: +${percent(rank, 0.6)}% per Rush stack consumed\\nMaximum Rush Stacks: 10\\nDuration: 20 seconds`,\n },\n },\n \"2\": {\n \"Alacrity\": {\n ranks: 5,\n text: \"Amara gains increased Reload Speed for every stack of Rush. After consuming Rush stacks, this bonus is increased for a few seconds.\",\n effect: (rank, level) => `Reload Speed: +${percent(rank, 0.4)}% per Rush stack\\nAdditional Reload Speed: +${getAlacrityReloadSpeedAfterActionSkill(rank)}% per Rush stack consumed\\nDuration: 8 seconds`,\n },\n \"Transcend\": {\n ranks: 3,\n text: \"Amara gains increased Accuracy and Critical Hit Damage for a few seconds after activating her Action Skill.\",\n effect: (rank, level) => `Accuracy: +${getTranscendAccuracy(rank)}%\\nCritical Hit Damage: +${percent(rank, 9)}%\\nDuration: 12 seconds`,\n },\n \"Restless\": {\n ranks: 5,\n text: \"Amara gains increased Action Skill Cooldown Rate.\",\n effect: (rank, level) => `Action Skill Cooldown Rate: +${percent(rank, 5)}%`,\n },\n \"Soul Sap\": {\n ranks: 0,\n text: \"A portion of all damage dealt by Amara's Action Skill is returned to her or a nearby ally as health.\",\n effect: (rank, level) => `Action Skill Life Steal: 30% of damage dealt`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"3\": {\n \"Deliverance\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Whenever Amara's Astral Projection damages an enemy or object, it releases homing Elemental Projectiles that trigger her Action Skill Elemental Effect on enemies. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 86)} (increases with character level)\\nElemental Projectiles: 3 per enemy or object hit\\nCooldown: 28 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Ascendant\": {\n ranks: 1,\n text: \"All Action Skill Augments gain increased effects.\",\n effect: (rank, level) => `Soul Sap Life Steal: +20%\\nAllure Radius: +100%\\nGlamour Duration: +50%\\nStillness of Mind: Breaks 0.75 sec after taking dmg\\nRevelation Damage: +25%`,\n },\n \"Stillness of Mind\": {\n ranks: 0,\n text: \"Enemies damaged by Amara's Action Skill become phaselocked until they are damaged or the duration ends. However, Action Skill Cooldown is increased. If Amara targets an enemy with Phasegrasp, enemies near the Grasped target are also phaselocked.\",\n effect: (rank, level) => `Phaselock Duration: 6 seconds\\nAction Skill Damage: -25%\\nAction Skill Cooldown: +15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Reverberation\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself, dealing damage to everything in its path. Astral Projection deals increased damage for every enemy it hits. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 88)} (increases with character level)\\nDamage Bonus: +50% per enemy hit\\nCooldown: 30 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"From Rest\": {\n ranks: 3,\n text: \"Amara gains improved Fire Rate and Charge Time.\",\n effect: (rank, level) => `Fire Rate: +${percent(rank, 4)}%\\nCharge Time: +${getFromRestChargeTime(rank)}%`,\n },\n \"Laid Bare\": {\n ranks: 3,\n text: \"Enemies take increased damage from all sources for a few seconds after being damaged by Amara's Action Skill.\",\n effect: (rank, level) => `Damage Increase: +${percent(rank, 8.333)}%\\nDuration: 8 seconds`,\n },\n \"Wrath\": {\n ranks: 3,\n text: \"Amara gains increased Gun Damage. This effect is increased after she activates her Action Skill for a few seconds.\",\n effect: (rank, level) => `Gun Damage: +${getWrathGunDamage(rank)}%\\nAdditional Gun Damage: +${getWrathGunDamageAfterActionSkill(rank)}%\\nDuration: 8 seconds`,\n },\n },\n \"5\": {\n \"Remnant\": {\n ranks: 3,\n text: \"When Amara kills an enemy with a Gun or Action Skill, she creates a homing projectile that seeks out a new enemy dealing her Action Skill Elemental Damage. Any Overkill Damage is added to the projectile's damage.\",\n effect: (rank, level) => `Remnant Base Damage: ${flat(rank, level, 9)} (increases with character level)`,\n },\n \"Awakening\": {\n ranks: 3,\n text: \"Amara's Rush stacks gain increased effectiveness.\",\n effect: (rank, level) => `Rush Stack Effectiveness: +${percent(rank, 10)}%`,\n },\n \"Tandava\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself. When it hits a target, it explodes, damaging all nearby enemies. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 91)} (increases with character level)\\nCooldown: 35 seconds`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n },\n \"6\": {\n \"Avatar\": {\n ranks: 1,\n text: \"Amara's Action Skill can be activated while it's cooling down. This skill may only be used once per completed cooldown. Additionally, increases Amara's Maximum Rush Stacks. Additionally, if Amara's Action Skill kills an enemy, it refunds half of her Rush stacks.\",\n effect: (rank, level) => `Maximum Rush Stacks: +10`,\n },\n },\n },\n \"Fist of the Elements\": {\n \"0\": {\n \"Phasegrasp\": {\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Skill Duration: 7 seconds\\nCooldown: 16 seconds\\nGrasp Immune Damage: ${flat(rank, level, 28)} (increases with character level)`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Anima\": {\n ranks: 5,\n text: \"Amara's Status Effects deal increased damage over time and have increased duration. Her Action Skill Status Effect deals further increased damage.\",\n effect: (rank, level) => `Action Skill Status Effect Damage: +${percent(rank, 8)}%\\nOther Status Effect Damage: +${percent(rank, 4)}%\\nStatus Effect Duration: +${percent(rank, 20)}%`,\n },\n \"Steady Hands\": {\n ranks: 3,\n text: \"Amara gains increased Weapon Handling and Accuracy.\",\n effect: (rank, level) => `Handling: +${getSteadyHandsHandling(rank)}%\\nAccuracy: +${getSteadyHandsAccuracy(rank)}%`,\n },\n \"Infusion\": {\n ranks: 5,\n text: \"Convert a portion of damage dealt by Amara's weapons into her Action Skill Element.\",\n effect: (rank, level) => `Converted Damage: ${percent(rank, 8)}%`,\n },\n },\n \"2\": {\n \"Tempest\": {\n ranks: 5,\n text: \"Amara deals increased Elemental Damage. Shock Damage is further increased.\",\n effect: (rank, level) => `Shock Damage: +${percent(rank, 8)}%\\nOther Elemental Damage: +${percent(rank, 6)}%`,\n },\n \"Illuminated Fist\": {\n ranks: 1,\n text: \"Amara gains increased Melee Damage and her Melee Damage is converted to Action Skill Element.\",\n effect: (rank, level) => `Melee Damage: +75%`,\n },\n \"Wildfire\": {\n ranks: 5,\n text: \"Whenever Amara applies a Status Effect to an enemy, it has a chance to spread to a nearby enemy.\",\n effect: (rank, level) => `Spread Chance: +${percent(rank, 8)}%`,\n },\n \"Soulfire\": {\n ranks: 0,\n text: \"Converts Amara's Action Skill to Incendiary Damage.\",\n effect: (rank, level) => `Action Skill Element: Incendiary.`,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"The Eternal Fist\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Whenever the Grasped enemy is killed, a new fist seeks out and Grasps a new target. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Bonus Targets: Up to +4\\nDuration: 7 seconds\\nCooldown: 20 seconds\\nGrasp Immune Damage: ${flat(rank, level, 28)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Dread\": {\n ranks: 1,\n text: \"Amara's Gun Damage is increased for a few seconds after an enemy is Grasped. Whenever any player kills a Grasped enemy, their current weapon is instantly reloaded.\",\n effect: (rank, level) => `Gun Damage: +15%\\nDuration: 8 seconds`,\n },\n \"Allure\": {\n ranks: 0,\n text: \"Amara's Action Skill creates a singularity that pulls in enemies.\",\n effect: (rank, level) => `Duration: 2.5 seconds\\nAction Skill Damage: -20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Indiscriminate\": {\n ranks: 3,\n text: \"Amara's bullets that damage enemies have a chance to ricochet and deal decreased damage to other nearby enemies. Ricochet Chance and Damage are increased if target is affected by Phasegrasp or Stillness of Mind.\",\n effect: (rank, level) => `Ricochet Chance: +${percent(rank, 10)}%\\nRicochet Damage: 50% of damage dealt\\nAction Skill Ricochet Chance: +${percent(rank, 20)}%\\nAction Skill Ricochet Damage: 75% of damage dealt`,\n },\n \"Deep Well\": {\n ranks: 1,\n text: \"Amara gains increased Magazine Size with elemental weapons.\",\n effect: (rank, level) => `Magazine Size: +20%`,\n },\n \"Catharsis\": {\n ranks: 3,\n text: \"Whenever Amara triggers an elemental effect on an enemy, when that enemy dies that enemy explodes, dealing her attuned element damage along with any other element that is currently inflicted upon that enemy. This skill has a short cooldown.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 4)} (increases with character level)\\nCooldown: 8 seconds`,\n },\n \"Ties That Bind\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Enemies near the Grasped target are linked, and any damage dealt to a linked target is shared between all other linked targets. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Linked Damage: 35% of damage dealt\\nDuration: 7 seconds\\nCooldown: 18 seconds\\nGrasp Immune Damage: ${flat(rank, level, 34)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n },\n \"5\": {\n \"Fist Over Matter\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. After Grasping the targeted enemy, large fists appear and constantly smash the area, dealing damage to nearby enemies. Some enemies are immune to being Grasped and instantly take damage instead. Element: Shock.\",\n effect: (rank, level) => `Damage: ${flat(rank, level, 35)} (increases with character level)\\nDuration: 7 seconds\\nCooldown: 28 seconds\\nGrasp Immune Damage: ${flat(rank, level, 39)} (increases with character level)`,\n type: SKILLS.AUGMENT_ACTION_SKILL,\n },\n \"Sustainment\": {\n ranks: 5,\n text: \"Amara gains Life Steal whenever she deals Elemental Damage with her weapon.\",\n effect: (rank, level) => `Elemental Weapon Life Steal: +${percent(rank, 4)}% of damage dealt`,\n },\n \"Conflux\": {\n ranks: 5,\n text: \"Whenever Amara applies a Status Effect to an enemy, she gains a chance to randomly Electrocute, Ignite, or Melt that enemy.\",\n effect: (rank, level) => `Extra Status Effect Chance: +${percent(rank, 7)}%`,\n },\n },\n \"6\": {\n \"Forceful Expression\": {\n ranks: 1,\n text: \"Amara's guns deal Bonus Elemental Damage based on her Action Skill Element.\",\n effect: (rank, level) => `Bonus Elemental Damage: +18% of damage dealt`,\n },\n },\n },\n};\n\nexport default skills;\n","import style from './index.css';\n\nexport default function () {\n return (\n \n );\n}\n","import { Router } from 'preact-router';\n\nimport Home from '@pages/Home';\nimport Operative from '@pages/Operative';\nimport Siren from '@pages/Siren';\nimport Beastmaster from '@pages/Beastmaster';\nimport Gunner from '@pages/Gunner';\n\nconst App = () =>\n (\n \n \n \n \n \n );\n\nexport default App;\n","// import { useReducer } from 'preact/hooks'; // Downgraded from Preact 10 for compat with @pwa/cli\nimport { Component } from 'preact';\nimport Skill from '@components/Skill';\nimport Nav from '@components/Nav';\nimport Footer from '@components/Footer';\nimport { getHash, setHash } from './hashHandler';\nimport reducer from './reducer';\nimport { getLevel } from './selectors';\nimport style from './index.css';\n\nfunction contextKiller (event) {\n event.preventDefault();\n return false;\n}\n\nexport default class VaultHunter extends Component {\n constructor (props) {\n super(props);\n this.state = {\n invested: [0, 0, 0],\n skills: props.skills || {},\n };\n }\n\n componentDidMount () {\n this.setState(reducer(this.state, {\n type: 'loadSkills',\n skills: getHash(this.state.skills),\n }));\n }\n\n render ({\n name = 'Unnamed',\n discipline = 'Classless',\n path,\n skills: initialSkills,\n }) {\n const skillChangeListenerFactory = (skillName, treeIndex, treeName, tierIndex) => {\n return (oldValue, newValue) => {\n this.setState(reducer(this.state, {\n type: 'skillChange',\n skillName,\n treeIndex,\n treeName,\n tierIndex,\n newValue,\n oldValue,\n }));\n };\n };\n\n const resetSkills = () => {\n setHash(initialSkills);\n this.setState({\n invested: [0, 0, 0],\n skills: initialSkills || {},\n });\n };\n\n const trees =\n Object.keys(this.state.skills).map((treeName, treeIndex) => {\n return (\n
\n \n

{ treeName }

\n
\n { Object.keys(this.state.skills[treeName]).map((tier, tierIndex) =>\n
\n { Object.keys(this.state.skills[treeName][tier]).map((skillName, skillIndex) =>\n = 5 * tierIndex - 5}\n level={getLevel(this.state)}\n image={`../../assets/hunters/${discipline}/${treeIndex}${tierIndex}${skillIndex}.png`}\n onChange={skillChangeListenerFactory(skillName, treeIndex, treeName, tierIndex)}\n />\n ) }\n
\n ) }\n
\n
\n );\n });\n\n const level = getLevel(this.state);\n\n return (\n
\n
\n

{ name }\n
the { discipline }
\n

\n
\n
Level { level }
\n \n
\n
\n
\n
\n
\n { trees }\n
\n
\n
\n
\n
\n );\n }\n}\n","export default {\n ACTION_SKILL: 1,\n AUGMENT_CHEVRON: 2,\n AUGMENT_DIAMOND: 3,\n AUGMENT_ACTION_SKILL: 4,\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VaultHunter\":\"_2zgqJ\",\"header\":\"_1Jomm\",\"title\":\"_17kLY\",\"subtitle\":\"_3J3hw\",\"sidepanel\":\"_2UO55\",\"level\":\"xH9ts\",\"reset\":\"K9CBr\",\"trees\":\"_3ek45\",\"tier\":\"_3Ch4X\",\"treeName\":\"_1WAM2\",\"tree\":\"gRWZY\",\"skills\":\"_2Su0b\",\"green\":\"-Pl7G\",\"blue\":\"_1nm1I\",\"red\":\"_3T1pZ\"};","import { Link } from 'preact-router';\nimport Footer from '@components/Footer';\nimport style from './index.css';\n\nexport default function () {\n const pages = [\n { name: 'Zane', job: 'the Operative', path: '/operative' },\n { name: 'Amara', job: 'the Siren', path: '/siren' },\n { name: 'FL4K', job: 'the Beastmaster', path: '/beastmaster' },\n { name: 'Moze', job: 'the Gunner', path: '/gunner' },\n ];\n return (\n
\n
\n
\n

(Unofficial)
Borderlands 3 skill calculator

\n { pages.map(page => {\n return (\n \n
\n {page.name}\n
\n {page.job}\n
\n
\n \n );\n }) }\n
\n
\n
\n
\n );\n}\n","import { h, render } from 'preact';\nimport App from '@components/App';\nimport './index.css';\n\nlet elem = document.querySelector('#app');\nlet root = render(, elem, elem.firstElementChild);\n\nif (process.env.NODE_ENV === 'development' && module.hot) {\n // enable preact devtools\n require('preact/debug');\n // respond to HMR updates\n module.hot.accept('@components/App', New => {\n New = require('@components/App').default;\n root = render(, elem, root);\n });\n} else if (process.env.NODE_ENV === 'production') {\n // Service Worker registration\n require('offline-plugin/runtime').install();\n}\n","import { Component, cloneElement, h } from 'preact';\n\nvar EMPTY$1 = {};\n\nfunction assign(obj, props) {\n\t// eslint-disable-next-line guard-for-in\n\tfor (var i in props) {\n\t\tobj[i] = props[i];\n\t}\n\treturn obj;\n}\n\nfunction exec(url, route, opts) {\n\tvar reg = /(?:\\?([^#]*))?(#.*)?$/,\n\t\tc = url.match(reg),\n\t\tmatches = {},\n\t\tret;\n\tif (c && c[1]) {\n\t\tvar p = c[1].split('&');\n\t\tfor (var i=0; i b.rank) ? -1 :\n\t\t(a.index - b.index)\n\t);\n}\n\n// filter out VNodes without attributes (which are unrankeable), and add `index`/`rank` properties to be used in sorting.\nfunction prepareVNodeForRanking(vnode, index) {\n\tvnode.index = index;\n\tvnode.rank = rankChild(vnode);\n\treturn vnode.attributes;\n}\n\nfunction segmentize(url) {\n\treturn url.replace(/(^\\/+|\\/+$)/g, '').split('/');\n}\n\nfunction rankSegment(segment) {\n\treturn segment.charAt(0)==':' ? (1 + '*+?'.indexOf(segment.charAt(segment.length-1))) || 4 : 5;\n}\n\nfunction rank(path) {\n\treturn segmentize(path).map(rankSegment).join('');\n}\n\nfunction rankChild(vnode) {\n\treturn vnode.attributes.default ? 0 : rank(vnode.attributes.path);\n}\n\nvar customHistory = null;\n\nvar ROUTERS = [];\n\nvar subscribers = [];\n\nvar EMPTY = {};\n\nfunction isPreactElement(node) {\n\treturn node.__preactattr_!=null || typeof Symbol!=='undefined' && node[Symbol.for('preactattr')]!=null;\n}\n\nfunction setUrl(url, type) {\n\tif ( type === void 0 ) type='push';\n\n\tif (customHistory && customHistory[type]) {\n\t\tcustomHistory[type](url);\n\t}\n\telse if (typeof history!=='undefined' && history[type+'State']) {\n\t\thistory[type+'State'](null, null, url);\n\t}\n}\n\n\nfunction getCurrentUrl() {\n\tvar url;\n\tif (customHistory && customHistory.location) {\n\t\turl = customHistory.location;\n\t}\n\telse if (customHistory && customHistory.getCurrentLocation) {\n\t\turl = customHistory.getCurrentLocation();\n\t}\n\telse {\n\t\turl = typeof location!=='undefined' ? location : EMPTY;\n\t}\n\treturn (\"\" + (url.pathname || '') + (url.search || ''));\n}\n\n\n\nfunction route(url, replace) {\n\tif ( replace === void 0 ) replace=false;\n\n\tif (typeof url!=='string' && url.url) {\n\t\treplace = url.replace;\n\t\turl = url.url;\n\t}\n\n\t// only push URL into history if we can handle it\n\tif (canRoute(url)) {\n\t\tsetUrl(url, replace ? 'replace' : 'push');\n\t}\n\n\treturn routeTo(url);\n}\n\n\n/** Check if the given URL can be handled by any router instances. */\nfunction canRoute(url) {\n\tfor (var i=ROUTERS.length; i--; ) {\n\t\tif (ROUTERS[i].canRoute(url)) { return true; }\n\t}\n\treturn false;\n}\n\n\n/** Tell all router instances to handle the given URL. */\nfunction routeTo(url) {\n\tvar didRoute = false;\n\tfor (var i=0; i 0;\n\t};\n\n\t/** Re-render children with a new URL to match against. */\n\tRouter.prototype.routeTo = function routeTo (url) {\n\t\tthis._didRoute = false;\n\t\tthis.setState({ url: url });\n\n\t\t// if we're in the middle of an update, don't synchronously re-route.\n\t\tif (this.updating) { return this.canRoute(url); }\n\n\t\tthis.forceUpdate();\n\t\treturn this._didRoute;\n\t};\n\n\tRouter.prototype.componentWillMount = function componentWillMount () {\n\t\tROUTERS.push(this);\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidMount = function componentDidMount () {\n\t\tvar this$1 = this;\n\n\t\tif (customHistory) {\n\t\t\tthis.unlisten = customHistory.listen(function (location) {\n\t\t\t\tthis$1.routeTo((\"\" + (location.pathname || '') + (location.search || '')));\n\t\t\t});\n\t\t}\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.componentWillUnmount = function componentWillUnmount () {\n\t\tif (typeof this.unlisten==='function') { this.unlisten(); }\n\t\tROUTERS.splice(ROUTERS.indexOf(this), 1);\n\t};\n\n\tRouter.prototype.componentWillUpdate = function componentWillUpdate () {\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidUpdate = function componentDidUpdate () {\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.getMatchingChildren = function getMatchingChildren (children, url, invoke) {\n\t\treturn children\n\t\t\t.filter(prepareVNodeForRanking)\n\t\t\t.sort(pathRankSort)\n\t\t\t.map( function (vnode) {\n\t\t\t\tvar matches = exec(url, vnode.attributes.path, vnode.attributes);\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (invoke !== false) {\n\t\t\t\t\t\tvar newProps = { url: url, matches: matches };\n\t\t\t\t\t\tassign(newProps, matches);\n\t\t\t\t\t\tdelete newProps.ref;\n\t\t\t\t\t\tdelete newProps.key;\n\t\t\t\t\t\treturn cloneElement(vnode, newProps);\n\t\t\t\t\t}\n\t\t\t\t\treturn vnode;\n\t\t\t\t}\n\t\t\t}).filter(Boolean);\n\t};\n\n\tRouter.prototype.render = function render (ref, ref$1) {\n\t\tvar children = ref.children;\n\t\tvar onChange = ref.onChange;\n\t\tvar url = ref$1.url;\n\n\t\tvar active = this.getMatchingChildren(children, url, true);\n\n\t\tvar current = active[0] || null;\n\t\tthis._didRoute = !!current;\n\n\t\tvar previous = this.previousUrl;\n\t\tif (url!==previous) {\n\t\t\tthis.previousUrl = url;\n\t\t\tif (typeof onChange==='function') {\n\t\t\t\tonChange({\n\t\t\t\t\trouter: this,\n\t\t\t\t\turl: url,\n\t\t\t\t\tprevious: previous,\n\t\t\t\t\tactive: active,\n\t\t\t\t\tcurrent: current\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current;\n\t};\n\n\treturn Router;\n}(Component));\n\nvar Link = function (props) { return (\n\th('a', assign({ onClick: handleLinkClick }, props))\n); };\n\nvar Route = function (props) { return h(props.component, props); };\n\nRouter.subscribers = subscribers;\nRouter.getCurrentUrl = getCurrentUrl;\nRouter.route = route;\nRouter.Router = Router;\nRouter.Route = Route;\nRouter.Link = Link;\n\nexport { subscribers, getCurrentUrl, route, Router, Route, Link };export default Router;\n//# sourceMappingURL=preact-router.es.js.map\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\n\n/* These three skills dont follow a linear patch for some increases. Data came from official builder.\nhttps://borderlands.com/en-US/characters/fl4k/#-\nMight be different in game but I haven't played FL4K yet!\nThere are probably diminishing return algorithms for these but this was quicker than figuring that out. */\n\n// Hunter's Eye Damage Resistance\nfunction getHuntersEyeDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 5.3;\n case 2:\n return 10.1;\n case 3:\n return 14.4;\n case 4:\n return 18.3;\n case 5:\n return 21.9;\n default:\n return 0;\n }\n}\n\n// Ambush Predator Handling\nfunction getAmbushPredatorHandling(rank) {\n switch (rank) {\n case 1:\n return 17;\n case 2:\n return 29;\n case 3:\n return 38;\n case 4:\n return 44;\n case 5:\n return 50;\n default:\n return 0;\n }\n}\n\n// The Most Dangerous Game Handling\nfunction getMostDangerousGameHandling(rank) {\n switch (rank) {\n case 1:\n return 14.3;\n case 2:\n return 25.0;\n case 3:\n return 33.3;\n default:\n return 0;\n }\n}\n\n// Furious Attack Handling\nfunction getFuriousAttackHandling(rank) {\n switch (rank) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 3:\n return 2.9;\n case 4:\n return 3.8;\n case 5:\n return 4.8;\n default:\n return 0;\n }\n}\n\n// Turn Tail And Run Damage Resistance\nfunction getTurnTailAndRunDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 6.5;\n case 2:\n return 12.3;\n case 3:\n return 17.4;\n default:\n return 0;\n }\n}\n\n// Interplanetary Stalker Beast Movement Speed\nfunction getInterplanetaryStalkerBeastMovementSpeed(rank) {\n switch (rank) {\n case 1:\n return 2;\n case 2:\n return 3;\n case 3:\n return 5;\n case 4:\n return 6;\n case 5:\n return 7;\n default:\n return 0;\n }\n}\n\n// Second Intention Critical Kill Reload Speed\nfunction getSecondIntentionCriticalKillReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 6;\n case 2:\n return 11;\n case 3:\n return 15;\n case 4:\n return 19;\n case 5:\n return 23;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Stalker\": {\n \"0\": {\n \"Jabber Sidekick\": {\n text: \"FL4K is joined by a loyal Jabber companion, armed with a Pistol. While accompanied by the Jabber, FL4K's Movement Speed is increased. Hold [Pet Skill key] to issue an Attack Command, which will cause the Jabber to throw a Radiation Barrel at enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5%`,\n },\n \"Fade Away\": {\n text: \"FL4K cloaks, turning invisible. FL4K can fire 3 shots while cloaked, and each shot is automatically a Critical Hit. While cloaked, FL4K has increased Movement Speed and Health Regeneration.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Fade Away Bonus Damage: 200% of damage dealt\\nCloaked Movement Speed: +25%\\nHealth Regeneration: +3% of Max Health per second\\nDuration: 15 seconds\\nCooldown: 45 seconds`,\n },\n },\n \"1\": {\n \"Self-Repairing System\": {\n text: \"FL4K's Maximum Health is increased, and they constantly regenerate health.\",\n ranks: 5,\n effect: (rank, level) => `Maximum Health: +${percent(rank, 6)}%\\nHealth Regeneration: +${percent(rank, 0.3)}% of Max Health/sec`,\n },\n \"Sic'Em\": {\n text: \"Attack Command has lowered Cooldown and increased Damage.\",\n ranks: 3,\n effect: (rank, level) => `Attack Command Damage: +${percent(rank, 10)}%\\nAttack Command Cooldown: -${percent(rank, 10)}%`,\n },\n \"Furious Attack\": {\n text: \"Hunter Skill. After shooting an enemy, FL4K gains a stack of Furious Attack. For each stack of Furious Attack, FL4K's Handling and Gun Damage are increased, and their pet gains increased Damage per stack. Stacks decay after a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 0.4)}% per stack\\nHandling: +${getFuriousAttackHandling(rank)}% per stack\\nPet Damage: +${percent(rank, 0.6)}% per stack\\nMaximum Stacks: 10\\nDuration: 4 seconds`,\n },\n },\n \"2\": {\n \"Guerrillas In The Mist\": {\n text: \"Fade Away no longer ends after FL4K attacks, at the cost of Critical Hit Damage and Fade Away duration being reduced.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Fade Away Bonus Damage: 25% of damage dealt\\nFade Away Duration: 5 seconds`,\n },\n \"Eager To Impress\": {\n text: \"Kill Skill. Whenever FL4K kills an enemy, Action Skill Cooldown Time is reduced. Whenever FL4K's pet kills an enemy, Action Skill Cooldown Time is reduced even more and Attack Command's duration is refreshed.\",\n ranks: 5,\n effect: (rank, level) => `FL4K Kill Action Skill Cooldown: -${percent(rank, 0.25)} seconds\\nPet Kill Action Skill Cooldown: -${percent(rank, 0.5)} seconds`,\n },\n \"All My BFF's\": {\n text: \"Allies share a portion of FL4K's total Health Regeneration. FL4K's pet shares twice the amount of Health Regeneration.\",\n ranks: 3,\n effect: (rank, level) => `Allies' Health Regen: +${Math.round(percent(rank, 16.666))}% of FL4K's Health Regen\\nPet Health Regen: +${Math.round(percent(rank, 33.333))}% of FL4K's Health Regen`,\n },\n \"Overclocked\": {\n text: \"FL4K gains increased Fire Rate. FL4K gains even more Fire Rate after reloading.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate: +${percent(rank, 2)}%\\nAdditional Fire Rate: +${percent(rank, 2)}%\\nDuration: 4 seconds`,\n },\n },\n \"3\": {\n \"Not My Circus\": {\n text: \"After Fade Away ends, FL4K's pet will Taunt, drawing the attention of all enemies in a huge radius. For a few seconds after Taunting, the pet gains powerful Damage Resistance.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Pet Taunt Duration: 6 seconds\\nPet Damage Resistance: +80%`,\n },\n \"Lick The Wounds\": {\n text: \"When FL4K is in Fight For Your Life, their pet will attempt to revive them. If it does, it gains increased Damage for a short time.\",\n ranks: 1,\n effect: (rank, level) => `Pet Damage: +30%\\nDuration: 60 seconds`,\n },\n \"Turn Tail And Run\": {\n text: \"While moving, FL4K constantly regenerates health and gains Damage Resistance. While still, FL4K gains Gun Damage and Fire Rate.\",\n ranks: 3,\n effect: (rank, level) => `Damage Resistance: +${getTurnTailAndRunDamageResistance(rank)}% while moving\\nHealth Regen: +${percent(rank, 0.3)}% Max Health/sec while moving\\nGun Damage: +${percent(rank, 8.333)}% while still\\nFire Rate: +${percent(rank, 4)}% while still`,\n },\n \"Beefcake Jabber\": {\n text: \"FL4K's Jabber evolves into a Beefcake, discarding its pistol and equipping a Shotgun. While accompanied by the Beefcake, FL4K gains increased Movement Speed and Maximum Health. When FL4K issues an Attack Command, the Beefcake will summon a melee weapon to deliver a powerful attack that knocks enemies back.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5%\\nMaximum Health: +10%`,\n },\n },\n \"4\": {\n \"Until You Are Dead\": {\n text: \"The Health Regeneration and Movement Speed of Fade Away persists for a short time after the skill has ended.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Duration: 10 seconds after Fade Away ends`,\n },\n \"The Fast And The Furryous\": {\n text: \"While above half health, FL4K's Gun Damage and Movement Speed are increased, and their pet gains increased Damage.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${Math.round(percent(rank, 8.333))}%\\nMovement Speed: +${percent(rank, 3.333)}%\\nPet Damage: +${percent(rank, 10)}%`,\n },\n \"Hidden Machine\": {\n text: \"When an enemy has no target or is attacking a different target, FL4K deals increased damage against them.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 6)}%`,\n },\n \"Gunslinger Jabber\": {\n text: \"FL4K's Jabber upgrades his gear and equips an SMG. While accompanied by the Gunslinger, FL4K gains increased Movement Speed and Critical Hit Damage. When FL4K issues an Attack Command, the Gunslinger equips a Rocket Launcher to attack the target.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Movement Speed: +5%\\nCritical Hit Damage: +5%`,\n },\n },\n \"5\": {\n \"Unblinking Eye\": {\n text: \"During Fade Away, successive hits on the same target increase FL4K's Critical Damage per hit. Unblinking Eye resets every 3 hits.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Additional Fade Away Bonus Damage: +75% of damage dealt per hit`,\n },\n \"Rage And Recover\": {\n text: \"Kill Skill. After killing an enemy, FL4K and FL4K's pet regenerate health for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: +${percent(rank, 1.6)}% of Missing Health/sec\\nPet Health Regen: +${percent(rank, 1.6)}% of Missing Health/sec\\nDuration: 3 seconds`,\n },\n },\n \"6\": {\n \"The Power Inside\": {\n text: \"FL4K and FL4K's pet gain increased Damage when FL4K activates an Action Skill. If FL4K is at full health, the increased Damage is doubled.\",\n ranks: 1,\n effect: (rank, level) => `Damage: +25%\\nPet Damage: +25%\\nDuration: 15 seconds`,\n },\n },\n },\n \"Master\": {\n \"0\": {\n \"Guard Skag\": {\n text: \"FL4K is joined by a loyal Skag companion, which will increase FL4K's Damage. Hold [Pet Skill key] to issue an Attack Command, which will cause the Skag to vomit acid onto enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%`,\n },\n \"Gamma Burst\": {\n text: \"FL4K creates a Rift at a target location, teleporting their pet through the Rift and dealing Radiation Damage to nearby enemies. Additionally, FL4K's pet becomes irradiated, growing in size and dealing bonus Radiation Damage when it attacks. Using Gamma Burst while FL4K's pet is downed or dead will revive the pet at the targeted location with 30% of its health, but will double Action Skill Cooldown Time.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Damage 56: (increases with character level)\\nDuration: 20 seconds\\nCooldown: 30 seconds`,\n },\n },\n \"1\": {\n \"Ferocity\": {\n text: \"FL4K's Pet deals increased damage.\",\n ranks: 5,\n effect: (rank, level) => `Pet Damage: +${percent(rank, 10)}%`,\n },\n \"Persistence Hunter\": {\n text: \"Increases FL4K's Gun Damage and Action Skill Duration.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}%\\nAction Skill Duration: +${percent(rank, 15)}%`,\n },\n \"Go For The Eyes!\": {\n text: \"When FL4K's pet attacks an enemy, the first melee attack is an automatic Critical Hit that deals increased damage.\",\n ranks: 5,\n effect: (rank, level) => `Pet Critical Hit Damage: ${percent(rank, 15)}%`,\n },\n },\n \"2\": {\n \"Atomic Aroma\": {\n text: \"While Gamma Burst is active, FL4K's pet is surrounded by a Radiation Aura, constantly damaging all nearby enemies.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Radiation Damage: 4 per second (increases with character level)`,\n },\n \"Who Rescued Who?\": {\n text: \"Whenever FL4K's Pet deals damage, FL4K regenerates health for a few seconds. Whenever FL4K deals damage to an enemy, their Pet's health is restored for a portion of the damage dealt.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: +${percent(rank, 0.4)}% of Max Health/sec\\nPet Health Restored: +${percent(rank, 1)}% of damage dealt`,\n },\n \"He Bites!\": {\n text: \"When FL4K's pet takes damage, the pet returns some of that damage to the attacker.\",\n ranks: 3,\n effect: (rank, level) => `Damage Returned: ${percent(rank, 5)}% of damage received`,\n },\n \"Frenzy\": {\n text: \"Hunter Skill. When FL4K's pet deals damage, FL4K and their pet gain a stack of Frenzy. Each stack of Frenzy increases Damage. The stacks decay after a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 0.8)}% per stack\\nPet Damage: +${percent(rank, 0.8)}% per stack\\nMaximum Stacks: 10`,\n },\n },\n \"3\": {\n \"Empathic Rage\": {\n text: \"For the duration of Gamma Burst, Damage dealt by FL4K is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Damage: +20%`,\n },\n \"Psycho Head On A Stick\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, their pet gains increased Movement Speed and Damage for a few seconds.\",\n ranks: 1,\n effect: (rank, level) => `Pet Damage: +20%\\nPet Movement Speed: +12%\\nDuration: 8 seconds`,\n },\n \"Hive Mind\": {\n text: \"When FL4K takes damage, a portion of all damage they take is inflicted on their pet instead.\",\n ranks: 3,\n effect: (rank, level) => `Damage Shared: ${percent(rank, 5)}%`,\n },\n \"Great Horned Skag\": {\n text: \"FL4K's Skag evolves into a larger Great Horned Skag, which will increase FL4K's Damage and Gun Damage. When FL4K issues an Attack Command, the Great Horned Skag will charge at enemies and knock them into the air.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%\\nGun Damage: +10%`,\n },\n },\n \"4\": {\n \"Endurance\": {\n text: \"When FL4K or FL4K's pet kills an enemy while Gamma Burst is active, the duration of Gamma Burst is extended and pet damage is increased. These effects can stack up to 5 times.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Gamma Burst Duration: +3 seconds per kill\\nPet Damage: +10% per kill\\nMaximum Stacks: 5`,\n },\n \"Barbaric Yawp\": {\n text: \"Increases the power of Pet Bonuses granted to FL4K.\",\n ranks: 5,\n effect: (rank, level) => `Pet Bonuses: +${percent(rank, 40)}%`,\n },\n \"Mutated Defenses\": {\n text: \"When FL4K's pet is at low health, it gains Damage Resistance and regenerates health. This skill has a long cooldown.\",\n ranks: 1,\n effect: (rank, level) => `Pet Damage Resistance: +30%\\nPet Health Regen: +6.667% of Max Health/sec\\n Duration: 6 seconds\\nCooldown: 15 seconds`,\n },\n \"Eridian Skag\": {\n text: \"FL4K's Skag evolves into an Eridian Skag, which will increase FL4K's Damage and Fire Rate. When FL4K issues an Attack Command, their Eridian Skag pulls nearby enemies in by generating a Singularity.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Damage: +5%\\nFire Rate: +5%`,\n },\n },\n \"5\": {\n \"Burst Aid\": {\n text: \"After using Gamma Burst, the Rift remains for the duration of the skill. While standing near the Rift, FL4K and their allies rapidly Regenerate Health.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Team Health Regeneration: +20% of Max Health/sec`,\n },\n \"Pack Tactics\": {\n text: \"All damage dealt by FL4K and their pet is increased. Additionally, the Maximum Health of both FL4K and their pet is increased.\",\n ranks: 3,\n effect: (rank, level) => `Damage: +${percent(rank, 7)}%\\nMaximum Health: +${percent(rank, 5)}%\\nPet Damage: +${percent(rank, 7)}%\\nPet Maximum Health: +${percent(rank, 5)}%`,\n },\n \"Shared Spirit\": {\n text: \"While FL4K is at low health, a portion of all damage they take is inflicted on their pet instead.\",\n ranks: 1,\n effect: (rank, level) => `Damage Shared: 50%`,\n },\n },\n \"6\": {\n \"Dominance\": {\n text: \"Melee Override Skill. FL4K establishes dominance over an enemy, turning it into an ally for a short time. If the enemy is a Beast, the duration is doubled. While under the effects of Dominance, the enemy constantly loses health until it dies or the effect ends. Only one enemy can be dominated at a time. An enemy can only be dominated once.\",\n ranks: 1,\n effect: (rank, level) => `Duration: 12 seconds\\nTarget Loses 2% of Maximum Health per second`,\n },\n },\n },\n \"Hunter\": {\n \"0\": {\n \"Spiderant Centurion\": {\n text: \"FL4K is joined by a loyal Spiderant companion, which will cause FL4K to constant regenerate health. Hold [Pet Skill key] to issue an Attack Command, which will cause the Spiderant to charge into enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: 1% of Max Health per second`,\n },\n \"Rakk Attack!\": {\n text: \"FL4K sends forward 2 Rakk to dive-bomb enemies. This skill has multiple charges. Element: Incendiary.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `Damage: 35 (increases with character level)\\nElement Status Effect Chance: 100%\\nCooldown: 18 seconds`,\n },\n },\n \"1\": {\n \"Interplanetary Stalker\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, they gain a stack of Interplanetary Stalker. For each stack of Interplanetary Stalker, they and their pet gain a bonus to all damage dealt. Additionally, they gain a unique stacking bonus depending on the type of enemy killed. Each unique bonus can stack up to 3 times. Each stack decays after a short time.\",\n ranks: 5,\n effect: (rank, level) => `Damage: +${percent(rank, 2)}% per stack\\nPet Damage: +${percent(rank, 1)}% per stack\\nHuman Bonus: +${percent(rank, 3)}% Action Skill Damage per stack\\nRobot Bonus: +${percent(rank, 1.5)}% Corrosive Damage per stack\\nBeast Bonus: +${getInterplanetaryStalkerBeastMovementSpeed(rank)}% Movement Speed per stack\\nMaximum Stacks: 3`,\n },\n \"Leave No Trace\": {\n text: \"When FL4K scores a Critical Hit, there is a chance for 1 ammo to be added to their magazine.\",\n ranks: 3,\n effect: (rank, level) => `Ammo Chance: +${percent(rank, 12)}%\\nCooldown: 0.3 seconds`,\n },\n \"Second Intention\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills an enemy, they gain increased Reload Speed. This bonus is increased if FL4K scores a Critical Kill.\",\n ranks: 5,\n effect: (rank, level) => `Reload Speed: +${Math.ceil(percent(rank, 2.6))}%\\nCritical Kill Reload Speed: +${getSecondIntentionCriticalKillReloadSpeed(rank)}%\\nDuration: 5 seconds`,\n },\n },\n \"2\": {\n \"Rakk Open A Cold One\": {\n text: \"Converts FL4K's Rakk to Cryo Damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Rakk Attack! Element: Cryo`,\n },\n \"Hunter's Eye\": {\n text: \"FL4K gains bonuses when fighting different types of enemies.\",\n ranks: 5,\n effect: (rank, level) => `Human Bonus: +${percent(rank, 2.48)}% Critical Hit Damage\\nRobot Bonus: +${percent(rank, 6)}% Armor Damage\\nBeast Bonus: +${getHuntersEyeDamageResistance(rank)}% Damage Resistance`,\n },\n \"Head Count\": {\n text: \"Whenever FL4K scores a Critical Hit, there is a chance their Action Skill Cooldown is reduced.\",\n ranks: 3,\n effect: (rank, level) => `Cooldown Reduction Chance: +${percent(rank, 10)}%\\nAction Skill Cooldown: -2 seconds`,\n },\n \"Ambush Predator\": {\n text: \"While there are no enemies nearby, FL4K's Weapon Handling and Critical Hit Damage are increased.\",\n ranks: 5,\n effect: (rank, level) => `Critical Hit Damage: +${percent(rank, 4)}%\\nHandling: +${getAmbushPredatorHandling(rank)}%`,\n },\n },\n \"3\": {\n \"Falconer's Feast\": {\n text: \"When FL4K's Rakk damage an enemy, a portion of FL4K's health is restored.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Health Restored: 7% of Maximum Health`,\n },\n \"Two F4ng\": {\n text: \"FL4K has a chance to fire an extra projectile per shot.\",\n ranks: 5,\n effect: (rank, level) => `Extra Projectile Chance: +${percent(rank, 5)}%`,\n },\n \"Spiderant Scorcher\": {\n text: \"FL4K's Spiderant evolves into a Scorcher, occasionally dealing Incendiary Damage to all enemies nearby. While accompanied by the Scorcher, FL4K constantly regenerates health and deals increased Elemental Damage. When FL4K issues an Attack Command, the Scorcher will charge enemies.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: +1% of Max Health per second\\nElemental Damage: +10%`,\n },\n },\n \"4\": {\n \"Flock'N'Load\": {\n text: \"FL4K sends forward additional Rakk.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Additional Rakk: +2`,\n },\n \"Big Game\": {\n text: \"FL4K's Hunter Skills become much more effective and have a longer duration.\",\n ranks: 3,\n effect: (rank, level) => `Hunter Skill Effects: +${percent(rank, 10)}%\\nHunter Skill Duration: +${Math.round(percent(rank, 33.333))}%`,\n },\n \"The Most Dangerous Game\": {\n text: \"Hunter Kill Skill. Whenever FL4K kills a Badass or stronger enemy, they gain increased Critical Hit Damage, Gun Damage, and Handling for a long time and their pet receives increased Damage for a long time. Additionally, they receive a cash reward from the Intergalactic Bureau of Bounty Hunting.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3.333)}%\\nCritical Hit Damage: +${Math.round(percent(rank, 8.333))}%\\nHandling: +${getMostDangerousGameHandling(rank)}%\\nPet Damage: +${percent(rank, 9)}%\\nDuration: 120 seconds`,\n },\n \"Spiderant Countess\": {\n text: \"FL4K's Spiderant evolves into a Countess, which will cause FL4K to constantly regenerate health and gain Damage Resistance. When FL4K issues an Attack Command, the Countess will burrow underground and then emerge dealing Corrosive Damage in an area.\",\n type: SKILLS.AUGMENT_DIAMOND,\n ranks: 0,\n effect: (rank, level) => `Health Regeneration: +1% of Max Health per second\\nDamage Resistance: +5%`,\n },\n },\n \"5\": {\n \"Rakkcelerate\": {\n text: \"FL4K's Rakk have increased Cooldown Rate and gain an Additional Charge.\",\n type: SKILLS.AUGMENT_CHEVRON,\n ranks: 0,\n effect: (rank, level) => `Rakk Attack! Cooldown Rate: +20%\\nMaximum Rakk Attack! Charges: +1`,\n },\n \"Galactic Shadow\": {\n text: \"FL4K deals increased Critical Hit Damage, and enemies are less likely to attack them.\",\n ranks: 1,\n effect: (rank, level) => `Critical Hit Damage: +15%`,\n },\n \"Grim Harvest\": {\n text: \"FL4K gains increased Gun Damage and Action Skill Damage. FL4K's pet gains increased Damage.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3)}%\\nAction Skill Damage: +${percent(rank, 5)}%\\nPet Damage: +${percent(rank, 7)}%`,\n },\n },\n \"6\": {\n \"Megavore\": {\n text: \"FL4K gains a chance to score a Critical Hit with weapons against any part of enemies.\",\n ranks: 1,\n effect: (rank, level) => `Critical Hit Chance: +20%`,\n },\n },\n },\n};\n\nexport default skills;\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Gunner ({ path }) {\n return (\n \n );\n}\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Operative ({ path }) {\n return (\n \n );\n}\n","export function getLevel (state) {\n return state.invested.reduce((total, current) => total + current, 2);\n};\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\n\nfunction percentTwoDecimals (rank, unit) {\n return Math.round(rank * unit * 100) / 100;\n}\n\n// Matched Set Heat Per Shot\nfunction getMatchedSetHeatPerShot(rank) {\n switch (rank) {\n case 1:\n return 2;\n case 2:\n return 4;\n case 3:\n return 6;\n case 4:\n return 9;\n case 5:\n return 11;\n default:\n return 0;\n }\n}\n\n// Scrappy Handling\nfunction getScrappyHandling(rank) {\n switch (rank) {\n case 1:\n return 10.7;\n case 2:\n return 19.4;\n case 3:\n return 26.5;\n case 4:\n return 32.4;\n case 5:\n return 37.5;\n default:\n return 0;\n }\n}\n\n// Scrappy Weapon Swap Speed\nfunction getScrappyWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 27.5;\n case 3:\n return 36.3;\n case 4:\n return 43.2;\n case 5:\n return 48.7;\n default:\n return 0;\n }\n}\n\n// Scrappy Mode Switch Speed\nfunction getScrappyModeSwitchSpeed(rank) {\n switch (rank) {\n case 1:\n return 16;\n case 2:\n return 27.5;\n case 3:\n return 36.3;\n case 4:\n return 43.2;\n case 5:\n return 48.7;\n default:\n return 0;\n }\n}\n\n// Armored Infantry Damage Resistance\nfunction getArmoredInfantryDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 3;\n case 2:\n return 6;\n case 3:\n return 8;\n case 4:\n return 11;\n case 5:\n return 13;\n default:\n return 0;\n }\n}\n\n// Vladof Ingenuity Shock Damage Resistance\nfunction getVladofIngenuityShockDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 15;\n case 2:\n return 26;\n case 3:\n return 35;\n case 4:\n return 42;\n case 5:\n return 47;\n default:\n return 0;\n }\n}\n\n// Behind the Iron Curtain Shield Recharge Delay\nfunction getBehindTheIronCurtainShieldRechargeDelay(rank) {\n switch (rank) {\n case 1:\n return 12;\n case 2:\n return 21;\n case 3:\n return 28;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Bottomless Mags\": {\n \"0\": {\n \"Minigun\": {\n text: \"The Minigun is capable of sustained rapid fire. Firing for long periods causes the Minigun to overheat, rendering it inoperable for a few seconds. Element: Non-Elemental.\",\n type: SKILLS.ACTION_SKILL,\n effect: (rank, level) => `Put a little lead in the air and see what falls over.`,\n },\n },\n \"1\": {\n \"Cloud of Lead\": {\n text: \"Occasionally, Moze's and Iron Bear's shots will deal additional Incendiary Damage and won't consume ammo.\",\n ranks: 5,\n effect: (rank, level) => `Effects are triggered every ${9 - rank} shots\\nBonus Incendiary Damage: +${percentTwoDecimals(rank, 2.25)}%`,\n },\n \"Dakka Bear\": {\n text: \"Adds a manned turret to the back of Iron Bear. While manned, Iron Bear and its rider gain increased damage.\",\n ranks: 1,\n effect: (rank, level) => `Iron Bear Damage: +50%`,\n },\n \"Matched Set\": {\n text: \"Moze's currently equipped weapon gains a stacking bonus to Magazine Size and Decreased Heat Per Shot for every piece of equipped gear that has a matching manufacturer.\",\n ranks: 5,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 2)}% per matched gear\\nHeat Per Shot: -${getMatchedSetHeatPerShot(rank)}% per matched gear`,\n },\n },\n \"2\": {\n \"Let Off Some Steam\": {\n text: \"Minigun deals more damage as heat increases, and can be fired for longer before overheating.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Damage: Up to +80%\\nMinigun Heat Capacity: +35%`,\n },\n \"Stoke the Embers\": {\n text: \"Increases Moze and Iron Bear's Incendiary Damage.\",\n ranks: 3,\n effect: (rank, level) => `Incendiary Damage: +${percent(rank, 10)}%`,\n },\n \"Redistribution\": {\n text: \"After Moze scores a Critical Hit, she regenerates ammo and health for a few seconds.The lower her health, the more powerful the regeneration.\",\n ranks: 1,\n effect: (rank, level) => `Ammo Regeneration: +5% of Magazine Size/sec\\nHealth Regen: Up to +2.5% of Missing Health/sec\\nDuration: 3 seconds`,\n },\n \"Scrappy\": {\n text: \"While moving, Moze's Weapon Damage, Handling, Weapon Swap, and Mode Switch Speed are increased.\",\n ranks: 5,\n effect: (rank, level) => `Weapon Damage: +${percent(rank, 6)}%\\nHandling: +${getScrappyHandling(rank)}%\\nWeapon Swap Speed: +${getScrappyWeaponSwapSpeed(rank)}%\\nMode Switch Speed: +${getScrappyModeSwitchSpeed(rank)}%`,\n },\n \"Salamander\": {\n text: \"The Salamander is a flamethrower that deals Incendiary Damage to enemies at close range. Though the Salamander has infinite ammo, it drains Fuel with use.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `Fire... for effect.`,\n },\n },\n \"3\": {\n \"General Winter\": {\n text: \"Minigun fires Cryo rounds which reduce Heat Gain and Fuel Drain.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Element: Cryo\\nCryo Efficiency: +20%\\nMinigun Fuel Drain: -40%`,\n },\n \"Rushin' Offensive\": {\n text: \"Moze can sprint and shoot at the same time. While sprinting, Moze's weapons gain Life Steal.\",\n ranks: 1,\n effect: (rank, level) => `Life Steal: 8% of damage dealt`,\n },\n \"Scorching RPM's\": {\n text: \"Moze gains increased Fire Rate and Critical Hit Damage. Iron Bear gains increased Hard Point damage.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate: +${percent(rank, 3)}%\\nCritical Hit Damage: +${percent(rank, 4)}%\\nIron Bear Damage: +${percent(rank, 5)}%`,\n },\n \"Fuel Economy\": {\n text: \"Reduces Salamander's Fuel Drain. Additionally, Iron Bear's Movement Speed is increased after damaging an enemy with Salamander.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Salamander Fuel Drain: -25%\\nIron Bear Movement Speed: +25%\\nMovement Speed Duration: 3 seconds`,\n },\n },\n \"4\": {\n \"Exploding. Bullets.\": {\n text: \"Minigun fires Explosive Rounds that deal increased Splash Damage, but its Fire Rate is decreased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Minigun Damage: +232%\\nMinigun Fire Rate: -75%`,\n },\n \"The Iron Bank\": {\n text: \"Increases Moze's Magazine Size.\",\n ranks: 5,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 7)}%`,\n },\n \"Specialist Bear\": {\n text: \"Equipping two of the same Weapons on Iron Bear increases the damage they deal.\",\n ranks: 1,\n effect: (rank, level) => `Iron Bear Damage: +${percent(rank, 60)}%`,\n },\n \"Chemical Warfare\": {\n text: \"Salamander now deals Corrosive Damage. Additionally, Salamander's Melt Damage is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Salamander Element: Corrosive\\nSalamander Melt Damage: +125%`,\n },\n },\n \"5\": {\n \"Some for the Road\": {\n text: \"Moze gains infinite ammo for a few seconds after exiting Iron Bear.\",\n ranks: 1,\n effect: (rank, level) => `Duration: 5 seconds`,\n },\n \"Click, Click...\": {\n text: \"Moze gains increased Gun Damage as her magazine empties. The less ammo there is remaining, the greater the increase. If Moze has a COV gun equipped, she gains Gun Damage as her gun's heat increases.\",\n ranks: 3,\n effect: (rank, level) => `Gun Damage: Up to +${percent(rank, 20)}%`,\n },\n \"Molten Roar\": {\n text: \"The Salamander burst-fires 3 projectiles with increased Fuel Drain, the first of which leaves a large Incendiary area.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Fuel Drain: +25%`,\n },\n },\n \"6\": {\n \"Forge\": {\n text: \"Moze constantly regenerates ammo for her currently equipped weapon.\",\n ranks: 1,\n effect: (rank, level) => `Ammo Regeneration: +5% of Magazine Size/sec`,\n },\n },\n },\n \"Demolition Woman\": {\n \"0\": {\n \"V-35 Grenade Launcher\": {\n text: \"The V-35 is a semi-automatic grenade launcher. Its grenades are not affected by Moze's equipped grenade mod. Element: Non-Elemental.\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: (rank, level) => `For when the V-34 just isn't enough`,\n },\n },\n \"1\": {\n \"Fire in the Skag Den\": {\n text: \"Whenever Moze and Iron Bear deal Splash Damage, they deal bonus Incendiary Damage.\",\n ranks: 5,\n effect: (rank, level) => `Bonus Incendiary Damage: +${percent(rank, 3)}% of damage dealt`,\n },\n \"Deadlines\": {\n text: \"Firing Iron Bear Weapons drains less Fuel. Killing an enemy while Iron Bear is active increases Fuel. This skill has diminishing returns.\",\n ranks: 3,\n effect: (rank, level) => `Fuel Drain: -${percent(rank, 10)}%\\nFuel Returned: ${percent(rank, 2)}% of Maximum Fuel`,\n },\n \"Grizzled\": {\n text: \"Kill Skill. Killing an enemy reduces Moze's remaining Action Skill Cooldown Time. This skill has diminishing returns.\",\n ranks: 5,\n effect: (rank, level) => `Iron Bear Cooldown: -${rank * 1} seconds`,\n },\n },\n \"2\": {\n \"Shaped Charge\": {\n text: \"Direct hits with the V-35 deal increased damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Direct Hit Damage: +35%`,\n },\n \"Means of Destruction\": {\n text: \"Whenever Moze deals Splash Damage, there is a chance to add ammo to her currently equipped weapon's magazine, with a smaller chance to return a grenade.\",\n ranks: 3,\n effect: (rank, level) => `Ammo Chance: +${percent(rank, 3.333)}%\\nGrenade Chance: +${percent(rank, 2)}%\\nCooldown: 0.3 seconds`,\n },\n \"Torgue Cross-Promotion\": {\n text: \"All Splash Damage dealt by Moze has a chance to double in size. Additionally, Moze and Iron Bear deal increased Splash Damage.\",\n ranks: 5,\n effect: (rank, level) => `Splash Damage: +${percent(rank, 6)}%\\nChance to Double Splash Radius: +${percent(rank, 3)}%`,\n },\n \"Stainless Steel Bear\": {\n text: \"Iron Bear gains additional armor, increased Maximum Fuel, and increased Damage.\",\n ranks: 5,\n effect: (rank, level) => `Iron Bear Damage: +${percent(rank, 4)}%\\nIron Bear Armor: +${percent(rank, 6)}%\\nMaximum Fuel: +${percent(rank, 4)}%`,\n },\n \"Vanquisher Rocket Pod\": {\n text: \"The Vanquisher Rocket Pod is a rocket launcher capable of rapid-firing volleys of unguided explosive rockets. Element: Non-Elemental.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `If you want guidance, get a sherpa. If you want explosions, get a Vladof.`,\n },\n },\n \"3\": {\n \"Musical Chairs\": {\n text: \"Occasionally, the V-35 fires a Singularity Grenade that pulls in nearby enemies before exploding.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Singularity: Every 7th grenade`,\n },\n \"Pull the Holy Pin\": {\n text: \"Moze's grenades have a chance to score a Critical Hit, dealing greatly increased damage. Sources of Critical Hit Damage do not affect grenade Critical Hits.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Critical Hit Chance: +${percent(rank, 10)}%`,\n },\n \"Auto Bear\": {\n text: \"After Moze exits Iron Bear, it will remain deployed in place for a short time. While Auto Bear remains active, it will target and attack nearby enemies until its duration ends, then it will charge at an enemy and self-destruct.\",\n ranks: 1,\n effect: (rank, level) => `Auto Bear Duration: 15 seconds`,\n },\n \"Active Tracking\": {\n text: \"The Vanquisher Rocket Pod now fires homing rockets and has increased Reload Speed. Hold down [Action Skill key] and aim at enemies to designate up to 6 targets. Releasing Fire Button launches a volley of homing rockets at the designated targets.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Reload Speed: +25%`,\n },\n },\n \"4\": {\n \"Lock and Speedload\": {\n text: \"The V-35's Reload Speed is greatly increased and it now fires a 5-round burst.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `V-35 Reload Speed: +25%`,\n },\n \"Vampyr\": {\n text: \"Whenever Moze damages an enemy with a thrown grenade, for every enemy hit, she restores a portion of her missing health. Iron Bear restores armor for every enemy it deals Splash Damage to.\",\n ranks: 5,\n effect: (rank, level) => `Moze Health Restored: ${percent(rank, 4)}% of Missing Health per enemy hit\\nIron Bear Health Restored: ${percent(rank, 2)}% of Missing Armor per enemy hit`,\n },\n \"Why Can't I Carry All These Grenades\": {\n text: \"Increases Moze's grenade carrying capacity.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Capacity: +${rank}`,\n },\n \"Target Softening\": {\n text: \"The Vanquisher Rocket Pod deals greatly reduced damage per rocket, but fires in a 6-rocket spread. Additionally, enemies hit by Vanquisher Rocket Pod rockets take increased damage from all sources.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Damage: -74%\\nEnemy Damage Taken: +15%`,\n },\n },\n \"5\": {\n \"To the Last\": {\n text: \"Moze gains the ability to throw grenades while in Fight For Your Life. If she threw a grenade before gaining a Second Wind, a grenade is refunded.\",\n ranks: 1,\n effect: (rank, level) => `The greatest enemy is one with nothing to lose... and a grenade.`,\n },\n \"Explosive Punctuation\": {\n text: \"When Moze deals Splash Damage, her Action Skill Cooldown Rate is briefly increased.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Cooldown Rate: +${percent(rank, 8)}%`,\n },\n \"Hammerdown Protocol\": {\n text: \"Instead of a volley of conventional rockets, the Vanquisher Rocket Pod launches a single rocket with a nuclear warhead, dealing massive Radiation Damage.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Vanquisher Element: Raditation\\nVanquisher Damage: +600%\\nVanquisher Magazine Size: 1`,\n },\n },\n \"6\": {\n \"Short Fuse\": {\n text: \"Whenever Moze deals Gun Damage, there is a chance of a secondary explosion centered on the target.\",\n ranks: 1,\n effect: (rank, level) => `Secondary Explosion Chance: 20%\\nSecondary Explosion Damage: 75% of Gun Damage`,\n },\n },\n },\n \"Shield of Retribution\": {\n \"0\": {\n \"Railgun\": {\n text: \"The Railgun fires electrified high-velocity projectiles that deal Shock Damage.\",\n type: SKILLS.ACTION_SKILL,\n effect: (rank, level) => `It's like a bullet, only bigger. And faster. And wrapped in lightning.`,\n },\n },\n \"1\": {\n \"Selfless Vengeance\": {\n text: \"Whenever Moze reloads, she loses a small portion of her health and grants additional Incendiary Damage to her and her allies' rounds for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Team Bonus Incendiary Damage: +${percent(rank, 3)}% of dmg dealt\\nHealth Removed: ${percent(rank, 1)}% of Current Health\\nDuration: 5 seconds`,\n },\n \"Security Bear\": {\n text: \"Iron Bear gains a bubble shield that reduces damage taken. The shield deactivates if it sustains too much damage, reactivating after a short cooldown.\",\n ranks: 1,\n effect: (rank, level) => `60% of Iron Bear Maximum Armor added as Shields\\nBubble Recharge Delay: 5 seconds`,\n },\n \"Armored Infantry\": {\n text: \"While Moze's shields are active, she gains Damage Resistance and increased Gun Damage.\",\n ranks: 5,\n effect: (rank, level) => `Damage Resistance: +${getArmoredInfantryDamageResistance(rank)}%\\nGun Damage: +${percent(rank, 3)}%`,\n },\n },\n \"2\": {\n \"Hell on Rails\": {\n text: \"Railgun now fires superheated rounds that deal Incendiary Damge, but have increased Fuel Drain per shot.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Railgun Element: Incendiary\\nRailgun Fuel Drain: +8%`,\n },\n \"Drowning in Brass\": {\n text: \"Kill Skill. Killing an enemy grants Moze a stack of Drowning in Brass. For each stack of Drowning in Brass, Moze's Fire Rate is reduced, but Gun Damage is increased for both her and her allies.\",\n ranks: 5,\n effect: (rank, level) => `Moze Fire Rate: -${percent(rank, 0.5)}% per stack\\nTeam Gun Damage: +${percent(rank, 4)}% per stack\\nMaximum Stacks: 3\\nDuration: 15 seconds`,\n },\n \"Thin Red Line\": {\n text: \"A portion of Moze's health is Reserved and cannot be restored, but her Maximum Shield is increased by the same amount.\",\n ranks: 3,\n effect: (rank, level) => `${percent(rank, 20)}% Max Health Reserved and Added to Max Shield`,\n },\n \"Vladof Ingenuity\": {\n text: \"Moze's Maximum Shield and Shield Recharge Rate are increased, and she gains resistance to Shock Damage.\",\n ranks: 5,\n effect: (rank, level) => `Maximum Shield: +${percent(rank, 6)}%\\nShield Recharge Rate: +${percent(rank, 4)}%\\nShock Damage Resistance: +${getVladofIngenuityShockDamageResistance(rank)}%`,\n },\n \"Bear Fist\": {\n text: \"The Bear Fist is a pneumatic-driven fist that deals massive damage to a single target at close range. Element: Non-Elemental.\",\n type: SKILLS.AUGMENT_ACTION_SKILL,\n effect: (rank, level) => `Vladof supports the right to bear armored bear arms.`,\n },\n },\n \"3\": {\n \"Capacitive Armature\": {\n text: \"When Railgun hits an enemy, it chains to nearby enemies, dealing reduced Shock Damage to more targets.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Splinter Damage: 70% of damage dealt`,\n },\n \"Full Can of Whoop-Ass\": {\n text: \"Entering Iron Bear causes Moze's and her allies' shields to immediately begin recharging at an increased Shield Recharge Rate.\",\n ranks: 1,\n effect: (rank, level) => `Team Shield Recharge Rate: +25%`,\n },\n \"Experimental Munitions\": {\n text: \"Whenever Moze and Iron Bear score a Critical Hit, they deal bonus Incendiary Damage.\",\n ranks: 1,\n effect: (rank, level) => `Bonus Incendiary Damage: +${percent(rank, 15)}% of damage dealt`,\n },\n \"Wild Swing\": {\n text: \"Whenever Bear Fist hits an enemy, it deals random Bonus Elemental Damage to that enemy and all enemies nearby.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Bear Fist Bonus Elemental Damage: +35% of damage dealt`,\n },\n },\n \"4\": {\n \"Corrosive Sabot Round\": {\n text: \"Railgun now fires a specialty round that deals reduced damage and explodes after a short delay. Railgun shots have reduced Fuel Drain and the Magazine Size is increased.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Railgun Element:Corrosive\\nRailgun Damage: -15%\\nRailgun Fuel Drain: -33%\\nRailgun Magazine Size: +2`,\n },\n \"Behind the Iron Curtain\": {\n text: \"Moze's Shield Recharge Delay is reduced, and her Shield Recharge Rate is increased.\",\n ranks: 3,\n effect: (rank, level) => `Shield Recharge Delay: -${getBehindTheIronCurtainShieldRechargeDelay(rank)}%\\nShield Recharge Rate: +${percent(rank, 11)}%`,\n },\n \"Desperate Measures\": {\n text: \"Moze's Gun Damage and Iron Bear's Damage is increased depending on how low their health is. The lower their health, the greater the increase.\",\n ranks: 3,\n effect: (rank, level) => `Damage: Up to +${Math.round(percent(rank, 16.5))}%`,\n },\n \"Close the Distance\": {\n text: \"Instead of punching, Iron Bear now launches its Bear Fist forward and grabs enemies at greatly increased range, dealing Shock Damage and pulling them back to Iron Bear.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Step into my office.`,\n },\n },\n \"5\": {\n \"Phalanx Doctrine\": {\n text: \"Kill Skill. After killing an enemy, Moze gains a stack of Phalanx Doctrine. For every stack of Phalanx Doctrine, Moze's Maximum Shield and Gun Damage are increased. Each stack lasts 30 seconds. There is no stack limit.\",\n ranks: 5,\n effect: (rank, level) => `Maximum Shield: +${percent(rank, 3)}% per stack\\nGun Damage: +${percent(rank, 2)}% per stack\\nDuration: 30 seconds`,\n },\n \"Force Feedback\": {\n text: \"Whenever Moze scores a Critical Kill, her shields immediately begin recharging and she instantly regains a portion of her shield.\",\n ranks: 1,\n effect: (rank, level) => `Shields Restored: 10% of Maximum Shield`,\n },\n \"Shockhammer\": {\n text: \"Bear Fist is now capable of sustained rapid fire punching. Additionally, Bear Fist has reduced Fuel Drain and deals Bonus Shock Damage with each hit.\",\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `Bear Fist Bonus Shock Damage: +60% of damage dealt\\nBear Fist Fuel Drain: -40%`,\n },\n },\n \"6\": {\n \"Tenacious Defense\": {\n text: \"Whenever Moze's shield is fully depleted, she instantly restores a portion of her shield, and her Gun Damage is increased for a short time. This skill can only trigger after Moze's shields have fully recharged.\",\n ranks: 1,\n effect: (rank, level) => `Shields Restored: 40% of Maximum Shield\\nGun Damage: +30%\\nDuration: 30 seconds`,\n },\n },\n },\n};\n\nexport default skills;\n","!function(){\"use strict\";function e(e,t){var n,o,r,i,l=W;for(i=arguments.length;i-- >2;)P.push(arguments[i]);t&&null!=t.children&&(P.length||P.push(t.children),delete t.children);while(P.length)if((o=P.pop())&&void 0!==o.pop)for(i=o.length;i--;)P.push(o[i]);else\"boolean\"==typeof o&&(o=null),(r=\"function\"!=typeof e)&&(null==o?o=\"\":\"number\"==typeof o?o+=\"\":\"string\"!=typeof o&&(r=!1)),r&&n?l[l.length-1]+=o:l===W?l=[o]:l.push(o),n=r;var a=new T;return a.nodeName=e,a.children=l,a.attributes=null==t?void 0:t,a.key=null==t?void 0:t.key,void 0!==M.vnode&&M.vnode(a),a}function t(e,t){for(var n in t)e[n]=t[n];return e}function n(e,t){null!=e&&(\"function\"==typeof e?e(t):e.current=t)}function o(n,o){return e(n.nodeName,t(t({},n.attributes),o),arguments.length>2?[].slice.call(arguments,2):n.children)}function r(e){!e.__d&&(e.__d=!0)&&1==V.push(e)&&(M.debounceRendering||D)(i)}function i(){var e;while(e=V.pop())e.__d&&x(e)}function l(e,t,n){return\"string\"==typeof t||\"number\"==typeof t?void 0!==e.splitText:\"string\"==typeof t.nodeName?!e._componentConstructor&&a(e,t.nodeName):n||e._componentConstructor===t.nodeName}function a(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function u(e){var n=t({},e.attributes);n.children=e.children;var o=e.nodeName.defaultProps;if(void 0!==o)for(var r in o)void 0===n[r]&&(n[r]=o[r]);return n}function c(e,t){var n=t?document.createElementNS(\"http://www.w3.org/2000/svg\",e):document.createElement(e);return n.__n=e,n}function p(e){var t=e.parentNode;t&&t.removeChild(e)}function s(e,t,o,r,i){if(\"className\"===t&&(t=\"class\"),\"key\"===t);else if(\"ref\"===t)n(o,null),n(r,e);else if(\"class\"!==t||i)if(\"style\"===t){if(r&&\"string\"!=typeof r&&\"string\"!=typeof o||(e.style.cssText=r||\"\"),r&&\"object\"==typeof r){if(\"string\"!=typeof o)for(var l in o)l in r||(e.style[l]=\"\");for(var l in r)e.style[l]=\"number\"==typeof r[l]&&!1===E.test(l)?r[l]+\"px\":r[l]}}else if(\"dangerouslySetInnerHTML\"===t)r&&(e.innerHTML=r.__html||\"\");else if(\"o\"==t[0]&&\"n\"==t[1]){var a=t!==(t=t.replace(/Capture$/,\"\"));t=t.toLowerCase().substring(2),r?o||e.addEventListener(t,_,a):e.removeEventListener(t,_,a),(e.__l||(e.__l={}))[t]=r}else if(\"list\"!==t&&\"type\"!==t&&!i&&t in e){try{e[t]=null==r?\"\":r}catch(e){}null!=r&&!1!==r||\"spellcheck\"==t||e.removeAttribute(t)}else{var u=i&&t!==(t=t.replace(/^xlink:?/,\"\"));null==r||!1===r?u?e.removeAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase()):e.removeAttribute(t):\"function\"!=typeof r&&(u?e.setAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase(),r):e.setAttribute(t,r))}else e.className=r||\"\"}function _(e){return this.__l[e.type](M.event&&M.event(e)||e)}function f(){var e;while(e=A.shift())M.afterMount&&M.afterMount(e),e.componentDidMount&&e.componentDidMount()}function d(e,t,n,o,r,i){H++||(R=null!=r&&void 0!==r.ownerSVGElement,B=null!=e&&!(\"__preactattr_\"in e));var l=h(e,t,n,o,i);return r&&l.parentNode!==r&&r.appendChild(l),--H||(B=!1,i||f()),l}function h(e,t,n,o,r){var i=e,l=R;if(null!=t&&\"boolean\"!=typeof t||(t=\"\"),\"string\"==typeof t||\"number\"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=t&&(e.nodeValue=t):(i=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0))),i.__preactattr_=!0,i;var u=t.nodeName;if(\"function\"==typeof u)return N(e,t,n,o);if(R=\"svg\"===u||\"foreignObject\"!==u&&R,u+=\"\",(!e||!a(e,u))&&(i=c(u,R),e)){while(e.firstChild)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0)}var p=i.firstChild,s=i.__preactattr_,_=t.children;if(null==s){s=i.__preactattr_={};for(var f=i.attributes,d=f.length;d--;)s[f[d].name]=f[d].value}return!B&&_&&1===_.length&&\"string\"==typeof _[0]&&null!=p&&void 0!==p.splitText&&null==p.nextSibling?p.nodeValue!=_[0]&&(p.nodeValue=_[0]):(_&&_.length||null!=p)&&m(i,_,n,o,B||null!=s.dangerouslySetInnerHTML),y(i,t.attributes,s),R=l,i}function m(e,t,n,o,r){var i,a,u,c,s,_=e.childNodes,f=[],d={},m=0,b=0,y=_.length,g=0,w=t?t.length:0;if(0!==y)for(var C=0;C skill.ranks) { return false; }\n tierTotal += skill.invested || 0;\n };\n if (tierTotal > 0 && treeTotal + 5 < tierIndex * 5) { return false; }\n treeTotal += tierTotal;\n tierIndex += 1;\n };\n treeTotals[treeIndex] = treeTotal;\n totalSpent += treeTotal;\n treeIndex += 1;\n };\n if (totalSpent > (50 - 3) + 11 + 11) { return false; }\n return treeTotals;\n}\n","import deepmerge from 'deepmerge';\nimport investmentValidator from './investmentValidator';\nimport { setHash } from './hashHandler';\n\nexport default function reducer (state, action) {\n switch (action.type) {\n case 'skillChange':\n var newSkills = deepmerge(state.skills, {\n [action.treeName]: {\n [action.tierIndex + '']: {\n [action.skillName]: {\n invested: action.newValue,\n }\n }\n }\n });\n const skillChangeTotals = investmentValidator(newSkills);\n if (skillChangeTotals) {\n setHash(newSkills);\n return {\n ...state,\n invested: skillChangeTotals,\n skills: newSkills,\n };\n } else {\n return state;\n }\n case 'loadSkills':\n const loadSkillsTotals = investmentValidator(action.skills);\n if (loadSkillsTotals) {\n return {\n ...state,\n invested: loadSkillsTotals,\n skills: deepmerge(state.skills, action.skills),\n };\n } else {\n return state;\n }\n }\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"Eq4mJ\",\"heart\":\"_37Gl6\",\"moveHeart\":\"_34mPq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"splash\":\"_2_d3x\",\"wrapper\":\"vMurv\",\"link\":\"_3lx8i\",\"name\":\"_1SiOU\",\"job\":\"_3chgr\",\"disclaimer\":\"_3RIFV\"};","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.deepmerge = factory());\n}(this, (function () { 'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nreturn deepmerge_1;\n\n})));\n","import SKILLS from '@constants/skills';\nimport style from './index.css';\n\nfunction getInitials (string) {\n const numWords = (string.match(/\\s/g) || []).length + 1;\n switch (numWords) {\n case 1:\n return string.slice(0, 3);\n case 2:\n return (string.match(/^\\w{1,2}|\\s\\w{1,2}/g) || []).join('').replace(/\\s/g, '');\n default:\n return (string.match(/^\\w|\\s\\w/g) || []).join('').replace(/\\s/g, '');\n }\n}\n\nexport default function Skill ({\n name = '?',\n text = 'Long description',\n ranks = 0,\n invested = 0,\n tier = 0,\n level = 1,\n effect = (rank, level) => `Rank ${rank} effect`,\n type = null,\n enabled = true,\n image = null,\n onChange = (oldValue, newValue) => null,\n}) {\n const isAugment = [\n SKILLS.AUGMENT_CHEVRON,\n SKILLS.AUGMENT_DIAMOND,\n SKILLS.AUGMENT_ACTION_SKILL,\n ].includes(type);\n let shapeStyle = null;\n if (type === SKILLS.ACTION_SKILL) { shapeStyle = style.actionSkill; }\n if (type === SKILLS.AUGMENT_CHEVRON) { shapeStyle = style.chevron; }\n if (type === SKILLS.AUGMENT_DIAMOND) { shapeStyle = style.diamond; }\n if (type === SKILLS.AUGMENT_ACTION_SKILL) { shapeStyle = style.actionSkill; }\n function clickListener (event) {\n var newValue;\n if (event.type === 'click') {\n newValue = Math.min(invested + 1, ranks);\n } else { // (event.type === 'contextmenu')\n newValue = Math.max(invested - 1, 0);\n }\n if (enabled && invested !== newValue) {\n onChange(invested, newValue);\n }\n event.preventDefault();\n return false;\n }\n return (\n 0) ? style.usable : '',\n ].join(' ')}\n onClick={clickListener}\n onContextMenu={clickListener}\n >\n
{getInitials(name)}
\n { enabled && ranks > 0 &&
{invested}/{ranks}
}\n
\n

{name}

\n {text}\n { invested > 0 &&\n
\n Current Effect:
\n {effect(invested, level)}\n
\n }\n { type !== null &&\n
\n {effect(1, level)}\n
\n }\n { type == null && invested < ranks &&\n
\n Next Rank:
\n {effect(invested + 1, level)}\n
\n }\n
\n \n );\n}\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Siren ({ path }) {\n return (\n \n );\n}\n","export function setHash (skillsState) {\n const hashparts = [];\n for (let tree of Object.values(skillsState)) {\n for (let tier of Object.values(tree)) {\n for (let skill of Object.values(tier)) {\n if (skill.type == null) {\n hashparts.push(skill.invested || 0);\n }\n };\n };\n };\n const url = window.location.href.split('#')[0] + '#' + hashparts.join('');\n window.location.replace(url);\n};\n\nexport function getHash (skillsState) {\n const hash = window.location.href.split('#')[1] || '';\n const hashparts = hash.match(/./g) || [];\n const skills = JSON.parse(JSON.stringify(skillsState));\n for (let tree of Object.keys(skills)) {\n for (let tier of Object.keys(skills[tree])) {\n for (let skill of Object.keys(skills[tree][tier])) {\n if (skills[tree][tier][skill].type == null) {\n skills[tree][tier][skill] = { invested: parseInt(hashparts.shift() || 0) };\n } else {\n skills[tree][tier][skill] = {};\n }\n };\n };\n };\n return skills;\n};\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Beastmaster ({ path }) {\n return (\n \n );\n}\n","import SKILLS from '@constants/skills';\n\nfunction percent (rank, unit) {\n return Math.round(rank * unit * 10) / 10;\n}\nfunction flat (rank, level, unit) {\n return Math.floor(rank * unit);\n}\n\n// Stiff Upper Lip Damage Resistance\nfunction getStiffUpperLipDamageResistance(rank) {\n switch (rank) {\n case 1:\n return 6;\n case 2:\n return 12;\n case 3:\n return 16;\n default:\n return 0;\n }\n}\n\n// Nerves of Steel Handling\nfunction getNervesOfSteelHandling(rank) {\n switch (rank) {\n case 1:\n return 2.4;\n case 2:\n return 4.8;\n case 3:\n return 7;\n default:\n return 0;\n }\n}\n\n// Cold Bore Weapon Swap Speed\nfunction getColdBoreWeaponSwapSpeed(rank) {\n switch (rank) {\n case 1:\n return 13;\n case 2:\n return 23;\n case 3:\n return 31;\n case 4:\n return 38;\n case 5:\n return 43;\n default:\n return 0;\n }\n}\n\n// Cool Hand Passive Reload Speed\nfunction getCoolHandPassiveReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 2.9;\n case 2:\n return 5.7;\n case 3:\n return 8.3;\n case 4:\n return 10.7;\n case 5:\n return 13;\n default:\n return 0;\n }\n}\n\n// Cool Hand After Kill Reload Speed\nfunction getCoolHandAfterKillReloadSpeed(rank) {\n switch (rank) {\n case 1:\n return 4;\n case 2:\n return 7;\n case 3:\n return 11;\n case 4:\n return 14;\n case 5:\n return 17;\n default:\n return 0;\n }\n}\n\n/* eslint-disable quotes */\nconst skills = {\n \"Under Cover\": {\n \"0\": {\n \"Barrier\": {\n text: \"Drop a deployable Barrier that blocks incoming projectiles. Zane and his allies can shoot through the Barrier, dealing increased Gun Damage. Pressing [Action Skill key] while Barrier is active picks up and holds the Barrier, but the size and bonuses are decreased.\",\n effect: (rank, level) => `Duration: 14 seconds\\nCooldown: 24 seconds\\nGun Damage Amp: +25%`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Adrenaline\": {\n text: \"Zane gains increased Action Skill Cooldown Rate. This bonus is based on the amount of shield he has. The more percent full, the greater the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Cooldown Rate: Up to +${percent(rank, 7)}%`,\n },\n \"Hearty Stock\": {\n text: \"Zane gains increased Maximum Shield Capacity.\",\n ranks: 3,\n effect: (rank, level) => `Maximum Shield: +${percent(rank, 10)}%`,\n },\n \"Ready for Action\": {\n text: \"Zane gains improved Shield Recharge Rate and Shield Recharge Delay.\",\n ranks: 5,\n effect: (rank, level) => `Shield Recharge Delay: -${percent(rank, 7)}%\\nShield Recharge Rate: +${percent(rank, 6)}%`,\n },\n },\n \"2\": {\n \"Charged Relay\": {\n text: \"Whenever Zane or an ally touches the Barrier, they gain increased Movement Speed and Reload Speed for a few seconds.\",\n ranks: 0,\n effect: (rank, level) => `Reload Speed: +20%\\nMovement Speed: +11%\\nDuration: 8 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Brainfreeze\": {\n text: \"Whenever Zane scores a Critical Hit on an enemy, there is a chance they will be Slowed. This effect stacks until the target is Frozen.\",\n ranks: 5,\n effect: (rank, level) => `Slow Chance: ${percent(rank, 4)}%`,\n },\n \"Stiff Upper Lip\": {\n text: \"Whenever Zane is damaged, he gains Damage Resistance against that damage type.\",\n ranks: 3,\n effect: (rank, level) => `Damage Resistance: +${getStiffUpperLipDamageResistance(rank)}%`,\n },\n \"Rise to the Occasion\": {\n text: \"Zane gains Health Regeneration. The lower his shield is, the higher the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Health Regeneration: Up to +${percent(rank, 1)}% of Max Health/sec`,\n },\n },\n \"3\": {\n \"Nanites or Some Shite\": {\n text: \"Zane and his allies gain Health Regeneration, increased Reload Speed, and greatly improved Shield Recharge Delay while near his Barrier. The lower their health, the more health is regenerated.\",\n ranks: 0,\n effect: (rank, level) => `Team Health Regen: Up to +4% of Max Health/sec\\nTeam Shield Recharge Delay: -33%\\nTeam Reload Speed: +11%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Confident Competence\": {\n text: \"While Zane's shields are active, he gains increased Gun Damage and Accuracy. These bonuses are based on the amount of shields he has. The more percent full, the greater the bonuses.\",\n ranks: 1,\n effect: (rank, level) => `Gun Damage: Up to +35%\\nAccuracy: Up to +33%`,\n },\n \"All-Rounder\": {\n text: \"Zane's Barrier becomes a dome, covering all sides.\",\n ranks: 0,\n effect: (rank, level) => `Barrier Cooldown: +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Redistribution\": {\n text: \"Zane and allies near the Barrier gain increased Gun Damage for a few seconds after the Barrier takes damage.\",\n ranks: 0,\n effect: (rank, level) => `Team Gun Damage: +10%\\nDuration: 3 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Really Expensive Jacket\": {\n text: \"Elemental Status Effects applied to Zane have reduced duration.\",\n ranks: 1,\n effect: (rank, level) => `Status Effect Duration: -50%`,\n },\n \"Best Served Cold\": {\n text: \"Kill Skill. Whenever Zane kills an enemy, they create a Cryo Nova, dealing damage to all nearby enemies. This skill has a short cooldown.\",\n ranks: 5,\n effect: (rank, level) => `Cryo Damage: ${flat(rank, level, 2)} (increases with character level)\\nCooldown: 3 seconds`,\n },\n \"Futility Belt\": {\n text: \"Zane gains resistance to non-elemental damage.\\nKill Skill. After killing an enemy, all elemental damage Zane takes is converted to non-elemental damage.\",\n ranks: 1,\n effect: (rank, level) => `Non-Elemental Damage Resistance: +15%\\nDuration: 8 seconds`,\n },\n \"Deterrence Field\": {\n text: \"Enemies that touch the Barrier take Shock Damage and are staggered.\",\n ranks: 0,\n effect: (rank, level) => `Shock Damage: ${flat(1, level, 27)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Refreshment\": {\n text: \"Whenever Zane damages a frozen enemy with his weapon, he gains some of that damage back as health.\",\n ranks: 3,\n effect: (rank, level) => `Life Steal: +${percent(rank, 8)}% of damage dealt`,\n },\n \"Calm, Cool, Collected\": {\n text: \"Whenever Zane Freezes an enemy, his shield instantly begins recharging.\\nIf Zane's shields are already full, he regenerates health for a few seconds.\\nIf Zane's health is already full, his Action Skill Cooldowns and Durations are immediately reset.\",\n ranks: 1,\n effect: (rank, level) => `Health Regeneration: +3% of Max Health per second\\nHealth Regeneration Duration: 3 seconds`,\n },\n \"Nerves of Steel\": {\n text: \"Zane gains increasing Accuracy and Handling. The longer his shield is full, the greater the bonuses.\",\n ranks: 3,\n effect: (rank, level) => `Accuracy: +${percent(rank, 2)}% per second\\nHandling: +${getNervesOfSteelHandling(rank)}% per second\\nMaximum Stacks: 15`,\n },\n },\n \"6\": {\n \"Distributed Denial\": {\n text: \"Zane's Barrier gains the effects of his currently equipped Shield Mod. Additionally, shield effects are applied to all allies near the Barrier. Bonuses to Zane are reduced.\",\n ranks: 1,\n },\n },\n },\n \"Hitman\": {\n \"0\": {\n \"SNTNL\": {\n text: \"Send into battle an automated SNTNL drone that continually flies through the environment and attacks enemies with its Machine Guns. Pressing [Action Skill key] while SNTNL is active causes it to attack the enemy under Zane's crosshairs, if any. Machine Gun Element: Non-Elemental.\",\n effect: (rank, level) => `Machine Gun Damage: ${flat(rank, level, 6)} (increases with character level)\\nDuration: 24 seconds\\nCooldown: 60 seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n }\n },\n \"1\": {\n \"Violent Speed\": {\n text: \"Kill Skill. After killing an enemy, Zane gains increased Movement Speed for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Movement Speed: +${percent(rank, 4)}%\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Cold Bore\": {\n text: \"Zane gains increased Weapon Swap Speed. The next shot fired after swapping weapons deals Bonus Cryo Damage.\",\n ranks: 5,\n effect: (rank, level) => `Weapon Swap Speed: +${getColdBoreWeaponSwapSpeed(rank)}%\\nBonus Cryo Damage: +${percent(rank, 6)}% of damage dealt`,\n },\n \"Violent Momentum\": {\n text: \"Zane's Gun Damage is increased while moving. The quicker he moves, the greater the bonus.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}% at default walk speed`,\n },\n },\n \"2\": {\n \"Winter's Drone\": {\n text: \"Converts SNTNL's primary weapons to Cryo Damage.\",\n ranks: 0,\n type: SKILLS.AUGMENT_CHEVRON,\n effect: (rank, level) => `SNTNL Weapons Element: Cryo`,\n },\n \"Cool Hand\": {\n text: \"Zane gains increased Reload Speed.\\nKill Skill. After killing an enemy, Zane's Reload Speed is increased for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Reload Speed: +${getCoolHandPassiveReloadSpeed(rank)}%\\nAdditional Reload Speed: +${getCoolHandAfterKillReloadSpeed(rank)}%\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Drone Delivery\": {\n text: \"SNTRY will occasionally drop a free grenade based on your current grenade mod while attacking enemies.\",\n ranks: 1,\n effect: (rank, level) => `Cooldown: 15 seconds`,\n },\n \"Salvation\": {\n text: \"Kill Skill. After killing an enemy, Zane's weapons gain Life Steal for a few seconds.\",\n ranks: 5,\n effect: (rank, level) => `Life Steal: +${percent(rank, 2)}% of damage dealt\\nDuration: 8 seconds`,\n },\n },\n \"3\": {\n \"Bad Dose\": {\n text: \"SNTNL occasionally shoots out a beam of Radiation that weakens enemies and buffs Zane. For every weakened enemy, Zane's Movement Speed and Fire Rate are increased. Weakened enemies have decreased Movement Speed and Attack Speed.\",\n ranks: 0,\n effect: (rank, level) => `Fire Rate: +2% per affected enemy\\nMovement Speed: +6% per affected enemy\\nBeam Damage: ${flat(rank, level, 4)} (increases with character level)\\nDuration: 12 seconds\\nCooldown: 8 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Death Follows Close\": {\n text: \"All of Zane's Kill Skills gain increased effect and duration.\",\n ranks: 1,\n effect: (rank, level) => `Kill Skill Bonus: +25%\\nKill Skill Duration: +7 seconds`,\n },\n \"Static Field\": {\n text: \"SNTNL emits a static field that sends a Shock Beam to nearby enemies, draining their shields and replenishing Zane's.\",\n ranks: 0,\n effect: (rank, level) => `Shield Damage: 2/sec (increases with character level)\\nCooldown: 2 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Boomsday\": {\n text: \"SNTNL adds a rocket pod to its primary weapons, allowing it to shoot rockets as well as machine guns. Element: Non-Elemental.\",\n ranks: 0,\n effect: (rank, level) => `Rocket Damage: ${flat(rank, level, 32)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Violent Violence\": {\n text: \"Kill Skill. After killing an enemy, Zane gains increased Fire Rate for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Fire Rate: +${percent(rank, 3)}%\\nCooldown: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Playing Dirty\": {\n text: \"Kill Skill. After killing an enemy, Zane's next five shots all have a chance to fire an additional projectile.\",\n ranks: 5,\n effect: (rank, level) => `Extra Shot Chance: ${percent(rank, 10)}%`,\n },\n \"Almighty Ordnance\": {\n text: \"Hold down [Action Skill key] while SNTNL is deployed to paint a target area. SNTNL fires a missile barrage at that area, and if an enemy is killed, SNTNL's duration is reset. This can only be used once per Action Skill use.\",\n ranks: 0,\n effect: (rank, level) => `Missile Damage: ${flat(rank, level, 56)} (increases with character level)\\nMissiles per Barrage: 4`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Good Misfortune\": {\n text: \"Kill Skill. Killing an enemy increases Zane's Action Skill Duration. This skill has diminishing returns.\",\n ranks: 3,\n effect: (rank, level) => `Action Skill Duration Returned: +${percent(rank, 4)}% of Max Duration`,\n },\n },\n \"6\": {\n \"Seein' Red\": {\n text: \"Activating an Action Skill automatically activates all of Zane's Kill Skills.\",\n ranks: 1,\n }\n }\n },\n \"Doubled Agent\": {\n \"0\": {\n \"Digi-Clone\": {\n text: \"Spawn a Digi-Clone of Zane. The Digi-Clone stays in place, but distracts and fires at enemies. Pressing [Action Skill key] while the Digi-Clone is active causes Zane and the Digi-Clone to swap places.\",\n effect: (rank, level) => `Duration: 15 seconds\\nCooldown: 28 seconds`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Synchronicity\": {\n text: \"Zane gains increased Gun Damage for each active Action Skill.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 4)}% per active Action Skill`,\n },\n \"Praemunitus\": {\n text: \"Zane and his Digi-Clone gain increased Magazine Size.\",\n ranks: 3,\n effect: (rank, level) => `Magazine Size: +${percent(rank, 8.333)}%\\nDigi-Clone Magazine Size: +${percent(rank, 8.333)}%`,\n },\n \"Borrowed Time\": {\n text: \"Zane gains increased Action Skill Duration for each active Action Skill.\",\n ranks: 5,\n effect: (rank, level) => `Action Skill Duration: +${percent(rank, 6)}% per active Action Skill`,\n },\n },\n \"2\": {\n \"Binary System\": {\n text: \"Whenever Zane swaps places with his Digi-Clone, a Cryo Nova is triggered around Zane and his Digi-Clone.\",\n ranks: 0,\n effect: (rank, level) => `Cryo Damage: ${flat(rank, level, 46)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Donnybrook\": {\n text: \"Kill Skill. Whenever Zane kills an enemy, he and his Digi-Clone receive increased Gun Damage and gain Health Regeneration for a few seconds. This effect stacks twice.\",\n ranks: 5,\n effect: (rank, level) => `Gun Damage: +${percent(rank, 3)}%\\nHealth Regeneration: +${percent(rank, 0.5)}% of Missing Health/sec\\nDigi-Clone Gun Damage: +${percent(rank, 3)}%\\nDigi-Clone Health Regen: +${percent(rank, 0.5)}% Missing Health/sec\\nDuration: 8 seconds\\nMaximum Stacks: 2`,\n },\n \"Fractal Frags\": {\n text: \"The Digi-Clone throws a copy of Zane's current grenade mod when it is first activated. If the Digi-Clone is killed, it drops a free grenade. Killing an enemy while the Digi-Clone is active gives the Digi-Clone a chance to throw a grenade.\",\n ranks: 1,\n effect: (rank, level) => `Grenade Chance: 30%`,\n },\n \"Duct Tape Mod\": {\n text: \"The first shot fired from Zane's gun has a chance to also fire a grenade. This skill has a short cooldown.\",\n ranks: 5,\n effect: (rank, level) => `Grenade Chance: ${percent(rank, 4)}%\\nCooldown: 8 seconds`,\n },\n },\n \"3\": {\n \"Schadenfreude\": {\n text: \"Whenever the Digi-Clone takes damage, Zane's shield is restored by a portion of that damage.\",\n ranks: 0,\n effect: (rank, level) => `Shields Restored: 100% of damage taken by Digi-Clone`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Quick Breather\": {\n text: \"Whenever Zane swaps places with his Digi-Clone, his shield immediately begins recharging. The Digi-Clone also immediately restores health.\",\n ranks: 1,\n effect: (rank, level) => `Digi-Clone Health Restored: 50% of Max Health`,\n },\n \"Which One's Real?\": {\n text: \"Enemies are more likely to target the Digi-Clone for a few seconds after it's summoned and after swapping places.\",\n ranks: 0,\n effect: (rank, level) => `Duration: 4 seconds`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Dopplebanger\": {\n text: \"Hold down [Action Skill key] to end the action skill early. When Zane's Action Skill is ended, the Digi-Clone explodes, dealing Splash Damage to all nearby enemies. The more Action Skill time remaining, the greater the damage.\",\n ranks: 0,\n effect: (rank, level) => `Damage: Up to ${flat(rank, level, 280)} (increases with character level)`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Pocket Full of Grenades\": {\n text: \"Kill Skill. After killing an enemy, Zane gains Grenade Regeneration for a few seconds.\",\n ranks: 3,\n effect: (rank, level) => `Grenade Regeneration: +${percent(rank, 5)}% per second\\nDuration: 8 seconds`,\n },\n \"Old-U\": {\n text: \"Press [Action Skill key] during Fight For Your Life if Digi-Clone is active to destroy the Digi-Clone and immediately gain a Second Wind with full health.\",\n ranks: 1,\n effect: (rank, level) => `Health Restored: 100% of Maximum Health`,\n },\n \"Supersonic Man\": {\n text: \"Zane gains increased Movement Speed for each active Action Skill.\",\n ranks: 3,\n effect: (rank, level) => `Movement Speed: +${percent(rank, 4)}% per active Action Skill`,\n },\n \"Digital Distribution\": {\n text: \"If Zane takes health damage while the Digi-Clone is active, a portion of that damage is inflicted on his Digi-Clone instead.\",\n ranks: 0,\n effect: (rank, level) => `Damage Shared: 75%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Like a Ghost\": {\n text: \"Zane and his Digi-Clone gain a chance to ignore bullets. This chance is increased for a few seconds after activating an Action Skill. This effect stacks.\",\n ranks: 3,\n effect: (rank, level) => `Ignore Bullet Chance: +${percent(rank, 2)}%\\nAdditional Ignore Bullet Chance: +${percent(rank, 3)}%\\nDuration: 8 seconds`,\n },\n \"Boom. Enhance.\": {\n text: \"Whenever Zane summons his Digi-Clone, it consumes up to 3 grenades. For every grenade consumed, the Digi-Clone gains increased Gun Damage, Maximum Health, Fire Rate, Reload Speed, and Digi-Clone Duration.\",\n ranks: 1,\n effect: (rank, level) => `Digi-Clone Gun Damage: +20% per grenade\\nDigi-Clone Maximum Health: +81% per grenade\\nDigi-Clone Fire Rate: +5% per grenade\\nDigi-Clone Reload Speed: +31% per grenade\\nDigi-Clone Duration: +25% per grenade`,\n },\n \"Trick of the Light\": {\n text: \"Zane deals Bonus Cryo Damage to enemies that aren't targeting him.\",\n ranks: 3,\n effect: (rank, level) => `Bonus Cryo Damage: +${percent(rank, 12)}% of damage dealt`,\n },\n },\n \"6\": {\n \"Double Barrel\": {\n text: \"The Digi-Clone is equipped with a copy of Zane's Current Weapon when activated. Swapping places with the Digi-Clone causes Zane and his Digi-Clone to gain increased Gun Damage.\",\n ranks: 1,\n effect: (rank, level) => `Item Duping: +100%\\nGun Damage: +25%\\nDigi-Clone Gun Damage: +25%`,\n },\n },\n },\n};\n\nexport default skills;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/bundle.f9aae.css b/bundle.f9aae.css new file mode 100644 index 0000000..1491f9b --- /dev/null +++ b/bundle.f9aae.css @@ -0,0 +1 @@ +.Eq4mJ{align-self:stretch;font-family:var(--font-header);justify-content:center;align-items:center;display:flex;line-height:2;background-image:linear-gradient(0deg,rgba(0,0,0,.5) 0,rgba(0,0,0,.494) 8.1%,rgba(0,0,0,.476) 15.5%,rgba(0,0,0,.448) 22.5%,rgba(0,0,0,.412) 29%,rgba(0,0,0,.37) 35.3%,rgba(0,0,0,.324) 41.2%,rgba(0,0,0,.275) 47.1%,rgba(0,0,0,.225) 52.9%,rgba(0,0,0,.176) 58.8%,rgba(0,0,0,.13) 64.7%,rgba(0,0,0,.088) 71%,rgba(0,0,0,.052) 77.5%,rgba(0,0,0,.024) 84.5%,rgba(0,0,0,.006) 91.9%,transparent)}.Eq4mJ span a{color:inherit;transition:color var(--transition-duration)}.Eq4mJ a:focus,.Eq4mJ a:hover{color:#e2264d}._37Gl6{width:2em;height:2em;background:transparent url(/45598562077bdc84281b5330ff4d283e.png) no-repeat;background-size:2900%;margin:0 -.4em}._37Gl6:hover{background-position:100%;animation:_34mPq .8s steps(28) forwards}@keyframes _34mPq{0%{background-position:0}50%{background-position:100%}to{background-position:100%}}._2_d3x{margin:auto}.vMurv{padding:1rem;background-color:rgba(0,0,0,.5)}._3lx8i,.vMurv{text-align:center}._3lx8i{display:inline-block;margin:.5rem;background-color:#000;color:#ffd900;padding:.25em;font-weight:700;font-size:3rem;text-decoration:none}._3lx8i:focus,._3lx8i:hover{color:#000;background-color:#ffd900}._1SiOU,._3chgr{text-transform:uppercase}._3chgr{font-size:.4em}._3RIFV{position:absolute;transform:translate(-100%,50%) rotate(-14deg);color:red;font-size:.5em;display:inline-block;margin-right:0}._3JH8h{position:relative;flex:0 1 auto;margin:.5rem;padding:0;height:2rem;width:2rem;line-height:1;display:flex;text-align:center;justify-content:center;align-items:center;color:hsla(0,0%,100%,.5);--saturation:0;--luminance:0.4}._3JH8h:after,._3JH8h:before{content:"";position:absolute;bottom:0;right:0;height:100%;width:100%;clip-path:polygon(0 15%,15% 0,100% 0,100% 85%,85% 100%,0 100%)}._3JH8h:before{z-index:2;background-image:linear-gradient(180deg,hsl(var(--themeHue),calc(100%*var(--saturation)),calc(20%*var(--luminance))),hsl(var(--themeHue),calc(100%*var(--saturation)),calc(36%*var(--luminance))));transform:scale(.9)}._3JH8h:after{z-index:1;background-color:hsl(var(--themeHue),calc(100%*var(--saturation)),calc(65%*var(--luminance)))}._1mLSi{--saturation:0.0;--luminance:0.75;color:var(--whiteText)}._1xemn{--saturation:0.91;--luminance:1}._3JH8h:hover{--themeHue:51;--saturation:1;--luminance:1.2;color:var(--whiteText)}._3VkFk:before{transform:scale(.7)}._3VkFk:after{transform:scale(.79)}.-z8wv:after,.-z8wv:before{clip-path:polygon(50% 0,93.3% 25%,93.3% 75%,50% 100%,6.7% 75%,6.7% 25%)}._2t_-G:after,._2t_-G:before{clip-path:polygon(0 0,50% 25%,100% 0,100% 75%,50% 100%,0 75%);transform-origin:50% 60%}._2ej0d:after,._2ej0d:before{clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}.-z8wv,._3VkFk{margin:0;padding:.5rem;height:3em;width:3em}._3VkFk{background-color:var(--themeColor);z-index:0}._3VkFk:first-child{position:absolute;right:100%}._3VkFk:last-child{position:absolute;left:100%}._3VkFk:only-child{position:relative;background-color:transparent;outline:none;left:auto;right:auto}._8ejWg{position:relative;z-index:3;mix-blend-mode:luminosity}._8ejWg>img{width:1.8em;opacity:.5}._1mLSi ._8ejWg>img,._3JH8h:hover ._8ejWg>img{opacity:1}._3DD7O{position:absolute;bottom:-.25rem;right:-.25rem;z-index:4;font-size:.6em;font-style:italic;color:var(--whiteText);font-weight:700;padding:.1em .3em .1em .15em;text-align:center;text-shadow:0 0 .5em #000;border-radius:.4em .2em;background-color:hsl(var(--themeHue),calc(100%*var(--saturation)),calc(30%*var(--luminance)));border:.15em solid;border-color:hsl(var(--themehue),calc(100%*var(--saturation)),calc(10%*var(--luminance)))}._1xemn ._3DD7O{color:hsl(var(--themeHue),91%,80%)}._394yV{margin-bottom:.5rem;font-weight:700}._1S9-f{display:none;z-index:10;text-align:left;font-size:.9rem;white-space:pre-line}.oiyDq{margin-top:.5em}._3JH8h:hover ._1S9-f{pointer-events:none;font-size:.8em;background-color:#1a1a1a;color:var(--whiteText);border:.15rem solid #000;padding:.5rem;display:block;position:absolute;bottom:100%;width:20rem;transform:translateX(calc((1 - var(--treeindex))*40%))}.-z8wv:hover ._1S9-f{bottom:auto;top:100%}._2zgqJ{display:flex;flex-direction:column;align-items:center;cursor:default}._1Jomm{display:flex;align-items:stretch;margin:1rem auto}._17kLY{display:block;margin:0 auto;top:3rem;text-align:center;font-size:3rem;color:#ffd900;line-height:1}._3J3hw,._17kLY{text-transform:uppercase}._3J3hw{font-size:.4em}._2UO55{margin-left:.5rem;display:flex;flex-direction:column;width:6em}._1Jomm>nav>a,._17kLY,.K9CBr>a,.xH9ts{background-color:#000;padding:.5rem}.K9CBr,.K9CBr>a,.xH9ts{position:relative;display:flex;justify-content:center;align-items:center;flex:1}.K9CBr{margin-top:.5rem;cursor:pointer;font-size:.8em}.K9CBr>a:hover{color:#fff;background-color:red}.xH9ts:after{position:absolute;z-index:1;width:10em;top:60%;text-shadow:0 0 .2em #000;text-transform:uppercase;font-size:.8em;font-weight:700;pointer-events:none;text-align:center}._1Jomm>nav{display:flex;align-items:stretch}._1Jomm>nav>a{margin-left:.5rem;writing-mode:vertical-rl;text-orientation:mixed;text-decoration:none;color:#ffd900;text-transform:uppercase;font-weight:700}._1Jomm>nav>a:hover{background-color:#ffd900;color:#000}._3Ch4X,._3ek45{display:flex}._1WAM2{text-align:center;order:1;font-size:1em;line-height:1.5rem}.gRWZY{--themeColor:hsl(var(--themeHue),91%,22%);display:flex;flex-direction:column;margin:1rem;padding:0 3rem;background-image:linear-gradient(0deg,var(--themeColor),var(--themeColor));background-size:100% calc(100% - 1.5rem);background-repeat:no-repeat;background-position:bottom;background-clip:content-box;color:hsla(0,0%,100%,.8)}._2Su0b{position:relative;-webkit-user-select:none;user-select:none;height:21rem}._2Su0b:before{--gradientStop:calc(var(--invested)*0.6rem + 4rem);content:"";position:absolute;top:1.85rem;bottom:0;left:.375rem;right:.375rem;background-image:linear-gradient(180deg,hsl(var(--themeHue),91%,30%) calc(var(--gradientStop) - 1rem),hsl(var(--themeHue),91%,50%) var(--gradientStop),hsl(var(--themeHue),91%,15%) calc(var(--gradientStop) + 1px));border:.15rem solid rgba(0,0,0,.8)}._3Ch4X{width:10.5rem;justify-content:center;position:relative}.-Pl7G{--themeHue:106}._1nm1I{--themeHue:207}._3T1pZ{--themeHue:18}.Fmsm1{--themeHue:287}a{color:inherit}:root{--radius:2px;--whiteText:hsla(0,0%,100%,0.8);--blackText:rgba(0,0,0,0.8);--transition-duration:300ms;--font-header:sans-serif;--font-list:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:1.5vw}@media screen and (min-width:189vh){:root{font-size:2.835vh}}*{margin:0;padding:0}*,:after,:before{box-sizing:border-box}body{position:relative;min-height:100vh;color:#f8f8fa;font-family:var(--font-list);-webkit-font-smoothing:antialiased;background-color:#333;background-image:url(/6274c9808eb08785f146a2b78283b5f6.jpg);background-size:cover;background-position:50%;justify-content:center}body,body>*{display:flex;flex-direction:column;align-items:stretch}body>*{flex-grow:1;justify-content:space-between} \ No newline at end of file diff --git a/gunner/index.html b/gunner/index.html deleted file mode 100644 index 06de562..0000000 --- a/gunner/index.html +++ /dev/null @@ -1 +0,0 @@ -Borderlands 3 Skill Planner \ No newline at end of file diff --git a/index.html b/index.html index 06de562..15fd96b 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Borderlands 3 Skill Planner \ No newline at end of file +Borderlands 3 Skill Planner \ No newline at end of file diff --git a/operative/index.html b/operative/index.html deleted file mode 100644 index 06de562..0000000 --- a/operative/index.html +++ /dev/null @@ -1 +0,0 @@ -Borderlands 3 Skill Planner \ No newline at end of file diff --git a/siren/index.html b/siren/index.html deleted file mode 100644 index 06de562..0000000 --- a/siren/index.html +++ /dev/null @@ -1 +0,0 @@ -Borderlands 3 Skill Planner \ No newline at end of file diff --git a/sw.js b/sw.js index b2dd721..2f1d142 100644 --- a/sw.js +++ b/sw.js @@ -1,3 +1,3 @@ -var __wpo = {"assets":{"main":["/45598562077bdc84281b5330ff4d283e.png","/6274c9808eb08785f146a2b78283b5f6.jpg","/bundle.1c326.css","/bundle.27db9fed.js","/assets/favicon.png","/assets/hunters/Beastmaster/000.png","/assets/hunters/Beastmaster/001.png","/assets/hunters/Beastmaster/010.png","/assets/hunters/Beastmaster/011.png","/assets/hunters/Beastmaster/012.png","/assets/hunters/Beastmaster/020.png","/assets/hunters/Beastmaster/021.png","/assets/hunters/Beastmaster/022.png","/assets/hunters/Beastmaster/023.png","/assets/hunters/Beastmaster/030.png","/assets/hunters/Beastmaster/031.png","/assets/hunters/Beastmaster/032.png","/assets/hunters/Beastmaster/033.png","/assets/hunters/Beastmaster/040.png","/assets/hunters/Beastmaster/041.png","/assets/hunters/Beastmaster/042.png","/assets/hunters/Beastmaster/043.png","/assets/hunters/Beastmaster/050.png","/assets/hunters/Beastmaster/051.png","/assets/hunters/Beastmaster/060.png","/assets/hunters/Beastmaster/100.png","/assets/hunters/Beastmaster/101.png","/assets/hunters/Beastmaster/110.png","/assets/hunters/Beastmaster/111.png","/assets/hunters/Beastmaster/112.png","/assets/hunters/Beastmaster/120.png","/assets/hunters/Beastmaster/121.png","/assets/hunters/Beastmaster/122.png","/assets/hunters/Beastmaster/123.png","/assets/hunters/Beastmaster/130.png","/assets/hunters/Beastmaster/131.png","/assets/hunters/Beastmaster/132.png","/assets/hunters/Beastmaster/133.png","/assets/hunters/Beastmaster/140.png","/assets/hunters/Beastmaster/141.png","/assets/hunters/Beastmaster/142.png","/assets/hunters/Beastmaster/143.png","/assets/hunters/Beastmaster/150.png","/assets/hunters/Beastmaster/151.png","/assets/hunters/Beastmaster/152.png","/assets/hunters/Beastmaster/160.png","/assets/hunters/Beastmaster/200.png","/assets/hunters/Beastmaster/201.png","/assets/hunters/Beastmaster/210.png","/assets/hunters/Beastmaster/211.png","/assets/hunters/Beastmaster/212.png","/assets/hunters/Beastmaster/220.png","/assets/hunters/Beastmaster/221.png","/assets/hunters/Beastmaster/222.png","/assets/hunters/Beastmaster/223.png","/assets/hunters/Beastmaster/230.png","/assets/hunters/Beastmaster/231.png","/assets/hunters/Beastmaster/232.png","/assets/hunters/Beastmaster/240.png","/assets/hunters/Beastmaster/241.png","/assets/hunters/Beastmaster/242.png","/assets/hunters/Beastmaster/243.png","/assets/hunters/Beastmaster/250.png","/assets/hunters/Beastmaster/251.png","/assets/hunters/Beastmaster/252.png","/assets/hunters/Beastmaster/260.png","/assets/hunters/Beastmaster/hero.png","/assets/hunters/Gunner/000.png","/assets/hunters/Gunner/010.png","/assets/hunters/Gunner/011.png","/assets/hunters/Gunner/012.png","/assets/hunters/Gunner/020.png","/assets/hunters/Gunner/021.png","/assets/hunters/Gunner/022.png","/assets/hunters/Gunner/023.png","/assets/hunters/Gunner/024.png","/assets/hunters/Gunner/030.png","/assets/hunters/Gunner/031.png","/assets/hunters/Gunner/032.png","/assets/hunters/Gunner/033.png","/assets/hunters/Gunner/040.png","/assets/hunters/Gunner/041.png","/assets/hunters/Gunner/042.png","/assets/hunters/Gunner/043.png","/assets/hunters/Gunner/050.png","/assets/hunters/Gunner/051.png","/assets/hunters/Gunner/052.png","/assets/hunters/Gunner/060.png","/assets/hunters/Gunner/100.png","/assets/hunters/Gunner/110.png","/assets/hunters/Gunner/111.png","/assets/hunters/Gunner/112.png","/assets/hunters/Gunner/120.png","/assets/hunters/Gunner/121.png","/assets/hunters/Gunner/122.png","/assets/hunters/Gunner/123.png","/assets/hunters/Gunner/124.png","/assets/hunters/Gunner/130.png","/assets/hunters/Gunner/131.png","/assets/hunters/Gunner/132.png","/assets/hunters/Gunner/133.png","/assets/hunters/Gunner/140.png","/assets/hunters/Gunner/141.png","/assets/hunters/Gunner/142.png","/assets/hunters/Gunner/143.png","/assets/hunters/Gunner/150.png","/assets/hunters/Gunner/151.png","/assets/hunters/Gunner/152.png","/assets/hunters/Gunner/160.png","/assets/hunters/Gunner/200.png","/assets/hunters/Gunner/210.png","/assets/hunters/Gunner/211.png","/assets/hunters/Gunner/212.png","/assets/hunters/Gunner/220.png","/assets/hunters/Gunner/221.png","/assets/hunters/Gunner/222.png","/assets/hunters/Gunner/223.png","/assets/hunters/Gunner/224.png","/assets/hunters/Gunner/230.png","/assets/hunters/Gunner/231.png","/assets/hunters/Gunner/232.png","/assets/hunters/Gunner/233.png","/assets/hunters/Gunner/240.png","/assets/hunters/Gunner/241.png","/assets/hunters/Gunner/242.png","/assets/hunters/Gunner/243.png","/assets/hunters/Gunner/250.png","/assets/hunters/Gunner/251.png","/assets/hunters/Gunner/252.png","/assets/hunters/Gunner/260.png","/assets/hunters/Gunner/hero.png","/assets/hunters/Operative/000.png","/assets/hunters/Operative/010.png","/assets/hunters/Operative/011.png","/assets/hunters/Operative/012.png","/assets/hunters/Operative/020.png","/assets/hunters/Operative/021.png","/assets/hunters/Operative/022.png","/assets/hunters/Operative/023.png","/assets/hunters/Operative/030.png","/assets/hunters/Operative/031.png","/assets/hunters/Operative/032.png","/assets/hunters/Operative/040.png","/assets/hunters/Operative/041.png","/assets/hunters/Operative/042.png","/assets/hunters/Operative/043.png","/assets/hunters/Operative/044.png","/assets/hunters/Operative/050.png","/assets/hunters/Operative/051.png","/assets/hunters/Operative/052.png","/assets/hunters/Operative/060.png","/assets/hunters/Operative/100.png","/assets/hunters/Operative/110.png","/assets/hunters/Operative/111.png","/assets/hunters/Operative/112.png","/assets/hunters/Operative/120.png","/assets/hunters/Operative/121.png","/assets/hunters/Operative/122.png","/assets/hunters/Operative/123.png","/assets/hunters/Operative/130.png","/assets/hunters/Operative/131.png","/assets/hunters/Operative/132.png","/assets/hunters/Operative/140.png","/assets/hunters/Operative/141.png","/assets/hunters/Operative/142.png","/assets/hunters/Operative/143.png","/assets/hunters/Operative/150.png","/assets/hunters/Operative/160.png","/assets/hunters/Operative/200.png","/assets/hunters/Operative/210.png","/assets/hunters/Operative/211.png","/assets/hunters/Operative/212.png","/assets/hunters/Operative/220.png","/assets/hunters/Operative/221.png","/assets/hunters/Operative/222.png","/assets/hunters/Operative/223.png","/assets/hunters/Operative/230.png","/assets/hunters/Operative/231.png","/assets/hunters/Operative/232.png","/assets/hunters/Operative/240.png","/assets/hunters/Operative/241.png","/assets/hunters/Operative/242.png","/assets/hunters/Operative/243.png","/assets/hunters/Operative/244.png","/assets/hunters/Operative/250.png","/assets/hunters/Operative/251.png","/assets/hunters/Operative/252.png","/assets/hunters/Operative/260.png","/assets/hunters/Operative/hero.png","/assets/hunters/Siren/000.png","/assets/hunters/Siren/010.png","/assets/hunters/Siren/011.png","/assets/hunters/Siren/012.png","/assets/hunters/Siren/020.png","/assets/hunters/Siren/021.png","/assets/hunters/Siren/022.png","/assets/hunters/Siren/023.png","/assets/hunters/Siren/030.png","/assets/hunters/Siren/031.png","/assets/hunters/Siren/032.png","/assets/hunters/Siren/033.png","/assets/hunters/Siren/034.png","/assets/hunters/Siren/040.png","/assets/hunters/Siren/041.png","/assets/hunters/Siren/050.png","/assets/hunters/Siren/051.png","/assets/hunters/Siren/052.png","/assets/hunters/Siren/053.png","/assets/hunters/Siren/060.png","/assets/hunters/Siren/100.png","/assets/hunters/Siren/110.png","/assets/hunters/Siren/111.png","/assets/hunters/Siren/112.png","/assets/hunters/Siren/120.png","/assets/hunters/Siren/121.png","/assets/hunters/Siren/122.png","/assets/hunters/Siren/123.png","/assets/hunters/Siren/130.png","/assets/hunters/Siren/131.png","/assets/hunters/Siren/132.png","/assets/hunters/Siren/140.png","/assets/hunters/Siren/141.png","/assets/hunters/Siren/142.png","/assets/hunters/Siren/143.png","/assets/hunters/Siren/150.png","/assets/hunters/Siren/151.png","/assets/hunters/Siren/152.png","/assets/hunters/Siren/160.png","/assets/hunters/Siren/200.png","/assets/hunters/Siren/210.png","/assets/hunters/Siren/211.png","/assets/hunters/Siren/212.png","/assets/hunters/Siren/220.png","/assets/hunters/Siren/221.png","/assets/hunters/Siren/222.png","/assets/hunters/Siren/223.png","/assets/hunters/Siren/230.png","/assets/hunters/Siren/231.png","/assets/hunters/Siren/232.png","/assets/hunters/Siren/240.png","/assets/hunters/Siren/241.png","/assets/hunters/Siren/242.png","/assets/hunters/Siren/243.png","/assets/hunters/Siren/250.png","/assets/hunters/Siren/251.png","/assets/hunters/Siren/252.png","/assets/hunters/Siren/260.png","/assets/hunters/Siren/hero.png","/assets/hunters/augment-action.png","/assets/hunters/augment-chevron.png","/assets/hunters/augment-diamond.png","/assets/hunters/basic.png","/assets/manifest.json","/assets/robots.txt","/"],"additional":[],"optional":[]},"externals":[],"hashesMap":{"6e148698d382b2c0806ba60a00e5e3e431d7232f":"/45598562077bdc84281b5330ff4d283e.png","507dda73c3ff7f9e08f8788d03b518bb39678b85":"/6274c9808eb08785f146a2b78283b5f6.jpg","0d2d6c56930f1a1d420df1149d3321435377d8f0":"/bundle.1c326.css","347217409123d9474fce5321832acfb8694b0198":"/bundle.27db9fed.js","67af5559591f22ffba90d13299f3df513e5cbc52":"/assets/favicon.png","9af1150332d75385d8ffdc64d571ec8d1a437f0f":"/assets/hunters/Beastmaster/000.png","c2925bcd582074cfd7e6aeedcd1dbb2781a48031":"/assets/hunters/Beastmaster/001.png","6d40ff1f4f45ea121a66d2293d2db879d9d66ef6":"/assets/hunters/Beastmaster/010.png","ed9f7a1a2d7e0bbc75bb655a9899f5daee69d9df":"/assets/hunters/Beastmaster/011.png","189f08d09779099cb3866ecd2e5db147e8688f7b":"/assets/hunters/Beastmaster/012.png","4da990290ac582249093aa0762ec03ce194568d9":"/assets/hunters/Beastmaster/020.png","c587d5fe8d5e028bb7e616dcea87379611f268f1":"/assets/hunters/Beastmaster/021.png","a46ddf7becbdfc0de6acab4527ab2ea2321a2d5a":"/assets/hunters/Beastmaster/022.png","af94b67084c450485969b7f3b9214db033c72084":"/assets/hunters/Beastmaster/023.png","fd0cfa0fed9faca922742630721f5816554e93e3":"/assets/hunters/Beastmaster/030.png","901a3ecef0ef8dada62b1b30e8bdf49fb1551ddf":"/assets/hunters/Beastmaster/031.png","dadc56494285303f24541f5577bb205a74043a62":"/assets/hunters/Beastmaster/032.png","7ae0e52589523f74914281227f6e461ff2d9a267":"/assets/hunters/Beastmaster/033.png","faeaa65837f8379a0e11960b89caec4d5bace436":"/assets/hunters/Beastmaster/040.png","f28d5dc8cf56ec11f6d2ecdef2375edfe953a562":"/assets/hunters/Beastmaster/041.png","ac562b991899445dcc8878a69d1a2a76de25f4e6":"/assets/hunters/Beastmaster/042.png","1a91e2aa94ad216dc0c71851c008bd818bdb1941":"/assets/hunters/Beastmaster/043.png","f03ca5e3841494d7773c1c0aff46aaa11e53f85a":"/assets/hunters/Beastmaster/050.png","cb621aefc1783ddb201e202d412ad3907b78f414":"/assets/hunters/Beastmaster/051.png","22d915e3a307b42461c9b8cfb1c2bb3c78f36a8a":"/assets/hunters/Beastmaster/060.png","30628665bf411727c306cbeac159456db3be9e1f":"/assets/hunters/Beastmaster/100.png","82dcc57934ea55d61fa48dbbb190574a5b83a3d8":"/assets/hunters/Beastmaster/101.png","7e14ff5afd5e2eec8e0f0f6e11f7f475317924fa":"/assets/hunters/Beastmaster/110.png","024f1a8d93699ef6add10638fb7a34d8edb60d8c":"/assets/hunters/Beastmaster/111.png","7df3c789dbf3a63f3a1b226a9d52dad1d882b2f9":"/assets/hunters/Beastmaster/112.png","26cf2fdbb660e73e0127dd4d3db270f9caddef3a":"/assets/hunters/Beastmaster/120.png","33e7cb07076d660b1124bf0e700b54c560b35396":"/assets/hunters/Beastmaster/121.png","a2e8552717e0b056949779ae5720c1a03bdb4372":"/assets/hunters/Beastmaster/122.png","ac7ffb0b0746ac85d369e1bd3c7947a34ba396aa":"/assets/hunters/Beastmaster/123.png","0bec5e860f684498986e687f265c30f8091869c2":"/assets/hunters/Beastmaster/130.png","8b693e1a7730d22dcf1c1b2eddcaae94b372c769":"/assets/hunters/Beastmaster/131.png","aaf378398b332e219c89cc0a4a4f401cc254866b":"/assets/hunters/Beastmaster/132.png","99a3944a10da723293bca8c01cf335b1068093f0":"/assets/hunters/Beastmaster/133.png","32cc792225263a7d52b1e4f20893365f20cc812b":"/assets/hunters/Beastmaster/140.png","ce96b467323aab2967e07124fef6b58d4259229c":"/assets/hunters/Beastmaster/141.png","d78620f70a3ce4f785c8f4b1d7aebd23a0831fe2":"/assets/hunters/Beastmaster/142.png","e71e828300067bb37ddff61f38d3559ae9e20c2c":"/assets/hunters/Beastmaster/143.png","eeff605535573fed8b6ce039e91e37beaf5ea456":"/assets/hunters/Beastmaster/150.png","ea2699d4b4c5eaca7588dc33bc10f27f1206052c":"/assets/hunters/Beastmaster/151.png","e325151f9b69d8d147407c8b70ce72627ca93830":"/assets/hunters/Beastmaster/152.png","982415964f422ed25a5ffab32a28ea7a854c1541":"/assets/hunters/Beastmaster/160.png","977877a464943f876846612ecc8493bb8137b0f6":"/assets/hunters/Beastmaster/200.png","7fb64ed1f5d0baf25f772cd5af5da6feb2f6270d":"/assets/hunters/Beastmaster/201.png","d9a71f3dee3ed3f69ff83794687c9c06228385b3":"/assets/hunters/Beastmaster/210.png","96ce6f53559178f4dfbbabf251242a4c5c241b17":"/assets/hunters/Beastmaster/211.png","6e044f76a1700b3739bfcafbbfb33e9146f2693a":"/assets/hunters/Beastmaster/212.png","23abf2f2c2b3bba52a7eef79e2e3460a063b063a":"/assets/hunters/Beastmaster/220.png","32c28e47255087a985b6f17c2076534ea631c1ee":"/assets/hunters/Beastmaster/221.png","b23df346b16cd8aa7e320e90d3c759f8fafc9929":"/assets/hunters/Beastmaster/222.png","663f88fff3084d908fd24a36ecd7b6c88bc4b940":"/assets/hunters/Beastmaster/223.png","1b61af090bb407ae59f4fce586f777e99f390abd":"/assets/hunters/Beastmaster/230.png","15d9fbd82ef4e0de5eaafb1ee079ef276e721573":"/assets/hunters/Beastmaster/231.png","253f574bc73a1cd2b808a382de2ec3a04c3b94bb":"/assets/hunters/Beastmaster/232.png","ddeda995655074539ee0bad9c6588a2cdcc36e61":"/assets/hunters/Beastmaster/240.png","94b05d293948e5d6588dcc423019b40eff55396d":"/assets/hunters/Beastmaster/241.png","afaf095f2bf2a9478fde265dd06b5b1d6d68ef1b":"/assets/hunters/Beastmaster/242.png","e3073e7192fa6ac41dd2a48d309056f37a908c92":"/assets/hunters/Beastmaster/243.png","8df769891eeb6868762131a107658dff76f4b139":"/assets/hunters/Beastmaster/250.png","ba3887ee18f5edd865c6069f89ff1a5603dd119b":"/assets/hunters/Beastmaster/251.png","5e9b8f8e3d316c352177fa203cc280ccaed98f43":"/assets/hunters/Beastmaster/252.png","5d20741e9d260aca46897c69dd5427c50000c012":"/assets/hunters/Beastmaster/260.png","a130dbe9dbd85818b542218b80337b41a60b8f57":"/assets/hunters/Beastmaster/hero.png","4187c6c8ae77b9bd8d0215d6980ce50d3b7c3e19":"/assets/hunters/Gunner/000.png","54ba8ace6d5d6e8ae01ec25a1db23910ea4230b6":"/assets/hunters/Gunner/010.png","a64742e5642e605bf7ef6a8f4686d292d60b0d31":"/assets/hunters/Gunner/011.png","63090db8b79d42db3af5da2011ee75fa4b15c263":"/assets/hunters/Gunner/012.png","0ea5958ea65635176bbd7e13c152cc4333621245":"/assets/hunters/Gunner/020.png","cd5d48863b8f918eff767e4a27978983f5532863":"/assets/hunters/Gunner/021.png","dc39585077aa0888669d15d9e4ac9af80c4470d3":"/assets/hunters/Gunner/022.png","366c52377ad6b58e2a4b405855c94b221748cf58":"/assets/hunters/Gunner/023.png","4c3e4ad961bb6a2df481a385e0dd792622853098":"/assets/hunters/Gunner/024.png","bb2acdcd1cfc65557be53994f5e464add91efef8":"/assets/hunters/Gunner/030.png","18727a70a50c5c88546d6a18f422a5a9fec0eb60":"/assets/hunters/Gunner/031.png","bfa8f91257949610a3ed259d0e75cc4c297667dc":"/assets/hunters/Gunner/032.png","b0189c14fb87e38e996f45aeb5b866830caae3fd":"/assets/hunters/Gunner/033.png","eebe75ecefbbb0d338e4878f930bc1105fe2b01f":"/assets/hunters/Gunner/040.png","f98d09199bbf20aa0a10bb80da8eba3066056287":"/assets/hunters/Gunner/041.png","cbd1b2927a1eb75ec293c4231c4bc61c6e8d740f":"/assets/hunters/Gunner/042.png","a7b036839f7cf93c6f3b3372d55b774aff758be0":"/assets/hunters/Gunner/043.png","fd4608d9372eff5bd077693c60ed19aa01fb4969":"/assets/hunters/Gunner/050.png","0ffe098e5a7914ad6a68dc68953f81f2666d6120":"/assets/hunters/Gunner/051.png","7ff320db6f0b9fd30d5821adbd3e20ca959b42c6":"/assets/hunters/Gunner/052.png","aa17029957f1594bada996c1dc9856a7fb4471e2":"/assets/hunters/Gunner/060.png","da1375416c4581fed1c744b6bdd0e47818178d94":"/assets/hunters/Gunner/100.png","f0985444446483e8155d5ad62b1a4891f134fa83":"/assets/hunters/Gunner/110.png","445438d55e403f82c19514787ddef15e5e954b80":"/assets/hunters/Gunner/111.png","0fe037264951d5cb8f0cd491de447f49a08064d0":"/assets/hunters/Gunner/112.png","7a65dafe4415dbcf539da1ec53e536acd1745ec5":"/assets/hunters/Gunner/120.png","05f3bbbe0c86817a04bd38488c77321e92dea508":"/assets/hunters/Gunner/121.png","6f4d55e6ad61f43edc35f6470d939978680efc9a":"/assets/hunters/Gunner/122.png","f55dc9d48685bee4ef27001fd53b5c3c383e83b7":"/assets/hunters/Gunner/123.png","aecb1b10a6e3d7b257f041222ff10997e92b07ba":"/assets/hunters/Gunner/124.png","b701fbcb98aca94c4e6568b1c32f906586f480a3":"/assets/hunters/Gunner/130.png","35604765c3975337b7e4c8e8b0e0aebb52517ff8":"/assets/hunters/Gunner/131.png","4f961a48612b9e3a088f5531102be6e609a9fc8f":"/assets/hunters/Gunner/132.png","0e15f8e90e1940044a3ca106f938279ac9cc7f0b":"/assets/hunters/Gunner/133.png","2389e82816838d62586b52e7388482664f3060ab":"/assets/hunters/Gunner/140.png","6206c23cc0ff52527d39f0334edbf1df9a4800d1":"/assets/hunters/Gunner/141.png","7ea99637b1199931144a5fe37813c5e9e8324362":"/assets/hunters/Gunner/142.png","71297be19da6b323bc9f6ccff3e724b6d50b29d3":"/assets/hunters/Gunner/143.png","0010bbf4ca4077299aa70fea4a0add3071d6ddb9":"/assets/hunters/Gunner/150.png","a0a6a4366ce4b1e0e5a50d73f9538fc3ac04e8d2":"/assets/hunters/Gunner/151.png","82a16ee707c2d92ab932cd1db55cb9020e670272":"/assets/hunters/Gunner/152.png","114a44e26c933145f43a36cea694770eb3b120a1":"/assets/hunters/Gunner/160.png","1d5b2851ef2347aabf476f610600e4476c3b18bf":"/assets/hunters/Gunner/200.png","e7febc53830b0e4fb9cd8a92c2e6332ce1540f01":"/assets/hunters/Gunner/210.png","bd2bd9ba423cecbd1eadd6ed1ca4a68679b1dbc3":"/assets/hunters/Gunner/211.png","2fabd4a301616f6704940823d7a81c5fd369f53d":"/assets/hunters/Gunner/212.png","f9848cfe5c6fb11a5821029722af40faaee64a96":"/assets/hunters/Gunner/220.png","a2598fb40de61863547fe2b67c81b149e8fbc332":"/assets/hunters/Gunner/221.png","bc5e563aaf3216c6efb290e99cd3b6a362bb7d95":"/assets/hunters/Gunner/222.png","8d361fd4a34014b89b9c0a03a9fa338dba865ce5":"/assets/hunters/Gunner/223.png","3f4c9dd9f0dd7354273758532040fbccc2277c6f":"/assets/hunters/Gunner/224.png","b7b50379f1803c2d00f719483f1ed7aa34bddd45":"/assets/hunters/Gunner/230.png","0448c6458f4f5359776f636a471580fb11121be8":"/assets/hunters/Gunner/231.png","256073fae1eb05b3d94651905f01cb5bfd92e23b":"/assets/hunters/Gunner/232.png","cbca31bdca22859ab3f37ccdd80ae8334b794338":"/assets/hunters/Gunner/233.png","4522c90c5d25323cd95180054514cc6ccdb92664":"/assets/hunters/Gunner/240.png","e89b15316e45658116fed755c6011521e486ae9b":"/assets/hunters/Gunner/241.png","44cb933def44307d807f4634268686e0a5aa8216":"/assets/hunters/Gunner/242.png","77dd207479a8fa95602d195c9deb1eebf0b5b697":"/assets/hunters/Gunner/243.png","223135018c6e6d35524ef84b6a8cfceae4b4275c":"/assets/hunters/Gunner/250.png","0aed8b4d9cb55d8d6df832ac1ffa2de61ac85def":"/assets/hunters/Gunner/251.png","3906bbc206f0eacbe03247f8fbd334b0545b0b70":"/assets/hunters/Gunner/252.png","3bec18b1f50a52e19b78c59b7df679734c07a43f":"/assets/hunters/Gunner/260.png","eaf0686064b5bc00abc5b7cc0fb8939369a41503":"/assets/hunters/Gunner/hero.png","e40e1fc31efbc81b37ff548787f0edd4b8b64c13":"/assets/hunters/Operative/000.png","fd18822d21daa341af9e4f94fa70262db14e7e35":"/assets/hunters/Operative/010.png","058992804a106410e81d1b49dca7fa8ce1c6b5c9":"/assets/hunters/Operative/011.png","654f8233158d370f5a40f5fe36f63e85aaae0740":"/assets/hunters/Operative/012.png","095a541f6df8d85c8b08d2f229008c80f7c69272":"/assets/hunters/Operative/020.png","d53106ffa8f071e7378431dcc785bfad863f4518":"/assets/hunters/Operative/021.png","6bd2425c6cdf8540e9dd6039f95214e6a80cb2ad":"/assets/hunters/Operative/022.png","7a3fbca77aaff8e9fbdcd15c204e339cebfabe3d":"/assets/hunters/Operative/023.png","e64459bcabee744812c4b3cc407d17e14b5bc234":"/assets/hunters/Operative/030.png","c2ddf9b83a43f78f5b85f0a3f3e7d1d4c7985b2a":"/assets/hunters/Operative/031.png","d850497106e1e12027db58408438dab289517dd6":"/assets/hunters/Operative/032.png","507904d621f8a38c95cf410ce5613dd97833a494":"/assets/hunters/Operative/040.png","bf29347f3a54ac5abf730245a6d5d9fc71a8210b":"/assets/hunters/Operative/041.png","8e2e0be519c250a5e5b64f7c623761a568131255":"/assets/hunters/Operative/042.png","30ffd6fc8ff712203258736ef97af135c86a338a":"/assets/hunters/Operative/043.png","219b472bf0aa359cc2d051c2fb8feec06802ba5c":"/assets/hunters/Operative/044.png","a7ec503665b5309d42b0cc5d202098c80f23e0ea":"/assets/hunters/Operative/050.png","c0aa8c2498b3b9bd73422ff8efea305fad690e18":"/assets/hunters/Operative/051.png","4bd4d4f7b4cc589129e2f22cb5a32c5a08541d2a":"/assets/hunters/Operative/052.png","7c288f69ff398d0825f188a7989fed55416836a0":"/assets/hunters/Operative/060.png","7a495ec486cbe6ba809f0ceb31117225017910e5":"/assets/hunters/Operative/100.png","c7a17ec6da6656a3e041ce2b7f42c1b92ed713fa":"/assets/hunters/Operative/110.png","4a8fda88f745e7301235c978a134d3ca5c41d5a7":"/assets/hunters/Operative/111.png","2002837a2ec2c7f6dada2f6aaa75388f29ad6e4c":"/assets/hunters/Operative/112.png","04a9c7c143898286803a85cef9db9066dcb2bada":"/assets/hunters/Operative/120.png","a4480299ebbe70463b4ee1c184da0d0ba209182c":"/assets/hunters/Operative/121.png","80e14d582ebcf34e22abfa0cc7d4f1557503214e":"/assets/hunters/Operative/122.png","4a7b8d4b079c5f00f04fdffdb657e8ad69446560":"/assets/hunters/Operative/123.png","2c2af16423174d171f3ee39459aebebbf9ae9fad":"/assets/hunters/Operative/130.png","826a5707be9431a3dd0b7b0bd0b59bb5710c1447":"/assets/hunters/Operative/131.png","86ba39661db22dd276eb3dfbec65988b012c9237":"/assets/hunters/Operative/132.png","45c65212d85d25b9c4ab5ab05824da55107743f4":"/assets/hunters/Operative/140.png","eeba798cd9a667dfc31ab25db9cb4a633d31a150":"/assets/hunters/Operative/141.png","be846fd50ce21587aa0cea64d4a5f57937ba5265":"/assets/hunters/Operative/142.png","e8c7b5aecf30e84c6323b10156a8532064bece5d":"/assets/hunters/Operative/143.png","6b488e1ddbd290ba80a210b735b3c25c58ed7cb8":"/assets/hunters/Operative/150.png","19e79d9cf7054f0fb659fa696ffc380e9d468dc4":"/assets/hunters/Operative/160.png","7d62f2dd934d1104f2dfffb3ddb89cdcd5da016b":"/assets/hunters/Operative/200.png","09b9d5331cee82ebafb31036819aeb604385d8a2":"/assets/hunters/Operative/210.png","9cd2e136045e5edc2d47949ec7d76676fbffbc85":"/assets/hunters/Operative/211.png","cc20f1335a72571f1651dce50d3e954f7e482b7e":"/assets/hunters/Operative/212.png","355d50f3aefe59db6bcd1ace3b23d0a15a090b05":"/assets/hunters/Operative/220.png","35a1a8612977e3ab005a673e5a59919fa919d956":"/assets/hunters/Operative/221.png","6a7240e95312ac568433ec4e91dae1cd44d25e14":"/assets/hunters/Operative/222.png","94dde5c18b76dbaf6acc716025712a46d898fae0":"/assets/hunters/Operative/223.png","a24c06a778d615b34d2c2db09a02181df00e3c2f":"/assets/hunters/Operative/230.png","0fe3f7793c7062d3164a6ecac07d0b6a1fc55d65":"/assets/hunters/Operative/231.png","63fdc826a006dc32530ed16e32b56744da96ff99":"/assets/hunters/Operative/232.png","064c956df313d6fc95f3b0998e389483a0fd28c6":"/assets/hunters/Operative/240.png","e0047708adb72841ac537da604a39e9e46dcb0b7":"/assets/hunters/Operative/241.png","1b45c4f82f2dfdabe2742b67d6f5d1d86f0d4283":"/assets/hunters/Operative/242.png","d5fd1f52ecc2d44786465272493728e6d98ede30":"/assets/hunters/Operative/243.png","a48399aab7c43c283dacc9de894b18147bbfccb1":"/assets/hunters/Operative/244.png","46711a97a1363d1975980cfdd5c09dadf31a729b":"/assets/hunters/Operative/250.png","be8be3cef153cefbc4fdf66b8a5c70d7a0fc068f":"/assets/hunters/Operative/251.png","4494a87bef0d5054b9f9ce24f2106cacd5c6fa6e":"/assets/hunters/Operative/252.png","bae7b02fceee628ce289afa0d7014ccca58f83e2":"/assets/hunters/Operative/260.png","695afb5dc6e3bdfadb89b6eb3d12415efca249fe":"/assets/hunters/Operative/hero.png","57212c02193b23f4d17554ef88380fe306c986df":"/assets/hunters/Siren/000.png","58319e672307d1c516bbbbef749a630c6e37767b":"/assets/hunters/Siren/010.png","f485089a7a1ed3611a91eea49618010632c69642":"/assets/hunters/Siren/011.png","60963b8fa9158e8f365e7cad2cf8531f50176af2":"/assets/hunters/Siren/012.png","3088bb213a23ef9fb576896f0efbd732fb2f7f33":"/assets/hunters/Siren/020.png","c554f40fafaaa061e988f98304f493079253d731":"/assets/hunters/Siren/021.png","8ceafe51b741d8b1a8ea744cd29e237fabd3d692":"/assets/hunters/Siren/022.png","8c2d8c8cc3c60d010805912ec61d5749a03f027f":"/assets/hunters/Siren/023.png","6e0a6c9f543c240479b6c1d73d2b13af3125f4e8":"/assets/hunters/Siren/030.png","e57dd3c7611d17ec6142b6a04500c319f2ab8e79":"/assets/hunters/Siren/031.png","dc6a903b77a8a67c4384fb1f354b34ea2fe4b92e":"/assets/hunters/Siren/032.png","f9b122cfa271eeccec58058c80f4aeefbce87c9b":"/assets/hunters/Siren/033.png","d520fa5bd39b828d5746578f15922fd9f0d27ffd":"/assets/hunters/Siren/034.png","6cd40c59f7373893a7bb33d00f8ff24da60349a5":"/assets/hunters/Siren/040.png","aa296237d8c5cf8cf5f2d06231cdcec07b36e509":"/assets/hunters/Siren/041.png","ef80ca78fb970a88688ca0289e8a7843f6b3ddd9":"/assets/hunters/Siren/050.png","e90bfd5bfe9c7a8c03429c1eee49ff26bfc669e1":"/assets/hunters/Siren/051.png","bd6709b152682fc2eb88297361d348a2c2cee9a1":"/assets/hunters/Siren/052.png","0f879d03ec6df9291678cea9ad8d3bef4e0d3b74":"/assets/hunters/Siren/053.png","9d04da9a041282cb37c0d97e83bce85c63a785f2":"/assets/hunters/Siren/060.png","96fdbdeb8ef38823499cf59b446ac20b86db7ee0":"/assets/hunters/Siren/100.png","bda71cc5df9d604cd097d3f8da0c0404a503b1af":"/assets/hunters/Siren/110.png","0280f1bd6a29b9ae6668fb46b4d45371bf539630":"/assets/hunters/Siren/111.png","83b3f792d7952ce470674935f802833771ada128":"/assets/hunters/Siren/112.png","6087f9870b7c431b1087d48b34524f75f4ebdff9":"/assets/hunters/Siren/120.png","30159cf274855c028235426501aaf6eac8a645a2":"/assets/hunters/Siren/121.png","13295df1006186480bb76d038dbab73743e440f2":"/assets/hunters/Siren/122.png","b2c9c54e37c5ff2701a4b6c02ac83f2b04b460a4":"/assets/hunters/Siren/123.png","628ac596fdb6381c784e593e5c242bfe92d6759b":"/assets/hunters/Siren/130.png","a2b8e7c9cb73862413ee6dd41fd50b65727a4681":"/assets/hunters/Siren/131.png","7d0d1fcb4d9a2eb4ceb6d7b108e46cee8ca1e01b":"/assets/hunters/Siren/132.png","cd371cfffd3f085fb5d4e366a7245585d98434ac":"/assets/hunters/Siren/140.png","f76d7c745e7e7f4fe95fe46cd0ab2102b877bd99":"/assets/hunters/Siren/141.png","e1d68cc26a18121171ad00dcaeb4bd0363a60ab1":"/assets/hunters/Siren/142.png","a371dd81416210b59829dd1c6cd9b33b93ce5b8a":"/assets/hunters/Siren/143.png","6d858495a04fe72c3c357fe9cd241f264f133ad5":"/assets/hunters/Siren/150.png","eab92d709b012c7e21ef7c6b2ad8443ce2a7a3f4":"/assets/hunters/Siren/151.png","bed032432c354753eb8a611993498dc53ca2e6e9":"/assets/hunters/Siren/152.png","3fa960d2c12874870a56a9eea8975b1db805e66c":"/assets/hunters/Siren/160.png","4ecfeeb74d55e7d7f57fccefe731c0f33d362deb":"/assets/hunters/Siren/200.png","e640a9ef005cc59f56512f0ada6f5dbd32a1ef5c":"/assets/hunters/Siren/210.png","327b02ecb10ebcddb1c33e52ba08a2cb92712682":"/assets/hunters/Siren/211.png","a797f881e6817655670a0d32dc74ad15fed5c6d8":"/assets/hunters/Siren/212.png","4451f38ff89ff4efab9eedf58b37acb849456720":"/assets/hunters/Siren/220.png","ac195d75dcd3ae551aef64ff80433252467f20ea":"/assets/hunters/Siren/221.png","f7f74c2a2c23b96486054eef8487a3dbd07ece92":"/assets/hunters/Siren/222.png","63405fd1654248ae3f45e4a7fb3c05d513b364f9":"/assets/hunters/Siren/223.png","58e1d50d3d2e48b1858ce394f43f813c12ec1c2c":"/assets/hunters/Siren/230.png","3b272462d3f5622ade8f46bc1c88333e6f62e05f":"/assets/hunters/Siren/231.png","1c2b2485f37289911ef97036094d2c4c5b0ef618":"/assets/hunters/Siren/232.png","fdf3a0d346941525e0e6d1590d264d5c49ef1148":"/assets/hunters/Siren/240.png","a3d38dcf1753639fe32232d6cba92e42036642ac":"/assets/hunters/Siren/241.png","89bdc1c2aa3342c88fb14ae41793799b109484de":"/assets/hunters/Siren/242.png","bad9c3d49d066e545271058d818cc3fca10514e4":"/assets/hunters/Siren/243.png","54753ca6c780d7622417d673c665ab11bc204029":"/assets/hunters/Siren/250.png","ed21a092d748afd5b86f100839d05f4cb5b2d3b2":"/assets/hunters/Siren/251.png","1ea9f714dc662ce8e0a0035de4db7a0a05e334c7":"/assets/hunters/Siren/252.png","50cc650d962be41549a8595ca6df34b4741a8e50":"/assets/hunters/Siren/260.png","88c73b79a233f81fb265f4a5440157968b250a51":"/assets/hunters/Siren/hero.png","da5115eef0fec4fa4125932d2979689e8c9401e0":"/assets/hunters/augment-action.png","6f1cc287ad25e2f0d8ca12256c2f0277e932b8a8":"/assets/hunters/augment-chevron.png","cfb4c486971c9fac258b2288e3511bc78b7b94b9":"/assets/hunters/augment-diamond.png","1a69f37c8ca85b7e15720d4557b7c3e610b5bd13":"/assets/hunters/basic.png","3a03eb4a327cd89d096bd1ed9f95366649e8e259":"/assets/manifest.json","c47ccf1a49c24cc5842430aa75c72ef491292412":"/assets/robots.txt","8009b8ee94f0cfdfb54ed994db0de0a02f767b9a":"/"},"strategy":"changed","responseStrategy":"cache-first","version":"4/27/2020, 9:07:08 PM","name":"webpack-offline","pluginVersion":"5.0.7","relativePaths":false}; +var __wpo = {"assets":{"main":["/45598562077bdc84281b5330ff4d283e.png","/6274c9808eb08785f146a2b78283b5f6.jpg","/bundle.f9aae.css","/bundle.014faa49.js","/assets/favicon.png","/assets/hunters/Beastmaster/000.png","/assets/hunters/Beastmaster/001.png","/assets/hunters/Beastmaster/010.png","/assets/hunters/Beastmaster/011.png","/assets/hunters/Beastmaster/012.png","/assets/hunters/Beastmaster/020.png","/assets/hunters/Beastmaster/021.png","/assets/hunters/Beastmaster/022.png","/assets/hunters/Beastmaster/023.png","/assets/hunters/Beastmaster/030.png","/assets/hunters/Beastmaster/031.png","/assets/hunters/Beastmaster/032.png","/assets/hunters/Beastmaster/033.png","/assets/hunters/Beastmaster/040.png","/assets/hunters/Beastmaster/041.png","/assets/hunters/Beastmaster/042.png","/assets/hunters/Beastmaster/043.png","/assets/hunters/Beastmaster/050.png","/assets/hunters/Beastmaster/051.png","/assets/hunters/Beastmaster/060.png","/assets/hunters/Beastmaster/100.png","/assets/hunters/Beastmaster/101.png","/assets/hunters/Beastmaster/110.png","/assets/hunters/Beastmaster/111.png","/assets/hunters/Beastmaster/112.png","/assets/hunters/Beastmaster/120.png","/assets/hunters/Beastmaster/121.png","/assets/hunters/Beastmaster/122.png","/assets/hunters/Beastmaster/123.png","/assets/hunters/Beastmaster/130.png","/assets/hunters/Beastmaster/131.png","/assets/hunters/Beastmaster/132.png","/assets/hunters/Beastmaster/133.png","/assets/hunters/Beastmaster/140.png","/assets/hunters/Beastmaster/141.png","/assets/hunters/Beastmaster/142.png","/assets/hunters/Beastmaster/143.png","/assets/hunters/Beastmaster/150.png","/assets/hunters/Beastmaster/151.png","/assets/hunters/Beastmaster/152.png","/assets/hunters/Beastmaster/160.png","/assets/hunters/Beastmaster/200.png","/assets/hunters/Beastmaster/201.png","/assets/hunters/Beastmaster/210.png","/assets/hunters/Beastmaster/211.png","/assets/hunters/Beastmaster/212.png","/assets/hunters/Beastmaster/220.png","/assets/hunters/Beastmaster/221.png","/assets/hunters/Beastmaster/222.png","/assets/hunters/Beastmaster/223.png","/assets/hunters/Beastmaster/230.png","/assets/hunters/Beastmaster/231.png","/assets/hunters/Beastmaster/232.png","/assets/hunters/Beastmaster/240.png","/assets/hunters/Beastmaster/241.png","/assets/hunters/Beastmaster/242.png","/assets/hunters/Beastmaster/243.png","/assets/hunters/Beastmaster/250.png","/assets/hunters/Beastmaster/251.png","/assets/hunters/Beastmaster/252.png","/assets/hunters/Beastmaster/260.png","/assets/hunters/Beastmaster/300.png","/assets/hunters/Beastmaster/301.png","/assets/hunters/Beastmaster/310.png","/assets/hunters/Beastmaster/311.png","/assets/hunters/Beastmaster/312.png","/assets/hunters/Beastmaster/320.png","/assets/hunters/Beastmaster/321.png","/assets/hunters/Beastmaster/322.png","/assets/hunters/Beastmaster/323.png","/assets/hunters/Beastmaster/330.png","/assets/hunters/Beastmaster/331.png","/assets/hunters/Beastmaster/332.png","/assets/hunters/Beastmaster/333.png","/assets/hunters/Beastmaster/340.png","/assets/hunters/Beastmaster/341.png","/assets/hunters/Beastmaster/342.png","/assets/hunters/Beastmaster/343.png","/assets/hunters/Beastmaster/344.png","/assets/hunters/Beastmaster/350.png","/assets/hunters/Beastmaster/351.png","/assets/hunters/Beastmaster/352.png","/assets/hunters/Beastmaster/360.png","/assets/hunters/Beastmaster/hero.png","/assets/hunters/Gunner/000.png","/assets/hunters/Gunner/010.png","/assets/hunters/Gunner/011.png","/assets/hunters/Gunner/012.png","/assets/hunters/Gunner/020.png","/assets/hunters/Gunner/021.png","/assets/hunters/Gunner/022.png","/assets/hunters/Gunner/023.png","/assets/hunters/Gunner/024.png","/assets/hunters/Gunner/030.png","/assets/hunters/Gunner/031.png","/assets/hunters/Gunner/032.png","/assets/hunters/Gunner/033.png","/assets/hunters/Gunner/040.png","/assets/hunters/Gunner/041.png","/assets/hunters/Gunner/042.png","/assets/hunters/Gunner/043.png","/assets/hunters/Gunner/050.png","/assets/hunters/Gunner/051.png","/assets/hunters/Gunner/052.png","/assets/hunters/Gunner/060.png","/assets/hunters/Gunner/100.png","/assets/hunters/Gunner/110.png","/assets/hunters/Gunner/111.png","/assets/hunters/Gunner/112.png","/assets/hunters/Gunner/120.png","/assets/hunters/Gunner/121.png","/assets/hunters/Gunner/122.png","/assets/hunters/Gunner/123.png","/assets/hunters/Gunner/124.png","/assets/hunters/Gunner/130.png","/assets/hunters/Gunner/131.png","/assets/hunters/Gunner/132.png","/assets/hunters/Gunner/133.png","/assets/hunters/Gunner/140.png","/assets/hunters/Gunner/141.png","/assets/hunters/Gunner/142.png","/assets/hunters/Gunner/143.png","/assets/hunters/Gunner/150.png","/assets/hunters/Gunner/151.png","/assets/hunters/Gunner/152.png","/assets/hunters/Gunner/160.png","/assets/hunters/Gunner/200.png","/assets/hunters/Gunner/210.png","/assets/hunters/Gunner/211.png","/assets/hunters/Gunner/212.png","/assets/hunters/Gunner/220.png","/assets/hunters/Gunner/221.png","/assets/hunters/Gunner/222.png","/assets/hunters/Gunner/223.png","/assets/hunters/Gunner/224.png","/assets/hunters/Gunner/230.png","/assets/hunters/Gunner/231.png","/assets/hunters/Gunner/232.png","/assets/hunters/Gunner/233.png","/assets/hunters/Gunner/240.png","/assets/hunters/Gunner/241.png","/assets/hunters/Gunner/242.png","/assets/hunters/Gunner/243.png","/assets/hunters/Gunner/250.png","/assets/hunters/Gunner/251.png","/assets/hunters/Gunner/252.png","/assets/hunters/Gunner/260.png","/assets/hunters/Gunner/300.png","/assets/hunters/Gunner/310.png","/assets/hunters/Gunner/311.png","/assets/hunters/Gunner/312.png","/assets/hunters/Gunner/320.png","/assets/hunters/Gunner/321.png","/assets/hunters/Gunner/322.png","/assets/hunters/Gunner/323.png","/assets/hunters/Gunner/330.png","/assets/hunters/Gunner/331.png","/assets/hunters/Gunner/340.png","/assets/hunters/Gunner/341.png","/assets/hunters/Gunner/342.png","/assets/hunters/Gunner/350.png","/assets/hunters/Gunner/351.png","/assets/hunters/Gunner/352.png","/assets/hunters/Gunner/353.png","/assets/hunters/Gunner/360.png","/assets/hunters/Gunner/hero.png","/assets/hunters/Operative/000.png","/assets/hunters/Operative/010.png","/assets/hunters/Operative/011.png","/assets/hunters/Operative/012.png","/assets/hunters/Operative/020.png","/assets/hunters/Operative/021.png","/assets/hunters/Operative/022.png","/assets/hunters/Operative/023.png","/assets/hunters/Operative/030.png","/assets/hunters/Operative/031.png","/assets/hunters/Operative/032.png","/assets/hunters/Operative/040.png","/assets/hunters/Operative/041.png","/assets/hunters/Operative/042.png","/assets/hunters/Operative/043.png","/assets/hunters/Operative/044.png","/assets/hunters/Operative/050.png","/assets/hunters/Operative/051.png","/assets/hunters/Operative/052.png","/assets/hunters/Operative/060.png","/assets/hunters/Operative/100.png","/assets/hunters/Operative/110.png","/assets/hunters/Operative/111.png","/assets/hunters/Operative/112.png","/assets/hunters/Operative/120.png","/assets/hunters/Operative/121.png","/assets/hunters/Operative/122.png","/assets/hunters/Operative/123.png","/assets/hunters/Operative/130.png","/assets/hunters/Operative/131.png","/assets/hunters/Operative/132.png","/assets/hunters/Operative/140.png","/assets/hunters/Operative/141.png","/assets/hunters/Operative/142.png","/assets/hunters/Operative/143.png","/assets/hunters/Operative/150.png","/assets/hunters/Operative/160.png","/assets/hunters/Operative/200.png","/assets/hunters/Operative/210.png","/assets/hunters/Operative/211.png","/assets/hunters/Operative/212.png","/assets/hunters/Operative/220.png","/assets/hunters/Operative/221.png","/assets/hunters/Operative/222.png","/assets/hunters/Operative/223.png","/assets/hunters/Operative/230.png","/assets/hunters/Operative/231.png","/assets/hunters/Operative/232.png","/assets/hunters/Operative/240.png","/assets/hunters/Operative/241.png","/assets/hunters/Operative/242.png","/assets/hunters/Operative/243.png","/assets/hunters/Operative/244.png","/assets/hunters/Operative/250.png","/assets/hunters/Operative/251.png","/assets/hunters/Operative/252.png","/assets/hunters/Operative/260.png","/assets/hunters/Operative/300.png","/assets/hunters/Operative/310.png","/assets/hunters/Operative/311.png","/assets/hunters/Operative/312.png","/assets/hunters/Operative/320.png","/assets/hunters/Operative/321.png","/assets/hunters/Operative/322.png","/assets/hunters/Operative/323.png","/assets/hunters/Operative/330.png","/assets/hunters/Operative/331.png","/assets/hunters/Operative/332.png","/assets/hunters/Operative/340.png","/assets/hunters/Operative/341.png","/assets/hunters/Operative/342.png","/assets/hunters/Operative/350.png","/assets/hunters/Operative/351.png","/assets/hunters/Operative/352.png","/assets/hunters/Operative/360.png","/assets/hunters/Operative/hero.png","/assets/hunters/Siren/000.png","/assets/hunters/Siren/010.png","/assets/hunters/Siren/011.png","/assets/hunters/Siren/012.png","/assets/hunters/Siren/020.png","/assets/hunters/Siren/021.png","/assets/hunters/Siren/022.png","/assets/hunters/Siren/023.png","/assets/hunters/Siren/030.png","/assets/hunters/Siren/031.png","/assets/hunters/Siren/032.png","/assets/hunters/Siren/033.png","/assets/hunters/Siren/034.png","/assets/hunters/Siren/040.png","/assets/hunters/Siren/041.png","/assets/hunters/Siren/050.png","/assets/hunters/Siren/051.png","/assets/hunters/Siren/052.png","/assets/hunters/Siren/053.png","/assets/hunters/Siren/060.png","/assets/hunters/Siren/100.png","/assets/hunters/Siren/110.png","/assets/hunters/Siren/111.png","/assets/hunters/Siren/112.png","/assets/hunters/Siren/120.png","/assets/hunters/Siren/121.png","/assets/hunters/Siren/122.png","/assets/hunters/Siren/123.png","/assets/hunters/Siren/130.png","/assets/hunters/Siren/131.png","/assets/hunters/Siren/132.png","/assets/hunters/Siren/140.png","/assets/hunters/Siren/141.png","/assets/hunters/Siren/142.png","/assets/hunters/Siren/143.png","/assets/hunters/Siren/150.png","/assets/hunters/Siren/151.png","/assets/hunters/Siren/152.png","/assets/hunters/Siren/160.png","/assets/hunters/Siren/200.png","/assets/hunters/Siren/210.png","/assets/hunters/Siren/211.png","/assets/hunters/Siren/212.png","/assets/hunters/Siren/220.png","/assets/hunters/Siren/221.png","/assets/hunters/Siren/222.png","/assets/hunters/Siren/223.png","/assets/hunters/Siren/230.png","/assets/hunters/Siren/231.png","/assets/hunters/Siren/232.png","/assets/hunters/Siren/240.png","/assets/hunters/Siren/241.png","/assets/hunters/Siren/242.png","/assets/hunters/Siren/243.png","/assets/hunters/Siren/250.png","/assets/hunters/Siren/251.png","/assets/hunters/Siren/252.png","/assets/hunters/Siren/260.png","/assets/hunters/Siren/300.png","/assets/hunters/Siren/310.png","/assets/hunters/Siren/311.png","/assets/hunters/Siren/312.png","/assets/hunters/Siren/320.png","/assets/hunters/Siren/321.png","/assets/hunters/Siren/322.png","/assets/hunters/Siren/323.png","/assets/hunters/Siren/324.png","/assets/hunters/Siren/330.png","/assets/hunters/Siren/331.png","/assets/hunters/Siren/332.png","/assets/hunters/Siren/340.png","/assets/hunters/Siren/341.png","/assets/hunters/Siren/350.png","/assets/hunters/Siren/351.png","/assets/hunters/Siren/352.png","/assets/hunters/Siren/353.png","/assets/hunters/Siren/360.png","/assets/hunters/Siren/hero.png","/assets/hunters/augment-action.png","/assets/hunters/augment-chevron.png","/assets/hunters/augment-diamond.png","/assets/hunters/basic.png","/assets/manifest.json","/assets/robots.txt","/"],"additional":[],"optional":[]},"externals":[],"hashesMap":{"6e148698d382b2c0806ba60a00e5e3e431d7232f":"/45598562077bdc84281b5330ff4d283e.png","507dda73c3ff7f9e08f8788d03b518bb39678b85":"/6274c9808eb08785f146a2b78283b5f6.jpg","0d90cf93cd86ed4767c8c862ce6abb7c294d38c5":"/bundle.f9aae.css","0a148ac3493a0b83fa2446e377e28edc39358044":"/bundle.014faa49.js","67af5559591f22ffba90d13299f3df513e5cbc52":"/assets/favicon.png","9af1150332d75385d8ffdc64d571ec8d1a437f0f":"/assets/hunters/Beastmaster/000.png","c2925bcd582074cfd7e6aeedcd1dbb2781a48031":"/assets/hunters/Beastmaster/001.png","6d40ff1f4f45ea121a66d2293d2db879d9d66ef6":"/assets/hunters/Beastmaster/010.png","ed9f7a1a2d7e0bbc75bb655a9899f5daee69d9df":"/assets/hunters/Beastmaster/011.png","189f08d09779099cb3866ecd2e5db147e8688f7b":"/assets/hunters/Beastmaster/012.png","4da990290ac582249093aa0762ec03ce194568d9":"/assets/hunters/Beastmaster/020.png","c587d5fe8d5e028bb7e616dcea87379611f268f1":"/assets/hunters/Beastmaster/021.png","a46ddf7becbdfc0de6acab4527ab2ea2321a2d5a":"/assets/hunters/Beastmaster/022.png","af94b67084c450485969b7f3b9214db033c72084":"/assets/hunters/Beastmaster/023.png","fd0cfa0fed9faca922742630721f5816554e93e3":"/assets/hunters/Beastmaster/030.png","901a3ecef0ef8dada62b1b30e8bdf49fb1551ddf":"/assets/hunters/Beastmaster/031.png","dadc56494285303f24541f5577bb205a74043a62":"/assets/hunters/Beastmaster/032.png","7ae0e52589523f74914281227f6e461ff2d9a267":"/assets/hunters/Beastmaster/033.png","faeaa65837f8379a0e11960b89caec4d5bace436":"/assets/hunters/Beastmaster/040.png","f28d5dc8cf56ec11f6d2ecdef2375edfe953a562":"/assets/hunters/Beastmaster/041.png","ac562b991899445dcc8878a69d1a2a76de25f4e6":"/assets/hunters/Beastmaster/042.png","1a91e2aa94ad216dc0c71851c008bd818bdb1941":"/assets/hunters/Beastmaster/043.png","f03ca5e3841494d7773c1c0aff46aaa11e53f85a":"/assets/hunters/Beastmaster/050.png","cb621aefc1783ddb201e202d412ad3907b78f414":"/assets/hunters/Beastmaster/051.png","22d915e3a307b42461c9b8cfb1c2bb3c78f36a8a":"/assets/hunters/Beastmaster/060.png","30628665bf411727c306cbeac159456db3be9e1f":"/assets/hunters/Beastmaster/100.png","82dcc57934ea55d61fa48dbbb190574a5b83a3d8":"/assets/hunters/Beastmaster/101.png","7e14ff5afd5e2eec8e0f0f6e11f7f475317924fa":"/assets/hunters/Beastmaster/110.png","024f1a8d93699ef6add10638fb7a34d8edb60d8c":"/assets/hunters/Beastmaster/111.png","7df3c789dbf3a63f3a1b226a9d52dad1d882b2f9":"/assets/hunters/Beastmaster/112.png","26cf2fdbb660e73e0127dd4d3db270f9caddef3a":"/assets/hunters/Beastmaster/120.png","33e7cb07076d660b1124bf0e700b54c560b35396":"/assets/hunters/Beastmaster/121.png","a2e8552717e0b056949779ae5720c1a03bdb4372":"/assets/hunters/Beastmaster/122.png","ac7ffb0b0746ac85d369e1bd3c7947a34ba396aa":"/assets/hunters/Beastmaster/123.png","0bec5e860f684498986e687f265c30f8091869c2":"/assets/hunters/Beastmaster/130.png","8b693e1a7730d22dcf1c1b2eddcaae94b372c769":"/assets/hunters/Beastmaster/131.png","aaf378398b332e219c89cc0a4a4f401cc254866b":"/assets/hunters/Beastmaster/132.png","99a3944a10da723293bca8c01cf335b1068093f0":"/assets/hunters/Beastmaster/133.png","32cc792225263a7d52b1e4f20893365f20cc812b":"/assets/hunters/Beastmaster/140.png","ce96b467323aab2967e07124fef6b58d4259229c":"/assets/hunters/Beastmaster/141.png","d78620f70a3ce4f785c8f4b1d7aebd23a0831fe2":"/assets/hunters/Beastmaster/142.png","e71e828300067bb37ddff61f38d3559ae9e20c2c":"/assets/hunters/Beastmaster/143.png","eeff605535573fed8b6ce039e91e37beaf5ea456":"/assets/hunters/Beastmaster/150.png","ea2699d4b4c5eaca7588dc33bc10f27f1206052c":"/assets/hunters/Beastmaster/151.png","e325151f9b69d8d147407c8b70ce72627ca93830":"/assets/hunters/Beastmaster/152.png","982415964f422ed25a5ffab32a28ea7a854c1541":"/assets/hunters/Beastmaster/160.png","977877a464943f876846612ecc8493bb8137b0f6":"/assets/hunters/Beastmaster/200.png","7fb64ed1f5d0baf25f772cd5af5da6feb2f6270d":"/assets/hunters/Beastmaster/201.png","d9a71f3dee3ed3f69ff83794687c9c06228385b3":"/assets/hunters/Beastmaster/210.png","96ce6f53559178f4dfbbabf251242a4c5c241b17":"/assets/hunters/Beastmaster/211.png","6e044f76a1700b3739bfcafbbfb33e9146f2693a":"/assets/hunters/Beastmaster/212.png","23abf2f2c2b3bba52a7eef79e2e3460a063b063a":"/assets/hunters/Beastmaster/220.png","32c28e47255087a985b6f17c2076534ea631c1ee":"/assets/hunters/Beastmaster/221.png","b23df346b16cd8aa7e320e90d3c759f8fafc9929":"/assets/hunters/Beastmaster/222.png","663f88fff3084d908fd24a36ecd7b6c88bc4b940":"/assets/hunters/Beastmaster/223.png","1b61af090bb407ae59f4fce586f777e99f390abd":"/assets/hunters/Beastmaster/230.png","15d9fbd82ef4e0de5eaafb1ee079ef276e721573":"/assets/hunters/Beastmaster/231.png","253f574bc73a1cd2b808a382de2ec3a04c3b94bb":"/assets/hunters/Beastmaster/232.png","ddeda995655074539ee0bad9c6588a2cdcc36e61":"/assets/hunters/Beastmaster/240.png","94b05d293948e5d6588dcc423019b40eff55396d":"/assets/hunters/Beastmaster/241.png","afaf095f2bf2a9478fde265dd06b5b1d6d68ef1b":"/assets/hunters/Beastmaster/242.png","e3073e7192fa6ac41dd2a48d309056f37a908c92":"/assets/hunters/Beastmaster/243.png","8df769891eeb6868762131a107658dff76f4b139":"/assets/hunters/Beastmaster/250.png","ba3887ee18f5edd865c6069f89ff1a5603dd119b":"/assets/hunters/Beastmaster/251.png","5e9b8f8e3d316c352177fa203cc280ccaed98f43":"/assets/hunters/Beastmaster/252.png","5d20741e9d260aca46897c69dd5427c50000c012":"/assets/hunters/Beastmaster/260.png","37964f2812548adf99e4af3e824942aac64e6315":"/assets/hunters/Beastmaster/300.png","d99c343518af57a8fcf2479ce021d65ba8f80e47":"/assets/hunters/Beastmaster/301.png","d5fd1f52ecc2d44786465272493728e6d98ede30":"/assets/hunters/Operative/243.png","e751b8569c14775baadfdcbed2aa75b0ed4b34c1":"/assets/hunters/Beastmaster/311.png","55ba30e2808007080c5d485c87a05b6381d23168":"/assets/hunters/Beastmaster/312.png","bbe304600773f470f0f7254461d7653e6578cfaa":"/assets/hunters/Beastmaster/320.png","99480f833a266c23bba22a1cf3524cf859627f98":"/assets/hunters/Beastmaster/321.png","acc316529f9e97ca22776581d3e694b2de2abed5":"/assets/hunters/Beastmaster/322.png","c400502be8e93a36c409c191058be0b3a82b32c7":"/assets/hunters/Beastmaster/323.png","2f625ffdb9f8bd77ba09009af22b30bfb6127fb5":"/assets/hunters/Beastmaster/330.png","15739335d57aebf2b3a0e0c9d389227eda19002a":"/assets/hunters/Beastmaster/331.png","9fb7e77e9269b56369b0748b155922a8ecb703c3":"/assets/hunters/Beastmaster/332.png","c2f1217062504435b9f15c15c77a3d6ccebe8b0c":"/assets/hunters/Beastmaster/333.png","231e27d66afb6a8372e1d12fe903a46cce945c36":"/assets/hunters/Beastmaster/340.png","cfbe79f3d93006f24689514b3d926c2847b66241":"/assets/hunters/Beastmaster/341.png","a54575b79ac6504447a05e6880a9b5d70f190c5d":"/assets/hunters/Beastmaster/342.png","d7ea9125edfb56005ba8e0d73cdbb05b08727cc6":"/assets/hunters/Beastmaster/343.png","7494aefc4166870643ddeba313769e384cd32082":"/assets/hunters/Beastmaster/344.png","c16ac3153dda0a334a07429d4db2bd458efc0bc3":"/assets/hunters/Beastmaster/350.png","f2411bf14815bd7aef3fb11c3570ff34e3e7554d":"/assets/hunters/Beastmaster/351.png","505ce92865e108e629709099530a462cf45d9738":"/assets/hunters/Beastmaster/352.png","2781be31abaf36710602ca4361fdc1049f612362":"/assets/hunters/Beastmaster/360.png","a130dbe9dbd85818b542218b80337b41a60b8f57":"/assets/hunters/Beastmaster/hero.png","4187c6c8ae77b9bd8d0215d6980ce50d3b7c3e19":"/assets/hunters/Gunner/000.png","54ba8ace6d5d6e8ae01ec25a1db23910ea4230b6":"/assets/hunters/Gunner/010.png","a64742e5642e605bf7ef6a8f4686d292d60b0d31":"/assets/hunters/Gunner/011.png","63090db8b79d42db3af5da2011ee75fa4b15c263":"/assets/hunters/Gunner/012.png","0ea5958ea65635176bbd7e13c152cc4333621245":"/assets/hunters/Gunner/020.png","cd5d48863b8f918eff767e4a27978983f5532863":"/assets/hunters/Gunner/021.png","dc39585077aa0888669d15d9e4ac9af80c4470d3":"/assets/hunters/Gunner/022.png","366c52377ad6b58e2a4b405855c94b221748cf58":"/assets/hunters/Gunner/023.png","4c3e4ad961bb6a2df481a385e0dd792622853098":"/assets/hunters/Gunner/024.png","bb2acdcd1cfc65557be53994f5e464add91efef8":"/assets/hunters/Gunner/030.png","18727a70a50c5c88546d6a18f422a5a9fec0eb60":"/assets/hunters/Gunner/031.png","bfa8f91257949610a3ed259d0e75cc4c297667dc":"/assets/hunters/Gunner/032.png","b0189c14fb87e38e996f45aeb5b866830caae3fd":"/assets/hunters/Gunner/033.png","eebe75ecefbbb0d338e4878f930bc1105fe2b01f":"/assets/hunters/Gunner/040.png","f98d09199bbf20aa0a10bb80da8eba3066056287":"/assets/hunters/Gunner/041.png","cbd1b2927a1eb75ec293c4231c4bc61c6e8d740f":"/assets/hunters/Gunner/042.png","a7b036839f7cf93c6f3b3372d55b774aff758be0":"/assets/hunters/Gunner/043.png","fd4608d9372eff5bd077693c60ed19aa01fb4969":"/assets/hunters/Gunner/050.png","0ffe098e5a7914ad6a68dc68953f81f2666d6120":"/assets/hunters/Gunner/051.png","7ff320db6f0b9fd30d5821adbd3e20ca959b42c6":"/assets/hunters/Gunner/052.png","aa17029957f1594bada996c1dc9856a7fb4471e2":"/assets/hunters/Gunner/060.png","da1375416c4581fed1c744b6bdd0e47818178d94":"/assets/hunters/Gunner/100.png","f0985444446483e8155d5ad62b1a4891f134fa83":"/assets/hunters/Gunner/110.png","445438d55e403f82c19514787ddef15e5e954b80":"/assets/hunters/Gunner/111.png","0fe037264951d5cb8f0cd491de447f49a08064d0":"/assets/hunters/Gunner/112.png","7a65dafe4415dbcf539da1ec53e536acd1745ec5":"/assets/hunters/Gunner/120.png","05f3bbbe0c86817a04bd38488c77321e92dea508":"/assets/hunters/Gunner/121.png","6f4d55e6ad61f43edc35f6470d939978680efc9a":"/assets/hunters/Gunner/122.png","f55dc9d48685bee4ef27001fd53b5c3c383e83b7":"/assets/hunters/Gunner/123.png","aecb1b10a6e3d7b257f041222ff10997e92b07ba":"/assets/hunters/Gunner/124.png","b701fbcb98aca94c4e6568b1c32f906586f480a3":"/assets/hunters/Gunner/130.png","35604765c3975337b7e4c8e8b0e0aebb52517ff8":"/assets/hunters/Gunner/131.png","4f961a48612b9e3a088f5531102be6e609a9fc8f":"/assets/hunters/Gunner/132.png","0e15f8e90e1940044a3ca106f938279ac9cc7f0b":"/assets/hunters/Gunner/133.png","2389e82816838d62586b52e7388482664f3060ab":"/assets/hunters/Gunner/140.png","6206c23cc0ff52527d39f0334edbf1df9a4800d1":"/assets/hunters/Gunner/141.png","7ea99637b1199931144a5fe37813c5e9e8324362":"/assets/hunters/Gunner/142.png","71297be19da6b323bc9f6ccff3e724b6d50b29d3":"/assets/hunters/Gunner/143.png","0010bbf4ca4077299aa70fea4a0add3071d6ddb9":"/assets/hunters/Gunner/150.png","a0a6a4366ce4b1e0e5a50d73f9538fc3ac04e8d2":"/assets/hunters/Gunner/151.png","82a16ee707c2d92ab932cd1db55cb9020e670272":"/assets/hunters/Gunner/152.png","114a44e26c933145f43a36cea694770eb3b120a1":"/assets/hunters/Gunner/160.png","1d5b2851ef2347aabf476f610600e4476c3b18bf":"/assets/hunters/Gunner/200.png","e7febc53830b0e4fb9cd8a92c2e6332ce1540f01":"/assets/hunters/Gunner/210.png","bd2bd9ba423cecbd1eadd6ed1ca4a68679b1dbc3":"/assets/hunters/Gunner/211.png","2fabd4a301616f6704940823d7a81c5fd369f53d":"/assets/hunters/Gunner/212.png","f9848cfe5c6fb11a5821029722af40faaee64a96":"/assets/hunters/Gunner/220.png","a2598fb40de61863547fe2b67c81b149e8fbc332":"/assets/hunters/Gunner/221.png","bc5e563aaf3216c6efb290e99cd3b6a362bb7d95":"/assets/hunters/Gunner/222.png","8d361fd4a34014b89b9c0a03a9fa338dba865ce5":"/assets/hunters/Gunner/223.png","3f4c9dd9f0dd7354273758532040fbccc2277c6f":"/assets/hunters/Gunner/224.png","b7b50379f1803c2d00f719483f1ed7aa34bddd45":"/assets/hunters/Gunner/230.png","0448c6458f4f5359776f636a471580fb11121be8":"/assets/hunters/Gunner/231.png","256073fae1eb05b3d94651905f01cb5bfd92e23b":"/assets/hunters/Gunner/232.png","cbca31bdca22859ab3f37ccdd80ae8334b794338":"/assets/hunters/Gunner/233.png","4522c90c5d25323cd95180054514cc6ccdb92664":"/assets/hunters/Gunner/240.png","e89b15316e45658116fed755c6011521e486ae9b":"/assets/hunters/Gunner/241.png","44cb933def44307d807f4634268686e0a5aa8216":"/assets/hunters/Gunner/242.png","77dd207479a8fa95602d195c9deb1eebf0b5b697":"/assets/hunters/Gunner/243.png","223135018c6e6d35524ef84b6a8cfceae4b4275c":"/assets/hunters/Gunner/250.png","0aed8b4d9cb55d8d6df832ac1ffa2de61ac85def":"/assets/hunters/Gunner/251.png","3906bbc206f0eacbe03247f8fbd334b0545b0b70":"/assets/hunters/Gunner/252.png","3bec18b1f50a52e19b78c59b7df679734c07a43f":"/assets/hunters/Gunner/260.png","226957d928df9531d39da3b3029fdcaff4198157":"/assets/hunters/Gunner/300.png","a26672a7276644d8ab33dd4b3df23843d7cad715":"/assets/hunters/Gunner/310.png","93730ef6108ceb6b4aff6ea4980dc9d2f99c49ea":"/assets/hunters/Gunner/311.png","044db1ab6537c12237434d2fd186e6bc555b2b7c":"/assets/hunters/Gunner/312.png","8dc0b692eb1a8442743e4db0cfa0530cc8f5a976":"/assets/hunters/Gunner/320.png","04ad50433bc6578d45c89152f01a6f576a35ff28":"/assets/hunters/Gunner/321.png","340f899afe3597b9e4d46752a64b14ee273d4e00":"/assets/hunters/Gunner/322.png","a963d2109ec34abeae1aa72682f3f5046094c76b":"/assets/hunters/Gunner/323.png","6544bf9d9819cb004053a2ac3d2d91d4fa34bc55":"/assets/hunters/Gunner/330.png","5c010aada5a50b061954b35a37d01b772e2f909b":"/assets/hunters/Gunner/331.png","ae76558380e5951b4ffe28711cd7f0d887ce8bdd":"/assets/hunters/Gunner/340.png","d1fbc97dc1ebeed52951588233e632c5548f4821":"/assets/hunters/Gunner/341.png","c1bc782c05f163f876822f903f19b898acf25cfa":"/assets/hunters/Gunner/342.png","ead26833605fa9bb03ffe58d83d81604728c56d7":"/assets/hunters/Gunner/350.png","18ee885d0197185e3d34e7a11d234600b9a5492f":"/assets/hunters/Gunner/351.png","12ecfa1a79676ba7389aa0292f236bd67978c197":"/assets/hunters/Gunner/352.png","6bd48d5c1531b06827c6ffa57f8cfe298065bfb5":"/assets/hunters/Gunner/353.png","36695851a4adc9b6e327c0ecbe461a76177ef063":"/assets/hunters/Gunner/360.png","eaf0686064b5bc00abc5b7cc0fb8939369a41503":"/assets/hunters/Gunner/hero.png","e40e1fc31efbc81b37ff548787f0edd4b8b64c13":"/assets/hunters/Operative/000.png","fd18822d21daa341af9e4f94fa70262db14e7e35":"/assets/hunters/Operative/010.png","058992804a106410e81d1b49dca7fa8ce1c6b5c9":"/assets/hunters/Operative/011.png","654f8233158d370f5a40f5fe36f63e85aaae0740":"/assets/hunters/Operative/012.png","095a541f6df8d85c8b08d2f229008c80f7c69272":"/assets/hunters/Operative/020.png","d53106ffa8f071e7378431dcc785bfad863f4518":"/assets/hunters/Operative/021.png","6bd2425c6cdf8540e9dd6039f95214e6a80cb2ad":"/assets/hunters/Operative/022.png","7a3fbca77aaff8e9fbdcd15c204e339cebfabe3d":"/assets/hunters/Operative/023.png","e64459bcabee744812c4b3cc407d17e14b5bc234":"/assets/hunters/Operative/030.png","c2ddf9b83a43f78f5b85f0a3f3e7d1d4c7985b2a":"/assets/hunters/Operative/031.png","d850497106e1e12027db58408438dab289517dd6":"/assets/hunters/Operative/032.png","507904d621f8a38c95cf410ce5613dd97833a494":"/assets/hunters/Operative/040.png","bf29347f3a54ac5abf730245a6d5d9fc71a8210b":"/assets/hunters/Operative/041.png","8e2e0be519c250a5e5b64f7c623761a568131255":"/assets/hunters/Operative/042.png","30ffd6fc8ff712203258736ef97af135c86a338a":"/assets/hunters/Operative/043.png","219b472bf0aa359cc2d051c2fb8feec06802ba5c":"/assets/hunters/Operative/044.png","a7ec503665b5309d42b0cc5d202098c80f23e0ea":"/assets/hunters/Operative/050.png","c0aa8c2498b3b9bd73422ff8efea305fad690e18":"/assets/hunters/Operative/051.png","4bd4d4f7b4cc589129e2f22cb5a32c5a08541d2a":"/assets/hunters/Operative/052.png","7c288f69ff398d0825f188a7989fed55416836a0":"/assets/hunters/Operative/060.png","7a495ec486cbe6ba809f0ceb31117225017910e5":"/assets/hunters/Operative/100.png","c7a17ec6da6656a3e041ce2b7f42c1b92ed713fa":"/assets/hunters/Operative/110.png","4a8fda88f745e7301235c978a134d3ca5c41d5a7":"/assets/hunters/Operative/111.png","2002837a2ec2c7f6dada2f6aaa75388f29ad6e4c":"/assets/hunters/Operative/112.png","04a9c7c143898286803a85cef9db9066dcb2bada":"/assets/hunters/Operative/120.png","a4480299ebbe70463b4ee1c184da0d0ba209182c":"/assets/hunters/Operative/121.png","80e14d582ebcf34e22abfa0cc7d4f1557503214e":"/assets/hunters/Operative/122.png","4a7b8d4b079c5f00f04fdffdb657e8ad69446560":"/assets/hunters/Operative/123.png","2c2af16423174d171f3ee39459aebebbf9ae9fad":"/assets/hunters/Operative/130.png","826a5707be9431a3dd0b7b0bd0b59bb5710c1447":"/assets/hunters/Operative/131.png","86ba39661db22dd276eb3dfbec65988b012c9237":"/assets/hunters/Operative/132.png","45c65212d85d25b9c4ab5ab05824da55107743f4":"/assets/hunters/Operative/140.png","eeba798cd9a667dfc31ab25db9cb4a633d31a150":"/assets/hunters/Operative/141.png","be846fd50ce21587aa0cea64d4a5f57937ba5265":"/assets/hunters/Operative/142.png","e8c7b5aecf30e84c6323b10156a8532064bece5d":"/assets/hunters/Operative/143.png","6b488e1ddbd290ba80a210b735b3c25c58ed7cb8":"/assets/hunters/Operative/150.png","19e79d9cf7054f0fb659fa696ffc380e9d468dc4":"/assets/hunters/Operative/160.png","7d62f2dd934d1104f2dfffb3ddb89cdcd5da016b":"/assets/hunters/Operative/200.png","09b9d5331cee82ebafb31036819aeb604385d8a2":"/assets/hunters/Operative/210.png","9cd2e136045e5edc2d47949ec7d76676fbffbc85":"/assets/hunters/Operative/211.png","cc20f1335a72571f1651dce50d3e954f7e482b7e":"/assets/hunters/Operative/212.png","355d50f3aefe59db6bcd1ace3b23d0a15a090b05":"/assets/hunters/Operative/220.png","35a1a8612977e3ab005a673e5a59919fa919d956":"/assets/hunters/Operative/221.png","6a7240e95312ac568433ec4e91dae1cd44d25e14":"/assets/hunters/Operative/222.png","94dde5c18b76dbaf6acc716025712a46d898fae0":"/assets/hunters/Operative/223.png","a24c06a778d615b34d2c2db09a02181df00e3c2f":"/assets/hunters/Operative/230.png","0fe3f7793c7062d3164a6ecac07d0b6a1fc55d65":"/assets/hunters/Operative/231.png","63fdc826a006dc32530ed16e32b56744da96ff99":"/assets/hunters/Operative/232.png","064c956df313d6fc95f3b0998e389483a0fd28c6":"/assets/hunters/Operative/240.png","e0047708adb72841ac537da604a39e9e46dcb0b7":"/assets/hunters/Operative/241.png","1b45c4f82f2dfdabe2742b67d6f5d1d86f0d4283":"/assets/hunters/Operative/242.png","a48399aab7c43c283dacc9de894b18147bbfccb1":"/assets/hunters/Operative/244.png","46711a97a1363d1975980cfdd5c09dadf31a729b":"/assets/hunters/Operative/250.png","be8be3cef153cefbc4fdf66b8a5c70d7a0fc068f":"/assets/hunters/Operative/251.png","4494a87bef0d5054b9f9ce24f2106cacd5c6fa6e":"/assets/hunters/Operative/252.png","bae7b02fceee628ce289afa0d7014ccca58f83e2":"/assets/hunters/Operative/260.png","7efd6d92e333e1d617af5ec9b31eba985fa708e8":"/assets/hunters/Operative/300.png","56f3edc78b5014ab57007eb63e557beec45ff253":"/assets/hunters/Operative/310.png","07d3d4fc3abd40766d7963711c0cae6a4c8965fc":"/assets/hunters/Operative/311.png","8517a9e0ff9aee2fb3a59c764fb6e241ac6ed558":"/assets/hunters/Operative/312.png","ac592d3973fc70a43cb7342e2e3124d7ca3bfc4c":"/assets/hunters/Operative/320.png","60f9899f47a8abd1bc9ddd7e61428dab8ca85ec5":"/assets/hunters/Operative/321.png","722e3eebd48a2128e9081858767ba4570f6bbb36":"/assets/hunters/Operative/322.png","a0a921ef321a05d04e57082c8b65f78b43b4a748":"/assets/hunters/Operative/323.png","cee379b562b493de9fd7e2e1b1c64df2f0a9d63b":"/assets/hunters/Operative/330.png","45b280d09fddca2f72e56274ce2805f0924567d7":"/assets/hunters/Operative/331.png","c1126699157c93a87d573cd2a0a0e2019d2699f4":"/assets/hunters/Operative/332.png","6cada7abed1a71eadada16a206ba07f3219afe70":"/assets/hunters/Operative/340.png","f33bce63a5f871d467b0e62a8e90ae715bb226a5":"/assets/hunters/Operative/341.png","547c80a30f145acb35000b921482d15ede8499f7":"/assets/hunters/Operative/342.png","a24d99e979aa740e3d2488dec89b69f9db02585c":"/assets/hunters/Operative/350.png","d893007680ad0dbfb86872910677342813832458":"/assets/hunters/Operative/351.png","9bbde8f04850dc1cb71c6a799c93cc4713ed14df":"/assets/hunters/Operative/352.png","ac54eb43d690ebca7751f9499338c5ea21de89b2":"/assets/hunters/Operative/360.png","695afb5dc6e3bdfadb89b6eb3d12415efca249fe":"/assets/hunters/Operative/hero.png","57212c02193b23f4d17554ef88380fe306c986df":"/assets/hunters/Siren/000.png","58319e672307d1c516bbbbef749a630c6e37767b":"/assets/hunters/Siren/010.png","f485089a7a1ed3611a91eea49618010632c69642":"/assets/hunters/Siren/011.png","60963b8fa9158e8f365e7cad2cf8531f50176af2":"/assets/hunters/Siren/012.png","3088bb213a23ef9fb576896f0efbd732fb2f7f33":"/assets/hunters/Siren/020.png","c554f40fafaaa061e988f98304f493079253d731":"/assets/hunters/Siren/021.png","8ceafe51b741d8b1a8ea744cd29e237fabd3d692":"/assets/hunters/Siren/022.png","8c2d8c8cc3c60d010805912ec61d5749a03f027f":"/assets/hunters/Siren/023.png","6e0a6c9f543c240479b6c1d73d2b13af3125f4e8":"/assets/hunters/Siren/030.png","e57dd3c7611d17ec6142b6a04500c319f2ab8e79":"/assets/hunters/Siren/031.png","dc6a903b77a8a67c4384fb1f354b34ea2fe4b92e":"/assets/hunters/Siren/032.png","f9b122cfa271eeccec58058c80f4aeefbce87c9b":"/assets/hunters/Siren/033.png","d520fa5bd39b828d5746578f15922fd9f0d27ffd":"/assets/hunters/Siren/034.png","6cd40c59f7373893a7bb33d00f8ff24da60349a5":"/assets/hunters/Siren/040.png","aa296237d8c5cf8cf5f2d06231cdcec07b36e509":"/assets/hunters/Siren/041.png","ef80ca78fb970a88688ca0289e8a7843f6b3ddd9":"/assets/hunters/Siren/050.png","e90bfd5bfe9c7a8c03429c1eee49ff26bfc669e1":"/assets/hunters/Siren/051.png","bd6709b152682fc2eb88297361d348a2c2cee9a1":"/assets/hunters/Siren/052.png","0f879d03ec6df9291678cea9ad8d3bef4e0d3b74":"/assets/hunters/Siren/053.png","9d04da9a041282cb37c0d97e83bce85c63a785f2":"/assets/hunters/Siren/060.png","96fdbdeb8ef38823499cf59b446ac20b86db7ee0":"/assets/hunters/Siren/100.png","bda71cc5df9d604cd097d3f8da0c0404a503b1af":"/assets/hunters/Siren/110.png","0280f1bd6a29b9ae6668fb46b4d45371bf539630":"/assets/hunters/Siren/111.png","83b3f792d7952ce470674935f802833771ada128":"/assets/hunters/Siren/112.png","6087f9870b7c431b1087d48b34524f75f4ebdff9":"/assets/hunters/Siren/120.png","30159cf274855c028235426501aaf6eac8a645a2":"/assets/hunters/Siren/121.png","13295df1006186480bb76d038dbab73743e440f2":"/assets/hunters/Siren/122.png","b2c9c54e37c5ff2701a4b6c02ac83f2b04b460a4":"/assets/hunters/Siren/123.png","628ac596fdb6381c784e593e5c242bfe92d6759b":"/assets/hunters/Siren/130.png","a2b8e7c9cb73862413ee6dd41fd50b65727a4681":"/assets/hunters/Siren/131.png","7d0d1fcb4d9a2eb4ceb6d7b108e46cee8ca1e01b":"/assets/hunters/Siren/132.png","cd371cfffd3f085fb5d4e366a7245585d98434ac":"/assets/hunters/Siren/140.png","f76d7c745e7e7f4fe95fe46cd0ab2102b877bd99":"/assets/hunters/Siren/141.png","e1d68cc26a18121171ad00dcaeb4bd0363a60ab1":"/assets/hunters/Siren/142.png","a371dd81416210b59829dd1c6cd9b33b93ce5b8a":"/assets/hunters/Siren/143.png","6d858495a04fe72c3c357fe9cd241f264f133ad5":"/assets/hunters/Siren/150.png","eab92d709b012c7e21ef7c6b2ad8443ce2a7a3f4":"/assets/hunters/Siren/151.png","bed032432c354753eb8a611993498dc53ca2e6e9":"/assets/hunters/Siren/152.png","3fa960d2c12874870a56a9eea8975b1db805e66c":"/assets/hunters/Siren/160.png","4ecfeeb74d55e7d7f57fccefe731c0f33d362deb":"/assets/hunters/Siren/200.png","e640a9ef005cc59f56512f0ada6f5dbd32a1ef5c":"/assets/hunters/Siren/210.png","327b02ecb10ebcddb1c33e52ba08a2cb92712682":"/assets/hunters/Siren/211.png","a797f881e6817655670a0d32dc74ad15fed5c6d8":"/assets/hunters/Siren/212.png","4451f38ff89ff4efab9eedf58b37acb849456720":"/assets/hunters/Siren/220.png","ac195d75dcd3ae551aef64ff80433252467f20ea":"/assets/hunters/Siren/221.png","f7f74c2a2c23b96486054eef8487a3dbd07ece92":"/assets/hunters/Siren/222.png","63405fd1654248ae3f45e4a7fb3c05d513b364f9":"/assets/hunters/Siren/223.png","58e1d50d3d2e48b1858ce394f43f813c12ec1c2c":"/assets/hunters/Siren/230.png","3b272462d3f5622ade8f46bc1c88333e6f62e05f":"/assets/hunters/Siren/231.png","1c2b2485f37289911ef97036094d2c4c5b0ef618":"/assets/hunters/Siren/232.png","fdf3a0d346941525e0e6d1590d264d5c49ef1148":"/assets/hunters/Siren/240.png","a3d38dcf1753639fe32232d6cba92e42036642ac":"/assets/hunters/Siren/241.png","89bdc1c2aa3342c88fb14ae41793799b109484de":"/assets/hunters/Siren/242.png","bad9c3d49d066e545271058d818cc3fca10514e4":"/assets/hunters/Siren/243.png","54753ca6c780d7622417d673c665ab11bc204029":"/assets/hunters/Siren/250.png","ed21a092d748afd5b86f100839d05f4cb5b2d3b2":"/assets/hunters/Siren/251.png","1ea9f714dc662ce8e0a0035de4db7a0a05e334c7":"/assets/hunters/Siren/252.png","50cc650d962be41549a8595ca6df34b4741a8e50":"/assets/hunters/Siren/260.png","6a2b06de22ea57eda5099f71aebef47e7034131d":"/assets/hunters/Siren/300.png","a834e558f41e4ccefa1c2393d45bd25ed68de0d1":"/assets/hunters/Siren/310.png","84a6d5350db6323c1fbd64d1a72ee5d1b10fbd32":"/assets/hunters/Siren/311.png","85a59296dda193862699e11ed2d942a35bb6f1b3":"/assets/hunters/Siren/312.png","deeee96bb1f2453df1ee5cfa50a0322d23a8d1f7":"/assets/hunters/Siren/320.png","b708074ccfc2d3b5a7b1466f7dbd1f8eb20eced0":"/assets/hunters/Siren/321.png","10c1490448ab9af2e5df7364c2a9aed845579214":"/assets/hunters/Siren/322.png","f057a0025bb7d0237bc5a856792e9eb2b9672fd8":"/assets/hunters/Siren/323.png","689117acc23ec71ad4bff69f48dbfabd39ee1abb":"/assets/hunters/Siren/324.png","720b9929eca8f26d911ead3934c45de98f17d63f":"/assets/hunters/Siren/330.png","fbb0a4ca83400811f7ed565b613a87f16237b0bf":"/assets/hunters/Siren/331.png","06c914812d34db137d066ab7ed90806f6793dfca":"/assets/hunters/Siren/332.png","5e48ea010480d24bba80c1dd3187dcf2f14564f9":"/assets/hunters/Siren/340.png","1c2079096871a61760ddb8473fb091e3bec8eea0":"/assets/hunters/Siren/341.png","37cb3927e6d438a1e053816c04aec54e5ce46426":"/assets/hunters/Siren/350.png","f79f752bb0c1d2792df6a85d04dd492a6b2e75bb":"/assets/hunters/Siren/351.png","4ab85c64660eb8b53439d5e8391e4752024814d2":"/assets/hunters/Siren/352.png","70eec34e46889c98e19e484cc409c092c29c70a7":"/assets/hunters/Siren/353.png","a9a8ed36d07ce454f80ebc70b664cb8281984af6":"/assets/hunters/Siren/360.png","88c73b79a233f81fb265f4a5440157968b250a51":"/assets/hunters/Siren/hero.png","da5115eef0fec4fa4125932d2979689e8c9401e0":"/assets/hunters/augment-action.png","6f1cc287ad25e2f0d8ca12256c2f0277e932b8a8":"/assets/hunters/augment-chevron.png","cfb4c486971c9fac258b2288e3511bc78b7b94b9":"/assets/hunters/augment-diamond.png","1a69f37c8ca85b7e15720d4557b7c3e610b5bd13":"/assets/hunters/basic.png","3a03eb4a327cd89d096bd1ed9f95366649e8e259":"/assets/manifest.json","c47ccf1a49c24cc5842430aa75c72ef491292412":"/assets/robots.txt","a37751bbb36dbc59d889dff9ad50b0501cc8f061":"/"},"strategy":"changed","responseStrategy":"cache-first","version":"6/14/2025, 3:44:49 AM","name":"webpack-offline","pluginVersion":"5.0.7","relativePaths":false}; -!function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(n){return e[n]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="/",n(n.s="+N4f")}({"+N4f":function(e,n,t){"use strict";function r(e,n){return caches.match(e,{cacheName:n}).then(function(t){return o(t)?t:i(t).then(function(t){return caches.open(n).then(function(n){return n.put(e,t)}).then(function(){return t})})}).catch(function(){})}function o(e){return!e||!e.redirected||!e.ok||"opaqueredirect"===e.type}function i(e){return o(e)?Promise.resolve(e):("body"in e?Promise.resolve(e.body):e.blob()).then(function(n){return new Response(n,{headers:e.headers,status:e.status})})}function a(e,n){console.groupCollapsed("[SW]:",e),n.forEach(function(e){console.log("Asset:",e)}),console.groupEnd()}var c,s,u;if(c=ExtendableEvent.prototype.waitUntil,s=FetchEvent.prototype.respondWith,u=new WeakMap,ExtendableEvent.prototype.waitUntil=function(e){var n=this,t=u.get(n);if(!t)return t=[Promise.resolve(e)],u.set(n,t),c.call(n,Promise.resolve().then(function e(){var r=t.length;return Promise.all(t.map(function(e){return e.catch(function(){})})).then(function(){return t.length!=r?e():(u.delete(n),Promise.all(t))})}));t.push(Promise.resolve(e))},FetchEvent.prototype.respondWith=function(e){return this.waitUntil(e),s.call(this,e)},void 0===f)var f=!1;!function(e,n){function t(n){var t=w[n];return caches.open(q).then(function(r){return h(r,t,{bust:e.version,request:b,failAll:"main"===n})}).then(function(){a("Cached assets: "+n,t)}).catch(function(e){throw console.error(e),e})}function o(n){return caches.keys().then(function(e){for(var n=e.length,t=void 0;n--&&0!==(t=e[n]).indexOf(P););if(t){var r=void 0;return caches.open(t).then(function(e){return r=e,e.match(new URL(R,location).toString())}).then(function(e){if(e)return Promise.all([r,r.keys(),e.json()])})}}).then(function(r){if(!r)return t(n);var o=r[0],i=r[1],c=r[2],s=c.hashmap;if(!c.hashmap||c.version===e.version)return t(n);var u=Object.keys(s).map(function(e){return s[e]}),f=i.map(function(e){var n=new URL(e.url);return n.search="",n.hash="",n.toString()}),l=w[n],d=[],p=l.filter(function(e){return-1===f.indexOf(e)||-1===u.indexOf(e)});Object.keys(y).forEach(function(e){var n=y[e];if(-1!==l.indexOf(n)&&-1===p.indexOf(n)&&-1===d.indexOf(n)){var t=s[e];t&&-1!==f.indexOf(t)?d.push([t,n]):p.push(n)}}),a("Changed assets: "+n,p),a("Moved assets: "+n,d);var v=Promise.all(d.map(function(e){return o.match(e[0]).then(function(n){return[e[1],n]})}));return caches.open(q).then(function(t){var r=v.then(function(e){return Promise.all(e.map(function(e){return t.put(e[0],e[1])}))});return Promise.all([r,h(t,p,{bust:e.version,request:b,failAll:"main"===n,deleteFirst:"main"!==n})])})})}function c(){return caches.keys().then(function(e){var n=e.map(function(e){if(0===e.indexOf(P)&&0!==e.indexOf(q))return console.log("[SW]:","Delete cache:",e),caches.delete(e)});return Promise.all(n)})}function s(){return caches.open(q).then(function(n){var t=new Response(JSON.stringify({version:e.version,hashmap:y}));return n.put(new URL(R,location).toString(),t)})}function u(e,n,t){return function(e){if(v&&"function"==typeof v.map&&e.preloadResponse&&"navigate"===e.request.mode){var n=v.map(new URL(e.request.url),e.request);n&&function(e,n){var t=new URL(e,location),r=n.preloadResponse;x.set(r,{url:t,response:r});var o=function(){return x.has(r)},i=r.then(function(e){if(e&&o()){var n=e.clone();return caches.open(O).then(function(e){if(o())return e.put(t,n).then(function(){if(!o())return caches.open(O).then(function(e){return e.delete(t)})})})}});n.waitUntil(i)}(n,e)}}(e),r(t,q).then(function(r){return r?(f&&console.log("[SW]:","URL ["+t+"]("+n+") from cache"),r):fetch(e.request).then(function(r){return r.ok?(f&&console.log("[SW]:","URL ["+n+"] from network"),t===n&&(o=r.clone(),i=caches.open(q).then(function(e){return e.put(n,o)}).then(function(){console.log("[SW]:","Cache asset: "+n)}),e.waitUntil(i)),r):(f&&console.log("[SW]:","URL ["+n+"] wrong response: ["+r.status+"] "+r.type),r);var o,i})})}function l(e){var n=new URL(e.request.url);if(self.registration.navigationPreload&&v&&v.test&&v.test(n,e.request)){var t=function(e){if(x){var n=void 0,t=void 0;return x.forEach(function(r,o){r.url.href===e.href&&(n=r.response,t=o)}),n?(x.delete(t),n):void 0}}(n),o=e.request;return t?(e.waitUntil(caches.open(O).then(function(e){return e.delete(o)})),t):r(o,O).then(function(n){return n&&e.waitUntil(caches.open(O).then(function(e){return e.delete(o)})),n||fetch(e.request)})}}function h(e,n,t){n=n.slice();var r=t.bust,o=!1!==t.failAll,a=!0===t.deleteFirst,c=t.request||{credentials:"omit",mode:"cors"},s=Promise.resolve();return a&&(s=Promise.all(n.map(function(n){return e.delete(n).catch(function(){})}))),Promise.all(n.map(function(e){var n,t,o;return r&&(t=r,o=-1!==(n=e).indexOf("?"),e=n+(o?"&":"?")+"__uncache="+encodeURIComponent(t)),fetch(e,c).then(i).then(function(e){return e.ok?{response:e}:{error:!0}},function(){return{error:!0}})})).then(function(t){return o&&t.some(function(e){return e.error})?Promise.reject(new Error("Wrong response status")):(o||(t=t.filter(function(e,t){return!e.error||(n.splice(t,1),!1)})),s.then(function(){var r=t.map(function(t,r){return e.put(n[r],t.response)});return Promise.all(r)}))})}function d(e){return e.preloadResponse&&!0===v?e.preloadResponse.then(function(n){return n||fetch(e.request)}):fetch(e.request)}var p=n.cacheMaps,v=n.navigationPreload,m=e.strategy,g=e.responseStrategy,w=e.assets,y=e.hashesMap,U=e.externals,b=e.prefetchRequest||{credentials:"same-origin",mode:"cors"},P=e.name,q=P+":"+e.version,O=P+"$preload",R="__offline_webpack__data";Object.keys(w).forEach(function(e){w[e]=w[e].map(function(e){var n=new URL(e,location);return n.hash="",-1===U.indexOf(e)&&(n.search=""),n.toString()})}),y=Object.keys(y).reduce(function(e,n){var t=new URL(y[n],location);return t.search="",t.hash="",e[n]=t.toString(),e},{}),U=U.map(function(e){var n=new URL(e,location);return n.hash="",n.toString()});var S=[].concat(w.main,w.additional,w.optional);self.addEventListener("install",function(e){console.log("[SW]:","Install event");var n=void 0;n="changed"===m?o("main"):t("main"),e.waitUntil(n)}),self.addEventListener("activate",function(e){console.log("[SW]:","Activate event");var n=w.additional.length?(f&&console.log("[SW]:","Caching additional"),("changed"===m?o("additional"):t("additional")).catch(function(){console.error("[SW]:","Cache section `additional` failed to load")})):Promise.resolve();n=(n=(n=n.then(s)).then(c)).then(function(){if(self.clients&&self.clients.claim)return self.clients.claim()}),v&&self.registration.navigationPreload&&(n=Promise.all([n,self.registration.navigationPreload.enable()])),e.waitUntil(n)}),self.addEventListener("fetch",function(e){if("GET"===e.request.method&&("only-if-cached"!==e.request.cache||"same-origin"===e.request.mode)){var n=new URL(e.request.url);n.hash="";var t=n.toString();-1===U.indexOf(t)&&(n.search="",t=n.toString());var o=-1!==S.indexOf(t),i=t;if(!o){var a=function(e){var n=e.url,t=new URL(n),r=void 0;r=function(e){return"navigate"===e.mode||e.headers.get("Upgrade-Insecure-Requests")||-1!==(e.headers.get("Accept")||"").indexOf("text/html")}(e)?"navigate":t.origin===location.origin?"same-origin":"cross-origin";for(var o=0;o