# **Computational Architectures for Web-Based Geospatial Simulation of Nuclear Weapons Effects**

## **Introduction to Geospatial Blast Simulation**

The development of interactive, web-based simulations for nuclear weapons effects represents a highly specialized intersection of historical physics, empirical data modeling, and modern geospatial web technologies. The reference paradigm for such applications is NUKEMAP, a simulation framework originally deployed in February 2012 by historian Alex Wellerstein that translates declassified Cold War-era nuclear test data into accessible digital cartography.1 Simulating the physical and human effects of a nuclear detonation requires far more than rendering static, arbitrary radii on a map; it necessitates a robust computational architecture capable of processing complex scaling laws, fluid dynamics proxies, and vast demographic datasets in real-time.2  
Since its inception, the benchmark simulator has processed hundreds of millions of user-generated virtual detonations, demonstrating a profound public and analytical interest in geospatial nuclear modeling.4 The underlying mechanics of these simulators bridge the gap between abstract mathematical physics and tangible human impact. The energy released by a nuclear device is fundamentally different from conventional high explosives, producing extreme temperatures in the tens of millions of degrees and releasing immense amounts of energy across the electromagnetic spectrum within microseconds.5 To accurately render these effects within a web browser, a simulator must mathematically partition this energy, calculate attenuation through the atmosphere, account for the geometry of blast wave reflections, and project these multi-dimensional physical phenomena onto a two-dimensional Web Mercator map projection.5  
This comprehensive report provides an exhaustive architectural, physical, and programmatic blueprint for constructing a geospatial nuclear effects simulator. The analysis deconstructs the mathematical models governing fireball expansion, thermal radiation, and blast overpressure, before detailing exactly how these legacy models can be implemented within modern, open-source web mapping stacks utilizing JavaScript for client-side physics engines and PHP for backend demographic processing.

## **The Pedagogical and Technical Evolution of Geospatial Nuclear Simulators**

The fundamental purpose of a nuclear effects simulator is to translate incomprehensible destruction into human-scaled, geographically recognizable realities.8 During the Cold War, the theoretical destruction of nuclear exchanges was heavily abstracted, relegated to classified government tables or physical slide rules like the Lovelace Foundation’s *Nuclear Bomb Effects Computer*.7 By integrating these historical algorithms with modern web mapping interfaces, developers allow users to visually comprehend the footprint of detonations ranging from small tactical weapons to massive multi-megaton strategic warheads superimposed over familiar urban landscapes.8  
The technical evolution of these platforms reveals a broader trend within the web development and geospatial intelligence communities: the necessary migration from proprietary, corporate-controlled APIs to sustainable, open-source architectures.1 The earliest iterations of web-based nuclear simulators relied almost exclusively on the Google Maps API and the Google Earth Plugin (which facilitated three-dimensional mushroom cloud rendering via KMZ files).1 However, shifting corporate strategies introduced prohibitive barriers for independent, educational, and academic developers. Google’s deprecation of the Google Earth API effectively neutralized early 3D rendering capabilities in browsers, while subsequent, dramatic changes to Google Maps API pricing models rendered high-traffic, non-commercial simulators financially unviable.3  
Consequently, modern architectural best practices for building simulators mandate the use of open-source or self-hosted mapping stacks. Contemporary applications utilize libraries such as Leaflet.js or MapLibre GL JS to manipulate vector graphics and map tiles, pulling cartographic data from OpenStreetMap via affordable or self-hosted tile providers like Mapbox and Protomaps.1 Protomaps, in particular, offers a highly cost-effective paradigm by utilizing single-file archive formats for vector tiles, which dramatically reduces the overhead required to serve base maps to a viral application.10 Building a modern simulator requires deeply integrating these open-source tools with custom mathematical frameworks.

## **Fundamental Physics of Nuclear Detonations and Energy Partitioning**

To programmatically simulate a nuclear detonation, the computational engine must first partition the total explosive yield of the weapon. Unlike conventional chemical explosives, which inflict damage almost entirely through rapid gas expansion (blast), nuclear detonations partition their energy across several highly distinct mechanisms.5  
The energy released from a nuclear detonation within the lower atmosphere is typically distributed into four primary categories, though the exact distribution fluctuates based on the weapon's physical design (e.g., pure fission versus thermonuclear fusion) and the environment of the detonation (e.g., high-altitude airburst versus groundburst).5

| Energy Category | Approximate Percentage of Total Yield | Primary Damage Mechanism | Timeframe of Effect |
| :---- | :---- | :---- | :---- |
| Blast and Shock Wave | 50% | Structural destruction, extreme dynamic overpressure, secondary missile generation (flying debris). | Milliseconds to seconds. |
| Thermal Radiation | 35% | Flash burns (1st to 3rd degree), widespread conflagration, structural ignition. | Microseconds to seconds. |
| Initial Ionizing Radiation | 5% | Acute radiation syndrome (neutron and gamma ray emission causing cellular damage). | Instantaneous. |
| Residual Radiation (Fallout) | 5–10% | Long-term radioactive contamination from fission products and irradiated environmental debris. | Minutes to decades. |

The physical damage mechanisms of blast and thermal radiation are broadly identical to conventional explosives, but the energy produced is millions of times more powerful per unit mass.5 When a nuclear weapon is detonated in the air, lethal blast and thermal effects proportionally scale much more rapidly than lethal radiation effects as explosive yield increases.5 For example, the radius of lethal thermal radiation for a megaton-class weapon vastly exceeds the radius of lethal ionizing radiation; conversely, for a very low-yield tactical weapon, the prompt ionizing radiation radius can extend beyond the lethal thermal and blast zones.5 A comprehensive simulator engine must dynamically calculate and layer these distinct phenomena.

## **Empirical Scaling Laws and Mathematical Modeling**

The foundational mathematics of nuclear effects simulators rely on empirical scaling laws. Because it is computationally prohibitive—and entirely unnecessary for macro-scale geospatial visualization—to simulate the fundamental particle physics and fluid dynamics of a nuclear explosion natively within a web browser, simulators utilize algebraic scaling equations.2 These scaling formulas are derived from decades of atmospheric testing data, most notably curated and declassified in Samuel Glasstone and Philip J. Dolan’s foundational text, *The Effects of Nuclear Weapons* (1977), alongside companion data from the Atomic Energy Commission.2  
These scaling laws allow developers to algorithmically calculate the radius of a specific physical effect for any arbitrary yield by scaling the known radius of a 1-kiloton (kT) baseline detonation.14 The fundamental scaling laws rely on fractional exponents applied to the weapon's yield (![][image1]), which is typically measured in kilotons (where 1 kiloton equals the energy released by 1,000 tons of TNT equivalent).15

| Effect Modality | Scaling Exponent Relationship | Underlying Physical Rationale |
| :---- | :---- | :---- |
| Fireball Radius | ![][image2] | Governed by the rapid expansion of X-ray heated air and radiation diffusion. The fireball is tens of millions of degrees, vaporizing everything within this boundary.6 |
| Blast Overpressure | ![][image3] (Cube Root Law) | Energy is distributed spherically; pressure scales with volume (![][image4]). Doubling the destructive radius requires eight times the explosive energy.17 |
| Thermal Radiation | ![][image3] | A modified square root law. The ideal inverse-square law (![][image5]) is reduced due to atmospheric attenuation, absorption, and the scattering of thermal photons by air molecules.15 |
| Ionizing Radiation | ![][image3] | Highly attenuated by atmospheric mass. The density of the air severely limits the range of gamma rays and neutrons, meaning distance diminishes the effect much more rapidly than thermal radiation.15 |

