From e5e54d28413eac1c72a3a4384ad6511e4376a8a5 Mon Sep 17 00:00:00 2001
From: versx
Date: Fri, 29 Jul 2022 00:54:48 -0700
Subject: [PATCH 1/8] Update pvp filtering and add little cup filtering support
---
src/configs/default.json | 21 ++++++++++--
src/data/map.js | 35 ++++++++++----------
src/views/index.mustache | 4 +--
static/js/index.js | 69 +++++++++++++++++++++-------------------
4 files changed, 75 insertions(+), 54 deletions(-)
diff --git a/src/configs/default.json b/src/configs/default.json
index 711827ed..0f831b9e 100644
--- a/src/configs/default.json
+++ b/src/configs/default.json
@@ -41,14 +41,29 @@
"useName": true,
"maxRank": 100,
"onlyShopTop5": false,
- "minCpGreat": 1400,
- "minCpUltra": 2400,
"megaStats": true,
"experimentalStats": false,
"l40stats": true,
"l41stats": false,
"l50stats": false,
- "l51stats": false
+ "l51stats": false,
+ "limits": {
+ "little": {
+ "minCp": 400,
+ "maxCp": 500,
+ "maxRank": 100
+ },
+ "great": {
+ "minCp": 1400,
+ "maxCp": 1500,
+ "maxRank": 100
+ },
+ "ultra": {
+ "minCp": 2350,
+ "maxCp": 2500,
+ "maxRank": 100
+ }
+ }
},
"devicePathColor": "red",
"nestPolygons": true,
diff --git a/src/data/map.js b/src/data/map.js
index 5b48180d..3d447a43 100644
--- a/src/data/map.js
+++ b/src/data/map.js
@@ -146,12 +146,9 @@ const getPokemon = async (minLat, maxLat, minLon, maxLon, showPVP, showIV, updat
}
}
if (showPVP && interestedLevelCaps.length > 0) {
- // TODO: Filter pvp rankings
- /*
- const { minCpGreat, minCpUltra } = config.map.pvp;
- const filterLeagueStats = (result, target, minCp) => {
+ const filterLeagueStats = (league, result, target, minCp) => {
let last;
- for (const entry of JSON.parse(result)) {
+ for (const entry of result) {
if (minCp && entry.cp < minCp || entry.cap !== undefined && (entry.capped
? interestedLevelCaps[interestedLevelCaps.length - 1] < entry.cap
: !interestedLevelCaps.includes(entry.cap))) {
@@ -177,18 +174,20 @@ const getPokemon = async (minLat, maxLat, minLon, maxLon, showPVP, showIV, updat
last.capped = true;
}
} else {
- target.push(entry);
+ target[league].push(entry);
last = entry;
}
}
};
- if (result.pvp_rankings_great_league) {
- filterLeagueStats(result.pvp_rankings_great_league, filtered.pvp_rankings_great_league = [], minCpGreat);
- }
- if (result.pvp_rankings_ultra_league) {
- filterLeagueStats(result.pvp_rankings_ultra_league, filtered.pvp_rankings_ultra_league = [], minCpUltra);
+ if (result.pvp && result.atk_iv) {
+ const pvpRankings = JSON.parse(result.pvp);
+ const keys = Object.keys(pvpRankings);
+ for (const league of keys) {
+ const rankings = pvpRankings[league];
+ const limits = config.map.pvp.limits[league];
+ filterLeagueStats(league, rankings, filtered.pvp = { [league]: [] }, limits.minCp);
+ }
}
- */
}
let pokemonFilter = result.form === 0 ? pokemonLookup[result.pokemon_id] : formLookup[result.form];
if (pokemonFilter === undefined) {
@@ -1413,7 +1412,7 @@ const getPolygon = (s2cellId) => {
// need to keep consistency with client-side implementation checkIVFilterValid
const jsifyIvFilter = (filter) => {
const input = filter.toUpperCase();
- let tokenizer = /\s*([()|&!,]|([ADSL]?|CP|[GU]L)\s*([0-9]+(?:\.[0-9]*)?)(?:\s*-\s*([0-9]+(?:\.[0-9]*)?))?)/g;
+ let tokenizer = /\s*([()|&!,]|([ADSL]?|CP|[GU]L|LC)\s*([0-9]+(?:\.[0-9]*)?)(?:\s*-\s*([0-9]+(?:\.[0-9]*)?))?)/g;
let result = '';
let expectClause = true; // expect a clause or '('
let stack = 0;
@@ -1433,15 +1432,17 @@ const jsifyIvFilter = (filter) => {
case 'S': column = 'sta_iv'; break;
case 'L': column = 'level'; break;
case 'CP': column = 'cp'; break;
- case 'GL': column = 'pvp_rankings_great_league'; break;
- case 'UL': column = 'pvp_rankings_ultra_league'; break;
+ case 'LC': column = 'little'; break;
+ case 'GL': column = 'great'; break;
+ case 'UL': column = 'ultra'; break;
}
let upper = lower;
if (match[4] !== undefined) {
upper = parseFloat(match[4]);
}
- if (column.endsWith('_league')) {
- result += `((pokemon['${column}'] || []).some(x => x.rank >= ${lower} && x.rank <= ${upper}))`;
+ const leagues = Object.keys(config.map.pvp.limits);
+ if (leagues.includes(column)) {
+ result += `(pokemon.pvp && pokemon.pvp['${column}'] && (pokemon.pvp['${column}'] || []).some(x => x.rank >= ${lower} && x.rank <= ${upper}))`;
} else {
result += `(pokemon['${column}'] !== null && pokemon['${column}'] >= ${lower} && pokemon['${column}'] <= ${upper})`;
}
diff --git a/src/views/index.mustache b/src/views/index.mustache
index 9ae702cc..050bd8a0 100644
--- a/src/views/index.mustache
+++ b/src/views/index.mustache
@@ -367,7 +367,7 @@
{{stats}}: A0-1 & D14 & S15 - {{stats_result}}
{{popup_cp}}: CP2000-3000 - {{cp_result}}
{{not}}: !0-100 - {{not_result}}
- {{pvp}}: GL1-3 | UL1-3 - {{pvp_result}}
+ {{pvp}}: LC1-3 | GL1-3 | UL1-3 - {{pvp_result}}
@@ -387,7 +387,7 @@
{{advanced}}
- {{example}}: (A0-1 & D15 & S15 & (CP1400-1500 | CP2400-2500)) | L34-35,90-100 | GL1-3,UL1-3
+ {{example}}: (A0-1 & D15 & S15 & (CP1400-1500 | CP2400-2500)) | L34-35,90-100 | LC1-3,GL1-3,UL1-3
{{advanced_result}}
diff --git a/static/js/index.js b/static/js/index.js
index f124c134..58e64f73 100644
--- a/static/js/index.js
+++ b/static/js/index.js
@@ -2725,6 +2725,7 @@ function loadScanAreaPolygons () {
// MARK: - Filters
function getPokemonIndex (pokemon) {
+ const pvpLimits = configPvp.limits;
const id = pokemon.form === 0 ? pokemon.pokemon_id : `${pokemon.pokemon_id}-${pokemon.form}`;
if (pokemonFilter[id] === undefined) {
// TODO: console.log('Pokemon index undefined:', id);
@@ -2734,18 +2735,18 @@ function getPokemonIndex (pokemon) {
if (pokemon.atk_iv === 15 && pokemon.def_iv === 15 && pokemon.sta_iv === 15) {
return 9;
}
- if (pokemon.pvp_rankings_great_league !== null && pokemon.pvp_rankings_ultra_league !== null) {
+ if (pokemon.pvp && pokemon.pvp !== null) {
let bestRank = 4;
- $.each(pokemon.pvp_rankings_great_league, function (index, ranking) {
- if (ranking.rank !== null && ranking.rank < bestRank && ranking.rank <= configPvp.maxRank && ranking.cp >= configPvp.minCpGreat && ranking.cp <= 1500) {
- bestRank = ranking.rank;
- }
- });
- $.each(pokemon.pvp_rankings_ultra_league, function (index, ranking) {
- if (ranking.rank !== null && ranking.rank < bestRank && ranking.rank <= configPvp.maxRank && ranking.cp >= configPvp.minCpUltra && ranking.cp <= 2500) {
- bestRank = ranking.rank;
- }
- });
+ const keys = Object.keys(pokemon.pvp);
+ for (const key of keys) {
+ const rankings = pokemon.pvp[key];
+ $.each(rankings, function (index, ranking) {
+ const limits = pvpLimits[key];
+ if (ranking.rank !== null && ranking.rank < bestRank && ranking.rank <= configPvp.maxRank && ranking.cp >= limits.minCp && ranking.cp <= limits.maxCp) {
+ bestRank = ranking.rank;
+ }
+ });
+ }
if (bestRank === 1) {
return 7;
} else if (bestRank === 2) {
@@ -2992,19 +2993,18 @@ const hasRelevantLeagueStats = (leagueStats) => {
return leagueStats && leagueStats.some(entry => entry.rank <= maxRank);
}
-const getPokemonBestRank = (greatLeague, ultraLeague) => {
- if ((greatLeague !== null) || (ultraLeague !== null)) {
+const getPokemonBestRank = (pvp) => {
+ if (pvp && pvp !== null) {
let bestRank = 4;
- $.each(greatLeague, function (index, ranking) {
- if (ranking.rank !== null && ranking.rank < bestRank) {
- bestRank = ranking.rank;
- }
- });
- $.each(ultraLeague, function (index, ranking) {
- if (ranking.rank !== null && ranking.rank < bestRank) {
- bestRank = ranking.rank;
- }
- });
+ const keys = Object.keys(pvp);
+ for (const key of keys) {
+ const rankings = pvp[key];
+ $.each(rankings, function (index, ranking) {
+ if (ranking.rank !== null && ranking.rank < bestRank) {
+ bestRank = ranking.rank;
+ }
+ });
+ }
if (bestRank <= 3) {
return bestRank;
}
@@ -3013,7 +3013,6 @@ const getPokemonBestRank = (greatLeague, ultraLeague) => {
}
const getPvpRanks = (league, pokemon) => {
- const getLeague = `pvp_rankings_${league}_league`
let content = `
 |
@@ -3023,7 +3022,8 @@ const getPvpRanks = (league, pokemon) => {
${showPvpPercent ? '% | ' : ''}
`;
let maxRankingToUse = showOnlyRank5Pvp ? 5 : configPvp.maxRank;
- for (const [i, ranking] of Object.entries(pokemon[getLeague])) {
+ const pvpRankings = pokemon.pvp[league];
+ for (const ranking of pvpRankings) {
if (ranking.rank <= maxRankingToUse) {
content += ``
let pokemonName = ``;
@@ -3070,8 +3070,8 @@ const getPvpRanks = (league, pokemon) => {
if (showPvpPercent && ranking.percentage !== null) {
content += `| ${Math.floor(ranking.percentage*100)} | `;
}
+ content += `
`;
}
- content += ``;
}
return content.includes('#') ? content : '';
}
@@ -3234,11 +3234,16 @@ const getPokemonPopupContent = (pokemon) => {
let content = `
`;
- if (pokemon.pvp_rankings_great_league !== undefined && pokemon.pvp_rankings_great_league !== null && hasRelevantLeagueStats(pokemon.pvp_rankings_great_league, true)) {
- content += getPvpRanks('great', pokemon);
- }
- if (pokemon.pvp_rankings_ultra_league !== undefined && pokemon.pvp_rankings_ultra_league !== null && hasRelevantLeagueStats(pokemon.pvp_rankings_ultra_league, false)) {
- content += getPvpRanks('ultra', pokemon);
+ if (pokemon.pvp) {
+ const keys = Object.keys(pokemon.pvp);
+ for (const league of keys) {
+ if (pokemon.pvp && pokemon.pvp[league] !== undefined && pokemon.pvp[league] !== null) {
+ const rankings = pokemon.pvp[league];
+ if (hasRelevantLeagueStats(rankings)) {
+ content += getPvpRanks(league, pokemon);
+ }
+ }
+ }
}
content += `
`
if (content.includes('*')) {
@@ -6070,7 +6075,7 @@ function manageGlobalStardustCountPopup (id, filter) {
function checkIVFilterValid (filter) {
const input = filter.toUpperCase();
- let tokenizer = /\s*([()|&!,]|([ADSL]?|CP|[GU]L)\s*([0-9]+(?:\.[0-9]*)?)(?:\s*-\s*([0-9]+(?:\.[0-9]*)?))?)/g;
+ let tokenizer = /\s*([()|&!,]|([ADSL]?|CP|[GU]L|LC)\s*([0-9]+(?:\.[0-9]*)?)(?:\s*-\s*([0-9]+(?:\.[0-9]*)?))?)/g;
let expectClause = true;
let stack = 0;
let lastIndex = 0;
From db2603ac25391d5b2242b82dd7657e8bf8628c7c Mon Sep 17 00:00:00 2001
From: versx
Date: Fri, 29 Jul 2022 00:58:35 -0700
Subject: [PATCH 2/8] Use maxRank value for each league
---
src/configs/default.json | 1 -
static/js/index.js | 10 +++++-----
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/src/configs/default.json b/src/configs/default.json
index 0f831b9e..3846b1a2 100644
--- a/src/configs/default.json
+++ b/src/configs/default.json
@@ -39,7 +39,6 @@
"maxZoom": 18,
"pvp": {
"useName": true,
- "maxRank": 100,
"onlyShopTop5": false,
"megaStats": true,
"experimentalStats": false,
diff --git a/static/js/index.js b/static/js/index.js
index 58e64f73..19499a17 100644
--- a/static/js/index.js
+++ b/static/js/index.js
@@ -2742,7 +2742,7 @@ function getPokemonIndex (pokemon) {
const rankings = pokemon.pvp[key];
$.each(rankings, function (index, ranking) {
const limits = pvpLimits[key];
- if (ranking.rank !== null && ranking.rank < bestRank && ranking.rank <= configPvp.maxRank && ranking.cp >= limits.minCp && ranking.cp <= limits.maxCp) {
+ if (ranking.rank !== null && ranking.rank < bestRank && ranking.rank <= limits.maxRank && ranking.cp >= limits.minCp && ranking.cp <= limits.maxCp) {
bestRank = ranking.rank;
}
});
@@ -2988,8 +2988,8 @@ function updateMapTimers () {
});
}
-const hasRelevantLeagueStats = (leagueStats) => {
- const maxRank = configPvp.maxRank;
+const hasRelevantLeagueStats = (league, leagueStats) => {
+ const maxRank = configPvp[league].maxRank;
return leagueStats && leagueStats.some(entry => entry.rank <= maxRank);
}
@@ -3021,7 +3021,7 @@ const getPvpRanks = (league, pokemon) => {
${i18n('popup_lvl')} |
${showPvpPercent ? '% | ' : ''}
`;
- let maxRankingToUse = showOnlyRank5Pvp ? 5 : configPvp.maxRank;
+ let maxRankingToUse = showOnlyRank5Pvp ? 5 : configPvp[league].maxRank;
const pvpRankings = pokemon.pvp[league];
for (const ranking of pvpRankings) {
if (ranking.rank <= maxRankingToUse) {
@@ -3239,7 +3239,7 @@ const getPokemonPopupContent = (pokemon) => {
for (const league of keys) {
if (pokemon.pvp && pokemon.pvp[league] !== undefined && pokemon.pvp[league] !== null) {
const rankings = pokemon.pvp[league];
- if (hasRelevantLeagueStats(rankings)) {
+ if (hasRelevantLeagueStats(league, rankings)) {
content += getPvpRanks(league, pokemon);
}
}
From 7c297a6a131ad181db0dcdf04fad3b736a8fd628 Mon Sep 17 00:00:00 2001
From: versx
Date: Fri, 29 Jul 2022 01:09:15 -0700
Subject: [PATCH 3/8] fix typos
---
static/js/index.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/static/js/index.js b/static/js/index.js
index 19499a17..0a5fb604 100644
--- a/static/js/index.js
+++ b/static/js/index.js
@@ -2989,7 +2989,7 @@ function updateMapTimers () {
}
const hasRelevantLeagueStats = (league, leagueStats) => {
- const maxRank = configPvp[league].maxRank;
+ const maxRank = configPvp.limits[league].maxRank;
return leagueStats && leagueStats.some(entry => entry.rank <= maxRank);
}
@@ -3021,7 +3021,7 @@ const getPvpRanks = (league, pokemon) => {
${i18n('popup_lvl')} |
${showPvpPercent ? '% | ' : ''}
`;
- let maxRankingToUse = showOnlyRank5Pvp ? 5 : configPvp[league].maxRank;
+ let maxRankingToUse = showOnlyRank5Pvp ? 5 : configPvp.limits[league].maxRank;
const pvpRankings = pokemon.pvp[league];
for (const ranking of pvpRankings) {
if (ranking.rank <= maxRankingToUse) {
From e0f848b27fbe5c7e45aed9a429f3c2ae12b040d0 Mon Sep 17 00:00:00 2001
From: versx
Date: Fri, 29 Jul 2022 01:10:33 -0700
Subject: [PATCH 4/8] update help text
---
static/locales/_en.json | 2 +-
static/locales/_pl.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/static/locales/_en.json b/static/locales/_en.json
index 09cbd5fb..0ec472cb 100644
--- a/static/locales/_en.json
+++ b/static/locales/_en.json
@@ -358,7 +358,7 @@
"and_explanation": "AND operator, for chaining conditions together",
"and_result": "All Pokemon with IVs between 80-100, are L25-30, AND have stats of 15/10/10",
"advanced": "Advanced",
- "advanced_result": "Returns all Pokemon that have either CP1400-1500 OR CP2400-2500 AND have 0-1 Attack, 15 Defense, 15 Stamina, OR level 34-35 OR 90-100% IVs OR PVP Great or Ultra league rank between 1-3.",
+ "advanced_result": "Returns all Pokemon that have either CP1400-1500 OR CP2400-2500 AND have 0-1 Attack, 15 Defense, 15 Stamina, OR level 34-35 OR 90-100% IVs OR PVP Litte, Great, or Ultra league rank between 1-3.",
"popup_area": "Area",
"popup_size": "Size"
}
diff --git a/static/locales/_pl.json b/static/locales/_pl.json
index b758da8e..22c37a16 100644
--- a/static/locales/_pl.json
+++ b/static/locales/_pl.json
@@ -355,7 +355,7 @@
"and_explanation": "Operator ORAZ do łączenia warunków ze sobą",
"and_result": "Wszystkie Pokémony z: 80-100% IV ORAZ poziomem pomiędzy 25 a 30 ORAZ statystykami 15/10/10",
"advanced": "Zaawansowane",
- "advanced_result": "Zwraca wszystkie Pokémony które spełniają warunek: (Od 0 do 1 ataku ORAZ 15 obrony ORAZ 15 staminy ORAZ (CP pomiędzy 1400 a 1500 ALBO CP pomiędzy 2400 a 2500)) ALBO (Poziomem pomiędzy 34 a 35 ALBO 90-100% IV) ALBO (Pozycją pomiędzy 1 a 3 Great lub Ultra ligi).",
+ "advanced_result": "Zwraca wszystkie Pokémony które spełniają warunek: (Od 0 do 1 ataku ORAZ 15 obrony ORAZ 15 staminy ORAZ (CP pomiędzy 1400 a 1500 ALBO CP pomiędzy 2400 a 2500)) ALBO (Poziomem pomiędzy 34 a 35 ALBO 90-100% IV) ALBO (Pozycją pomiędzy 1 a 3 Little, Great, lub Ultra ligi).",
"popup_area": "Obszar",
"popup_size": "Powierzchnia"
}
From 6e66e04c2508d076f68a5dfd1e17d8bbec87565d Mon Sep 17 00:00:00 2001
From: versx
Date: Fri, 29 Jul 2022 01:12:57 -0700
Subject: [PATCH 5/8] Enable level 50 cap stats by default for pvp
---
src/configs/default.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/configs/default.json b/src/configs/default.json
index 3846b1a2..60a41a0c 100644
--- a/src/configs/default.json
+++ b/src/configs/default.json
@@ -44,7 +44,7 @@
"experimentalStats": false,
"l40stats": true,
"l41stats": false,
- "l50stats": false,
+ "l50stats": true,
"l51stats": false,
"limits": {
"little": {
From 5d8202f16074190437ab51ccaba88567fc2345a2 Mon Sep 17 00:00:00 2001
From: versx
Date: Fri, 29 Jul 2022 01:36:10 -0700
Subject: [PATCH 6/8] update pvp league icons and add little cup icon
---
static/img/misc/great.png | Bin 2360 -> 13355 bytes
static/img/misc/little.png | Bin 0 -> 10096 bytes
static/img/misc/master.png | Bin 0 -> 14136 bytes
static/img/misc/ultra.png | Bin 6630 -> 14106 bytes
4 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 static/img/misc/little.png
create mode 100644 static/img/misc/master.png
diff --git a/static/img/misc/great.png b/static/img/misc/great.png
index 1a0b9f66aa6a992abe383409ada061f0876ecbce..a430c3c49d16db3db1170ecce968f3b365ff3817 100644
GIT binary patch
literal 13355
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
PxBw(Cts+$`VI1;*;npAB
literal 2360
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
literal 0
HcmV?d00001
diff --git a/static/img/misc/master.png b/static/img/misc/master.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4c7c7f7ac624928ef56d0e741a6ec636d9dca75
GIT binary patch
literal 14136
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
brJePs|Nnv>28TJ|0+52Ns!XkvX~_QozNO+b
literal 0
HcmV?d00001
diff --git a/static/img/misc/ultra.png b/static/img/misc/ultra.png
index 764c81fcbbc826c2847fb49c0bd6144ab37b50b9..b94702ae1ef98ebb2a2215f0598ba847098f5946 100644
GIT binary patch
literal 14106
zcmZ`=Wmr^QxE*@v7Nnb@ySqa=B&CMVp%H124naV=q@_ER97IY$y1QFS>YnfZyFc#m
zzu$&HUao__~t2avW
zpqKx?3cAZagFu2jD)KUVev2o8zA%cp+}&FHr&C#$P7Gbb}EGryePEjXF9q;wl=7Y!63r&!?)<_v;RLuf#B$AVl=oKX2BBqYv`&Yq@jgRlcyS5nAXSXdCCSi{4^c*qD@rGY}M
zLL0VLeB$C*sx0!ID~WKpBClm%gr02lyJ`NL74DS?Ecyt?tXJQIo;q3^8d5(0`lXtc
znyRP4!huGEc!$%L?fDg?H~v0uV$TUbSHmt35=;0RI!pO|$yH-^0a8LpNI-yCL<4@E
z(`ZE-)e~lqMoTsPb#n0)_6#)x>H7NJ}7uASBTP=^DxnU%!1=J3Kgejjy2HP&c-7
zb^i}B6f`h8s%D=BCsJ@|TyTb})#{`$TqFps3hU|Xd(X|+Lz$^Xd=ROfmk_em5v8R^
zYiS4WFhda7>+=|6Bs{H7715=mcl1X-L<~IZ$R!h53Tp>p^uPG={}o=+eB
zU2}Afj!W@J_WqAh!$i%oK#u%4ihh48?zOmwmDCU)I-kbY0!2ips^T+}!H4)Kux?!^5x@*QlYb*X(R;p4zII!h2*Tsek6?
z9yIeMyRSmgs4}z+h2NI9`{4(k21SQiyjCWJROZtsAgWk^kOy!ed%rVK6^nWZX%J%}
z7Buy6`MFhgR$Z=(SqnQPLDhM1^`Iy2;%81T4VucP^B%G%6o{x7I
z&k+&God{Vyq(>Ki;!i%EluAidALkbqVqWvv(r|Dju*6Q;wk~;M6}L|xq^<^Bjp;Vp
zj#YASaa0@s*wudA-I=p!T_`dzz&iRX6OARD)PR7zPN7AF5)%_s4&fSXyC8XEC3X-s?mSxm>U2W*NQ2LxclYTkmJTmB#{tLyg(c}{KmJy!xlptD<4+n$%ys~C+
z$FPqq0}@R%|2XEwpRK1)5In_5{-#Kkvt!=_?X53ACj1U&*-#uUX=Io9XgP@Z+E>F)
zxk=leEFmZ1d5|KaRIY9!vXsZ?=6E4VBVY1FMOnGdXnuBPdYW$?CVYNSmVang7USse
zFUrcwT2SezOf(p9C815^psTAp(f1LPEjBI|gGhg{p0JE2W7?)GL3(*+1i|Pnx67gR
z5w19lx}mXA2J#V3%CF8xb-kD4Ie+4lnx1Yo`Plw*^ry5OlrXFiubd{nC5{0@
zr|Mm-*(8t8+&{^p8-7IA&0~6*c?6$;6&0Z{VXUMfLd=|ry>JEpC7(h=er!WXz9JxNn#+9oJV6Gp?saxy@lWK?1(F}xG
zdK*@eAjDiG(LE4Sp=99UQ5}7P;XzmxENfz~*&^%xEx`xq$ZB6-Ma9WC#HR9w*vhCH
zqUaOPJU!h0sJ9tOXX;$xG+ywzzuXZ7wfUSF^N%;;%x({VPR`B6R?rSBg6zIlv5PK(
zn6`TiHp4dhHj9di2tsuzL_M(d3i5kJpW3S+hTLvA&ll9sgekhZ&qXQtP^|m+@5>=<
zg9n}h;E%F2deIGuhG?^glyrv_1NY6_s8#gQ5{lNE1Vhf>)LXmC?2&!MhPtnm&Y$$n
z)JVUDaU)7(+jlEtJuu_(dwC!?fB2LvNtK&RNs=G@e4kLL6^*y$ND~2RV4vIF*+C&B
zB%GX{4ku?y)yxqN{r+9jw99XDi1dgiLhEWEGBUEM`@^j(E^0XaEoV3Rbg4#Y5oA62
z4hg;XaKErk>XBwaW5&uC)OlQMb-CNm2obX#S5#D`t1&+-
ze}7cn>PUeTWt~YO+rZvBk--yQR#w)3bPbP>B9)Rhs5L_YJ>CsTQHgjT>Y