Compare commits

...

5 commits

Author SHA1 Message Date
Doxa Maps
4b7c52d024 Rebuild PosterWall's consumers (sectionTotal) and country-posters (India first, its note), and serve the 34 India state previews 2026-10-01 00:53:24 +00:00
Doxa Maps
eb5cf55d06 Country Posters: previews for the 34 India state and union territory posters
Each state's sheet drawn from live records with the browser's own inputs (SPARSE 3x3, the indiaState series, the
served boundaries and places), shot in the shared browser at 3000 px, and reduced by make-previews.py to the 560 px
card thumbnail and the 1500 px download, as the country previews are. Every record pinned; every layout octilinear.
2026-10-01 00:48:53 +00:00
Doxa Maps
5b33914614 Country Posters: India is its own section, first, above Asia, counted once
India's country card, its 34 state and union territory posters and the two with none listed now share one section,
headed by India's name and counted once (855, through PosterWall's sectionTotal), which puts it above every regional
section. One line at the top of the wall says why India is set apart. Asia keeps every other Asian country.
check:country-sheet-one-path ARM E: the wall passes sectionTotal, India's card is in the India section, PosterWall's
default is still the card sum, and over the real data India comes first with 855 (India 855 > Asia 454 > Africa 314).
2026-10-01 00:48:52 +00:00
Doxa Maps
0415324cbc i18n: the Country Posters India note in all 11 locales; the unused India heading key removed
countryPosters.indiaNote: India has its own section, first, because it has far more unreached people groups than any
other country (the count is filled from the data). ru and ar are phrased so the number needs no case agreement.
countryPosters.indiaStatesHeading is gone: the section is now headed by the country's own name.
2026-10-01 00:48:52 +00:00
Doxa Maps
78b2f108f2 PosterWall: an optional sectionTotal, so a section whose cards overlap counts its people groups once
A section's total (its header count, and what orders the sections) defaults to the sum of its cards' counts,
unchanged for every wall that does not pass the prop. The Country Posters India section holds India's own card
and one card per state and union territory (the same 855 groups twice), so it passes India's count instead.
2026-10-01 00:48:51 +00:00
168 changed files with 203 additions and 163 deletions

BIN
data/posters/india-an.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
data/posters/india-ap.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

BIN
data/posters/india-ar.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
data/posters/india-as.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
data/posters/india-br.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
data/posters/india-ch.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
data/posters/india-ct.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

BIN
data/posters/india-dh.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
data/posters/india-dl.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
data/posters/india-ga.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
data/posters/india-gj.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

BIN
data/posters/india-hp.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

BIN
data/posters/india-hr.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
data/posters/india-jh.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
data/posters/india-jk.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

BIN
data/posters/india-ka.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

BIN
data/posters/india-kl.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

BIN
data/posters/india-la.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
data/posters/india-ld.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
data/posters/india-mh.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

BIN
data/posters/india-ml.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
data/posters/india-mn.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
data/posters/india-mp.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
data/posters/india-or.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

BIN
data/posters/india-pb.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
data/posters/india-py.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
data/posters/india-rj.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
data/posters/india-sk.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
data/posters/india-tg.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

BIN
data/posters/india-tn.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

BIN
data/posters/india-tr.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
data/posters/india-up.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
data/posters/india-ut.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
data/posters/india-wb.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

View file