For a programmatic implementation, a basic back-of-the-envelope calculation can be expressed via the following algorithm:  
![][image6]  
Where ![][image7] is the resulting radius of destruction, ![][image1] is the user-selected yield in kilotons, ![][image8] is the scaling exponent specific to the physical phenomenon, and ![][image9] is the baseline radius of that specific effect for a standard reference yield.15 While many equations use 1 kiloton as the baseline constant, some simplified algorithms utilize 2.5 kilotons as a calibration point before scaling.14  
To build a simulator capable of representing the full spectrum of historical arsenals, the engine must accommodate yields ranging across six orders of magnitude. For instance, the engine must accurately scale down to the "Davy Crockett" (a 20-ton or 0.02 kT tactical weapon) and scale up to the Soviet "Tsar Bomba" (tested at 50 megatons, or 50,000 kT, but designed for 100 megatons).12 At the lowest yields, the 0.19 scaling exponent for radiation ensures that prompt gamma and neutron emissions constitute the primary lethal radius, while at the highest yields, the 0.41 scaling exponent for thermal radiation results in third-degree burns extending tens of kilometers beyond the reach of the physical blast wave.12

## **Airburst Dynamics, Mach Stem Formation, and Knee Curve Interpolation**

While surface detonations (ground bursts) can be modeled using the relatively straightforward scaling algorithms outlined above, airbursts introduce severe non-linear physical complexities that heavily challenge algorithmic implementations.7 An airburst is defined as a detonation executed high enough in the atmosphere that the resulting nuclear fireball does not intersect with the surface of the earth.6 Strategically, airbursts are utilized because they minimize local radioactive fallout (by preventing environmental dirt and debris from being drawn up into the highly radioactive fireball) while simultaneously maximizing the geographic footprint of blast overpressure against "soft" targets like urban infrastructure.6  
The calculation of thermal and ionizing radiation for an airburst remains relatively straightforward, adhering to straight-line physics.7 Both heat and radioactivity travel in linear paths from the point of detonation. If the simulation computes the necessary slant-line distance for a specific thermal or radiation effect, the radius on the ground at any arbitrary detonation height can be calculated simply by applying the Pythagorean theorem.7 Because thermal effects have massive ranges at strategic yields, the detonation altitude has a negligible impact on the ground radius unless the weapon is detonated at exo-atmospheric heights. Conversely, because ionizing radiation is short-ranged, the height of burst heavily dictates whether a lethal dose reaches the surface at all.7  
Blast pressure calculations, however, are far more complex because shockwaves do not travel in perfectly straight lines, nor do they cease to exist when they strike a solid surface.7 When the primary (or "incident") shockwave from an airburst propagates outward and strikes the earth, it reflects and bounces upward. Depending on the angle of incidence, this reflected wave will eventually catch up to and merge with the primary incident wave. This merging creates a single, highly energetic, vertical shock front known as the "Mach stem".7 The formation of a Mach stem acts as a violent amplifier, significantly increasing the peak overpressure at ground level compared to what the incident wave alone would have produced.7  
This fluid dynamic amplification renders simple algebraic polynomials highly inaccurate for computational modeling.7 In early civil defense tools, such as the Lovelace Foundation’s *Nuclear Bomb Effects Computer*, users utilized a circular nomogram and slide rule to align yield, range, and burst type to manually find intersecting values for overpressure.7 When developers attempt to digitize this process, they must rely on "knee curves"—graphs that plot pressure ranges on axes of ground range and burst height, which are characterized by a sudden "bulge" or "knee" where the Mach stem forms and overpressure dramatically expands.7  
To programmatically solve for arbitrary airburst heights without generating massive mathematical errors, a web simulation architecture must avoid simple polynomial curve fitting of these erratic graphs. Instead, the optimal approach involves digitizing thousands of discrete point-value samples from Glasstone and Dolan's legacy graphs into localized database arrays or JSON objects. The simulation's physics engine then treats the overpressure calculation as a two-dimensional interpolation problem between these known empirical coordinates for a standard 1-kiloton burst.7 Once the exact radius for a 1-kiloton airburst at a specific altitude is interpolated, standard cube-root scaling laws are applied to determine the final ground range for the user's requested yield.7

## **Architectural Blueprint: Client-Side Physics Engine in JavaScript**

The realization of a nuclear simulation requires a highly optimized architectural stack. A critical design philosophy for applications expected to handle viral traffic spikes—such as the 15,000 to 200,000 daily hits experienced by NUKEMAP—is to offload as much computational burden to the client as possible.9 JavaScript is uniquely positioned to handle the client-side physics engine. By executing the mathematical models directly within the user's browser, the application minimizes server load, ensuring the simulation remains highly responsive.9  
An advanced architectural pattern separates the physics calculations entirely from the rendering logic. This is the underlying concept behind modular frameworks like the *Atomic Weapons Effects Library* (AWEL.js), a universal framework designed to integrate different mathematical models and data points into a single, unit-agnostic utility.13 A well-structured framework utilizes object-oriented programming to instantiate detonation events, handle dynamic unit conversions, and return clean geometric radii to the mapping interface.13  
The following JavaScript implementation demonstrates how to construct a robust, object-oriented physics engine capable of accepting a weapon yield and computing the radii for various blast, thermal, and radiation thresholds based on standard empirical constants.14

JavaScript  
/\*\*  
 \* Atomic Weapons Effects Physics Engine  
 \* Employs empirical scaling laws derived from Glasstone and Dolan (1977).  
 \* Designed as a modular, unit-agnostic class for geospatial web integration.  
 \*/  
class NuclearSimulationEngine {  
    /\*\*  
     \* @param {number} yieldKt \- The explosive yield in kilotons.  
     \* @param {number} latitude \- Target latitude.  
     \* @param {number} longitude \- Target longitude.  
     \*/  
    constructor(yieldKt, latitude, longitude) {  
        this.yieldKt \= yieldKt;  
        this.latitude \= latitude;  
        this.longitude \= longitude;  
          
        // Base radii constants for a 1-kiloton (kT) surface burst (measured in meters).  
        // Note: Real-world production simulators use multidimensional array interpolation   
        // for varying heights of burst to account for Mach stem formation.  
        this.BASE\_RADII\_1KT \= {  
            fireball: 100,           // Approximate 1kT fireball radius (X-ray expansion)  
            blast\_20psi: 200,        // 20 psi overpressure (destruction of heavy concrete)  
            blast\_5psi: 450,         // 5 psi overpressure (collapse of residential structures)  
            blast\_1psi: 1170,        // 1 psi overpressure (shattered glass, minor damage)  
            thermal\_3rd\_degree: 500, // 100% probability 3rd-degree burns  
            radiation\_500rem: 700    // 500 rem acute ionizing dose (high mortality without care)  
        };

        // Scaling exponents derived from nuclear physics principles  
        this.SCALING\_EXPONENTS \= {  
            fireball: 0.40,  
            blast: 0.3333,       // Cube-root law for volumetric pressure scaling  
            thermal: 0.41,       // Modified square-root law (accounts for atmospheric attenuation)  
            radiation: 0.19      // Severe atmospheric attenuation for prompt gamma/neutrons  
        };  
    }

