1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,82683,e=>{e.v({abilityTile:"bravery-module__-As-Qa__abilityTile",abilityTilePrimary:"bravery-module__-As-Qa__abilityTilePrimary",about:"bravery-module__-As-Qa__about",breadcrumb:"bravery-module__-As-Qa__breadcrumb",breadcrumbCurrent:"bravery-module__-As-Qa__breadcrumbCurrent",buildActions:"bravery-module__-As-Qa__buildActions",buildGrid:"bravery-module__-As-Qa__buildGrid",buildPanel:"bravery-module__-As-Qa__buildPanel",card:"bravery-module__-As-Qa__card",cardBody:"bravery-module__-As-Qa__cardBody",cardHeading:"bravery-module__-As-Qa__cardHeading",cardHint:"bravery-module__-As-Qa__cardHint",castLabel:"bravery-module__-As-Qa__castLabel",championArt:"bravery-module__-As-Qa__championArt",championButton:"bravery-module__-As-Qa__championButton",championCheck:"bravery-module__-As-Qa__championCheck",championGrid:"bravery-module__-As-Qa__championGrid",championLabel:"bravery-module__-As-Qa__championLabel",championName:"bravery-module__-As-Qa__championName",championScroll:"bravery-module__-As-Qa__championScroll",championSelected:"bravery-module__-As-Qa__championSelected",chip:"bravery-module__-As-Qa__chip",chipActive:"bravery-module__-As-Qa__chipActive",chips:"bravery-module__-As-Qa__chips",classicRune:"bravery-module__-As-Qa__classicRune",classicRuneCopy:"bravery-module__-As-Qa__classicRuneCopy",classicRuneGrid:"bravery-module__-As-Qa__classicRuneGrid",contentAd:"bravery-module__-As-Qa__contentAd",empty:"bravery-module__-As-Qa__empty",emptyValue:"bravery-module__-As-Qa__emptyValue",epithet:"bravery-module__-As-Qa__epithet",extrasRow:"bravery-module__-As-Qa__extrasRow",eyebrow:"bravery-module__-As-Qa__eyebrow",factRow:"bravery-module__-As-Qa__factRow",frame:"bravery-module__-As-Qa__frame",groupLink:"bravery-module__-As-Qa__groupLink",headerAd:"bravery-module__-As-Qa__headerAd",historyCopy:"bravery-module__-As-Qa__historyCopy",historyImage:"bravery-module__-As-Qa__historyImage",historyIndex:"bravery-module__-As-Qa__historyIndex",historyItem:"bravery-module__-As-Qa__historyItem",historyList:"bravery-module__-As-Qa__historyList",historyMeta:"bravery-module__-As-Qa__historyMeta",historyName:"bravery-module__-As-Qa__historyName",historyPanel:"bravery-module__-As-Qa__historyPanel",historySectionTitle:"bravery-module__-As-Qa__historySectionTitle",item:"bravery-module__-As-Qa__item",itemCopy:"bravery-module__-As-Qa__itemCopy",itemImage:"bravery-module__-As-Qa__itemImage",itemName:"bravery-module__-As-Qa__itemName",itemNumber:"bravery-module__-As-Qa__itemNumber",itemsCard:"bravery-module__-As-Qa__itemsCard",itemsGrid:"bravery-module__-As-Qa__itemsGrid",keystoneOption:"bravery-module__-As-Qa__keystoneOption",levelAxis:"bravery-module__-As-Qa__levelAxis",levelCell:"bravery-module__-As-Qa__levelCell",levelCellE:"bravery-module__-As-Qa__levelCellE",levelCellQ:"bravery-module__-As-Qa__levelCellQ",levelCellR:"bravery-module__-As-Qa__levelCellR",levelCellW:"bravery-module__-As-Qa__levelCellW",levelInput:"bravery-module__-As-Qa__levelInput",levelMatrix:"bravery-module__-As-Qa__levelMatrix",levelRow:"bravery-module__-As-Qa__levelRow",levelRowLabel:"bravery-module__-As-Qa__levelRowLabel",levelsCard:"bravery-module__-As-Qa__levelsCard",levelsChevron:"bravery-module__-As-Qa__levelsChevron",levelsToggle:"bravery-module__-As-Qa__levelsToggle",levelsToggleAction:"bravery-module__-As-Qa__levelsToggleAction",levelsToggleHeading:"bravery-module__-As-Qa__levelsToggleHeading",linkButton:"bravery-module__-As-Qa__linkButton",main:"bravery-module__-As-Qa__main",masteryGrid:"bravery-module__-As-Qa__masteryGrid",masteryTree:"bravery-module__-As-Qa__masteryTree",masteryTreeActive:"bravery-module__-As-Qa__masteryTreeActive",maxOrderArrow:"bravery-module__-As-Qa__maxOrderArrow",mono:"bravery-module__-As-Qa__mono",notice:"bravery-module__-As-Qa__notice",outer:"bravery-module__-As-Qa__outer",overview:"bravery-module__-As-Qa__overview",panel:"bravery-module__-As-Qa__panel",panelAd:"bravery-module__-As-Qa__panelAd",poolCount:"bravery-module__-As-Qa__poolCount",poolMeta:"bravery-module__-As-Qa__poolMeta",poolMetaSpacer:"bravery-module__-As-Qa__poolMetaSpacer",poolPanel:"bravery-module__-As-Qa__poolPanel",poolStatus:"bravery-module__-As-Qa__poolStatus",portrait:"bravery-module__-As-Qa__portrait",portraitImage:"bravery-module__-As-Qa__portraitImage",primaryButton:"bravery-module__-As-Qa__primaryButton",reveal:"bravery-module__-As-Qa__reveal",roleValue:"bravery-module__-As-Qa__roleValue",rollHeader:"bravery-module__-As-Qa__rollHeader",rollPanel:"bravery-module__-As-Qa__rollPanel",rule:"bravery-module__-As-Qa__rule",ruleCopy:"bravery-module__-As-Qa__ruleCopy",ruleDescription:"bravery-module__-As-Qa__ruleDescription",ruleName:"bravery-module__-As-Qa__ruleName",ruleNumber:"bravery-module__-As-Qa__ruleNumber",rules:"bravery-module__-As-Qa__rules",rulesTitle:"bravery-module__-As-Qa__rulesTitle",runeBoard:"bravery-module__-As-Qa__runeBoard",runeBody:"bravery-module__-As-Qa__runeBody",runeCardName:"bravery-module__-As-Qa__runeCardName",runeCrest:"bravery-module__-As-Qa__runeCrest",runeCrestImage:"bravery-module__-As-Qa__runeCrestImage",runeDivider:"bravery-module__-As-Qa__runeDivider",runeDot:"bravery-module__-As-Qa__runeDot",runeHeading:"bravery-module__-As-Qa__runeHeading",runeKind:"bravery-module__-As-Qa__runeKind",runeOption:"bravery-module__-As-Qa__runeOption",runeOptionImage:"bravery-module__-As-Qa__runeOptionImage",runeOptionSelected:"bravery-module__-As-Qa__runeOptionSelected",runeRow:"bravery-module__-As-Qa__runeRow",runeSection:"bravery-module__-As-Qa__runeSection",runeTreeCard:"bravery-module__-As-Qa__runeTreeCard",runeTreeCardPrimary:"bravery-module__-As-Qa__runeTreeCardPrimary",runeTreeHeader:"bravery-module__-As-Qa__runeTreeHeader",runeTreeName:"bravery-module__-As-Qa__runeTreeName",runesCard:"bravery-module__-As-Qa__runesCard",runesColumn:"bravery-module__-As-Qa__runesColumn",search:"bravery-module__-As-Qa__search",searchInput:"bravery-module__-As-Qa__searchInput",secondaryActions:"bravery-module__-As-Qa__secondaryActions",secondaryButton:"bravery-module__-As-Qa__secondaryButton",settingGroup:"bravery-module__-As-Qa__settingGroup",settingLabel:"bravery-module__-As-Qa__settingLabel",shardImage:"bravery-module__-As-Qa__shardImage",shardOption:"bravery-module__-As-Qa__shardOption",sidebar:"bravery-module__-As-Qa__sidebar",startItemCopy:"bravery-module__-As-Qa__startItemCopy",startItemImage:"bravery-module__-As-Qa__startItemImage",startItemName:"bravery-module__-As-Qa__startItemName",statusDot:"bravery-module__-As-Qa__statusDot",summoner:"bravery-module__-As-Qa__summoner",summonerIcon:"bravery-module__-As-Qa__summonerIcon",tab:"bravery-module__-As-Qa__tab",tabActive:"bravery-module__-As-Qa__tabActive",tabCount:"bravery-module__-As-Qa__tabCount",tabs:"bravery-module__-As-Qa__tabs",tag:"bravery-module__-As-Qa__tag",title:"bravery-module__-As-Qa__title"})},92233,e=>{"use strict";
1var l=e.i(59055),r=e.i(43188),t=e.i(3378);let a="ca-pub-6057989501899604",s={header:t.default.env.NEXT_PUBLIC_GOOGLE_ADSENSE_SLOT_HEADER||"2700595153",content:t.default.env.NEXT_PUBLIC_GOOGLE_ADSENSE_SLOT_CONTENT||"4290677299",panel:t.default.env.NEXT_PUBLIC_GOOGLE_ADSENSE_SLOT_PANEL||"4005490858"};encodeURIComponent(a),e.s(["GoogleAdSenseAd",0,function({placement:e,adFormat:t="auto",className:n}){let i=s[e],o=(0,r.useRef)(!1);return(0,r.useEffect)(()=>{if(!o.current){o.current=!0;try{(window.adsbygoogle??=[]).push({})}catch{}}},[i]),(0,l.jsx)("aside",{"aria-label":"Advertisement",className:n,children:(0,l.jsx)("ins",{className:"adsbygoogle","data-ad-client":a,"data-ad-format":t,"data-ad-slot":i,"data-full-width-responsive":"true",style:{display:"block"}})})}],92233)},99666,14295,54166,71049,98850,e=>{"use strict";let l=new Map([["offense",0],["defense",1],["utility",2]]);function r(e){return[...e].sort((e,r)=>(l.get(e.treeName.toLowerCase())??Number.MAX_SAFE_INTEGER)-(l.get(r.treeName.toLowerCase())??Number.MAX_SAFE_INTEGER))}e.s(["orderClassicMasteries",0,r],14295);class t extends Error{constructor(e){super(e),this.name="BraveryGenerationError"}}function a(e,l){if(!Number.isInteger(e)||e<=0)throw new t("Cannot choose from an empty collection.");let r=l();if(!Number.isFinite(r)||r<0||r>=1)throw new t(`The random source returned ${String(r)}; expected a finite value in [0, 1).`);return Math.floor(r*e)}function s(e,l){return e[a(e.length,l)]}function n(e,l){let r=[...e];for(let e=r.length-1;e>0;e-=1){let t=a(e+1,l);[r[e],r[t]]=[r[t],r[e]]}return r}function i(e){return[...new Set(e)]}function o(e,l){let r=l??e.site.defaultMapId,a=e.maps.find(e=>e.id===r);if(!a)throw new t(`Unknown map ${r}. Available maps: ${e.maps.map(e=>e.id).join(", ")}.`);return a}function u(e,l){return i([...e.requiredSpellIds,...null===l?[]:e.requiredSpellIdsByRole[l]??[]])}function d(e,l,r,t){let a=new Set(l.allowedSpellIds);return e.summonerSpells.filter(e=>{if(!a.has(e.id)||!e.modes.includes(l.spellMode)||e.summonerLevel>t)return!1;let s=l.roleLockedSpellIds[e.id];return!s?.length||null!==r&&s.includes(r)})}function m(e,l,r,t){let a=new Set(d(e,l,r,t).map(e=>e.id)),s=u(l,r);return s.length<=l.spellCount&&s.every(e=>a.has(e))&&a.size>=l.spellCount}function c(e,l,r,t){let a=r.role&&"All"!==r.role?r.role:void 0;return(a?[a]:l.roles).filter(r=>l.roles.includes(r)&&m(e,l,r,t))}function _(e,l,r,a,n,o){let u=0===l.roles.length,d=!u&&r.role&&"All"!==r.role?r.role:void 0;if(d&&!l.roles.includes(d))throw new t(`${d} is not available on ${l.name}.`);if(d&&!m(e,l,d,a))throw new t(`${d}
1 has no legal ${l.spellCount}-spell loadout on ${l.name} at summoner level ${a}.`);let _=u?[]:c(e,l,r,a);if(u?!m(e,l,null,a):!_.length)throw new t(`${l.name} has no legal ${l.spellCount}-spell loadout at summoner level ${a}.`);let p=new Set(e.champions.map(e=>e.id)),h=o?[o]:r.championIds?i(r.championIds):void 0,y=h?.filter(e=>!p.has(e))??[];if(y.length)throw new t(`Unknown champion id(s): ${y.join(", ")}.`);let b=h?new Set(h):void 0,f=b?e.champions.filter(e=>b.has(e.id)):e.champions;if(!f.length)throw new t("The selected champion pool has no candidates.");return{champion:o?f.find(e=>e.id===o):s(f,n),role:u?null:d??s(_,n)}}function p(e,l={}){let r=o(e,l.mapId),t=l.summonerLevel??e.site.defaultSummonerLevel;if(!Number.isInteger(t)||t<1)return 0;if(0===r.roles.length){if(!m(e,r,null,t))return 0}else if(!c(e,r,l,t).length)return 0;if(!l.championIds)return e.champions.length;let a=new Set(l.championIds);return e.champions.filter(e=>a.has(e.id)).length}let h=new WeakMap;function y(e,l){let r=h.get(e);r||(r=new WeakMap,h.set(e,r));let t=r.get(l);if(!t){var a;let s,n,o,u,d,m,c,_;s=e.generation.items,a=l.id,u=new Set((o={minimumFinalItemGold:(n=s.mapOverrides[a]??{}).minimumFinalItemGold??s.minimumFinalItemGold,minimumFinalItemDepth:n.minimumFinalItemDepth??s.minimumFinalItemDepth,minimumBootDepth:n.minimumBootDepth??s.minimumBootDepth,maximumStandardItemId:n.maximumStandardItemId??s.maximumStandardItemId,allowedBootIds:n.allowedBootIds??s.allowedBootIds,excludedIds:i([...s.excludedIds,...n.excludedIds??[]])}).allowedBootIds),d=new Set(s.lowDepthFinalItemIds),m=new Set(o.excludedIds),c=new Set(s.excludedTags),_=s.excludedNamePatterns.map(e=>RegExp(e,"i")),t={baseCandidates:e.items.filter(e=>{if(!e.mapIds.includes(l.id)||!e.purchasable||!e.inStore||e.hideFromAll||m.has(e.id)||e.specialRecipe&&e.specialRecipe>0||e.tags.some(e=>c.has(e)))return!1;let r=`${e.name} 2${e.description} 3${e.colloq}`;if(_.some(e=>e.test(r)))return!1;if(e.isBoots)return u.has(e.id)&&e.depth>=o.minimumBootDepth;let t=Number(e.id);return!!Number.isInteger(t)&&!(t>o.maximumStandardItemId)&&!(e.into.length>0)&&(!(e.depth<o.minimumFinalItemDepth)||!!d.has(e.id))&&e.totalGold>=o.minimumFinalItemGold}),championContexts:new WeakMap,map:l,mapExcludedIds:m,mapPolicy:o,meleeOnlyBootIds:new Set(s.meleeOnlyBootIds),policy:s,rangedOnlyItemIds:new Set(s.rangedOnlyItemIds)},r.set(l,t)}return t}function b(e,l,r){let a=y(e,l),s=function(e,l){let r=e.championContexts.get(l);if(r)return r;let a=e.policy.championExceptions[l.id],s={excludedIds:new Set(a?.excludedItemIds??[]),identity:new Set([l.id.toLowerCase(),l.name.toLowerCase()]),isMelee:l.attackRange<=200,maxBoots:function(e,l,r){let a=e.championExceptions[r.id]?.maxBoots??e.maxBoots;if(!Number.isInteger(a)||a<0||a>l.itemCount)throw new t(`The configured boots count ${a} is invalid for ${r.name} on ${l.name}.`);return a}(e.policy,e.map,l)};return e.championContexts.set(l,s),s}(a,r);return{candidates:a.baseCandidates.filter(e=>!(s.excludedIds.has(e.id)||e.requiredChampion&&!s.identity.has(e.requiredChampion.toLowerCase())||s.isMelee&&a.rangedOnlyItemIds.has(e.id))&&(!e.isBoots||0!==s.maxBoots&&!(a.mapPolicy.minimumBootDepth>0&&!s.isMelee&&a.meleeOnlyBootIds.has(e.id)))),maxBoots:s.maxBoots}}function f(e,l,r){let{mapExcludedIds:t}=y(e,l),a=e.items.filter(e=>!t.has(e.id)&&e.purchasable&&e.inStore&&!e.hideFromAll&&e.mapIds.includes(l.id)&&("11"!==l.id||0===e.from.length&&e.totalGold<=500&&!e.tags.includes("Consumable"))),s=null===r?[]:l.startingItemIdsByRole[r]??[],n=s.length?s:l.startingItemIds;if(n.length){let e=new Set(n);return a.filter(l=>e.has(l.id))}return"30"===l.id?a.filter(e=>e.tags.includes("Lane")&&!e.tags.includes("Trinket")):"Jungle"===r?a.filter(e=>e.tags.includes("Jungle")&&!e.tags.includes("Consumable")&&!e.tags.includes("Trinket")):"Support"===r?a.filter(e=>e.tags.includes("Vision")&&e.tags.includes("GoldPer")&&e.tags.includes("Lane")):a.filter(e=>e.tags.includes("Lane")&&!e.tags.includes("GoldPer")&&e.baseGold>=300)}function v(e,l){let r=new Set(e.map(e=>e.id));return l.exclusiveGroups.every(e=>e.itemIds.reduce((e,l)=>
3e+Number(r.has(l)),0)<=e.maxOwned)}let g={Mark:9,Seal:9,Glyph:9,Quintessence:3};function A(e,l,r){let a=e.rows.flatMap(e=>e.masteries.flatMap(l=>l?[{mastery:l,row:e}]:[])),n=new Map(a.map(({mastery:e})=>[e.id,e])),i=new Map,o=0;for(;o<l;){let u=a.filter(({mastery:e,row:l})=>{if((i.get(e.id)??0)>=e.maxRank||l.pointsRequired>o)return!1;if(!e.requiresMastery)return!0;let r=n.get(e.requiresMastery);return!!(r&&(i.get(r.id)??0)>=r.maxRank)});if(!u.length)throw new t(`${e.name} cannot provide a legal ${l}-point mastery page.`);let{mastery:d}=s(u,r);i.set(d.id,(i.get(d.id)??0)+1),o+=1}let u=a.flatMap(({mastery:e})=>{let l=i.get(e.id)??0;return l?[{...e,rank:l}]:[]}).sort((e,l)=>e.id-l.id);return{treeName:e.name,points:o,picks:u}}function x(e,l,r,t){let a=e.abilities[l];if(!a)return!1;let s=r[l];return!(s>=a.maxRanks)&&a.rankUnlockLevels[s]<=t}function w(e,l){let r=e.generation.abilities,a=r.championProfiles[l.id]??r.defaultProfile,s=r.profiles[a];if(!s)throw new t(`Champion ${l.name} references unknown ability profile ${a}.`);return{profileId:a,profile:s}}function Q(e,l,a={},i=Math.random){return function(e,l,a,i){let m=o(e,l.mapId),c=l.summonerLevel??e.site.defaultSummonerLevel;if(!Number.isInteger(c)||c<1)throw new t("summonerLevel must be a positive integer.");let{champion:p,role:h}=_(e,m,l,c,a,i),{abilityPriority:y,abilityOrder:Q}=function(e,l,r,a){let{profileId:s,profile:i}=w(e,l),o=i.fixedFirstPriorityAbility,u=o?[o,...n(i.priorityAbilities.filter(e=>e!==o),a)]:n(i.priorityAbilities,a),d={Q:0,W:0,E:0,R:0},m=[];for(let e=1;e<=r;e+=1){let l,r=i.forcedAtLevels[String(e)];if(r){if(!x(i,r,d,e))throw new t(`Ability profile ${s} cannot legally rank forced ability ${r} at level ${e}.`);l=r}else l=u.find(l=>x(i,l,d,e));if(!l)throw new t(`Ability profile ${s} has no legal rank available at level ${e}.`);d[l]+=1,m.push(l)}return{abilityPriority:u,abilityOrder:m}}(e,p,m.abilityLevelCap,a),C=function(e,l,r,a){let s=e.generation.items,{candidates:i,maxBoots:o}=b(e,l,r),u=n(i.filter(e=>e.isBoots),a).slice(0,o),d=l.itemCount-o,m=[];for(let e of n(i.filter(e=>!e.isBoots),a))if(v([...u,...m,e],s)&&(m.push(e),m.length===d))break;if(u.length!==o||m.length!==d)throw new t(`${l.name} cannot provide ${o} boots and ${d} non-boots for ${r.name}.`);return[...u,...m]}(e,m,p,a),I=function(e,l,r,a,s){let i=d(e,l,r,a),o=new Map(i.map(e=>[e.id,e])),m=u(l,r);if(m.length>l.spellCount)throw new t(`${l.name} requires ${m.length} spells but only has ${l.spellCount} spell slots.`);let c=m.map(e=>{let s=o.get(e);if(!s)throw new t(`${e} is required for ${r} on ${l.name}, but is unavailable at summoner level ${a}.`);return s}),_=new Set(m),p=i.filter(e=>!_.has(e.id)),h=l.spellCount-c.length;if(p.length<h)throw new t(`${l.name} only has ${i.length} eligible spells at summoner level ${a}; ${l.spellCount} are required.`);return n([...c,...n(p,s).slice(0,h)],s)}(e,m,h,c,a),N=m.runesEnabled?function(e,l){let r=e.generation.runes;if(e.runeTrees.length<2)throw new t("At least two rune trees are required.");let a=s(e.runeTrees,l),i=s(e.runeTrees.filter(e=>e.id!==a.id),l),o=a.slots[r.keystoneSlotIndex];if(!o?.runes.length)throw new t(`${a.name} has no usable keystone slot.`);let u=a.slots.filter(e=>e.index!==r.keystoneSlotIndex);if(u.some(e=>!e.runes.length))throw new t(`${a.name} has an empty minor rune slot.`);let d=n(i.slots.filter(e=>r.secondaryEligibleSlotIndexes.includes(e.index)&&e.runes.length>0),l).slice(0,r.secondaryPickCount);if(d.length!==r.secondaryPickCount)throw new t(`${i.name} has too few eligible secondary slots.`);if(e.statShardRows.some(e=>!e.options.length))throw new t("A stat shard row has no options.");return{primary:{treeId:a.id,treeKey:a.key,treeName:a.name,color:a.color,keystone:s(o.runes,l),picks:u.map(e=>s(e.runes,l))},secondary:{treeId:i.id,treeKey:i.key,treeName:i.name,color:i.color,picks:d.map(e=>s(e.runes,l))},statShards:e.statShardRows.map(e=>s(e.options,l))}}(e,a):null,S="classic"===e.mode?function(e,l){let a=Object.keys(g).map(r=>({...s(e.classicRunes.filter(e=>e.type===r),l),count:g[r]}));if(e.classicMasteryTrees.length<3)throw new t("Classic requires three mastery trees.");let[i,o,u]=n(e.classicMasteryTrees,l);return{runes:a,masteries:r([A(i,21,l),A(o,9,l),A(u,0,l)])}}(e,a):null,$=function(e,l,r,a){let n=f(e,l,r);
3if(!n.length)throw new t(`${l.name} has no role-specific item for ${r??"roleless play"}.`);return s(n,a)}(e,m,h,a);return{version:e.version,map:m,champion:p,role:h,roleSpecificItem:$,items:C,summonerSpells:I,runes:N,classicLoadout:S,abilityPriority:y,abilityOrder:Q}}(e,a,i,l)}function C(e){let l=e>>>0;return()=>{let e=Math.imul((l=l+0x6d2b79f5|0)^l>>>15,1|l);return(((e^=e+Math.imul(e^e>>>7,61|e))^e>>>14)>>>0)/0x100000000}}new WeakMap,e.s(["generateBuildForChampion",0,Q,"getEligibleChampionCount",0,p,"isValidBuild",0,function(e,l){return 0===function(e,l){let r=[],t=e.maps.find(e=>e.id===l.map.id),a=e.champions.find(e=>e.id===l.champion.id);if("string"==typeof l.version&&l.version||r.push("version is missing"),t||r.push(`unknown map ${l.map.id}`),a||r.push(`unknown champion ${l.champion.id}`),!t||!a)return r;0===t.roles.length?null!==l.role&&r.push(`${t.name} must not have a role`):null===l.role?r.push(`${t.name} requires a role`):t.roles.includes(l.role)||r.push(`${l.role} is unavailable on ${t.name}`),l.items.length!==t.itemCount&&r.push(`expected ${t.itemCount} items, received ${l.items.length}`),i(l.items.map(e=>e.id)).length!==l.items.length&&r.push("items contain duplicates");let{candidates:s,maxBoots:n}=b(e,t,a),o=new Set(s.map(e=>e.id));for(let e of l.items)o.has(e.id)||r.push(`${e.id} is not an eligible item`);l.items.filter(e=>e.isBoots).length!==n&&r.push(`expected exactly ${n} boots`),l.items.slice(0,n).every(e=>e.isBoots)&&l.items.slice(n).every(e=>!e.isBoots)||r.push("boots must appear before non-boot items"),v(l.items,e.generation.items)||r.push("items violate an exclusive item group"),l.roleSpecificItem?new Set(f(e,t,l.role).map(e=>e.id)).has(l.roleSpecificItem.id)||r.push(`${l.roleSpecificItem.id} is not an eligible role-specific item`):r.push("role-specific item is missing"),l.summonerSpells.length!==t.spellCount&&r.push(`expected ${t.spellCount} summoner spells, received ${l.summonerSpells.length}`),i(l.summonerSpells.map(e=>e.id)).length!==l.summonerSpells.length&&r.push("summoner spells contain duplicates");let m=new Set(d(e,t,l.role,Number.MAX_SAFE_INTEGER).map(e=>e.id));for(let e of l.summonerSpells)m.has(e.id)||r.push(`${e.id} is not an eligible summoner spell`);let c=new Set(l.summonerSpells.map(e=>e.id));for(let e of u(t,l.role))c.has(e)||r.push(`required spell ${e} is missing`);if(t.runesEnabled)if(l.runes){let t=l.runes,a=e.generation.runes,s=e.runeTrees.find(e=>e.id===t.primary.treeId),n=e.runeTrees.find(e=>e.id===t.secondary.treeId);if(s||r.push(`unknown primary rune tree ${t.primary.treeId}`),n||r.push(`unknown secondary rune tree ${t.secondary.treeId}`),s&&n&&s.id===n.id&&r.push("primary and secondary rune trees must differ"),s){let e=s.slots[a.keystoneSlotIndex];e?.runes.some(e=>e.id===t.primary.keystone.id)||r.push("primary keystone is not in the configured keystone slot");let l=s.slots.filter(e=>e.index!==a.keystoneSlotIndex);t.primary.picks.length!==l.length?r.push(`expected ${l.length} primary minor runes`):t.primary.picks.forEach((e,t)=>{l[t].runes.some(l=>l.id===e.id)||r.push(`primary rune ${e.id} is in the wrong slot`)})}if(n){t.secondary.picks.length!==a.secondaryPickCount&&r.push(`expected ${a.secondaryPickCount} secondary runes`);let e=n.slots.filter(e=>a.secondaryEligibleSlotIndexes.includes(e.index)),l=t.secondary.picks.map(l=>e.find(e=>e.runes.some(e=>e.id===l.id))?.index);l.some(e=>void 0===e)&&r.push("a secondary rune is not in an eligible slot"),l.every(e=>void 0!==e)&&i(l).length!==l.length&&r.push("secondary runes must come from distinct slots")}t.statShards.length!==e.statShardRows.length?r.push(`expected ${e.statShardRows.length} stat shards`):t.statShards.forEach((l,t)=>{e.statShardRows[t].options.some(e=>e.id===l.id)||r.push(`stat shard ${l.id} is in the wrong row`)})}else r.push(`${t.name} requires runes`);else null!==l.runes&&r.push(`${t.name} must not have runes`);if("classic"===e.mode){let t=l.classicLoadout;if(t){let l=new Set(e.classicRunes.map(e=>e.id)),a=new Set;for(let e of t.runes)l.has(e.id)||r.push(`unknown Classic rune ${e.id}`),a.has(e.type)&&r.push(`duplicate Classic rune type ${e.type}`),a.add(e.type),e.count!==g[e.type]&&r.push(`${e.type} must use ${g[e.type]} slots`);a.size!==Object.keys(g).length&&r.push("Classic requires Marks, Seals, Glyphs, and Quintessences");let s=new Map(e.classicMasteryTrees.map(e=>[e.name,e]));for(let e of(i(t.masteries.map(e=>e.treeName)).length!==s.size&&r.push("Classic mastery trees must be unique"),30!==t.masteries.reduce((e,l)=>e+l.points,0)&&r.push("Classic mastery pages must spend 30 points"),t.masteries)){let l=s.get(e.treeName);if(!l){r.push(`unknown Classic mastery tree ${e.treeName}`);continue}let t=new Map(l.rows.flatMap(e=>e.masteries.filter(e=>null!==e)).map(e=>[e.id,e]));for(let l of(e.picks.reduce((e,l)=>e+l.rank,0)!==e.points&&r.push(`${e.treeName} mastery ranks do not match its point total`),e.picks)){let e=t.get(l.id);(!e||l.rank<1||l.rank>
3e.maxRank)&&r.push(`invalid Classic mastery ${l.id}`)}}}else r.push("Classic requires a rune and mastery loadout")}else null!==l.classicLoadout&&r.push("Live builds must not include a Classic loadout");let{profile:_}=w(e,a),p=_.priorityAbilities,h=l.abilityPriority.length===p.length&&i(l.abilityPriority).length===l.abilityPriority.length&&l.abilityPriority.every(e=>p.includes(e));if(h||r.push("ability priority is not a valid permutation"),_.fixedFirstPriorityAbility&&l.abilityPriority[0]!==_.fixedFirstPriorityAbility&&r.push(`ability priority must start with ${_.fixedFirstPriorityAbility}`),l.abilityOrder.length!==t.abilityLevelCap)r.push(`expected ${t.abilityLevelCap} ability ranks`);else if(h){let e={Q:0,W:0,E:0,R:0};for(let a=1;a<=t.abilityLevelCap;a+=1){let t=_.forcedAtLevels[String(a)]??l.abilityPriority.find(l=>x(_,l,e,a)),s=l.abilityOrder[a-1];if(!t||s!==t||!x(_,s,e,a)){r.push(`ability rank at level ${a} is illegal`);break}e[s]+=1}}return r}(e,l).length},"rollBraveryChampion",0,function(e,l={},r=Math.random){let a=o(e,l.mapId),s=l.summonerLevel??e.site.defaultSummonerLevel;if(!Number.isInteger(s)||s<1)throw new t("summonerLevel must be a positive integer.");return _(e,a,l,s,r).champion}],99666),e.s(["MAX_BRAVERY_SEED",0,0xffffffff,"createSeededRandom",0,C,"generateBuildForChampionFromSeed",0,function(e,l,r,t={}){return Q(e,r,t,C(l))}],54166);let I=["11","12","30","classic"],N=["All","Top","Jungle","Mid","ADC","Support"];function S(e){let l="";for(let r of e)l+=String.fromCharCode(r);return btoa(l).replaceAll("+","-").replaceAll("/","_").replace(/=+$/u,"")}function $(e,l){let r="classic"===e.mode?l.id:l.key;if(!/^(0|[1-9]\d*)$/u.test(r))return null;let t=Number(r);return Number.isInteger(t)&&t>=0&&t<=65535?t:null}function j(e,l){let r=e.champions.filter(r=>$(e,r)===l);return 1===r.length?r[0]:null}function k(e,l){let r=e.maps.find(e=>e.id===l.mapId),t=e.champions.find(e=>e.id===l.championId);return!!r&&!!t&&(0===r.roles.length?"All"===l.role:"All"===l.role||r.roles.includes(l.role))}e.s(["decodeSharedBuildToken",0,function(e,l){let r;if(!e)return null;let t=function(e){if(!RegExp("^[A-Za-z0-9_-]{11}$","u").test(e))return null;try{let l=atob(`${e.replaceAll("-","+").replaceAll("_","/")}=`);if(8!==l.length)return null;let r=Uint8Array.from(l,e=>e.charCodeAt(0));return S(r)===e?r:null}catch{return null}}(e);if(!t)return null;let{context:a,seed:s}={context:(r=new DataView(t.buffer,t.byteOffset,t.byteLength)).getUint32(0),seed:r.getUint32(4)},n=(a>>>18&31)+1,i=I[a>>>26&3],o=N[a>>>23&7],u=j(l,a>>>2&65535);if(a>>>28!=1||0!=(3&a)||!i||!o||!u||n>30)return null;let d={seed:s,championId:u.id,role:o,summonerLevel:n,mapId:i};return k(l,d)?d:null},"encodeSharedBuildToken",0,function(e,l){var r,t;let a,s,n=I.indexOf(l.mapId),i=N.indexOf(l.role),o=e.champions.find(e=>e.id===l.championId),u=o?$(e,o):null;if(!Number.isSafeInteger(l.seed)||l.seed<0||l.seed>0xffffffff||!Number.isInteger(l.summonerLevel)||l.summonerLevel<1||l.summonerLevel>30||n<0||i<0||null===u||j(e,u)?.id!==o?.id||!k(e,l))throw Error("The shared build shortcut is invalid.");return S((r=0x10000000|n<<26|i<<23|l.summonerLevel-1<<18|u<<2,t=l.seed,(s=new DataView((a=new Uint8Array(8)).buffer)).setUint32(0,r>>>0),s.setUint32(4,t>>>0),a))}],71049);var R=e.i(59055),L=e.i(10340),T=e.i(43188),B=e.i(92233),M=e.i(87148),E=e.i(90307),P=e.i(82683);let G=["All","Top","Jungle","Mid","ADC","Support"];function O({tab:e,setTab:l,poolCount:r,historyCount:t}){return(0,R.jsx)("div",{className:P.default.tabs,role:"group","aria-label":"Build control sections",children:[{id:"roll",label:"Roll"},{id:"pool",label:"Pool",count:r},{id:"history",label:"History",count:t}].map(r=>(0,R.jsxs)("button",{"aria-pressed":e===r.id,className:`${P.default.tab} ${e===r.id?P.default.tabActive:""}`,onClick:()=>l(r.id),type:"button",children:[r.label,void 0!==r.count?(0,R.jsx)("span",{className:P.default.tabCount,children:r.count}):null]},r.id))})}function D({data:e,mode:l,mapId:r,setMapId:t,role:a,setRole:s,summonerLevel:n,setSummonerLevel:i,eligiblePoolSize:o,notice:u,isRolling:d,onReroll:m}){let c=e.maps.find(e=>e.id===r)??e.maps[0];return(0,R.jsxs)("div",{className:P.default.rollPanel,children:[(0,R.jsxs)("div",{children:[(0,R.jsxs)("div",{className:P.default.poolStatus,children:[(0,R.jsx)("span",{className:P.default.statusDot}),"Rolling from ",(0,R.jsx)("strong",{children:o})," eligible champions"]}),(0,R.jsxs)("button",{className:P.default.primaryButton,disabled:0===o||d,onClick:m,type:"button",children:[(0,R.jsx)(E.RerollIcon,{height:14,width:14}),d?"Rollingâ¦":"Roll another"]}),u?(0,R.jsx)("div",{className:P.default.notice,role:"status",children:u}):null,"live"===l?(0,R.jsxs)(M.Link,{className:P.default.groupLink,href:"/live/group",children:["Rolling with friends? Open a group lobby",(0,R.jsx)(E.ArrowRightIcon,{height:12,width:12})]}):null]}),(0,R.jsxs)("div",{children:["classic"===e.mode?null:(0,R.jsxs)("div",{className:P.default.settingGroup,children:[(0,R.jsx)("span",{className:P.default.settingLabel,children:"Map"}),(0,R.jsx)("div",{className:P.default.chips,children:e.maps.map(e=>(0,R.jsx)("button",{"aria-pressed":r===e.id,className:`${P.default.chip} ${r===e.id?P.default.chipActive:""}`,onClick:()=>{t(e.id),"All"===a||e.roles.includes(a)||s("All")},type:"button",children:e.name},e.id))})]}),(0,R.jsxs)("div",{className:P.default.settingGroup,children:[(0,R.jsx)("span",{className:P.default.settingLabel,children:"Role"}),c.roles.length?(0,R.jsx)("div",{className:P.default.chips,children:["All",...c.roles].map(e=>(0,R.jsx)("button",{"aria-pressed":a===e,className:`${P.default.chip} ${a===e?P.default.chipActive:""}`,onClick:()=>s(e),type:"button",children:e},e))}):(0,R.jsx)("div",{className:P.default.emptyValue,children:"No role is selected on this map."})]}),"classic"===e.mode?null:c.spellCount>0?(0,R.jsxs)("label",{className:`${P.default.settingGroup} ${P.default.levelRow}`,children:[(0,R.jsx)("span",{className:P.default.settingLabel,children:"Summoner level"}),(0,R.jsx)("input",{"aria-label":"Summoner level",className:P.default.levelInput,max:30,min:1,onChange:e=>{let l=Number(e.currentTarget.value);Number.isFinite(l)&&i(Math.min(30,Math.max(1,l)))},type:"number",value:n})]}):(0,R.jsxs)("div",{className:P.default.settingGroup,children:[(0,R.jsx)("span",{className:P.default.settingLabel,children:"Summoners"}),(0,R.jsx)("div",{className:P.default.emptyValue,children:"No selectable summoners on this map."})]})]}),(0,R.jsxs)("div",{id:"rules",children:[(0,R.jsxs)("div",{className:P.default.rulesTitle,children:[e.rules.length," sacred rules"]}),(0,R.jsx)("ol",{className:P.default.rules,children:e.rules.map((e,l)=>(0,R.jsxs)("li",{className:P.default.rule,children:[(0,R.jsx)("span",{className:P.default.ruleNumber,children:l+1}),(0,R.jsxs)("span",{className:P.default.ruleCopy,children:[(0,R.jsx)("span",{className:P.default.ruleName,children:e.title}),(0,R.jsx)("span",{className:P.default.ruleDescription,children:e.description})]})]},e.id))})]}),"classic"===l||"live"===l?(0,R.jsx)(B.GoogleAdSenseAd,{adFormat:"rectangle",className:P.default.panelAd,placement:"panel"}):null]})}function F({data:e,selectedChampionIds:l,setSelectedChampionIds:r,filterRole:t,setFilterRole:a,query:s,setQuery:n}){let i=(0,T.useMemo)(()=>{let l=s.trim().toLocaleLowerCase();return e.champions.filter(e=>{let r="All"===t||e.roles.includes(t),a=!l||e.name.toLocaleLowerCase().includes(l);return r&&a})},[e.champions,t,s]),o=i.filter(e=>l.has(e.id)).length;function u(e){r(l=>{let r=new Set(l);for(let l of i)e?r.add(l.id):r.delete(l.id);return r})}return(0,R.jsxs)("div",{className:P.default.poolPanel,children:[(0,R.jsx)("div",{className:P.default.chips,"aria-label":"Filter champions by role",children:G.map(e=>(0,R.jsx)("button",{"aria-pressed":t===e,className:`${P.default.chip} ${t===e?P.default.chipActive:""}`,onClick:()=>a(e),type:"button",children:e},e))}),(0,R.jsxs)("label",{className:P.default.search,children:[(0,R.jsx)(E.SearchIcon,{height:13,width:13}),(0,R.jsx)("span",{className:"sr-only",children:"Search champions"}),(0,R.jsx)("input",{className:P.default.searchInput,onChange:e=>n(e.currentTarget.value),placeholder:"Search championsâ¦",type:"search",value:s})]}),(0,R.jsxs)("div",{className:P.default.poolMeta,children:[(0,R.jsxs)("span",{className:P.default.poolCount,children:[(0,R.jsx)("span",{className:P.default.mono,children:o})," / ",i.length," shown"]}),(0,R.jsx)("span",{className:P.default.poolMetaSpacer}),(0,R.jsx)("button",{className:P.default.linkButton,onClick:()=>u(!0),type:"button",children:"All shown"}),(0,R.jsx)("span",{"aria-hidden":"true",children:"·"}),(0,R.jsx)("button",{className:P.default.linkButton,onClick:()=>u(!1),type:"button",children:"Clear shown"})]}),(0,R.jsx)("div",{className:P.default.championScroll,children:i.length?(0,R.jsx)("div",{className:P.default.championGrid,children:i.map(e=>{let t=l.has(e.id);return(0,R.jsxs)("button",{"aria-label":`${t?"Remove":"Add"} ${e.name} ${t?"from":"to"} the pool`,"aria-pressed":t,className:`${P.default.championButton} ${t?P.default.championSelected:""}`,onClick:()=>{var l;return l=e.id,void r(e=>{let r=new Set(e);return r.has(l)?r.delete(l):r.add(l),r})},title:`${e.name} \xb7 ${e.roles.join(", ")}`,type:"button",children:[(0,R.jsxs)("span",{className:P.default.championArt,children:[(0,R.jsx)(L.default,{alt:"",fill:!0,sizes:"72px",src:e.image.square,unoptimized:!0}),t?(0,R.jsx)("span",{className:P.default.championCheck,children:(0,R.jsx)(E.CheckIcon,{height:8,width:8})}):null]}),(0,R.jsx)("span",{className:P.default.championLabel,children:e.name})]},e.id)})}):(0,R.jsx)("div",{className:P.default.empty,children:"No champions match that search."})})]})}function q({title:e,rolls:l,onRestore:t}){return l.length?(0,R.jsxs)("section",{children:[(0,R.jsx)("h3",{className:P.default.historySectionTitle,children:e}),(0,R.jsx)("div",{className:P.default.historyList,children:l.map((l,a)=>{var s;let n,i,o;return(0,R.jsxs)("button",{className:P.default.historyItem,onClick:()=>t(l),type:"button",children:[(0,R.jsx)("span",{className:P.default.historyImage,children:(0,R.jsx)(L.default,{alt:"",fill:!0,sizes:"34px",src:l.build.champion.image.square,unoptimized:!0})}),(0,R.jsxs)("span",{className:P.default.historyCopy,children:[(0,R.jsx)("span",{className:P.default.historyName,children:l.build.champion.name}),(0,R.jsx)("span",{className:P.default.historyMeta,children:(n=(s=l).build.role??"No role",i=s.build.summonerSpells.length?s.build.summonerSpells.map(e=>e.name).join(" + "):"No summoners",o=s.build.classicLoadout?r(s.build.classicLoadout.masteries).map(e=>e.points).join("/"):s.build.runes?.primary.keystone.name??"No runes",`${n} \xb7 ${i} \xb7 ${o}`)})]}),(0,R.jsxs)("span",{className:P.default.historyIndex,children:["#","Saved"===e?l.rollNumber:a+1]})]},`${l.rollNumber}-${l.rolledAt}`)})})]}):null}function U({history:e,saved:l,onRestore:r}){return e.length||l.length?(0,R.jsxs)("div",{className:P.default.historyPanel,children:[(0,R.jsx)(q,{onRestore:r,rolls:l,title:"Saved"}),(0,R.jsx)(q,{onRestore:r,rolls:e,title:"Recent rolls"})]}):(0,R.jsxs)("div",{className:P.default.empty,children:["No past rolls yet.",(0,R.jsx)("br",{}),"Roll again to build your history."]})}e.s(["PoolPanel",0,F,"Sidebar",0,function(e){let{data:l,tab:r,setTab:t,selectedChampionIds:a,history:s,saved:n,role:i,mapId:o,summonerLevel:u}=e,[d,m]=(0,T.useState)("All"),[c,_]=(0,T.useState)(""),h=(0,T.useMemo)(()=>p(l,{mapId:o,role:i,summonerLevel:u,championIds:[...a]}),[l,o,i,a,u]);return(0,R.jsxs)("aside",{className:P.default.sidebar,"aria-label":"Build controls",children:[(0,R.jsx)(O,{historyCount:s.length+n.length,poolCount:a.size,setTab:t,tab:r}),(0,R.jsxs)("div",{"aria-label":"roll"===r?"Roll controls":"pool"===r?"Champion pool controls":"Roll history",className:P.default.panel,role:"region",children:["roll"===r?(0,R.jsx)(D,{...e,eligiblePoolSize:h}):null,"pool"===r?(0,R.jsx)(F,{data:l,filterRole:d,query:c,selectedChampionIds:a,setFilterRole:m,setQuery:_,setSelectedChampionIds:e.setSelectedChampionIds}):null,"history"===r?(0,R.jsx)(U,{history:s,onRestore:e.onRestore,saved:n}):null]})]})}],98850)}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.