@ -80,6 +80,10 @@ const props = defineProps({
itemCountKey: { type: String, default: '' },
collapsible: { type: Boolean, default: false },
collapsedBy: { type: Function, default: () => false },
// A section's people-group total, shown in its header and used to order the sections (largest first).
// Default: the sum of its cards' counts. A caller whose cards overlap overrides it, so a group is counted
// once: the Country Posters India section holds India's own card AND one card per state, the same 855 groups.
sectionTotal: { type: Function, default: null },
// A card may declare itself unsupported (India: 855 groups do not fit a sheet).
// The caller supplies the reason; the wall renders it instead of a poster.
unsupported: { type: Function, default: () => null },
@ -351,7 +355,7 @@ const sections = computed(() => {
.map(([name, items]) => ({
name,
items: items.slice().sort((a, b) => (b.count || 0) - (a.count || 0)),
total: items.reduce((n, x) => n + (x.count || 0), 0),
total: props.sectionTotal ? props.sectionTotal(name, items) : items.reduce((n, x) => n + (x.count || 0), 0),
}))
.sort((a, b) => b.total - a.total)
})

View file

@ -1,4 +1,4 @@
{
"indiaStatesHeading": "الهند — الولايات والأقاليم الاتحادية",
"indiaNote": "للهند قسمها الخاص في المقدّمة: عدد الشعوب غير المُبشَّرة فيها {count}، وهو أكثر بكثير من أي بلد آخر، لذا لكل ولاية وإقليم اتحادي فيها ملصقه الخاص.",
"indiaStateNoGroups": "لا توجد هنا شعوب غير مُبشَّرة مُدرَجة."
}

View file

@ -1,4 +1,4 @@
{
"indiaStatesHeading": "Indien – Bundesstaaten und Unionsterritorien",
"indiaNote": "Indien hat einen eigenen Abschnitt, ganz oben: Mit {count} unerreichten Volksgruppen, weit mehr als jedes andere Land, hat jeder seiner Bundesstaaten und Unionsterritorien ein eigenes Plakat.",
"indiaStateNoGroups": "Hier sind keine unerreichten Volksgruppen verzeichnet."
}

View file

@ -1,4 +1,4 @@
{
"indiaStatesHeading": "India — states and union territories",
"indiaNote": "India has its own section, first: it has {count} unreached people groups, far more than any other country, so each of its states and union territories has its own poster.",
"indiaStateNoGroups": "No unreached people groups are listed here."
}

View file

@ -1,4 +1,4 @@
{
"indiaStatesHeading": "India: estados y territorios de la unión",
"indiaNote": "India tiene su propia sección, la primera: tiene {count} pueblos no alcanzados, muchos más que cualquier otro país, así que cada uno de sus estados y territorios de la unión tiene su propio cartel.",
"indiaStateNoGroups": "Aquí no figura ningún pueblo no alcanzado."
}

View file

@ -1,4 +1,4 @@
{
"indiaStatesHeading": "Inde — États et territoires de l’Union",
"indiaNote": "L’Inde a sa propre section, en premier : elle compte {count} peuples non atteints, bien plus que tout autre pays ; chacun de ses États et territoires de l’Union a donc sa propre affiche.",
"indiaStateNoGroups": "Aucun peuple non atteint n’est répertorié ici."
}

View file

@ -1,4 +1,4 @@
{
"indiaStatesHeading": "भारत — राज्य और केंद्र शासित प्रदेश",
"indiaNote": "भारत का अपना अलग खंड है, सबसे पहले: इसमें {count} अपहुँचे जनसमूह हैं, किसी भी अन्य देश से कहीं अधिक, इसलिए इसके हर राज्य और केंद्र शासित प्रदेश का अपना पोस्टर है।",
"indiaStateNoGroups": "यहाँ कोई अपहुँचा जनसमूह सूचीबद्ध नहीं है।"
}

View file

@ -1,4 +1,4 @@
{
"indiaStatesHeading": "India — stati e territori dell’Unione",
"indiaNote": "L’India ha una sezione tutta sua, la prima: conta {count} popoli non raggiunti, molti più di qualsiasi altro paese, quindi ognuno dei suoi stati e territori dell’Unione ha il proprio manifesto.",
"indiaStateNoGroups": "Qui non è elencato alcun popolo non raggiunto."
}

View file

@ -1,4 +1,4 @@
{
"indiaStatesHeading": "Índia — estados e territórios da união",
"indiaNote": "A Índia tem a sua própria seção, a primeira: tem {count} povos não alcançados, muito mais do que qualquer outro país, por isso cada um dos seus estados e territórios da união tem o seu próprio cartaz.",
"indiaStateNoGroups": "Nenhum povo não alcançado está listado aqui."
}

View file

@ -1,4 +1,4 @@
{
"indiaStatesHeading": "India — state și teritorii ale Uniunii",
"indiaNote": "India are propria secțiune, prima: are {count} popoare neatinse, mult mai multe decât orice altă țară, așa că fiecare dintre statele și teritoriile sale ale Uniunii are propriul afiș.",
"indiaStateNoGroups": "Aici nu este listat niciun popor neatins."
}

View file

@ -1,4 +1,4 @@
{
"indiaStatesHeading": "Индия — штаты и союзные территории",
"indiaNote": "У Индии свой раздел, первый: число недостигнутых народов в ней — {count}, намного больше, чем в любой другой стране, поэтому у каждого её штата и союзной территории есть свой плакат.",
"indiaStateNoGroups": "Здесь не указано ни одного недостигнутого народа."
}

View file

@ -1,4 +1,4 @@
{
"indiaStatesHeading": "印度——邦与中央直辖区",
"indiaNote": "印度有单独的一栏,排在最前:这里有 {count} 个未得之民族群,远多于任何其他国家,因此它的每个邦和中央直辖区都有自己的海报。",
"indiaStateNoGroups": "此处未列出任何未得之民族群。"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View file

@ -191,8 +191,16 @@ async function countryMap(c) {
// wall and the Regions dashboard cannot name one region two ways. A label with no key stays as drawn.
const t = useOptionalT('')
const regionSlug = (label) => String(label).toLowerCase().replace(/\s+/g, '_')
// ★ INDIA IS ITS OWN SECTION, FIRST: India's country card, one card per state and union territory, and the two
// with none listed. Its 855 groups are counted ONCE (sectionTotal below; the state cards are India's groups again),
// and that true total is also what puts it above every other section. Headed by the country's own name.
const wallLang = () => { const l = wallLocale && (wallLocale.value ?? wallLocale); return (typeof l === 'string' && l) || getRuntimeLocale() || detectLocale() || 'en' }
const indiaHeading = () => (/^en\b/i.test(wallLang()) ? 'India' : countryName('IND', wallLang()) || 'India')
const isIndia = (c) => c.indiaState || String(c.iso3 || '').toUpperCase() === 'IND'
const INDIA_COUNT = (byIso3.get('IND') || {}).count || 0
const sectionTotal = (name, items) => (items.some(isIndia) && INDIA_COUNT ? INDIA_COUNT : items.reduce((n, x) => n + (x.count || 0), 0))
const groupBy = (c) => {
if (c.indiaState) return t('countryPosters.indiaStatesHeading')
if (isIndia(c)) return indiaHeading()
if (!c.region || c.region === 'Other') return t('dashboard.other')
const key = `dashboard.wagfRegion.${regionSlug(c.region)}`
const v = t(key)
@ -218,7 +226,9 @@ const unsupported = (c) => (c.noGroups ? t('countryPosters.indiaStateNoGroups')
const escHtml = (s) => String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
const heading = computed(() => t('messages.countryWallHeading'))
const wallTag = computed(() => t('messages.upg100WallTag'))
const intro = computed(() => `${escHtml(t('messages.countryWallIntroA'))}<strong>${escHtml(t('messages.upg100WallIntroEmph'))}</strong>${escHtml(t('messages.countryWallIntroB'))}`)
const intro = computed(() => `${escHtml(t('messages.countryWallIntroA'))}<strong>${escHtml(t('messages.upg100WallIntroEmph'))}</strong>${escHtml(t('messages.countryWallIntroB'))}`
// Why India is first and different, in one line (only on the unfiltered wall, the only one that shows its section).
+ (INDIA_COUNT ? `<br>${escHtml(t('countryPosters.indiaNote', { count: INDIA_COUNT }))}` : ''))
const soonMessage = computed(() => t('messages.countryWallSoon'))
</script>
@ -242,6 +252,7 @@ const soonMessage = computed(() => t('messages.countryWallSoon'))
:map-image="countryMap"
:collapsible="!filtered"
:collapsed-by="filtered ? neverCollapsed : collapsedBy"
:section-total="filtered ? null : sectionTotal"
:section-heads="!filtered"
:embedded="filtered"
:columns="filtered ? hostColumns : 0"

View file

@ -134,6 +134,28 @@ export function armC(H, states, adm1Ind) {
return fails
}
// ARM E: India is its OWN section, FIRST, counted ONCE. The India country card, the state cards and the none-listed
// cards group together; the section's total is India's own count (not the card sum, which counts 855 twice); on that
// true total it outranks every regional section. PosterWall's default (no sectionTotal) must still be the card sum.
export function armE(countries, states, wallSrc, posterWallSrc, H) {
const fails = []
if (!/:section-total=/.test(wallSrc)) fails.push('country-poster-wall.vue does not pass :section-total, so India is counted twice')
if (!/String\(c\.iso3[^)]*\)\.toUpperCase\(\) === 'IND'/.test(wallSrc)) fails.push("the wall's isIndia() no longer puts India's country card in the India section")
if (!/props\.sectionTotal \? props\.sectionTotal\(name, items\) : items\.reduce\(\(n, x\) => n \+ \(x\.count \|\| 0\), 0\)/.test(posterWallSrc)) fails.push("PosterWall's default section total is no longer the card sum (every other wall would change)")
const ind = countries.find((c) => c.iso3 === 'IND')
const stateCards = [...H.statesWithPosters(states).map((st) => ({ count: st.count, indiaState: true })), ...states.filter((st) => !st.count).map(() => ({ count: 0, indiaState: true }))]
const groups = new Map()
for (const c of [...countries, ...stateCards]) {
const g = c.indiaState || c.iso3 === 'IND' ? 'India' : (c.region || 'Other')
if (!groups.has(g)) groups.set(g, []); groups.get(g).push(c)
}
const total = (g, items) => (g === 'India' ? ind.count : items.reduce((n, x) => n + (x.count || 0), 0))
const order = [...groups].map(([g, items]) => [g, total(g, items)]).sort((a, b) => b[1] - a[1])
if (order[0][0] !== 'India') fails.push(`India is not the first section: ${order.slice(0, 3).map(([g, t]) => `${g} ${t}`).join(', ')}`)
if (order.find(([g]) => g === 'India')[1] !== ind.count) fails.push(`the India section counts ${order.find(([g]) => g === 'India')[1]}, not India's ${ind.count}`)
return { fails, order }
}
async function main() {
const selfTest = process.argv.includes('--self-test')
const { seriesFor } = await import(join(ROOT, 'library/packet/countrySheet.js'))
@ -160,6 +182,8 @@ async function main() {
['the wall calls generateSheet directly', () => armA({ ...files, [wall]: files[wall].replace('<script setup>', "<script setup>\nimport { generateSheet } from '@map/packet/posterSheets.js'\ngenerateSheet({})") })],
['a state with groups loses its outline', () => armC(H, states.map((st) => (st.id === 'india-gj' ? { ...st, shapeName: 'Nowhere' } : st)), adm1Ind)],
['a division silently dropped', () => armC(H, states.filter((st) => st.id !== 'india-mz'), adm1Ind)],
['the wall stops passing sectionTotal (India counted twice)', () => armE(countries, states, files[wall].replace(':section-total=', ':x-section-total='), readFileSync(join(ROOT, 'library/components/poster/PosterWall.vue'), 'utf8'), H).fails],
['India country card left in Asia', () => armE(countries, states, files[wall].replace("=== 'IND'", "=== 'XXX'"), readFileSync(join(ROOT, 'library/components/poster/PosterWall.vue'), 'utf8'), H).fails],
['a helper that mutates the shared ADM1', () => armC({ ...H, stateGeometry: (z, a, n) => { (a.features || []).forEach((f) => { if (f.properties.shapeName === n) f.properties.listId = z.id }); return H.stateGeometry(z, a, n) } }, states, JSON.parse(JSON.stringify(adm1Ind)))],
]
let bad = 0
@ -177,12 +201,13 @@ async function main() {
}
const callers = []
const fails = [...armA(files, callers), ...armB(seriesFor, countries), ...armC(H, states, adm1Ind)]
const E = armE(countries, states, files['plugin-designs/country-posters/country-poster-wall.vue'], readFileSync(join(ROOT, 'library/components/poster/PosterWall.vue'), 'utf8'), H)
const fails = [...armA(files, callers), ...armB(seriesFor, countries), ...armC(H, states, adm1Ind), ...E.fails]
const missing = [...KNOWN_CALLERS, `${STATE_CALLER}#state`].filter((k) => !callers.includes(k))
if (missing.length) fails.push(`known callers not found calling makeCountrySheet: ${missing.join(', ')}`)
if (fails.length) { fails.forEach((f) => console.log(`FAIL ${f}`)); process.exitCode = 1; return }
const ind = seriesFor(countries, countries.find((c) => c.iso3 === 'IND'))
console.log(`PASS check:country-sheet-one-path — ${Object.keys(files).length} plugin sources parsed-or-skipped, makeCountrySheet callers: ${callers.join(', ')}; seriesFor over ${countries.length} countries (India ${ind.index} of ${ind.totalLists}); ${H.statesWithPosters(states).length} state posters, series 1..${H.statesWithPosters(states).length}, every outline found`)
console.log(`PASS check:country-sheet-one-path — ${Object.keys(files).length} plugin sources parsed-or-skipped, makeCountrySheet callers: ${callers.join(', ')}; seriesFor over ${countries.length} countries (India ${ind.index} of ${ind.totalLists}); ${H.statesWithPosters(states).length} state posters, series 1..${H.statesWithPosters(states).length}, every outline found; sections ${E.order.slice(0, 3).map(([g, t]) => `${g} ${t}`).join(' > ')}`)
}
main().catch((e) => { console.error(`FAIL ${e.stack || e}`); process.exitCode = 1 })

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Some files were not shown because too many files have changed in this diff Show more