    /\*\*  
     \* Core scaling algorithm applying fractional exponents to base constants.  
     \* @param {number} baseRadius \- The radius at 1 kT in meters.  
     \* @param {number} scalingExponent \- The physical scaling law exponent.  
     \* @returns {number} The calculated radius in meters.  
     \*/  
    applyScalingLaw(baseRadius, scalingExponent) {  
        // R \= Y^x \* C  
        return Math.pow(this.yieldKt, scalingExponent) \* baseRadius;  
    }

    /\*\*  
     \* Generates a comprehensive object containing all effect radii for the instantiated yield.  
     \* @returns {Object} Key\-value pairs of effect zones and their radii in meters.  
     \*/  
    computeEffectRadii() {  
        return {  
            fireball: this.applyScalingLaw(this.BASE\_RADII\_1KT.fireball, this.SCALING\_EXPONENTS.fireball),  
            blast\_20psi: this.applyScalingLaw(this.BASE\_RADII\_1KT.blast\_20psi, this.SCALING\_EXPONENTS.blast),  
            blast\_5psi: this.applyScalingLaw(this.BASE\_RADII\_1KT.blast\_5psi, this.SCALING\_EXPONENTS.blast),  
            blast\_1psi: this.applyScalingLaw(this.BASE\_RADII\_1KT.blast\_1psi, this.SCALING\_EXPONENTS.blast),  
            thermal\_3rd\_degree: this.applyScalingLaw(this.BASE\_RADII\_1KT.thermal\_3rd\_degree, this.SCALING\_EXPONENTS.thermal),  
            radiation\_500rem: this.applyScalingLaw(this.BASE\_RADII\_1KT.radiation\_500rem, this.SCALING\_EXPONENTS.radiation)  
        };  
    }  
}

This engine abstracts the mathematics entirely away from the UI. If a user selects a preset—such as the 15-kiloton "Little Boy" bomb dropped on Hiroshima, or a 300-kiloton W-87 Minuteman III warhead—the engine simply instantiates a new object with the corresponding yield and computes the exact geometry required for rendering.19

## **Geospatial Visualization: Implementing Leaflet.js for Interactive Cartography**

Once the physics engine has computed the radii, the data must be visually projected. Leaflet.js remains one of the most lightweight, robust, and heavily utilized open-source JavaScript libraries for mobile-friendly interactive maps.22 The basic methodology for visualizing nuclear blast zones involves drawing vector overlays (concentric circles or complex polygons) atop tiled basemaps supplied by OpenStreetMap, Mapbox, or Protomaps.24  
A critical geospatial challenge in this architecture involves compensating for projection distortion. Web mapping libraries uniformly utilize the Web Mercator projection (EPSG:3857). Because Web Mercator increasingly distorts physical scale as latitude moves away from the equator toward the poles, drawing a standard SVG or pixel-based circle on a web map will not represent a true physical circle on the surface of the Earth.25 Leaflet’s native L.circle object natively compensates for this internal distortion; it dynamically adjusts the pixel radius drawn on the screen based on the map's current latitude to maintain a consistent physical radius in meters.25  
However, for massive megaton-class detonations whose radii span thousands of kilometers (e.g., the 100-megaton Tsar Bomba design), even Leaflet's internal approximations begin to fail.19 In such extreme edge cases, developers must generate true "Great Circle" polygons utilizing complex geodesic algorithms. Plugins such as Leaflet.greatCircle or spatial analysis libraries like Turf.js are employed to generate polygons that represent true spherical paths across the Earth's curvature, compensating for the severe distortion near the poles.23  
For standard tactical and strategic yields, the following implementation demonstrates how to interface the physics engine with Leaflet to create an interactive simulator interface.22

JavaScript  
/\*\*  
 \* Geospatial Rendering Module utilizing Leaflet.js  
 \* Bridges the NuclearSimulationEngine output with Web Mercator visual overlays.  
 \*/

// 1\. Initialize the Map canvas targeting the \<div id="map"\>\</div\> element  
// Set the initial view coordinates (e.g., Washington, D.C.) and zoom level  
const map \= L.map('map').setView(\[38.8951, \-77.0364\], 11);

// 2\. Add an open-source tile layer (OpenStreetMap used here for demonstration)  
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {  
    maxZoom: 19,  
    attribution: '© OpenStreetMap contributors'  
}).addTo(map);

// 3\. Instantiate the physics model (e.g., an 800 kiloton Topol SS-25 warhead)  
const weaponYield \= 800;   
const targetLat \= 38.8951;  
const targetLng \= \-77.0364;

const detonation \= new NuclearSimulationEngine(weaponYield, targetLat, targetLng);  
const computedRadii \= detonation.computeEffectRadii();

// 4\. Define styling and hierarchy for concentric effect rings  
// Drawing order is critical: Largest circles must be drawn first (at the bottom)  
// so that smaller circles remain clickable and visible on top.  
const effectLayers \=;

// Sort the array descending by radius to ensure proper z-indexing on the map  
effectLayers.sort((a, b) \=\> b.radius \- a.radius);

// 5\. Iterate through the sorted definitions and draw L.circle objects  
const currentRings \=; // Keep track of layers to allow clearing on subsequent clicks

