diff --git a/asset-manifest.json b/asset-manifest.json index 9a0f532..61b0bc9 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,14 +1,14 @@ { "files": { "main.css": "/wow-talent-calculator/static/css/main.38df1ad9.chunk.css", - "main.js": "/wow-talent-calculator/static/js/main.4982432a.chunk.js", - "main.js.map": "/wow-talent-calculator/static/js/main.4982432a.chunk.js.map", + "main.js": "/wow-talent-calculator/static/js/main.b1f5143f.chunk.js", + "main.js.map": "/wow-talent-calculator/static/js/main.b1f5143f.chunk.js.map", "runtime~main.js": "/wow-talent-calculator/static/js/runtime~main.765bec70.js", "runtime~main.js.map": "/wow-talent-calculator/static/js/runtime~main.765bec70.js.map", "static/js/2.be20e7d5.chunk.js": "/wow-talent-calculator/static/js/2.be20e7d5.chunk.js", "static/js/2.be20e7d5.chunk.js.map": "/wow-talent-calculator/static/js/2.be20e7d5.chunk.js.map", "index.html": "/wow-talent-calculator/index.html", - "precache-manifest.288dd1e9368bea5662fbb963dfc19db8.js": "/wow-talent-calculator/precache-manifest.288dd1e9368bea5662fbb963dfc19db8.js", + "precache-manifest.f2889400d265fcc4dd68bdbfa8f0aec3.js": "/wow-talent-calculator/precache-manifest.f2889400d265fcc4dd68bdbfa8f0aec3.js", "service-worker.js": "/wow-talent-calculator/service-worker.js", "static/css/main.38df1ad9.chunk.css.map": "/wow-talent-calculator/static/css/main.38df1ad9.chunk.css.map", "static/media/161.jpg": "/wow-talent-calculator/static/media/161.3b1eb099.jpg", diff --git a/images/arrows/down-active.png b/images/arrows/down-active.png deleted file mode 100644 index 8419744..0000000 Binary files a/images/arrows/down-active.png and /dev/null differ diff --git a/images/arrows/down.png b/images/arrows/down.png deleted file mode 100644 index 19a59ae..0000000 Binary files a/images/arrows/down.png and /dev/null differ diff --git a/images/arrows/left-active.png b/images/arrows/left-active.png deleted file mode 100644 index c11d7d5..0000000 Binary files a/images/arrows/left-active.png and /dev/null differ diff --git a/images/arrows/left.png b/images/arrows/left.png deleted file mode 100644 index d3cf716..0000000 Binary files a/images/arrows/left.png and /dev/null differ diff --git a/images/arrows/leftdown-active.png b/images/arrows/leftdown-active.png deleted file mode 100644 index 5a908db..0000000 Binary files a/images/arrows/leftdown-active.png and /dev/null differ diff --git a/images/arrows/leftdown.png b/images/arrows/leftdown.png deleted file mode 100644 index 5545d47..0000000 Binary files a/images/arrows/leftdown.png and /dev/null differ diff --git a/images/arrows/right-active.png b/images/arrows/right-active.png deleted file mode 100644 index 44934a9..0000000 Binary files a/images/arrows/right-active.png and /dev/null differ diff --git a/images/arrows/right.png b/images/arrows/right.png deleted file mode 100644 index 0b9cbce..0000000 Binary files a/images/arrows/right.png and /dev/null differ diff --git a/images/arrows/rightdown-active.png b/images/arrows/rightdown-active.png deleted file mode 100644 index 135dc5c..0000000 Binary files a/images/arrows/rightdown-active.png and /dev/null differ diff --git a/images/arrows/rightdown.png b/images/arrows/rightdown.png deleted file mode 100644 index 6cf1bd1..0000000 Binary files a/images/arrows/rightdown.png and /dev/null differ diff --git a/images/icons/large/default.png b/images/icons/large/default.png deleted file mode 100644 index 5a2221a..0000000 Binary files a/images/icons/large/default.png and /dev/null differ diff --git a/images/icons/large/gold.png b/images/icons/large/gold.png deleted file mode 100644 index eba088a..0000000 Binary files a/images/icons/large/gold.png and /dev/null differ diff --git a/images/icons/medium/default.png b/images/icons/medium/default.png deleted file mode 100644 index 9d91ac9..0000000 Binary files a/images/icons/medium/default.png and /dev/null differ diff --git a/images/icons/medium/gold.png b/images/icons/medium/gold.png deleted file mode 100644 index bafc206..0000000 Binary files a/images/icons/medium/gold.png and /dev/null differ diff --git a/images/specs/161.jpg b/images/specs/161.jpg deleted file mode 100644 index a663bd3..0000000 Binary files a/images/specs/161.jpg and /dev/null differ diff --git a/images/specs/163.jpg b/images/specs/163.jpg deleted file mode 100644 index 4750b0b..0000000 Binary files a/images/specs/163.jpg and /dev/null differ diff --git a/images/specs/164.jpg b/images/specs/164.jpg deleted file mode 100644 index 6855991..0000000 Binary files a/images/specs/164.jpg and /dev/null differ diff --git a/images/specs/181.jpg b/images/specs/181.jpg deleted file mode 100644 index f3a9697..0000000 Binary files a/images/specs/181.jpg and /dev/null differ diff --git a/images/specs/182.jpg b/images/specs/182.jpg deleted file mode 100644 index 0629147..0000000 Binary files a/images/specs/182.jpg and /dev/null differ diff --git a/images/specs/183.jpg b/images/specs/183.jpg deleted file mode 100644 index 95751d3..0000000 Binary files a/images/specs/183.jpg and /dev/null differ diff --git a/images/specs/201.jpg b/images/specs/201.jpg deleted file mode 100644 index cba6ce2..0000000 Binary files a/images/specs/201.jpg and /dev/null differ diff --git a/images/specs/202.jpg b/images/specs/202.jpg deleted file mode 100644 index 70b0ee0..0000000 Binary files a/images/specs/202.jpg and /dev/null differ diff --git a/images/specs/203.jpg b/images/specs/203.jpg deleted file mode 100644 index ece3489..0000000 Binary files a/images/specs/203.jpg and /dev/null differ diff --git a/images/specs/261.jpg b/images/specs/261.jpg deleted file mode 100644 index 0cd4ab0..0000000 Binary files a/images/specs/261.jpg and /dev/null differ diff --git a/images/specs/262.jpg b/images/specs/262.jpg deleted file mode 100644 index 7876bcd..0000000 Binary files a/images/specs/262.jpg and /dev/null differ diff --git a/images/specs/263.jpg b/images/specs/263.jpg deleted file mode 100644 index 461dc38..0000000 Binary files a/images/specs/263.jpg and /dev/null differ diff --git a/images/specs/281.jpg b/images/specs/281.jpg deleted file mode 100644 index 7fa57e7..0000000 Binary files a/images/specs/281.jpg and /dev/null differ diff --git a/images/specs/282.jpg b/images/specs/282.jpg deleted file mode 100644 index 76c1a8f..0000000 Binary files a/images/specs/282.jpg and /dev/null differ diff --git a/images/specs/283.jpg b/images/specs/283.jpg deleted file mode 100644 index 6ff9681..0000000 Binary files a/images/specs/283.jpg and /dev/null differ diff --git a/images/specs/301.jpg b/images/specs/301.jpg deleted file mode 100644 index 6b78fda..0000000 Binary files a/images/specs/301.jpg and /dev/null differ diff --git a/images/specs/302.jpg b/images/specs/302.jpg deleted file mode 100644 index 95f4e3b..0000000 Binary files a/images/specs/302.jpg and /dev/null differ diff --git a/images/specs/303.jpg b/images/specs/303.jpg deleted file mode 100644 index 11bf267..0000000 Binary files a/images/specs/303.jpg and /dev/null differ diff --git a/images/specs/361.jpg b/images/specs/361.jpg deleted file mode 100644 index 34d65c1..0000000 Binary files a/images/specs/361.jpg and /dev/null differ diff --git a/images/specs/362.jpg b/images/specs/362.jpg deleted file mode 100644 index 368b066..0000000 Binary files a/images/specs/362.jpg and /dev/null differ diff --git a/images/specs/363.jpg b/images/specs/363.jpg deleted file mode 100644 index cb9bde4..0000000 Binary files a/images/specs/363.jpg and /dev/null differ diff --git a/images/specs/381.jpg b/images/specs/381.jpg deleted file mode 100644 index 6a3bf75..0000000 Binary files a/images/specs/381.jpg and /dev/null differ diff --git a/images/specs/382.jpg b/images/specs/382.jpg deleted file mode 100644 index ae9ab90..0000000 Binary files a/images/specs/382.jpg and /dev/null differ diff --git a/images/specs/383.jpg b/images/specs/383.jpg deleted file mode 100644 index cdb20da..0000000 Binary files a/images/specs/383.jpg and /dev/null differ diff --git a/images/specs/41.jpg b/images/specs/41.jpg deleted file mode 100644 index 5abb688..0000000 Binary files a/images/specs/41.jpg and /dev/null differ diff --git a/images/specs/61.jpg b/images/specs/61.jpg deleted file mode 100644 index 4167315..0000000 Binary files a/images/specs/61.jpg and /dev/null differ diff --git a/images/specs/81.jpg b/images/specs/81.jpg deleted file mode 100644 index 4632bb2..0000000 Binary files a/images/specs/81.jpg and /dev/null differ diff --git a/images/tooltip-background.png b/images/tooltip-background.png deleted file mode 100644 index 806edf0..0000000 Binary files a/images/tooltip-background.png and /dev/null differ diff --git a/index.html b/index.html index 5a29541..644ff49 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Talent Calculator
\ No newline at end of file +Talent Calculator
\ No newline at end of file diff --git a/precache-manifest.288dd1e9368bea5662fbb963dfc19db8.js b/precache-manifest.f2889400d265fcc4dd68bdbfa8f0aec3.js similarity index 95% rename from precache-manifest.288dd1e9368bea5662fbb963dfc19db8.js rename to precache-manifest.f2889400d265fcc4dd68bdbfa8f0aec3.js index 1e364f9..9aeb58f 100644 --- a/precache-manifest.288dd1e9368bea5662fbb963dfc19db8.js +++ b/precache-manifest.f2889400d265fcc4dd68bdbfa8f0aec3.js @@ -1,10 +1,10 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ { - "revision": "f5b2c02d9c5b50cc7608be2170467071", + "revision": "1e43b810f5691687c789962f4fa3a665", "url": "/wow-talent-calculator/index.html" }, { - "revision": "1e582453512a153e76a3", + "revision": "597ae137d52ae86dd969", "url": "/wow-talent-calculator/static/css/main.38df1ad9.chunk.css" }, { @@ -12,8 +12,8 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ "url": "/wow-talent-calculator/static/js/2.be20e7d5.chunk.js" }, { - "revision": "1e582453512a153e76a3", - "url": "/wow-talent-calculator/static/js/main.4982432a.chunk.js" + "revision": "597ae137d52ae86dd969", + "url": "/wow-talent-calculator/static/js/main.b1f5143f.chunk.js" }, { "revision": "fbb537f9cfa0840057ae", diff --git a/service-worker.js b/service-worker.js index 8d9a2a2..bcd7e12 100644 --- a/service-worker.js +++ b/service-worker.js @@ -14,7 +14,7 @@ importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts( - "/wow-talent-calculator/precache-manifest.288dd1e9368bea5662fbb963dfc19db8.js" + "/wow-talent-calculator/precache-manifest.f2889400d265fcc4dd68bdbfa8f0aec3.js" ); self.addEventListener('message', (event) => { diff --git a/static/js/main.4982432a.chunk.js b/static/js/main.b1f5143f.chunk.js similarity index 97% rename from static/js/main.4982432a.chunk.js rename to static/js/main.b1f5143f.chunk.js index eb4873e..b588075 100644 --- a/static/js/main.4982432a.chunk.js +++ b/static/js/main.b1f5143f.chunk.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],Array(27).concat([function(r,e,i){r.exports=i(68)},,,,,function(r,e,i){},function(r,e,i){},function(r,e,i){},function(r,e,i){},function(r,e,i){var o={"./161.jpg":37,"./163.jpg":38,"./164.jpg":39,"./181.jpg":40,"./182.jpg":41,"./183.jpg":42,"./201.jpg":43,"./202.jpg":44,"./203.jpg":45,"./261.jpg":46,"./262.jpg":47,"./263.jpg":48,"./281.jpg":49,"./282.jpg":50,"./283.jpg":51,"./301.jpg":52,"./302.jpg":53,"./303.jpg":54,"./361.jpg":55,"./362.jpg":56,"./363.jpg":57,"./381.jpg":58,"./382.jpg":59,"./383.jpg":60,"./41.jpg":61,"./61.jpg":62,"./81.jpg":63};function s(r){var e=n(r);return i(e)}function n(r){if(!i.o(o,r)){var e=new Error("Cannot find module '"+r+"'");throw e.code="MODULE_NOT_FOUND",e}return o[r]}s.keys=function(){return Object.keys(o)},s.resolve=n,r.exports=s,s.id=36},function(r,e,i){r.exports=i.p+"static/media/161.3b1eb099.jpg"},function(r,e,i){r.exports=i.p+"static/media/163.d8ff0256.jpg"},function(r,e,i){r.exports=i.p+"static/media/164.5a9a21e2.jpg"},function(r,e,i){r.exports=i.p+"static/media/181.732693ea.jpg"},function(r,e,i){r.exports=i.p+"static/media/182.2ba9eac3.jpg"},function(r,e,i){r.exports=i.p+"static/media/183.3d6c94d0.jpg"},function(r,e,i){r.exports=i.p+"static/media/201.7ef542fd.jpg"},function(r,e,i){r.exports=i.p+"static/media/202.51496721.jpg"},function(r,e,i){r.exports=i.p+"static/media/203.19c7b9ba.jpg"},function(r,e,i){r.exports=i.p+"static/media/261.ec420cae.jpg"},function(r,e,i){r.exports=i.p+"static/media/262.1a859835.jpg"},function(r,e,i){r.exports=i.p+"static/media/263.968052c4.jpg"},function(r,e,i){r.exports=i.p+"static/media/281.b6a8478e.jpg"},function(r,e,i){r.exports=i.p+"static/media/282.e148424a.jpg"},function(r,e,i){r.exports=i.p+"static/media/283.e0beb1ab.jpg"},function(r,e,i){r.exports=i.p+"static/media/301.b0e11336.jpg"},function(r,e,i){r.exports=i.p+"static/media/302.68b29a92.jpg"},function(r,e,i){r.exports=i.p+"static/media/303.fd92e13b.jpg"},function(r,e,i){r.exports=i.p+"static/media/361.1e37fb0b.jpg"},function(r,e,i){r.exports=i.p+"static/media/362.95ffdde5.jpg"},function(r,e,i){r.exports=i.p+"static/media/363.905dc629.jpg"},function(r,e,i){r.exports=i.p+"static/media/381.17666e6c.jpg"},function(r,e,i){r.exports=i.p+"static/media/382.b7f1381d.jpg"},function(r,e,i){r.exports=i.p+"static/media/383.5a8a3168.jpg"},function(r,e,i){r.exports=i.p+"static/media/41.fbfd140b.jpg"},function(r,e,i){r.exports=i.p+"static/media/61.514eba87.jpg"},function(r,e,i){r.exports=i.p+"static/media/81.892c508a.jpg"},,,,,function(r,e,i){"use strict";i.r(e);var o=i(0),s=i.n(o),n=i(24),l=i.n(n),a=(i(32),i(7)),c=i(8),t=i(10),d=i(9),u=i(11),_=i(14),w=(i(33),i(5)),p=i.n(w),k=(i(34),function(r){var e=r.name,i=r.size,o=void 0===i?"medium":i,n=r.golden,l=void 0!==n&&n,a=r.children,c=p()("icon","icon--".concat(o),{"icon--golden":l}),t={backgroundImage:"url(https://wow.zamimg.com/images/wow/icons/".concat("medium"===o?"large":"medium","/").concat(e,".jpg)")};return s.a.createElement("div",{className:c},s.a.createElement("div",{className:"icon__bg",style:t}),s.a.createElement("div",{className:"icon__frame"}),a)}),q={41:"Fire",61:"Frost",81:"Arcane",161:"Arms",163:"Protection",164:"Fury",181:"Combat",182:"Assassination",183:"Subtlety",201:"Discipline",202:"Holy",203:"Shadow",261:"Elemental",262:"Restoration",263:"Enhancement",281:"Feral Combat",282:"Restoration",283:"Balance",301:"Destruction",302:"Affliction",303:"Demonology",361:"Beast Mastery",362:"Survival",363:"Marksmanship",381:"Retribution",382:"Holy",383:"Protection"},h={41:{26:{id:26,row:0,col:1,icon:"spell_fire_flamebolt",ranks:[11069,12338,12339,12340,12341],requires:[]},30:{id:30,row:0,col:2,icon:"spell_fire_meteorstorm",ranks:[11103,12357,12358,12359,12360],requires:[]},34:{id:34,row:1,col:0,icon:"spell_fire_incinerate",ranks:[11119,11120,12846,12847,12848],requires:[]},28:{id:28,row:1,col:1,icon:"spell_fire_flare",ranks:[11100,12353],requires:[]},27:{id:27,row:1,col:2,icon:"spell_fire_fireball",ranks:[11078,11080,12342],requires:[]},1141:{id:1141,row:2,col:0,icon:"spell_fire_flameshock",ranks:[18459,18460],requires:[]},31:{id:31,row:2,col:1,icon:"spell_fire_selfdestruct",ranks:[11108,12349,12350],requires:[]},29:{id:29,row:2,col:2,icon:"spell_fire_fireball02",ranks:[11366],requires:[]},23:{id:23,row:2,col:3,icon:"spell_fire_fire",ranks:[11083,12351],requires:[]},25:{id:25,row:3,col:0,icon:"spell_fire_soulburn",ranks:[11095,12872,12873],requires:[]},24:{id:24,row:3,col:1,icon:"spell_fire_firearmor",ranks:[11094,13043],requires:[]},1639:{id:1639,row:3,col:3,icon:"spell_fire_masterofelements",ranks:[29074,29075,29076],requires:[]},33:{id:33,row:4,col:1,icon:"spell_nature_wispheal",ranks:[11115,11367,11368],requires:[]},32:{id:32,row:4,col:2,icon:"spell_holy_excorcism_02",ranks:[11113],requires:[{id:29,qty:1}]},35:{id:35,row:5,col:2,icon:"spell_fire_immolation",ranks:[11124,12378,12398,12399,12400],requires:[]},36:{id:36,row:6,col:1,icon:"spell_fire_sealoffire",ranks:[11129],requires:[{id:33,qty:3}]}},61:{70:{id:70,row:0,col:0,icon:"spell_frost_frostward",ranks:[11189,28332],requires:[]},37:{id:37,row:0,col:1,icon:"spell_frost_frostbolt02",ranks:[11070,12473,16763,16765,16766],requires:[]},1649:{id:1649,row:0,col:2,icon:"spell_ice_magicdamage",ranks:[29438,29439,29440],requires:[]},73:{id:73,row:1,col:0,icon:"spell_frost_iceshard",ranks:[11207,12672,15047,15052,15053],requires:[]},38:{id:38,row:1,col:1,icon:"spell_frost_frostarmor",ranks:[11071,12496,12497],requires:[]},62:{id:62,row:1,col:2,icon:"spell_frost_freezingbreath",ranks:[11165,12475],requires:[]},65:{id:65,row:1,col:3,icon:"spell_frost_wisp",ranks:[11175,12569,12571],requires:[]},61:{id:61,row:2,col:0,icon:"spell_frost_frostbolt",ranks:[11151,12952,12953],requires:[]},69:{id:69,row:2,col:1,icon:"spell_frost_wizardmark",ranks:[12472],requires:[]},63:{id:63,row:2,col:3,icon:"spell_frost_icestorm",ranks:[11185,12487,12488],requires:[]},741:{id:741,row:3,col:0,icon:"spell_shadow_darkritual",ranks:[16757,16758],requires:[]},66:{id:66,row:3,col:1,icon:"spell_frost_stun",ranks:[11160,12518,12519],requires:[]},67:{id:67,row:3,col:2,icon:"spell_frost_frostshock",ranks:[11170,12982,12983,12984,12985],requires:[{id:62,qty:2}]},72:{id:72,row:4,col:1,icon:"spell_frost_frost",ranks:[11958],requires:[]},64:{id:64,row:4,col:2,icon:"spell_frost_glacier",ranks:[11190,12489,12490],requires:[]},68:{id:68,row:5,col:2,icon:"spell_frost_chillingblast",ranks:[11180,28592,28593,28594,28595],requires:[]},71:{id:71,row:6,col:1,icon:"spell_ice_lament",ranks:[11426],requires:[{id:72,qty:1}]}},81:{74:{id:74,row:0,col:0,icon:"spell_holy_dispelmagic",ranks:[11210,12592],requires:[]},76:{id:76,row:0,col:1,icon:"spell_holy_devotion",ranks:[11222,12839,12840,12841,12842],requires:[]},80:{id:80,row:0,col:2,icon:"spell_nature_starfall",ranks:[11237,12463,12464,16769,16770],requires:[]},78:{id:78,row:1,col:0,icon:"inv_wand_01",ranks:[6057,6085],requires:[]},1650:{id:1650,row:1,col:1,icon:"spell_nature_astralrecalgroup",ranks:[29441,29444,29445,29446,29447],requires:[]},75:{id:75,row:1,col:2,icon:"spell_shadow_manaburn",ranks:[11213,12574,12575,12576,12577],requires:[]},82:{id:82,row:2,col:0,icon:"spell_nature_abolishmagic",ranks:[11247,12606],requires:[]},81:{id:81,row:2,col:1,icon:"spell_nature_wispsplode",ranks:[11242,12467,12469],requires:[]},85:{id:85,row:2,col:2,icon:"spell_arcane_arcaneresilience",ranks:[28574],requires:[]},83:{id:83,row:3,col:0,icon:"spell_shadow_detectlesserinvisibility",ranks:[11252,12605],requires:[]},88:{id:88,row:3,col:1,icon:"spell_frost_iceshock",ranks:[11255,12598],requires:[]},1142:{id:1142,row:3,col:3,icon:"spell_shadow_siphonmana",ranks:[18462,18463,18464],requires:[]},86:{id:86,row:4,col:1,icon:"spell_nature_enchantarmor",ranks:[12043],requires:[]},77:{id:77,row:4,col:2,icon:"spell_shadow_charm",ranks:[11232,12500,12501,12502,12503],requires:[{id:85,qty:1}]},421:{id:421,row:5,col:1,icon:"spell_shadow_teleport",ranks:[15058,15059,15060],requires:[{id:86,qty:1}]},87:{id:87,row:6,col:1,icon:"spell_nature_lightning",ranks:[12042],requires:[{id:421,qty:3}]}},161:{124:{id:124,row:0,col:0,icon:"ability_rogue_ambush",ranks:[12282,12663,12664],requires:[]},130:{id:130,row:0,col:1,icon:"ability_parry",ranks:[16462,16463,16464,16465,16466],requires:[]},127:{id:127,row:0,col:2,icon:"ability_gouge",ranks:[12286,12658,12659],requires:[]},126:{id:126,row:1,col:0,icon:"ability_warrior_charge",ranks:[12285,12697],requires:[]},641:{id:641,row:1,col:1,icon:"spell_nature_enchantarmor",ranks:[12295,12676,12677,12678,12679],requires:[]},128:{id:128,row:1,col:3,icon:"ability_thunderclap",ranks:[12287,12665,12666],requires:[]},131:{id:131,row:2,col:0,icon:"inv_sword_05",ranks:[12290,12963],requires:[]},137:{id:137,row:2,col:1,icon:"spell_holy_blessingofstamina",ranks:[12296],requires:[{id:641,qty:5}]},121:{id:121,row:2,col:2,icon:"ability_backstab",ranks:[12834,12849,12867],requires:[{id:127,qty:3}]},136:{id:136,row:3,col:1,icon:"inv_axe_09",ranks:[12163,12711,12712,12713,12714],requires:[]},662:{id:662,row:3,col:2,icon:"ability_searingarrow",ranks:[16493,16494],requires:[{id:121,qty:3}]},132:{id:132,row:4,col:0,icon:"inv_axe_06",ranks:[12700,12781,12783,12784,12785],requires:[]},133:{id:133,row:4,col:1,icon:"ability_rogue_slicedice",ranks:[12292],requires:[]},125:{id:125,row:4,col:2,icon:"inv_mace_01",ranks:[12284,12701,12702,12703,12704],requires:[]},123:{id:123,row:4,col:3,icon:"inv_sword_27",ranks:[12281,12812,12813,12814,12815],requires:[]},134:{id:134,row:5,col:0,icon:"inv_weapon_halbard_01",ranks:[12165,12830,12831,12832,12833],requires:[]},129:{id:129,row:5,col:2,icon:"ability_shockwave",ranks:[12289,12668,23695],requires:[]},135:{id:135,row:6,col:1,icon:"ability_warrior_savageblow",ranks:[12294],requires:[{id:133,qty:1}]}},163:{1601:{id:1601,row:0,col:1,icon:"inv_shield_06",ranks:[12298,12724,12725,12726,12727],requires:[]},138:{id:138,row:0,col:2,icon:"spell_nature_mirrorimage",ranks:[12297,12750,12751,12752,12753],requires:[]},142:{id:142,row:1,col:0,icon:"ability_racial_bloodrage",ranks:[12301,12818],requires:[]},140:{id:140,row:1,col:2,icon:"spell_holy_devotion",ranks:[12299,12761,12762,12763,12764],requires:[]},141:{id:141,row:1,col:3,icon:"spell_magic_magearmor",ranks:[12300,12959,12960,12961,12962],requires:[]},153:{id:153,row:2,col:0,icon:"spell_holy_ashestoashes",ranks:[12975],requires:[{id:142,qty:2}]},145:{id:145,row:2,col:1,icon:"ability_defend",ranks:[12945,12307,12944],requires:[{id:1601,qty:5}]},147:{id:147,row:2,col:2,icon:"ability_warrior_revenge",ranks:[12797,12799,12800],requires:[]},144:{id:144,row:2,col:3,icon:"ability_warrior_innerrage",ranks:[12303,12788,12789,12791,12792],requires:[]},146:{id:146,row:3,col:0,icon:"ability_warrior_sunder",ranks:[12308,12810,12811],requires:[]},151:{id:151,row:3,col:1,icon:"ability_warrior_disarm",ranks:[12313,12804,12807],requires:[]},143:{id:143,row:3,col:2,icon:"spell_nature_reincarnation",ranks:[12302,12765],requires:[]},150:{id:150,row:4,col:0,icon:"ability_warrior_shieldwall",ranks:[12312,12803],requires:[]},152:{id:152,row:4,col:1,icon:"ability_thunderbolt",ranks:[12809],requires:[]},149:{id:149,row:4,col:2,icon:"ability_warrior_shieldbash",ranks:[12311,12958],requires:[]},702:{id:702,row:5,col:2,icon:"inv_sword_20",ranks:[16538,16539,16540,16541,16542],requires:[]},148:{id:148,row:6,col:1,icon:"inv_shield_05",ranks:[23922],requires:[{id:152,qty:1}]}},164:{158:{id:158,row:0,col:1,icon:"spell_nature_purge",ranks:[12321,12835,12836,12837,12838],requires:[]},157:{id:157,row:0,col:2,icon:"ability_rogue_eviscerate",ranks:[12320,12852,12853,12855,12856],requires:[]},161:{id:161,row:1,col:1,icon:"ability_warrior_warcry",ranks:[12324,12876,12877,12878,12879],requires:[]},159:{id:159,row:1,col:2,icon:"spell_nature_stoneclawtotem",ranks:[12322,12999,13e3,13001,13002],requires:[]},166:{id:166,row:2,col:0,icon:"ability_warrior_cleave",ranks:[12329,12950,20496],requires:[]},160:{id:160,row:2,col:1,icon:"spell_shadow_deathscream",ranks:[12323],requires:[]},661:{id:661,row:2,col:2,icon:"spell_shadow_summonimp",ranks:[16487,16489,16492],requires:[]},154:{id:154,row:2,col:3,icon:"ability_warrior_battleshout",ranks:[12318,12857,12858,12860,12861],requires:[]},1581:{id:1581,row:3,col:0,icon:"ability_dualwield",ranks:[23584,23585,23586,23587,23588],requires:[]},1542:{id:1542,row:3,col:1,icon:"inv_sword_48",ranks:[20502,20503],requires:[]},155:{id:155,row:3,col:2,icon:"spell_shadow_unholyfrenzy",ranks:[12317,13045,13046,13047,13048],requires:[]},168:{id:168,row:4,col:0,icon:"ability_warrior_decisivestrike",ranks:[12862,12330,20497,20498,20499],requires:[]},165:{id:165,row:4,col:1,icon:"spell_shadow_deathpact",ranks:[12328],requires:[]},1543:{id:1543,row:4,col:3,icon:"ability_rogue_sprint",ranks:[20504,20505],requires:[]},1541:{id:1541,row:5,col:0,icon:"spell_nature_ancestralguardian",ranks:[20500,20501],requires:[]},156:{id:156,row:5,col:2,icon:"ability_ghoulfrenzy",ranks:[12319,12971,12972,12973,12974],requires:[{id:155,qty:5}]},167:{id:167,row:6,col:1,icon:"spell_nature_bloodlust",ranks:[23881],requires:[{id:165,qty:1}]}},181:{203:{id:203,row:0,col:0,icon:"ability_gouge",ranks:[13741,13793,13792],requires:[]},201:{id:201,row:0,col:1,icon:"spell_shadow_ritualofsacrifice",ranks:[13732,13863],requires:[]},186:{id:186,row:0,col:2,icon:"spell_nature_invisibilty",ranks:[13712,13788,13789,13790,13791],requires:[]},202:{id:202,row:1,col:0,icon:"ability_backstab",ranks:[13733,13865,13866],requires:[]},187:{id:187,row:1,col:1,icon:"ability_parry",ranks:[13713,13853,13854,13855,13856],requires:[]},181:{id:181,row:1,col:2,icon:"ability_marksmanship",ranks:[13705,13832,13843,13844,13845],requires:[]},204:{id:204,row:2,col:0,icon:"spell_shadow_shadowward",ranks:[13742,13872],requires:[]},301:{id:301,row:2,col:1,icon:"ability_warrior_challange",ranks:[14251],requires:[{id:187,qty:5}]},222:{id:222,row:2,col:3,icon:"ability_rogue_sprint",ranks:[13743,13875],requires:[]},206:{id:206,row:3,col:0,icon:"ability_kick",ranks:[13754,13867],requires:[]},182:{id:182,row:3,col:1,icon:"inv_weapon_shortblade_05",ranks:[13706,13804,13805,13806,13807],requires:[]},221:{id:221,row:3,col:2,icon:"ability_dualwield",ranks:[13715,13848,13849,13851,13852],requires:[{id:181,qty:5}]},184:{id:184,row:4,col:0,icon:"inv_mace_01",ranks:[13709,13800,13801,13802,13803],requires:[]},223:{id:223,row:4,col:1,icon:"ability_warrior_punishingblow",ranks:[13877],requires:[]},242:{id:242,row:4,col:2,icon:"inv_sword_27",ranks:[13960,13961,13962,13963,13964],requires:[]},183:{id:183,row:4,col:3,icon:"inv_gauntlets_04",ranks:[13707,13966,13967,13968,13969],requires:[]},1703:{id:1703,row:5,col:1,icon:"spell_holy_blessingofstrength",ranks:[30919,30920],requires:[{id:223,qty:1}]},1122:{id:1122,row:5,col:2,icon:"ability_racial_avatar",ranks:[18427,18428,18429],requires:[]},205:{id:205,row:6,col:1,icon:"spell_shadow_shadowworddominate",ranks:[13750],requires:[]}},182:{276:{id:276,row:0,col:0,icon:"ability_rogue_eviscerate",ranks:[14162,14163,14164],requires:[]},272:{id:272,row:0,col:1,icon:"ability_fiegndead",ranks:[14144,14148],requires:[]},270:{id:270,row:0,col:2,icon:"ability_racial_bloodrage",ranks:[14138,14139,14140,14141,14142],requires:[]},273:{id:273,row:1,col:0,icon:"ability_druid_disembowel",ranks:[14156,14160,14161],requires:[]},274:{id:274,row:1,col:1,icon:"spell_shadow_deathscream",ranks:[14158,14159],requires:[]},277:{id:277,row:1,col:3,icon:"ability_rogue_slicedice",ranks:[14165,14166,14167],requires:[]},281:{id:281,row:2,col:0,icon:"ability_warrior_decisivestrike",ranks:[14179],requires:[]},278:{id:278,row:2,col:1,icon:"ability_warrior_riposte",ranks:[14168,14169],requires:[]},269:{id:269,row:2,col:2,icon:"ability_criticalstrike",ranks:[14128,14132,14135,14136,14137],requires:[{id:270,qty:5}]},682:{id:682,row:3,col:1,icon:"ability_rogue_feigndeath",ranks:[16513,16514,16515,16719,16720],requires:[]},268:{id:268,row:3,col:2,icon:"ability_poisons",ranks:[14113,14114,14115,14116,14117],requires:[]},280:{id:280,row:4,col:1,icon:"spell_ice_lament",ranks:[14177],requires:[]},279:{id:279,row:4,col:2,icon:"ability_rogue_kidneyshot",ranks:[14174,14175,14176],requires:[]},283:{id:283,row:5,col:1,icon:"spell_shadow_chilltouch",ranks:[14186,14190,14193,14194,14195],requires:[{id:280,qty:1}]},382:{id:382,row:6,col:1,icon:"spell_nature_earthbindtotem",ranks:[14983],requires:[]}},183:{241:{id:241,row:0,col:1,icon:"spell_shadow_charm",ranks:[13958,13970,13971,13972,13973],requires:[]},261:{id:261,row:0,col:2,icon:"ability_warrior_warcry",ranks:[14057,14072,14073,14074,14075],requires:[]},1700:{id:1700,row:1,col:0,icon:"ability_rogue_feint",ranks:[30892,30893],requires:[]},247:{id:247,row:1,col:1,icon:"spell_magic_lesserinvisibilty",ranks:[13981,14066],requires:[]},244:{id:244,row:1,col:2,icon:"ability_stealth",ranks:[13975,14062,14063,14064,14065],requires:[]},245:{id:245,row:2,col:0,icon:"spell_shadow_fumble",ranks:[13976,13979,13980],requires:[]},303:{id:303,row:2,col:1,icon:"spell_shadow_curse",ranks:[14278],requires:[]},263:{id:263,row:2,col:2,icon:"ability_rogue_ambush",ranks:[14079,14080,14081],requires:[]},246:{id:246,row:3,col:0,icon:"spell_nature_mirrorimage",ranks:[13983,14070,14071],requires:[]},262:{id:262,row:3,col:1,icon:"ability_sap",ranks:[14076,14094,14095],requires:[]},1123:{id:1123,row:3,col:2,icon:"inv_sword_17",ranks:[14171,14172,14173],requires:[]},1701:{id:1701,row:4,col:0,icon:"ability_ambush",ranks:[30894,30895],requires:[]},284:{id:284,row:4,col:1,icon:"spell_shadow_antishadow",ranks:[14185],requires:[]},265:{id:265,row:4,col:2,icon:"spell_shadow_summonsuccubus",ranks:[14082,14083],requires:[]},681:{id:681,row:4,col:3,icon:"spell_shadow_lifedrain",ranks:[16511],requires:[{id:1123,qty:3}]},1702:{id:1702,row:5,col:2,icon:"inv_weapon_crossbow_11",ranks:[30902,30903,30904,30905,30906],requires:[]},381:{id:381,row:6,col:1,icon:"spell_shadow_possession",ranks:[14183],requires:[{id:284,qty:1}]}},201:{342:{id:342,row:0,col:1,icon:"spell_magic_magearmor",ranks:[14522,14788,14789,14790,14791],requires:[]},345:{id:345,row:0,col:2,icon:"inv_wand_01",ranks:[14524,14525,14526,14527,14528],requires:[]},352:{id:352,row:1,col:0,icon:"spell_nature_manaregentotem",ranks:[14523,14784,14785,14786,14787],requires:[]},344:{id:344,row:1,col:1,icon:"spell_holy_wordfortitude",ranks:[14749,14767],requires:[]},343:{id:343,row:1,col:2,icon:"spell_holy_powerwordshield",ranks:[14748,14768,14769],requires:[]},321:{id:321,row:1,col:3,icon:"spell_nature_tranquility",ranks:[14531,14774],requires:[]},348:{id:348,row:2,col:1,icon:"spell_frost_windwalkon",ranks:[14751],requires:[]},347:{id:347,row:2,col:2,icon:"spell_nature_sleep",ranks:[14521,14776,14777],requires:[]},346:{id:346,row:3,col:0,icon:"spell_holy_innerfire",ranks:[14747,14770,14771],requires:[]},341:{id:341,row:3,col:1,icon:"ability_hibernation",ranks:[14520,14780,14781,14782,14783],requires:[]},350:{id:350,row:3,col:3,icon:"spell_shadow_manaburn",ranks:[14750,14772],requires:[]},1201:{id:1201,row:4,col:1,icon:"spell_nature_enchantarmor",ranks:[18551,18552,18553,18554,18555],requires:[]},351:{id:351,row:4,col:2,icon:"spell_holy_divinespirit",ranks:[14752],requires:[{id:347,qty:3}]},1202:{id:1202,row:5,col:2,icon:"spell_nature_slowingtotem",ranks:[18544,18547,18548,18549,18550],requires:[]},322:{id:322,row:6,col:1,icon:"spell_holy_powerinfusion",ranks:[10060],requires:[{id:1201,qty:5}]}},202:{410:{id:410,row:0,col:0,icon:"spell_holy_healingfocus",ranks:[14913,15012],requires:[]},406:{id:406,row:0,col:1,icon:"spell_holy_renew",ranks:[14908,15020,17191],requires:[]},401:{id:401,row:0,col:2,icon:"spell_holy_sealofsalvation",ranks:[14889,15008,15009,15010,15011],requires:[]},411:{id:411,row:1,col:1,icon:"spell_holy_spellwarding",ranks:[27900,27901,27902,27903,27904],requires:[]},1181:{id:1181,row:1,col:2,icon:"spell_holy_sealofwrath",ranks:[18530,18531,18533,18534,18535],requires:[]},442:{id:442,row:2,col:0,icon:"spell_holy_holynova",ranks:[15237],requires:[]},1636:{id:1636,row:2,col:1,icon:"spell_holy_blessedrecovery",ranks:[27811,27815,27816],requires:[]},361:{id:361,row:2,col:3,icon:"spell_holy_layonhands",ranks:[14892,15362,15363],requires:[]},1635:{id:1635,row:3,col:0,icon:"spell_holy_purify",ranks:[27789,27790],requires:[]},408:{id:408,row:3,col:1,icon:"spell_holy_heal02",ranks:[14912,15013,15014],requires:[]},403:{id:403,row:3,col:2,icon:"spell_holy_searinglightpriest",ranks:[14909,15017],requires:[{id:1181,qty:5}]},413:{id:413,row:4,col:0,icon:"spell_holy_prayerofhealing02",ranks:[14911,15018],requires:[]},1561:{id:1561,row:4,col:1,icon:"inv_enchant_essenceeternallarge",ranks:[20711],requires:[]},402:{id:402,row:4,col:2,icon:"spell_holy_spiritualguidence",ranks:[14901,15028,15029,15030,15031],requires:[]},404:{id:404,row:5,col:2,icon:"spell_nature_moonglow",ranks:[14898,15349,15354,15355,15356],requires:[]},1637:{id:1637,row:6,col:1,icon:"spell_holy_summonlightwell",ranks:[724],requires:[{id:1561,qty:1}]}},203:{465:{id:465,row:0,col:1,icon:"spell_shadow_requiem",ranks:[15270,15335,15336,15337,15338],requires:[]},464:{id:464,row:0,col:2,icon:"spell_shadow_gathershadows",ranks:[15268,15323,15324,15325,15326],requires:[]},466:{id:466,row:1,col:0,icon:"spell_shadow_shadowward",ranks:[15318,15272,15320],requires:[]},482:{id:482,row:1,col:1,icon:"spell_shadow_shadowwordpain",ranks:[15275,15317],requires:[]},463:{id:463,row:1,col:2,icon:"spell_shadow_burningspirit",ranks:[15260,15327,15328,15329,15330],requires:[]},542:{id:542,row:2,col:0,icon:"spell_shadow_psychicscream",ranks:[15392,15448],requires:[]},481:{id:481,row:2,col:1,icon:"spell_shadow_unholyfrenzy",ranks:[15273,15312,15313,15314,15316],requires:[]},501:{id:501,row:2,col:2,icon:"spell_shadow_siphonmana",ranks:[15407],requires:[]},483:{id:483,row:3,col:1,icon:"spell_magic_lesserinvisibilty",ranks:[15274,15311],requires:[]},881:{id:881,row:3,col:2,icon:"spell_shadow_chilltouch",ranks:[17322,17323,17325],requires:[]},461:{id:461,row:3,col:3,icon:"spell_shadow_blackplague",ranks:[15257,15331,15332,15333,15334],requires:[]},541:{id:541,row:4,col:0,icon:"spell_shadow_impphaseshift",ranks:[15487],requires:[{id:542,qty:2}]},484:{id:484,row:4,col:1,icon:"spell_shadow_unsummonbuilding",ranks:[15286],requires:[]},1638:{id:1638,row:4,col:2,icon:"spell_shadow_improvedvampiricembrace",ranks:[27839,27840],requires:[{id:484,qty:1}]},462:{id:462,row:5,col:2,icon:"spell_shadow_twilight",ranks:[15259,15307,15308,15309,15310],requires:[]},521:{id:521,row:6,col:1,icon:"spell_shadow_shadowform",ranks:[15473],requires:[{id:484,qty:1}]}},261:{564:{id:564,row:0,col:1,icon:"spell_nature_wispsplode",ranks:[16039,16109,16110,16111,16112],requires:[]},563:{id:563,row:0,col:2,icon:"spell_fire_fireball",ranks:[16035,16105,16106,16107,16108],requires:[]},572:{id:572,row:1,col:0,icon:"spell_nature_stoneclawtotem",ranks:[16043,16130],requires:[]},1640:{id:1640,row:1,col:1,icon:"spell_nature_spiritarmor",ranks:[28996,28997,28998],requires:[]},561:{id:561,row:1,col:2,icon:"spell_fire_immolation",ranks:[16038,16160,16161],requires:[]},574:{id:574,row:2,col:0,icon:"spell_shadow_manaburn",ranks:[16164],requires:[]},575:{id:575,row:2,col:1,icon:"spell_frost_frostward",ranks:[16040,16113,16114,16115,16116],requires:[]},562:{id:562,row:2,col:2,icon:"spell_nature_callstorm",ranks:[16041,16117,16118,16119,16120],requires:[]},567:{id:567,row:3,col:0,icon:"spell_fire_sealoffire",ranks:[16086,16544],requires:[]},1642:{id:1642,row:3,col:1,icon:"spell_nature_eyeofthestorm",ranks:[29062,29064,29065],requires:[]},1645:{id:1645,row:3,col:3,icon:"spell_fire_elementaldevastation",ranks:[30160,29179,29180],requires:[]},1641:{id:1641,row:4,col:0,icon:"spell_nature_stormreach",ranks:[28999,29e3],requires:[]},565:{id:565,row:4,col:1,icon:"spell_fire_volcano",ranks:[16089],requires:[]},721:{id:721,row:5,col:2,icon:"spell_lightning_lightningbolt01",ranks:[16578,16579,16580,16581,16582],requires:[{id:562,qty:5}]},573:{id:573,row:6,col:1,icon:"spell_nature_wispheal",ranks:[16166],requires:[{id:565,qty:1}]}},262:{586:{id:586,row:0,col:1,icon:"spell_nature_magicimmunity",ranks:[16182,16226,16227,16228,16229],requires:[]},593:{id:593,row:0,col:2,icon:"spell_frost_manarecharge",ranks:[16179,16214,16215,16216,16217],requires:[]},589:{id:589,row:1,col:0,icon:"spell_nature_reincarnation",ranks:[16184,16209],requires:[]},581:{id:581,row:1,col:1,icon:"spell_nature_undyingstrength",ranks:[16176,16235,16240],requires:[]},595:{id:595,row:1,col:2,icon:"spell_nature_moonglow",ranks:[16173,16222,16223,16224,16225],requires:[]},583:{id:583,row:2,col:0,icon:"spell_frost_stun",ranks:[16180,16196,16198],requires:[]},587:{id:587,row:2,col:1,icon:"spell_nature_healingwavelesser",ranks:[16181,16230,16232,16233,16234],requires:[]},582:{id:582,row:2,col:2,icon:"spell_nature_nullward",ranks:[16189],requires:[]},1646:{id:1646,row:2,col:3,icon:"spell_nature_healingtouch",ranks:[29187,29189,29191],requires:[]},588:{id:588,row:3,col:1,icon:"spell_nature_manaregentotem",ranks:[16187,16205,16206,16207,16208],requires:[]},594:{id:594,row:3,col:2,icon:"spell_nature_tranquility",ranks:[16194,16218,16219,16220,16221],requires:[]},1648:{id:1648,row:4,col:0,icon:"spell_nature_healingway",ranks:[29206,29205,29202],requires:[]},591:{id:591,row:4,col:2,icon:"spell_nature_ravenform",ranks:[16188],requires:[]},592:{id:592,row:5,col:2,icon:"spell_frost_wizardmark",ranks:[16178,16210,16211,16212,16213],requires:[]},590:{id:590,row:6,col:1,icon:"spell_frost_summonwaterelemental",ranks:[16190],requires:[{id:588,qty:5}]}},263:{614:{id:614,row:0,col:1,icon:"spell_shadow_grimward",ranks:[17485,17486,17487,17488,17489],requires:[]},612:{id:612,row:0,col:2,icon:"inv_shield_06",ranks:[16253,16298,16299,16300,16301],requires:[]},609:{id:609,row:1,col:0,icon:"spell_nature_stoneskintotem",ranks:[16258,16293],requires:[]},613:{id:613,row:1,col:1,icon:"ability_thunderbolt",ranks:[16255,16302,16303,16304,16305],requires:[]},605:{id:605,row:1,col:2,icon:"spell_nature_spiritwolf",ranks:[16262,16287],requires:[]},607:{id:607,row:1,col:3,icon:"spell_nature_lightningshield",ranks:[16261,16290,16291],requires:[]},610:{id:610,row:2,col:0,icon:"spell_nature_earthbindtotem",ranks:[16259,16295],requires:[]},617:{id:617,row:2,col:2,icon:"inv_axe_10",ranks:[16269],requires:[]},601:{id:601,row:2,col:3,icon:"spell_nature_mirrorimage",ranks:[16254,16271,16272,16273,16274],requires:[]},602:{id:602,row:3,col:1,icon:"ability_ghoulfrenzy",ranks:[16256,16281,16282,16283,16284],requires:[{id:613,qty:5}]},615:{id:615,row:3,col:2,icon:"spell_holy_devotion",ranks:[16252,16306,16307,16308,16309],requires:[]},1647:{id:1647,row:4,col:0,icon:"spell_fire_enchantweapon",ranks:[29192,29193],requires:[]},611:{id:611,row:4,col:1,icon:"spell_fire_flametounge",ranks:[16266,29079,29080],requires:[]},616:{id:616,row:4,col:2,icon:"ability_parry",ranks:[16268],requires:[]},1643:{id:1643,row:5,col:2,icon:"ability_hunter_swiftstrike",ranks:[29082,29084,29086,29087,29088],requires:[]},901:{id:901,row:6,col:1,icon:"spell_holy_sealofmight",ranks:[17364],requires:[{id:611,qty:3}]}},281:{796:{id:796,row:0,col:1,icon:"ability_hunter_pet_hyena",ranks:[16934,16935,16936,16937,16938],requires:[]},795:{id:795,row:0,col:2,icon:"ability_druid_demoralizingroar",ranks:[16858,16859,16860,16861,16862],requires:[]},799:{id:799,row:1,col:0,icon:"ability_ambush",ranks:[16947,16948,16949,16950,16951],requires:[]},797:{id:797,row:1,col:1,icon:"ability_druid_bash",ranks:[16940,16941],requires:[]},794:{id:794,row:1,col:2,icon:"inv_misc_pelt_bear_03",ranks:[16929,16930,16931,16932,16933],requires:[]},807:{id:807,row:2,col:0,icon:"spell_nature_spiritwolf",ranks:[17002,24866],requires:[]},804:{id:804,row:2,col:1,icon:"ability_hunter_pet_bear",ranks:[16979],requires:[]},798:{id:798,row:2,col:2,icon:"inv_misc_monsterclaw_04",ranks:[16942,16943,16944],requires:[]},802:{id:802,row:3,col:0,icon:"spell_shadow_vampiricaura",ranks:[16966,16968],requires:[]},803:{id:803,row:3,col:1,icon:"ability_hunter_pet_cat",ranks:[16972,16974,16975],requires:[]},800:{id:800,row:3,col:2,icon:"ability_ghoulfrenzy",ranks:[16952,16954],requires:[{id:798,qty:3}]},801:{id:801,row:3,col:3,icon:"ability_racial_cannibalize",ranks:[16958,16961],requires:[{id:798,qty:3}]},805:{id:805,row:4,col:0,icon:"ability_druid_ravage",ranks:[16998,16999],requires:[]},1162:{id:1162,row:4,col:2,icon:"spell_nature_faeriefire",ranks:[16857],requires:[]},808:{id:808,row:5,col:1,icon:"spell_holy_blessingofagility",ranks:[17003,17004,17005,17006,24894],requires:[{id:803,qty:3}]},809:{id:809,row:6,col:1,icon:"spell_nature_unyeildingstamina",ranks:[17007],requires:[]}},282:{821:{id:821,row:0,col:1,icon:"spell_nature_regeneration",ranks:[17050,17051,17053,17054,17055],requires:[]},822:{id:822,row:0,col:2,icon:"spell_holy_blessingofstamina",ranks:[17056,17058,17059,17060,17061],requires:[]},824:{id:824,row:1,col:0,icon:"spell_nature_healingtouch",ranks:[17069,17070,17071,17072,17073],requires:[]},823:{id:823,row:1,col:1,icon:"spell_nature_healingwavegreater",ranks:[17063,17065,17066,17067,17068],requires:[]},826:{id:826,row:1,col:2,icon:"ability_druid_enrage",ranks:[17079,17082],requires:[]},829:{id:829,row:2,col:1,icon:"spell_frost_windwalkon",ranks:[17106,17107,17108],requires:[]},827:{id:827,row:2,col:2,icon:"spell_nature_insectswarm",ranks:[5570],requires:[]},841:{id:841,row:2,col:3,icon:"ability_eyeoftheowl",ranks:[17118,17119,17120,17121,17122],requires:[]},843:{id:843,row:3,col:1,icon:"spell_holy_elunesgrace",ranks:[24968,24969,24970,24971,24972],requires:[]},830:{id:830,row:3,col:3,icon:"spell_nature_rejuvenation",ranks:[17111,17112,17113],requires:[]},831:{id:831,row:4,col:0,icon:"spell_nature_ravenform",ranks:[17116],requires:[{id:824,qty:5}]},828:{id:828,row:4,col:2,icon:"spell_nature_protectionformnature",ranks:[17104,24943,24944,24945,24946],requires:[{id:827,qty:1}]},842:{id:842,row:4,col:3,icon:"spell_nature_tranquility",ranks:[17123,17124],requires:[]},825:{id:825,row:5,col:2,icon:"spell_nature_resistnature",ranks:[17074,17075,17076,17077,17078],requires:[]},844:{id:844,row:6,col:1,icon:"inv_relics_idolofrejuvenation",ranks:[18562],requires:[{id:843,qty:5}]}},283:{762:{id:762,row:0,col:0,icon:"spell_nature_abolishmagic",ranks:[16814,16815,16816,16817,16818],requires:[]},761:{id:761,row:0,col:1,icon:"spell_nature_natureswrath",ranks:[16689],requires:[]},921:{id:921,row:0,col:2,icon:"spell_nature_natureswrath",ranks:[17245,17247,17248,17249],requires:[{id:761,qty:1}]},787:{id:787,row:1,col:0,icon:"spell_nature_stranglevines",ranks:[16918,16919,16920],requires:[]},763:{id:763,row:1,col:1,icon:"spell_nature_starfall",ranks:[16821,16822,16823,16824,16825],requires:[]},791:{id:791,row:1,col:2,icon:"inv_staff_01",ranks:[16902,16903,16904,16905,16906],requires:[]},781:{id:781,row:1,col:3,icon:"spell_nature_wispsplode",ranks:[16833,16834,16835],requires:[]},782:{id:782,row:2,col:0,icon:"spell_nature_thorns",ranks:[16836,16839,16840],requires:[]},788:{id:788,row:2,col:2,icon:"spell_nature_crystalball",ranks:[16864],requires:[{id:791,qty:5}]},764:{id:764,row:2,col:3,icon:"spell_nature_naturetouchgrow",ranks:[16819,16820],requires:[]},792:{id:792,row:3,col:1,icon:"spell_nature_purge",ranks:[16909,16910,16911,16912,16913],requires:[{id:763,qty:5}]},784:{id:784,row:3,col:2,icon:"spell_arcane_starfire",ranks:[16850,16923,16924,16925,16926],requires:[]},789:{id:789,row:4,col:1,icon:"spell_nature_naturesblessing",ranks:[16880],requires:[]},783:{id:783,row:4,col:2,icon:"spell_nature_sentinal",ranks:[16845,16846,16847],requires:[]},790:{id:790,row:5,col:1,icon:"spell_nature_moonglow",ranks:[16896,16897,16899,16900,16901],requires:[{id:789,qty:1}]},793:{id:793,row:6,col:1,icon:"spell_nature_forceofnature",ranks:[24858],requires:[]}},301:{944:{id:944,row:0,col:1,icon:"spell_shadow_shadowbolt",ranks:[17793,17796,17801,17802,17803],requires:[]},941:{id:941,row:0,col:2,icon:"spell_fire_windsofwoe",ranks:[17778,17779,17780,17781,17782],requires:[]},943:{id:943,row:1,col:1,icon:"spell_shadow_deathpact",ranks:[17788,17789,17790,17791,17792],requires:[]},982:{id:982,row:1,col:2,icon:"spell_fire_fire",ranks:[18119,18120,18121,18122,18123],requires:[]},983:{id:983,row:2,col:0,icon:"spell_fire_firebolt",ranks:[18126,18127],requires:[]},984:{id:984,row:2,col:1,icon:"spell_shadow_curse",ranks:[18128,18129],requires:[]},981:{id:981,row:2,col:2,icon:"spell_fire_flameshock",ranks:[18130,18131,18132,18133,18134],requires:[]},963:{id:963,row:2,col:3,icon:"spell_shadow_scourgebuild",ranks:[17877],requires:[]},985:{id:985,row:3,col:0,icon:"spell_fire_lavaspawn",ranks:[18135,18136],requires:[]},964:{id:964,row:3,col:1,icon:"spell_shadow_corpseexplode",ranks:[17917,17918],requires:[]},965:{id:965,row:3,col:3,icon:"spell_fire_soulburn",ranks:[17927,17929,17930,17931,17932],requires:[]},986:{id:986,row:4,col:0,icon:"spell_fire_volcano",ranks:[18096,18073],requires:[{id:985,qty:2}]},961:{id:961,row:4,col:1,icon:"spell_fire_immolation",ranks:[17815,17833,17834,17835,17836],requires:[]},967:{id:967,row:4,col:2,icon:"spell_shadow_shadowwordpain",ranks:[17959],requires:[{id:981,qty:5}]},966:{id:966,row:5,col:2,icon:"spell_fire_selfdestruct",ranks:[17954,17955,17956,17957,17958],requires:[]},968:{id:968,row:6,col:1,icon:"spell_fire_fireball",ranks:[17962],requires:[{id:961,qty:5}]}},302:{1005:{id:1005,row:0,col:1,icon:"spell_shadow_unsummonbuilding",ranks:[18174,18175,18176,18177,18178],requires:[]},1003:{id:1003,row:0,col:2,icon:"spell_shadow_abominationexplosion",ranks:[17810,17811,17812,17813,17814],requires:[]},1006:{id:1006,row:1,col:0,icon:"spell_shadow_curseofmannoroth",ranks:[18179,18180,18181],requires:[]},1101:{id:1101,row:1,col:1,icon:"spell_shadow_haunting",ranks:[18213,18372],requires:[]},1007:{id:1007,row:1,col:2,icon:"spell_shadow_burningspirit",ranks:[18182,18183],requires:[]},1004:{id:1004,row:1,col:3,icon:"spell_shadow_lifedrain02",ranks:[17804,17805,17806,17807,17808],requires:[]},1284:{id:1284,row:2,col:0,icon:"spell_shadow_curseofsargeras",ranks:[18827,18829,18830],requires:[]},1001:{id:1001,row:2,col:1,icon:"spell_shadow_fingerofdeath",ranks:[17783,17784,17785,17786,17787],requires:[]},1061:{id:1061,row:2,col:2,icon:"spell_shadow_contagion",ranks:[18288],requires:[]},1021:{id:1021,row:3,col:0,icon:"spell_shadow_callofbone",ranks:[18218,18219],requires:[]},1002:{id:1002,row:3,col:1,icon:"spell_shadow_twilight",ranks:[18094,18095],requires:[]},1121:{id:1121,row:3,col:3,icon:"spell_shadow_siphonmana",ranks:[17864,18393],requires:[]},1041:{id:1041,row:4,col:1,icon:"spell_shadow_requiem",ranks:[18265],requires:[]},1081:{id:1081,row:4,col:2,icon:"spell_shadow_grimward",ranks:[18223],requires:[{id:1061,qty:1}]},1082:{id:1082,row:4,col:3,icon:"spell_shadow_grimward",ranks:[18310,18311,18312,18313],requires:[{id:1081,qty:1}]},1042:{id:1042,row:5,col:1,icon:"spell_shadow_shadetruesight",ranks:[18271,18272,18273,18274,18275],requires:[{id:1041,qty:1}]},1022:{id:1022,row:6,col:1,icon:"spell_shadow_darkritual",ranks:[18220],requires:[]}},303:{1221:{id:1221,row:0,col:0,icon:"inv_stone_04",ranks:[18692,18693],requires:[]},1222:{id:1222,row:0,col:1,icon:"spell_shadow_summonimp",ranks:[18694,18695,18696],requires:[]},1223:{id:1223,row:0,col:2,icon:"spell_shadow_metamorphosis",ranks:[18697,18698,18699,18700,18701],requires:[]},1224:{id:1224,row:1,col:0,icon:"spell_shadow_lifedrain",ranks:[18703,18704],requires:[]},1225:{id:1225,row:1,col:1,icon:"spell_shadow_summonvoidwalker",ranks:[18705,18706,18707],requires:[]},1242:{id:1242,row:1,col:2,icon:"spell_holy_magicalsentry",ranks:[18731,18743,18744,18745,18746],requires:[]},1243:{id:1243,row:2,col:0,icon:"spell_shadow_summonsuccubus",ranks:[18754,18755,18756],requires:[]},1226:{id:1226,row:2,col:1,icon:"spell_nature_removecurse",ranks:[18708],requires:[]},1241:{id:1241,row:2,col:2,icon:"spell_shadow_antishadow",ranks:[18748,18749,18750,18751,18752],requires:[]},1227:{id:1227,row:3,col:1,icon:"spell_shadow_impphaseshift",ranks:[18709,18710],requires:[{id:1226,qty:1}]},1262:{id:1262,row:3,col:2,icon:"spell_shadow_shadowworddominate",ranks:[18769,18770,18771,18772,18773],requires:[]},1283:{id:1283,row:4,col:0,icon:"spell_shadow_enslavedemon",ranks:[18821,18822,18823,18824,18825],requires:[]},1281:{id:1281,row:4,col:1,icon:"spell_shadow_psychicscream",ranks:[18788],requires:[]},1261:{id:1261,row:4,col:3,icon:"inv_ammo_firetar",ranks:[18767,18768],requires:[]},1244:{id:1244,row:5,col:2,icon:"spell_shadow_shadowpact",ranks:[23785,23822,23823,23824,23825],requires:[{id:1262,qty:5}]},1282:{id:1282,row:6,col:1,icon:"spell_shadow_gathershadows",ranks:[19028],requires:[{id:1281,qty:1}]},1263:{id:1263,row:6,col:2,icon:"inv_misc_gem_sapphire_01",ranks:[18774,18775],requires:[]}},361:{1382:{id:1382,row:0,col:1,icon:"spell_nature_ravenform",ranks:[19552,19553,19554,19555,19556],requires:[]},1389:{id:1389,row:0,col:2,icon:"spell_nature_reincarnation",ranks:[19583,19584,19585,19586,19587],requires:[]},1624:{id:1624,row:1,col:0,icon:"ability_eyeoftheowl",ranks:[19557,19558],requires:[]},1381:{id:1381,row:1,col:1,icon:"ability_hunter_aspectofthemonkey",ranks:[19549,19550,19551,24386,24387],requires:[]},1395:{id:1395,row:1,col:2,icon:"inv_misc_pelt_bear_03",ranks:[19609,19610,19612],requires:[]},1625:{id:1625,row:1,col:3,icon:"ability_hunter_beastsoothe",ranks:[24443,19575],requires:[]},1384:{id:1384,row:2,col:0,icon:"ability_mount_jungletiger",ranks:[19559,19560],requires:[]},1391:{id:1391,row:2,col:1,icon:"ability_druid_dash",ranks:[19596],requires:[]},1396:{id:1396,row:2,col:2,icon:"ability_bullrush",ranks:[19616,19617,19618,19619,19620],requires:[]},1385:{id:1385,row:3,col:1,icon:"ability_hunter_mendpet",ranks:[19572,19573],requires:[]},1393:{id:1393,row:3,col:2,icon:"inv_misc_monsterclaw_04",ranks:[19598,19599,19600,19601,19602],requires:[]},1388:{id:1388,row:4,col:0,icon:"ability_druid_demoralizingroar",ranks:[19578,20895],requires:[]},1387:{id:1387,row:4,col:1,icon:"ability_devour",ranks:[19577],requires:[]},1390:{id:1390,row:4,col:3,icon:"spell_nature_abolishmagic",ranks:[19590,19592],requires:[]},1397:{id:1397,row:5,col:2,icon:"inv_misc_monsterclaw_03",ranks:[19621,19622,19623,19624,19625],requires:[{id:1393,qty:5}]},1386:{id:1386,row:6,col:1,icon:"ability_druid_ferociousbite",ranks:[19574],requires:[{id:1387,qty:1}]}},362:{1623:{id:1623,row:0,col:0,icon:"inv_misc_head_dragon_black",ranks:[24293,24294,24295],requires:[]},1301:{id:1301,row:0,col:1,icon:"spell_holy_prayerofhealing",ranks:[19151,19152,19153],requires:[]},1311:{id:1311,row:0,col:2,icon:"ability_parry",ranks:[19295,19297,19298,19301,19300],requires:[]},1304:{id:1304,row:1,col:0,icon:"spell_nature_stranglevines",ranks:[19184,19387,19388,19389,19390],requires:[]},1621:{id:1621,row:1,col:1,icon:"ability_racial_bloodrage",ranks:[19159,19160],requires:[]},1305:{id:1305,row:1,col:2,icon:"ability_rogue_trip",ranks:[19228,19232,19233,19234,19235],requires:[]},1306:{id:1306,row:2,col:0,icon:"spell_nature_timestop",ranks:[19239,19245],requires:[]},1622:{id:1622,row:2,col:1,icon:"spell_shadow_twilight",ranks:[19255,19256,19257,19258,19259],requires:[]},1308:{id:1308,row:2,col:2,icon:"ability_whirlwind",ranks:[19263],requires:[]},1322:{id:1322,row:3,col:0,icon:"ability_ensnare",ranks:[19376,19377],requires:[]},1310:{id:1310,row:3,col:1,icon:"ability_kick",ranks:[19290,19294,24283],requires:[]},1309:{id:1309,row:3,col:3,icon:"ability_rogue_feigndeath",ranks:[19286,19287],requires:[]},1321:{id:1321,row:4,col:1,icon:"spell_holy_blessingofstamina",ranks:[19370,19371,19373],requires:[]},1312:{id:1312,row:4,col:2,icon:"ability_warrior_challange",ranks:[19306],requires:[{id:1308,qty:1}]},1303:{id:1303,row:5,col:2,icon:"spell_nature_invisibilty",ranks:[19168,19180,19181,24296,24297],requires:[]},1325:{id:1325,row:6,col:1,icon:"inv_spear_02",ranks:[19386],requires:[{id:1321,qty:3}]}},363:{1341:{id:1341,row:0,col:1,icon:"spell_frost_stun",ranks:[19407,19412,19413,19414,19415],requires:[]},1342:{id:1342,row:0,col:2,icon:"spell_frost_wizardmark",ranks:[19416,19417,19418,19419,19420],requires:[]},1343:{id:1343,row:1,col:1,icon:"ability_hunter_snipershot",ranks:[19421,19422,19423,19424,19425],requires:[]},1344:{id:1344,row:1,col:2,icon:"ability_searingarrow",ranks:[19426,19427,19429,19430,19431],requires:[]},1345:{id:1345,row:2,col:0,icon:"inv_spear_07",ranks:[19434],requires:[]},1346:{id:1346,row:2,col:1,icon:"ability_impalingbolt",ranks:[19454,19455,19456,19457,19458],requires:[]},1352:{id:1352,row:2,col:3,icon:"ability_townwatch",ranks:[19498,19499,19500],requires:[]},1348:{id:1348,row:3,col:1,icon:"ability_hunter_quickshot",ranks:[19464,19465,19466,19467,19468],requires:[]},1349:{id:1349,row:3,col:2,icon:"ability_piercedamage",ranks:[19485,19487,19488,19489,19490],requires:[{id:1344,qty:5}]},1353:{id:1353,row:4,col:0,icon:"ability_golemstormbolt",ranks:[19503],requires:[]},1347:{id:1347,row:4,col:1,icon:"ability_upgrademoonglaive",ranks:[19461,19462,24691],requires:[]},1351:{id:1351,row:4,col:2,icon:"ability_hunter_criticalshot",ranks:[19491,19493,19494],requires:[]},1362:{id:1362,row:5,col:2,icon:"inv_weapon_rifle_06",ranks:[19507,19508,19509,19510,19511],requires:[]},1361:{id:1361,row:6,col:1,icon:"ability_trueshot",ranks:[19506],requires:[{id:1347,qty:3}]}},381:{1401:{id:1401,row:0,col:1,icon:"spell_holy_fistofjustice",ranks:[20042,20045,20046,20047,20048],requires:[]},1407:{id:1407,row:0,col:2,icon:"spell_frost_windwalkon",ranks:[20101,20102,20103,20104,20105],requires:[]},1631:{id:1631,row:1,col:0,icon:"spell_holy_righteousfury",ranks:[25956,25957],requires:[]},1464:{id:1464,row:1,col:1,icon:"spell_holy_holysmite",ranks:[20335,20336,20337],requires:[]},1403:{id:1403,row:1,col:2,icon:"ability_parry",ranks:[20060,20061,20062,20063,20064],requires:[]},1633:{id:1633,row:2,col:0,icon:"spell_holy_vindication",ranks:[9452,26016,26021],requires:[]},1411:{id:1411,row:2,col:1,icon:"spell_holy_retributionaura",ranks:[20117,20118,20119,20120,20121],requires:[]},1481:{id:1481,row:2,col:2,icon:"ability_warrior_innerrage",ranks:[20375],requires:[]},1634:{id:1634,row:2,col:3,icon:"spell_holy_persuitofjustice",ranks:[26022,26023],requires:[]},1632:{id:1632,row:3,col:0,icon:"spell_holy_eyeforaneye",ranks:[9799,25988],requires:[]},1405:{id:1405,row:3,col:2,icon:"spell_holy_auraoflight",ranks:[20091,20092],requires:[]},1410:{id:1410,row:4,col:0,icon:"inv_hammer_04",ranks:[20111,20112,20113],requires:[]},1409:{id:1409,row:4,col:2,icon:"spell_holy_mindvision",ranks:[20218],requires:[]},1402:{id:1402,row:5,col:1,icon:"ability_racial_avatar",ranks:[20049,20056,20057,20058,20059],requires:[{id:1411,qty:5}]},1441:{id:1441,row:6,col:1,icon:"spell_holy_prayerofhealing",ranks:[20066],requires:[]}},382:{1450:{id:1450,row:0,col:1,icon:"ability_golemthunderclap",ranks:[20262,20263,20264,20265,20266],requires:[]},1449:{id:1449,row:0,col:2,icon:"spell_nature_sleep",ranks:[20257,20258,20259,20260,20261],requires:[]},1432:{id:1432,row:1,col:1,icon:"spell_arcane_blink",ranks:[20205,20206,20207,20209,20208],requires:[]},1463:{id:1463,row:1,col:2,icon:"ability_thunderbolt",ranks:[20224,20225,20330,20331,20332],requires:[]},1444:{id:1444,row:2,col:0,icon:"spell_holy_holybolt",ranks:[20237,20238,20239],requires:[]},1435:{id:1435,row:2,col:1,icon:"spell_holy_innerfire",ranks:[26573],requires:[]},1443:{id:1443,row:2,col:2,icon:"spell_holy_layonhands",ranks:[20234,20235],requires:[]},1628:{id:1628,row:2,col:3,icon:"spell_holy_unyieldingfaith",ranks:[9453,25836],requires:[]},1461:{id:1461,row:3,col:1,icon:"spell_holy_greaterheal",ranks:[20210,20212,20213,20214,20215],requires:[]},1446:{id:1446,row:3,col:2,icon:"spell_holy_sealofwisdom",ranks:[20244,20245],requires:[]},1433:{id:1433,row:4,col:1,icon:"spell_holy_heal",ranks:[20216],requires:[{id:1461,qty:5}]},1465:{id:1465,row:4,col:2,icon:"spell_holy_healingaura",ranks:[20359,20360,20361],requires:[]},1627:{id:1627,row:5,col:2,icon:"spell_holy_power",ranks:[5923,5924,5925,5926,25829],requires:[]},1502:{id:1502,row:6,col:1,icon:"spell_holy_searinglight",ranks:[20473],requires:[{id:1433,qty:1}]}},383:{1422:{id:1422,row:0,col:1,icon:"spell_holy_devotionaura",ranks:[20138,20139,20140,20141,20142],requires:[]},1421:{id:1421,row:0,col:2,icon:"ability_defend",ranks:[20127,20130,20135,20136,20137],requires:[]},1630:{id:1630,row:1,col:0,icon:"ability_rogue_ambush",ranks:[20189,20192,20193],requires:[]},1425:{id:1425,row:1,col:1,icon:"spell_holy_sealofprotection",ranks:[20174,20175],requires:[]},1423:{id:1423,row:1,col:3,icon:"spell_holy_devotion",ranks:[20143,20144,20145,20146,20147],requires:[]},1442:{id:1442,row:2,col:0,icon:"spell_magic_magearmor",ranks:[20217],requires:[]},1501:{id:1501,row:2,col:1,icon:"spell_holy_sealoffury",ranks:[20468,20469,20470],requires:[]},1424:{id:1424,row:2,col:2,icon:"inv_shield_06",ranks:[20148,20149,20150],requires:[{id:1421,qty:5}]},1629:{id:1629,row:2,col:3,icon:"spell_magic_lesserinvisibilty",ranks:[20096,20097,20098,20099,20100],requires:[]},1521:{id:1521,row:3,col:1,icon:"spell_holy_sealofmight",ranks:[20487,20488,20489],requires:[]},1626:{id:1626,row:3,col:2,icon:"spell_holy_mindsooth",ranks:[20254,20255,20256],requires:[]},1431:{id:1431,row:4,col:1,icon:"spell_nature_lightningshield",ranks:[20911],requires:[]},1426:{id:1426,row:4,col:2,icon:"spell_holy_blessingofstrength",ranks:[20177,20179,20181,20180,20182],requires:[]},1429:{id:1429,row:5,col:2,icon:"inv_sword_20",ranks:[20196,20197,20198,20199,20200],requires:[]},1430:{id:1430,row:6,col:1,icon:"spell_holy_blessingofprotection",ranks:[20925],requires:[{id:1431,qty:1}]}}},m={},y={},f={};for(var g in h)for(var b in h[g])m[b]=h[g][b],y[g]=Object.values(h[g]),f[b]=parseInt(g,10);var v=i(15),j=i(18),E=[{id:1,name:"Warrior",icon:"class_warrior",specs:[161,164,163]},{id:2,name:"Paladin",icon:"class_paladin",specs:[382,383,381]},{id:3,name:"Hunter",icon:"class_hunter",specs:[361,363,362]},{id:4,name:"Rogue",icon:"class_rogue",specs:[182,181,183]},{id:5,name:"Priest",icon:"class_priest",specs:[201,202,203]},{id:7,name:"Shaman",icon:"class_shaman",specs:[261,263,262]},{id:8,name:"Mage",icon:"class_mage",specs:[81,41,61]},{id:9,name:"Warlock",icon:"class_warlock",specs:[302,303,301]},{id:11,name:"Druid",icon:"class_druid",specs:[283,281,282]}],x=(E.reduce(function(r,e){return Object(j.a)({},r,Object(v.a)({},e.id,e))},{}),E.reduce(function(r,e){return Object(j.a)({},r,Object(v.a)({},e.name.toLowerCase(),e))},{})),C=51,O=function(r,e){return r.row===e.row?r.col-e.col:r.row-e.row};function R(r,e){return Object.values(h[r]).reduce(function(r,i){return r+e.get(i.id,0)},0)}function T(r){return Math.max(0,C-r.reduce(function(r,e){return r+e},0))}function N(r,e){return 0===r.requires.length||r.requires.reduce(function(r,i){return!!r&&e.get(i.id,0)>=i.qty},!0)}var P=function(r,e){return!(r.get(e.id,0)>=e.ranks.length)&&(0!==T(r)&&(!(e.requires.length>0&&!N(e,r))&&!(5*e.row>R(f[e.id],r))))},z=function(r,e,i){return 1===i?function(r,e){var i=r.get(e.id,0);return P(r,e)?r.set(e.id,i+1):r}(r,e):function(r,e){var i=r.get(e.id,0),o=f[e.id];if(0===i)return console.warn("no points to reduce"),r;var s=!1,n=0,l={};r.forEach(function(r,i){var a=h[o][i];if(a&&r>0){s=s||a.requires.some(function(r){return r.id===e.id}),a.row>n&&console.info("new highest row:",a),n=a.row>n?a.row:n;for(var c=a.row;c<7;c++)l[c]=(l[c]||0)+r}});var a=l[n-1],c=5*n;return e.rowd.ranks.length)break;u>0&&(console.log("Spent ".concat(u," in ").concat(d.id)),o=o.set(d.id,u))}}return o}function S(r,e){for(;r[r.length-1]===e;)r=r.slice(0,-1);return r}var I=function(r){var e=r.talent,i=r.specId,o=r.knownTalents,n=r.availablePoints,l=o.get(e.id,0),a=l>0||n>0,c=r.disabled||!a||!function(r,e,i){if(!N(r,i))return!1;var o=R(e,i);return 5*r.row<=o}(e,i,o),t=p()("talent",{"talent--disabled":!!c,"talent--available":!c&&l=e.ranks.length||l>0&&0===n}),d=p()("point-label",{"point-label--enabled":!c});return s.a.createElement("div",{className:t,title:e.ranks[0].toString(),"data-row":e.row,"data-col":e.col,onClick:c?function(){}:function(){return r.onClick(e.id)},onContextMenu:function(i){return r.onRightClick&&r.onRightClick(e.id),i.preventDefault(),!1}},s.a.createElement("div",{className:"talent__status"}),s.a.createElement(k,{name:e.icon,size:"medium"}),a&&!c&&s.a.createElement("div",{className:d},l,"/",e.ranks.length))};I.defaultProps={onClick:function(){},onRightClick:function(){}},I.whyDidYouRender=!0;i(35);var L=function(r){var e=r.from,i=r.to,o=r.active,n=void 0!==o&&o,l=i.row===e.row?Math.abs(i.col-e.col):i.row-e.row,a={"data-col":e.col,"data-row":e.row,"data-length":l},c=p()("arrow",{"arrow--active":n,"arrow--down":i.row>e.row,"arrow--right":i.row===e.row&&i.col>e.col,"arrow--left":i.row===e.row&&i.col0}).map(function(r){return s.a.createElement(L,{key:r.id,from:m[r.requires[0].id],to:r,active:n.get(r.id,0)>0||P(n,r)})});return s.a.createElement("div",{className:"tree"},s.a.createElement("div",{className:"tree__header"},s.a.createElement("h3",null,q[e]," (",R(e,n),")")),s.a.createElement("div",{className:"tree__body",style:u},c.map(function(r){return s.a.createElement(I,{key:r.id,specId:e,talent:r,availablePoints:l,knownTalents:n,onClick:t,onRightClick:d})}),_))};M.whyDidYouRender=!0;var U=Object(_.a)(),A=function(r){function e(){var r,i;Object(a.a)(this,e);for(var o=arguments.length,s=new Array(o),n=0;n0?"-":"",i+=S(y[n].sort(O).map(function(e){return r.get(e.id,0)}).join(""),"0")}return S(i,"-")}(r,e);this.props.history.replace("/".concat(e)+(i?"/".concat(i):""))}},{key:"render",value:function(){var r=this,e=this.props.selectedClass,i=this.state.knownTalents,o=x[e],n=T(i);return s.a.createElement("div",{className:"calculator"},s.a.createElement("div",{className:"trees"},o.specs.map(function(e){return s.a.createElement(M,{key:e,specId:e,availablePoints:n,knownTalents:i,onTalentPress:r.handleTalentPress})})),s.a.createElement("div",{className:"calculator__points"},"Points: ",n),s.a.createElement("ul",null,s.a.createElement("li",null,s.a.createElement("a",{href:"/shaman/-5505000055523051-55"},"Shaman test")),s.a.createElement("li",null,s.a.createElement("a",{href:"/shaman/-5595000055523051-55"},"Shaman test broken")),s.a.createElement("li",null,s.a.createElement("a",{href:"/rogue/-005055-50205302332212051"},"Rogue can unlearn first row"))))}}]),e}(s.a.PureComponent);A.whyDidYouRender=!0;var B=i(16),F=function(r,e){return p()("class-picker__class",{"class-picker__class--active":r.name.toLowerCase()===e,"class-picker__class--inactive":!!e&&r.name.toLowerCase()!==e})},H=function(r){function e(){return Object(a.a)(this,e),Object(t.a)(this,Object(d.a)(e).apply(this,arguments))}return Object(u.a)(e,r),Object(c.a)(e,[{key:"render",value:function(){var r=this.props.selected,e=p()("class-picker",{"class-picker--has-selection":!!r});return s.a.createElement("ul",{className:e},Object.values(x).map(function(e){return s.a.createElement("li",{key:e.id,className:F(e,r)},s.a.createElement(B.b,{to:"/".concat(e.name.toLowerCase()),title:e.name},s.a.createElement(k,{name:e.icon,golden:r===e.name.toLowerCase()})))}))}}]),e}(s.a.PureComponent);H.whyDidYouRender=!0;var Y=function(r){function e(){return Object(a.a)(this,e),Object(t.a)(this,Object(d.a)(e).apply(this,arguments))}return Object(u.a)(e,r),Object(c.a)(e,[{key:"componentDidMount",value:function(){var r=this.props.match.params.selectedClass;r&&!x[r]&&this.props.history.replace("/")}},{key:"render",value:function(){var r=this.props,e=r.match,i=r.history,o=e.params,n=o.selectedClass,l=o.pointString;return n&&!x[n]?null:s.a.createElement("div",{className:"index"},s.a.createElement(H,{selected:n}),n&&s.a.createElement(A,{initialTalents:l&&D(l,n),selectedClass:n,history:i}))}}]),e}(s.a.PureComponent);Y.whyDidYouRender=!0;var W=i(6),J=function(){return s.a.createElement(B.a,{basename:"%PUBLIC_URL%"},s.a.createElement("div",{className:"App"},s.a.createElement(W.a,{path:"/:selectedClass?/:pointString?",component:Y})))};Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));l.a.render(s.a.createElement(J,null),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then(function(r){r.unregister()})}]),[[27,1,2]]]); -//# sourceMappingURL=main.4982432a.chunk.js.map \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],Array(27).concat([function(r,e,i){r.exports=i(68)},,,,,function(r,e,i){},function(r,e,i){},function(r,e,i){},function(r,e,i){},function(r,e,i){var o={"./161.jpg":37,"./163.jpg":38,"./164.jpg":39,"./181.jpg":40,"./182.jpg":41,"./183.jpg":42,"./201.jpg":43,"./202.jpg":44,"./203.jpg":45,"./261.jpg":46,"./262.jpg":47,"./263.jpg":48,"./281.jpg":49,"./282.jpg":50,"./283.jpg":51,"./301.jpg":52,"./302.jpg":53,"./303.jpg":54,"./361.jpg":55,"./362.jpg":56,"./363.jpg":57,"./381.jpg":58,"./382.jpg":59,"./383.jpg":60,"./41.jpg":61,"./61.jpg":62,"./81.jpg":63};function s(r){var e=n(r);return i(e)}function n(r){if(!i.o(o,r)){var e=new Error("Cannot find module '"+r+"'");throw e.code="MODULE_NOT_FOUND",e}return o[r]}s.keys=function(){return Object.keys(o)},s.resolve=n,r.exports=s,s.id=36},function(r,e,i){r.exports=i.p+"static/media/161.3b1eb099.jpg"},function(r,e,i){r.exports=i.p+"static/media/163.d8ff0256.jpg"},function(r,e,i){r.exports=i.p+"static/media/164.5a9a21e2.jpg"},function(r,e,i){r.exports=i.p+"static/media/181.732693ea.jpg"},function(r,e,i){r.exports=i.p+"static/media/182.2ba9eac3.jpg"},function(r,e,i){r.exports=i.p+"static/media/183.3d6c94d0.jpg"},function(r,e,i){r.exports=i.p+"static/media/201.7ef542fd.jpg"},function(r,e,i){r.exports=i.p+"static/media/202.51496721.jpg"},function(r,e,i){r.exports=i.p+"static/media/203.19c7b9ba.jpg"},function(r,e,i){r.exports=i.p+"static/media/261.ec420cae.jpg"},function(r,e,i){r.exports=i.p+"static/media/262.1a859835.jpg"},function(r,e,i){r.exports=i.p+"static/media/263.968052c4.jpg"},function(r,e,i){r.exports=i.p+"static/media/281.b6a8478e.jpg"},function(r,e,i){r.exports=i.p+"static/media/282.e148424a.jpg"},function(r,e,i){r.exports=i.p+"static/media/283.e0beb1ab.jpg"},function(r,e,i){r.exports=i.p+"static/media/301.b0e11336.jpg"},function(r,e,i){r.exports=i.p+"static/media/302.68b29a92.jpg"},function(r,e,i){r.exports=i.p+"static/media/303.fd92e13b.jpg"},function(r,e,i){r.exports=i.p+"static/media/361.1e37fb0b.jpg"},function(r,e,i){r.exports=i.p+"static/media/362.95ffdde5.jpg"},function(r,e,i){r.exports=i.p+"static/media/363.905dc629.jpg"},function(r,e,i){r.exports=i.p+"static/media/381.17666e6c.jpg"},function(r,e,i){r.exports=i.p+"static/media/382.b7f1381d.jpg"},function(r,e,i){r.exports=i.p+"static/media/383.5a8a3168.jpg"},function(r,e,i){r.exports=i.p+"static/media/41.fbfd140b.jpg"},function(r,e,i){r.exports=i.p+"static/media/61.514eba87.jpg"},function(r,e,i){r.exports=i.p+"static/media/81.892c508a.jpg"},,,,,function(r,e,i){"use strict";i.r(e);var o=i(0),s=i.n(o),n=i(24),l=i.n(n),a=(i(32),i(7)),c=i(8),t=i(10),d=i(9),u=i(11),_=i(14),w=(i(33),i(5)),p=i.n(w),k=(i(34),function(r){var e=r.name,i=r.size,o=void 0===i?"medium":i,n=r.golden,l=void 0!==n&&n,a=r.children,c=p()("icon","icon--".concat(o),{"icon--golden":l}),t={backgroundImage:"url(https://wow.zamimg.com/images/wow/icons/".concat("medium"===o?"large":"medium","/").concat(e,".jpg)")};return s.a.createElement("div",{className:c},s.a.createElement("div",{className:"icon__bg",style:t}),s.a.createElement("div",{className:"icon__frame"}),a)}),q={41:"Fire",61:"Frost",81:"Arcane",161:"Arms",163:"Protection",164:"Fury",181:"Combat",182:"Assassination",183:"Subtlety",201:"Discipline",202:"Holy",203:"Shadow",261:"Elemental",262:"Restoration",263:"Enhancement",281:"Feral Combat",282:"Restoration",283:"Balance",301:"Destruction",302:"Affliction",303:"Demonology",361:"Beast Mastery",362:"Survival",363:"Marksmanship",381:"Retribution",382:"Holy",383:"Protection"},h={41:{26:{id:26,row:0,col:1,icon:"spell_fire_flamebolt",ranks:[11069,12338,12339,12340,12341],requires:[]},30:{id:30,row:0,col:2,icon:"spell_fire_meteorstorm",ranks:[11103,12357,12358,12359,12360],requires:[]},34:{id:34,row:1,col:0,icon:"spell_fire_incinerate",ranks:[11119,11120,12846,12847,12848],requires:[]},28:{id:28,row:1,col:1,icon:"spell_fire_flare",ranks:[11100,12353],requires:[]},27:{id:27,row:1,col:2,icon:"spell_fire_fireball",ranks:[11078,11080,12342],requires:[]},1141:{id:1141,row:2,col:0,icon:"spell_fire_flameshock",ranks:[18459,18460],requires:[]},31:{id:31,row:2,col:1,icon:"spell_fire_selfdestruct",ranks:[11108,12349,12350],requires:[]},29:{id:29,row:2,col:2,icon:"spell_fire_fireball02",ranks:[11366],requires:[]},23:{id:23,row:2,col:3,icon:"spell_fire_fire",ranks:[11083,12351],requires:[]},25:{id:25,row:3,col:0,icon:"spell_fire_soulburn",ranks:[11095,12872,12873],requires:[]},24:{id:24,row:3,col:1,icon:"spell_fire_firearmor",ranks:[11094,13043],requires:[]},1639:{id:1639,row:3,col:3,icon:"spell_fire_masterofelements",ranks:[29074,29075,29076],requires:[]},33:{id:33,row:4,col:1,icon:"spell_nature_wispheal",ranks:[11115,11367,11368],requires:[]},32:{id:32,row:4,col:2,icon:"spell_holy_excorcism_02",ranks:[11113],requires:[{id:29,qty:1}]},35:{id:35,row:5,col:2,icon:"spell_fire_immolation",ranks:[11124,12378,12398,12399,12400],requires:[]},36:{id:36,row:6,col:1,icon:"spell_fire_sealoffire",ranks:[11129],requires:[{id:33,qty:3}]}},61:{70:{id:70,row:0,col:0,icon:"spell_frost_frostward",ranks:[11189,28332],requires:[]},37:{id:37,row:0,col:1,icon:"spell_frost_frostbolt02",ranks:[11070,12473,16763,16765,16766],requires:[]},1649:{id:1649,row:0,col:2,icon:"spell_ice_magicdamage",ranks:[29438,29439,29440],requires:[]},73:{id:73,row:1,col:0,icon:"spell_frost_iceshard",ranks:[11207,12672,15047,15052,15053],requires:[]},38:{id:38,row:1,col:1,icon:"spell_frost_frostarmor",ranks:[11071,12496,12497],requires:[]},62:{id:62,row:1,col:2,icon:"spell_frost_freezingbreath",ranks:[11165,12475],requires:[]},65:{id:65,row:1,col:3,icon:"spell_frost_wisp",ranks:[11175,12569,12571],requires:[]},61:{id:61,row:2,col:0,icon:"spell_frost_frostbolt",ranks:[11151,12952,12953],requires:[]},69:{id:69,row:2,col:1,icon:"spell_frost_wizardmark",ranks:[12472],requires:[]},63:{id:63,row:2,col:3,icon:"spell_frost_icestorm",ranks:[11185,12487,12488],requires:[]},741:{id:741,row:3,col:0,icon:"spell_shadow_darkritual",ranks:[16757,16758],requires:[]},66:{id:66,row:3,col:1,icon:"spell_frost_stun",ranks:[11160,12518,12519],requires:[]},67:{id:67,row:3,col:2,icon:"spell_frost_frostshock",ranks:[11170,12982,12983,12984,12985],requires:[{id:62,qty:2}]},72:{id:72,row:4,col:1,icon:"spell_frost_frost",ranks:[11958],requires:[]},64:{id:64,row:4,col:2,icon:"spell_frost_glacier",ranks:[11190,12489,12490],requires:[]},68:{id:68,row:5,col:2,icon:"spell_frost_chillingblast",ranks:[11180,28592,28593,28594,28595],requires:[]},71:{id:71,row:6,col:1,icon:"spell_ice_lament",ranks:[11426],requires:[{id:72,qty:1}]}},81:{74:{id:74,row:0,col:0,icon:"spell_holy_dispelmagic",ranks:[11210,12592],requires:[]},76:{id:76,row:0,col:1,icon:"spell_holy_devotion",ranks:[11222,12839,12840,12841,12842],requires:[]},80:{id:80,row:0,col:2,icon:"spell_nature_starfall",ranks:[11237,12463,12464,16769,16770],requires:[]},78:{id:78,row:1,col:0,icon:"inv_wand_01",ranks:[6057,6085],requires:[]},1650:{id:1650,row:1,col:1,icon:"spell_nature_astralrecalgroup",ranks:[29441,29444,29445,29446,29447],requires:[]},75:{id:75,row:1,col:2,icon:"spell_shadow_manaburn",ranks:[11213,12574,12575,12576,12577],requires:[]},82:{id:82,row:2,col:0,icon:"spell_nature_abolishmagic",ranks:[11247,12606],requires:[]},81:{id:81,row:2,col:1,icon:"spell_nature_wispsplode",ranks:[11242,12467,12469],requires:[]},85:{id:85,row:2,col:2,icon:"spell_arcane_arcaneresilience",ranks:[28574],requires:[]},83:{id:83,row:3,col:0,icon:"spell_shadow_detectlesserinvisibility",ranks:[11252,12605],requires:[]},88:{id:88,row:3,col:1,icon:"spell_frost_iceshock",ranks:[11255,12598],requires:[]},1142:{id:1142,row:3,col:3,icon:"spell_shadow_siphonmana",ranks:[18462,18463,18464],requires:[]},86:{id:86,row:4,col:1,icon:"spell_nature_enchantarmor",ranks:[12043],requires:[]},77:{id:77,row:4,col:2,icon:"spell_shadow_charm",ranks:[11232,12500,12501,12502,12503],requires:[{id:85,qty:1}]},421:{id:421,row:5,col:1,icon:"spell_shadow_teleport",ranks:[15058,15059,15060],requires:[{id:86,qty:1}]},87:{id:87,row:6,col:1,icon:"spell_nature_lightning",ranks:[12042],requires:[{id:421,qty:3}]}},161:{124:{id:124,row:0,col:0,icon:"ability_rogue_ambush",ranks:[12282,12663,12664],requires:[]},130:{id:130,row:0,col:1,icon:"ability_parry",ranks:[16462,16463,16464,16465,16466],requires:[]},127:{id:127,row:0,col:2,icon:"ability_gouge",ranks:[12286,12658,12659],requires:[]},126:{id:126,row:1,col:0,icon:"ability_warrior_charge",ranks:[12285,12697],requires:[]},641:{id:641,row:1,col:1,icon:"spell_nature_enchantarmor",ranks:[12295,12676,12677,12678,12679],requires:[]},128:{id:128,row:1,col:3,icon:"ability_thunderclap",ranks:[12287,12665,12666],requires:[]},131:{id:131,row:2,col:0,icon:"inv_sword_05",ranks:[12290,12963],requires:[]},137:{id:137,row:2,col:1,icon:"spell_holy_blessingofstamina",ranks:[12296],requires:[{id:641,qty:5}]},121:{id:121,row:2,col:2,icon:"ability_backstab",ranks:[12834,12849,12867],requires:[{id:127,qty:3}]},136:{id:136,row:3,col:1,icon:"inv_axe_09",ranks:[12163,12711,12712,12713,12714],requires:[]},662:{id:662,row:3,col:2,icon:"ability_searingarrow",ranks:[16493,16494],requires:[{id:121,qty:3}]},132:{id:132,row:4,col:0,icon:"inv_axe_06",ranks:[12700,12781,12783,12784,12785],requires:[]},133:{id:133,row:4,col:1,icon:"ability_rogue_slicedice",ranks:[12292],requires:[]},125:{id:125,row:4,col:2,icon:"inv_mace_01",ranks:[12284,12701,12702,12703,12704],requires:[]},123:{id:123,row:4,col:3,icon:"inv_sword_27",ranks:[12281,12812,12813,12814,12815],requires:[]},134:{id:134,row:5,col:0,icon:"inv_weapon_halbard_01",ranks:[12165,12830,12831,12832,12833],requires:[]},129:{id:129,row:5,col:2,icon:"ability_shockwave",ranks:[12289,12668,23695],requires:[]},135:{id:135,row:6,col:1,icon:"ability_warrior_savageblow",ranks:[12294],requires:[{id:133,qty:1}]}},163:{1601:{id:1601,row:0,col:1,icon:"inv_shield_06",ranks:[12298,12724,12725,12726,12727],requires:[]},138:{id:138,row:0,col:2,icon:"spell_nature_mirrorimage",ranks:[12297,12750,12751,12752,12753],requires:[]},142:{id:142,row:1,col:0,icon:"ability_racial_bloodrage",ranks:[12301,12818],requires:[]},140:{id:140,row:1,col:2,icon:"spell_holy_devotion",ranks:[12299,12761,12762,12763,12764],requires:[]},141:{id:141,row:1,col:3,icon:"spell_magic_magearmor",ranks:[12300,12959,12960,12961,12962],requires:[]},153:{id:153,row:2,col:0,icon:"spell_holy_ashestoashes",ranks:[12975],requires:[{id:142,qty:2}]},145:{id:145,row:2,col:1,icon:"ability_defend",ranks:[12945,12307,12944],requires:[{id:1601,qty:5}]},147:{id:147,row:2,col:2,icon:"ability_warrior_revenge",ranks:[12797,12799,12800],requires:[]},144:{id:144,row:2,col:3,icon:"ability_warrior_innerrage",ranks:[12303,12788,12789,12791,12792],requires:[]},146:{id:146,row:3,col:0,icon:"ability_warrior_sunder",ranks:[12308,12810,12811],requires:[]},151:{id:151,row:3,col:1,icon:"ability_warrior_disarm",ranks:[12313,12804,12807],requires:[]},143:{id:143,row:3,col:2,icon:"spell_nature_reincarnation",ranks:[12302,12765],requires:[]},150:{id:150,row:4,col:0,icon:"ability_warrior_shieldwall",ranks:[12312,12803],requires:[]},152:{id:152,row:4,col:1,icon:"ability_thunderbolt",ranks:[12809],requires:[]},149:{id:149,row:4,col:2,icon:"ability_warrior_shieldbash",ranks:[12311,12958],requires:[]},702:{id:702,row:5,col:2,icon:"inv_sword_20",ranks:[16538,16539,16540,16541,16542],requires:[]},148:{id:148,row:6,col:1,icon:"inv_shield_05",ranks:[23922],requires:[{id:152,qty:1}]}},164:{158:{id:158,row:0,col:1,icon:"spell_nature_purge",ranks:[12321,12835,12836,12837,12838],requires:[]},157:{id:157,row:0,col:2,icon:"ability_rogue_eviscerate",ranks:[12320,12852,12853,12855,12856],requires:[]},161:{id:161,row:1,col:1,icon:"ability_warrior_warcry",ranks:[12324,12876,12877,12878,12879],requires:[]},159:{id:159,row:1,col:2,icon:"spell_nature_stoneclawtotem",ranks:[12322,12999,13e3,13001,13002],requires:[]},166:{id:166,row:2,col:0,icon:"ability_warrior_cleave",ranks:[12329,12950,20496],requires:[]},160:{id:160,row:2,col:1,icon:"spell_shadow_deathscream",ranks:[12323],requires:[]},661:{id:661,row:2,col:2,icon:"spell_shadow_summonimp",ranks:[16487,16489,16492],requires:[]},154:{id:154,row:2,col:3,icon:"ability_warrior_battleshout",ranks:[12318,12857,12858,12860,12861],requires:[]},1581:{id:1581,row:3,col:0,icon:"ability_dualwield",ranks:[23584,23585,23586,23587,23588],requires:[]},1542:{id:1542,row:3,col:1,icon:"inv_sword_48",ranks:[20502,20503],requires:[]},155:{id:155,row:3,col:2,icon:"spell_shadow_unholyfrenzy",ranks:[12317,13045,13046,13047,13048],requires:[]},168:{id:168,row:4,col:0,icon:"ability_warrior_decisivestrike",ranks:[12862,12330,20497,20498,20499],requires:[]},165:{id:165,row:4,col:1,icon:"spell_shadow_deathpact",ranks:[12328],requires:[]},1543:{id:1543,row:4,col:3,icon:"ability_rogue_sprint",ranks:[20504,20505],requires:[]},1541:{id:1541,row:5,col:0,icon:"spell_nature_ancestralguardian",ranks:[20500,20501],requires:[]},156:{id:156,row:5,col:2,icon:"ability_ghoulfrenzy",ranks:[12319,12971,12972,12973,12974],requires:[{id:155,qty:5}]},167:{id:167,row:6,col:1,icon:"spell_nature_bloodlust",ranks:[23881],requires:[{id:165,qty:1}]}},181:{203:{id:203,row:0,col:0,icon:"ability_gouge",ranks:[13741,13793,13792],requires:[]},201:{id:201,row:0,col:1,icon:"spell_shadow_ritualofsacrifice",ranks:[13732,13863],requires:[]},186:{id:186,row:0,col:2,icon:"spell_nature_invisibilty",ranks:[13712,13788,13789,13790,13791],requires:[]},202:{id:202,row:1,col:0,icon:"ability_backstab",ranks:[13733,13865,13866],requires:[]},187:{id:187,row:1,col:1,icon:"ability_parry",ranks:[13713,13853,13854,13855,13856],requires:[]},181:{id:181,row:1,col:2,icon:"ability_marksmanship",ranks:[13705,13832,13843,13844,13845],requires:[]},204:{id:204,row:2,col:0,icon:"spell_shadow_shadowward",ranks:[13742,13872],requires:[]},301:{id:301,row:2,col:1,icon:"ability_warrior_challange",ranks:[14251],requires:[{id:187,qty:5}]},222:{id:222,row:2,col:3,icon:"ability_rogue_sprint",ranks:[13743,13875],requires:[]},206:{id:206,row:3,col:0,icon:"ability_kick",ranks:[13754,13867],requires:[]},182:{id:182,row:3,col:1,icon:"inv_weapon_shortblade_05",ranks:[13706,13804,13805,13806,13807],requires:[]},221:{id:221,row:3,col:2,icon:"ability_dualwield",ranks:[13715,13848,13849,13851,13852],requires:[{id:181,qty:5}]},184:{id:184,row:4,col:0,icon:"inv_mace_01",ranks:[13709,13800,13801,13802,13803],requires:[]},223:{id:223,row:4,col:1,icon:"ability_warrior_punishingblow",ranks:[13877],requires:[]},242:{id:242,row:4,col:2,icon:"inv_sword_27",ranks:[13960,13961,13962,13963,13964],requires:[]},183:{id:183,row:4,col:3,icon:"inv_gauntlets_04",ranks:[13707,13966,13967,13968,13969],requires:[]},1703:{id:1703,row:5,col:1,icon:"spell_holy_blessingofstrength",ranks:[30919,30920],requires:[{id:223,qty:1}]},1122:{id:1122,row:5,col:2,icon:"ability_racial_avatar",ranks:[18427,18428,18429],requires:[]},205:{id:205,row:6,col:1,icon:"spell_shadow_shadowworddominate",ranks:[13750],requires:[]}},182:{276:{id:276,row:0,col:0,icon:"ability_rogue_eviscerate",ranks:[14162,14163,14164],requires:[]},272:{id:272,row:0,col:1,icon:"ability_fiegndead",ranks:[14144,14148],requires:[]},270:{id:270,row:0,col:2,icon:"ability_racial_bloodrage",ranks:[14138,14139,14140,14141,14142],requires:[]},273:{id:273,row:1,col:0,icon:"ability_druid_disembowel",ranks:[14156,14160,14161],requires:[]},274:{id:274,row:1,col:1,icon:"spell_shadow_deathscream",ranks:[14158,14159],requires:[]},277:{id:277,row:1,col:3,icon:"ability_rogue_slicedice",ranks:[14165,14166,14167],requires:[]},281:{id:281,row:2,col:0,icon:"ability_warrior_decisivestrike",ranks:[14179],requires:[]},278:{id:278,row:2,col:1,icon:"ability_warrior_riposte",ranks:[14168,14169],requires:[]},269:{id:269,row:2,col:2,icon:"ability_criticalstrike",ranks:[14128,14132,14135,14136,14137],requires:[{id:270,qty:5}]},682:{id:682,row:3,col:1,icon:"ability_rogue_feigndeath",ranks:[16513,16514,16515,16719,16720],requires:[]},268:{id:268,row:3,col:2,icon:"ability_poisons",ranks:[14113,14114,14115,14116,14117],requires:[]},280:{id:280,row:4,col:1,icon:"spell_ice_lament",ranks:[14177],requires:[]},279:{id:279,row:4,col:2,icon:"ability_rogue_kidneyshot",ranks:[14174,14175,14176],requires:[]},283:{id:283,row:5,col:1,icon:"spell_shadow_chilltouch",ranks:[14186,14190,14193,14194,14195],requires:[{id:280,qty:1}]},382:{id:382,row:6,col:1,icon:"spell_nature_earthbindtotem",ranks:[14983],requires:[]}},183:{241:{id:241,row:0,col:1,icon:"spell_shadow_charm",ranks:[13958,13970,13971,13972,13973],requires:[]},261:{id:261,row:0,col:2,icon:"ability_warrior_warcry",ranks:[14057,14072,14073,14074,14075],requires:[]},1700:{id:1700,row:1,col:0,icon:"ability_rogue_feint",ranks:[30892,30893],requires:[]},247:{id:247,row:1,col:1,icon:"spell_magic_lesserinvisibilty",ranks:[13981,14066],requires:[]},244:{id:244,row:1,col:2,icon:"ability_stealth",ranks:[13975,14062,14063,14064,14065],requires:[]},245:{id:245,row:2,col:0,icon:"spell_shadow_fumble",ranks:[13976,13979,13980],requires:[]},303:{id:303,row:2,col:1,icon:"spell_shadow_curse",ranks:[14278],requires:[]},263:{id:263,row:2,col:2,icon:"ability_rogue_ambush",ranks:[14079,14080,14081],requires:[]},246:{id:246,row:3,col:0,icon:"spell_nature_mirrorimage",ranks:[13983,14070,14071],requires:[]},262:{id:262,row:3,col:1,icon:"ability_sap",ranks:[14076,14094,14095],requires:[]},1123:{id:1123,row:3,col:2,icon:"inv_sword_17",ranks:[14171,14172,14173],requires:[]},1701:{id:1701,row:4,col:0,icon:"ability_ambush",ranks:[30894,30895],requires:[]},284:{id:284,row:4,col:1,icon:"spell_shadow_antishadow",ranks:[14185],requires:[]},265:{id:265,row:4,col:2,icon:"spell_shadow_summonsuccubus",ranks:[14082,14083],requires:[]},681:{id:681,row:4,col:3,icon:"spell_shadow_lifedrain",ranks:[16511],requires:[{id:1123,qty:3}]},1702:{id:1702,row:5,col:2,icon:"inv_weapon_crossbow_11",ranks:[30902,30903,30904,30905,30906],requires:[]},381:{id:381,row:6,col:1,icon:"spell_shadow_possession",ranks:[14183],requires:[{id:284,qty:1}]}},201:{342:{id:342,row:0,col:1,icon:"spell_magic_magearmor",ranks:[14522,14788,14789,14790,14791],requires:[]},345:{id:345,row:0,col:2,icon:"inv_wand_01",ranks:[14524,14525,14526,14527,14528],requires:[]},352:{id:352,row:1,col:0,icon:"spell_nature_manaregentotem",ranks:[14523,14784,14785,14786,14787],requires:[]},344:{id:344,row:1,col:1,icon:"spell_holy_wordfortitude",ranks:[14749,14767],requires:[]},343:{id:343,row:1,col:2,icon:"spell_holy_powerwordshield",ranks:[14748,14768,14769],requires:[]},321:{id:321,row:1,col:3,icon:"spell_nature_tranquility",ranks:[14531,14774],requires:[]},348:{id:348,row:2,col:1,icon:"spell_frost_windwalkon",ranks:[14751],requires:[]},347:{id:347,row:2,col:2,icon:"spell_nature_sleep",ranks:[14521,14776,14777],requires:[]},346:{id:346,row:3,col:0,icon:"spell_holy_innerfire",ranks:[14747,14770,14771],requires:[]},341:{id:341,row:3,col:1,icon:"ability_hibernation",ranks:[14520,14780,14781,14782,14783],requires:[]},350:{id:350,row:3,col:3,icon:"spell_shadow_manaburn",ranks:[14750,14772],requires:[]},1201:{id:1201,row:4,col:1,icon:"spell_nature_enchantarmor",ranks:[18551,18552,18553,18554,18555],requires:[]},351:{id:351,row:4,col:2,icon:"spell_holy_divinespirit",ranks:[14752],requires:[{id:347,qty:3}]},1202:{id:1202,row:5,col:2,icon:"spell_nature_slowingtotem",ranks:[18544,18547,18548,18549,18550],requires:[]},322:{id:322,row:6,col:1,icon:"spell_holy_powerinfusion",ranks:[10060],requires:[{id:1201,qty:5}]}},202:{410:{id:410,row:0,col:0,icon:"spell_holy_healingfocus",ranks:[14913,15012],requires:[]},406:{id:406,row:0,col:1,icon:"spell_holy_renew",ranks:[14908,15020,17191],requires:[]},401:{id:401,row:0,col:2,icon:"spell_holy_sealofsalvation",ranks:[14889,15008,15009,15010,15011],requires:[]},411:{id:411,row:1,col:1,icon:"spell_holy_spellwarding",ranks:[27900,27901,27902,27903,27904],requires:[]},1181:{id:1181,row:1,col:2,icon:"spell_holy_sealofwrath",ranks:[18530,18531,18533,18534,18535],requires:[]},442:{id:442,row:2,col:0,icon:"spell_holy_holynova",ranks:[15237],requires:[]},1636:{id:1636,row:2,col:1,icon:"spell_holy_blessedrecovery",ranks:[27811,27815,27816],requires:[]},361:{id:361,row:2,col:3,icon:"spell_holy_layonhands",ranks:[14892,15362,15363],requires:[]},1635:{id:1635,row:3,col:0,icon:"spell_holy_purify",ranks:[27789,27790],requires:[]},408:{id:408,row:3,col:1,icon:"spell_holy_heal02",ranks:[14912,15013,15014],requires:[]},403:{id:403,row:3,col:2,icon:"spell_holy_searinglightpriest",ranks:[14909,15017],requires:[{id:1181,qty:5}]},413:{id:413,row:4,col:0,icon:"spell_holy_prayerofhealing02",ranks:[14911,15018],requires:[]},1561:{id:1561,row:4,col:1,icon:"inv_enchant_essenceeternallarge",ranks:[20711],requires:[]},402:{id:402,row:4,col:2,icon:"spell_holy_spiritualguidence",ranks:[14901,15028,15029,15030,15031],requires:[]},404:{id:404,row:5,col:2,icon:"spell_nature_moonglow",ranks:[14898,15349,15354,15355,15356],requires:[]},1637:{id:1637,row:6,col:1,icon:"spell_holy_summonlightwell",ranks:[724],requires:[{id:1561,qty:1}]}},203:{465:{id:465,row:0,col:1,icon:"spell_shadow_requiem",ranks:[15270,15335,15336,15337,15338],requires:[]},464:{id:464,row:0,col:2,icon:"spell_shadow_gathershadows",ranks:[15268,15323,15324,15325,15326],requires:[]},466:{id:466,row:1,col:0,icon:"spell_shadow_shadowward",ranks:[15318,15272,15320],requires:[]},482:{id:482,row:1,col:1,icon:"spell_shadow_shadowwordpain",ranks:[15275,15317],requires:[]},463:{id:463,row:1,col:2,icon:"spell_shadow_burningspirit",ranks:[15260,15327,15328,15329,15330],requires:[]},542:{id:542,row:2,col:0,icon:"spell_shadow_psychicscream",ranks:[15392,15448],requires:[]},481:{id:481,row:2,col:1,icon:"spell_shadow_unholyfrenzy",ranks:[15273,15312,15313,15314,15316],requires:[]},501:{id:501,row:2,col:2,icon:"spell_shadow_siphonmana",ranks:[15407],requires:[]},483:{id:483,row:3,col:1,icon:"spell_magic_lesserinvisibilty",ranks:[15274,15311],requires:[]},881:{id:881,row:3,col:2,icon:"spell_shadow_chilltouch",ranks:[17322,17323,17325],requires:[]},461:{id:461,row:3,col:3,icon:"spell_shadow_blackplague",ranks:[15257,15331,15332,15333,15334],requires:[]},541:{id:541,row:4,col:0,icon:"spell_shadow_impphaseshift",ranks:[15487],requires:[{id:542,qty:2}]},484:{id:484,row:4,col:1,icon:"spell_shadow_unsummonbuilding",ranks:[15286],requires:[]},1638:{id:1638,row:4,col:2,icon:"spell_shadow_improvedvampiricembrace",ranks:[27839,27840],requires:[{id:484,qty:1}]},462:{id:462,row:5,col:2,icon:"spell_shadow_twilight",ranks:[15259,15307,15308,15309,15310],requires:[]},521:{id:521,row:6,col:1,icon:"spell_shadow_shadowform",ranks:[15473],requires:[{id:484,qty:1}]}},261:{564:{id:564,row:0,col:1,icon:"spell_nature_wispsplode",ranks:[16039,16109,16110,16111,16112],requires:[]},563:{id:563,row:0,col:2,icon:"spell_fire_fireball",ranks:[16035,16105,16106,16107,16108],requires:[]},572:{id:572,row:1,col:0,icon:"spell_nature_stoneclawtotem",ranks:[16043,16130],requires:[]},1640:{id:1640,row:1,col:1,icon:"spell_nature_spiritarmor",ranks:[28996,28997,28998],requires:[]},561:{id:561,row:1,col:2,icon:"spell_fire_immolation",ranks:[16038,16160,16161],requires:[]},574:{id:574,row:2,col:0,icon:"spell_shadow_manaburn",ranks:[16164],requires:[]},575:{id:575,row:2,col:1,icon:"spell_frost_frostward",ranks:[16040,16113,16114,16115,16116],requires:[]},562:{id:562,row:2,col:2,icon:"spell_nature_callstorm",ranks:[16041,16117,16118,16119,16120],requires:[]},567:{id:567,row:3,col:0,icon:"spell_fire_sealoffire",ranks:[16086,16544],requires:[]},1642:{id:1642,row:3,col:1,icon:"spell_nature_eyeofthestorm",ranks:[29062,29064,29065],requires:[]},1645:{id:1645,row:3,col:3,icon:"spell_fire_elementaldevastation",ranks:[30160,29179,29180],requires:[]},1641:{id:1641,row:4,col:0,icon:"spell_nature_stormreach",ranks:[28999,29e3],requires:[]},565:{id:565,row:4,col:1,icon:"spell_fire_volcano",ranks:[16089],requires:[]},721:{id:721,row:5,col:2,icon:"spell_lightning_lightningbolt01",ranks:[16578,16579,16580,16581,16582],requires:[{id:562,qty:5}]},573:{id:573,row:6,col:1,icon:"spell_nature_wispheal",ranks:[16166],requires:[{id:565,qty:1}]}},262:{586:{id:586,row:0,col:1,icon:"spell_nature_magicimmunity",ranks:[16182,16226,16227,16228,16229],requires:[]},593:{id:593,row:0,col:2,icon:"spell_frost_manarecharge",ranks:[16179,16214,16215,16216,16217],requires:[]},589:{id:589,row:1,col:0,icon:"spell_nature_reincarnation",ranks:[16184,16209],requires:[]},581:{id:581,row:1,col:1,icon:"spell_nature_undyingstrength",ranks:[16176,16235,16240],requires:[]},595:{id:595,row:1,col:2,icon:"spell_nature_moonglow",ranks:[16173,16222,16223,16224,16225],requires:[]},583:{id:583,row:2,col:0,icon:"spell_frost_stun",ranks:[16180,16196,16198],requires:[]},587:{id:587,row:2,col:1,icon:"spell_nature_healingwavelesser",ranks:[16181,16230,16232,16233,16234],requires:[]},582:{id:582,row:2,col:2,icon:"spell_nature_nullward",ranks:[16189],requires:[]},1646:{id:1646,row:2,col:3,icon:"spell_nature_healingtouch",ranks:[29187,29189,29191],requires:[]},588:{id:588,row:3,col:1,icon:"spell_nature_manaregentotem",ranks:[16187,16205,16206,16207,16208],requires:[]},594:{id:594,row:3,col:2,icon:"spell_nature_tranquility",ranks:[16194,16218,16219,16220,16221],requires:[]},1648:{id:1648,row:4,col:0,icon:"spell_nature_healingway",ranks:[29206,29205,29202],requires:[]},591:{id:591,row:4,col:2,icon:"spell_nature_ravenform",ranks:[16188],requires:[]},592:{id:592,row:5,col:2,icon:"spell_frost_wizardmark",ranks:[16178,16210,16211,16212,16213],requires:[]},590:{id:590,row:6,col:1,icon:"spell_frost_summonwaterelemental",ranks:[16190],requires:[{id:588,qty:5}]}},263:{614:{id:614,row:0,col:1,icon:"spell_shadow_grimward",ranks:[17485,17486,17487,17488,17489],requires:[]},612:{id:612,row:0,col:2,icon:"inv_shield_06",ranks:[16253,16298,16299,16300,16301],requires:[]},609:{id:609,row:1,col:0,icon:"spell_nature_stoneskintotem",ranks:[16258,16293],requires:[]},613:{id:613,row:1,col:1,icon:"ability_thunderbolt",ranks:[16255,16302,16303,16304,16305],requires:[]},605:{id:605,row:1,col:2,icon:"spell_nature_spiritwolf",ranks:[16262,16287],requires:[]},607:{id:607,row:1,col:3,icon:"spell_nature_lightningshield",ranks:[16261,16290,16291],requires:[]},610:{id:610,row:2,col:0,icon:"spell_nature_earthbindtotem",ranks:[16259,16295],requires:[]},617:{id:617,row:2,col:2,icon:"inv_axe_10",ranks:[16269],requires:[]},601:{id:601,row:2,col:3,icon:"spell_nature_mirrorimage",ranks:[16254,16271,16272,16273,16274],requires:[]},602:{id:602,row:3,col:1,icon:"ability_ghoulfrenzy",ranks:[16256,16281,16282,16283,16284],requires:[{id:613,qty:5}]},615:{id:615,row:3,col:2,icon:"spell_holy_devotion",ranks:[16252,16306,16307,16308,16309],requires:[]},1647:{id:1647,row:4,col:0,icon:"spell_fire_enchantweapon",ranks:[29192,29193],requires:[]},611:{id:611,row:4,col:1,icon:"spell_fire_flametounge",ranks:[16266,29079,29080],requires:[]},616:{id:616,row:4,col:2,icon:"ability_parry",ranks:[16268],requires:[]},1643:{id:1643,row:5,col:2,icon:"ability_hunter_swiftstrike",ranks:[29082,29084,29086,29087,29088],requires:[]},901:{id:901,row:6,col:1,icon:"spell_holy_sealofmight",ranks:[17364],requires:[{id:611,qty:3}]}},281:{796:{id:796,row:0,col:1,icon:"ability_hunter_pet_hyena",ranks:[16934,16935,16936,16937,16938],requires:[]},795:{id:795,row:0,col:2,icon:"ability_druid_demoralizingroar",ranks:[16858,16859,16860,16861,16862],requires:[]},799:{id:799,row:1,col:0,icon:"ability_ambush",ranks:[16947,16948,16949,16950,16951],requires:[]},797:{id:797,row:1,col:1,icon:"ability_druid_bash",ranks:[16940,16941],requires:[]},794:{id:794,row:1,col:2,icon:"inv_misc_pelt_bear_03",ranks:[16929,16930,16931,16932,16933],requires:[]},807:{id:807,row:2,col:0,icon:"spell_nature_spiritwolf",ranks:[17002,24866],requires:[]},804:{id:804,row:2,col:1,icon:"ability_hunter_pet_bear",ranks:[16979],requires:[]},798:{id:798,row:2,col:2,icon:"inv_misc_monsterclaw_04",ranks:[16942,16943,16944],requires:[]},802:{id:802,row:3,col:0,icon:"spell_shadow_vampiricaura",ranks:[16966,16968],requires:[]},803:{id:803,row:3,col:1,icon:"ability_hunter_pet_cat",ranks:[16972,16974,16975],requires:[]},800:{id:800,row:3,col:2,icon:"ability_ghoulfrenzy",ranks:[16952,16954],requires:[{id:798,qty:3}]},801:{id:801,row:3,col:3,icon:"ability_racial_cannibalize",ranks:[16958,16961],requires:[{id:798,qty:3}]},805:{id:805,row:4,col:0,icon:"ability_druid_ravage",ranks:[16998,16999],requires:[]},1162:{id:1162,row:4,col:2,icon:"spell_nature_faeriefire",ranks:[16857],requires:[]},808:{id:808,row:5,col:1,icon:"spell_holy_blessingofagility",ranks:[17003,17004,17005,17006,24894],requires:[{id:803,qty:3}]},809:{id:809,row:6,col:1,icon:"spell_nature_unyeildingstamina",ranks:[17007],requires:[]}},282:{821:{id:821,row:0,col:1,icon:"spell_nature_regeneration",ranks:[17050,17051,17053,17054,17055],requires:[]},822:{id:822,row:0,col:2,icon:"spell_holy_blessingofstamina",ranks:[17056,17058,17059,17060,17061],requires:[]},824:{id:824,row:1,col:0,icon:"spell_nature_healingtouch",ranks:[17069,17070,17071,17072,17073],requires:[]},823:{id:823,row:1,col:1,icon:"spell_nature_healingwavegreater",ranks:[17063,17065,17066,17067,17068],requires:[]},826:{id:826,row:1,col:2,icon:"ability_druid_enrage",ranks:[17079,17082],requires:[]},829:{id:829,row:2,col:1,icon:"spell_frost_windwalkon",ranks:[17106,17107,17108],requires:[]},827:{id:827,row:2,col:2,icon:"spell_nature_insectswarm",ranks:[5570],requires:[]},841:{id:841,row:2,col:3,icon:"ability_eyeoftheowl",ranks:[17118,17119,17120,17121,17122],requires:[]},843:{id:843,row:3,col:1,icon:"spell_holy_elunesgrace",ranks:[24968,24969,24970,24971,24972],requires:[]},830:{id:830,row:3,col:3,icon:"spell_nature_rejuvenation",ranks:[17111,17112,17113],requires:[]},831:{id:831,row:4,col:0,icon:"spell_nature_ravenform",ranks:[17116],requires:[{id:824,qty:5}]},828:{id:828,row:4,col:2,icon:"spell_nature_protectionformnature",ranks:[17104,24943,24944,24945,24946],requires:[{id:827,qty:1}]},842:{id:842,row:4,col:3,icon:"spell_nature_tranquility",ranks:[17123,17124],requires:[]},825:{id:825,row:5,col:2,icon:"spell_nature_resistnature",ranks:[17074,17075,17076,17077,17078],requires:[]},844:{id:844,row:6,col:1,icon:"inv_relics_idolofrejuvenation",ranks:[18562],requires:[{id:843,qty:5}]}},283:{762:{id:762,row:0,col:0,icon:"spell_nature_abolishmagic",ranks:[16814,16815,16816,16817,16818],requires:[]},761:{id:761,row:0,col:1,icon:"spell_nature_natureswrath",ranks:[16689],requires:[]},921:{id:921,row:0,col:2,icon:"spell_nature_natureswrath",ranks:[17245,17247,17248,17249],requires:[{id:761,qty:1}]},787:{id:787,row:1,col:0,icon:"spell_nature_stranglevines",ranks:[16918,16919,16920],requires:[]},763:{id:763,row:1,col:1,icon:"spell_nature_starfall",ranks:[16821,16822,16823,16824,16825],requires:[]},791:{id:791,row:1,col:2,icon:"inv_staff_01",ranks:[16902,16903,16904,16905,16906],requires:[]},781:{id:781,row:1,col:3,icon:"spell_nature_wispsplode",ranks:[16833,16834,16835],requires:[]},782:{id:782,row:2,col:0,icon:"spell_nature_thorns",ranks:[16836,16839,16840],requires:[]},788:{id:788,row:2,col:2,icon:"spell_nature_crystalball",ranks:[16864],requires:[{id:791,qty:5}]},764:{id:764,row:2,col:3,icon:"spell_nature_naturetouchgrow",ranks:[16819,16820],requires:[]},792:{id:792,row:3,col:1,icon:"spell_nature_purge",ranks:[16909,16910,16911,16912,16913],requires:[{id:763,qty:5}]},784:{id:784,row:3,col:2,icon:"spell_arcane_starfire",ranks:[16850,16923,16924,16925,16926],requires:[]},789:{id:789,row:4,col:1,icon:"spell_nature_naturesblessing",ranks:[16880],requires:[]},783:{id:783,row:4,col:2,icon:"spell_nature_sentinal",ranks:[16845,16846,16847],requires:[]},790:{id:790,row:5,col:1,icon:"spell_nature_moonglow",ranks:[16896,16897,16899,16900,16901],requires:[{id:789,qty:1}]},793:{id:793,row:6,col:1,icon:"spell_nature_forceofnature",ranks:[24858],requires:[]}},301:{944:{id:944,row:0,col:1,icon:"spell_shadow_shadowbolt",ranks:[17793,17796,17801,17802,17803],requires:[]},941:{id:941,row:0,col:2,icon:"spell_fire_windsofwoe",ranks:[17778,17779,17780,17781,17782],requires:[]},943:{id:943,row:1,col:1,icon:"spell_shadow_deathpact",ranks:[17788,17789,17790,17791,17792],requires:[]},982:{id:982,row:1,col:2,icon:"spell_fire_fire",ranks:[18119,18120,18121,18122,18123],requires:[]},983:{id:983,row:2,col:0,icon:"spell_fire_firebolt",ranks:[18126,18127],requires:[]},984:{id:984,row:2,col:1,icon:"spell_shadow_curse",ranks:[18128,18129],requires:[]},981:{id:981,row:2,col:2,icon:"spell_fire_flameshock",ranks:[18130,18131,18132,18133,18134],requires:[]},963:{id:963,row:2,col:3,icon:"spell_shadow_scourgebuild",ranks:[17877],requires:[]},985:{id:985,row:3,col:0,icon:"spell_fire_lavaspawn",ranks:[18135,18136],requires:[]},964:{id:964,row:3,col:1,icon:"spell_shadow_corpseexplode",ranks:[17917,17918],requires:[]},965:{id:965,row:3,col:3,icon:"spell_fire_soulburn",ranks:[17927,17929,17930,17931,17932],requires:[]},986:{id:986,row:4,col:0,icon:"spell_fire_volcano",ranks:[18096,18073],requires:[{id:985,qty:2}]},961:{id:961,row:4,col:1,icon:"spell_fire_immolation",ranks:[17815,17833,17834,17835,17836],requires:[]},967:{id:967,row:4,col:2,icon:"spell_shadow_shadowwordpain",ranks:[17959],requires:[{id:981,qty:5}]},966:{id:966,row:5,col:2,icon:"spell_fire_selfdestruct",ranks:[17954,17955,17956,17957,17958],requires:[]},968:{id:968,row:6,col:1,icon:"spell_fire_fireball",ranks:[17962],requires:[{id:961,qty:5}]}},302:{1005:{id:1005,row:0,col:1,icon:"spell_shadow_unsummonbuilding",ranks:[18174,18175,18176,18177,18178],requires:[]},1003:{id:1003,row:0,col:2,icon:"spell_shadow_abominationexplosion",ranks:[17810,17811,17812,17813,17814],requires:[]},1006:{id:1006,row:1,col:0,icon:"spell_shadow_curseofmannoroth",ranks:[18179,18180,18181],requires:[]},1101:{id:1101,row:1,col:1,icon:"spell_shadow_haunting",ranks:[18213,18372],requires:[]},1007:{id:1007,row:1,col:2,icon:"spell_shadow_burningspirit",ranks:[18182,18183],requires:[]},1004:{id:1004,row:1,col:3,icon:"spell_shadow_lifedrain02",ranks:[17804,17805,17806,17807,17808],requires:[]},1284:{id:1284,row:2,col:0,icon:"spell_shadow_curseofsargeras",ranks:[18827,18829,18830],requires:[]},1001:{id:1001,row:2,col:1,icon:"spell_shadow_fingerofdeath",ranks:[17783,17784,17785,17786,17787],requires:[]},1061:{id:1061,row:2,col:2,icon:"spell_shadow_contagion",ranks:[18288],requires:[]},1021:{id:1021,row:3,col:0,icon:"spell_shadow_callofbone",ranks:[18218,18219],requires:[]},1002:{id:1002,row:3,col:1,icon:"spell_shadow_twilight",ranks:[18094,18095],requires:[]},1121:{id:1121,row:3,col:3,icon:"spell_shadow_siphonmana",ranks:[17864,18393],requires:[]},1041:{id:1041,row:4,col:1,icon:"spell_shadow_requiem",ranks:[18265],requires:[]},1081:{id:1081,row:4,col:2,icon:"spell_shadow_grimward",ranks:[18223],requires:[{id:1061,qty:1}]},1082:{id:1082,row:4,col:3,icon:"spell_shadow_grimward",ranks:[18310,18311,18312,18313],requires:[{id:1081,qty:1}]},1042:{id:1042,row:5,col:1,icon:"spell_shadow_shadetruesight",ranks:[18271,18272,18273,18274,18275],requires:[{id:1041,qty:1}]},1022:{id:1022,row:6,col:1,icon:"spell_shadow_darkritual",ranks:[18220],requires:[]}},303:{1221:{id:1221,row:0,col:0,icon:"inv_stone_04",ranks:[18692,18693],requires:[]},1222:{id:1222,row:0,col:1,icon:"spell_shadow_summonimp",ranks:[18694,18695,18696],requires:[]},1223:{id:1223,row:0,col:2,icon:"spell_shadow_metamorphosis",ranks:[18697,18698,18699,18700,18701],requires:[]},1224:{id:1224,row:1,col:0,icon:"spell_shadow_lifedrain",ranks:[18703,18704],requires:[]},1225:{id:1225,row:1,col:1,icon:"spell_shadow_summonvoidwalker",ranks:[18705,18706,18707],requires:[]},1242:{id:1242,row:1,col:2,icon:"spell_holy_magicalsentry",ranks:[18731,18743,18744,18745,18746],requires:[]},1243:{id:1243,row:2,col:0,icon:"spell_shadow_summonsuccubus",ranks:[18754,18755,18756],requires:[]},1226:{id:1226,row:2,col:1,icon:"spell_nature_removecurse",ranks:[18708],requires:[]},1241:{id:1241,row:2,col:2,icon:"spell_shadow_antishadow",ranks:[18748,18749,18750,18751,18752],requires:[]},1227:{id:1227,row:3,col:1,icon:"spell_shadow_impphaseshift",ranks:[18709,18710],requires:[{id:1226,qty:1}]},1262:{id:1262,row:3,col:2,icon:"spell_shadow_shadowworddominate",ranks:[18769,18770,18771,18772,18773],requires:[]},1283:{id:1283,row:4,col:0,icon:"spell_shadow_enslavedemon",ranks:[18821,18822,18823,18824,18825],requires:[]},1281:{id:1281,row:4,col:1,icon:"spell_shadow_psychicscream",ranks:[18788],requires:[]},1261:{id:1261,row:4,col:3,icon:"inv_ammo_firetar",ranks:[18767,18768],requires:[]},1244:{id:1244,row:5,col:2,icon:"spell_shadow_shadowpact",ranks:[23785,23822,23823,23824,23825],requires:[{id:1262,qty:5}]},1282:{id:1282,row:6,col:1,icon:"spell_shadow_gathershadows",ranks:[19028],requires:[{id:1281,qty:1}]},1263:{id:1263,row:6,col:2,icon:"inv_misc_gem_sapphire_01",ranks:[18774,18775],requires:[]}},361:{1382:{id:1382,row:0,col:1,icon:"spell_nature_ravenform",ranks:[19552,19553,19554,19555,19556],requires:[]},1389:{id:1389,row:0,col:2,icon:"spell_nature_reincarnation",ranks:[19583,19584,19585,19586,19587],requires:[]},1624:{id:1624,row:1,col:0,icon:"ability_eyeoftheowl",ranks:[19557,19558],requires:[]},1381:{id:1381,row:1,col:1,icon:"ability_hunter_aspectofthemonkey",ranks:[19549,19550,19551,24386,24387],requires:[]},1395:{id:1395,row:1,col:2,icon:"inv_misc_pelt_bear_03",ranks:[19609,19610,19612],requires:[]},1625:{id:1625,row:1,col:3,icon:"ability_hunter_beastsoothe",ranks:[24443,19575],requires:[]},1384:{id:1384,row:2,col:0,icon:"ability_mount_jungletiger",ranks:[19559,19560],requires:[]},1391:{id:1391,row:2,col:1,icon:"ability_druid_dash",ranks:[19596],requires:[]},1396:{id:1396,row:2,col:2,icon:"ability_bullrush",ranks:[19616,19617,19618,19619,19620],requires:[]},1385:{id:1385,row:3,col:1,icon:"ability_hunter_mendpet",ranks:[19572,19573],requires:[]},1393:{id:1393,row:3,col:2,icon:"inv_misc_monsterclaw_04",ranks:[19598,19599,19600,19601,19602],requires:[]},1388:{id:1388,row:4,col:0,icon:"ability_druid_demoralizingroar",ranks:[19578,20895],requires:[]},1387:{id:1387,row:4,col:1,icon:"ability_devour",ranks:[19577],requires:[]},1390:{id:1390,row:4,col:3,icon:"spell_nature_abolishmagic",ranks:[19590,19592],requires:[]},1397:{id:1397,row:5,col:2,icon:"inv_misc_monsterclaw_03",ranks:[19621,19622,19623,19624,19625],requires:[{id:1393,qty:5}]},1386:{id:1386,row:6,col:1,icon:"ability_druid_ferociousbite",ranks:[19574],requires:[{id:1387,qty:1}]}},362:{1623:{id:1623,row:0,col:0,icon:"inv_misc_head_dragon_black",ranks:[24293,24294,24295],requires:[]},1301:{id:1301,row:0,col:1,icon:"spell_holy_prayerofhealing",ranks:[19151,19152,19153],requires:[]},1311:{id:1311,row:0,col:2,icon:"ability_parry",ranks:[19295,19297,19298,19301,19300],requires:[]},1304:{id:1304,row:1,col:0,icon:"spell_nature_stranglevines",ranks:[19184,19387,19388,19389,19390],requires:[]},1621:{id:1621,row:1,col:1,icon:"ability_racial_bloodrage",ranks:[19159,19160],requires:[]},1305:{id:1305,row:1,col:2,icon:"ability_rogue_trip",ranks:[19228,19232,19233,19234,19235],requires:[]},1306:{id:1306,row:2,col:0,icon:"spell_nature_timestop",ranks:[19239,19245],requires:[]},1622:{id:1622,row:2,col:1,icon:"spell_shadow_twilight",ranks:[19255,19256,19257,19258,19259],requires:[]},1308:{id:1308,row:2,col:2,icon:"ability_whirlwind",ranks:[19263],requires:[]},1322:{id:1322,row:3,col:0,icon:"ability_ensnare",ranks:[19376,19377],requires:[]},1310:{id:1310,row:3,col:1,icon:"ability_kick",ranks:[19290,19294,24283],requires:[]},1309:{id:1309,row:3,col:3,icon:"ability_rogue_feigndeath",ranks:[19286,19287],requires:[]},1321:{id:1321,row:4,col:1,icon:"spell_holy_blessingofstamina",ranks:[19370,19371,19373],requires:[]},1312:{id:1312,row:4,col:2,icon:"ability_warrior_challange",ranks:[19306],requires:[{id:1308,qty:1}]},1303:{id:1303,row:5,col:2,icon:"spell_nature_invisibilty",ranks:[19168,19180,19181,24296,24297],requires:[]},1325:{id:1325,row:6,col:1,icon:"inv_spear_02",ranks:[19386],requires:[{id:1321,qty:3}]}},363:{1341:{id:1341,row:0,col:1,icon:"spell_frost_stun",ranks:[19407,19412,19413,19414,19415],requires:[]},1342:{id:1342,row:0,col:2,icon:"spell_frost_wizardmark",ranks:[19416,19417,19418,19419,19420],requires:[]},1343:{id:1343,row:1,col:1,icon:"ability_hunter_snipershot",ranks:[19421,19422,19423,19424,19425],requires:[]},1344:{id:1344,row:1,col:2,icon:"ability_searingarrow",ranks:[19426,19427,19429,19430,19431],requires:[]},1345:{id:1345,row:2,col:0,icon:"inv_spear_07",ranks:[19434],requires:[]},1346:{id:1346,row:2,col:1,icon:"ability_impalingbolt",ranks:[19454,19455,19456,19457,19458],requires:[]},1352:{id:1352,row:2,col:3,icon:"ability_townwatch",ranks:[19498,19499,19500],requires:[]},1348:{id:1348,row:3,col:1,icon:"ability_hunter_quickshot",ranks:[19464,19465,19466,19467,19468],requires:[]},1349:{id:1349,row:3,col:2,icon:"ability_piercedamage",ranks:[19485,19487,19488,19489,19490],requires:[{id:1344,qty:5}]},1353:{id:1353,row:4,col:0,icon:"ability_golemstormbolt",ranks:[19503],requires:[]},1347:{id:1347,row:4,col:1,icon:"ability_upgrademoonglaive",ranks:[19461,19462,24691],requires:[]},1351:{id:1351,row:4,col:2,icon:"ability_hunter_criticalshot",ranks:[19491,19493,19494],requires:[]},1362:{id:1362,row:5,col:2,icon:"inv_weapon_rifle_06",ranks:[19507,19508,19509,19510,19511],requires:[]},1361:{id:1361,row:6,col:1,icon:"ability_trueshot",ranks:[19506],requires:[{id:1347,qty:3}]}},381:{1401:{id:1401,row:0,col:1,icon:"spell_holy_fistofjustice",ranks:[20042,20045,20046,20047,20048],requires:[]},1407:{id:1407,row:0,col:2,icon:"spell_frost_windwalkon",ranks:[20101,20102,20103,20104,20105],requires:[]},1631:{id:1631,row:1,col:0,icon:"spell_holy_righteousfury",ranks:[25956,25957],requires:[]},1464:{id:1464,row:1,col:1,icon:"spell_holy_holysmite",ranks:[20335,20336,20337],requires:[]},1403:{id:1403,row:1,col:2,icon:"ability_parry",ranks:[20060,20061,20062,20063,20064],requires:[]},1633:{id:1633,row:2,col:0,icon:"spell_holy_vindication",ranks:[9452,26016,26021],requires:[]},1411:{id:1411,row:2,col:1,icon:"spell_holy_retributionaura",ranks:[20117,20118,20119,20120,20121],requires:[]},1481:{id:1481,row:2,col:2,icon:"ability_warrior_innerrage",ranks:[20375],requires:[]},1634:{id:1634,row:2,col:3,icon:"spell_holy_persuitofjustice",ranks:[26022,26023],requires:[]},1632:{id:1632,row:3,col:0,icon:"spell_holy_eyeforaneye",ranks:[9799,25988],requires:[]},1405:{id:1405,row:3,col:2,icon:"spell_holy_auraoflight",ranks:[20091,20092],requires:[]},1410:{id:1410,row:4,col:0,icon:"inv_hammer_04",ranks:[20111,20112,20113],requires:[]},1409:{id:1409,row:4,col:2,icon:"spell_holy_mindvision",ranks:[20218],requires:[]},1402:{id:1402,row:5,col:1,icon:"ability_racial_avatar",ranks:[20049,20056,20057,20058,20059],requires:[{id:1411,qty:5}]},1441:{id:1441,row:6,col:1,icon:"spell_holy_prayerofhealing",ranks:[20066],requires:[]}},382:{1450:{id:1450,row:0,col:1,icon:"ability_golemthunderclap",ranks:[20262,20263,20264,20265,20266],requires:[]},1449:{id:1449,row:0,col:2,icon:"spell_nature_sleep",ranks:[20257,20258,20259,20260,20261],requires:[]},1432:{id:1432,row:1,col:1,icon:"spell_arcane_blink",ranks:[20205,20206,20207,20209,20208],requires:[]},1463:{id:1463,row:1,col:2,icon:"ability_thunderbolt",ranks:[20224,20225,20330,20331,20332],requires:[]},1444:{id:1444,row:2,col:0,icon:"spell_holy_holybolt",ranks:[20237,20238,20239],requires:[]},1435:{id:1435,row:2,col:1,icon:"spell_holy_innerfire",ranks:[26573],requires:[]},1443:{id:1443,row:2,col:2,icon:"spell_holy_layonhands",ranks:[20234,20235],requires:[]},1628:{id:1628,row:2,col:3,icon:"spell_holy_unyieldingfaith",ranks:[9453,25836],requires:[]},1461:{id:1461,row:3,col:1,icon:"spell_holy_greaterheal",ranks:[20210,20212,20213,20214,20215],requires:[]},1446:{id:1446,row:3,col:2,icon:"spell_holy_sealofwisdom",ranks:[20244,20245],requires:[]},1433:{id:1433,row:4,col:1,icon:"spell_holy_heal",ranks:[20216],requires:[{id:1461,qty:5}]},1465:{id:1465,row:4,col:2,icon:"spell_holy_healingaura",ranks:[20359,20360,20361],requires:[]},1627:{id:1627,row:5,col:2,icon:"spell_holy_power",ranks:[5923,5924,5925,5926,25829],requires:[]},1502:{id:1502,row:6,col:1,icon:"spell_holy_searinglight",ranks:[20473],requires:[{id:1433,qty:1}]}},383:{1422:{id:1422,row:0,col:1,icon:"spell_holy_devotionaura",ranks:[20138,20139,20140,20141,20142],requires:[]},1421:{id:1421,row:0,col:2,icon:"ability_defend",ranks:[20127,20130,20135,20136,20137],requires:[]},1630:{id:1630,row:1,col:0,icon:"ability_rogue_ambush",ranks:[20189,20192,20193],requires:[]},1425:{id:1425,row:1,col:1,icon:"spell_holy_sealofprotection",ranks:[20174,20175],requires:[]},1423:{id:1423,row:1,col:3,icon:"spell_holy_devotion",ranks:[20143,20144,20145,20146,20147],requires:[]},1442:{id:1442,row:2,col:0,icon:"spell_magic_magearmor",ranks:[20217],requires:[]},1501:{id:1501,row:2,col:1,icon:"spell_holy_sealoffury",ranks:[20468,20469,20470],requires:[]},1424:{id:1424,row:2,col:2,icon:"inv_shield_06",ranks:[20148,20149,20150],requires:[{id:1421,qty:5}]},1629:{id:1629,row:2,col:3,icon:"spell_magic_lesserinvisibilty",ranks:[20096,20097,20098,20099,20100],requires:[]},1521:{id:1521,row:3,col:1,icon:"spell_holy_sealofmight",ranks:[20487,20488,20489],requires:[]},1626:{id:1626,row:3,col:2,icon:"spell_holy_mindsooth",ranks:[20254,20255,20256],requires:[]},1431:{id:1431,row:4,col:1,icon:"spell_nature_lightningshield",ranks:[20911],requires:[]},1426:{id:1426,row:4,col:2,icon:"spell_holy_blessingofstrength",ranks:[20177,20179,20181,20180,20182],requires:[]},1429:{id:1429,row:5,col:2,icon:"inv_sword_20",ranks:[20196,20197,20198,20199,20200],requires:[]},1430:{id:1430,row:6,col:1,icon:"spell_holy_blessingofprotection",ranks:[20925],requires:[{id:1431,qty:1}]}}},m={},y={},f={};for(var g in h)for(var b in h[g])m[b]=h[g][b],y[g]=Object.values(h[g]),f[b]=parseInt(g,10);var v=i(15),j=i(18),E=[{id:1,name:"Warrior",icon:"class_warrior",specs:[161,164,163]},{id:2,name:"Paladin",icon:"class_paladin",specs:[382,383,381]},{id:3,name:"Hunter",icon:"class_hunter",specs:[361,363,362]},{id:4,name:"Rogue",icon:"class_rogue",specs:[182,181,183]},{id:5,name:"Priest",icon:"class_priest",specs:[201,202,203]},{id:7,name:"Shaman",icon:"class_shaman",specs:[261,263,262]},{id:8,name:"Mage",icon:"class_mage",specs:[81,41,61]},{id:9,name:"Warlock",icon:"class_warlock",specs:[302,303,301]},{id:11,name:"Druid",icon:"class_druid",specs:[283,281,282]}],x=(E.reduce(function(r,e){return Object(j.a)({},r,Object(v.a)({},e.id,e))},{}),E.reduce(function(r,e){return Object(j.a)({},r,Object(v.a)({},e.name.toLowerCase(),e))},{})),O=51,C=function(r,e){return r.row===e.row?r.col-e.col:r.row-e.row};function R(r,e){return Object.values(h[r]).reduce(function(r,i){return r+e.get(i.id,0)},0)}function T(r){return Math.max(0,O-r.reduce(function(r,e){return r+e},0))}function N(r,e){return 0===r.requires.length||r.requires.reduce(function(r,i){return!!r&&e.get(i.id,0)>=i.qty},!0)}var P=function(r,e){return!(r.get(e.id,0)>=e.ranks.length)&&(0!==T(r)&&(!(e.requires.length>0&&!N(e,r))&&!(5*e.row>R(f[e.id],r))))},z=function(r,e,i){return 1===i?function(r,e){var i=r.get(e.id,0);return P(r,e)?r.set(e.id,i+1):r}(r,e):function(r,e){var i=r.get(e.id,0),o=f[e.id];if(0===i)return console.warn("no points to reduce"),r;var s=!1,n=0,l={};r.forEach(function(r,i){var a=h[o][i];if(a&&r>0){s=s||a.requires.some(function(r){return r.id===e.id}),a.row>n&&console.info("new highest row:",a),n=a.row>n?a.row:n;for(var c=a.row;c<7;c++)l[c]=(l[c]||0)+r}});var a=l[n-1],c=5*n;return e.rowd.ranks.length)break;u>0&&(console.log("Spent ".concat(u," in ").concat(d.id)),o=o.set(d.id,u))}}return o}function S(r,e){for(;r[r.length-1]===e;)r=r.slice(0,-1);return r}var I=function(r){var e=r.talent,i=r.specId,o=r.knownTalents,n=r.availablePoints,l=o.get(e.id,0),a=l>0||n>0,c=r.disabled||!a||!function(r,e,i){if(!N(r,i))return!1;var o=R(e,i);return 5*r.row<=o}(e,i,o),t=p()("talent",{"talent--disabled":!!c,"talent--available":!c&&l=e.ranks.length||l>0&&0===n}),d=p()("point-label",{"point-label--enabled":!c});return s.a.createElement("div",{className:t,title:e.ranks[0].toString(),"data-row":e.row,"data-col":e.col,onClick:c?function(){}:function(){return r.onClick(e.id)},onContextMenu:function(i){return r.onRightClick&&r.onRightClick(e.id),i.preventDefault(),!1}},s.a.createElement("div",{className:"talent__status"}),s.a.createElement(k,{name:e.icon,size:"medium"}),a&&!c&&s.a.createElement("div",{className:d},l,"/",e.ranks.length))};I.defaultProps={onClick:function(){},onRightClick:function(){}},I.whyDidYouRender=!0;i(35);var L=function(r){var e=r.from,i=r.to,o=r.active,n=void 0!==o&&o,l=i.row===e.row?Math.abs(i.col-e.col):i.row-e.row,a={"data-col":e.col,"data-row":e.row,"data-length":l},c=p()("arrow",{"arrow--active":n,"arrow--down":i.row>e.row,"arrow--right":i.row===e.row&&i.col>e.col,"arrow--left":i.row===e.row&&i.col0}).map(function(r){return s.a.createElement(L,{key:r.id,from:m[r.requires[0].id],to:r,active:n.get(r.id,0)>0||P(n,r)})});return s.a.createElement("div",{className:"tree"},s.a.createElement("div",{className:"tree__header"},s.a.createElement("h3",null,q[e]," (",R(e,n),")")),s.a.createElement("div",{className:"tree__body",style:u},c.map(function(r){return s.a.createElement(I,{key:r.id,specId:e,talent:r,availablePoints:l,knownTalents:n,onClick:t,onRightClick:d})}),_))};M.whyDidYouRender=!0;var A=Object(_.a)(),U=function(r){function e(){var r,i;Object(a.a)(this,e);for(var o=arguments.length,s=new Array(o),n=0;n0?"-":"",i+=S(y[n].sort(C).map(function(e){return r.get(e.id,0)}).join(""),"0")}return S(i,"-")}(r,e);this.props.history.replace("/".concat(e)+(i?"/".concat(i):""))}},{key:"render",value:function(){var r=this,e=this.props.selectedClass,i=this.state.knownTalents,o=x[e],n=T(i);return s.a.createElement("div",{className:"calculator"},s.a.createElement("div",{className:"trees"},o.specs.map(function(e){return s.a.createElement(M,{key:e,specId:e,availablePoints:n,knownTalents:i,onTalentPress:r.handleTalentPress})})),s.a.createElement("div",{className:"calculator__points"},"Points: ",n),s.a.createElement("ul",null,s.a.createElement("li",null,s.a.createElement("a",{href:"/shaman/-5505000055523051-55"},"Shaman test")),s.a.createElement("li",null,s.a.createElement("a",{href:"/shaman/-5595000055523051-55"},"Shaman test broken")),s.a.createElement("li",null,s.a.createElement("a",{href:"/rogue/-005055-50205302332212051"},"Rogue can unlearn first row"))))}}]),e}(s.a.PureComponent);U.whyDidYouRender=!0;var F=i(16),H=function(r,e){return p()("class-picker__class",{"class-picker__class--active":r.name.toLowerCase()===e,"class-picker__class--inactive":!!e&&r.name.toLowerCase()!==e})},Y=function(r){function e(){return Object(a.a)(this,e),Object(t.a)(this,Object(d.a)(e).apply(this,arguments))}return Object(u.a)(e,r),Object(c.a)(e,[{key:"render",value:function(){var r=this.props.selected,e=p()("class-picker",{"class-picker--has-selection":!!r});return s.a.createElement("ul",{className:e},Object.values(x).map(function(e){return s.a.createElement("li",{key:e.id,className:H(e,r)},s.a.createElement(F.b,{to:"/".concat(e.name.toLowerCase()),title:e.name},s.a.createElement(k,{name:e.icon,golden:r===e.name.toLowerCase()})))}))}}]),e}(s.a.PureComponent);Y.whyDidYouRender=!0;var B=function(r){function e(){return Object(a.a)(this,e),Object(t.a)(this,Object(d.a)(e).apply(this,arguments))}return Object(u.a)(e,r),Object(c.a)(e,[{key:"componentDidMount",value:function(){var r=this.props.match.params.selectedClass;r&&!x[r]&&this.props.history.replace("/")}},{key:"render",value:function(){var r=this.props,e=r.match,i=r.history,o=e.params,n=o.selectedClass,l=o.pointString;return n&&!x[n]?null:s.a.createElement("div",{className:"index"},s.a.createElement(Y,{selected:n}),n&&s.a.createElement(U,{initialTalents:l&&D(l,n),selectedClass:n,history:i}))}}]),e}(s.a.PureComponent);B.whyDidYouRender=!0;var W=i(6),J=function(){return s.a.createElement(F.a,{basename:"/wow-talent-calculator"},s.a.createElement("div",{className:"App"},s.a.createElement(W.a,{path:"/:selectedClass?/:pointString?",component:B})))};Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));l.a.render(s.a.createElement(J,null),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then(function(r){r.unregister()})}]),[[27,1,2]]]); +//# sourceMappingURL=main.b1f5143f.chunk.js.map \ No newline at end of file diff --git a/static/js/main.4982432a.chunk.js.map b/static/js/main.b1f5143f.chunk.js.map similarity index 96% rename from static/js/main.4982432a.chunk.js.map rename to static/js/main.b1f5143f.chunk.js.map index 4de4186..acadfc9 100644 --- a/static/js/main.4982432a.chunk.js.map +++ b/static/js/main.b1f5143f.chunk.js.map @@ -1 +1 @@ -{"version":3,"sources":["images/specs sync /^/.//.*/.jpg$","images/specs/161.jpg","images/specs/163.jpg","images/specs/164.jpg","images/specs/181.jpg","images/specs/182.jpg","images/specs/183.jpg","images/specs/201.jpg","images/specs/202.jpg","images/specs/203.jpg","images/specs/261.jpg","images/specs/262.jpg","images/specs/263.jpg","images/specs/281.jpg","images/specs/282.jpg","images/specs/283.jpg","images/specs/301.jpg","images/specs/302.jpg","images/specs/303.jpg","images/specs/361.jpg","images/specs/362.jpg","images/specs/363.jpg","images/specs/381.jpg","images/specs/382.jpg","images/specs/383.jpg","images/specs/41.jpg","images/specs/61.jpg","images/specs/81.jpg","components/Icon.tsx","data/talents.ts","data/classes.ts","lib/tree.ts","components/TalentSlot.tsx","components/Arrow.tsx","components/TalentTree.tsx","components/Calculator.tsx","components/ClassPicker.tsx","components/IndexRoute.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["map","./161.jpg","./163.jpg","./164.jpg","./181.jpg","./182.jpg","./183.jpg","./201.jpg","./202.jpg","./203.jpg","./261.jpg","./262.jpg","./263.jpg","./281.jpg","./282.jpg","./283.jpg","./301.jpg","./302.jpg","./303.jpg","./361.jpg","./362.jpg","./363.jpg","./381.jpg","./382.jpg","./383.jpg","./41.jpg","./61.jpg","./81.jpg","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","p","Icon","_ref","name","_ref$size","size","_ref$golden","golden","children","className","classNames","concat","icon--golden","bgStyle","backgroundImage","react_default","a","createElement","style","specNames","41","61","81","161","163","164","181","182","183","201","202","203","261","262","263","281","282","283","301","302","303","361","362","363","381","382","383","talentsBySpec","26","row","col","icon","ranks","requires","30","34","28","27","1141","31","29","23","25","24","1639","33","32","qty","35","36","70","37","1649","73","38","62","65","69","63","741","66","67","72","64","68","71","74","76","80","78","1650","75","82","85","83","88","1142","86","77","421","87","124","130","127","126","641","128","131","137","121","136","662","132","133","125","123","134","129","135","1601","138","142","140","141","153","145","147","144","146","151","143","150","152","149","702","148","158","157","159","166","160","661","154","1581","1542","155","168","165","1543","1541","156","167","186","187","204","222","206","221","184","223","242","1703","1122","205","276","272","270","273","274","277","278","269","682","268","280","279","241","1700","247","244","245","246","1123","1701","284","265","681","1702","342","345","352","344","343","321","348","347","346","341","350","1201","351","1202","322","410","406","401","411","1181","442","1636","1635","408","403","413","1561","402","404","1637","465","464","466","482","463","542","481","501","483","881","461","541","484","1638","462","521","564","563","572","1640","561","574","575","562","567","1642","1645","1641","565","721","573","586","593","589","581","595","583","587","582","1646","588","594","1648","591","592","590","614","612","609","613","605","607","610","617","601","602","615","1647","611","616","1643","901","796","795","799","797","794","807","804","798","802","803","800","801","805","1162","808","809","821","822","824","823","826","829","827","841","843","830","831","828","842","825","844","762","761","921","787","763","791","781","782","788","764","792","784","789","783","790","793","944","941","943","982","983","984","981","963","985","964","965","986","961","967","966","968","1005","1003","1006","1101","1007","1004","1284","1001","1061","1021","1002","1121","1041","1081","1082","1042","1022","1221","1222","1223","1224","1225","1242","1243","1226","1241","1227","1262","1283","1281","1261","1244","1282","1263","1382","1389","1624","1381","1395","1625","1384","1391","1396","1385","1393","1388","1387","1390","1397","1386","1623","1301","1311","1304","1621","1305","1306","1622","1308","1322","1310","1309","1321","1312","1303","1325","1341","1342","1343","1344","1345","1346","1352","1348","1349","1353","1347","1351","1362","1361","1401","1407","1631","1464","1403","1633","1411","1481","1634","1632","1405","1410","1409","1402","1441","1450","1449","1432","1463","1444","1435","1443","1628","1461","1446","1433","1465","1627","1502","1422","1421","1630","1425","1423","1442","1501","1424","1629","1521","1626","1431","1426","1429","1430","talentsById","talentsBySpecArray","talentToSpec","specId","talentId","values","parseInt","classes","specs","classByName","reduce","previousValue","currentValue","objectSpread","defineProperty","toLowerCase","MAX_POINTS","SORT_TALENTS","b","getPointsInSpec","known","prev","current","get","calcAvailablePoints","Math","max","calcMeetsRequirements","talent","length","canLearnTalent","modifyTalentPoint","modifier","currentPoints","set","addTalentPoint","console","warn","isDependency","highestRow","cumulativePointsPerRow","forEach","points","t","some","info","pointsUntilHighestRow","targetPointsHighestRow","remove","removeTalentPoint","decodeKnownTalents","pointString","log","Map","parts","split","i","specPointStr","talents","sort","y","removeTrailingCharacters","str","char","slice","TalentSlot","props","knownTalents","availablePoints","showPoints","disabled","pointsInSpec","isAvailable","containerClassNames","talent--disabled","talent--available","talent--maxed","pointsClassNames","point-label--enabled","title","toString","data-row","data-col","onClick","onContextMenu","onRightClick","preventDefault","Icon_Icon","defaultProps","whyDidYouRender","Arrow","from","to","_ref$active","active","abs","data-length","arrow--active","arrow--down","arrow--right","arrow--left","arrow--right-down","assign","TalentTree","onTalentPress","handleClick","useCallback","handleRightClick","bodyStyle","require","arrows","filter","Arrow_Arrow","key","TalentSlot_TalentSlot","EMPTY_TALENTS","Calculator","_React$PureComponent","_getPrototypeOf2","_this","classCallCheck","this","_len","arguments","args","Array","_key","possibleConstructorReturn","getPrototypeOf","call","apply","state","handleTalentPress","newKnownTalents","updateURL","setState","inherits","createClass","value","initialTalents","prevProps","selectedClass","string","join","encodeKnownTalents","history","replace","_this2","classData","TalentTree_TalentTree","href","React","PureComponent","classNameForItem","c","selected","class-picker__class--active","class-picker__class--inactive","ClassPicker","cn","class-picker--has-selection","react_router_dom","IndexRoute","match","params","_this$props","_match$params","ClassPicker_ClassPicker","Calculator_Calculator","App","basename","react_router","path","component","Boolean","window","location","hostname","ReactDOM","render","src_App_0","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.4982432a.chunk.js","sourcesContent":["var map = {\n\t\"./161.jpg\": 37,\n\t\"./163.jpg\": 38,\n\t\"./164.jpg\": 39,\n\t\"./181.jpg\": 40,\n\t\"./182.jpg\": 41,\n\t\"./183.jpg\": 42,\n\t\"./201.jpg\": 43,\n\t\"./202.jpg\": 44,\n\t\"./203.jpg\": 45,\n\t\"./261.jpg\": 46,\n\t\"./262.jpg\": 47,\n\t\"./263.jpg\": 48,\n\t\"./281.jpg\": 49,\n\t\"./282.jpg\": 50,\n\t\"./283.jpg\": 51,\n\t\"./301.jpg\": 52,\n\t\"./302.jpg\": 53,\n\t\"./303.jpg\": 54,\n\t\"./361.jpg\": 55,\n\t\"./362.jpg\": 56,\n\t\"./363.jpg\": 57,\n\t\"./381.jpg\": 58,\n\t\"./382.jpg\": 59,\n\t\"./383.jpg\": 60,\n\t\"./41.jpg\": 61,\n\t\"./61.jpg\": 62,\n\t\"./81.jpg\": 63\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 36;","module.exports = __webpack_public_path__ + \"static/media/161.3b1eb099.jpg\";","module.exports = __webpack_public_path__ + \"static/media/163.d8ff0256.jpg\";","module.exports = __webpack_public_path__ + \"static/media/164.5a9a21e2.jpg\";","module.exports = __webpack_public_path__ + \"static/media/181.732693ea.jpg\";","module.exports = __webpack_public_path__ + \"static/media/182.2ba9eac3.jpg\";","module.exports = __webpack_public_path__ + \"static/media/183.3d6c94d0.jpg\";","module.exports = __webpack_public_path__ + \"static/media/201.7ef542fd.jpg\";","module.exports = __webpack_public_path__ + \"static/media/202.51496721.jpg\";","module.exports = __webpack_public_path__ + \"static/media/203.19c7b9ba.jpg\";","module.exports = __webpack_public_path__ + \"static/media/261.ec420cae.jpg\";","module.exports = __webpack_public_path__ + \"static/media/262.1a859835.jpg\";","module.exports = __webpack_public_path__ + \"static/media/263.968052c4.jpg\";","module.exports = __webpack_public_path__ + \"static/media/281.b6a8478e.jpg\";","module.exports = __webpack_public_path__ + \"static/media/282.e148424a.jpg\";","module.exports = __webpack_public_path__ + \"static/media/283.e0beb1ab.jpg\";","module.exports = __webpack_public_path__ + \"static/media/301.b0e11336.jpg\";","module.exports = __webpack_public_path__ + \"static/media/302.68b29a92.jpg\";","module.exports = __webpack_public_path__ + \"static/media/303.fd92e13b.jpg\";","module.exports = __webpack_public_path__ + \"static/media/361.1e37fb0b.jpg\";","module.exports = __webpack_public_path__ + \"static/media/362.95ffdde5.jpg\";","module.exports = __webpack_public_path__ + \"static/media/363.905dc629.jpg\";","module.exports = __webpack_public_path__ + \"static/media/381.17666e6c.jpg\";","module.exports = __webpack_public_path__ + \"static/media/382.b7f1381d.jpg\";","module.exports = __webpack_public_path__ + \"static/media/383.5a8a3168.jpg\";","module.exports = __webpack_public_path__ + \"static/media/41.fbfd140b.jpg\";","module.exports = __webpack_public_path__ + \"static/media/61.514eba87.jpg\";","module.exports = __webpack_public_path__ + \"static/media/81.892c508a.jpg\";","import React, { FC } from 'react'\nimport classNames from 'classnames'\nimport './Icon.scss'\n\ninterface Props {\n name: string\n size?: 'small' | 'medium' | 'large'\n golden?: boolean\n}\n\nexport const Icon: FC = ({ name, size = 'medium', golden = false, children }) => {\n const className = classNames(\n 'icon', \n `icon--${size}`, {\n 'icon--golden': golden\n }\n )\n\n const bgSize = size === 'medium' ? 'large' : 'medium'\n const bgStyle = {\n backgroundImage: `url(https://wow.zamimg.com/images/wow/icons/${bgSize}/${name}.jpg)`\n }\n\n return (\n
\n
\n
\n {children}\n
\n )\n}","interface Root {\n /** ID of the talent tree */\n [key: number]: {\n /** ID of the talent */\n [key: number]: TalentData\n }\n}\n\nexport const specNames = {\n 41: \"Fire\",\n 61: \"Frost\",\n 81: \"Arcane\",\n 161: \"Arms\",\n 163: \"Protection\",\n 164: \"Fury\",\n 181: \"Combat\",\n 182: \"Assassination\",\n 183: \"Subtlety\",\n 201: \"Discipline\",\n 202: \"Holy\",\n 203: \"Shadow\",\n 261: \"Elemental\",\n 262: \"Restoration\",\n 263: \"Enhancement\",\n 281: \"Feral Combat\",\n 282: \"Restoration\",\n 283: \"Balance\",\n 301: \"Destruction\",\n 302: \"Affliction\",\n 303: \"Demonology\",\n 361: \"Beast Mastery\",\n 362: \"Survival\",\n 363: \"Marksmanship\",\n 381: \"Retribution\",\n 382: \"Holy\",\n 383: \"Protection\"\n}\n\nexport const talentsBySpec: Root = {\n 41: {\n 26: {\n \"id\": 26,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_fire_flamebolt\",\n \"ranks\": [11069, 12338, 12339, 12340, 12341],\n \"requires\": []\n },\n 30: {\n \"id\": 30,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_meteorstorm\",\n \"ranks\": [11103, 12357, 12358, 12359, 12360],\n \"requires\": []\n },\n 34: {\n \"id\": 34,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_fire_incinerate\",\n \"ranks\": [11119, 11120, 12846, 12847, 12848],\n \"requires\": []\n },\n 28: {\n \"id\": 28,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_fire_flare\",\n \"ranks\": [11100, 12353],\n \"requires\": []\n },\n 27: {\n \"id\": 27,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [11078, 11080, 12342],\n \"requires\": []\n },\n 1141: {\n \"id\": 1141,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_fire_flameshock\",\n \"ranks\": [18459, 18460],\n \"requires\": []\n },\n 31: {\n \"id\": 31,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_fire_selfdestruct\",\n \"ranks\": [11108, 12349, 12350],\n \"requires\": []\n },\n 29: {\n \"id\": 29,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball02\",\n \"ranks\": [11366],\n \"requires\": []\n },\n 23: {\n \"id\": 23,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_fire_fire\",\n \"ranks\": [11083, 12351],\n \"requires\": []\n },\n 25: {\n \"id\": 25,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_soulburn\",\n \"ranks\": [11095, 12872, 12873],\n \"requires\": []\n },\n 24: {\n \"id\": 24,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_fire_firearmor\",\n \"ranks\": [11094, 13043],\n \"requires\": []\n },\n 1639: {\n \"id\": 1639,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_masterofelements\",\n \"ranks\": [29074, 29075, 29076],\n \"requires\": []\n },\n 33: {\n \"id\": 33,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_wispheal\",\n \"ranks\": [11115, 11367, 11368],\n \"requires\": []\n },\n 32: {\n \"id\": 32,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_excorcism_02\",\n \"ranks\": [11113],\n \"requires\": [{\n \"id\": 29,\n \"qty\": 1\n }]\n },\n 35: {\n \"id\": 35,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [11124, 12378, 12398, 12399, 12400],\n \"requires\": []\n },\n 36: {\n \"id\": 36,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_fire_sealoffire\",\n \"ranks\": [11129],\n \"requires\": [{\n \"id\": 33,\n \"qty\": 3\n }]\n }\n },\n 61: {\n 70: {\n \"id\": 70,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_frost_frostward\",\n \"ranks\": [11189, 28332],\n \"requires\": []\n },\n 37: {\n \"id\": 37,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_frost_frostbolt02\",\n \"ranks\": [11070, 12473, 16763, 16765, 16766],\n \"requires\": []\n },\n 1649: {\n \"id\": 1649,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_ice_magicdamage\",\n \"ranks\": [29438, 29439, 29440],\n \"requires\": []\n },\n 73: {\n \"id\": 73,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_frost_iceshard\",\n \"ranks\": [11207, 12672, 15047, 15052, 15053],\n \"requires\": []\n },\n 38: {\n \"id\": 38,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_frost_frostarmor\",\n \"ranks\": [11071, 12496, 12497],\n \"requires\": []\n },\n 62: {\n \"id\": 62,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_frost_freezingbreath\",\n \"ranks\": [11165, 12475],\n \"requires\": []\n },\n 65: {\n \"id\": 65,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_frost_wisp\",\n \"ranks\": [11175, 12569, 12571],\n \"requires\": []\n },\n 61: {\n \"id\": 61,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_frost_frostbolt\",\n \"ranks\": [11151, 12952, 12953],\n \"requires\": []\n },\n 69: {\n \"id\": 69,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [12472],\n \"requires\": []\n },\n 63: {\n \"id\": 63,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_frost_icestorm\",\n \"ranks\": [11185, 12487, 12488],\n \"requires\": []\n },\n 741: {\n \"id\": 741,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_darkritual\",\n \"ranks\": [16757, 16758],\n \"requires\": []\n },\n 66: {\n \"id\": 66,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [11160, 12518, 12519],\n \"requires\": []\n },\n 67: {\n \"id\": 67,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_frost_frostshock\",\n \"ranks\": [11170, 12982, 12983, 12984, 12985],\n \"requires\": [{\n \"id\": 62,\n \"qty\": 2\n }]\n },\n 72: {\n \"id\": 72,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_frost_frost\",\n \"ranks\": [11958],\n \"requires\": []\n },\n 64: {\n \"id\": 64,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_frost_glacier\",\n \"ranks\": [11190, 12489, 12490],\n \"requires\": []\n },\n 68: {\n \"id\": 68,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_frost_chillingblast\",\n \"ranks\": [11180, 28592, 28593, 28594, 28595],\n \"requires\": []\n },\n 71: {\n \"id\": 71,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_ice_lament\",\n \"ranks\": [11426],\n \"requires\": [{\n \"id\": 72,\n \"qty\": 1\n }]\n }\n },\n 81: {\n 74: {\n \"id\": 74,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_holy_dispelmagic\",\n \"ranks\": [11210, 12592],\n \"requires\": []\n },\n 76: {\n \"id\": 76,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [11222, 12839, 12840, 12841, 12842],\n \"requires\": []\n },\n 80: {\n \"id\": 80,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_starfall\",\n \"ranks\": [11237, 12463, 12464, 16769, 16770],\n \"requires\": []\n },\n 78: {\n \"id\": 78,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"inv_wand_01\",\n \"ranks\": [6057, 6085],\n \"requires\": []\n },\n 1650: {\n \"id\": 1650,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_astralrecalgroup\",\n \"ranks\": [29441, 29444, 29445, 29446, 29447],\n \"requires\": []\n },\n 75: {\n \"id\": 75,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [11213, 12574, 12575, 12576, 12577],\n \"requires\": []\n },\n 82: {\n \"id\": 82,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [11247, 12606],\n \"requires\": []\n },\n 81: {\n \"id\": 81,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [11242, 12467, 12469],\n \"requires\": []\n },\n 85: {\n \"id\": 85,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_arcane_arcaneresilience\",\n \"ranks\": [28574],\n \"requires\": []\n },\n 83: {\n \"id\": 83,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_detectlesserinvisibility\",\n \"ranks\": [11252, 12605],\n \"requires\": []\n },\n 88: {\n \"id\": 88,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_frost_iceshock\",\n \"ranks\": [11255, 12598],\n \"requires\": []\n },\n 1142: {\n \"id\": 1142,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [18462, 18463, 18464],\n \"requires\": []\n },\n 86: {\n \"id\": 86,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [12043],\n \"requires\": []\n },\n 77: {\n \"id\": 77,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_charm\",\n \"ranks\": [11232, 12500, 12501, 12502, 12503],\n \"requires\": [{\n \"id\": 85,\n \"qty\": 1\n }]\n },\n 421: {\n \"id\": 421,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_teleport\",\n \"ranks\": [15058, 15059, 15060],\n \"requires\": [{\n \"id\": 86,\n \"qty\": 1\n }]\n },\n 87: {\n \"id\": 87,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_lightning\",\n \"ranks\": [12042],\n \"requires\": [{\n \"id\": 421,\n \"qty\": 3\n }]\n }\n },\n 161: {\n 124: {\n \"id\": 124,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [12282, 12663, 12664],\n \"requires\": []\n },\n 130: {\n \"id\": 130,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_parry\",\n \"ranks\": [16462, 16463, 16464, 16465, 16466],\n \"requires\": []\n },\n 127: {\n \"id\": 127,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_gouge\",\n \"ranks\": [12286, 12658, 12659],\n \"requires\": []\n },\n 126: {\n \"id\": 126,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_warrior_charge\",\n \"ranks\": [12285, 12697],\n \"requires\": []\n },\n 641: {\n \"id\": 641,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [12295, 12676, 12677, 12678, 12679],\n \"requires\": []\n },\n 128: {\n \"id\": 128,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_thunderclap\",\n \"ranks\": [12287, 12665, 12666],\n \"requires\": []\n },\n 131: {\n \"id\": 131,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"inv_sword_05\",\n \"ranks\": [12290, 12963],\n \"requires\": []\n },\n 137: {\n \"id\": 137,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [12296],\n \"requires\": [{\n \"id\": 641,\n \"qty\": 5\n }]\n },\n 121: {\n \"id\": 121,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_backstab\",\n \"ranks\": [12834, 12849, 12867],\n \"requires\": [{\n \"id\": 127,\n \"qty\": 3\n }]\n },\n 136: {\n \"id\": 136,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_axe_09\",\n \"ranks\": [12163, 12711, 12712, 12713, 12714],\n \"requires\": []\n },\n 662: {\n \"id\": 662,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_searingarrow\",\n \"ranks\": [16493, 16494],\n \"requires\": [{\n \"id\": 121,\n \"qty\": 3\n }]\n },\n 132: {\n \"id\": 132,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_axe_06\",\n \"ranks\": [12700, 12781, 12783, 12784, 12785],\n \"requires\": []\n },\n 133: {\n \"id\": 133,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_rogue_slicedice\",\n \"ranks\": [12292],\n \"requires\": []\n },\n 125: {\n \"id\": 125,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"inv_mace_01\",\n \"ranks\": [12284, 12701, 12702, 12703, 12704],\n \"requires\": []\n },\n 123: {\n \"id\": 123,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_sword_27\",\n \"ranks\": [12281, 12812, 12813, 12814, 12815],\n \"requires\": []\n },\n 134: {\n \"id\": 134,\n \"row\": 5,\n \"col\": 0,\n \"icon\": \"inv_weapon_halbard_01\",\n \"ranks\": [12165, 12830, 12831, 12832, 12833],\n \"requires\": []\n },\n 129: {\n \"id\": 129,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_shockwave\",\n \"ranks\": [12289, 12668, 23695],\n \"requires\": []\n },\n 135: {\n \"id\": 135,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_warrior_savageblow\",\n \"ranks\": [12294],\n \"requires\": [{\n \"id\": 133,\n \"qty\": 1\n }]\n }\n },\n 163: {\n 1601: {\n \"id\": 1601,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [12298, 12724, 12725, 12726, 12727],\n \"requires\": []\n },\n 138: {\n \"id\": 138,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [12297, 12750, 12751, 12752, 12753],\n \"requires\": []\n },\n 142: {\n \"id\": 142,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [12301, 12818],\n \"requires\": []\n },\n 140: {\n \"id\": 140,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [12299, 12761, 12762, 12763, 12764],\n \"requires\": []\n },\n 141: {\n \"id\": 141,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [12300, 12959, 12960, 12961, 12962],\n \"requires\": []\n },\n 153: {\n \"id\": 153,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_ashestoashes\",\n \"ranks\": [12975],\n \"requires\": [{\n \"id\": 142,\n \"qty\": 2\n }]\n },\n 145: {\n \"id\": 145,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_defend\",\n \"ranks\": [12945, 12307, 12944],\n \"requires\": [{\n \"id\": 1601,\n \"qty\": 5\n }]\n },\n 147: {\n \"id\": 147,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_warrior_revenge\",\n \"ranks\": [12797, 12799, 12800],\n \"requires\": []\n },\n 144: {\n \"id\": 144,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_warrior_innerrage\",\n \"ranks\": [12303, 12788, 12789, 12791, 12792],\n \"requires\": []\n },\n 146: {\n \"id\": 146,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_warrior_sunder\",\n \"ranks\": [12308, 12810, 12811],\n \"requires\": []\n },\n 151: {\n \"id\": 151,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_warrior_disarm\",\n \"ranks\": [12313, 12804, 12807],\n \"requires\": []\n },\n 143: {\n \"id\": 143,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [12302, 12765],\n \"requires\": []\n },\n 150: {\n \"id\": 150,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_warrior_shieldwall\",\n \"ranks\": [12312, 12803],\n \"requires\": []\n },\n 152: {\n \"id\": 152,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [12809],\n \"requires\": []\n },\n 149: {\n \"id\": 149,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_warrior_shieldbash\",\n \"ranks\": [12311, 12958],\n \"requires\": []\n },\n 702: {\n \"id\": 702,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_sword_20\",\n \"ranks\": [16538, 16539, 16540, 16541, 16542],\n \"requires\": []\n },\n 148: {\n \"id\": 148,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_shield_05\",\n \"ranks\": [23922],\n \"requires\": [{\n \"id\": 152,\n \"qty\": 1\n }]\n }\n },\n 164: {\n 158: {\n \"id\": 158,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_purge\",\n \"ranks\": [12321, 12835, 12836, 12837, 12838],\n \"requires\": []\n },\n 157: {\n \"id\": 157,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_rogue_eviscerate\",\n \"ranks\": [12320, 12852, 12853, 12855, 12856],\n \"requires\": []\n },\n 161: {\n \"id\": 161,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_warrior_warcry\",\n \"ranks\": [12324, 12876, 12877, 12878, 12879],\n \"requires\": []\n },\n 159: {\n \"id\": 159,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_stoneclawtotem\",\n \"ranks\": [12322, 12999, 13000, 13001, 13002],\n \"requires\": []\n },\n 166: {\n \"id\": 166,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_warrior_cleave\",\n \"ranks\": [12329, 12950, 20496],\n \"requires\": []\n },\n 160: {\n \"id\": 160,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathscream\",\n \"ranks\": [12323],\n \"requires\": []\n },\n 661: {\n \"id\": 661,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_summonimp\",\n \"ranks\": [16487, 16489, 16492],\n \"requires\": []\n },\n 154: {\n \"id\": 154,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_warrior_battleshout\",\n \"ranks\": [12318, 12857, 12858, 12860, 12861],\n \"requires\": []\n },\n 1581: {\n \"id\": 1581,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_dualwield\",\n \"ranks\": [23584, 23585, 23586, 23587, 23588],\n \"requires\": []\n },\n 1542: {\n \"id\": 1542,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_sword_48\",\n \"ranks\": [20502, 20503],\n \"requires\": []\n },\n 155: {\n \"id\": 155,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_unholyfrenzy\",\n \"ranks\": [12317, 13045, 13046, 13047, 13048],\n \"requires\": []\n },\n 168: {\n \"id\": 168,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_warrior_decisivestrike\",\n \"ranks\": [12862, 12330, 20497, 20498, 20499],\n \"requires\": []\n },\n 165: {\n \"id\": 165,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathpact\",\n \"ranks\": [12328],\n \"requires\": []\n },\n 1543: {\n \"id\": 1543,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"ability_rogue_sprint\",\n \"ranks\": [20504, 20505],\n \"requires\": []\n },\n 1541: {\n \"id\": 1541,\n \"row\": 5,\n \"col\": 0,\n \"icon\": \"spell_nature_ancestralguardian\",\n \"ranks\": [20500, 20501],\n \"requires\": []\n },\n 156: {\n \"id\": 156,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [12319, 12971, 12972, 12973, 12974],\n \"requires\": [{\n \"id\": 155,\n \"qty\": 5\n }]\n },\n 167: {\n \"id\": 167,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_bloodlust\",\n \"ranks\": [23881],\n \"requires\": [{\n \"id\": 165,\n \"qty\": 1\n }]\n }\n },\n 181: {\n 203: {\n \"id\": 203,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_gouge\",\n \"ranks\": [13741, 13793, 13792],\n \"requires\": []\n },\n 201: {\n \"id\": 201,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_ritualofsacrifice\",\n \"ranks\": [13732, 13863],\n \"requires\": []\n },\n 186: {\n \"id\": 186,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_invisibilty\",\n \"ranks\": [13712, 13788, 13789, 13790, 13791],\n \"requires\": []\n },\n 202: {\n \"id\": 202,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_backstab\",\n \"ranks\": [13733, 13865, 13866],\n \"requires\": []\n },\n 187: {\n \"id\": 187,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_parry\",\n \"ranks\": [13713, 13853, 13854, 13855, 13856],\n \"requires\": []\n },\n 181: {\n \"id\": 181,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_marksmanship\",\n \"ranks\": [13705, 13832, 13843, 13844, 13845],\n \"requires\": []\n },\n 204: {\n \"id\": 204,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_shadowward\",\n \"ranks\": [13742, 13872],\n \"requires\": []\n },\n 301: {\n \"id\": 301,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_warrior_challange\",\n \"ranks\": [14251],\n \"requires\": [{\n \"id\": 187,\n \"qty\": 5\n }]\n },\n 222: {\n \"id\": 222,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_rogue_sprint\",\n \"ranks\": [13743, 13875],\n \"requires\": []\n },\n 206: {\n \"id\": 206,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_kick\",\n \"ranks\": [13754, 13867],\n \"requires\": []\n },\n 182: {\n \"id\": 182,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_weapon_shortblade_05\",\n \"ranks\": [13706, 13804, 13805, 13806, 13807],\n \"requires\": []\n },\n 221: {\n \"id\": 221,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_dualwield\",\n \"ranks\": [13715, 13848, 13849, 13851, 13852],\n \"requires\": [{\n \"id\": 181,\n \"qty\": 5\n }]\n },\n 184: {\n \"id\": 184,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_mace_01\",\n \"ranks\": [13709, 13800, 13801, 13802, 13803],\n \"requires\": []\n },\n 223: {\n \"id\": 223,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_warrior_punishingblow\",\n \"ranks\": [13877],\n \"requires\": []\n },\n 242: {\n \"id\": 242,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"inv_sword_27\",\n \"ranks\": [13960, 13961, 13962, 13963, 13964],\n \"requires\": []\n },\n 183: {\n \"id\": 183,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_gauntlets_04\",\n \"ranks\": [13707, 13966, 13967, 13968, 13969],\n \"requires\": []\n },\n 1703: {\n \"id\": 1703,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstrength\",\n \"ranks\": [30919, 30920],\n \"requires\": [{\n \"id\": 223,\n \"qty\": 1\n }]\n },\n 1122: {\n \"id\": 1122,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_racial_avatar\",\n \"ranks\": [18427, 18428, 18429],\n \"requires\": []\n },\n 205: {\n \"id\": 205,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowworddominate\",\n \"ranks\": [13750],\n \"requires\": []\n }\n },\n 182: {\n 276: {\n \"id\": 276,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_rogue_eviscerate\",\n \"ranks\": [14162, 14163, 14164],\n \"requires\": []\n },\n 272: {\n \"id\": 272,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_fiegndead\",\n \"ranks\": [14144, 14148],\n \"requires\": []\n },\n 270: {\n \"id\": 270,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [14138, 14139, 14140, 14141, 14142],\n \"requires\": []\n },\n 273: {\n \"id\": 273,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_druid_disembowel\",\n \"ranks\": [14156, 14160, 14161],\n \"requires\": []\n },\n 274: {\n \"id\": 274,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathscream\",\n \"ranks\": [14158, 14159],\n \"requires\": []\n },\n 277: {\n \"id\": 277,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_rogue_slicedice\",\n \"ranks\": [14165, 14166, 14167],\n \"requires\": []\n },\n 281: {\n \"id\": 281,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_warrior_decisivestrike\",\n \"ranks\": [14179],\n \"requires\": []\n },\n 278: {\n \"id\": 278,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_warrior_riposte\",\n \"ranks\": [14168, 14169],\n \"requires\": []\n },\n 269: {\n \"id\": 269,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_criticalstrike\",\n \"ranks\": [14128, 14132, 14135, 14136, 14137],\n \"requires\": [{\n \"id\": 270,\n \"qty\": 5\n }]\n },\n 682: {\n \"id\": 682,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_rogue_feigndeath\",\n \"ranks\": [16513, 16514, 16515, 16719, 16720],\n \"requires\": []\n },\n 268: {\n \"id\": 268,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_poisons\",\n \"ranks\": [14113, 14114, 14115, 14116, 14117],\n \"requires\": []\n },\n 280: {\n \"id\": 280,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_ice_lament\",\n \"ranks\": [14177],\n \"requires\": []\n },\n 279: {\n \"id\": 279,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_rogue_kidneyshot\",\n \"ranks\": [14174, 14175, 14176],\n \"requires\": []\n },\n 283: {\n \"id\": 283,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_chilltouch\",\n \"ranks\": [14186, 14190, 14193, 14194, 14195],\n \"requires\": [{\n \"id\": 280,\n \"qty\": 1\n }]\n },\n 382: {\n \"id\": 382,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_earthbindtotem\",\n \"ranks\": [14983],\n \"requires\": []\n }\n },\n 183: {\n 241: {\n \"id\": 241,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_charm\",\n \"ranks\": [13958, 13970, 13971, 13972, 13973],\n \"requires\": []\n },\n 261: {\n \"id\": 261,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_warrior_warcry\",\n \"ranks\": [14057, 14072, 14073, 14074, 14075],\n \"requires\": []\n },\n 1700: {\n \"id\": 1700,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_rogue_feint\",\n \"ranks\": [30892, 30893],\n \"requires\": []\n },\n 247: {\n \"id\": 247,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [13981, 14066],\n \"requires\": []\n },\n 244: {\n \"id\": 244,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_stealth\",\n \"ranks\": [13975, 14062, 14063, 14064, 14065],\n \"requires\": []\n },\n 245: {\n \"id\": 245,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_fumble\",\n \"ranks\": [13976, 13979, 13980],\n \"requires\": []\n },\n 303: {\n \"id\": 303,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_curse\",\n \"ranks\": [14278],\n \"requires\": []\n },\n 263: {\n \"id\": 263,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [14079, 14080, 14081],\n \"requires\": []\n },\n 246: {\n \"id\": 246,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [13983, 14070, 14071],\n \"requires\": []\n },\n 262: {\n \"id\": 262,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_sap\",\n \"ranks\": [14076, 14094, 14095],\n \"requires\": []\n },\n 1123: {\n \"id\": 1123,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"inv_sword_17\",\n \"ranks\": [14171, 14172, 14173],\n \"requires\": []\n },\n 1701: {\n \"id\": 1701,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_ambush\",\n \"ranks\": [30894, 30895],\n \"requires\": []\n },\n 284: {\n \"id\": 284,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_antishadow\",\n \"ranks\": [14185],\n \"requires\": []\n },\n 265: {\n \"id\": 265,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_summonsuccubus\",\n \"ranks\": [14082, 14083],\n \"requires\": []\n },\n 681: {\n \"id\": 681,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_shadow_lifedrain\",\n \"ranks\": [16511],\n \"requires\": [{\n \"id\": 1123,\n \"qty\": 3\n }]\n },\n 1702: {\n \"id\": 1702,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_weapon_crossbow_11\",\n \"ranks\": [30902, 30903, 30904, 30905, 30906],\n \"requires\": []\n },\n 381: {\n \"id\": 381,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_possession\",\n \"ranks\": [14183],\n \"requires\": [{\n \"id\": 284,\n \"qty\": 1\n }]\n }\n },\n 201: {\n 342: {\n \"id\": 342,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [14522, 14788, 14789, 14790, 14791],\n \"requires\": []\n },\n 345: {\n \"id\": 345,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"inv_wand_01\",\n \"ranks\": [14524, 14525, 14526, 14527, 14528],\n \"requires\": []\n },\n 352: {\n \"id\": 352,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_manaregentotem\",\n \"ranks\": [14523, 14784, 14785, 14786, 14787],\n \"requires\": []\n },\n 344: {\n \"id\": 344,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_wordfortitude\",\n \"ranks\": [14749, 14767],\n \"requires\": []\n },\n 343: {\n \"id\": 343,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_powerwordshield\",\n \"ranks\": [14748, 14768, 14769],\n \"requires\": []\n },\n 321: {\n \"id\": 321,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [14531, 14774],\n \"requires\": []\n },\n 348: {\n \"id\": 348,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [14751],\n \"requires\": []\n },\n 347: {\n \"id\": 347,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_sleep\",\n \"ranks\": [14521, 14776, 14777],\n \"requires\": []\n },\n 346: {\n \"id\": 346,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_innerfire\",\n \"ranks\": [14747, 14770, 14771],\n \"requires\": []\n },\n 341: {\n \"id\": 341,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hibernation\",\n \"ranks\": [14520, 14780, 14781, 14782, 14783],\n \"requires\": []\n },\n 350: {\n \"id\": 350,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [14750, 14772],\n \"requires\": []\n },\n 1201: {\n \"id\": 1201,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [18551, 18552, 18553, 18554, 18555],\n \"requires\": []\n },\n 351: {\n \"id\": 351,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_divinespirit\",\n \"ranks\": [14752],\n \"requires\": [{\n \"id\": 347,\n \"qty\": 3\n }]\n },\n 1202: {\n \"id\": 1202,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_slowingtotem\",\n \"ranks\": [18544, 18547, 18548, 18549, 18550],\n \"requires\": []\n },\n 322: {\n \"id\": 322,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_powerinfusion\",\n \"ranks\": [10060],\n \"requires\": [{\n \"id\": 1201,\n \"qty\": 5\n }]\n }\n },\n 202: {\n 410: {\n \"id\": 410,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_holy_healingfocus\",\n \"ranks\": [14913, 15012],\n \"requires\": []\n },\n 406: {\n \"id\": 406,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_renew\",\n \"ranks\": [14908, 15020, 17191],\n \"requires\": []\n },\n 401: {\n \"id\": 401,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofsalvation\",\n \"ranks\": [14889, 15008, 15009, 15010, 15011],\n \"requires\": []\n },\n 411: {\n \"id\": 411,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_spellwarding\",\n \"ranks\": [27900, 27901, 27902, 27903, 27904],\n \"requires\": []\n },\n 1181: {\n \"id\": 1181,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofwrath\",\n \"ranks\": [18530, 18531, 18533, 18534, 18535],\n \"requires\": []\n },\n 442: {\n \"id\": 442,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_holynova\",\n \"ranks\": [15237],\n \"requires\": []\n },\n 1636: {\n \"id\": 1636,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_blessedrecovery\",\n \"ranks\": [27811, 27815, 27816],\n \"requires\": []\n },\n 361: {\n \"id\": 361,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_layonhands\",\n \"ranks\": [14892, 15362, 15363],\n \"requires\": []\n },\n 1635: {\n \"id\": 1635,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_purify\",\n \"ranks\": [27789, 27790],\n \"requires\": []\n },\n 408: {\n \"id\": 408,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_heal02\",\n \"ranks\": [14912, 15013, 15014],\n \"requires\": []\n },\n 403: {\n \"id\": 403,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_searinglightpriest\",\n \"ranks\": [14909, 15017],\n \"requires\": [{\n \"id\": 1181,\n \"qty\": 5\n }]\n },\n 413: {\n \"id\": 413,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_holy_prayerofhealing02\",\n \"ranks\": [14911, 15018],\n \"requires\": []\n },\n 1561: {\n \"id\": 1561,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"inv_enchant_essenceeternallarge\",\n \"ranks\": [20711],\n \"requires\": []\n },\n 402: {\n \"id\": 402,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_spiritualguidence\",\n \"ranks\": [14901, 15028, 15029, 15030, 15031],\n \"requires\": []\n },\n 404: {\n \"id\": 404,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [14898, 15349, 15354, 15355, 15356],\n \"requires\": []\n },\n 1637: {\n \"id\": 1637,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_summonlightwell\",\n \"ranks\": [724],\n \"requires\": [{\n \"id\": 1561,\n \"qty\": 1\n }]\n }\n },\n 203: {\n 465: {\n \"id\": 465,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_requiem\",\n \"ranks\": [15270, 15335, 15336, 15337, 15338],\n \"requires\": []\n },\n 464: {\n \"id\": 464,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_gathershadows\",\n \"ranks\": [15268, 15323, 15324, 15325, 15326],\n \"requires\": []\n },\n 466: {\n \"id\": 466,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_shadowward\",\n \"ranks\": [15318, 15272, 15320],\n \"requires\": []\n },\n 482: {\n \"id\": 482,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowwordpain\",\n \"ranks\": [15275, 15317],\n \"requires\": []\n },\n 463: {\n \"id\": 463,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_burningspirit\",\n \"ranks\": [15260, 15327, 15328, 15329, 15330],\n \"requires\": []\n },\n 542: {\n \"id\": 542,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_psychicscream\",\n \"ranks\": [15392, 15448],\n \"requires\": []\n },\n 481: {\n \"id\": 481,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_unholyfrenzy\",\n \"ranks\": [15273, 15312, 15313, 15314, 15316],\n \"requires\": []\n },\n 501: {\n \"id\": 501,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [15407],\n \"requires\": []\n },\n 483: {\n \"id\": 483,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [15274, 15311],\n \"requires\": []\n },\n 881: {\n \"id\": 881,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_chilltouch\",\n \"ranks\": [17322, 17323, 17325],\n \"requires\": []\n },\n 461: {\n \"id\": 461,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_blackplague\",\n \"ranks\": [15257, 15331, 15332, 15333, 15334],\n \"requires\": []\n },\n 541: {\n \"id\": 541,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_shadow_impphaseshift\",\n \"ranks\": [15487],\n \"requires\": [{\n \"id\": 542,\n \"qty\": 2\n }]\n },\n 484: {\n \"id\": 484,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_unsummonbuilding\",\n \"ranks\": [15286],\n \"requires\": []\n },\n 1638: {\n \"id\": 1638,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_improvedvampiricembrace\",\n \"ranks\": [27839, 27840],\n \"requires\": [{\n \"id\": 484,\n \"qty\": 1\n }]\n },\n 462: {\n \"id\": 462,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [15259, 15307, 15308, 15309, 15310],\n \"requires\": []\n },\n 521: {\n \"id\": 521,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowform\",\n \"ranks\": [15473],\n \"requires\": [{\n \"id\": 484,\n \"qty\": 1\n }]\n }\n },\n 261: {\n 564: {\n \"id\": 564,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [16039, 16109, 16110, 16111, 16112],\n \"requires\": []\n },\n 563: {\n \"id\": 563,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [16035, 16105, 16106, 16107, 16108],\n \"requires\": []\n },\n 572: {\n \"id\": 572,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stoneclawtotem\",\n \"ranks\": [16043, 16130],\n \"requires\": []\n },\n 1640: {\n \"id\": 1640,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_spiritarmor\",\n \"ranks\": [28996, 28997, 28998],\n \"requires\": []\n },\n 561: {\n \"id\": 561,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [16038, 16160, 16161],\n \"requires\": []\n },\n 574: {\n \"id\": 574,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [16164],\n \"requires\": []\n },\n 575: {\n \"id\": 575,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_frostward\",\n \"ranks\": [16040, 16113, 16114, 16115, 16116],\n \"requires\": []\n },\n 562: {\n \"id\": 562,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_callstorm\",\n \"ranks\": [16041, 16117, 16118, 16119, 16120],\n \"requires\": []\n },\n 567: {\n \"id\": 567,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_sealoffire\",\n \"ranks\": [16086, 16544],\n \"requires\": []\n },\n 1642: {\n \"id\": 1642,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_eyeofthestorm\",\n \"ranks\": [29062, 29064, 29065],\n \"requires\": []\n },\n 1645: {\n \"id\": 1645,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_elementaldevastation\",\n \"ranks\": [30160, 29179, 29180],\n \"requires\": []\n },\n 1641: {\n \"id\": 1641,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_stormreach\",\n \"ranks\": [28999, 29000],\n \"requires\": []\n },\n 565: {\n \"id\": 565,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_volcano\",\n \"ranks\": [16089],\n \"requires\": []\n },\n 721: {\n \"id\": 721,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_lightning_lightningbolt01\",\n \"ranks\": [16578, 16579, 16580, 16581, 16582],\n \"requires\": [{\n \"id\": 562,\n \"qty\": 5\n }]\n },\n 573: {\n \"id\": 573,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_wispheal\",\n \"ranks\": [16166],\n \"requires\": [{\n \"id\": 565,\n \"qty\": 1\n }]\n }\n },\n 262: {\n 586: {\n \"id\": 586,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_magicimmunity\",\n \"ranks\": [16182, 16226, 16227, 16228, 16229],\n \"requires\": []\n },\n 593: {\n \"id\": 593,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_manarecharge\",\n \"ranks\": [16179, 16214, 16215, 16216, 16217],\n \"requires\": []\n },\n 589: {\n \"id\": 589,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [16184, 16209],\n \"requires\": []\n },\n 581: {\n \"id\": 581,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_undyingstrength\",\n \"ranks\": [16176, 16235, 16240],\n \"requires\": []\n },\n 595: {\n \"id\": 595,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [16173, 16222, 16223, 16224, 16225],\n \"requires\": []\n },\n 583: {\n \"id\": 583,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [16180, 16196, 16198],\n \"requires\": []\n },\n 587: {\n \"id\": 587,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_healingwavelesser\",\n \"ranks\": [16181, 16230, 16232, 16233, 16234],\n \"requires\": []\n },\n 582: {\n \"id\": 582,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_nullward\",\n \"ranks\": [16189],\n \"requires\": []\n },\n 1646: {\n \"id\": 1646,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_healingtouch\",\n \"ranks\": [29187, 29189, 29191],\n \"requires\": []\n },\n 588: {\n \"id\": 588,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_manaregentotem\",\n \"ranks\": [16187, 16205, 16206, 16207, 16208],\n \"requires\": []\n },\n 594: {\n \"id\": 594,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [16194, 16218, 16219, 16220, 16221],\n \"requires\": []\n },\n 1648: {\n \"id\": 1648,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_healingway\",\n \"ranks\": [29206, 29205, 29202],\n \"requires\": []\n },\n 591: {\n \"id\": 591,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [16188],\n \"requires\": []\n },\n 592: {\n \"id\": 592,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [16178, 16210, 16211, 16212, 16213],\n \"requires\": []\n },\n 590: {\n \"id\": 590,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_frost_summonwaterelemental\",\n \"ranks\": [16190],\n \"requires\": [{\n \"id\": 588,\n \"qty\": 5\n }]\n }\n },\n 263: {\n 614: {\n \"id\": 614,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [17485, 17486, 17487, 17488, 17489],\n \"requires\": []\n },\n 612: {\n \"id\": 612,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [16253, 16298, 16299, 16300, 16301],\n \"requires\": []\n },\n 609: {\n \"id\": 609,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stoneskintotem\",\n \"ranks\": [16258, 16293],\n \"requires\": []\n },\n 613: {\n \"id\": 613,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [16255, 16302, 16303, 16304, 16305],\n \"requires\": []\n },\n 605: {\n \"id\": 605,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_spiritwolf\",\n \"ranks\": [16262, 16287],\n \"requires\": []\n },\n 607: {\n \"id\": 607,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_lightningshield\",\n \"ranks\": [16261, 16290, 16291],\n \"requires\": []\n },\n 610: {\n \"id\": 610,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_earthbindtotem\",\n \"ranks\": [16259, 16295],\n \"requires\": []\n },\n 617: {\n \"id\": 617,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_axe_10\",\n \"ranks\": [16269],\n \"requires\": []\n },\n 601: {\n \"id\": 601,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [16254, 16271, 16272, 16273, 16274],\n \"requires\": []\n },\n 602: {\n \"id\": 602,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [16256, 16281, 16282, 16283, 16284],\n \"requires\": [{\n \"id\": 613,\n \"qty\": 5\n }]\n },\n 615: {\n \"id\": 615,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [16252, 16306, 16307, 16308, 16309],\n \"requires\": []\n },\n 1647: {\n \"id\": 1647,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_fire_enchantweapon\",\n \"ranks\": [29192, 29193],\n \"requires\": []\n },\n 611: {\n \"id\": 611,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_flametounge\",\n \"ranks\": [16266, 29079, 29080],\n \"requires\": []\n },\n 616: {\n \"id\": 616,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [16268],\n \"requires\": []\n },\n 1643: {\n \"id\": 1643,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_hunter_swiftstrike\",\n \"ranks\": [29082, 29084, 29086, 29087, 29088],\n \"requires\": []\n },\n 901: {\n \"id\": 901,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofmight\",\n \"ranks\": [17364],\n \"requires\": [{\n \"id\": 611,\n \"qty\": 3\n }]\n }\n },\n 281: {\n 796: {\n \"id\": 796,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_hyena\",\n \"ranks\": [16934, 16935, 16936, 16937, 16938],\n \"requires\": []\n },\n 795: {\n \"id\": 795,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_druid_demoralizingroar\",\n \"ranks\": [16858, 16859, 16860, 16861, 16862],\n \"requires\": []\n },\n 799: {\n \"id\": 799,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_ambush\",\n \"ranks\": [16947, 16948, 16949, 16950, 16951],\n \"requires\": []\n },\n 797: {\n \"id\": 797,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_druid_bash\",\n \"ranks\": [16940, 16941],\n \"requires\": []\n },\n 794: {\n \"id\": 794,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_misc_pelt_bear_03\",\n \"ranks\": [16929, 16930, 16931, 16932, 16933],\n \"requires\": []\n },\n 807: {\n \"id\": 807,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_spiritwolf\",\n \"ranks\": [17002, 24866],\n \"requires\": []\n },\n 804: {\n \"id\": 804,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_bear\",\n \"ranks\": [16979],\n \"requires\": []\n },\n 798: {\n \"id\": 798,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_04\",\n \"ranks\": [16942, 16943, 16944],\n \"requires\": []\n },\n 802: {\n \"id\": 802,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_vampiricaura\",\n \"ranks\": [16966, 16968],\n \"requires\": []\n },\n 803: {\n \"id\": 803,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_cat\",\n \"ranks\": [16972, 16974, 16975],\n \"requires\": []\n },\n 800: {\n \"id\": 800,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [16952, 16954],\n \"requires\": [{\n \"id\": 798,\n \"qty\": 3\n }]\n },\n 801: {\n \"id\": 801,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"ability_racial_cannibalize\",\n \"ranks\": [16958, 16961],\n \"requires\": [{\n \"id\": 798,\n \"qty\": 3\n }]\n },\n 805: {\n \"id\": 805,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_druid_ravage\",\n \"ranks\": [16998, 16999],\n \"requires\": []\n },\n 1162: {\n \"id\": 1162,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_faeriefire\",\n \"ranks\": [16857],\n \"requires\": []\n },\n 808: {\n \"id\": 808,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofagility\",\n \"ranks\": [17003, 17004, 17005, 17006, 24894],\n \"requires\": [{\n \"id\": 803,\n \"qty\": 3\n }]\n },\n 809: {\n \"id\": 809,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_unyeildingstamina\",\n \"ranks\": [17007],\n \"requires\": []\n }\n },\n 282: {\n 821: {\n \"id\": 821,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_regeneration\",\n \"ranks\": [17050, 17051, 17053, 17054, 17055],\n \"requires\": []\n },\n 822: {\n \"id\": 822,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [17056, 17058, 17059, 17060, 17061],\n \"requires\": []\n },\n 824: {\n \"id\": 824,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_healingtouch\",\n \"ranks\": [17069, 17070, 17071, 17072, 17073],\n \"requires\": []\n },\n 823: {\n \"id\": 823,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_healingwavegreater\",\n \"ranks\": [17063, 17065, 17066, 17067, 17068],\n \"requires\": []\n },\n 826: {\n \"id\": 826,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_druid_enrage\",\n \"ranks\": [17079, 17082],\n \"requires\": []\n },\n 829: {\n \"id\": 829,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [17106, 17107, 17108],\n \"requires\": []\n },\n 827: {\n \"id\": 827,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_insectswarm\",\n \"ranks\": [5570],\n \"requires\": []\n },\n 841: {\n \"id\": 841,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_eyeoftheowl\",\n \"ranks\": [17118, 17119, 17120, 17121, 17122],\n \"requires\": []\n },\n 843: {\n \"id\": 843,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_elunesgrace\",\n \"ranks\": [24968, 24969, 24970, 24971, 24972],\n \"requires\": []\n },\n 830: {\n \"id\": 830,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_nature_rejuvenation\",\n \"ranks\": [17111, 17112, 17113],\n \"requires\": []\n },\n 831: {\n \"id\": 831,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [17116],\n \"requires\": [{\n \"id\": 824,\n \"qty\": 5\n }]\n },\n 828: {\n \"id\": 828,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_protectionformnature\",\n \"ranks\": [17104, 24943, 24944, 24945, 24946],\n \"requires\": [{\n \"id\": 827,\n \"qty\": 1\n }]\n },\n 842: {\n \"id\": 842,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [17123, 17124],\n \"requires\": []\n },\n 825: {\n \"id\": 825,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_resistnature\",\n \"ranks\": [17074, 17075, 17076, 17077, 17078],\n \"requires\": []\n },\n 844: {\n \"id\": 844,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_relics_idolofrejuvenation\",\n \"ranks\": [18562],\n \"requires\": [{\n \"id\": 843,\n \"qty\": 5\n }]\n }\n },\n 283: {\n 762: {\n \"id\": 762,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [16814, 16815, 16816, 16817, 16818],\n \"requires\": []\n },\n 761: {\n \"id\": 761,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_natureswrath\",\n \"ranks\": [16689],\n \"requires\": []\n },\n 921: {\n \"id\": 921,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_natureswrath\",\n \"ranks\": [17245, 17247, 17248, 17249],\n \"requires\": [{\n \"id\": 761,\n \"qty\": 1\n }]\n },\n 787: {\n \"id\": 787,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stranglevines\",\n \"ranks\": [16918, 16919, 16920],\n \"requires\": []\n },\n 763: {\n \"id\": 763,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_starfall\",\n \"ranks\": [16821, 16822, 16823, 16824, 16825],\n \"requires\": []\n },\n 791: {\n \"id\": 791,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_staff_01\",\n \"ranks\": [16902, 16903, 16904, 16905, 16906],\n \"requires\": []\n },\n 781: {\n \"id\": 781,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [16833, 16834, 16835],\n \"requires\": []\n },\n 782: {\n \"id\": 782,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_thorns\",\n \"ranks\": [16836, 16839, 16840],\n \"requires\": []\n },\n 788: {\n \"id\": 788,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_crystalball\",\n \"ranks\": [16864],\n \"requires\": [{\n \"id\": 791,\n \"qty\": 5\n }]\n },\n 764: {\n \"id\": 764,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_naturetouchgrow\",\n \"ranks\": [16819, 16820],\n \"requires\": []\n },\n 792: {\n \"id\": 792,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_purge\",\n \"ranks\": [16909, 16910, 16911, 16912, 16913],\n \"requires\": [{\n \"id\": 763,\n \"qty\": 5\n }]\n },\n 784: {\n \"id\": 784,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_arcane_starfire\",\n \"ranks\": [16850, 16923, 16924, 16925, 16926],\n \"requires\": []\n },\n 789: {\n \"id\": 789,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_naturesblessing\",\n \"ranks\": [16880],\n \"requires\": []\n },\n 783: {\n \"id\": 783,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_sentinal\",\n \"ranks\": [16845, 16846, 16847],\n \"requires\": []\n },\n 790: {\n \"id\": 790,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [16896, 16897, 16899, 16900, 16901],\n \"requires\": [{\n \"id\": 789,\n \"qty\": 1\n }]\n },\n 793: {\n \"id\": 793,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_forceofnature\",\n \"ranks\": [24858],\n \"requires\": []\n }\n },\n 301: {\n 944: {\n \"id\": 944,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowbolt\",\n \"ranks\": [17793, 17796, 17801, 17802, 17803],\n \"requires\": []\n },\n 941: {\n \"id\": 941,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_windsofwoe\",\n \"ranks\": [17778, 17779, 17780, 17781, 17782],\n \"requires\": []\n },\n 943: {\n \"id\": 943,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathpact\",\n \"ranks\": [17788, 17789, 17790, 17791, 17792],\n \"requires\": []\n },\n 982: {\n \"id\": 982,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_fire\",\n \"ranks\": [18119, 18120, 18121, 18122, 18123],\n \"requires\": []\n },\n 983: {\n \"id\": 983,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_fire_firebolt\",\n \"ranks\": [18126, 18127],\n \"requires\": []\n },\n 984: {\n \"id\": 984,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_curse\",\n \"ranks\": [18128, 18129],\n \"requires\": []\n },\n 981: {\n \"id\": 981,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_fire_flameshock\",\n \"ranks\": [18130, 18131, 18132, 18133, 18134],\n \"requires\": []\n },\n 963: {\n \"id\": 963,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_shadow_scourgebuild\",\n \"ranks\": [17877],\n \"requires\": []\n },\n 985: {\n \"id\": 985,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_lavaspawn\",\n \"ranks\": [18135, 18136],\n \"requires\": []\n },\n 964: {\n \"id\": 964,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_corpseexplode\",\n \"ranks\": [17917, 17918],\n \"requires\": []\n },\n 965: {\n \"id\": 965,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_soulburn\",\n \"ranks\": [17927, 17929, 17930, 17931, 17932],\n \"requires\": []\n },\n 986: {\n \"id\": 986,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_fire_volcano\",\n \"ranks\": [18096, 18073],\n \"requires\": [{\n \"id\": 985,\n \"qty\": 2\n }]\n },\n 961: {\n \"id\": 961,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [17815, 17833, 17834, 17835, 17836],\n \"requires\": []\n },\n 967: {\n \"id\": 967,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowwordpain\",\n \"ranks\": [17959],\n \"requires\": [{\n \"id\": 981,\n \"qty\": 5\n }]\n },\n 966: {\n \"id\": 966,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_fire_selfdestruct\",\n \"ranks\": [17954, 17955, 17956, 17957, 17958],\n \"requires\": []\n },\n 968: {\n \"id\": 968,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [17962],\n \"requires\": [{\n \"id\": 961,\n \"qty\": 5\n }]\n }\n },\n 302: {\n 1005: {\n \"id\": 1005,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_unsummonbuilding\",\n \"ranks\": [18174, 18175, 18176, 18177, 18178],\n \"requires\": []\n },\n 1003: {\n \"id\": 1003,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_abominationexplosion\",\n \"ranks\": [17810, 17811, 17812, 17813, 17814],\n \"requires\": []\n },\n 1006: {\n \"id\": 1006,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_curseofmannoroth\",\n \"ranks\": [18179, 18180, 18181],\n \"requires\": []\n },\n 1101: {\n \"id\": 1101,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_haunting\",\n \"ranks\": [18213, 18372],\n \"requires\": []\n },\n 1007: {\n \"id\": 1007,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_burningspirit\",\n \"ranks\": [18182, 18183],\n \"requires\": []\n },\n 1004: {\n \"id\": 1004,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_shadow_lifedrain02\",\n \"ranks\": [17804, 17805, 17806, 17807, 17808],\n \"requires\": []\n },\n 1284: {\n \"id\": 1284,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_curseofsargeras\",\n \"ranks\": [18827, 18829, 18830],\n \"requires\": []\n },\n 1001: {\n \"id\": 1001,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_fingerofdeath\",\n \"ranks\": [17783, 17784, 17785, 17786, 17787],\n \"requires\": []\n },\n 1061: {\n \"id\": 1061,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_contagion\",\n \"ranks\": [18288],\n \"requires\": []\n },\n 1021: {\n \"id\": 1021,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_callofbone\",\n \"ranks\": [18218, 18219],\n \"requires\": []\n },\n 1002: {\n \"id\": 1002,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [18094, 18095],\n \"requires\": []\n },\n 1121: {\n \"id\": 1121,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [17864, 18393],\n \"requires\": []\n },\n 1041: {\n \"id\": 1041,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_requiem\",\n \"ranks\": [18265],\n \"requires\": []\n },\n 1081: {\n \"id\": 1081,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [18223],\n \"requires\": [{\n \"id\": 1061,\n \"qty\": 1\n }]\n },\n 1082: {\n \"id\": 1082,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [18310, 18311, 18312, 18313],\n \"requires\": [{\n \"id\": 1081,\n \"qty\": 1\n }]\n },\n 1042: {\n \"id\": 1042,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadetruesight\",\n \"ranks\": [18271, 18272, 18273, 18274, 18275],\n \"requires\": [{\n \"id\": 1041,\n \"qty\": 1\n }]\n },\n 1022: {\n \"id\": 1022,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_darkritual\",\n \"ranks\": [18220],\n \"requires\": []\n }\n },\n 303: {\n 1221: {\n \"id\": 1221,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"inv_stone_04\",\n \"ranks\": [18692, 18693],\n \"requires\": []\n },\n 1222: {\n \"id\": 1222,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_summonimp\",\n \"ranks\": [18694, 18695, 18696],\n \"requires\": []\n },\n 1223: {\n \"id\": 1223,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_metamorphosis\",\n \"ranks\": [18697, 18698, 18699, 18700, 18701],\n \"requires\": []\n },\n 1224: {\n \"id\": 1224,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_lifedrain\",\n \"ranks\": [18703, 18704],\n \"requires\": []\n },\n 1225: {\n \"id\": 1225,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_summonvoidwalker\",\n \"ranks\": [18705, 18706, 18707],\n \"requires\": []\n },\n 1242: {\n \"id\": 1242,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_magicalsentry\",\n \"ranks\": [18731, 18743, 18744, 18745, 18746],\n \"requires\": []\n },\n 1243: {\n \"id\": 1243,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_summonsuccubus\",\n \"ranks\": [18754, 18755, 18756],\n \"requires\": []\n },\n 1226: {\n \"id\": 1226,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_removecurse\",\n \"ranks\": [18708],\n \"requires\": []\n },\n 1241: {\n \"id\": 1241,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_antishadow\",\n \"ranks\": [18748, 18749, 18750, 18751, 18752],\n \"requires\": []\n },\n 1227: {\n \"id\": 1227,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_impphaseshift\",\n \"ranks\": [18709, 18710],\n \"requires\": [{\n \"id\": 1226,\n \"qty\": 1\n }]\n },\n 1262: {\n \"id\": 1262,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowworddominate\",\n \"ranks\": [18769, 18770, 18771, 18772, 18773],\n \"requires\": []\n },\n 1283: {\n \"id\": 1283,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_shadow_enslavedemon\",\n \"ranks\": [18821, 18822, 18823, 18824, 18825],\n \"requires\": []\n },\n 1281: {\n \"id\": 1281,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_psychicscream\",\n \"ranks\": [18788],\n \"requires\": []\n },\n 1261: {\n \"id\": 1261,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_ammo_firetar\",\n \"ranks\": [18767, 18768],\n \"requires\": []\n },\n 1244: {\n \"id\": 1244,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowpact\",\n \"ranks\": [23785, 23822, 23823, 23824, 23825],\n \"requires\": [{\n \"id\": 1262,\n \"qty\": 5\n }]\n },\n 1282: {\n \"id\": 1282,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_gathershadows\",\n \"ranks\": [19028],\n \"requires\": [{\n \"id\": 1281,\n \"qty\": 1\n }]\n },\n 1263: {\n \"id\": 1263,\n \"row\": 6,\n \"col\": 2,\n \"icon\": \"inv_misc_gem_sapphire_01\",\n \"ranks\": [18774, 18775],\n \"requires\": []\n }\n },\n 361: {\n 1382: {\n \"id\": 1382,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [19552, 19553, 19554, 19555, 19556],\n \"requires\": []\n },\n 1389: {\n \"id\": 1389,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [19583, 19584, 19585, 19586, 19587],\n \"requires\": []\n },\n 1624: {\n \"id\": 1624,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_eyeoftheowl\",\n \"ranks\": [19557, 19558],\n \"requires\": []\n },\n 1381: {\n \"id\": 1381,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_hunter_aspectofthemonkey\",\n \"ranks\": [19549, 19550, 19551, 24386, 24387],\n \"requires\": []\n },\n 1395: {\n \"id\": 1395,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_misc_pelt_bear_03\",\n \"ranks\": [19609, 19610, 19612],\n \"requires\": []\n },\n 1625: {\n \"id\": 1625,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_hunter_beastsoothe\",\n \"ranks\": [24443, 19575],\n \"requires\": []\n },\n 1384: {\n \"id\": 1384,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_mount_jungletiger\",\n \"ranks\": [19559, 19560],\n \"requires\": []\n },\n 1391: {\n \"id\": 1391,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_druid_dash\",\n \"ranks\": [19596],\n \"requires\": []\n },\n 1396: {\n \"id\": 1396,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_bullrush\",\n \"ranks\": [19616, 19617, 19618, 19619, 19620],\n \"requires\": []\n },\n 1385: {\n \"id\": 1385,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_mendpet\",\n \"ranks\": [19572, 19573],\n \"requires\": []\n },\n 1393: {\n \"id\": 1393,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_04\",\n \"ranks\": [19598, 19599, 19600, 19601, 19602],\n \"requires\": []\n },\n 1388: {\n \"id\": 1388,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_druid_demoralizingroar\",\n \"ranks\": [19578, 20895],\n \"requires\": []\n },\n 1387: {\n \"id\": 1387,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_devour\",\n \"ranks\": [19577],\n \"requires\": []\n },\n 1390: {\n \"id\": 1390,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [19590, 19592],\n \"requires\": []\n },\n 1397: {\n \"id\": 1397,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_03\",\n \"ranks\": [19621, 19622, 19623, 19624, 19625],\n \"requires\": [{\n \"id\": 1393,\n \"qty\": 5\n }]\n },\n 1386: {\n \"id\": 1386,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_druid_ferociousbite\",\n \"ranks\": [19574],\n \"requires\": [{\n \"id\": 1387,\n \"qty\": 1\n }]\n }\n },\n 362: {\n 1623: {\n \"id\": 1623,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"inv_misc_head_dragon_black\",\n \"ranks\": [24293, 24294, 24295],\n \"requires\": []\n },\n 1301: {\n \"id\": 1301,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_prayerofhealing\",\n \"ranks\": [19151, 19152, 19153],\n \"requires\": []\n },\n 1311: {\n \"id\": 1311,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [19295, 19297, 19298, 19301, 19300],\n \"requires\": []\n },\n 1304: {\n \"id\": 1304,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stranglevines\",\n \"ranks\": [19184, 19387, 19388, 19389, 19390],\n \"requires\": []\n },\n 1621: {\n \"id\": 1621,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [19159, 19160],\n \"requires\": []\n },\n 1305: {\n \"id\": 1305,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_rogue_trip\",\n \"ranks\": [19228, 19232, 19233, 19234, 19235],\n \"requires\": []\n },\n 1306: {\n \"id\": 1306,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_timestop\",\n \"ranks\": [19239, 19245],\n \"requires\": []\n },\n 1622: {\n \"id\": 1622,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [19255, 19256, 19257, 19258, 19259],\n \"requires\": []\n },\n 1308: {\n \"id\": 1308,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_whirlwind\",\n \"ranks\": [19263],\n \"requires\": []\n },\n 1322: {\n \"id\": 1322,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_ensnare\",\n \"ranks\": [19376, 19377],\n \"requires\": []\n },\n 1310: {\n \"id\": 1310,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_kick\",\n \"ranks\": [19290, 19294, 24283],\n \"requires\": []\n },\n 1309: {\n \"id\": 1309,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"ability_rogue_feigndeath\",\n \"ranks\": [19286, 19287],\n \"requires\": []\n },\n 1321: {\n \"id\": 1321,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [19370, 19371, 19373],\n \"requires\": []\n },\n 1312: {\n \"id\": 1312,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_warrior_challange\",\n \"ranks\": [19306],\n \"requires\": [{\n \"id\": 1308,\n \"qty\": 1\n }]\n },\n 1303: {\n \"id\": 1303,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_invisibilty\",\n \"ranks\": [19168, 19180, 19181, 24296, 24297],\n \"requires\": []\n },\n 1325: {\n \"id\": 1325,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_spear_02\",\n \"ranks\": [19386],\n \"requires\": [{\n \"id\": 1321,\n \"qty\": 3\n }]\n }\n },\n 363: {\n 1341: {\n \"id\": 1341,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [19407, 19412, 19413, 19414, 19415],\n \"requires\": []\n },\n 1342: {\n \"id\": 1342,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [19416, 19417, 19418, 19419, 19420],\n \"requires\": []\n },\n 1343: {\n \"id\": 1343,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_hunter_snipershot\",\n \"ranks\": [19421, 19422, 19423, 19424, 19425],\n \"requires\": []\n },\n 1344: {\n \"id\": 1344,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_searingarrow\",\n \"ranks\": [19426, 19427, 19429, 19430, 19431],\n \"requires\": []\n },\n 1345: {\n \"id\": 1345,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"inv_spear_07\",\n \"ranks\": [19434],\n \"requires\": []\n },\n 1346: {\n \"id\": 1346,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_impalingbolt\",\n \"ranks\": [19454, 19455, 19456, 19457, 19458],\n \"requires\": []\n },\n 1352: {\n \"id\": 1352,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_townwatch\",\n \"ranks\": [19498, 19499, 19500],\n \"requires\": []\n },\n 1348: {\n \"id\": 1348,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_quickshot\",\n \"ranks\": [19464, 19465, 19466, 19467, 19468],\n \"requires\": []\n },\n 1349: {\n \"id\": 1349,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_piercedamage\",\n \"ranks\": [19485, 19487, 19488, 19489, 19490],\n \"requires\": [{\n \"id\": 1344,\n \"qty\": 5\n }]\n },\n 1353: {\n \"id\": 1353,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_golemstormbolt\",\n \"ranks\": [19503],\n \"requires\": []\n },\n 1347: {\n \"id\": 1347,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_upgrademoonglaive\",\n \"ranks\": [19461, 19462, 24691],\n \"requires\": []\n },\n 1351: {\n \"id\": 1351,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_hunter_criticalshot\",\n \"ranks\": [19491, 19493, 19494],\n \"requires\": []\n },\n 1362: {\n \"id\": 1362,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_weapon_rifle_06\",\n \"ranks\": [19507, 19508, 19509, 19510, 19511],\n \"requires\": []\n },\n 1361: {\n \"id\": 1361,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_trueshot\",\n \"ranks\": [19506],\n \"requires\": [{\n \"id\": 1347,\n \"qty\": 3\n }]\n }\n },\n 381: {\n 1401: {\n \"id\": 1401,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_fistofjustice\",\n \"ranks\": [20042, 20045, 20046, 20047, 20048],\n \"requires\": []\n },\n 1407: {\n \"id\": 1407,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [20101, 20102, 20103, 20104, 20105],\n \"requires\": []\n },\n 1631: {\n \"id\": 1631,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_holy_righteousfury\",\n \"ranks\": [25956, 25957],\n \"requires\": []\n },\n 1464: {\n \"id\": 1464,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_holysmite\",\n \"ranks\": [20335, 20336, 20337],\n \"requires\": []\n },\n 1403: {\n \"id\": 1403,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [20060, 20061, 20062, 20063, 20064],\n \"requires\": []\n },\n 1633: {\n \"id\": 1633,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_vindication\",\n \"ranks\": [9452, 26016, 26021],\n \"requires\": []\n },\n 1411: {\n \"id\": 1411,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_retributionaura\",\n \"ranks\": [20117, 20118, 20119, 20120, 20121],\n \"requires\": []\n },\n 1481: {\n \"id\": 1481,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_warrior_innerrage\",\n \"ranks\": [20375],\n \"requires\": []\n },\n 1634: {\n \"id\": 1634,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_persuitofjustice\",\n \"ranks\": [26022, 26023],\n \"requires\": []\n },\n 1632: {\n \"id\": 1632,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_eyeforaneye\",\n \"ranks\": [9799, 25988],\n \"requires\": []\n },\n 1405: {\n \"id\": 1405,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_auraoflight\",\n \"ranks\": [20091, 20092],\n \"requires\": []\n },\n 1410: {\n \"id\": 1410,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_hammer_04\",\n \"ranks\": [20111, 20112, 20113],\n \"requires\": []\n },\n 1409: {\n \"id\": 1409,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_mindvision\",\n \"ranks\": [20218],\n \"requires\": []\n },\n 1402: {\n \"id\": 1402,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"ability_racial_avatar\",\n \"ranks\": [20049, 20056, 20057, 20058, 20059],\n \"requires\": [{\n \"id\": 1411,\n \"qty\": 5\n }]\n },\n 1441: {\n \"id\": 1441,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_prayerofhealing\",\n \"ranks\": [20066],\n \"requires\": []\n }\n },\n 382: {\n 1450: {\n \"id\": 1450,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_golemthunderclap\",\n \"ranks\": [20262, 20263, 20264, 20265, 20266],\n \"requires\": []\n },\n 1449: {\n \"id\": 1449,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_sleep\",\n \"ranks\": [20257, 20258, 20259, 20260, 20261],\n \"requires\": []\n },\n 1432: {\n \"id\": 1432,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_arcane_blink\",\n \"ranks\": [20205, 20206, 20207, 20209, 20208],\n \"requires\": []\n },\n 1463: {\n \"id\": 1463,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [20224, 20225, 20330, 20331, 20332],\n \"requires\": []\n },\n 1444: {\n \"id\": 1444,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_holybolt\",\n \"ranks\": [20237, 20238, 20239],\n \"requires\": []\n },\n 1435: {\n \"id\": 1435,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_innerfire\",\n \"ranks\": [26573],\n \"requires\": []\n },\n 1443: {\n \"id\": 1443,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_holy_layonhands\",\n \"ranks\": [20234, 20235],\n \"requires\": []\n },\n 1628: {\n \"id\": 1628,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_unyieldingfaith\",\n \"ranks\": [9453, 25836],\n \"requires\": []\n },\n 1461: {\n \"id\": 1461,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_greaterheal\",\n \"ranks\": [20210, 20212, 20213, 20214, 20215],\n \"requires\": []\n },\n 1446: {\n \"id\": 1446,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofwisdom\",\n \"ranks\": [20244, 20245],\n \"requires\": []\n },\n 1433: {\n \"id\": 1433,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_holy_heal\",\n \"ranks\": [20216],\n \"requires\": [{\n \"id\": 1461,\n \"qty\": 5\n }]\n },\n 1465: {\n \"id\": 1465,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_healingaura\",\n \"ranks\": [20359, 20360, 20361],\n \"requires\": []\n },\n 1627: {\n \"id\": 1627,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_holy_power\",\n \"ranks\": [5923, 5924, 5925, 5926, 25829],\n \"requires\": []\n },\n 1502: {\n \"id\": 1502,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_searinglight\",\n \"ranks\": [20473],\n \"requires\": [{\n \"id\": 1433,\n \"qty\": 1\n }]\n }\n },\n 383: {\n 1422: {\n \"id\": 1422,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_devotionaura\",\n \"ranks\": [20138, 20139, 20140, 20141, 20142],\n \"requires\": []\n },\n 1421: {\n \"id\": 1421,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_defend\",\n \"ranks\": [20127, 20130, 20135, 20136, 20137],\n \"requires\": []\n },\n 1630: {\n \"id\": 1630,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [20189, 20192, 20193],\n \"requires\": []\n },\n 1425: {\n \"id\": 1425,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofprotection\",\n \"ranks\": [20174, 20175],\n \"requires\": []\n },\n 1423: {\n \"id\": 1423,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [20143, 20144, 20145, 20146, 20147],\n \"requires\": []\n },\n 1442: {\n \"id\": 1442,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [20217],\n \"requires\": []\n },\n 1501: {\n \"id\": 1501,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_sealoffury\",\n \"ranks\": [20468, 20469, 20470],\n \"requires\": []\n },\n 1424: {\n \"id\": 1424,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [20148, 20149, 20150],\n \"requires\": [{\n \"id\": 1421,\n \"qty\": 5\n }]\n },\n 1629: {\n \"id\": 1629,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [20096, 20097, 20098, 20099, 20100],\n \"requires\": []\n },\n 1521: {\n \"id\": 1521,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofmight\",\n \"ranks\": [20487, 20488, 20489],\n \"requires\": []\n },\n 1626: {\n \"id\": 1626,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_mindsooth\",\n \"ranks\": [20254, 20255, 20256],\n \"requires\": []\n },\n 1431: {\n \"id\": 1431,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_lightningshield\",\n \"ranks\": [20911],\n \"requires\": []\n },\n 1426: {\n \"id\": 1426,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_blessingofstrength\",\n \"ranks\": [20177, 20179, 20181, 20180, 20182],\n \"requires\": []\n },\n 1429: {\n \"id\": 1429,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_sword_20\",\n \"ranks\": [20196, 20197, 20198, 20199, 20200],\n \"requires\": []\n },\n 1430: {\n \"id\": 1430,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofprotection\",\n \"ranks\": [20925],\n \"requires\": [{\n \"id\": 1431,\n \"qty\": 1\n }]\n }\n }\n}\n\nexport const talentsById: {[key: number]: TalentData} = {}\nexport const talentsBySpecArray: {[key: number]: TalentData[]} = {}\nexport const talentToSpec: {[key: number]: number} = {}\n\nfor (let specId in talentsBySpec) {\n for (let talentId in talentsBySpec[specId]) {\n talentsById[talentId] = talentsBySpec[specId][talentId]\n talentsBySpecArray[specId] = Object.values(talentsBySpec[specId])\n talentToSpec[talentId] = parseInt(specId, 10)\n }\n}\n","export const classes: ClassData[] = [\n { \n id: 1,\n name: 'Warrior',\n icon: 'class_warrior',\n specs: [161, 164, 163]\n },\n { \n id: 2,\n name: 'Paladin',\n icon: 'class_paladin',\n specs: [382, 383, 381]\n },\n { \n id: 3,\n name: 'Hunter',\n icon: 'class_hunter',\n specs: [361, 363, 362]\n },\n { \n id: 4,\n name: 'Rogue',\n icon: 'class_rogue',\n specs: [182, 181, 183]\n },\n { \n id: 5,\n name: 'Priest',\n icon: 'class_priest',\n specs: [201, 202, 203]\n },\n { \n id: 7,\n name: 'Shaman',\n icon: 'class_shaman',\n specs: [261, 263, 262]\n },\n { \n id: 8,\n name: 'Mage',\n icon: 'class_mage',\n specs: [81, 41, 61]\n },\n { \n id: 9,\n name: 'Warlock',\n icon: 'class_warlock',\n specs: [302, 303, 301]\n },\n { \n id: 11,\n name: 'Druid',\n icon: 'class_druid',\n specs: [283, 281, 282]\n },\n]\n\nexport const classById: {[key: number]: ClassData} = \n classes.reduce((previousValue: object, currentValue: ClassData) => {\n return {\n ...previousValue,\n [currentValue.id]: currentValue\n }\n }, {}) \n\nexport const classByName: {[key: string]: ClassData} = \n classes.reduce((previousValue: object, currentValue: ClassData) => {\n return {\n ...previousValue,\n [currentValue.name.toLowerCase()]: currentValue\n }\n }, {})\n","import { List, Map, fromJS } from 'immutable'\nimport { \n talentsBySpec, \n talentToSpec, \n talentsBySpecArray \n} from '../data/talents';\nimport { classByName } from '../data/classes'\n\nexport const MAX_POINTS = 51\nexport const MAX_ROWS = 7\n\nexport const SORT_TALENTS = (a: TalentData, b: TalentData) => {\n if (a.row === b.row) {\n return a.col - b.col\n }\n return a.row - b.row\n}\n\n/**\n * Returns the overall points spent in the tree.\n */\nexport function getPointsInSpec(specId: number, known: Map): number {\n // TODO: Hard to test this method when referencing talents from a file. Improve this.\n return Object.values(talentsBySpec[specId]).reduce((prev: number, current: TalentData) => {\n return prev + known.get(current.id, 0)\n }, 0)\n}\n\nexport function calcAvailablePoints(known: Map): number {\n return Math.max(0, MAX_POINTS - known.reduce((prev, current) => prev + current, 0))\n}\n\n/**\n * Returns whether a talent's other talent requirements are met.\n */\nexport function calcMeetsRequirements(talent: TalentData, known: Map): boolean {\n if (talent.requires.length === 0) {\n return true\n }\n return talent.requires.reduce((prev, req) => {\n if (!prev) return false\n return known.get(req.id, 0) >= req.qty\n }, true)\n}\n\nexport const canLearnTalent = (known: Map, talent: TalentData): boolean => {\n // Reached the max rank?\n if (known.get(talent.id, 0) >= talent.ranks.length) {\n return false\n }\n\n // Spend a maximum of 51 points\n if (calcAvailablePoints(known) === 0) {\n return false\n }\n \n // Support for specific Talent dependency requirement.\n if (talent.requires.length > 0 && !calcMeetsRequirements(talent, known)) {\n return false\n }\n \n // Check we have the required amount of points spent in the tree for this talent\n const requiredPoints = talent.row * 5\n const pointsInSpec = getPointsInSpec(talentToSpec[talent.id], known)\n if (requiredPoints > pointsInSpec) {\n return false\n }\n\n return true\n}\n\n/**\n * Adds a single talent point to the Map, if possible.\n */\nexport const addTalentPoint = (known: Map, talent: TalentData): Map => {\n const currentPoints = known.get(talent.id, 0)\n \n if (!canLearnTalent(known, talent)) {\n return known\n }\n\n return known.set(talent.id, currentPoints + 1)\n}\n\n/**\n * Removes a single talent point from the Map, if possible.\n */\nexport const removeTalentPoint = (known: Map, talent: TalentData): Map => {\n const currentPoints = known.get(talent.id, 0)\n const specId = talentToSpec[talent.id]\n\n // No points to reduce for this talent\n if (currentPoints === 0) {\n console.warn('no points to reduce')\n return known\n }\n \n let isDependency = false\n let highestRow = 0\n let cumulativePointsPerRow = {}\n\n known.forEach((points, talentId) => {\n const t = talentsBySpec[specId][talentId]\n if (t && points > 0) {\n isDependency = isDependency || t.requires.some((req) => req.id === talent.id)\n if (t.row > highestRow) {\n console.info('new highest row:', t)\n }\n highestRow = t.row > highestRow ? t.row : highestRow\n for (let row = t.row; row < MAX_ROWS; row++) {\n cumulativePointsPerRow[row] = (cumulativePointsPerRow[row] || 0) + points\n }\n }\n })\n\n // Check if removing this talent would not break the requirements for talents spent in later rows\n const pointsUntilHighestRow = cumulativePointsPerRow[highestRow - 1]\n const targetPointsHighestRow = highestRow * 5\n if (talent.row < highestRow && pointsUntilHighestRow - 1 < targetPointsHighestRow) {\n console.warn('would not break the requirements for talents spent in later rows', { \n talent,\n highestRow,\n pointsUntilHighestRow,\n targetPointsHighestRow\n })\n return known\n }\n\n // Prevent if another talent depends on this \n if (isDependency) {\n console.warn('is dependency')\n return known\n }\n\n return currentPoints === 1 \n ? known.remove(talent.id)\n : known.set(talent.id, currentPoints - 1)\n}\n\n/**\n * Either adds or removes a talent point based on the modifier.\n */\nexport const modifyTalentPoint = (known: Map, talent: TalentData, modifier: 1 | -1): Map => {\n if (modifier === 1) {\n return addTalentPoint(known, talent)\n } else {\n return removeTalentPoint(known, talent)\n }\n}\n\n// TODO\nexport function parsePointString(str: string): List> {\n const list: Array = []\n const trees = str.split('-')\n\n trees.forEach((stringForTree, index) => {\n const points = stringForTree.split('').map(a => parseInt(a, 10))\n list[index] = points\n })\n\n return fromJS(list)\n}\n\n/**\n * Encodes a Map of known talents into a URL-friendly string.\n */\nexport function encodeKnownTalents(known: Map, className: string): string {\n let string = ''\n const { specs } = classByName[className]\n for (let i = 0; i < specs.length; i++) {\n const specId = specs[i]\n const talents = talentsBySpecArray[specId].sort(SORT_TALENTS)\n string += i > 0 ? '-' : ''\n string += removeTrailingCharacters(\n talents.map((talent) => known.get(talent.id, 0)).join(''),\n '0'\n )\n }\n return removeTrailingCharacters(string, '-')\n}\n\n/**\n * Decodes a string of points into a Map of talents.\n */\nexport function decodeKnownTalents(pointString: string, className: string): Map {\n console.log(pointString, className)\n\n const { specs } = classByName[className]\n let known = Map()\n\n // TODO: Make sure we validate the point string\n const parts = pointString.split('-')\n for (let i = 0; i < parts.length; i++) {\n const specId = specs[i]\n const specPointStr = parts[i]\n console.log(specPointStr, { specId })\n const talents = talentsBySpecArray[specId].sort(SORT_TALENTS)\n\n for (let y = 0; y < specPointStr.length; y++) {\n const talent = talents[y]\n const points = parseInt(specPointStr[y], 10)\n \n // Validation: break out loop if there's more points in the string than this talent can have\n if (points > talent.ranks.length) {\n break\n }\n \n if (points > 0) {\n console.log(`Spent ${points} in ${talent.id}`)\n known = known.set(talent.id, points)\n }\n }\n }\n\n return known\n}\n\n/**\n * Removes repeated characters from the end of a string.\n */\nfunction removeTrailingCharacters(str: string, char: string): string {\n while (str[str.length - 1] === char) {\n str = str.slice(0, -1)\n }\n return str\n}","import './TalentSlot.scss'\nimport React, { FC } from 'react'\nimport { Icon } from './Icon'\nimport classNames from 'classnames'\nimport { Map } from 'immutable';\nimport { getPointsInSpec, calcMeetsRequirements } from '../lib/tree';\n\ninterface Props {\n talent: TalentData\n specId: number\n availablePoints: number\n /** All spent talents */\n knownTalents: Map\n /** Disabled override */\n disabled?: boolean\n onClick?: (talentId: number) => void\n onRightClick?: (talentId: number) => void\n}\n\nconst defaultProps: Partial = {\n onClick: () => undefined,\n onRightClick: () => undefined\n}\n\nconst isAvailable = (talent: TalentData, specId: number, knownTalents: Map): boolean => {\n // Dependent on other talents?\n if (!calcMeetsRequirements(talent, knownTalents)) {\n return false\n }\n const pointsInSpec = getPointsInSpec(specId, knownTalents)\n return talent.row * 5 <= pointsInSpec\n}\n\nexport const TalentSlot: FC = (props) => {\n const { talent, specId, knownTalents, availablePoints } = props\n const points = knownTalents.get(talent.id, 0)\n const showPoints = points > 0 || availablePoints > 0\n const disabled = props.disabled || !showPoints || !isAvailable(talent, specId, knownTalents)\n\n const containerClassNames = classNames('talent', {\n 'talent--disabled': !!disabled,\n 'talent--available': !disabled && points < talent.ranks.length,\n 'talent--maxed': points >= talent.ranks.length || (points > 0 && availablePoints === 0)\n })\n\n const pointsClassNames = classNames('point-label', {\n 'point-label--enabled': !disabled\n })\n\n const handleContextMenu = (e) => {\n if (props.onRightClick) props.onRightClick(talent.id)\n e.preventDefault()\n return false\n }\n\n return (\n
props.onClick(talent.id) : () => {}}\n onContextMenu={handleContextMenu}\n >\n
\n \n\n {showPoints && !disabled &&\n
\n {points}\n /{talent.ranks.length}\n
\n }\n
\n )\n}\n\nTalentSlot.defaultProps = defaultProps\n\n;(TalentSlot as any).whyDidYouRender = true","import './Arrow.scss'\nimport React, { FC } from 'react'\nimport classNames from 'classnames'\n\ninterface Props {\n from: TalentData\n to: TalentData\n active?: boolean\n}\n\nexport const Arrow: FC = ({ from, to, active = false }) => {\n const length = to.row === from.row \n ? Math.abs(to.col - from.col)\n : to.row - from.row\n\n const props = {\n 'data-col': from.col,\n 'data-row': from.row,\n 'data-length': length,\n }\n\n const className = classNames('arrow', {\n 'arrow--active': active,\n 'arrow--down': to.row > from.row,\n 'arrow--right': to.row === from.row && to.col > from.col,\n 'arrow--left': to.row === from.row && to.col < from.col,\n 'arrow--right-down': to.row === from.row + 1 && to.col === from.col + 1\n })\n\n return
\n}","import React, { useCallback } from 'react'\nimport { Map } from 'immutable'\nimport { TalentSlot } from './TalentSlot';\nimport { getPointsInSpec, canLearnTalent } from '../lib/tree';\nimport { talentsBySpec, specNames, talentsById } from '../data/talents'\nimport { Arrow } from './Arrow'\n\ninterface Props {\n specId: number\n availablePoints: number\n knownTalents: Map\n onTalentPress: TalentClickHandler\n}\n\nexport const TalentTree: React.FC = ({ specId, knownTalents, availablePoints, onTalentPress }) => {\n const talents = Object.values(talentsBySpec[specId])\n\n const handleClick = useCallback(\n (talentId) => onTalentPress(specId, talentId, 1), \n [specId, onTalentPress]\n )\n const handleRightClick = useCallback(\n (talentId) => onTalentPress(specId, talentId, -1), \n [specId, onTalentPress]\n )\n\n const bodyStyle = { \n backgroundImage: `url(${require(`../images/specs/${specId}.jpg`)})`\n }\n\n const arrows = talents\n .filter((talent) => talent.requires.length > 0)\n .map((talent) => {\n return 0 || canLearnTalent(knownTalents, talent)}\n />\n })\n\n return (\n
\n
\n

{specNames[specId]} ({getPointsInSpec(specId, knownTalents)})

\n
\n\n
\n {talents.map((talent) => \n \n )}\n\n {arrows}\n
\n
\n )\n}\n\n;(TalentTree as any).whyDidYouRender = true","import React from 'react'\nimport { Map } from 'immutable'\nimport { TalentTree } from './TalentTree'\nimport { \n modifyTalentPoint, \n calcAvailablePoints,\n encodeKnownTalents\n} from '../lib/tree'\nimport { talentsBySpec } from '../data/talents'\nimport { classByName } from '../data/classes'\nimport { History } from 'history'\n\ninterface Props {\n selectedClass: string\n history: History\n initialTalents?: Map\n}\n\nconst EMPTY_TALENTS = Map()\n // .set(30, 5)\n // .set(26, 5)\n // .set(34, 5)\n // .set(28, 2)\n // .set(27, 3)\n // .set(33, 1)\n // .set(29, 1)\n // .set(32, 1)\n\nexport class Calculator extends React.PureComponent {\n static whyDidYouRender = true\n\n state = {\n knownTalents: EMPTY_TALENTS\n }\n\n componentDidMount() {\n if (this.props.initialTalents) {\n this.setState({ knownTalents: this.props.initialTalents })\n this.updateURL(this.props.initialTalents)\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.selectedClass !== this.props.selectedClass) {\n this.setState({ \n knownTalents: EMPTY_TALENTS \n })\n }\n }\n\n updateURL(knownTalents: Map) {\n const { selectedClass } = this.props\n const pointString = encodeKnownTalents(knownTalents, selectedClass)\n this.props.history.replace(`/${selectedClass}` + (pointString ? `/${pointString}` : ''))\n }\n \n handleTalentPress = (specId: number, talentId: number, modifier: 1 | -1) => {\n const talent = talentsBySpec[specId][talentId]\n console.log('Clicked talent: ' + talentId)\n\n const newKnownTalents = modifyTalentPoint(this.state.knownTalents, talent, modifier)\n if (newKnownTalents !== this.state.knownTalents) {\n this.updateURL(newKnownTalents)\n }\n this.setState({ knownTalents: newKnownTalents })\n }\n\n render() {\n const { selectedClass } = this.props\n const { knownTalents } = this.state\n\n const classData = classByName[selectedClass]\n const availablePoints = calcAvailablePoints(knownTalents)\n\n return (\n
\n
\n {classData.specs.map((specId) => (\n \n ))}\n
\n\n
\n Points: {availablePoints}\n
\n\n \n
\n )\n }\n}\n\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { classByName } from '../data/classes'\nimport { Icon } from './Icon'\nimport classNames from 'classnames'\n\ninterface Props {\n /** Name of the selected class, lowercase */\n selected?: string\n}\n\nconst classNameForItem = (c: ClassData, selected: string) => classNames('class-picker__class', {\n 'class-picker__class--active': c.name.toLowerCase() === selected,\n 'class-picker__class--inactive': !!selected && c.name.toLowerCase() !== selected\n})\n\nexport class ClassPicker extends React.PureComponent {\n static whyDidYouRender = true\n\n render() {\n const { selected } = this.props\n\n const cn = classNames('class-picker', {\n 'class-picker--has-selection': !!selected\n })\n \n return (\n
    \n {Object.values(classByName).map((c) => \n
  • \n \n \n \n
  • \n )}\n
\n )\n }\n}\n","import React from 'react'\nimport { Calculator } from './Calculator'\nimport { ClassPicker } from './ClassPicker'\nimport { match } from 'react-router-dom'\nimport { RouteComponentProps } from 'react-router'\nimport { decodeKnownTalents } from '../lib/tree'\nimport { classByName } from '../data/classes'\n\ninterface Props extends RouteComponentProps {\n match: match<{ \n selectedClass: string\n pointString: string\n }>\n}\n\nexport class IndexRoute extends React.PureComponent {\n static whyDidYouRender = true\n\n componentDidMount() {\n const { selectedClass } = this.props.match.params\n if (selectedClass && !classByName[selectedClass]) {\n this.props.history.replace('/')\n }\n }\n\n render() {\n const { match, history } = this.props\n const { selectedClass, pointString } = match.params\n\n if (selectedClass && !classByName[selectedClass]) {\n return null\n }\n\n return (\n
\n \n \n {selectedClass && \n \n }\n
\n )\n }\n}","import React from 'react'\nimport './App.scss'\nimport { IndexRoute } from './components/IndexRoute'\nimport { BrowserRouter as Router, Route } from 'react-router-dom'\n\nconst App: React.FC = () => {\n return (\n \n
\n \n
\n
\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport * as serviceWorker from './serviceWorker'\n\nif (process.env.NODE_ENV !== 'production') {\n const whyDidYouRender = require('@welldone-software/why-did-you-render/dist/no-classes-transpile/umd/whyDidYouRender.min.js')\n whyDidYouRender(React)\n}\n\nReactDOM.render(, document.getElementById('root'))\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["images/specs sync /^/.//.*/.jpg$","images/specs/161.jpg","images/specs/163.jpg","images/specs/164.jpg","images/specs/181.jpg","images/specs/182.jpg","images/specs/183.jpg","images/specs/201.jpg","images/specs/202.jpg","images/specs/203.jpg","images/specs/261.jpg","images/specs/262.jpg","images/specs/263.jpg","images/specs/281.jpg","images/specs/282.jpg","images/specs/283.jpg","images/specs/301.jpg","images/specs/302.jpg","images/specs/303.jpg","images/specs/361.jpg","images/specs/362.jpg","images/specs/363.jpg","images/specs/381.jpg","images/specs/382.jpg","images/specs/383.jpg","images/specs/41.jpg","images/specs/61.jpg","images/specs/81.jpg","components/Icon.tsx","data/talents.ts","data/classes.ts","lib/tree.ts","components/TalentSlot.tsx","components/Arrow.tsx","components/TalentTree.tsx","components/Calculator.tsx","components/ClassPicker.tsx","components/IndexRoute.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["map","./161.jpg","./163.jpg","./164.jpg","./181.jpg","./182.jpg","./183.jpg","./201.jpg","./202.jpg","./203.jpg","./261.jpg","./262.jpg","./263.jpg","./281.jpg","./282.jpg","./283.jpg","./301.jpg","./302.jpg","./303.jpg","./361.jpg","./362.jpg","./363.jpg","./381.jpg","./382.jpg","./383.jpg","./41.jpg","./61.jpg","./81.jpg","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","p","Icon","_ref","name","_ref$size","size","_ref$golden","golden","children","className","classNames","concat","icon--golden","bgStyle","backgroundImage","react_default","a","createElement","style","specNames","41","61","81","161","163","164","181","182","183","201","202","203","261","262","263","281","282","283","301","302","303","361","362","363","381","382","383","talentsBySpec","26","row","col","icon","ranks","requires","30","34","28","27","1141","31","29","23","25","24","1639","33","32","qty","35","36","70","37","1649","73","38","62","65","69","63","741","66","67","72","64","68","71","74","76","80","78","1650","75","82","85","83","88","1142","86","77","421","87","124","130","127","126","641","128","131","137","121","136","662","132","133","125","123","134","129","135","1601","138","142","140","141","153","145","147","144","146","151","143","150","152","149","702","148","158","157","159","166","160","661","154","1581","1542","155","168","165","1543","1541","156","167","186","187","204","222","206","221","184","223","242","1703","1122","205","276","272","270","273","274","277","278","269","682","268","280","279","241","1700","247","244","245","246","1123","1701","284","265","681","1702","342","345","352","344","343","321","348","347","346","341","350","1201","351","1202","322","410","406","401","411","1181","442","1636","1635","408","403","413","1561","402","404","1637","465","464","466","482","463","542","481","501","483","881","461","541","484","1638","462","521","564","563","572","1640","561","574","575","562","567","1642","1645","1641","565","721","573","586","593","589","581","595","583","587","582","1646","588","594","1648","591","592","590","614","612","609","613","605","607","610","617","601","602","615","1647","611","616","1643","901","796","795","799","797","794","807","804","798","802","803","800","801","805","1162","808","809","821","822","824","823","826","829","827","841","843","830","831","828","842","825","844","762","761","921","787","763","791","781","782","788","764","792","784","789","783","790","793","944","941","943","982","983","984","981","963","985","964","965","986","961","967","966","968","1005","1003","1006","1101","1007","1004","1284","1001","1061","1021","1002","1121","1041","1081","1082","1042","1022","1221","1222","1223","1224","1225","1242","1243","1226","1241","1227","1262","1283","1281","1261","1244","1282","1263","1382","1389","1624","1381","1395","1625","1384","1391","1396","1385","1393","1388","1387","1390","1397","1386","1623","1301","1311","1304","1621","1305","1306","1622","1308","1322","1310","1309","1321","1312","1303","1325","1341","1342","1343","1344","1345","1346","1352","1348","1349","1353","1347","1351","1362","1361","1401","1407","1631","1464","1403","1633","1411","1481","1634","1632","1405","1410","1409","1402","1441","1450","1449","1432","1463","1444","1435","1443","1628","1461","1446","1433","1465","1627","1502","1422","1421","1630","1425","1423","1442","1501","1424","1629","1521","1626","1431","1426","1429","1430","talentsById","talentsBySpecArray","talentToSpec","specId","talentId","values","parseInt","classes","specs","classByName","reduce","previousValue","currentValue","objectSpread","defineProperty","toLowerCase","MAX_POINTS","SORT_TALENTS","b","getPointsInSpec","known","prev","current","get","calcAvailablePoints","Math","max","calcMeetsRequirements","talent","length","canLearnTalent","modifyTalentPoint","modifier","currentPoints","set","addTalentPoint","console","warn","isDependency","highestRow","cumulativePointsPerRow","forEach","points","t","some","info","pointsUntilHighestRow","targetPointsHighestRow","remove","removeTalentPoint","decodeKnownTalents","pointString","log","Map","parts","split","i","specPointStr","talents","sort","y","removeTrailingCharacters","str","char","slice","TalentSlot","props","knownTalents","availablePoints","showPoints","disabled","pointsInSpec","isAvailable","containerClassNames","talent--disabled","talent--available","talent--maxed","pointsClassNames","point-label--enabled","title","toString","data-row","data-col","onClick","onContextMenu","onRightClick","preventDefault","Icon_Icon","defaultProps","whyDidYouRender","Arrow","from","to","_ref$active","active","abs","data-length","arrow--active","arrow--down","arrow--right","arrow--left","arrow--right-down","assign","TalentTree","onTalentPress","handleClick","useCallback","handleRightClick","bodyStyle","require","arrows","filter","Arrow_Arrow","key","TalentSlot_TalentSlot","EMPTY_TALENTS","Calculator","_React$PureComponent","_getPrototypeOf2","_this","classCallCheck","this","_len","arguments","args","Array","_key","possibleConstructorReturn","getPrototypeOf","call","apply","state","handleTalentPress","newKnownTalents","updateURL","setState","inherits","createClass","value","initialTalents","prevProps","selectedClass","string","join","encodeKnownTalents","history","replace","_this2","classData","TalentTree_TalentTree","href","React","PureComponent","classNameForItem","c","selected","class-picker__class--active","class-picker__class--inactive","ClassPicker","cn","class-picker--has-selection","react_router_dom","IndexRoute","match","params","_this$props","_match$params","ClassPicker_ClassPicker","Calculator_Calculator","App","basename","react_router","path","component","Boolean","window","location","hostname","ReactDOM","render","src_App_0","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.b1f5143f.chunk.js","sourcesContent":["var map = {\n\t\"./161.jpg\": 37,\n\t\"./163.jpg\": 38,\n\t\"./164.jpg\": 39,\n\t\"./181.jpg\": 40,\n\t\"./182.jpg\": 41,\n\t\"./183.jpg\": 42,\n\t\"./201.jpg\": 43,\n\t\"./202.jpg\": 44,\n\t\"./203.jpg\": 45,\n\t\"./261.jpg\": 46,\n\t\"./262.jpg\": 47,\n\t\"./263.jpg\": 48,\n\t\"./281.jpg\": 49,\n\t\"./282.jpg\": 50,\n\t\"./283.jpg\": 51,\n\t\"./301.jpg\": 52,\n\t\"./302.jpg\": 53,\n\t\"./303.jpg\": 54,\n\t\"./361.jpg\": 55,\n\t\"./362.jpg\": 56,\n\t\"./363.jpg\": 57,\n\t\"./381.jpg\": 58,\n\t\"./382.jpg\": 59,\n\t\"./383.jpg\": 60,\n\t\"./41.jpg\": 61,\n\t\"./61.jpg\": 62,\n\t\"./81.jpg\": 63\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 36;","module.exports = __webpack_public_path__ + \"static/media/161.3b1eb099.jpg\";","module.exports = __webpack_public_path__ + \"static/media/163.d8ff0256.jpg\";","module.exports = __webpack_public_path__ + \"static/media/164.5a9a21e2.jpg\";","module.exports = __webpack_public_path__ + \"static/media/181.732693ea.jpg\";","module.exports = __webpack_public_path__ + \"static/media/182.2ba9eac3.jpg\";","module.exports = __webpack_public_path__ + \"static/media/183.3d6c94d0.jpg\";","module.exports = __webpack_public_path__ + \"static/media/201.7ef542fd.jpg\";","module.exports = __webpack_public_path__ + \"static/media/202.51496721.jpg\";","module.exports = __webpack_public_path__ + \"static/media/203.19c7b9ba.jpg\";","module.exports = __webpack_public_path__ + \"static/media/261.ec420cae.jpg\";","module.exports = __webpack_public_path__ + \"static/media/262.1a859835.jpg\";","module.exports = __webpack_public_path__ + \"static/media/263.968052c4.jpg\";","module.exports = __webpack_public_path__ + \"static/media/281.b6a8478e.jpg\";","module.exports = __webpack_public_path__ + \"static/media/282.e148424a.jpg\";","module.exports = __webpack_public_path__ + \"static/media/283.e0beb1ab.jpg\";","module.exports = __webpack_public_path__ + \"static/media/301.b0e11336.jpg\";","module.exports = __webpack_public_path__ + \"static/media/302.68b29a92.jpg\";","module.exports = __webpack_public_path__ + \"static/media/303.fd92e13b.jpg\";","module.exports = __webpack_public_path__ + \"static/media/361.1e37fb0b.jpg\";","module.exports = __webpack_public_path__ + \"static/media/362.95ffdde5.jpg\";","module.exports = __webpack_public_path__ + \"static/media/363.905dc629.jpg\";","module.exports = __webpack_public_path__ + \"static/media/381.17666e6c.jpg\";","module.exports = __webpack_public_path__ + \"static/media/382.b7f1381d.jpg\";","module.exports = __webpack_public_path__ + \"static/media/383.5a8a3168.jpg\";","module.exports = __webpack_public_path__ + \"static/media/41.fbfd140b.jpg\";","module.exports = __webpack_public_path__ + \"static/media/61.514eba87.jpg\";","module.exports = __webpack_public_path__ + \"static/media/81.892c508a.jpg\";","import React, { FC } from 'react'\nimport classNames from 'classnames'\nimport './Icon.scss'\n\ninterface Props {\n name: string\n size?: 'small' | 'medium' | 'large'\n golden?: boolean\n}\n\nexport const Icon: FC = ({ name, size = 'medium', golden = false, children }) => {\n const className = classNames(\n 'icon', \n `icon--${size}`, {\n 'icon--golden': golden\n }\n )\n\n const bgSize = size === 'medium' ? 'large' : 'medium'\n const bgStyle = {\n backgroundImage: `url(https://wow.zamimg.com/images/wow/icons/${bgSize}/${name}.jpg)`\n }\n\n return (\n
\n
\n
\n {children}\n
\n )\n}","interface Root {\n /** ID of the talent tree */\n [key: number]: {\n /** ID of the talent */\n [key: number]: TalentData\n }\n}\n\nexport const specNames = {\n 41: \"Fire\",\n 61: \"Frost\",\n 81: \"Arcane\",\n 161: \"Arms\",\n 163: \"Protection\",\n 164: \"Fury\",\n 181: \"Combat\",\n 182: \"Assassination\",\n 183: \"Subtlety\",\n 201: \"Discipline\",\n 202: \"Holy\",\n 203: \"Shadow\",\n 261: \"Elemental\",\n 262: \"Restoration\",\n 263: \"Enhancement\",\n 281: \"Feral Combat\",\n 282: \"Restoration\",\n 283: \"Balance\",\n 301: \"Destruction\",\n 302: \"Affliction\",\n 303: \"Demonology\",\n 361: \"Beast Mastery\",\n 362: \"Survival\",\n 363: \"Marksmanship\",\n 381: \"Retribution\",\n 382: \"Holy\",\n 383: \"Protection\"\n}\n\nexport const talentsBySpec: Root = {\n 41: {\n 26: {\n \"id\": 26,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_fire_flamebolt\",\n \"ranks\": [11069, 12338, 12339, 12340, 12341],\n \"requires\": []\n },\n 30: {\n \"id\": 30,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_meteorstorm\",\n \"ranks\": [11103, 12357, 12358, 12359, 12360],\n \"requires\": []\n },\n 34: {\n \"id\": 34,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_fire_incinerate\",\n \"ranks\": [11119, 11120, 12846, 12847, 12848],\n \"requires\": []\n },\n 28: {\n \"id\": 28,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_fire_flare\",\n \"ranks\": [11100, 12353],\n \"requires\": []\n },\n 27: {\n \"id\": 27,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [11078, 11080, 12342],\n \"requires\": []\n },\n 1141: {\n \"id\": 1141,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_fire_flameshock\",\n \"ranks\": [18459, 18460],\n \"requires\": []\n },\n 31: {\n \"id\": 31,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_fire_selfdestruct\",\n \"ranks\": [11108, 12349, 12350],\n \"requires\": []\n },\n 29: {\n \"id\": 29,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball02\",\n \"ranks\": [11366],\n \"requires\": []\n },\n 23: {\n \"id\": 23,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_fire_fire\",\n \"ranks\": [11083, 12351],\n \"requires\": []\n },\n 25: {\n \"id\": 25,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_soulburn\",\n \"ranks\": [11095, 12872, 12873],\n \"requires\": []\n },\n 24: {\n \"id\": 24,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_fire_firearmor\",\n \"ranks\": [11094, 13043],\n \"requires\": []\n },\n 1639: {\n \"id\": 1639,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_masterofelements\",\n \"ranks\": [29074, 29075, 29076],\n \"requires\": []\n },\n 33: {\n \"id\": 33,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_wispheal\",\n \"ranks\": [11115, 11367, 11368],\n \"requires\": []\n },\n 32: {\n \"id\": 32,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_excorcism_02\",\n \"ranks\": [11113],\n \"requires\": [{\n \"id\": 29,\n \"qty\": 1\n }]\n },\n 35: {\n \"id\": 35,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [11124, 12378, 12398, 12399, 12400],\n \"requires\": []\n },\n 36: {\n \"id\": 36,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_fire_sealoffire\",\n \"ranks\": [11129],\n \"requires\": [{\n \"id\": 33,\n \"qty\": 3\n }]\n }\n },\n 61: {\n 70: {\n \"id\": 70,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_frost_frostward\",\n \"ranks\": [11189, 28332],\n \"requires\": []\n },\n 37: {\n \"id\": 37,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_frost_frostbolt02\",\n \"ranks\": [11070, 12473, 16763, 16765, 16766],\n \"requires\": []\n },\n 1649: {\n \"id\": 1649,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_ice_magicdamage\",\n \"ranks\": [29438, 29439, 29440],\n \"requires\": []\n },\n 73: {\n \"id\": 73,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_frost_iceshard\",\n \"ranks\": [11207, 12672, 15047, 15052, 15053],\n \"requires\": []\n },\n 38: {\n \"id\": 38,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_frost_frostarmor\",\n \"ranks\": [11071, 12496, 12497],\n \"requires\": []\n },\n 62: {\n \"id\": 62,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_frost_freezingbreath\",\n \"ranks\": [11165, 12475],\n \"requires\": []\n },\n 65: {\n \"id\": 65,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_frost_wisp\",\n \"ranks\": [11175, 12569, 12571],\n \"requires\": []\n },\n 61: {\n \"id\": 61,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_frost_frostbolt\",\n \"ranks\": [11151, 12952, 12953],\n \"requires\": []\n },\n 69: {\n \"id\": 69,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [12472],\n \"requires\": []\n },\n 63: {\n \"id\": 63,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_frost_icestorm\",\n \"ranks\": [11185, 12487, 12488],\n \"requires\": []\n },\n 741: {\n \"id\": 741,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_darkritual\",\n \"ranks\": [16757, 16758],\n \"requires\": []\n },\n 66: {\n \"id\": 66,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [11160, 12518, 12519],\n \"requires\": []\n },\n 67: {\n \"id\": 67,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_frost_frostshock\",\n \"ranks\": [11170, 12982, 12983, 12984, 12985],\n \"requires\": [{\n \"id\": 62,\n \"qty\": 2\n }]\n },\n 72: {\n \"id\": 72,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_frost_frost\",\n \"ranks\": [11958],\n \"requires\": []\n },\n 64: {\n \"id\": 64,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_frost_glacier\",\n \"ranks\": [11190, 12489, 12490],\n \"requires\": []\n },\n 68: {\n \"id\": 68,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_frost_chillingblast\",\n \"ranks\": [11180, 28592, 28593, 28594, 28595],\n \"requires\": []\n },\n 71: {\n \"id\": 71,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_ice_lament\",\n \"ranks\": [11426],\n \"requires\": [{\n \"id\": 72,\n \"qty\": 1\n }]\n }\n },\n 81: {\n 74: {\n \"id\": 74,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_holy_dispelmagic\",\n \"ranks\": [11210, 12592],\n \"requires\": []\n },\n 76: {\n \"id\": 76,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [11222, 12839, 12840, 12841, 12842],\n \"requires\": []\n },\n 80: {\n \"id\": 80,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_starfall\",\n \"ranks\": [11237, 12463, 12464, 16769, 16770],\n \"requires\": []\n },\n 78: {\n \"id\": 78,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"inv_wand_01\",\n \"ranks\": [6057, 6085],\n \"requires\": []\n },\n 1650: {\n \"id\": 1650,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_astralrecalgroup\",\n \"ranks\": [29441, 29444, 29445, 29446, 29447],\n \"requires\": []\n },\n 75: {\n \"id\": 75,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [11213, 12574, 12575, 12576, 12577],\n \"requires\": []\n },\n 82: {\n \"id\": 82,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [11247, 12606],\n \"requires\": []\n },\n 81: {\n \"id\": 81,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [11242, 12467, 12469],\n \"requires\": []\n },\n 85: {\n \"id\": 85,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_arcane_arcaneresilience\",\n \"ranks\": [28574],\n \"requires\": []\n },\n 83: {\n \"id\": 83,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_detectlesserinvisibility\",\n \"ranks\": [11252, 12605],\n \"requires\": []\n },\n 88: {\n \"id\": 88,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_frost_iceshock\",\n \"ranks\": [11255, 12598],\n \"requires\": []\n },\n 1142: {\n \"id\": 1142,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [18462, 18463, 18464],\n \"requires\": []\n },\n 86: {\n \"id\": 86,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [12043],\n \"requires\": []\n },\n 77: {\n \"id\": 77,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_charm\",\n \"ranks\": [11232, 12500, 12501, 12502, 12503],\n \"requires\": [{\n \"id\": 85,\n \"qty\": 1\n }]\n },\n 421: {\n \"id\": 421,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_teleport\",\n \"ranks\": [15058, 15059, 15060],\n \"requires\": [{\n \"id\": 86,\n \"qty\": 1\n }]\n },\n 87: {\n \"id\": 87,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_lightning\",\n \"ranks\": [12042],\n \"requires\": [{\n \"id\": 421,\n \"qty\": 3\n }]\n }\n },\n 161: {\n 124: {\n \"id\": 124,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [12282, 12663, 12664],\n \"requires\": []\n },\n 130: {\n \"id\": 130,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_parry\",\n \"ranks\": [16462, 16463, 16464, 16465, 16466],\n \"requires\": []\n },\n 127: {\n \"id\": 127,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_gouge\",\n \"ranks\": [12286, 12658, 12659],\n \"requires\": []\n },\n 126: {\n \"id\": 126,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_warrior_charge\",\n \"ranks\": [12285, 12697],\n \"requires\": []\n },\n 641: {\n \"id\": 641,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [12295, 12676, 12677, 12678, 12679],\n \"requires\": []\n },\n 128: {\n \"id\": 128,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_thunderclap\",\n \"ranks\": [12287, 12665, 12666],\n \"requires\": []\n },\n 131: {\n \"id\": 131,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"inv_sword_05\",\n \"ranks\": [12290, 12963],\n \"requires\": []\n },\n 137: {\n \"id\": 137,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [12296],\n \"requires\": [{\n \"id\": 641,\n \"qty\": 5\n }]\n },\n 121: {\n \"id\": 121,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_backstab\",\n \"ranks\": [12834, 12849, 12867],\n \"requires\": [{\n \"id\": 127,\n \"qty\": 3\n }]\n },\n 136: {\n \"id\": 136,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_axe_09\",\n \"ranks\": [12163, 12711, 12712, 12713, 12714],\n \"requires\": []\n },\n 662: {\n \"id\": 662,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_searingarrow\",\n \"ranks\": [16493, 16494],\n \"requires\": [{\n \"id\": 121,\n \"qty\": 3\n }]\n },\n 132: {\n \"id\": 132,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_axe_06\",\n \"ranks\": [12700, 12781, 12783, 12784, 12785],\n \"requires\": []\n },\n 133: {\n \"id\": 133,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_rogue_slicedice\",\n \"ranks\": [12292],\n \"requires\": []\n },\n 125: {\n \"id\": 125,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"inv_mace_01\",\n \"ranks\": [12284, 12701, 12702, 12703, 12704],\n \"requires\": []\n },\n 123: {\n \"id\": 123,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_sword_27\",\n \"ranks\": [12281, 12812, 12813, 12814, 12815],\n \"requires\": []\n },\n 134: {\n \"id\": 134,\n \"row\": 5,\n \"col\": 0,\n \"icon\": \"inv_weapon_halbard_01\",\n \"ranks\": [12165, 12830, 12831, 12832, 12833],\n \"requires\": []\n },\n 129: {\n \"id\": 129,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_shockwave\",\n \"ranks\": [12289, 12668, 23695],\n \"requires\": []\n },\n 135: {\n \"id\": 135,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_warrior_savageblow\",\n \"ranks\": [12294],\n \"requires\": [{\n \"id\": 133,\n \"qty\": 1\n }]\n }\n },\n 163: {\n 1601: {\n \"id\": 1601,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [12298, 12724, 12725, 12726, 12727],\n \"requires\": []\n },\n 138: {\n \"id\": 138,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [12297, 12750, 12751, 12752, 12753],\n \"requires\": []\n },\n 142: {\n \"id\": 142,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [12301, 12818],\n \"requires\": []\n },\n 140: {\n \"id\": 140,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [12299, 12761, 12762, 12763, 12764],\n \"requires\": []\n },\n 141: {\n \"id\": 141,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [12300, 12959, 12960, 12961, 12962],\n \"requires\": []\n },\n 153: {\n \"id\": 153,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_ashestoashes\",\n \"ranks\": [12975],\n \"requires\": [{\n \"id\": 142,\n \"qty\": 2\n }]\n },\n 145: {\n \"id\": 145,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_defend\",\n \"ranks\": [12945, 12307, 12944],\n \"requires\": [{\n \"id\": 1601,\n \"qty\": 5\n }]\n },\n 147: {\n \"id\": 147,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_warrior_revenge\",\n \"ranks\": [12797, 12799, 12800],\n \"requires\": []\n },\n 144: {\n \"id\": 144,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_warrior_innerrage\",\n \"ranks\": [12303, 12788, 12789, 12791, 12792],\n \"requires\": []\n },\n 146: {\n \"id\": 146,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_warrior_sunder\",\n \"ranks\": [12308, 12810, 12811],\n \"requires\": []\n },\n 151: {\n \"id\": 151,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_warrior_disarm\",\n \"ranks\": [12313, 12804, 12807],\n \"requires\": []\n },\n 143: {\n \"id\": 143,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [12302, 12765],\n \"requires\": []\n },\n 150: {\n \"id\": 150,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_warrior_shieldwall\",\n \"ranks\": [12312, 12803],\n \"requires\": []\n },\n 152: {\n \"id\": 152,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [12809],\n \"requires\": []\n },\n 149: {\n \"id\": 149,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_warrior_shieldbash\",\n \"ranks\": [12311, 12958],\n \"requires\": []\n },\n 702: {\n \"id\": 702,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_sword_20\",\n \"ranks\": [16538, 16539, 16540, 16541, 16542],\n \"requires\": []\n },\n 148: {\n \"id\": 148,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_shield_05\",\n \"ranks\": [23922],\n \"requires\": [{\n \"id\": 152,\n \"qty\": 1\n }]\n }\n },\n 164: {\n 158: {\n \"id\": 158,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_purge\",\n \"ranks\": [12321, 12835, 12836, 12837, 12838],\n \"requires\": []\n },\n 157: {\n \"id\": 157,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_rogue_eviscerate\",\n \"ranks\": [12320, 12852, 12853, 12855, 12856],\n \"requires\": []\n },\n 161: {\n \"id\": 161,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_warrior_warcry\",\n \"ranks\": [12324, 12876, 12877, 12878, 12879],\n \"requires\": []\n },\n 159: {\n \"id\": 159,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_stoneclawtotem\",\n \"ranks\": [12322, 12999, 13000, 13001, 13002],\n \"requires\": []\n },\n 166: {\n \"id\": 166,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_warrior_cleave\",\n \"ranks\": [12329, 12950, 20496],\n \"requires\": []\n },\n 160: {\n \"id\": 160,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathscream\",\n \"ranks\": [12323],\n \"requires\": []\n },\n 661: {\n \"id\": 661,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_summonimp\",\n \"ranks\": [16487, 16489, 16492],\n \"requires\": []\n },\n 154: {\n \"id\": 154,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_warrior_battleshout\",\n \"ranks\": [12318, 12857, 12858, 12860, 12861],\n \"requires\": []\n },\n 1581: {\n \"id\": 1581,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_dualwield\",\n \"ranks\": [23584, 23585, 23586, 23587, 23588],\n \"requires\": []\n },\n 1542: {\n \"id\": 1542,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_sword_48\",\n \"ranks\": [20502, 20503],\n \"requires\": []\n },\n 155: {\n \"id\": 155,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_unholyfrenzy\",\n \"ranks\": [12317, 13045, 13046, 13047, 13048],\n \"requires\": []\n },\n 168: {\n \"id\": 168,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_warrior_decisivestrike\",\n \"ranks\": [12862, 12330, 20497, 20498, 20499],\n \"requires\": []\n },\n 165: {\n \"id\": 165,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathpact\",\n \"ranks\": [12328],\n \"requires\": []\n },\n 1543: {\n \"id\": 1543,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"ability_rogue_sprint\",\n \"ranks\": [20504, 20505],\n \"requires\": []\n },\n 1541: {\n \"id\": 1541,\n \"row\": 5,\n \"col\": 0,\n \"icon\": \"spell_nature_ancestralguardian\",\n \"ranks\": [20500, 20501],\n \"requires\": []\n },\n 156: {\n \"id\": 156,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [12319, 12971, 12972, 12973, 12974],\n \"requires\": [{\n \"id\": 155,\n \"qty\": 5\n }]\n },\n 167: {\n \"id\": 167,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_bloodlust\",\n \"ranks\": [23881],\n \"requires\": [{\n \"id\": 165,\n \"qty\": 1\n }]\n }\n },\n 181: {\n 203: {\n \"id\": 203,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_gouge\",\n \"ranks\": [13741, 13793, 13792],\n \"requires\": []\n },\n 201: {\n \"id\": 201,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_ritualofsacrifice\",\n \"ranks\": [13732, 13863],\n \"requires\": []\n },\n 186: {\n \"id\": 186,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_invisibilty\",\n \"ranks\": [13712, 13788, 13789, 13790, 13791],\n \"requires\": []\n },\n 202: {\n \"id\": 202,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_backstab\",\n \"ranks\": [13733, 13865, 13866],\n \"requires\": []\n },\n 187: {\n \"id\": 187,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_parry\",\n \"ranks\": [13713, 13853, 13854, 13855, 13856],\n \"requires\": []\n },\n 181: {\n \"id\": 181,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_marksmanship\",\n \"ranks\": [13705, 13832, 13843, 13844, 13845],\n \"requires\": []\n },\n 204: {\n \"id\": 204,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_shadowward\",\n \"ranks\": [13742, 13872],\n \"requires\": []\n },\n 301: {\n \"id\": 301,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_warrior_challange\",\n \"ranks\": [14251],\n \"requires\": [{\n \"id\": 187,\n \"qty\": 5\n }]\n },\n 222: {\n \"id\": 222,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_rogue_sprint\",\n \"ranks\": [13743, 13875],\n \"requires\": []\n },\n 206: {\n \"id\": 206,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_kick\",\n \"ranks\": [13754, 13867],\n \"requires\": []\n },\n 182: {\n \"id\": 182,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"inv_weapon_shortblade_05\",\n \"ranks\": [13706, 13804, 13805, 13806, 13807],\n \"requires\": []\n },\n 221: {\n \"id\": 221,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_dualwield\",\n \"ranks\": [13715, 13848, 13849, 13851, 13852],\n \"requires\": [{\n \"id\": 181,\n \"qty\": 5\n }]\n },\n 184: {\n \"id\": 184,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_mace_01\",\n \"ranks\": [13709, 13800, 13801, 13802, 13803],\n \"requires\": []\n },\n 223: {\n \"id\": 223,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_warrior_punishingblow\",\n \"ranks\": [13877],\n \"requires\": []\n },\n 242: {\n \"id\": 242,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"inv_sword_27\",\n \"ranks\": [13960, 13961, 13962, 13963, 13964],\n \"requires\": []\n },\n 183: {\n \"id\": 183,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_gauntlets_04\",\n \"ranks\": [13707, 13966, 13967, 13968, 13969],\n \"requires\": []\n },\n 1703: {\n \"id\": 1703,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstrength\",\n \"ranks\": [30919, 30920],\n \"requires\": [{\n \"id\": 223,\n \"qty\": 1\n }]\n },\n 1122: {\n \"id\": 1122,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_racial_avatar\",\n \"ranks\": [18427, 18428, 18429],\n \"requires\": []\n },\n 205: {\n \"id\": 205,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowworddominate\",\n \"ranks\": [13750],\n \"requires\": []\n }\n },\n 182: {\n 276: {\n \"id\": 276,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"ability_rogue_eviscerate\",\n \"ranks\": [14162, 14163, 14164],\n \"requires\": []\n },\n 272: {\n \"id\": 272,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_fiegndead\",\n \"ranks\": [14144, 14148],\n \"requires\": []\n },\n 270: {\n \"id\": 270,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [14138, 14139, 14140, 14141, 14142],\n \"requires\": []\n },\n 273: {\n \"id\": 273,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_druid_disembowel\",\n \"ranks\": [14156, 14160, 14161],\n \"requires\": []\n },\n 274: {\n \"id\": 274,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathscream\",\n \"ranks\": [14158, 14159],\n \"requires\": []\n },\n 277: {\n \"id\": 277,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_rogue_slicedice\",\n \"ranks\": [14165, 14166, 14167],\n \"requires\": []\n },\n 281: {\n \"id\": 281,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_warrior_decisivestrike\",\n \"ranks\": [14179],\n \"requires\": []\n },\n 278: {\n \"id\": 278,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_warrior_riposte\",\n \"ranks\": [14168, 14169],\n \"requires\": []\n },\n 269: {\n \"id\": 269,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_criticalstrike\",\n \"ranks\": [14128, 14132, 14135, 14136, 14137],\n \"requires\": [{\n \"id\": 270,\n \"qty\": 5\n }]\n },\n 682: {\n \"id\": 682,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_rogue_feigndeath\",\n \"ranks\": [16513, 16514, 16515, 16719, 16720],\n \"requires\": []\n },\n 268: {\n \"id\": 268,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_poisons\",\n \"ranks\": [14113, 14114, 14115, 14116, 14117],\n \"requires\": []\n },\n 280: {\n \"id\": 280,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_ice_lament\",\n \"ranks\": [14177],\n \"requires\": []\n },\n 279: {\n \"id\": 279,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_rogue_kidneyshot\",\n \"ranks\": [14174, 14175, 14176],\n \"requires\": []\n },\n 283: {\n \"id\": 283,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_chilltouch\",\n \"ranks\": [14186, 14190, 14193, 14194, 14195],\n \"requires\": [{\n \"id\": 280,\n \"qty\": 1\n }]\n },\n 382: {\n \"id\": 382,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_earthbindtotem\",\n \"ranks\": [14983],\n \"requires\": []\n }\n },\n 183: {\n 241: {\n \"id\": 241,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_charm\",\n \"ranks\": [13958, 13970, 13971, 13972, 13973],\n \"requires\": []\n },\n 261: {\n \"id\": 261,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_warrior_warcry\",\n \"ranks\": [14057, 14072, 14073, 14074, 14075],\n \"requires\": []\n },\n 1700: {\n \"id\": 1700,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_rogue_feint\",\n \"ranks\": [30892, 30893],\n \"requires\": []\n },\n 247: {\n \"id\": 247,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [13981, 14066],\n \"requires\": []\n },\n 244: {\n \"id\": 244,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_stealth\",\n \"ranks\": [13975, 14062, 14063, 14064, 14065],\n \"requires\": []\n },\n 245: {\n \"id\": 245,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_fumble\",\n \"ranks\": [13976, 13979, 13980],\n \"requires\": []\n },\n 303: {\n \"id\": 303,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_curse\",\n \"ranks\": [14278],\n \"requires\": []\n },\n 263: {\n \"id\": 263,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [14079, 14080, 14081],\n \"requires\": []\n },\n 246: {\n \"id\": 246,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [13983, 14070, 14071],\n \"requires\": []\n },\n 262: {\n \"id\": 262,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_sap\",\n \"ranks\": [14076, 14094, 14095],\n \"requires\": []\n },\n 1123: {\n \"id\": 1123,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"inv_sword_17\",\n \"ranks\": [14171, 14172, 14173],\n \"requires\": []\n },\n 1701: {\n \"id\": 1701,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_ambush\",\n \"ranks\": [30894, 30895],\n \"requires\": []\n },\n 284: {\n \"id\": 284,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_antishadow\",\n \"ranks\": [14185],\n \"requires\": []\n },\n 265: {\n \"id\": 265,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_summonsuccubus\",\n \"ranks\": [14082, 14083],\n \"requires\": []\n },\n 681: {\n \"id\": 681,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_shadow_lifedrain\",\n \"ranks\": [16511],\n \"requires\": [{\n \"id\": 1123,\n \"qty\": 3\n }]\n },\n 1702: {\n \"id\": 1702,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_weapon_crossbow_11\",\n \"ranks\": [30902, 30903, 30904, 30905, 30906],\n \"requires\": []\n },\n 381: {\n \"id\": 381,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_possession\",\n \"ranks\": [14183],\n \"requires\": [{\n \"id\": 284,\n \"qty\": 1\n }]\n }\n },\n 201: {\n 342: {\n \"id\": 342,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [14522, 14788, 14789, 14790, 14791],\n \"requires\": []\n },\n 345: {\n \"id\": 345,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"inv_wand_01\",\n \"ranks\": [14524, 14525, 14526, 14527, 14528],\n \"requires\": []\n },\n 352: {\n \"id\": 352,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_manaregentotem\",\n \"ranks\": [14523, 14784, 14785, 14786, 14787],\n \"requires\": []\n },\n 344: {\n \"id\": 344,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_wordfortitude\",\n \"ranks\": [14749, 14767],\n \"requires\": []\n },\n 343: {\n \"id\": 343,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_powerwordshield\",\n \"ranks\": [14748, 14768, 14769],\n \"requires\": []\n },\n 321: {\n \"id\": 321,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [14531, 14774],\n \"requires\": []\n },\n 348: {\n \"id\": 348,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [14751],\n \"requires\": []\n },\n 347: {\n \"id\": 347,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_sleep\",\n \"ranks\": [14521, 14776, 14777],\n \"requires\": []\n },\n 346: {\n \"id\": 346,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_innerfire\",\n \"ranks\": [14747, 14770, 14771],\n \"requires\": []\n },\n 341: {\n \"id\": 341,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hibernation\",\n \"ranks\": [14520, 14780, 14781, 14782, 14783],\n \"requires\": []\n },\n 350: {\n \"id\": 350,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [14750, 14772],\n \"requires\": []\n },\n 1201: {\n \"id\": 1201,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_enchantarmor\",\n \"ranks\": [18551, 18552, 18553, 18554, 18555],\n \"requires\": []\n },\n 351: {\n \"id\": 351,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_divinespirit\",\n \"ranks\": [14752],\n \"requires\": [{\n \"id\": 347,\n \"qty\": 3\n }]\n },\n 1202: {\n \"id\": 1202,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_slowingtotem\",\n \"ranks\": [18544, 18547, 18548, 18549, 18550],\n \"requires\": []\n },\n 322: {\n \"id\": 322,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_powerinfusion\",\n \"ranks\": [10060],\n \"requires\": [{\n \"id\": 1201,\n \"qty\": 5\n }]\n }\n },\n 202: {\n 410: {\n \"id\": 410,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_holy_healingfocus\",\n \"ranks\": [14913, 15012],\n \"requires\": []\n },\n 406: {\n \"id\": 406,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_renew\",\n \"ranks\": [14908, 15020, 17191],\n \"requires\": []\n },\n 401: {\n \"id\": 401,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofsalvation\",\n \"ranks\": [14889, 15008, 15009, 15010, 15011],\n \"requires\": []\n },\n 411: {\n \"id\": 411,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_spellwarding\",\n \"ranks\": [27900, 27901, 27902, 27903, 27904],\n \"requires\": []\n },\n 1181: {\n \"id\": 1181,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofwrath\",\n \"ranks\": [18530, 18531, 18533, 18534, 18535],\n \"requires\": []\n },\n 442: {\n \"id\": 442,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_holynova\",\n \"ranks\": [15237],\n \"requires\": []\n },\n 1636: {\n \"id\": 1636,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_blessedrecovery\",\n \"ranks\": [27811, 27815, 27816],\n \"requires\": []\n },\n 361: {\n \"id\": 361,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_layonhands\",\n \"ranks\": [14892, 15362, 15363],\n \"requires\": []\n },\n 1635: {\n \"id\": 1635,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_purify\",\n \"ranks\": [27789, 27790],\n \"requires\": []\n },\n 408: {\n \"id\": 408,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_heal02\",\n \"ranks\": [14912, 15013, 15014],\n \"requires\": []\n },\n 403: {\n \"id\": 403,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_searinglightpriest\",\n \"ranks\": [14909, 15017],\n \"requires\": [{\n \"id\": 1181,\n \"qty\": 5\n }]\n },\n 413: {\n \"id\": 413,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_holy_prayerofhealing02\",\n \"ranks\": [14911, 15018],\n \"requires\": []\n },\n 1561: {\n \"id\": 1561,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"inv_enchant_essenceeternallarge\",\n \"ranks\": [20711],\n \"requires\": []\n },\n 402: {\n \"id\": 402,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_spiritualguidence\",\n \"ranks\": [14901, 15028, 15029, 15030, 15031],\n \"requires\": []\n },\n 404: {\n \"id\": 404,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [14898, 15349, 15354, 15355, 15356],\n \"requires\": []\n },\n 1637: {\n \"id\": 1637,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_summonlightwell\",\n \"ranks\": [724],\n \"requires\": [{\n \"id\": 1561,\n \"qty\": 1\n }]\n }\n },\n 203: {\n 465: {\n \"id\": 465,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_requiem\",\n \"ranks\": [15270, 15335, 15336, 15337, 15338],\n \"requires\": []\n },\n 464: {\n \"id\": 464,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_gathershadows\",\n \"ranks\": [15268, 15323, 15324, 15325, 15326],\n \"requires\": []\n },\n 466: {\n \"id\": 466,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_shadowward\",\n \"ranks\": [15318, 15272, 15320],\n \"requires\": []\n },\n 482: {\n \"id\": 482,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowwordpain\",\n \"ranks\": [15275, 15317],\n \"requires\": []\n },\n 463: {\n \"id\": 463,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_burningspirit\",\n \"ranks\": [15260, 15327, 15328, 15329, 15330],\n \"requires\": []\n },\n 542: {\n \"id\": 542,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_psychicscream\",\n \"ranks\": [15392, 15448],\n \"requires\": []\n },\n 481: {\n \"id\": 481,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_unholyfrenzy\",\n \"ranks\": [15273, 15312, 15313, 15314, 15316],\n \"requires\": []\n },\n 501: {\n \"id\": 501,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [15407],\n \"requires\": []\n },\n 483: {\n \"id\": 483,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [15274, 15311],\n \"requires\": []\n },\n 881: {\n \"id\": 881,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_chilltouch\",\n \"ranks\": [17322, 17323, 17325],\n \"requires\": []\n },\n 461: {\n \"id\": 461,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_blackplague\",\n \"ranks\": [15257, 15331, 15332, 15333, 15334],\n \"requires\": []\n },\n 541: {\n \"id\": 541,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_shadow_impphaseshift\",\n \"ranks\": [15487],\n \"requires\": [{\n \"id\": 542,\n \"qty\": 2\n }]\n },\n 484: {\n \"id\": 484,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_unsummonbuilding\",\n \"ranks\": [15286],\n \"requires\": []\n },\n 1638: {\n \"id\": 1638,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_improvedvampiricembrace\",\n \"ranks\": [27839, 27840],\n \"requires\": [{\n \"id\": 484,\n \"qty\": 1\n }]\n },\n 462: {\n \"id\": 462,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [15259, 15307, 15308, 15309, 15310],\n \"requires\": []\n },\n 521: {\n \"id\": 521,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowform\",\n \"ranks\": [15473],\n \"requires\": [{\n \"id\": 484,\n \"qty\": 1\n }]\n }\n },\n 261: {\n 564: {\n \"id\": 564,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [16039, 16109, 16110, 16111, 16112],\n \"requires\": []\n },\n 563: {\n \"id\": 563,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [16035, 16105, 16106, 16107, 16108],\n \"requires\": []\n },\n 572: {\n \"id\": 572,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stoneclawtotem\",\n \"ranks\": [16043, 16130],\n \"requires\": []\n },\n 1640: {\n \"id\": 1640,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_spiritarmor\",\n \"ranks\": [28996, 28997, 28998],\n \"requires\": []\n },\n 561: {\n \"id\": 561,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [16038, 16160, 16161],\n \"requires\": []\n },\n 574: {\n \"id\": 574,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_manaburn\",\n \"ranks\": [16164],\n \"requires\": []\n },\n 575: {\n \"id\": 575,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_frostward\",\n \"ranks\": [16040, 16113, 16114, 16115, 16116],\n \"requires\": []\n },\n 562: {\n \"id\": 562,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_callstorm\",\n \"ranks\": [16041, 16117, 16118, 16119, 16120],\n \"requires\": []\n },\n 567: {\n \"id\": 567,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_sealoffire\",\n \"ranks\": [16086, 16544],\n \"requires\": []\n },\n 1642: {\n \"id\": 1642,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_eyeofthestorm\",\n \"ranks\": [29062, 29064, 29065],\n \"requires\": []\n },\n 1645: {\n \"id\": 1645,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_elementaldevastation\",\n \"ranks\": [30160, 29179, 29180],\n \"requires\": []\n },\n 1641: {\n \"id\": 1641,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_stormreach\",\n \"ranks\": [28999, 29000],\n \"requires\": []\n },\n 565: {\n \"id\": 565,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_volcano\",\n \"ranks\": [16089],\n \"requires\": []\n },\n 721: {\n \"id\": 721,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_lightning_lightningbolt01\",\n \"ranks\": [16578, 16579, 16580, 16581, 16582],\n \"requires\": [{\n \"id\": 562,\n \"qty\": 5\n }]\n },\n 573: {\n \"id\": 573,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_wispheal\",\n \"ranks\": [16166],\n \"requires\": [{\n \"id\": 565,\n \"qty\": 1\n }]\n }\n },\n 262: {\n 586: {\n \"id\": 586,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_magicimmunity\",\n \"ranks\": [16182, 16226, 16227, 16228, 16229],\n \"requires\": []\n },\n 593: {\n \"id\": 593,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_manarecharge\",\n \"ranks\": [16179, 16214, 16215, 16216, 16217],\n \"requires\": []\n },\n 589: {\n \"id\": 589,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [16184, 16209],\n \"requires\": []\n },\n 581: {\n \"id\": 581,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_undyingstrength\",\n \"ranks\": [16176, 16235, 16240],\n \"requires\": []\n },\n 595: {\n \"id\": 595,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [16173, 16222, 16223, 16224, 16225],\n \"requires\": []\n },\n 583: {\n \"id\": 583,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [16180, 16196, 16198],\n \"requires\": []\n },\n 587: {\n \"id\": 587,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_healingwavelesser\",\n \"ranks\": [16181, 16230, 16232, 16233, 16234],\n \"requires\": []\n },\n 582: {\n \"id\": 582,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_nullward\",\n \"ranks\": [16189],\n \"requires\": []\n },\n 1646: {\n \"id\": 1646,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_healingtouch\",\n \"ranks\": [29187, 29189, 29191],\n \"requires\": []\n },\n 588: {\n \"id\": 588,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_manaregentotem\",\n \"ranks\": [16187, 16205, 16206, 16207, 16208],\n \"requires\": []\n },\n 594: {\n \"id\": 594,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [16194, 16218, 16219, 16220, 16221],\n \"requires\": []\n },\n 1648: {\n \"id\": 1648,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_healingway\",\n \"ranks\": [29206, 29205, 29202],\n \"requires\": []\n },\n 591: {\n \"id\": 591,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [16188],\n \"requires\": []\n },\n 592: {\n \"id\": 592,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [16178, 16210, 16211, 16212, 16213],\n \"requires\": []\n },\n 590: {\n \"id\": 590,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_frost_summonwaterelemental\",\n \"ranks\": [16190],\n \"requires\": [{\n \"id\": 588,\n \"qty\": 5\n }]\n }\n },\n 263: {\n 614: {\n \"id\": 614,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [17485, 17486, 17487, 17488, 17489],\n \"requires\": []\n },\n 612: {\n \"id\": 612,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [16253, 16298, 16299, 16300, 16301],\n \"requires\": []\n },\n 609: {\n \"id\": 609,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stoneskintotem\",\n \"ranks\": [16258, 16293],\n \"requires\": []\n },\n 613: {\n \"id\": 613,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [16255, 16302, 16303, 16304, 16305],\n \"requires\": []\n },\n 605: {\n \"id\": 605,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_nature_spiritwolf\",\n \"ranks\": [16262, 16287],\n \"requires\": []\n },\n 607: {\n \"id\": 607,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_lightningshield\",\n \"ranks\": [16261, 16290, 16291],\n \"requires\": []\n },\n 610: {\n \"id\": 610,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_earthbindtotem\",\n \"ranks\": [16259, 16295],\n \"requires\": []\n },\n 617: {\n \"id\": 617,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_axe_10\",\n \"ranks\": [16269],\n \"requires\": []\n },\n 601: {\n \"id\": 601,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_mirrorimage\",\n \"ranks\": [16254, 16271, 16272, 16273, 16274],\n \"requires\": []\n },\n 602: {\n \"id\": 602,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [16256, 16281, 16282, 16283, 16284],\n \"requires\": [{\n \"id\": 613,\n \"qty\": 5\n }]\n },\n 615: {\n \"id\": 615,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [16252, 16306, 16307, 16308, 16309],\n \"requires\": []\n },\n 1647: {\n \"id\": 1647,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_fire_enchantweapon\",\n \"ranks\": [29192, 29193],\n \"requires\": []\n },\n 611: {\n \"id\": 611,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_flametounge\",\n \"ranks\": [16266, 29079, 29080],\n \"requires\": []\n },\n 616: {\n \"id\": 616,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [16268],\n \"requires\": []\n },\n 1643: {\n \"id\": 1643,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"ability_hunter_swiftstrike\",\n \"ranks\": [29082, 29084, 29086, 29087, 29088],\n \"requires\": []\n },\n 901: {\n \"id\": 901,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofmight\",\n \"ranks\": [17364],\n \"requires\": [{\n \"id\": 611,\n \"qty\": 3\n }]\n }\n },\n 281: {\n 796: {\n \"id\": 796,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_hyena\",\n \"ranks\": [16934, 16935, 16936, 16937, 16938],\n \"requires\": []\n },\n 795: {\n \"id\": 795,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_druid_demoralizingroar\",\n \"ranks\": [16858, 16859, 16860, 16861, 16862],\n \"requires\": []\n },\n 799: {\n \"id\": 799,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_ambush\",\n \"ranks\": [16947, 16948, 16949, 16950, 16951],\n \"requires\": []\n },\n 797: {\n \"id\": 797,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_druid_bash\",\n \"ranks\": [16940, 16941],\n \"requires\": []\n },\n 794: {\n \"id\": 794,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_misc_pelt_bear_03\",\n \"ranks\": [16929, 16930, 16931, 16932, 16933],\n \"requires\": []\n },\n 807: {\n \"id\": 807,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_spiritwolf\",\n \"ranks\": [17002, 24866],\n \"requires\": []\n },\n 804: {\n \"id\": 804,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_bear\",\n \"ranks\": [16979],\n \"requires\": []\n },\n 798: {\n \"id\": 798,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_04\",\n \"ranks\": [16942, 16943, 16944],\n \"requires\": []\n },\n 802: {\n \"id\": 802,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_vampiricaura\",\n \"ranks\": [16966, 16968],\n \"requires\": []\n },\n 803: {\n \"id\": 803,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_pet_cat\",\n \"ranks\": [16972, 16974, 16975],\n \"requires\": []\n },\n 800: {\n \"id\": 800,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_ghoulfrenzy\",\n \"ranks\": [16952, 16954],\n \"requires\": [{\n \"id\": 798,\n \"qty\": 3\n }]\n },\n 801: {\n \"id\": 801,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"ability_racial_cannibalize\",\n \"ranks\": [16958, 16961],\n \"requires\": [{\n \"id\": 798,\n \"qty\": 3\n }]\n },\n 805: {\n \"id\": 805,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_druid_ravage\",\n \"ranks\": [16998, 16999],\n \"requires\": []\n },\n 1162: {\n \"id\": 1162,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_faeriefire\",\n \"ranks\": [16857],\n \"requires\": []\n },\n 808: {\n \"id\": 808,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofagility\",\n \"ranks\": [17003, 17004, 17005, 17006, 24894],\n \"requires\": [{\n \"id\": 803,\n \"qty\": 3\n }]\n },\n 809: {\n \"id\": 809,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_unyeildingstamina\",\n \"ranks\": [17007],\n \"requires\": []\n }\n },\n 282: {\n 821: {\n \"id\": 821,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_regeneration\",\n \"ranks\": [17050, 17051, 17053, 17054, 17055],\n \"requires\": []\n },\n 822: {\n \"id\": 822,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [17056, 17058, 17059, 17060, 17061],\n \"requires\": []\n },\n 824: {\n \"id\": 824,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_healingtouch\",\n \"ranks\": [17069, 17070, 17071, 17072, 17073],\n \"requires\": []\n },\n 823: {\n \"id\": 823,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_healingwavegreater\",\n \"ranks\": [17063, 17065, 17066, 17067, 17068],\n \"requires\": []\n },\n 826: {\n \"id\": 826,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_druid_enrage\",\n \"ranks\": [17079, 17082],\n \"requires\": []\n },\n 829: {\n \"id\": 829,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [17106, 17107, 17108],\n \"requires\": []\n },\n 827: {\n \"id\": 827,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_insectswarm\",\n \"ranks\": [5570],\n \"requires\": []\n },\n 841: {\n \"id\": 841,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_eyeoftheowl\",\n \"ranks\": [17118, 17119, 17120, 17121, 17122],\n \"requires\": []\n },\n 843: {\n \"id\": 843,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_elunesgrace\",\n \"ranks\": [24968, 24969, 24970, 24971, 24972],\n \"requires\": []\n },\n 830: {\n \"id\": 830,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_nature_rejuvenation\",\n \"ranks\": [17111, 17112, 17113],\n \"requires\": []\n },\n 831: {\n \"id\": 831,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [17116],\n \"requires\": [{\n \"id\": 824,\n \"qty\": 5\n }]\n },\n 828: {\n \"id\": 828,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_protectionformnature\",\n \"ranks\": [17104, 24943, 24944, 24945, 24946],\n \"requires\": [{\n \"id\": 827,\n \"qty\": 1\n }]\n },\n 842: {\n \"id\": 842,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_nature_tranquility\",\n \"ranks\": [17123, 17124],\n \"requires\": []\n },\n 825: {\n \"id\": 825,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_resistnature\",\n \"ranks\": [17074, 17075, 17076, 17077, 17078],\n \"requires\": []\n },\n 844: {\n \"id\": 844,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_relics_idolofrejuvenation\",\n \"ranks\": [18562],\n \"requires\": [{\n \"id\": 843,\n \"qty\": 5\n }]\n }\n },\n 283: {\n 762: {\n \"id\": 762,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [16814, 16815, 16816, 16817, 16818],\n \"requires\": []\n },\n 761: {\n \"id\": 761,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_natureswrath\",\n \"ranks\": [16689],\n \"requires\": []\n },\n 921: {\n \"id\": 921,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_natureswrath\",\n \"ranks\": [17245, 17247, 17248, 17249],\n \"requires\": [{\n \"id\": 761,\n \"qty\": 1\n }]\n },\n 787: {\n \"id\": 787,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stranglevines\",\n \"ranks\": [16918, 16919, 16920],\n \"requires\": []\n },\n 763: {\n \"id\": 763,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_nature_starfall\",\n \"ranks\": [16821, 16822, 16823, 16824, 16825],\n \"requires\": []\n },\n 791: {\n \"id\": 791,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_staff_01\",\n \"ranks\": [16902, 16903, 16904, 16905, 16906],\n \"requires\": []\n },\n 781: {\n \"id\": 781,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_nature_wispsplode\",\n \"ranks\": [16833, 16834, 16835],\n \"requires\": []\n },\n 782: {\n \"id\": 782,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_thorns\",\n \"ranks\": [16836, 16839, 16840],\n \"requires\": []\n },\n 788: {\n \"id\": 788,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_nature_crystalball\",\n \"ranks\": [16864],\n \"requires\": [{\n \"id\": 791,\n \"qty\": 5\n }]\n },\n 764: {\n \"id\": 764,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_nature_naturetouchgrow\",\n \"ranks\": [16819, 16820],\n \"requires\": []\n },\n 792: {\n \"id\": 792,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_nature_purge\",\n \"ranks\": [16909, 16910, 16911, 16912, 16913],\n \"requires\": [{\n \"id\": 763,\n \"qty\": 5\n }]\n },\n 784: {\n \"id\": 784,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_arcane_starfire\",\n \"ranks\": [16850, 16923, 16924, 16925, 16926],\n \"requires\": []\n },\n 789: {\n \"id\": 789,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_naturesblessing\",\n \"ranks\": [16880],\n \"requires\": []\n },\n 783: {\n \"id\": 783,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_nature_sentinal\",\n \"ranks\": [16845, 16846, 16847],\n \"requires\": []\n },\n 790: {\n \"id\": 790,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_nature_moonglow\",\n \"ranks\": [16896, 16897, 16899, 16900, 16901],\n \"requires\": [{\n \"id\": 789,\n \"qty\": 1\n }]\n },\n 793: {\n \"id\": 793,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_nature_forceofnature\",\n \"ranks\": [24858],\n \"requires\": []\n }\n },\n 301: {\n 944: {\n \"id\": 944,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadowbolt\",\n \"ranks\": [17793, 17796, 17801, 17802, 17803],\n \"requires\": []\n },\n 941: {\n \"id\": 941,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_fire_windsofwoe\",\n \"ranks\": [17778, 17779, 17780, 17781, 17782],\n \"requires\": []\n },\n 943: {\n \"id\": 943,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_deathpact\",\n \"ranks\": [17788, 17789, 17790, 17791, 17792],\n \"requires\": []\n },\n 982: {\n \"id\": 982,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_fire_fire\",\n \"ranks\": [18119, 18120, 18121, 18122, 18123],\n \"requires\": []\n },\n 983: {\n \"id\": 983,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_fire_firebolt\",\n \"ranks\": [18126, 18127],\n \"requires\": []\n },\n 984: {\n \"id\": 984,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_curse\",\n \"ranks\": [18128, 18129],\n \"requires\": []\n },\n 981: {\n \"id\": 981,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_fire_flameshock\",\n \"ranks\": [18130, 18131, 18132, 18133, 18134],\n \"requires\": []\n },\n 963: {\n \"id\": 963,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_shadow_scourgebuild\",\n \"ranks\": [17877],\n \"requires\": []\n },\n 985: {\n \"id\": 985,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_fire_lavaspawn\",\n \"ranks\": [18135, 18136],\n \"requires\": []\n },\n 964: {\n \"id\": 964,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_corpseexplode\",\n \"ranks\": [17917, 17918],\n \"requires\": []\n },\n 965: {\n \"id\": 965,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_fire_soulburn\",\n \"ranks\": [17927, 17929, 17930, 17931, 17932],\n \"requires\": []\n },\n 986: {\n \"id\": 986,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_fire_volcano\",\n \"ranks\": [18096, 18073],\n \"requires\": [{\n \"id\": 985,\n \"qty\": 2\n }]\n },\n 961: {\n \"id\": 961,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_fire_immolation\",\n \"ranks\": [17815, 17833, 17834, 17835, 17836],\n \"requires\": []\n },\n 967: {\n \"id\": 967,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowwordpain\",\n \"ranks\": [17959],\n \"requires\": [{\n \"id\": 981,\n \"qty\": 5\n }]\n },\n 966: {\n \"id\": 966,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_fire_selfdestruct\",\n \"ranks\": [17954, 17955, 17956, 17957, 17958],\n \"requires\": []\n },\n 968: {\n \"id\": 968,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_fire_fireball\",\n \"ranks\": [17962],\n \"requires\": [{\n \"id\": 961,\n \"qty\": 5\n }]\n }\n },\n 302: {\n 1005: {\n \"id\": 1005,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_unsummonbuilding\",\n \"ranks\": [18174, 18175, 18176, 18177, 18178],\n \"requires\": []\n },\n 1003: {\n \"id\": 1003,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_abominationexplosion\",\n \"ranks\": [17810, 17811, 17812, 17813, 17814],\n \"requires\": []\n },\n 1006: {\n \"id\": 1006,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_curseofmannoroth\",\n \"ranks\": [18179, 18180, 18181],\n \"requires\": []\n },\n 1101: {\n \"id\": 1101,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_haunting\",\n \"ranks\": [18213, 18372],\n \"requires\": []\n },\n 1007: {\n \"id\": 1007,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_shadow_burningspirit\",\n \"ranks\": [18182, 18183],\n \"requires\": []\n },\n 1004: {\n \"id\": 1004,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_shadow_lifedrain02\",\n \"ranks\": [17804, 17805, 17806, 17807, 17808],\n \"requires\": []\n },\n 1284: {\n \"id\": 1284,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_curseofsargeras\",\n \"ranks\": [18827, 18829, 18830],\n \"requires\": []\n },\n 1001: {\n \"id\": 1001,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_fingerofdeath\",\n \"ranks\": [17783, 17784, 17785, 17786, 17787],\n \"requires\": []\n },\n 1061: {\n \"id\": 1061,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_contagion\",\n \"ranks\": [18288],\n \"requires\": []\n },\n 1021: {\n \"id\": 1021,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_shadow_callofbone\",\n \"ranks\": [18218, 18219],\n \"requires\": []\n },\n 1002: {\n \"id\": 1002,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [18094, 18095],\n \"requires\": []\n },\n 1121: {\n \"id\": 1121,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"spell_shadow_siphonmana\",\n \"ranks\": [17864, 18393],\n \"requires\": []\n },\n 1041: {\n \"id\": 1041,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_requiem\",\n \"ranks\": [18265],\n \"requires\": []\n },\n 1081: {\n \"id\": 1081,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [18223],\n \"requires\": [{\n \"id\": 1061,\n \"qty\": 1\n }]\n },\n 1082: {\n \"id\": 1082,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_shadow_grimward\",\n \"ranks\": [18310, 18311, 18312, 18313],\n \"requires\": [{\n \"id\": 1081,\n \"qty\": 1\n }]\n },\n 1042: {\n \"id\": 1042,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"spell_shadow_shadetruesight\",\n \"ranks\": [18271, 18272, 18273, 18274, 18275],\n \"requires\": [{\n \"id\": 1041,\n \"qty\": 1\n }]\n },\n 1022: {\n \"id\": 1022,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_darkritual\",\n \"ranks\": [18220],\n \"requires\": []\n }\n },\n 303: {\n 1221: {\n \"id\": 1221,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"inv_stone_04\",\n \"ranks\": [18692, 18693],\n \"requires\": []\n },\n 1222: {\n \"id\": 1222,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_shadow_summonimp\",\n \"ranks\": [18694, 18695, 18696],\n \"requires\": []\n },\n 1223: {\n \"id\": 1223,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_shadow_metamorphosis\",\n \"ranks\": [18697, 18698, 18699, 18700, 18701],\n \"requires\": []\n },\n 1224: {\n \"id\": 1224,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_shadow_lifedrain\",\n \"ranks\": [18703, 18704],\n \"requires\": []\n },\n 1225: {\n \"id\": 1225,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_shadow_summonvoidwalker\",\n \"ranks\": [18705, 18706, 18707],\n \"requires\": []\n },\n 1242: {\n \"id\": 1242,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"spell_holy_magicalsentry\",\n \"ranks\": [18731, 18743, 18744, 18745, 18746],\n \"requires\": []\n },\n 1243: {\n \"id\": 1243,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_shadow_summonsuccubus\",\n \"ranks\": [18754, 18755, 18756],\n \"requires\": []\n },\n 1226: {\n \"id\": 1226,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_nature_removecurse\",\n \"ranks\": [18708],\n \"requires\": []\n },\n 1241: {\n \"id\": 1241,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_shadow_antishadow\",\n \"ranks\": [18748, 18749, 18750, 18751, 18752],\n \"requires\": []\n },\n 1227: {\n \"id\": 1227,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_shadow_impphaseshift\",\n \"ranks\": [18709, 18710],\n \"requires\": [{\n \"id\": 1226,\n \"qty\": 1\n }]\n },\n 1262: {\n \"id\": 1262,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowworddominate\",\n \"ranks\": [18769, 18770, 18771, 18772, 18773],\n \"requires\": []\n },\n 1283: {\n \"id\": 1283,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"spell_shadow_enslavedemon\",\n \"ranks\": [18821, 18822, 18823, 18824, 18825],\n \"requires\": []\n },\n 1281: {\n \"id\": 1281,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_shadow_psychicscream\",\n \"ranks\": [18788],\n \"requires\": []\n },\n 1261: {\n \"id\": 1261,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"inv_ammo_firetar\",\n \"ranks\": [18767, 18768],\n \"requires\": []\n },\n 1244: {\n \"id\": 1244,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_shadow_shadowpact\",\n \"ranks\": [23785, 23822, 23823, 23824, 23825],\n \"requires\": [{\n \"id\": 1262,\n \"qty\": 5\n }]\n },\n 1282: {\n \"id\": 1282,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_shadow_gathershadows\",\n \"ranks\": [19028],\n \"requires\": [{\n \"id\": 1281,\n \"qty\": 1\n }]\n },\n 1263: {\n \"id\": 1263,\n \"row\": 6,\n \"col\": 2,\n \"icon\": \"inv_misc_gem_sapphire_01\",\n \"ranks\": [18774, 18775],\n \"requires\": []\n }\n },\n 361: {\n 1382: {\n \"id\": 1382,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_nature_ravenform\",\n \"ranks\": [19552, 19553, 19554, 19555, 19556],\n \"requires\": []\n },\n 1389: {\n \"id\": 1389,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_reincarnation\",\n \"ranks\": [19583, 19584, 19585, 19586, 19587],\n \"requires\": []\n },\n 1624: {\n \"id\": 1624,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_eyeoftheowl\",\n \"ranks\": [19557, 19558],\n \"requires\": []\n },\n 1381: {\n \"id\": 1381,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_hunter_aspectofthemonkey\",\n \"ranks\": [19549, 19550, 19551, 24386, 24387],\n \"requires\": []\n },\n 1395: {\n \"id\": 1395,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"inv_misc_pelt_bear_03\",\n \"ranks\": [19609, 19610, 19612],\n \"requires\": []\n },\n 1625: {\n \"id\": 1625,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"ability_hunter_beastsoothe\",\n \"ranks\": [24443, 19575],\n \"requires\": []\n },\n 1384: {\n \"id\": 1384,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"ability_mount_jungletiger\",\n \"ranks\": [19559, 19560],\n \"requires\": []\n },\n 1391: {\n \"id\": 1391,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_druid_dash\",\n \"ranks\": [19596],\n \"requires\": []\n },\n 1396: {\n \"id\": 1396,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_bullrush\",\n \"ranks\": [19616, 19617, 19618, 19619, 19620],\n \"requires\": []\n },\n 1385: {\n \"id\": 1385,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_mendpet\",\n \"ranks\": [19572, 19573],\n \"requires\": []\n },\n 1393: {\n \"id\": 1393,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_04\",\n \"ranks\": [19598, 19599, 19600, 19601, 19602],\n \"requires\": []\n },\n 1388: {\n \"id\": 1388,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_druid_demoralizingroar\",\n \"ranks\": [19578, 20895],\n \"requires\": []\n },\n 1387: {\n \"id\": 1387,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_devour\",\n \"ranks\": [19577],\n \"requires\": []\n },\n 1390: {\n \"id\": 1390,\n \"row\": 4,\n \"col\": 3,\n \"icon\": \"spell_nature_abolishmagic\",\n \"ranks\": [19590, 19592],\n \"requires\": []\n },\n 1397: {\n \"id\": 1397,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_misc_monsterclaw_03\",\n \"ranks\": [19621, 19622, 19623, 19624, 19625],\n \"requires\": [{\n \"id\": 1393,\n \"qty\": 5\n }]\n },\n 1386: {\n \"id\": 1386,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_druid_ferociousbite\",\n \"ranks\": [19574],\n \"requires\": [{\n \"id\": 1387,\n \"qty\": 1\n }]\n }\n },\n 362: {\n 1623: {\n \"id\": 1623,\n \"row\": 0,\n \"col\": 0,\n \"icon\": \"inv_misc_head_dragon_black\",\n \"ranks\": [24293, 24294, 24295],\n \"requires\": []\n },\n 1301: {\n \"id\": 1301,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_prayerofhealing\",\n \"ranks\": [19151, 19152, 19153],\n \"requires\": []\n },\n 1311: {\n \"id\": 1311,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [19295, 19297, 19298, 19301, 19300],\n \"requires\": []\n },\n 1304: {\n \"id\": 1304,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_nature_stranglevines\",\n \"ranks\": [19184, 19387, 19388, 19389, 19390],\n \"requires\": []\n },\n 1621: {\n \"id\": 1621,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_racial_bloodrage\",\n \"ranks\": [19159, 19160],\n \"requires\": []\n },\n 1305: {\n \"id\": 1305,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_rogue_trip\",\n \"ranks\": [19228, 19232, 19233, 19234, 19235],\n \"requires\": []\n },\n 1306: {\n \"id\": 1306,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_nature_timestop\",\n \"ranks\": [19239, 19245],\n \"requires\": []\n },\n 1622: {\n \"id\": 1622,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_shadow_twilight\",\n \"ranks\": [19255, 19256, 19257, 19258, 19259],\n \"requires\": []\n },\n 1308: {\n \"id\": 1308,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_whirlwind\",\n \"ranks\": [19263],\n \"requires\": []\n },\n 1322: {\n \"id\": 1322,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"ability_ensnare\",\n \"ranks\": [19376, 19377],\n \"requires\": []\n },\n 1310: {\n \"id\": 1310,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_kick\",\n \"ranks\": [19290, 19294, 24283],\n \"requires\": []\n },\n 1309: {\n \"id\": 1309,\n \"row\": 3,\n \"col\": 3,\n \"icon\": \"ability_rogue_feigndeath\",\n \"ranks\": [19286, 19287],\n \"requires\": []\n },\n 1321: {\n \"id\": 1321,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofstamina\",\n \"ranks\": [19370, 19371, 19373],\n \"requires\": []\n },\n 1312: {\n \"id\": 1312,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_warrior_challange\",\n \"ranks\": [19306],\n \"requires\": [{\n \"id\": 1308,\n \"qty\": 1\n }]\n },\n 1303: {\n \"id\": 1303,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_nature_invisibilty\",\n \"ranks\": [19168, 19180, 19181, 24296, 24297],\n \"requires\": []\n },\n 1325: {\n \"id\": 1325,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"inv_spear_02\",\n \"ranks\": [19386],\n \"requires\": [{\n \"id\": 1321,\n \"qty\": 3\n }]\n }\n },\n 363: {\n 1341: {\n \"id\": 1341,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_frost_stun\",\n \"ranks\": [19407, 19412, 19413, 19414, 19415],\n \"requires\": []\n },\n 1342: {\n \"id\": 1342,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_wizardmark\",\n \"ranks\": [19416, 19417, 19418, 19419, 19420],\n \"requires\": []\n },\n 1343: {\n \"id\": 1343,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"ability_hunter_snipershot\",\n \"ranks\": [19421, 19422, 19423, 19424, 19425],\n \"requires\": []\n },\n 1344: {\n \"id\": 1344,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_searingarrow\",\n \"ranks\": [19426, 19427, 19429, 19430, 19431],\n \"requires\": []\n },\n 1345: {\n \"id\": 1345,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"inv_spear_07\",\n \"ranks\": [19434],\n \"requires\": []\n },\n 1346: {\n \"id\": 1346,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"ability_impalingbolt\",\n \"ranks\": [19454, 19455, 19456, 19457, 19458],\n \"requires\": []\n },\n 1352: {\n \"id\": 1352,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"ability_townwatch\",\n \"ranks\": [19498, 19499, 19500],\n \"requires\": []\n },\n 1348: {\n \"id\": 1348,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"ability_hunter_quickshot\",\n \"ranks\": [19464, 19465, 19466, 19467, 19468],\n \"requires\": []\n },\n 1349: {\n \"id\": 1349,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"ability_piercedamage\",\n \"ranks\": [19485, 19487, 19488, 19489, 19490],\n \"requires\": [{\n \"id\": 1344,\n \"qty\": 5\n }]\n },\n 1353: {\n \"id\": 1353,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"ability_golemstormbolt\",\n \"ranks\": [19503],\n \"requires\": []\n },\n 1347: {\n \"id\": 1347,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"ability_upgrademoonglaive\",\n \"ranks\": [19461, 19462, 24691],\n \"requires\": []\n },\n 1351: {\n \"id\": 1351,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"ability_hunter_criticalshot\",\n \"ranks\": [19491, 19493, 19494],\n \"requires\": []\n },\n 1362: {\n \"id\": 1362,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_weapon_rifle_06\",\n \"ranks\": [19507, 19508, 19509, 19510, 19511],\n \"requires\": []\n },\n 1361: {\n \"id\": 1361,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"ability_trueshot\",\n \"ranks\": [19506],\n \"requires\": [{\n \"id\": 1347,\n \"qty\": 3\n }]\n }\n },\n 381: {\n 1401: {\n \"id\": 1401,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_fistofjustice\",\n \"ranks\": [20042, 20045, 20046, 20047, 20048],\n \"requires\": []\n },\n 1407: {\n \"id\": 1407,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_frost_windwalkon\",\n \"ranks\": [20101, 20102, 20103, 20104, 20105],\n \"requires\": []\n },\n 1631: {\n \"id\": 1631,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"spell_holy_righteousfury\",\n \"ranks\": [25956, 25957],\n \"requires\": []\n },\n 1464: {\n \"id\": 1464,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_holysmite\",\n \"ranks\": [20335, 20336, 20337],\n \"requires\": []\n },\n 1403: {\n \"id\": 1403,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_parry\",\n \"ranks\": [20060, 20061, 20062, 20063, 20064],\n \"requires\": []\n },\n 1633: {\n \"id\": 1633,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_vindication\",\n \"ranks\": [9452, 26016, 26021],\n \"requires\": []\n },\n 1411: {\n \"id\": 1411,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_retributionaura\",\n \"ranks\": [20117, 20118, 20119, 20120, 20121],\n \"requires\": []\n },\n 1481: {\n \"id\": 1481,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"ability_warrior_innerrage\",\n \"ranks\": [20375],\n \"requires\": []\n },\n 1634: {\n \"id\": 1634,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_persuitofjustice\",\n \"ranks\": [26022, 26023],\n \"requires\": []\n },\n 1632: {\n \"id\": 1632,\n \"row\": 3,\n \"col\": 0,\n \"icon\": \"spell_holy_eyeforaneye\",\n \"ranks\": [9799, 25988],\n \"requires\": []\n },\n 1405: {\n \"id\": 1405,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_auraoflight\",\n \"ranks\": [20091, 20092],\n \"requires\": []\n },\n 1410: {\n \"id\": 1410,\n \"row\": 4,\n \"col\": 0,\n \"icon\": \"inv_hammer_04\",\n \"ranks\": [20111, 20112, 20113],\n \"requires\": []\n },\n 1409: {\n \"id\": 1409,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_mindvision\",\n \"ranks\": [20218],\n \"requires\": []\n },\n 1402: {\n \"id\": 1402,\n \"row\": 5,\n \"col\": 1,\n \"icon\": \"ability_racial_avatar\",\n \"ranks\": [20049, 20056, 20057, 20058, 20059],\n \"requires\": [{\n \"id\": 1411,\n \"qty\": 5\n }]\n },\n 1441: {\n \"id\": 1441,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_prayerofhealing\",\n \"ranks\": [20066],\n \"requires\": []\n }\n },\n 382: {\n 1450: {\n \"id\": 1450,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"ability_golemthunderclap\",\n \"ranks\": [20262, 20263, 20264, 20265, 20266],\n \"requires\": []\n },\n 1449: {\n \"id\": 1449,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"spell_nature_sleep\",\n \"ranks\": [20257, 20258, 20259, 20260, 20261],\n \"requires\": []\n },\n 1432: {\n \"id\": 1432,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_arcane_blink\",\n \"ranks\": [20205, 20206, 20207, 20209, 20208],\n \"requires\": []\n },\n 1463: {\n \"id\": 1463,\n \"row\": 1,\n \"col\": 2,\n \"icon\": \"ability_thunderbolt\",\n \"ranks\": [20224, 20225, 20330, 20331, 20332],\n \"requires\": []\n },\n 1444: {\n \"id\": 1444,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_holy_holybolt\",\n \"ranks\": [20237, 20238, 20239],\n \"requires\": []\n },\n 1435: {\n \"id\": 1435,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_innerfire\",\n \"ranks\": [26573],\n \"requires\": []\n },\n 1443: {\n \"id\": 1443,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"spell_holy_layonhands\",\n \"ranks\": [20234, 20235],\n \"requires\": []\n },\n 1628: {\n \"id\": 1628,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_holy_unyieldingfaith\",\n \"ranks\": [9453, 25836],\n \"requires\": []\n },\n 1461: {\n \"id\": 1461,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_greaterheal\",\n \"ranks\": [20210, 20212, 20213, 20214, 20215],\n \"requires\": []\n },\n 1446: {\n \"id\": 1446,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_sealofwisdom\",\n \"ranks\": [20244, 20245],\n \"requires\": []\n },\n 1433: {\n \"id\": 1433,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_holy_heal\",\n \"ranks\": [20216],\n \"requires\": [{\n \"id\": 1461,\n \"qty\": 5\n }]\n },\n 1465: {\n \"id\": 1465,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_healingaura\",\n \"ranks\": [20359, 20360, 20361],\n \"requires\": []\n },\n 1627: {\n \"id\": 1627,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"spell_holy_power\",\n \"ranks\": [5923, 5924, 5925, 5926, 25829],\n \"requires\": []\n },\n 1502: {\n \"id\": 1502,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_searinglight\",\n \"ranks\": [20473],\n \"requires\": [{\n \"id\": 1433,\n \"qty\": 1\n }]\n }\n },\n 383: {\n 1422: {\n \"id\": 1422,\n \"row\": 0,\n \"col\": 1,\n \"icon\": \"spell_holy_devotionaura\",\n \"ranks\": [20138, 20139, 20140, 20141, 20142],\n \"requires\": []\n },\n 1421: {\n \"id\": 1421,\n \"row\": 0,\n \"col\": 2,\n \"icon\": \"ability_defend\",\n \"ranks\": [20127, 20130, 20135, 20136, 20137],\n \"requires\": []\n },\n 1630: {\n \"id\": 1630,\n \"row\": 1,\n \"col\": 0,\n \"icon\": \"ability_rogue_ambush\",\n \"ranks\": [20189, 20192, 20193],\n \"requires\": []\n },\n 1425: {\n \"id\": 1425,\n \"row\": 1,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofprotection\",\n \"ranks\": [20174, 20175],\n \"requires\": []\n },\n 1423: {\n \"id\": 1423,\n \"row\": 1,\n \"col\": 3,\n \"icon\": \"spell_holy_devotion\",\n \"ranks\": [20143, 20144, 20145, 20146, 20147],\n \"requires\": []\n },\n 1442: {\n \"id\": 1442,\n \"row\": 2,\n \"col\": 0,\n \"icon\": \"spell_magic_magearmor\",\n \"ranks\": [20217],\n \"requires\": []\n },\n 1501: {\n \"id\": 1501,\n \"row\": 2,\n \"col\": 1,\n \"icon\": \"spell_holy_sealoffury\",\n \"ranks\": [20468, 20469, 20470],\n \"requires\": []\n },\n 1424: {\n \"id\": 1424,\n \"row\": 2,\n \"col\": 2,\n \"icon\": \"inv_shield_06\",\n \"ranks\": [20148, 20149, 20150],\n \"requires\": [{\n \"id\": 1421,\n \"qty\": 5\n }]\n },\n 1629: {\n \"id\": 1629,\n \"row\": 2,\n \"col\": 3,\n \"icon\": \"spell_magic_lesserinvisibilty\",\n \"ranks\": [20096, 20097, 20098, 20099, 20100],\n \"requires\": []\n },\n 1521: {\n \"id\": 1521,\n \"row\": 3,\n \"col\": 1,\n \"icon\": \"spell_holy_sealofmight\",\n \"ranks\": [20487, 20488, 20489],\n \"requires\": []\n },\n 1626: {\n \"id\": 1626,\n \"row\": 3,\n \"col\": 2,\n \"icon\": \"spell_holy_mindsooth\",\n \"ranks\": [20254, 20255, 20256],\n \"requires\": []\n },\n 1431: {\n \"id\": 1431,\n \"row\": 4,\n \"col\": 1,\n \"icon\": \"spell_nature_lightningshield\",\n \"ranks\": [20911],\n \"requires\": []\n },\n 1426: {\n \"id\": 1426,\n \"row\": 4,\n \"col\": 2,\n \"icon\": \"spell_holy_blessingofstrength\",\n \"ranks\": [20177, 20179, 20181, 20180, 20182],\n \"requires\": []\n },\n 1429: {\n \"id\": 1429,\n \"row\": 5,\n \"col\": 2,\n \"icon\": \"inv_sword_20\",\n \"ranks\": [20196, 20197, 20198, 20199, 20200],\n \"requires\": []\n },\n 1430: {\n \"id\": 1430,\n \"row\": 6,\n \"col\": 1,\n \"icon\": \"spell_holy_blessingofprotection\",\n \"ranks\": [20925],\n \"requires\": [{\n \"id\": 1431,\n \"qty\": 1\n }]\n }\n }\n}\n\nexport const talentsById: {[key: number]: TalentData} = {}\nexport const talentsBySpecArray: {[key: number]: TalentData[]} = {}\nexport const talentToSpec: {[key: number]: number} = {}\n\nfor (let specId in talentsBySpec) {\n for (let talentId in talentsBySpec[specId]) {\n talentsById[talentId] = talentsBySpec[specId][talentId]\n talentsBySpecArray[specId] = Object.values(talentsBySpec[specId])\n talentToSpec[talentId] = parseInt(specId, 10)\n }\n}\n","export const classes: ClassData[] = [\n { \n id: 1,\n name: 'Warrior',\n icon: 'class_warrior',\n specs: [161, 164, 163]\n },\n { \n id: 2,\n name: 'Paladin',\n icon: 'class_paladin',\n specs: [382, 383, 381]\n },\n { \n id: 3,\n name: 'Hunter',\n icon: 'class_hunter',\n specs: [361, 363, 362]\n },\n { \n id: 4,\n name: 'Rogue',\n icon: 'class_rogue',\n specs: [182, 181, 183]\n },\n { \n id: 5,\n name: 'Priest',\n icon: 'class_priest',\n specs: [201, 202, 203]\n },\n { \n id: 7,\n name: 'Shaman',\n icon: 'class_shaman',\n specs: [261, 263, 262]\n },\n { \n id: 8,\n name: 'Mage',\n icon: 'class_mage',\n specs: [81, 41, 61]\n },\n { \n id: 9,\n name: 'Warlock',\n icon: 'class_warlock',\n specs: [302, 303, 301]\n },\n { \n id: 11,\n name: 'Druid',\n icon: 'class_druid',\n specs: [283, 281, 282]\n },\n]\n\nexport const classById: {[key: number]: ClassData} = \n classes.reduce((previousValue: object, currentValue: ClassData) => {\n return {\n ...previousValue,\n [currentValue.id]: currentValue\n }\n }, {}) \n\nexport const classByName: {[key: string]: ClassData} = \n classes.reduce((previousValue: object, currentValue: ClassData) => {\n return {\n ...previousValue,\n [currentValue.name.toLowerCase()]: currentValue\n }\n }, {})\n","import { List, Map, fromJS } from 'immutable'\nimport { \n talentsBySpec, \n talentToSpec, \n talentsBySpecArray \n} from '../data/talents';\nimport { classByName } from '../data/classes'\n\nexport const MAX_POINTS = 51\nexport const MAX_ROWS = 7\n\nexport const SORT_TALENTS = (a: TalentData, b: TalentData) => {\n if (a.row === b.row) {\n return a.col - b.col\n }\n return a.row - b.row\n}\n\n/**\n * Returns the overall points spent in the tree.\n */\nexport function getPointsInSpec(specId: number, known: Map): number {\n // TODO: Hard to test this method when referencing talents from a file. Improve this.\n return Object.values(talentsBySpec[specId]).reduce((prev: number, current: TalentData) => {\n return prev + known.get(current.id, 0)\n }, 0)\n}\n\nexport function calcAvailablePoints(known: Map): number {\n return Math.max(0, MAX_POINTS - known.reduce((prev, current) => prev + current, 0))\n}\n\n/**\n * Returns whether a talent's other talent requirements are met.\n */\nexport function calcMeetsRequirements(talent: TalentData, known: Map): boolean {\n if (talent.requires.length === 0) {\n return true\n }\n return talent.requires.reduce((prev, req) => {\n if (!prev) return false\n return known.get(req.id, 0) >= req.qty\n }, true)\n}\n\nexport const canLearnTalent = (known: Map, talent: TalentData): boolean => {\n // Reached the max rank?\n if (known.get(talent.id, 0) >= talent.ranks.length) {\n return false\n }\n\n // Spend a maximum of 51 points\n if (calcAvailablePoints(known) === 0) {\n return false\n }\n \n // Support for specific Talent dependency requirement.\n if (talent.requires.length > 0 && !calcMeetsRequirements(talent, known)) {\n return false\n }\n \n // Check we have the required amount of points spent in the tree for this talent\n const requiredPoints = talent.row * 5\n const pointsInSpec = getPointsInSpec(talentToSpec[talent.id], known)\n if (requiredPoints > pointsInSpec) {\n return false\n }\n\n return true\n}\n\n/**\n * Adds a single talent point to the Map, if possible.\n */\nexport const addTalentPoint = (known: Map, talent: TalentData): Map => {\n const currentPoints = known.get(talent.id, 0)\n \n if (!canLearnTalent(known, talent)) {\n return known\n }\n\n return known.set(talent.id, currentPoints + 1)\n}\n\n/**\n * Removes a single talent point from the Map, if possible.\n */\nexport const removeTalentPoint = (known: Map, talent: TalentData): Map => {\n const currentPoints = known.get(talent.id, 0)\n const specId = talentToSpec[talent.id]\n\n // No points to reduce for this talent\n if (currentPoints === 0) {\n console.warn('no points to reduce')\n return known\n }\n \n let isDependency = false\n let highestRow = 0\n let cumulativePointsPerRow = {}\n\n known.forEach((points, talentId) => {\n const t = talentsBySpec[specId][talentId]\n if (t && points > 0) {\n isDependency = isDependency || t.requires.some((req) => req.id === talent.id)\n if (t.row > highestRow) {\n console.info('new highest row:', t)\n }\n highestRow = t.row > highestRow ? t.row : highestRow\n for (let row = t.row; row < MAX_ROWS; row++) {\n cumulativePointsPerRow[row] = (cumulativePointsPerRow[row] || 0) + points\n }\n }\n })\n\n // Check if removing this talent would not break the requirements for talents spent in later rows\n const pointsUntilHighestRow = cumulativePointsPerRow[highestRow - 1]\n const targetPointsHighestRow = highestRow * 5\n if (talent.row < highestRow && pointsUntilHighestRow - 1 < targetPointsHighestRow) {\n console.warn('would not break the requirements for talents spent in later rows', { \n talent,\n highestRow,\n pointsUntilHighestRow,\n targetPointsHighestRow\n })\n return known\n }\n\n // Prevent if another talent depends on this \n if (isDependency) {\n console.warn('is dependency')\n return known\n }\n\n return currentPoints === 1 \n ? known.remove(talent.id)\n : known.set(talent.id, currentPoints - 1)\n}\n\n/**\n * Either adds or removes a talent point based on the modifier.\n */\nexport const modifyTalentPoint = (known: Map, talent: TalentData, modifier: 1 | -1): Map => {\n if (modifier === 1) {\n return addTalentPoint(known, talent)\n } else {\n return removeTalentPoint(known, talent)\n }\n}\n\n// TODO\nexport function parsePointString(str: string): List> {\n const list: Array = []\n const trees = str.split('-')\n\n trees.forEach((stringForTree, index) => {\n const points = stringForTree.split('').map(a => parseInt(a, 10))\n list[index] = points\n })\n\n return fromJS(list)\n}\n\n/**\n * Encodes a Map of known talents into a URL-friendly string.\n */\nexport function encodeKnownTalents(known: Map, className: string): string {\n let string = ''\n const { specs } = classByName[className]\n for (let i = 0; i < specs.length; i++) {\n const specId = specs[i]\n const talents = talentsBySpecArray[specId].sort(SORT_TALENTS)\n string += i > 0 ? '-' : ''\n string += removeTrailingCharacters(\n talents.map((talent) => known.get(talent.id, 0)).join(''),\n '0'\n )\n }\n return removeTrailingCharacters(string, '-')\n}\n\n/**\n * Decodes a string of points into a Map of talents.\n */\nexport function decodeKnownTalents(pointString: string, className: string): Map {\n console.log(pointString, className)\n\n const { specs } = classByName[className]\n let known = Map()\n\n // TODO: Make sure we validate the point string\n const parts = pointString.split('-')\n for (let i = 0; i < parts.length; i++) {\n const specId = specs[i]\n const specPointStr = parts[i]\n console.log(specPointStr, { specId })\n const talents = talentsBySpecArray[specId].sort(SORT_TALENTS)\n\n for (let y = 0; y < specPointStr.length; y++) {\n const talent = talents[y]\n const points = parseInt(specPointStr[y], 10)\n \n // Validation: break out loop if there's more points in the string than this talent can have\n if (points > talent.ranks.length) {\n break\n }\n \n if (points > 0) {\n console.log(`Spent ${points} in ${talent.id}`)\n known = known.set(talent.id, points)\n }\n }\n }\n\n return known\n}\n\n/**\n * Removes repeated characters from the end of a string.\n */\nfunction removeTrailingCharacters(str: string, char: string): string {\n while (str[str.length - 1] === char) {\n str = str.slice(0, -1)\n }\n return str\n}","import './TalentSlot.scss'\nimport React, { FC } from 'react'\nimport { Icon } from './Icon'\nimport classNames from 'classnames'\nimport { Map } from 'immutable';\nimport { getPointsInSpec, calcMeetsRequirements } from '../lib/tree';\n\ninterface Props {\n talent: TalentData\n specId: number\n availablePoints: number\n /** All spent talents */\n knownTalents: Map\n /** Disabled override */\n disabled?: boolean\n onClick?: (talentId: number) => void\n onRightClick?: (talentId: number) => void\n}\n\nconst defaultProps: Partial = {\n onClick: () => undefined,\n onRightClick: () => undefined\n}\n\nconst isAvailable = (talent: TalentData, specId: number, knownTalents: Map): boolean => {\n // Dependent on other talents?\n if (!calcMeetsRequirements(talent, knownTalents)) {\n return false\n }\n const pointsInSpec = getPointsInSpec(specId, knownTalents)\n return talent.row * 5 <= pointsInSpec\n}\n\nexport const TalentSlot: FC = (props) => {\n const { talent, specId, knownTalents, availablePoints } = props\n const points = knownTalents.get(talent.id, 0)\n const showPoints = points > 0 || availablePoints > 0\n const disabled = props.disabled || !showPoints || !isAvailable(talent, specId, knownTalents)\n\n const containerClassNames = classNames('talent', {\n 'talent--disabled': !!disabled,\n 'talent--available': !disabled && points < talent.ranks.length,\n 'talent--maxed': points >= talent.ranks.length || (points > 0 && availablePoints === 0)\n })\n\n const pointsClassNames = classNames('point-label', {\n 'point-label--enabled': !disabled\n })\n\n const handleContextMenu = (e) => {\n if (props.onRightClick) props.onRightClick(talent.id)\n e.preventDefault()\n return false\n }\n\n return (\n
props.onClick(talent.id) : () => {}}\n onContextMenu={handleContextMenu}\n >\n
\n \n\n {showPoints && !disabled &&\n
\n {points}\n /{talent.ranks.length}\n
\n }\n
\n )\n}\n\nTalentSlot.defaultProps = defaultProps\n\n;(TalentSlot as any).whyDidYouRender = true","import './Arrow.scss'\nimport React, { FC } from 'react'\nimport classNames from 'classnames'\n\ninterface Props {\n from: TalentData\n to: TalentData\n active?: boolean\n}\n\nexport const Arrow: FC = ({ from, to, active = false }) => {\n const length = to.row === from.row \n ? Math.abs(to.col - from.col)\n : to.row - from.row\n\n const props = {\n 'data-col': from.col,\n 'data-row': from.row,\n 'data-length': length,\n }\n\n const className = classNames('arrow', {\n 'arrow--active': active,\n 'arrow--down': to.row > from.row,\n 'arrow--right': to.row === from.row && to.col > from.col,\n 'arrow--left': to.row === from.row && to.col < from.col,\n 'arrow--right-down': to.row === from.row + 1 && to.col === from.col + 1\n })\n\n return
\n}","import React, { useCallback } from 'react'\nimport { Map } from 'immutable'\nimport { TalentSlot } from './TalentSlot';\nimport { getPointsInSpec, canLearnTalent } from '../lib/tree';\nimport { talentsBySpec, specNames, talentsById } from '../data/talents'\nimport { Arrow } from './Arrow'\n\ninterface Props {\n specId: number\n availablePoints: number\n knownTalents: Map\n onTalentPress: TalentClickHandler\n}\n\nexport const TalentTree: React.FC = ({ specId, knownTalents, availablePoints, onTalentPress }) => {\n const talents = Object.values(talentsBySpec[specId])\n\n const handleClick = useCallback(\n (talentId) => onTalentPress(specId, talentId, 1), \n [specId, onTalentPress]\n )\n const handleRightClick = useCallback(\n (talentId) => onTalentPress(specId, talentId, -1), \n [specId, onTalentPress]\n )\n\n const bodyStyle = { \n backgroundImage: `url(${require(`../images/specs/${specId}.jpg`)})`\n }\n\n const arrows = talents\n .filter((talent) => talent.requires.length > 0)\n .map((talent) => {\n return 0 || canLearnTalent(knownTalents, talent)}\n />\n })\n\n return (\n
\n
\n

{specNames[specId]} ({getPointsInSpec(specId, knownTalents)})

\n
\n\n
\n {talents.map((talent) => \n \n )}\n\n {arrows}\n
\n
\n )\n}\n\n;(TalentTree as any).whyDidYouRender = true","import React from 'react'\nimport { Map } from 'immutable'\nimport { TalentTree } from './TalentTree'\nimport { \n modifyTalentPoint, \n calcAvailablePoints,\n encodeKnownTalents\n} from '../lib/tree'\nimport { talentsBySpec } from '../data/talents'\nimport { classByName } from '../data/classes'\nimport { History } from 'history'\n\ninterface Props {\n selectedClass: string\n history: History\n initialTalents?: Map\n}\n\nconst EMPTY_TALENTS = Map()\n // .set(30, 5)\n // .set(26, 5)\n // .set(34, 5)\n // .set(28, 2)\n // .set(27, 3)\n // .set(33, 1)\n // .set(29, 1)\n // .set(32, 1)\n\nexport class Calculator extends React.PureComponent {\n static whyDidYouRender = true\n\n state = {\n knownTalents: EMPTY_TALENTS\n }\n\n componentDidMount() {\n if (this.props.initialTalents) {\n this.setState({ knownTalents: this.props.initialTalents })\n this.updateURL(this.props.initialTalents)\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.selectedClass !== this.props.selectedClass) {\n this.setState({ \n knownTalents: EMPTY_TALENTS \n })\n }\n }\n\n updateURL(knownTalents: Map) {\n const { selectedClass } = this.props\n const pointString = encodeKnownTalents(knownTalents, selectedClass)\n this.props.history.replace(`/${selectedClass}` + (pointString ? `/${pointString}` : ''))\n }\n \n handleTalentPress = (specId: number, talentId: number, modifier: 1 | -1) => {\n const talent = talentsBySpec[specId][talentId]\n console.log('Clicked talent: ' + talentId)\n\n const newKnownTalents = modifyTalentPoint(this.state.knownTalents, talent, modifier)\n if (newKnownTalents !== this.state.knownTalents) {\n this.updateURL(newKnownTalents)\n }\n this.setState({ knownTalents: newKnownTalents })\n }\n\n render() {\n const { selectedClass } = this.props\n const { knownTalents } = this.state\n\n const classData = classByName[selectedClass]\n const availablePoints = calcAvailablePoints(knownTalents)\n\n return (\n
\n
\n {classData.specs.map((specId) => (\n \n ))}\n
\n\n
\n Points: {availablePoints}\n
\n\n \n
\n )\n }\n}\n\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { classByName } from '../data/classes'\nimport { Icon } from './Icon'\nimport classNames from 'classnames'\n\ninterface Props {\n /** Name of the selected class, lowercase */\n selected?: string\n}\n\nconst classNameForItem = (c: ClassData, selected: string) => classNames('class-picker__class', {\n 'class-picker__class--active': c.name.toLowerCase() === selected,\n 'class-picker__class--inactive': !!selected && c.name.toLowerCase() !== selected\n})\n\nexport class ClassPicker extends React.PureComponent {\n static whyDidYouRender = true\n\n render() {\n const { selected } = this.props\n\n const cn = classNames('class-picker', {\n 'class-picker--has-selection': !!selected\n })\n \n return (\n
    \n {Object.values(classByName).map((c) => \n
  • \n \n \n \n
  • \n )}\n
\n )\n }\n}\n","import React from 'react'\nimport { Calculator } from './Calculator'\nimport { ClassPicker } from './ClassPicker'\nimport { match } from 'react-router-dom'\nimport { RouteComponentProps } from 'react-router'\nimport { decodeKnownTalents } from '../lib/tree'\nimport { classByName } from '../data/classes'\n\ninterface Props extends RouteComponentProps {\n match: match<{ \n selectedClass: string\n pointString: string\n }>\n}\n\nexport class IndexRoute extends React.PureComponent {\n static whyDidYouRender = true\n\n componentDidMount() {\n const { selectedClass } = this.props.match.params\n if (selectedClass && !classByName[selectedClass]) {\n this.props.history.replace('/')\n }\n }\n\n render() {\n const { match, history } = this.props\n const { selectedClass, pointString } = match.params\n\n if (selectedClass && !classByName[selectedClass]) {\n return null\n }\n\n return (\n
\n \n \n {selectedClass && \n \n }\n
\n )\n }\n}","import React from 'react'\nimport './App.scss'\nimport { IndexRoute } from './components/IndexRoute'\nimport { BrowserRouter as Router, Route } from 'react-router-dom'\n\nconst App: React.FC = () => {\n return (\n \n {/* */}\n
\n \n
\n
\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport * as serviceWorker from './serviceWorker'\n\nif (process.env.NODE_ENV !== 'production') {\n const whyDidYouRender = require('@welldone-software/why-did-you-render/dist/no-classes-transpile/umd/whyDidYouRender.min.js')\n whyDidYouRender(React)\n}\n\nReactDOM.render(, document.getElementById('root'))\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n"],"sourceRoot":""} \ No newline at end of file