effectLayers.forEach(effect \=\> {  
    const circleLayer \= L.circle(\[targetLat, targetLng\], {  
        radius: effect.radius,      // Leaflet expects meters  
        color: effect.color,        // Stroke color  
        fillColor: effect.color,    // Fill color  
        fillOpacity: effect.fillOpacity,  
        weight: 1                   // Border stroke width in pixels  
    });

    // Bind an interactive popup containing the physical implications of the ring  
    const radiusKm \= (effect.radius / 1000).toFixed(2);  
    circleLayer.bindPopup(\`\<strong\>${effect.label}\</strong\>\<br\>Radius: ${radiusKm} km\<br\>\<em\>${effect.description}\</em\>\`);  
      
    circleLayer.addTo(map);  
    currentRings.push(circleLayer);  
});

By decoupling the mathematical engine from the Leaflet rendering logic, the application remains highly responsive. If the user selects a new yield or drags the target marker to a new location, the application simply calls map.removeLayer() on the objects in the currentRings array, re-instantiates the NuclearSimulationEngine with the new parameters, and redraws the vectors with virtually zero latency.

## **Backend Architecture: Spatial Demographic Querying via PHP and PostGIS**

While rendering geometric circles is instantaneous and lightweight on the client device, generating humanitarian impact assessments requires processing massive, multi-gigabyte demographic datasets.8 The client device cannot locally store or efficiently query a global high-resolution population raster. Therefore, the JavaScript client must dispatch an asynchronous REST API payload (containing the detonation coordinates and effect radii) to a backend server.

### **The Demographic Database and Casualty Proxies**

The industry standard dataset utilized by geospatial simulators for ambient population mapping is the LandScan Global Population database, maintained by Oak Ridge National Laboratory.2 The LandScan dataset differs significantly from standard census data; rather than merely mapping where people sleep, LandScan utilizes satellite imagery, mobility models, and geospatial algorithms to provide a 24-hour average of where populations are located throughout the day.2  
When the server receives a coordinate and a blast radius, it executes a spatial query against this grid to return the total number of people within that zone. However, intersecting a demographic grid only provides an exposed population count; it does not calculate mortality. To estimate casualties, simulators utilize historical proxy models—most notably, data adapted from the 1973 Defense Civil Preparedness Agency (DCPA) *Attack Environment Manual* and the 1979 Office of Technology Assessment (OTA) report, *The Effects of Nuclear War*.8  
These historical models primarily rely on blast overpressure (measured in pounds per square inch, or psi) as the dominant statistical proxy for calculating overall injuries and fatalities.8

| Overpressure Ring (psi) | Structural Impact | Associated Human Mortality and Injury Proxy |
| :---- | :---- | :---- |
| **20 psi** | Extreme structural damage. Heavily reinforced concrete structures are demolished.19 | Near 100% mortality. Direct barotrauma (crushed lungs/eardrums) and massive secondary missile impact.19 |
| **5 psi** | Medium damage. Most residential structures collapse.19 | High mortality (often calculated at \~50%) and widespread severe injuries (40%).8 |
| **1 psi** | Light damage. Shattered windows, minor structural deformation.19 | Low direct mortality, but extremely high incidence of lacerations from flying glass and debris.19 |

Relying strictly on blast overpressure as a proxy simplifies backend computation but introduces systemic limitations. For high-yield strategic weapons, the lethal thermal radiation radius can extend significantly beyond the 5 psi blast radius, meaning the blast proxy may underestimate fatalities.8 Conversely, for highly dense urban environments, the blast model fails to account for topographical "shielding." In cities with massive skyscraper topography, buildings nearest ground zero bear the brunt of the shockwave, absorbing energy and effectively shielding the populations located in their acoustic shadow.8 Modernizing these architectures requires transitioning from simple Boolean queries toward advanced multivariate models that factor in urban land-use datasets, dynamically altering casualty probabilities based on building density parameters.10

### **Implementing the PHP and PostGIS Spatial API**

To achieve the necessary performance for demographic querying, the underlying database must be spatially indexed. A robust backend architecture utilizes a relational database like PostgreSQL equipped with the PostGIS extension.10 PostGIS allows for the execution of advanced spatial functions, such as ST\_DWithin (Distance Within), which can instantly calculate the intersection of a geographic point (Ground Zero) and a radius (the 5 psi blast effect) against millions of demographic grid cells.  
PHP serves as the highly efficient middleware, receiving the REST API request, formatting the spatial SQL query, executing the intersection against the database, and returning the aggregated sum of casualties back to the JavaScript client as a JSON object.3  
The following PHP script demonstrates a secure, PDO-based architecture designed to receive a client payload, execute a spatial demographic query against a PostGIS database, apply the OTA mortality coefficients, and return the casualty estimation.

PHP  
\<?php  
/\*\*  
 \* Nuclear Casualty Estimation API Endpoint  
 \* Architecture: PHP 8.x connecting to PostgreSQL/PostGIS.  
 \* Requires the LandScan population database ingested as a spatially indexed vector grid.  
 \*/  
header('Content-Type: application/json');  
header('Access-Control-Allow-Origin: \*'); // Configure appropriately for production security

// 1\. Establish secure PDO Database Connection  
$host \= '127.0.0.1';  
$db   \= 'geospatial\_demographics';  
$user \= 'api\_user';  
$pass \= 'secure\_password';  
$dsn \= "pgsql:host=$host;dbname=$db";

try {  
    // Utilize PDO for secure, parameterized queries to prevent SQL injection  
    $pdo \= new PDO($dsn, $user, $pass,);  
} catch (PDOException $e) {  
    http\_response\_code(500);  
    echo json\_encode();  
    exit;  
}

// 2\. Capture and validate AJAX payload parameters  
$latitude \= filter\_input(INPUT\_GET, 'lat', FILTER\_VALIDATE\_FLOAT);  
$longitude \= filter\_input(INPUT\_GET, 'lng', FILTER\_VALIDATE\_FLOAT);  
// Retrieve the critical 5 psi blast radius in meters (used as the primary mortality surrogate)  
$radius\_5psi \= filter\_input(INPUT\_GET, 'radius\_5psi', FILTER\_VALIDATE\_FLOAT); 

if ($latitude \=== false || $longitude \=== false || $radius\_5psi \=== false) {  
    http\_response\_code(400);  
    echo json\_encode(\['error' \=\> 'Invalid or missing coordinate/radius parameters.'\]);  
    exit;  
}

// 3\. Execute PostGIS Spatial Query  
// The query utilizes ST\_DWithin to find all population grid cells within the specified radius.  
// ST\_MakePoint requires Longitude first, then Latitude.  
// SRID 4326 is the standard WGS 84 geographic coordinate system.  
// The ::geography cast is vital: it ensures the distance is measured accurately   
// in meters over the Earth's curvature, rather than flat Cartesian degrees.  
$sql \= "  
    SELECT SUM(population\_count) AS estimated\_ambient\_population  
    FROM global\_population\_grid  
    WHERE ST\_DWithin(  
        geom::geography,   
        ST\_SetSRID(ST\_MakePoint(:lng, :lat), 4326)::geography,   
        :radius  
    )  
";

try {  
    $stmt \= $pdo\-\>prepare($sql);  
    $stmt\-\>execute(\[  
        ':lng' \=\> $longitude,  
        ':lat' \=\> $latitude,  
        ':radius' \=\> $radius\_5psi  
    \]);  
      
    $result \= $stmt\-\>fetch();  
    $ambient\_population \= $result\['estimated\_ambient\_population'\]?? 0;  
      
    // 4\. Apply Proxy Mortality Coefficients based on OTA Guidelines  
    // In a full production implementation, multiple queries would be run for different  
    // psi bands (e.g., 20psi \= 98% mortality, 5psi \= 50% mortality, 1psi \= 5% mortality).  
    // For this demonstration, we apply a simplified coefficient across the 5psi boundary.  
    $calculated\_fatalities \= round($ambient\_population \* 0.50);  
    $calculated\_injuries \= round($ambient\_population \* 0.40);  
      
    // 5\. Return Data to Client  
    echo json\_encode(\[  
        'status' \=\> 'success',  
        'data' \=\> \[  
            'total\_population\_in\_zone' \=\> (int)$ambient\_population,  
            'estimated\_fatalities' \=\> $calculated\_fatalities,  
            'estimated\_injuries' \=\> $calculated\_injuries  
        \]);

} catch (PDOException $e) {  
    // Log detailed error internally, return generic error to client  
    error\_log('PostGIS Query Error: '. $e\-\>getMessage());  
    http\_response\_code(500);  
    echo json\_encode();  
}  
?\>

This backend architecture reveals a profound operational truth about geospatial modeling: high-fidelity casualty estimations are inherently bound by computational limits. Calculating the intersection of vast polygon geometries over highly dense raster maps demands intense CPU cycles and high memory overhead.29 In production environments handling tens of thousands of daily requests, executing complex ![][image10] spatial queries across millions of grid cells can result in cascading server failure if not managed correctly.8 Consequently, spatial tables must utilize highly optimized spatial indices (such as GiST or SP-GiST in PostgreSQL). Furthermore, API endpoints must be heavily cached (storing previous identical detonation coordinates in memory), load-balanced, and subjected to rate-limiting to ensure stability.8 The transition from simple analytical mathematical solutions to complex numerical and geospatial methods underscores the modern prioritization of empirical accuracy, but at a significant computational cost.34

## **Modeling Radioactive Fallout and Asymmetrical Environmental Effects**

While the prompt effects of a detonation—blast, thermal flash, and initial ionizing radiation—occur within milliseconds and propagate in roughly spherical geometries, residual radioactive fallout is a delayed, atmospheric phenomenon characterized by profound geographic drift and asymmetry.8 Simulating fallout requires developers to break the paradigm of concentric circular geometry that governs prompt effects.  
Fallout refers to the irradiated dirt, debris, and fission products drawn up into the nuclear mushroom cloud by the updraft of the fireball, which are subsequently distributed by upper-atmospheric winds as they cool and settle back to earth.6 Modeling the geographic contours of this fallout is inherently non-deterministic and highly complex. The severity of the fallout footprint depends on three primary variables: the ratio of fission to fusion reactions within the weapon's design (as fission generates the vast majority of radioactive isotopes), the height of the burst (which determines how much ground debris is entrained into the fireball), and the multi-directional wind shear present across different altitudes of the atmosphere.8  
In advanced simulators, fallout is typically rendered as asymmetrical "cigar" shapes or complex, multi-tiered polygons known as "fallout contours," which map different dose rates measured in rads per hour (e.g., 1 rad/hr, 10 rads/hr, 1000 rads/hr).2  
Modern architectural advancements allow developers to integrate external meteorological APIs to ingest real-time local weather conditions into the physics engine.35 By querying contemporary meteorological endpoints for wind direction, speed, and atmospheric shear at the specific coordinates of the simulated detonation, the application can dynamically warp, stretch, and skew the fallout polygons in Leaflet. This generates localized dose rate contours that reflect exact real-world vulnerabilities at the precise time of the simulation.20 This integration transitions the tool from a static historical model into an active, dynamic environmental simulator, highlighting exactly which downwind communities would be exposed to lethal chronic radiation.35

## **Three-Dimensional Topography and Future Visualization Paradigms**

One of the most significant acknowledged limitations of two-dimensional mapping tools is the assumption of a "perfectly level target area" devoid of topographic relief.5 Traditional models fail to account for the attenuation caused by urban terrain masking, the channeling of dynamic pressure down city streets, or the shadowing provided by mountain ranges.5 In dense topographies, a surface burst is severely restricted by the absorption of kinetic energy into massive reinforced concrete structures.8  
Future architectural iterations within this domain demand deep integration with high-resolution digital elevation models (DEM) and 3D urban massing datasets (such as 3D Tiles, CityGML, or LiDAR derivatives). Transitioning from a flat 2D mapping engine like Leaflet to a WebGL-powered 3D engine like MapLibre GL JS, deck.gl, or Three.js allows developers to calculate true line-of-sight exposure for thermal radiation and simulate dynamic pressure channeling.1  
Historically, rendering the physical volume of a nuclear mushroom cloud to provide a sense of scale was achieved by exporting generated Keyhole Markup Language (KMZ) files into Google Earth.3 This process allowed users to manually view the volumetric scale of the debris cloud relative to human architecture.3 The deprecation of the browser-based Google Earth API restricted this capability, forcing reliance on clunky desktop applications.1 However, the rapid maturation of open-source WebGL mapping platforms now offers the potential to render volumetric shaders and complex particle systems natively within the browser canvas. This brings three-dimensional geospatial visualization back to the client side without relying on proprietary plugins, representing the next major evolutionary leap for geospatial nuclear simulation architectures.1

## **Conclusion**

The construction of a web-based geospatial nuclear simulation represents a highly complex synthesis of mid-century physics and contemporary full-stack web architecture. It demands an intimate understanding of scaling laws, fluid dynamics, and thermodynamics, paired intricately with the technical capacity to execute demanding spatial demographic queries and render complex, non-linear geometries on interactive digital canvases.  
The successful transition of reference tools like NUKEMAP away from reliance on restrictive, proprietary corporate APIs toward open-source frameworks (such as Leaflet, MapLibre, and PostGIS) illustrates a broader, vital movement within geospatial intelligence toward resilience, cost-efficiency, and localized control.1 By decoupling the underlying mathematical physics engine from the specific cartographic rendering interface through modular, object-oriented design, the architecture achieves a flexibility that allows for continuous refinement and the eventual integration of 3D WebGL rendering.13  
Ultimately, these platforms demonstrate that raw numerical data—whether it be the cube-root scaling law of blast overpressure, or the dense numerical arrays of the LandScan global population grid—holds little inherent communicable value without thoughtful visualization.8 By integrating robust JavaScript physics engines with high-speed PHP and PostGIS backends, these systems translate abstract, incomprehensible yields into highly localized, human-scaled realities. In doing so, they transform theoretical modeling into an immediate, visceral, and deeply educational geospatial experience.

#### **Works cited**

> 1. Nukemap \- Wikipedia, accessed July 22, 2026, [https://en.wikipedia.org/wiki/Nukemap](https://en.wikipedia.org/wiki/Nukemap)  
> 2. Nukemap \- Grokipedia, accessed July 22, 2026, [https://grokipedia.com/page/Nukemap](https://grokipedia.com/page/Nukemap)  
> 3. NUKEMAP \- Alex Wellerstein, accessed July 22, 2026, [https://alexwellerstein.com/projects/nukemap/](https://alexwellerstein.com/projects/nukemap/)  
> 4. Full article: NUKEMAP creator Alex Wellerstein puts nuclear risk on the radar, accessed July 22, 2026, [https://www.tandfonline.com/doi/full/10.1080/00963402.2017.1338001](https://www.tandfonline.com/doi/full/10.1080/00963402.2017.1338001)  
> 5. Effects of nuclear explosions \- Wikipedia, accessed July 22, 2026, [https://en.wikipedia.org/wiki/Effects\_of\_nuclear\_explosions](https://en.wikipedia.org/wiki/Effects_of_nuclear_explosions)  
> 6. Nuclear Fireball Calculator, accessed July 22, 2026, [https://nuclearweaponsedproj.mit.edu/fireball-size-effects/](https://nuclearweaponsedproj.mit.edu/fireball-size-effects/)  
> 7. The trouble with airbursts | Restricted Data \- The Nuclear Secrecy Blog, accessed July 22, 2026, [https://blog.nuclearsecrecy.com/2013/12/06/trouble-airbursts/](https://blog.nuclearsecrecy.com/2013/12/06/trouble-airbursts/)  
> 8. NUKEMAP FAQ \- The Nuclear Secrecy Blog, accessed July 22, 2026, [https://nuclearsecrecy.com/nukemap/faq/](https://nuclearsecrecy.com/nukemap/faq/)  
> 9. Why NUKEMAP isn't on Google Maps anymore | Restricted Data \- The Nuclear Secrecy Blog, accessed July 22, 2026, [https://blog.nuclearsecrecy.com/2019/12/13/why-nukemap-isnt-on-google-maps-anymore/](https://blog.nuclearsecrecy.com/2019/12/13/why-nukemap-isnt-on-google-maps-anymore/)  
> 10. NUKEMAP roadmap | Restricted Data \- The Nuclear Secrecy Blog, accessed July 22, 2026, [https://blog.nuclearsecrecy.com/2026/02/10/nukemap-roadmap/](https://blog.nuclearsecrecy.com/2026/02/10/nukemap-roadmap/)  
> 11. Why NUKEMAP isn't on Google Maps anymore (2019) \- Hacker News, accessed July 22, 2026, [https://news.ycombinator.com/item?id=46615374](https://news.ycombinator.com/item?id=46615374)  
> 12. \[Request\] What's the maximum amount of explosion power required for a nuclear explosion to be safe from 9 feet away? : r/theydidthemath \- Reddit, accessed July 22, 2026, [https://www.reddit.com/r/theydidthemath/comments/15sd9yv/request\_whats\_the\_maximum\_amount\_of\_explosion/](https://www.reddit.com/r/theydidthemath/comments/15sd9yv/request_whats_the_maximum_amount_of_explosion/)  
> 13. What equations does nukemap use to calculate the radius of different effects \- Reddit, accessed July 22, 2026, [https://www.reddit.com/r/nuclearweapons/comments/1hakn1i/what\_equations\_does\_nukemap\_use\_to\_calculate\_the/](https://www.reddit.com/r/nuclearweapons/comments/1hakn1i/what_equations_does_nukemap_use_to_calculate_the/)  
> 14. Innacurate Prediction of Nuclear Weapons Effects and Possible Adverse Influences on Nuclear Terrorism Preparedness \- Homeland Security Affairs, accessed July 22, 2026, [https://www.hsaj.org/resources/uploads/2022/05/5.3.3.pdf](https://www.hsaj.org/resources/uploads/2022/05/5.3.3.pdf)  
> 15. Is there any databases or spreadsheets which correlate the radii of various rings (overpressure, radiation) with the yield of the nuclear weapon? : r/nuclearweapons \- Reddit, accessed July 22, 2026, [https://www.reddit.com/r/nuclearweapons/comments/vqwuw0/is\_there\_any\_databases\_or\_spreadsheets\_which/](https://www.reddit.com/r/nuclearweapons/comments/vqwuw0/is_there_any_databases_or_spreadsheets_which/)  
> 16. NUKEMAP shows the nuclear weapons range: how to calculate \- AIN, accessed July 22, 2026, [https://en.ain.ua/2022/09/28/nukemap-how-to-calculate/](https://en.ain.ua/2022/09/28/nukemap-how-to-calculate/)  
> 17. Nuclear Blast Simulator: Nuke Simulator \- Interactive Nuclear Bomb Radius Map, accessed July 22, 2026, [https://www.nuclearblastsimulator.com/](https://www.nuclearblastsimulator.com/)  
> 18. I read a long time ago. A nuclear weapon's overall destructive power only doubles if you increase the yield of the weapon by 8 times that of what is used. Is that true? : r/nuclearweapons \- Reddit, accessed July 22, 2026, [https://www.reddit.com/r/nuclearweapons/comments/1sjmaym/i\_read\_a\_long\_time\_ago\_a\_nuclear\_weapons\_overall/](https://www.reddit.com/r/nuclearweapons/comments/1sjmaym/i_read_a_long_time_ago_a_nuclear_weapons_overall/)  
> 19. NUKEMAP by Alex Wellerstein \- The Nuclear Secrecy Blog, accessed July 22, 2026, [https://nuclearsecrecy.com/nukemap/](https://nuclearsecrecy.com/nukemap/)  
> 20. What the NUKEMAP taught me about fallout | Restricted Data, accessed July 22, 2026, [https://blog.nuclearsecrecy.com/2013/08/02/what-the-nukemap-taught-me-about-fallout/](https://blog.nuclearsecrecy.com/2013/08/02/what-the-nukemap-taught-me-about-fallout/)  
> 21. The Nuclear Secrecy Blog: Restricted Data, accessed July 22, 2026, [https://blog.nuclearsecrecy.com/](https://blog.nuclearsecrecy.com/)  
> 22. Quick Start Guide \- Leaflet \- a JavaScript library for interactive maps, accessed July 22, 2026, [https://leafletjs.com/examples/quick-start/](https://leafletjs.com/examples/quick-start/)  
> 23. Alex Wellerstein nuclearsecrecy \- GitHub, accessed July 22, 2026, [https://github.com/nuclearsecrecy](https://github.com/nuclearsecrecy)  
> 24. Tutorials \- Leaflet \- a JavaScript library for interactive maps, accessed July 22, 2026, [https://leafletjs.com/examples.html](https://leafletjs.com/examples.html)  
> 25. Documentation \- Leaflet \- a JavaScript library for interactive maps, accessed July 22, 2026, [https://leafletjs.com/reference.html](https://leafletjs.com/reference.html)  
> 26. Leaflet Tutorial 2: Circles, Polygons and PopUps with JavaScript \- YouTube, accessed July 22, 2026, [https://www.youtube.com/watch?v=OYjFR\_CGV8o](https://www.youtube.com/watch?v=OYjFR_CGV8o)  
> 27. drawing circle with radius specified in meters on a map \- Stack Overflow, accessed July 22, 2026, [https://stackoverflow.com/questions/17303320/drawing-circle-with-radius-specified-in-meters-on-a-map](https://stackoverflow.com/questions/17303320/drawing-circle-with-radius-specified-in-meters-on-a-map)  
> 28. Add concentric circles to a map at specific distances around a marker using Leaflet and GeoJSON \- Stack Overflow, accessed July 22, 2026, [https://stackoverflow.com/questions/57562834/add-concentric-circles-to-a-map-at-specific-distances-around-a-marker-using-leaf](https://stackoverflow.com/questions/57562834/add-concentric-circles-to-a-map-at-specific-distances-around-a-marker-using-leaf)  
> 29. Embedding NUKEMAP \- The Nuclear Secrecy Blog, accessed July 22, 2026, [https://nuclearsecrecy.com/nukemap/faq/embedding.html](https://nuclearsecrecy.com/nukemap/faq/embedding.html)  
> 30. 1 second after detonation \- Atomic Archive, accessed July 22, 2026, [https://www.atomicarchive.com/science/scenarios/newyork/onesecond.html](https://www.atomicarchive.com/science/scenarios/newyork/onesecond.html)  
> 31. The Effects of Nuclear Weapons \- Glasstone and Dolan | Chapter XII \- Atomic Archive, accessed July 22, 2026, [https://www.atomicarchive.com/resources/documents/effects/glasstone-dolan/chapter12.html](https://www.atomicarchive.com/resources/documents/effects/glasstone-dolan/chapter12.html)  
> 32. How do people make custom maps with tools like Leaflet / Mapbox? : r/webdev \- Reddit, accessed July 22, 2026, [https://www.reddit.com/r/webdev/comments/17egemt/how\_do\_people\_make\_custom\_maps\_with\_tools\_like/](https://www.reddit.com/r/webdev/comments/17egemt/how_do_people_make_custom_maps_with_tools_like/)  
> 33. Nukemap as a source? : r/nuclearweapons \- Reddit, accessed July 22, 2026, [https://www.reddit.com/r/nuclearweapons/comments/1b88gi1/nukemap\_as\_a\_source/](https://www.reddit.com/r/nuclearweapons/comments/1b88gi1/nukemap_as_a_source/)  
> 34. FAQ : MISSILEMAP by Alex Wellerstein \- The Nuclear Secrecy Blog, accessed July 22, 2026, [https://nuclearsecrecy.com/missilemap/faq/](https://nuclearsecrecy.com/missilemap/faq/)  
> 35. This Nuclear Bomb Map Shows What Would Happen if One Exploded Near You, accessed July 22, 2026, [https://www.sciencealert.com/this-nuclear-explosion-simulator-shows-where-radioactive-fallout-would-go-using-today-s-weather](https://www.sciencealert.com/this-nuclear-explosion-simulator-shows-where-radioactive-fallout-would-go-using-today-s-weather)

[image1]: <data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAZCAYAAADXPsWXAAAA00lEQVR4Xu2SMQuBURSGj2IyiPwBBgub8gNktliUwWixMvoTFoMyScmfYFKsFrMoZWMUz+n6vq5L+pgM31PPct7buffce0VC3lHFM94st5iz1qRwaeVXbFq5T1vMghlGnUwp4BrLGHEynywecIcZJ0vgFEtO/QXdfSLmNA2rHsch1qzaR+ryPFIMB9iVDyO46Bg6zgnz2MGemGaB0d1GYk4zx7582cBDn1ybLMRc6E/opWqTlhsEJYkr3GDayQJTxAuO5YvX8KjgXp6//vFRDwn5H+5PwSi18ipmNQAAAABJRU5ErkJggg==>

[image2]: <data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAXCAYAAAC2/DnWAAAB5UlEQVR4Xu2XPShFYRjHH6HId0Si3EGibMLCoLAxoAwyKbIYfCaGuygTpaR8DFZZlMGoFFlsUmKwUEoyMJCP/7/nHM5973HupnPd91e/XO9zrjqP5/2/54hYLBbL39EG7+Cnx3v4Ct/hKeyF6e4XUo1N+AZbPGtsxrBog6ZhmqeWEuTBI3gNy4xaObz5pfbvqYMPcBdmGLVG+ALPYYlR+/d0i2bLiFkAUdHahLHuB7daDewTbbZfLhXATthsFsLIisTnSyYcEp2kKef3IFhfhWdwTzSXjmHEU58X3ZJjkgSNyYWHoqcQb4SfL0SnZA0WuxcmoAdOyk9AV8NLx4hoeG/DHKceevzyhTc3K/pf73DWgsgSnZYKY70JPsIreAIrY8vhxs2XcWO9AT6LHuOJYChzujh9Jswm/n1OU1Lhly9kQPSGFox1P4rgsvg3plZ0IrmlqoxaaAl6fmHD2JgZY90PbsFFid9KDNwt0Wzh9K07a6GnXjQDzOcXft6R2MbMwfbvK+JhFnE7uuHLBkThPswXDd8PuASznWtCR6vo06z5fsS8ceH7EcOXDRqEGxJ8Q2zIKDwQnZBb0alzTyHW++GT6AnIBiUt3F5dotMQ1BQvPKH4GsGffvChrxQWmgWLxWKxpCBfnUJeisz5psIAAAAASUVORK5CYII=>

[image3]: <data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAAAXCAYAAACh3qkfAAAB50lEQVR4Xu2XPShFYRjHH6HId0Si3EGibMLCoLAxoAwyKbIYfCYGizJRSsrHYJVFGYxKkcUmJQYLpSQDA/n4/3vO4Xjv6xh17n1/9eve+zzn3jrPfd7nfY+Iw+FwJA4t8BZ+BLyDL/ANnsBumOp/waFswFfYFIixSIOihZuEKYFcUpMDD+EVLDFypfD6l1zSUgPv4Q5MM3L18BmewSIjl7R0is6uITMB5kRzY0bcBpdsFewR/RNscy8PtsNGMxElliV+fqXDAdHOm/A+h8H8CjyFu6Jz7wjGAvlZ0aU9IhEuWDY8EN0VeYN8fy7aVauw0L/wD7rguHxvDJXwwjMmumlswSwvH1ls84s3PS3aJW1eLIwM0e4qM+IN8AFewmNY/jMdTfz5NWrE6+CT6HHjL7gZsBvZrSacffx9dl9CYJtfpE/0RueNuI0CuCT2glWLdjCXZoWRixxh5y8WkgWbMuI2uJQXJH5JctBvis4uduuaF4sstaIzxjx/8f22/CzYDGz9uiIezjoua3/oszBzcA/mig79d7gIM71rIkOz6OndfH7kPPPh8yOHPgvXD9cl/EZZqGG4L9pRN6Jd6u+KzPfCR9EdmYVLOLhMO0S7J6xYQbhj8nGKrzZ4mC2G+WbC4XA4HI5/5xNBD16KNi+MBAAAAABJRU5ErkJggg==>

[image4]: <data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAXCAYAAAAC9s/ZAAABFklEQVR4Xu3TsUsCYRjH8UckSC0hCjMoolEQyl2aC2zQSYPm6B+opaEGcdYlmqRBcHDVqSFoDIKGRKTR1cXVxe/j+wZ3Dp53gy7+4MPx3vve+9773HsiS8whHlHBOULu7vlJoIUT7OILRdcIjxzjD3ls4QNl5wA/SaOPzGyHV6Kooocb8VkDZyLo4F58TJLENWK2/YZf7P0PiOMSR7at1xwObPsWI5yKWbWBNja1U6v6imcMUMMLHtAV8+n0KzRxhRK+caYPay7ErKCz6yp17OAdQ6TsuLCY87CPDXtvmjsxDxcwRlbMa+oWdPKFC6Wv7iqMn2zjU0xxFl7RGd2n7ldrESjO/QfKE37E/GmBogdCz8M6q8gExBMl9F97d9QAAAAASUVORK5CYII=>

[image5]: <data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAXCAYAAABqBU3hAAABuklEQVR4Xu2VPSiFURjHH6GI8pFCWRhIlEFMJmHxkW/KYDAwSMlnBqvBxiIpgyQSmQ0+BikWioGJfJSyYRP/f+fc9z3nuPeWW95B91e/7n3OOfee533Oc+4V+QckwjY4Bwdgqj3t0QC7YAGsg632dOyMwWmYAHvgvH7vMgW/4CfchHn2dGxkwX1YqeN8eAKLvBU+Q+Kvs2iBb6KyC3kDi4012fDUmOdT9MNSeCt2AtewRscmTKBJVOkrJEyVhkV9+TZMcuZIOTyHteJ/mBvf61fCBO5gs45NRuE4TIEzcFKcJFi2Z/gAC80JkAG3YLUz/psETKrglTj78Kk3RFWhzxhPgyuwwxgLwY6+FDsBxtzAJB2uwXodu4l79Ip9DMlwScKUS8MrtyP+mbMnDmCOqMRHRCXJeE/U2RNewwuYq2MPloRH8ArL4AScFZVIJHgsu6K+fBm26/ES+Ai7dcyHYx90wkPYqMct+JSroqpwBBcl+uYh2FgsP0sdjUxR67g+IryWTOBYVPMFDhuQCQy6E0GxAD/kZycHAn9az0TdUXZu4PBevsN1CX/t/gzeyyex/w9e9HicOHH+lG+o909osYDvjgAAAABJRU5ErkJggg==>

[image6]: <data:image/png;base64,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>

[image7]: <data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAAaCAYAAAANIPQdAAAC50lEQVR4Xu2XS6hNURjHP8/IOwqlREkiymOgKAqhGDBRSBFmypVXoltSUgwYkEcykPIIeUXiirwyMfCYGBiJkhEDEv9f317dtdc553b3dciu/a9fnf2t/Vjf+h5rHbNKlSr9z5orPohfEZ/Ed/FTPBPLRY/wQJl1UvwQsyIbjm0wd3ab6BaNlU4DxEPxTgxPxkaK9w3GSqUJ4rO4KHomYzPEN/FKDEvGSqWl5rW4MR2QWs3HtiT20umw1dZjL7HOPMJbs+vSqr9oM++mj7Pfb8yjd1QMDTcWFE1qiNXvynyzT2r8m6pXj0xwp3lXnZ/ZiqivOC7uioPJ2HpxSTy1ri9gbyuYWaEeWxL7NPHVfGspKtL+mtguFkR2InvHfFvaYQUnmolAnBNL0oGOVK8e0Upz5/cl9s6IBeO9qaaYb1V/0qXZxp6YZ2Cn1NH+yCRxkmikGi8OiOuWT+fBYr94K16IvWJgNkYTu2V+mjolJmd2xF68y/x9a6z90MFi7MnsRB8ui4/itOXf0VCTxBer3R/5fd7yTjKJeWKZuCoGmS8SjvTL7kE0lZtWmxmId6WZMV08EKPNneN9LDjXN8Q4Mcd8n8bONlcvS2o02/wUk55Xqc8gzqs0HpxdLU6IUeYfO2SezsfEwvBAJu6hqYxN7Dhw1vy5IDosjvCNFebvXWteq9RdWGDuI0tYfALCQjdNrBwFTkrSMWlGpCKr20hE8LZ5lGPRdO6Zn6CCSNPX5n8SYgV7mg2k730rUI9dES9/bj4JRHSmWj7VidSZ6DqIyLIPh2cRk35kvnhBE83vJRsop9jOYocFXCXGRONNE05tMm8uOHPE8hNE1Eu94yH1TNNIDwGkHocO0pU9dZHoLjabp29sx+k28z08LZOmi+ZCjcRi8iPEFTEzsnPiIVU5+7ZG9lg8y8Eg/SsXajG1pQv1T8RHiRIOctKhfoPYOl6KC+YpV2otNv9jTTRjUV+7LR/dSpUqtes3WWSHf/NJ+H8AAAAASUVORK5CYII=>

[image8]: <data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAaCAYAAACD+r1hAAAAzUlEQVR4Xu3RsQtBURTH8SspokRSVslgYDAbKMrfIKtZFgMjo1JmyYBRFrNdKYPJ5A+wKJOB73n3ek96ZX2DX32G0zn39u55Sv3jtfhRRA1h+JBFFaGPOStRLNFBD0eMMcQUawTfw3LTACVTp3DBCnlcsUPE9FUcfeXcUMANDQTQRM70XCODd6Xf8zPyeTPsEfvq2ZEHT9BCAielD8lhiWxJenbqeGKEMh7omp5cNkfG1FbSOGCBDdo4K73OLSrOqBPZUFLpn+dW/+OxvAD0xRzAnkbIJQAAAABJRU5ErkJggg==>

[image9]: <data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAAaCAYAAADi4p8jAAAC4UlEQVR4Xu2XWciMURjHH0nZ9yxFvnCDIuGCKFuy3AgXJCmylCuUnb6S4oKipGT7lLJG2SLZQ1FyI+FGiXIpuaDw/3Xe4zvzzJhvDFPezL9+zfQ8Z+Y951nOOa9ZXXXlWh3FRDFPDBGtM3sH0S/7nksNFQ/FJ3FKrBHHxXUxTFwVU3+OzpHaiC3ii9gg2hW6bYL4KN5aDjPI4g6Ir2Ku80W1FZcz+J4rrRTfxUbRyvlSNYlN3viva7B4J16J/s7ndchy2H+NFrK3w9lLqYuFcs6NOApui29Wm8xQ7t2s+YhJxbNr3st9xRvxXgx0vj8Vu/BBcUPsdr5l4px4JHo4X6UiaO290SsuEPheTmxE47yxjMaLi2K9mJbYyShn6nILx1G1JT9fHPVGLx722FpeIFE+Inp5RxlxQdjnjdIIcU/09I7fFBveCm8sJcqHHpzuHZnoIybrz0cCsllcEout+XjpKnaKF+KJ2C46Z76lFm5CH8RhMTyzI0qarJy1MCc2NESGsZ/P7FMsZI62okJ4dlkNEC/FXdHH+XjoNrHaCs/H0eKOhd9iZxG9Ez8byBULZepFyfodm8WwgBjE2WKGhcXtFwssZPxpZudufCuzVaQG8UB8FscsRGWvhVKabIWLizea0xYiu0cscWO4yrGB+I2LMSfEQmen1F6LRRYCEDPI/7MQAsamQqvwye/5n3KXkiIxuMFC9GCQld7eKc3nYpJ3JCJz10QnZ6fnb4oxzt4kdlnxhLH7bCN6u6L+q0aUxX0xKrHxlkGUo4gwk/Mio1SK39CYMJmLolUofzaSVc5O38YgjRSzEv9f0xwLl3NKiHKiL9Lo/yrCXCboNX/As5iTFgLDQuPbDL3OeJ4T7d0tvMY1Wtj8qj1mWhSTpCd8fxLlC2JsYqfUKc+1FiZWSoyhOvyE095Lbb78ay4WR7RZHDeY9H2S4+GZOGOhnHOrmWKdFR839N5WK8xqXXX97/oBgup00lWtLP4AAAAASUVORK5CYII=>

[image10]: <data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAaCAYAAAAjZdWPAAAC1klEQVR4Xu2WTahNURTHl1CEJCJfhd5EDMhHlK8kMSDJgJSBCRMTH0+MLjIwIERKSiYMmKJQXpGEkfJRSCRCnpnBe4X//6293ttnnX3Ove88V9T9169z71q7s9fee611tkhL/69GgmHe2ICGgtHeWEVjwWqwCcwEg7PunOaAi1JtcgZ9Emz0jkY0CCwDj8BNsDVwC7wCC/qGZjQF3AWzvKMf4ibdAAu9o0xc7THwVvLB0XcefAdznY8L5S7VnL2K1ohuENOsrhjUOdApxStlinwDZ0QDNc0GL8NzoGJqPQCbvSOlneBneBZpDHgMnoFxkX0/uC7VCjClo+AaGOIdsdrAR/ACTHC+WBb0OzAx2BgoAz5ogyKxcJeAeeE3T2ca2CDlhb1WdA7WSaFq4JfoCss0A3ySbNB88v86GxRpFzgMnovOcRYcAdvAa3Bcsmlm4iI/SL6uesWE7xBNjVVZV070c9w9MCrYOMFn0R2NxRM7BcaLvp8FHNfKpWBPFVzZRvTIBrDAeGRlOi16IrXIxqDfh2es+WCL6BFz19iVbFctpe6AEcEWy2Jiq03KBsRHntJU0T79VbK9uChoE0+nKzxN00UXUpSOFtNu7zCxC7AblAXNHTogust7nK9e0CxQ1gHrwcR29gMsjmyx6qYH28oV0C35vDQxF5mT/Liwn8diMOw8rHivVBrYfA9Fe/J2sDz4TGXv7BW/cAyK9wYf1ErwBZwAw52PspPa4R3Sl89xGtgu8gRYpBckf1dh13gj9WusZyDbEO8cdt/g3eOpaOCp1kTRzsWySL14/NyMFZGNm3IZPAG3RQvWi3N3SLqz5MRmz9XxVsd8miTFwcZijnKx/PjE4vto8+/gf16OUl9QS5+as/9xMYD7opedgapNNN/5bLrWg6uSzvtGxRM4BNrD76aLk+wLVJ1wqehFyRdmU8Ui2wsWeUcDmizaZf5qwC219C/oN9UmfuIXzqEgAAAAAElFTkSuQmCC>