This prompt fetches your holdings and country composition data from Truthifi, then renders an interactive full-page world map styled like Google Maps. Countries are color-coded by exposure percentage. Click any country to drill into the specific holdings driving that exposure, grouped by account.
how to see which countries my portfolio is invested in
AI tool to map geographic exposure in investment portfolio / international diversification check
About this prompt
Your portfolio has geographic exposure whether you've thought about it or not. This prompt maps all of it, pulling your live holdings through country classification and rendering an interactive world map showing where your money is concentrated.
Prompt details
> **How to use this prompt:** Copy everything below this line into a new chat > that has the Truthifi MCP connected (`https://api.truthifi.com/mcp`), then follow > the instructions — by doing so you agree to the > [Truthifi Prompt Gallery Terms of Use](https://truthifi-connect.ai/prompt-gallery-terms). --- ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ TRUTHIFI PROMPT GALLERY -- USE RESPONSIBLY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ * NOT FINANCIAL ADVICE -- AI-generated output is for informational purposes only. * YOUR DATA -- retrieved live via MCP for this session only. Not stored, logged, or transmitted beyond this conversation. * SHARING -- outputs may contain real portfolio data. Review before sharing publicly or with third parties. * MODIFICATIONS -- altering this prompt removes Truthifi's intended safeguards. Any such use is at your own risk. * LIABILITY -- Truthifi accepts no liability for AI-generated outputs or any decisions made based on them. By running this prompt you agree to the Truthifi Prompt Gallery Terms. Full terms: https://truthifi-connect.ai/prompt-gallery-terms ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` # Country exposure map **Truthifi MCP Required** | MCP URL: `https://api.truthifi.com/mcp` | Version: 2.1.0 | 2026-06-03 --- ## GOAL Build a full-page, interactive country exposure map for the user's portfolio — an interactive capital heat cartography tool built on the Truthifi MCP and styled to the Truthifi design system. The output is a self-contained HTML file with all portfolio data baked in at generation time. The Refresh button re-runs this prompt in chat. No API or MCP calls are made from within the generated file. --- ## CONTEXT & BACKGROUND Investors with diversified portfolios — especially those holding ETFs — often have no clear picture of their actual geographic exposure. This tool surfaces that picture: a choropleth world map coloured by portfolio weight, with a drill-down panel showing the exact holdings (equities, ETFs, money market funds) that drive each country's allocation. Key data-quality realities this prompt handles: - ETFs and money market funds carry look-through country data — do not filter them out. - Cash (currency) balances have no country breakdown — their balance is attributed to the country in the composition but cannot be shown as holdings. Surface this as a notice. - Some linked accounts return no holdings for today (stale) — detect and surface a notice. - Multiple display names may alias to the same SVG polygon (e.g. Hong Kong -> China) — sum their values before colouring. --- ## TRUTHIFI MCP DEPENDENCIES **MCP server:** `https://api.truthifi.com/mcp` | Step | Tool | Purpose | Key Parameters | |------|------|---------|----------------| | 1A | `get_accounts` | Account list for dropdown and categorisation | `include: ["accountId","name","type","providerName","subType"]` | | 1B | `get_composition` | Country allocation percentages and values | `arrangeBy: ["Countries"]`, `dateRange: {from: TODAY, to: TODAY}`, `include: ["classificationType","holdings"]`, `accountIds: null` | | 1C | `get_dated_holdings` | Per-holding country breakdowns | `dateRange: {from: TODAY, to: TODAY}`, `include: ["accountId","symbol","securityName","securityType","balance","price","quantity","countries"]`, `accountIds: null` | **Parsing:** Extract data from `mcp_tool_result` content blocks by type. Never by position. Never with regex. **Null guard:** If 1B returns empty or errors, stop and show: "No portfolio data found. Check your Truthifi connections and try again." **Note:** No MCP or API calls are made from within the generated HTML file. All three calls above happen here in the chat, at generation time. The Refresh button re-runs this prompt in the conversation via `sendPrompt()`, or copies the re-run instruction to clipboard if `sendPrompt` is unavailable. --- ## USER-CAPTURED DATA REGISTRY No user input required. Runs entirely on live MCP data. --- ## DESIGN SYSTEM All colors declared as CSS custom properties in `:root`. No raw hex values outside `:root` — including in JavaScript. JS color values must reference CSS variables read at runtime via `getComputedStyle(document.documentElement).getPropertyValue('--var-name').trim()`, or be declared as named JS constants that mirror the `:root` values (with a comment cross-referencing the CSS variable). **Font pairing:** Merriweather (serif, display/headings — emotional weight and authority) + Manrope (sans-serif, all UI and data — legibility and precision). **External references** — load in this order in `<head>` before any other stylesheets: 1. `https://fonts.googleapis.com/css2?family=Merriweather:ital,wght@0,300;0,400;0,700;1,300&family=Manrope:wght@400;500;600;700;800&display=swap` 2. `https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap` ```css :root { --navy: #011827; --sub: #626F79; --muted: #9CAAB4; --bg: #F4F6F8; --surface: #FFFFFF; --border: #E3E8ED; --border-light: #EEF1F4; --blue: #0676C5; --blue-light: #E8F3FB; --blue-border: rgba(6,136,217,0.50); --green-bg: #E6F3E6; --green-dark: #3C843A; --amber: #D97706; --amber-light: #FEF3C7; --shadow-card: -4px 0 24px 0 rgba(177,0,124,0.12), 4px 0 24px 0 rgba(102,63,254,0.12), 0 -4px 24px 0 rgba(38,197,223,0.12), 4px 4px 24px 0 rgba(6,118,197,0.08); --shadow-sm: -2px 0 12px 0 rgba(177,0,124,0.06), 2px 0 12px 0 rgba(102,63,254,0.06), 0 -2px 12px 0 rgba(38,197,223,0.06), 2px 2px 12px 0 rgba(6,118,197,0.05); --gradient: linear-gradient(102deg,#FCEDFF 6.47%,#CBF4FF 108.86%); /* Spacing (8px grid) */ --s1: 8px; --s2: 16px; --s3: 24px; --s4: 32px; --s5: 40px; --s6: 48px; /* Radius */ --r-lg: 16px; --r-md: 12px; --r-sm: 8px; --r-pill: 999px; /* Typography */ --ff-serif: 'Merriweather', Georgia, serif; --ff-body: 'Manrope', system-ui, sans-serif; /* Map-specific */ --land: #C8D8E8; --land-stroke: #B0C4D8; --ocean-mid: #D8ECF8; --ocean-edge: #C4DCEE; --graticule: #B8D0E4; /* Heat ramp (JS must read these -- no hardcoded hex in script) */ --heat-lo: #E8F3FB; /* = --blue-light */ --heat-mid: #0676C5; /* = --blue */ --heat-hi: #011827; /* = --navy */ } @media (prefers-color-scheme: dark) { :root { --navy: #dce8f0; --sub: #7a94a3; --muted: #4a6070; --bg: #0a1520; --surface: #101e2c; --border: #1a2f42; --border-light: #152638; --blue-light: #071e30; --land: #1e3448; --land-stroke: #243d54; --ocean-mid: #0d2035; --ocean-edge: #091828; --graticule: #1a3045; --heat-lo: #071e30; --heat-mid: #0676C5; --heat-hi: #dce8f0; } } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html, body { height: 100%; } body { font-family: var(--ff-body); background: var(--bg); color: var(--navy); height: 100vh; display: flex; flex-direction: column; overflow: hidden; -webkit-font-smoothing: antialiased; } ``` **Typography:** | Element | Font | Weight | Size | Notes | |---------|------|--------|------|-------| | Page title | Merriweather | 700 | 22px | `letter-spacing: -0.02em` | | Panel hero number | Merriweather | 300 | 52px | `letter-spacing: -2px` | | Panel title / country name | Merriweather | 700 | 22px | `overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%;` | | Section labels | Manrope | 700 | 10px | uppercase, `letter-spacing: 0.09em` | | Body / meta | Manrope | 400-500 | 13-14px | | | Tickers | Manrope | 700 | 12px | | | Badge labels | Manrope | 700 | 10px | uppercase, `letter-spacing: 0.04em` | **Button components** (canonical spec — use these classes throughout): ```css .tf-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; height: 42px; padding: 0 16px; border-radius: var(--r-pill); cursor: pointer; font-family: var(--ff-body); font-size: 14px; font-weight: 800; letter-spacing: -0.25px; white-space: nowrap; transition: opacity 0.15s, box-shadow 0.15s; text-decoration: none; border: none; } .tf-btn:disabled { opacity: 0.45; cursor: not-allowed; pointer-events: none; } .tf-btn-primary { background: var(--blue); color: #fff; } .tf-btn-primary:hover { opacity: 0.88; } .tf-btn-outline { background: transparent; color: var(--blue); border: 1px solid var(--blue-border); } .tf-btn-outline:hover { background: var(--blue-light); } .tf-btn.sm { height: 28px; padding: 0 10px; font-size: 12px; } ``` **Badge component:** ```css .tf-badge { display: inline-flex; align-items: center; padding: 2px 7px; border-radius: var(--r-pill); font-family: var(--ff-body); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; } .badge-neutral { background: #F7F8F8; color: #626F79; } ``` **Icons** — Material Symbols Rounded: ```css .icon { font-family: 'Material Symbols Rounded'; font-style: normal; font-weight: 300; font-size: 20px; line-height: 1; display: inline-flex; align-items: center; justify-content: center; font-variation-settings: 'FILL' 0,'wght' 300,'GRAD' 0,'opsz' 20; user-select: none; flex-shrink: 0; } .icon.fill { font-variation-settings: 'FILL' 1,'wght' 400,'GRAD' 0,'opsz' 20; } .icon.sm { font-size: 16px; } .icon.lg { font-size: 24px; } ``` **Account type colours:** ```js // ACOL -- account avatar colours using Truthifi palette var ACOL = { Investing: { bg: "#E8F3FB", fg: "#0676C5", l: "I" }, Retirement: { bg: "#FFF3FB", fg: "#B1007C", l: "R" }, Banking: { bg: "#E6F3E6", fg: "#3C843A", l: "B" }, Credit: { bg: "#FFEBEE", fg: "#FB6561", l: "C" }, Unknown: { bg: "#F7F8F8", fg: "#626F79", l: "?" } }; ``` --- ## CONFIGURATION OPTIONS | Constant | Default | Purpose | |----------|---------|---------| | `MIN_ZOOM` | 1 | Minimum zoom level | | `MAX_ZOOM` | 10 | Maximum zoom level | | `SELECT_ZOOM` | 3.2 | Zoom level when a country is selected | | `BLUR_STD` | 2.2 | Glow layer Gaussian blur stdDeviation | | `HINT_FADE_MS` | 4000 | Hint pill fade-out delay (ms) | | `HINT_HIDE_MS` | 4900 | Hint pill display:none delay (ms) | | `ANIM_DURATION_MS` | 800 | Hero count-up animation duration (ms) | | `ROW_STAGGER_MS` | 45 | Country list row stagger animation delay (ms) | | `HEAT_GAMMA` | 0.42 | Gamma for heat ramp power curve | | `WP_MIN_ENTRIES` | 177 | Minimum required entries in WP path array (matches embedded static asset) | | `WP_MIN_PATH_LEN` | 20 | Minimum character length for any path `d` value | --- ## THE PROMPT **Step 0 -- Terms** Display before doing anything: > This prompt will access your Truthifi portfolio data. By proceeding you confirm you've read and agree to the [Truthifi Prompt Gallery Terms](https://truthifi-connect.ai/prompt-gallery-terms). > Type **yes** to proceed, **terms** to see key points, or **no** to cancel. - **yes** -> proceed to Step 1 - **terms** -> show the five bullet points from the banner above, then re-ask Step 0 (loop until yes or no) - **no** or anything other than yes/terms -> "Understood. No data has been accessed." Stop all execution immediately. --- **Step 1 -- Fetch data from Truthifi MCP** Make three MCP calls. Extract all data from `mcp_tool_result` content blocks by type -- never by position, never with regex. **1A. Accounts** ``` get_accounts include: ["accountId", "name", "type", "providerName", "subType"] ``` Store as: `var ACC = [{ id, name, provider, type }, ...]` **1B. Country composition** ``` get_composition arrangeBy: ["Countries"] dateRange: { from: TODAY, to: TODAY } include: ["classificationType", "holdings"] accountIds: null ``` Extract `output[0].holdings` -- an array of `{classification, percentage, value}`. Each `classification` is an ISO 2-letter country code. Skip entries where `classification === "Unknown"` or `classification === null`. Build two ISO2-keyed maps from this response: ```js // EXP_RAW and VAL_RAW are keyed by ISO2 code as returned by the MCP. // They are NOT used directly for map colouring -- see Step 2 for conversion. var EXP_RAW = {}; // { "US": 65.0, "GB": 8.5, ... } (percentage * 100) var VAL_RAW = {}; // { "US": 32500.00, "GB": 4250.00, ... } (dollar value) var TOTAL_VAL = 0; // derive as: sum(all values) / sum(all percentages) using largest entry ``` **Important:** these values are populated from the live MCP response at generation time. Do not use placeholder or example numbers. If 1B returns empty or errors: show "No portfolio data found. Check your Truthifi connections and try again." and stop. **1C. Holdings (two-phase fetch)** Phase 1 -- pre-screen funded accounts: ``` get_balance_history dateRange: { from: TODAY, to: TODAY } include: ["accountId", "endingBalance"] accountIds: null ``` Collect `FUNDED_IDS` = accountIds where `endingBalance > 0`. This prevents a single large account from exhausting the shared limit and crowding out others with zero rows. Phase 2 -- fetch holdings per funded account: For each id in `FUNDED_IDS`, call: ``` get_dated_holdings dateRange: { from: TODAY, to: TODAY } include: ["accountId","symbol","securityName","securityType", "balance","price","quantity","countries","maxAvailableDateRange"] accountIds: [id] limit: 200 ``` Merge all results. After fetching, assert completeness: ```js // Every funded account must have at least one holdings row, or surface a stale notice. FUNDED_IDS.forEach(function(id) { var hasRows = ALL_HLD.some(function(h) { return h.accountId === id; }); if (!hasRows) { STALE_IDS.push(id); } }); ``` **Data-quality checks on holdings:** - Accounts returning only `{ accountId, maxAvailableDateRange }` with no holdings for today -> mark as **STALE**. Collect their IDs: `var STALE_IDS = [/* from MCP response */];` - Accounts whose only holding is `securityType === "currency"` -> mark as **CASH_ONLY**: `var CASH_IDS = [/* from MCP response */];` - Both arrays are populated from the live MCP response -- they are never hardcoded. - Keep ETFs, equities, and money_market_funds. Filter out `securityType === "currency"` from the holdings display list, and filter out `balance <= 0`. Store non-currency holdings as: ```js var HLD = [{ accountId, symbol, name, securityType, balance, price, qty, countries }, ...]; ``` --- **Step 2 -- Prepare JavaScript data constants** **Convert ISO2 keys to display names** using `CM` (the ISO2->display map defined below). This conversion is required because `D2S` and the SVG path names use display names, not ISO2 codes. ```js // CM -- ISO2 code -> display name. Populated from your actual holdings' countries fields. // Include every ISO2 that appears in 1B or in any holding's countries breakdown. var CM = { "US": "United States", "GB": "United Kingdom", "JP": "Japan", "DE": "Germany", "CA": "Canada", "CN": "China", "FR": "France", "IN": "India", "CH": "Switzerland", "KR": "South Korea", "AU": "Australia", "NL": "Netherlands", "TW": "Taiwan", "HK": "Hong Kong", "MO": "Macao", "BR": "Brazil", "SG": "Singapore", "GR": "Greece", "TT": "Trinidad and Tobago", "SA": "Saudi Arabia", "HU": "Hungary", "EG": "Egypt", "RO": "Romania", "NG": "Nigeria", "OM": "Oman", "BH": "Bahrain", "EC": "Ecuador", "UA": "Ukraine", "LU": "Luxembourg", "IE": "Ireland", "MM": "Myanmar" // Add any additional ISO2 codes that appear in the MCP response }; // DISPLAY_TO_ISO2 -- reverse map, derived at boot from CM. Never hardcode separately. // Usage: DISPLAY_TO_ISO2[displayName] -> ISO2 code for holdings drill-down filtering. var DISPLAY_TO_ISO2 = {}; Object.keys(CM).forEach(function(iso) { DISPLAY_TO_ISO2[CM[iso]] = iso; }); // EXP -- display-name-keyed percentage map (converted from EXP_RAW via CM). // This is what the map colouring pipeline consumes. var EXP = {}; Object.keys(EXP_RAW).forEach(function(iso) { var dn = CM[iso]; if (dn) EXP[dn] = EXP_RAW[iso]; }); // VAL -- display-name-keyed value map (converted from VAL_RAW via CM). var VAL = {}; Object.keys(VAL_RAW).forEach(function(iso) { var dn = CM[iso]; if (dn) VAL[dn] = VAL_RAW[iso]; }); ``` **D2S** -- maps display name -> SVG path name. Contains ONLY entries where the two differ. Countries whose display name already matches their SVG polygon name need NO entry here -- the pipeline uses `D2S[dn] || dn` as the SVG lookup key, so self-mappings are both redundant and harmful (they cause zero-exposure countries to be coloured). ```js var D2S = { // Entries only where SVG name differs from display name. // "United States" is NOT listed here -- NAME_NORM already normalises // "United States of America" -> "United States" at path-generation time, // so WP_BY["United States"] is the correct lookup key. "Hong Kong": "China", // no separate polygon in ne_110m shapefile "Macao": "China" // no separate polygon in ne_110m shapefile // Add others as needed -- ONLY where SVG name != display name }; ``` **SUBN** -- jurisdictions aliased to a parent polygon (surface a notice in the drill-down): ```js var SUBN = { "Hong Kong": "China", "Macao": "China" }; ``` **Combined SVG exposure** -- aggregate aliased jurisdictions before colouring. `+=` accumulation is required; direct assignment `=` is a bug for aliased jurisdictions. ```js var svgExp = {}; Object.keys(EXP).forEach(function(dn) { var sn = D2S[dn] || dn; // use D2S only when name differs svgExp[sn] = (svgExp[sn] || 0) + EXP[dn]; }); ``` --- **Step 3 -- SVG world map paths (static asset -- copy verbatim)** The WP array below is a pre-generated static asset derived from the Natural Earth `ne_110m_admin_0_countries` dataset using equirectangular projection (`x = (lon+180)/360*1000`, `y = (90-lat)/180*500`) and RDP simplification. **Copy it exactly as written into the generated HTML.** Do not regenerate it, do not modify the path strings, and do not omit entries. All 177 entries use consistently double-quoted keys throughout. ViewBox: `"0 18 1000 392"` (trims polar space). `preserveAspectRatio="xMidYMid slice"`. **Path data validation (required before rendering):** ```js // Boot guard -- halt and show a visible error if WP is missing or truncated. // WP_MIN_ENTRIES is 177 to match the embedded static asset exactly. if (!WP || WP.length < WP_MIN_ENTRIES) { document.body.innerHTML = '<div style="padding:40px;font-family:sans-serif;color:#c0392b;">' + 'Map data error: WP array has ' + (WP ? WP.length : 0) + ' entries (expected ' + WP_MIN_ENTRIES + '). ' + 'Restore the complete WP static asset from the prompt.</div>'; throw new Error("WP incomplete -- halting execution"); } ``` **NAME_NORM** -- already applied during WP generation. Listed here for reference only; do not re-apply when rendering. ```js var NAME_NORM = { "United States of America": "United States", "Korea": "South Korea", "S. Sudan": "South Sudan", "Dominican Rep.": "Dominican Republic", "Bosnia and Herz.": "Bosnia and Herzegovina", "Czech Rep.": "Czech Republic", "Central African Rep.": "Central African Republic", "Eq. Guinea": "Equatorial Guinea", "W. Sahara": "Western Sahara", "Solomon Is.": "Solomon Islands", "Falkland Is.": "Falkland Islands", "Lao PDR": "Laos", "Timor-Leste": "East Timor" }; ``` **Static WP asset -- copy verbatim into the generated `<script>` block:** ```js // WP_BY -- name-keyed lookup built from WP for O(1) access var WP_BY = {}; WP.forEach(function(w) { WP_BY[w.n] = w; }); ``` (The full WP array follows the code quality section below as a fenced block to keep the step instructions readable.) SVG structure inside `<g id="cg">` (apply `cgRef.setAttribute("transform", "matrix(...)")` for zoom/pan -- see Step 11): ```html <g id="graticule"></g> <g id="glowLayer"></g> <g id="landLayer"></g> ``` Each path in `landLayer`: - `fill`: `heat(svgExp[n] || 0)` on load, class `cpath` for CSS transition - `stroke`: read from `C_LAND_STR` constant, `stroke-width: 0.4` - `mouseenter`: show tooltip, brighten stroke if exposed and not selected - `mouseleave`: restore stroke unless selected - `click`: call `selectCountry(displayName)` if not dragging --- **Step 4 -- Heat colour function** JS color constants must mirror CSS variables -- no raw hex in script: ```js // Mirror CSS variables -- reference comment ties each constant to its :root declaration var C_LAND = "#C8D8E8"; // var(--land) var C_HEAT_LO = "#E8F3FB"; // var(--heat-lo) var C_HEAT_MID = "#0676C5"; // var(--heat-mid) var C_HEAT_HI = "#011827"; // var(--heat-hi) var C_BLUE_SEL = "#0676C5"; // var(--blue) -- used for selection stroke // In dark mode, re-read from computed styles after page load: // var cs = getComputedStyle(document.documentElement); // C_LAND = cs.getPropertyValue('--land').trim(); // C_HEAT_LO = cs.getPropertyValue('--heat-lo').trim(); // etc. function hexToRgb(hex) { // Parse a 6-digit hex string to [r, g, b] array var r = parseInt(hex.slice(1,3),16); var g = parseInt(hex.slice(3,5),16); var b = parseInt(hex.slice(5,7),16); return [r, g, b]; } function heat(pct) { // Map a percentage to a colour on the blue heat ramp. // Returns the land colour for zero/null exposure. if (!pct || pct <= 0) return C_LAND; var lo = hexToRgb(C_HEAT_LO); var mid = hexToRgb(C_HEAT_MID); var hi = hexToRgb(C_HEAT_HI); var t = Math.pow(Math.min(pct / dynMax, 1), HEAT_GAMMA); var r, g, b; if (t < 0.5) { var k = t / 0.5; r = lo[0] + (mid[0] - lo[0]) * k; g = lo[1] + (mid[1] - lo[1]) * k; b = lo[2] + (mid[2] - lo[2]) * k; } else { var k2 = (t - 0.5) / 0.5; r = mid[0] + (hi[0] - mid[0]) * k2; g = mid[1] + (hi[1] - mid[1]) * k2; b = mid[2] + (hi[2] - mid[2]) * k2; } return "rgb(" + Math.round(r) + "," + Math.round(g) + "," + Math.round(b) + ")"; } function glowColor(pct) { // Blue glow with opacity scaled by exposure weight. Uses C_HEAT_MID rgb components. var mid = hexToRgb(C_HEAT_MID); var t = Math.pow(Math.min(pct / dynMax, 1), HEAT_GAMMA); return "rgba(" + mid[0] + "," + mid[1] + "," + mid[2] + "," + (0.08 + 0.22 * t).toFixed(2) + ")"; } ``` --- **Step 5 -- Glow / bloom layer** ```js // Render blurred duplicate paths behind landLayer for exposed countries. // glowLayer has filter="url(#bloom)" applied in HTML. // <filter id="bloom"><feGaussianBlur stdDeviation="BLUR_STD"/></filter> function renderGlow() { // Clear previous glow entries while (glowLayer.firstChild) { glowLayer.removeChild(glowLayer.firstChild); } Object.keys(svgExp).forEach(function(n) { var pct = svgExp[n]; if (pct <= 0 || !WP_BY[n]) return; var t = Math.pow(Math.min(pct / dynMax, 1), HEAT_GAMMA); var g = document.createElementNS("http://www.w3.org/2000/svg", "path"); g.setAttribute("d", WP_BY[n].d); g.setAttribute("fill", glowColor(pct)); g.setAttribute("opacity", (0.12 + 0.25 * t).toFixed(2)); g.setAttribute("stroke", "none"); glowLayer.appendChild(g); }); } ``` --- **Step 6 -- Layout** Full-viewport flex column, no page scroll: ``` +--------------------------------------------------------+ | TOPBAR (--surface, border-bottom --border) | | Row 1: [Country exposure map] [Refresh] [Report] | | Row 2: [All accounts v] | +--------------------------------------------------------+ | BODY (flex row, flex: 1, overflow: hidden) | | +---------------+ +--------------------------------+ | | | PANEL 340px | | MAP (flex:1, ocean gradient) | | | | --surface bg | | graticule / glow / land | | | | scrollable | | vignette + grain overlays | | | | panel header | | [+][-] zoom top-right | | | | hero block | | legend bot-left | | | | tabs | | tooltip (glass) | | | | list/drill | | hint pill bot-right | | | +---------------+ | status chip top-left | | | +--------------------------------+ | +--------------------------------------------------------+ [Log in to unlock more features ->] <- fixed, body-level ``` **Topbar** (`background: var(--surface)`, `border-bottom: 1px solid var(--border)`, `box-shadow: var(--shadow-sm)`, `padding: 16px 20px 12px`): Row 1 -- `display: flex; align-items: center; justify-content: space-between`: - Left: "Country exposure map" -- Merriweather 700 22px `var(--navy)` `letter-spacing: -0.02em` - Right: two buttons -- **Refresh** (`.tf-btn .tf-btn-primary`, `refresh` icon left) and **Report a problem** (`.tf-btn .tf-btn-outline`, links to `https://app.truthifi.com/message-center`) Row 2 -- `display: flex; align-items: center; gap: 8px; margin-top: 10px`: - **Account dropdown** -- `<select id="account-select">`, pill-shaped (`border-radius: var(--r-pill)`), 36px tall, `border: 1px solid var(--border)`, Manrope 500 14px. First option: "All accounts". Then each account as `Name (...last8ofId)`. No logotype, search pill, or avatar. **Body** -- `display: flex; flex-direction: row; flex: 1; overflow: hidden; min-height: 0;` **Panel** -- `width: 340px; flex-shrink: 0; background: var(--surface); box-shadow: var(--shadow-sm); display: flex; flex-direction: column; overflow: hidden;` **Map container** -- `flex: 1; position: relative; overflow: hidden;` - Ocean: `radialGradient` from `var(--ocean-mid)` (centre) to `var(--ocean-edge)` (edge) - Vignette: `radial-gradient` soft overlay, `pointer-events: none` - Grain: SVG `feTurbulence` fractalNoise overlay, `opacity: 0.03`, `pointer-events: none` **Map overlays** (all `position: absolute`): - Tooltip: `var(--surface)` bg, `box-shadow: var(--shadow-sm)`, `border: 1px solid var(--border)`, `border-radius: var(--r-md)`, `pointer-events: none`, `position: fixed` (follows cursor) - Legend: `var(--surface)` bg, `box-shadow: var(--shadow-sm)`, `border-radius: var(--r-md)`, bottom-left -- gradient bar `var(--heat-lo)` -> `var(--heat-mid)` -> `var(--heat-hi)`, tick labels Manrope 400 10px `var(--muted)`. Update `dynMax`, mid tick, max tick on every EXP change. - Zoom buttons: `var(--surface)` bg, `var(--shadow-sm)`, `border-radius: var(--r-sm)`, top-right -- `.icon` glyphs `add` and `remove` - Status chip: `var(--surface)` bg, `var(--shadow-sm)`, top-left, blue spinner `border-top-color: var(--blue)`. Default: `display: none`. Shown only during active re-fetch. - Hint pill: `var(--surface)` bg, `var(--shadow-sm)`, pulsing `var(--blue)` dot. Fades out at `HINT_FADE_MS`, `display: none` at `HINT_HIDE_MS`. --- **Step 7 -- Panel states** **Default state -- header:** - Title: scope label (Merriweather 700 22px `var(--navy)`, with `overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%;`) - Sub: "MAY YYYY - LIVE" (Manrope 500 11px uppercase tracked `var(--muted)`) - No back button, no eyebrow **Default state -- hero block:** - Merriweather 300 52px dominant country percentage, count-up animation on load - Below: "in [Country]" -- Manrope 500 14px `var(--blue)` - Below: "[N] markets - $[X] tracked" -- Manrope 400 12px `var(--muted)` **Drill-down state -- header:** - Eyebrow: "COUNTRY EXPOSURE" -- Manrope 700 10px uppercase tracked `var(--blue)` - Title: country name (same overflow/ellipsis rules as default title) - Sub: same date/live sub - Back button: `.tf-btn .tf-btn-outline` -- `<span class="icon sm">arrow_back</span><span>All markets</span>` - Hero block: hidden --- **Step 8 -- Country list (default panel)** Below hero block. Each row: ``` [01] [dot] [Name] [subnational badge?] [===bar===] [X.X%] ``` - Left accent bar on hover: `2px solid var(--blue)` - Dot: 9px `border-radius: 2px`, coloured by `heat(pct)`, `box-shadow: 0 0 8px -1px currentColor` - Bar: `background: var(--border-light)`, fill `var(--blue)`, relative to top country. Width = `Math.max(0, Math.min(100, (pct / topPct) * 100))%` -- always guard for zero topPct. - Numbers/percentages: Manrope 700 11-13px `var(--muted)` - Country name: Manrope 600 13px `var(--navy)` - **By value** tab: show dollar value from `VAL` instead of bar + % - Rows animate in with staggered delay: `animation-delay: N * ROW_STAGGER_MS + 'ms'` - Hover: `background: var(--blue-light)` - Click: `selectCountry(displayName)` - Sub-national badge: `.tf-badge .badge-neutral` for countries in `SUBN` Build rows using `createElement -> textContent/setAttribute -> addEventListener -> appendChild`. Never use `innerHTML` string concatenation for rows derived from MCP data. --- **Step 9 -- Drill-down panel (country selected)** **Summary strip** (`border: 1px solid var(--border-light)`, `border-radius: var(--r-md)`, `background: var(--bg)`): ``` EXPOSURE MKT VALUE DIRECT X.X% $X.XK N ``` - Stat labels: Manrope 700 9px uppercase tracked `var(--muted)` - Exposure: Merriweather 400 22px `var(--blue)` - Other values: Merriweather 400 22px `var(--navy)` **Data-quality notices** (left-border info card): - `background: var(--blue-light)`, `border: 1px solid var(--blue-border)`, `border-left: 3px solid var(--blue)`, `border-radius: var(--r-sm)`, `padding: 11px 13px` - Text: Manrope 500 12px `var(--navy)` - **Cash notice**: "Cash-only accounts ($X USD) have no investable security breakdown -- their balance is attributed to [country] in the composition but cannot be shown as holdings." - **Stale notice**: "Linked accounts [names] last synced [date] -- holdings data is one day stale and excluded from today's query." - **Sub-national notice**: explains the jurisdiction is shown on its parent polygon. **Holdings filter:** use `DISPLAY_TO_ISO2[selectedCountry]` to get the ISO2 code, then filter `HLD` for entries where `h.countries && h.countries[iso2] > 0`. If `DISPLAY_TO_ISO2[selectedCountry]` is undefined, log a warning and show an info notice ("Holdings breakdown unavailable for this jurisdiction") rather than rendering null values. **Direct holdings** -- filter and render: - Group by `accountId`, ordered by account total value descending - Before rendering each group, guard: `var acct = ACC.find(function(a) { return a.id === h.accountId; })` If `acct` is undefined, skip that group entirely -- never render raw IDs or "Unknown" labels. - Account group: `border: 1px solid var(--border-light)`, `border-radius: var(--r-md)`, `overflow: hidden`, `background: var(--surface)` - Account header: coloured avatar using `ACOL` (Manrope 700 12px), account name Manrope 600 13px, meta Manrope 400 10px, total value Manrope 600 13px - Holding row: `border-top: 1px solid var(--border-light)`, `padding: 10px 14px` - Ticker: Manrope 700 11px `var(--blue)`, width 46px - Security name: Manrope 500 12px `var(--navy)` -- set via `textContent`, never `innerHTML` - Meta (price/qty): Manrope 400 10px `var(--muted)` - Value + "X% in [Country]": Manrope 600 12px `var(--blue)` right-aligned ETFs and money market funds are included -- not just equities. **If no direct holdings** (pure look-through): info card `var(--blue-light)` explaining this, then all investable holdings as context labelled "look-through". --- **Step 10 -- Holdings tab** Same account-group layout showing ALL investable holdings (ETFs, equities, money market funds -- not currency) across all accounts. Show quantity and price per share. Build rows with `createElement -> textContent -> appendChild` -- no `innerHTML` for dynamic data. --- **Step 11 -- Zoom / pan** ```js var Z = 1, OX = 0, OY = 0; var CX = 500, CY = 214; // viewBox centre for trimmed 0 18 1000 392 space var drag = false, dragging = false; function applyXform() { // Apply zoom/pan as SVG transform attribute -- must use setAttribute, not style.transform. // style.transform is unreliable on SVG <g> elements across browsers. cg.setAttribute("transform", "matrix(" + Z + ",0,0," + Z + "," + OX + "," + OY + ")"); } function setSmooth(on) { // Toggle CSS transition on #cg for button zoom (on) vs drag/wheel (off) cg.style.transition = on ? "transform 0.6s cubic-bezier(0.22,0.61,0.36,1)" : "none"; } function btnZoom(f) { // Zoom in/out from centre, clamped to [MIN_ZOOM, MAX_ZOOM] setSmooth(true); var nz = Math.min(Math.max(Z * f, MIN_ZOOM), MAX_ZOOM); OX = CX - (CX - OX) / Z * nz; OY = CY - (CY - OY) / Z * nz; Z = nz; applyXform(); } function zoomToDataPt(dx, dy, targetZ) { // Zoom to a specific data point (country centroid) at targetZ setSmooth(true); var nz = Math.min(Math.max(targetZ, MIN_ZOOM), MAX_ZOOM); OX = CX - dx * nz; OY = CY - dy * nz; Z = nz; applyXform(); } ``` Drag: set `dragging = true` after >3px movement. Check `if (dragging) return;` at top of click handlers. Reset `dragging = false` inside `setTimeout` in `mouseup` handler. Wheel zoom: zoom around cursor position. Call `setSmooth(false)` before wheel zoom. Country selection zoom: `zoomToDataPt(wp.cx, wp.cy, SELECT_ZOOM)`. Selection stroke: `stroke: var(--blue)` (read from CSS), `stroke-width: 1.2`. --- **Step 12 -- Account scope and Refresh** ```js // Populate account dropdown from ACC (function() { var sel = document.getElementById("account-select"); ACC.forEach(function(a) { var o = document.createElement("option"); o.value = a.id; o.textContent = a.name + " (..." + a.id.slice(-8) + ")"; sel.appendChild(o); }); sel.addEventListener("change", function() { var label = sel.value ? (ACC.find(function(a) { return a.id === sel.value; }) || { name: "Account" }).name : "All accounts"; updatePanelTitle(label); // Scope filtering re-renders from baked-in HLD data -- no MCP call needed applyLocalScope(sel.value || null); }); })(); ``` **Refresh button** -- re-runs this prompt in the conversation. No API or MCP calls from the file. ```js document.getElementById("refresh-btn").addEventListener("click", function() { var msg = "Re-run the Truthifi country exposure map prompt with fresh data."; if (typeof sendPrompt === "function") { sendPrompt(msg); } else { // Fallback: copy to clipboard for agents where sendPrompt is unavailable navigator.clipboard.writeText(msg).then(function() { var btn = document.getElementById("refresh-btn"); btn.textContent = "Copied -- paste in chat"; setTimeout(function() { btn.textContent = "Refresh"; }, 3000); }); } }); ``` `applyLocalScope(accountId)` -- filters `HLD` and re-derives `EXP`/`VAL`/`svgExp` from the baked-in data for the selected account, then calls `updateMap()`, `renderHero()`, `renderCountries()`. This is a pure client-side filter -- no MCP call. --- **Step 13 -- selectCountry / deselectCountry** ```js var selectedCountry = null; function selectCountry(displayName) { // Guard against drag-clicks if (dragging) return; selectedCountry = displayName; var wp = WP_BY[D2S[displayName] || displayName]; // 1. Zoom to country centroid if (wp) { zoomToDataPt(wp.cx, wp.cy, SELECT_ZOOM); } // 2. Apply selection stroke to SVG path unhighlightAll(); if (wp) { var el = document.getElementById("path-" + (D2S[displayName] || displayName).replace(/\s/g, "_")); if (el) { el.setAttribute("stroke", C_BLUE_SEL); el.setAttribute("stroke-width", "1.2"); } } // 3. Highlight and scroll the matching panel row into view var rows = document.querySelectorAll(".country-row"); rows.forEach(function(row) { if (row.dataset.country === displayName) { row.classList.add("highlighted"); row.scrollIntoView({ behavior: "smooth", block: "nearest" }); } else { row.classList.remove("highlighted"); } }); // 4. Render drill-down panel renderDrillDown(displayName); } function deselectCountry() { // Atomically reset all selection state selectedCountry = null; // 1. Reset SVG path strokes unhighlightAll(); // 2. Reset zoom to default setSmooth(true); Z = MIN_ZOOM; OX = 0; OY = 0; applyXform(); // 3. Clear panel row highlight document.querySelectorAll(".country-row").forEach(function(row) { row.classList.remove("highlighted"); }); // 4. Re-render default panel renderHero(); renderCountries(); } function unhighlightAll() { // Reset all path strokes to default land-stroke colour document.querySelectorAll(".cpath").forEach(function(el) { el.setAttribute("stroke", C_LAND_STROKE); el.setAttribute("stroke-width", "0.4"); }); } ``` --- **Step 14 -- Tabs** Two tabs below hero block: **Exposure** and **Holdings**. ```css .tabs { display: flex; gap: 2px; padding: 0 16px; flex-shrink: 0; border-bottom: 1px solid var(--border-light); } .tab { flex: 1; padding: 12px 0; text-align: center; font-family: var(--ff-body); font-size: 11px; font-weight: 700; color: var(--muted); cursor: pointer; border-bottom: 2px solid transparent; text-transform: uppercase; letter-spacing: 0.07em; transition: color 0.2s, border-color 0.2s; } .tab:hover { color: var(--sub); } .tab.active { color: var(--blue); border-bottom-color: var(--blue); } ``` Within Exposure tab: a secondary **%** / **$** toggle chip (`.tf-btn .tf-btn-outline .sm`) switches between percentage and dollar value views. --- **Step 15 -- Boot sequence** ```js // Run after WP boot guard passes (see Step 3) document.getElementById("ph-title").textContent = "All accounts"; document.getElementById("ph-sub").textContent = new Date().toLocaleString('default', { month: 'short' }).toUpperCase() + " " + new Date().getFullYear() + " - LIVE"; updateMap(); renderHero(); renderCountries(); // Fade out hint pill setTimeout(function() { hint.classList.add("gone"); }, HINT_FADE_MS); setTimeout(function() { hint.style.display = "none"; }, HINT_HIDE_MS); ``` --- **Step 16 -- CTA button** Place as a **direct child of `<body>`**, outside any overflow-hidden container, so it is never clipped: ```html <a id="cta-btn" href="https://app.truthifi.com/login" target="_blank" rel="noopener"> Log in to unlock more features </a> ``` ```css #cta-btn { position: fixed; bottom: 28px; right: 28px; z-index: 100; display: inline-flex; height: 48px; padding: 0 32px; align-items: center; justify-content: center; border-radius: var(--r-pill); background: linear-gradient(112deg, #8C389E -3.89%, #4E66BD 52.5%, #0CACD5 108.89%); box-shadow: var(--shadow-card); font-family: var(--ff-body); font-size: 14px; font-weight: 800; letter-spacing: -0.25px; color: #fff; text-decoration: none; white-space: nowrap; transition: transform 0.2s cubic-bezier(.22,.61,.36,1), box-shadow 0.2s cubic-bezier(.22,.61,.36,1); } #cta-btn:hover { transform: translateY(-3px) scale(1.02); box-shadow: -6px 0 32px 0 rgba(177,0,124,0.22), 6px 0 32px 0 rgba(102,63,254,0.22), 0 -6px 32px 0 rgba(38,197,223,0.22), 6px 8px 32px 0 rgba(6,118,197,0.18); } #cta-btn:active { transform: translateY(-1px) scale(0.99); } ``` --- **Step 17 -- Code quality requirements** - CSS in labeled `<style>` block in `<head>`. JS in labeled `<script>` block before `</body>`. - All variables `const` or `let` where possible -- `var` only where hoisting is genuinely needed. - No `localStorage`, `sessionStorage`, `eval()`, or external analytics. - No `innerHTML` for dynamic MCP-derived content. All security-critical values (account names, country names, ticker symbols, security names) set via `textContent`. Static chrome that uses `innerHTML` must apply an `esc()` helper to all dynamic values. - DRY: extract repeated logic into named functions. Comment every function with a plain-English description of what it does and what it returns. - All JS comments use only printable ASCII characters (0x20-0x7E, plus tab and newline). No Unicode arrows, multiplication signs, em-dashes, or decorative separators in `<script>`. - Before finalising the `<script>` block, verify that `{` and `}` counts are equal, `(` and `)` counts are equal, and `?` and `:` counts are equal in ternary expressions. Unbalanced ternaries are a common source of `Unexpected token ':'` parse errors. - If any code block is revised or simplified during generation, fully delete all earlier versions of that block before finalising. Multiple versions of the same assignment or expression left inline (e.g. three successive `x.textContent = ...` lines that were iterative rewrites) cause both logic errors and potential syntax errors. - All object literal keys in large data arrays (`WP`, `ACC`, `HLD`) must use consistently double-quoted keys (`"key": value` not `key: value`). The WP static asset below already uses double-quoted keys throughout -- do not alter them. --- **Static WP asset** -- copy this block verbatim into the generated `<script>`. Do not regenerate, modify path strings, or omit entries. 177 entries, all keys double-quoted. ```js var WP = [ {"n":"Fiji","iso":"FJ","cx":994.5,"cy":299.3,"d":"M 994.8,298.6 L 996.0,300.4 L 992.7,300.5 L 994.8,298.6 Z"}, {"n":"Tanzania","iso":"TZ","cx":595.3,"cy":268.2,"d":"M 594.2,252.6 L 608.9,263.0 L 607.6,266.4 L 609.6,269.0 L 608.9,273.6 L 612.0,278.7 L 609.8,280.3 L 601.4,282.6 L 596.0,282.0 L 593.7,276.2 L 585.4,273.2 L 582.3,268.1 L 581.5,262.5 L 585.4,259.3 L 584.5,253.2 L 594.2,252.6 Z"}, {"n":"Western Sahara","iso":"EH","cx":466.6,"cy":181.2,"d":"M 475.9,173.2 L 475.9,178.1 L 466.8,178.0 L 466.8,185.1 L 464.2,185.3 L 464.1,190.8 L 452.6,191.7 L 459.0,190.3 L 468.4,175.3 L 475.6,174.7 L 475.9,173.2 Z"}, {"n":"Canada","iso":"CA","cx":247.0,"cy":93.2,"d":"M 158.8,113.9 L 146.0,108.8 L 144.9,104.6 L 137.5,99.2 L 138.9,94.7 L 134.1,92.9 L 123.7,83.9 L 118.2,86.4 L 113.8,83.3 L 108.3,82.5 L 108.4,56.4 L 120.8,58.6 L 139.5,55.0 L 141.4,56.2 L 144.1,54.2 L 150.7,57.0 L 154.4,55.1 L 154.8,57.2 L 162.6,56.1 L 179.9,58.6 L 183.6,60.0 L 179.7,61.4 L 184.7,62.0 L 194.6,61.2 L 197.6,62.8 L 200.6,61.4 L 197.7,60.2 L 199.5,59.3 L 205.1,58.9 L 218.2,62.1 L 226.5,61.7 L 226.2,60.0 L 228.7,59.5 L 233.0,60.4 L 233.0,63.1 L 238.2,58.1 L 232.0,55.3 L 232.2,52.2 L 235.5,50.2 L 242.0,51.9 L 245.8,55.0 L 243.3,56.4 L 248.5,57.0 L 248.5,59.8 L 252.2,57.6 L 255.5,59.4 L 254.7,61.5 L 257.4,63.3 L 262.3,58.9 L 262.4,55.9 L 270.5,56.5 L 274.2,57.9 L 272.3,60.7 L 273.9,63.6 L 268.5,65.5 L 261.8,65.1 L 257.4,70.1 L 248.0,73.3 L 247.9,75.1 L 244.6,75.5 L 238.2,80.8 L 237.0,86.3 L 241.1,86.7 L 243.6,91.4 L 247.5,90.9 L 263.9,96.4 L 271.5,96.8 L 271.9,102.0 L 278.0,107.8 L 281.7,104.0 L 278.3,98.1 L 287.4,93.0 L 281.9,86.7 L 285.2,83.7 L 283.0,76.9 L 294.9,76.5 L 301.7,80.2 L 306.7,80.4 L 307.5,86.2 L 312.1,88.3 L 320.6,82.4 L 329.5,91.8 L 328.3,93.5 L 340.7,98.3 L 345.1,102.0 L 345.3,105.1 L 333.2,110.4 L 315.6,110.5 L 302.5,119.9 L 309.3,115.8 L 319.3,113.2 L 321.7,114.6 L 319.1,116.5 L 320.9,121.6 L 329.1,122.5 L 331.9,119.4 L 333.9,122.4 L 318.4,129.0 L 316.3,128.8 L 316.2,126.5 L 321.0,124.2 L 313.5,124.6 L 311.7,123.0 L 311.7,119.3 L 307.7,118.2 L 301.4,125.0 L 292.0,125.0 L 286.6,128.8 L 281.3,128.8 L 280.7,130.9 L 271.0,134.2 L 269.1,133.4 L 271.8,129.0 L 270.7,124.0 L 254.5,115.8 L 245.4,116.3 L 238.0,114.8 L 236.6,112.8 L 158.8,113.9 Z"}, {"n":"United States","iso":"US","cx":249.0,"cy":143.7,"d":"M 158.8,113.9 L 236.6,112.8 L 238.0,114.8 L 245.4,116.3 L 254.5,115.8 L 270.7,124.0 L 271.8,129.0 L 269.1,133.1 L 270.3,134.2 L 280.7,130.9 L 281.3,128.8 L 286.6,128.8 L 292.0,125.0 L 301.4,125.0 L 307.7,118.2 L 311.7,119.3 L 311.7,123.0 L 314.0,125.5 L 305.2,128.7 L 303.3,132.4 L 305.7,134.3 L 295.2,136.3 L 300.2,136.3 L 294.6,136.8 L 291.9,141.8 L 290.2,140.3 L 291.5,143.3 L 289.1,146.6 L 287.9,141.3 L 288.0,144.2 L 286.1,143.8 L 288.1,144.7 L 289.6,151.2 L 274.1,162.7 L 277.6,175.3 L 276.7,180.0 L 273.0,178.1 L 267.5,166.8 L 263.6,167.7 L 260.0,165.6 L 251.1,166.2 L 251.6,169.0 L 237.0,168.1 L 230.2,172.7 L 229.1,178.2 L 224.9,176.8 L 219.6,168.4 L 215.3,167.3 L 213.6,169.5 L 211.3,168.7 L 204.1,161.8 L 191.6,163.0 L 181.3,159.1 L 174.6,159.6 L 170.8,155.5 L 164.9,153.9 L 154.4,138.0 L 155.8,123.5 L 153.6,116.2 L 158.0,116.6 L 159.5,119.2 L 158.8,113.9 Z"}, {"n":"Kazakhstan","iso":"KZ","cx":681.3,"cy":118.7,"d":"M 742.7,113.3 L 738.2,115.4 L 736.6,119.4 L 731.1,118.5 L 729.1,123.5 L 722.1,125.2 L 724.6,130.1 L 722.9,132.4 L 706.1,129.7 L 704.1,131.9 L 697.7,131.4 L 690.6,137.0 L 685.3,135.6 L 683.6,130.6 L 680.3,128.5 L 672.3,129.2 L 662.5,123.4 L 655.4,125.0 L 655.5,135.3 L 650.2,132.4 L 645.8,133.9 L 645.8,131.1 L 642.6,130.2 L 639.7,126.1 L 647.3,124.3 L 647.3,119.9 L 636.4,121.1 L 633.5,117.4 L 629.1,115.6 L 632.1,109.8 L 634.9,111.5 L 635.3,109.4 L 641.0,106.4 L 654.8,109.4 L 670.4,108.9 L 671.1,107.6 L 666.6,105.7 L 671.4,102.8 L 669.4,100.9 L 670.7,100.0 L 691.9,96.2 L 696.8,96.8 L 697.7,99.6 L 704.2,99.9 L 704.0,101.4 L 713.6,98.6 L 712.6,99.5 L 722.3,108.7 L 723.8,107.3 L 731.6,108.1 L 742.7,113.3 Z"}, {"n":"Uzbekistan","iso":"UZ","cx":681.4,"cy":135.7,"d":"M 655.5,135.3 L 655.4,125.0 L 662.5,123.4 L 672.3,129.2 L 680.3,128.5 L 683.6,130.6 L 685.3,135.6 L 689.6,137.0 L 697.1,132.6 L 695.6,134.7 L 702.9,136.5 L 699.4,138.5 L 696.1,138.3 L 696.3,136.2 L 692.6,136.9 L 690.4,140.2 L 688.1,140.1 L 690.0,144.0 L 688.4,146.8 L 684.8,146.2 L 684.9,144.5 L 678.3,142.0 L 671.9,135.9 L 668.0,135.5 L 666.6,132.7 L 662.9,131.2 L 658.1,133.8 L 658.6,135.2 L 655.5,135.3 Z"}, {"n":"Papua New Guinea","iso":"PG","cx":906.1,"cy":271.6,"d":"M 891.7,257.2 L 901.6,260.7 L 905.5,265.2 L 910.1,266.9 L 908.9,270.5 L 918.6,279.4 L 910.9,278.1 L 905.7,272.4 L 902.1,271.2 L 896.2,275.9 L 891.8,275.3 L 891.7,257.2 Z"}, {"n":"Indonesia","iso":"ID","cx":837.8,"cy":255.7,"d":"M 841.5,247.6 L 847.9,246.1 L 843.6,249.3 L 833.8,249.3 L 833.4,251.4 L 835.9,253.9 L 842.6,251.7 L 837.5,255.3 L 842.1,264.8 L 839.5,264.7 L 840.9,262.4 L 837.5,262.7 L 836.0,257.3 L 834.2,258.1 L 834.5,265.4 L 832.8,265.8 L 831.9,259.7 L 829.9,257.8 L 832.8,249.6 L 835.8,246.4 L 841.5,247.6 Z"}, {"n":"Argentina","iso":"AR","cx":319.2,"cy":352.8,"d":"M 339.9,333.9 L 337.5,345.6 L 341.0,348.0 L 342.3,352.5 L 339.6,356.1 L 335.5,357.6 L 326.8,357.9 L 327.4,363.0 L 325.7,364.0 L 319.1,364.1 L 319.5,366.8 L 323.7,368.2 L 318.9,370.8 L 317.9,375.1 L 313.1,376.5 L 312.3,378.6 L 317.7,381.2 L 307.9,390.9 L 310.7,395.4 L 300.2,394.5 L 299.1,390.8 L 296.3,389.9 L 296.1,387.0 L 299.1,384.0 L 302.2,374.4 L 299.6,367.4 L 301.6,358.1 L 303.3,357.1 L 302.4,351.8 L 306.1,345.0 L 304.1,337.1 L 306.5,329.1 L 310.3,324.7 L 310.0,318.1 L 313.0,316.7 L 315.9,310.6 L 321.2,313.3 L 322.3,311.1 L 325.4,311.2 L 331.0,316.3 L 339.5,319.9 L 337.2,325.3 L 345.3,326.1 L 349.6,321.0 L 351.0,324.8 L 339.9,333.9 Z"}, {"n":"Chile","iso":"CL","cx":301.5,"cy":355.9,"d":"M 306.7,298.8 L 309.9,303.9 L 309.0,306.6 L 311.6,313.5 L 313.9,313.9 L 313.0,316.7 L 310.0,318.1 L 310.3,324.7 L 306.5,329.1 L 304.1,337.1 L 306.1,345.0 L 302.4,351.8 L 303.3,357.1 L 301.6,358.1 L 299.6,367.4 L 302.2,374.4 L 299.1,384.0 L 296.1,387.0 L 296.3,389.9 L 299.1,390.8 L 300.2,394.5 L 309.5,395.3 L 303.2,396.9 L 301.6,399.6 L 291.8,395.2 L 290.0,385.2 L 294.1,380.4 L 289.9,379.6 L 292.5,377.1 L 293.5,372.5 L 296.6,373.5 L 298.0,367.7 L 296.1,367.0 L 295.3,370.5 L 293.5,370.1 L 296.6,359.1 L 295.6,353.2 L 301.6,340.1 L 301.4,330.2 L 305.3,309.4 L 304.5,301.0 L 306.7,298.8 Z"}, {"n":"DR Congo","iso":"CD","cx":564.2,"cy":260.6,"d":"M 581.5,262.5 L 585.4,273.2 L 579.8,273.7 L 578.8,282.8 L 582.3,283.8 L 582.5,286.8 L 575.5,282.2 L 561.5,280.8 L 560.4,270.3 L 555.8,269.3 L 552.8,272.2 L 548.5,272.4 L 545.4,266.3 L 533.8,266.1 L 537.8,262.5 L 540.5,263.8 L 544.5,259.8 L 545.6,254.8 L 549.0,251.2 L 551.5,238.3 L 554.1,236.0 L 562.2,238.8 L 563.4,236.9 L 571.3,235.4 L 576.0,235.5 L 579.0,238.1 L 582.5,237.2 L 586.6,243.9 L 583.0,248.3 L 580.6,257.9 L 581.5,262.5 Z"}, {"n":"Somalia","iso":"SO","cx":630.3,"cy":231.8,"d":"M 615.5,254.7 L 613.9,252.4 L 613.8,242.3 L 617.0,238.2 L 624.9,236.1 L 635.9,223.7 L 636.0,218.3 L 642.0,216.6 L 640.4,224.4 L 635.0,235.2 L 615.5,254.7 Z"}, {"n":"Kenya","iso":"KE","cx":605.1,"cy":246.9,"d":"M 608.9,263.0 L 594.2,252.6 L 597.3,244.7 L 594.5,238.2 L 598.1,234.7 L 605.9,240.0 L 616.3,239.1 L 613.8,242.3 L 613.9,252.4 L 615.5,254.7 L 611.8,257.1 L 608.9,263.0 Z"}, {"n":"Sudan","iso":"SD","cx":581.5,"cy":214.4,"d":"M 568.2,227.1 L 565.2,225.1 L 565.4,222.0 L 560.9,215.0 L 564.0,206.4 L 566.4,206.6 L 566.2,194.4 L 569.4,194.4 L 569.4,188.9 L 602.4,188.9 L 604.1,198.3 L 606.7,200.0 L 602.4,202.9 L 600.8,212.3 L 595.2,220.5 L 594.4,225.9 L 591.0,216.0 L 589.1,216.7 L 590.0,219.2 L 587.1,222.7 L 583.3,221.4 L 580.5,223.9 L 574.3,223.7 L 571.6,221.1 L 569.6,221.5 L 566.4,226.1 L 568.2,227.1 Z"}, {"n":"Chad","iso":"TD","cx":550.0,"cy":213.9,"d":"M 566.2,195.6 L 566.4,206.6 L 564.0,206.4 L 560.9,215.0 L 563.5,219.0 L 558.3,223.7 L 552.3,225.0 L 549.9,228.1 L 542.4,229.4 L 541.6,225.6 L 538.8,223.5 L 543.0,222.3 L 540.5,213.0 L 538.8,212.9 L 537.6,210.1 L 538.8,206.4 L 542.4,203.8 L 544.2,193.4 L 541.3,186.5 L 544.1,185.0 L 566.2,195.6 Z"}, {"n":"Haiti","iso":"HT","cx":298.0,"cy":197.7,"d":"M 300.8,195.2 L 300.8,199.9 L 293.2,199.0 L 299.1,198.1 L 296.7,194.7 L 300.8,195.2 Z"}, {"n":"Dominican Republic","iso":"DO","cx":304.2,"cy":198.0,"d":"M 300.8,199.9 L 301.1,194.8 L 310.2,198.3 L 303.7,198.8 L 301.7,201.1 L 300.8,199.9 Z"}, {"n":"Russia","iso":"RU","cx":752.4,"cy":85.8,"d":"M 636.4,121.1 L 629.7,126.1 L 635.0,133.9 L 632.8,135.7 L 626.3,131.9 L 611.0,129.3 L 601.9,124.3 L 606.2,121.6 L 604.6,120.5 L 608.7,119.3 L 606.3,117.9 L 610.4,116.9 L 611.3,112.2 L 598.2,109.5 L 593.8,104.6 L 588.3,105.3 L 587.0,102.6 L 590.8,101.8 L 585.4,97.7 L 585.8,95.7 L 578.3,94.0 L 575.8,90.3 L 576.2,86.9 L 580.9,83.3 L 578.0,81.9 L 587.5,75.4 L 583.4,73.5 L 584.6,71.7 L 582.1,69.6 L 583.9,67.2 L 580.7,64.0 L 583.3,61.9 L 579.0,60.1 L 579.4,58.2 L 589.3,55.8 L 614.1,62.6 L 614.2,64.5 L 606.6,66.7 L 592.2,64.9 L 596.7,66.9 L 597.1,71.1 L 602.8,72.6 L 601.5,70.1 L 603.3,69.0 L 610.0,70.8 L 612.3,70.1 L 610.5,68.1 L 616.9,65.3 L 622.1,66.5 L 623.7,64.6 L 620.7,59.5 L 628.5,60.4 L 630.1,62.0 L 626.5,62.3 L 626.6,63.9 L 628.7,64.8 L 649.2,58.7 L 651.3,58.9 L 648.6,60.6 L 663.3,58.7 L 666.5,60.3 L 669.7,58.5 L 666.8,56.9 L 668.2,56.0 L 690.3,60.9 L 692.2,59.4 L 685.9,57.1 L 685.3,52.7 L 694.3,47.1 L 701.6,47.8 L 702.2,49.4 L 699.6,51.6 L 702.2,54.5 L 701.6,58.3 L 704.6,60.0 L 698.0,65.8 L 701.2,66.2 L 708.5,61.8 L 706.9,60.2 L 708.2,58.4 L 704.4,56.6 L 706.7,53.8 L 703.1,51.5 L 708.0,49.7 L 707.4,47.7 L 710.2,49.2 L 709.1,51.8 L 712.1,52.4 L 710.8,50.3 L 715.5,49.3 L 726.4,50.7 L 723.6,45.4 L 741.2,44.6 L 738.9,43.2 L 742.1,41.3 L 779.9,37.7 L 789.9,34.2 L 797.9,37.6 L 808.5,36.9 L 817.0,39.3 L 803.9,43.9 L 813.9,44.5 L 815.4,46.3 L 821.0,45.1 L 842.2,47.3 L 842.4,45.2 L 852.7,45.7 L 857.2,47.1 L 858.5,48.9 L 856.8,50.1 L 864.7,53.4 L 867.4,50.5 L 888.5,51.4 L 886.5,48.8 L 890.2,47.6 L 915.3,49.4 L 924.9,53.2 L 941.7,53.1 L 944.0,54.3 L 943.6,56.3 L 947.1,57.1 L 966.2,56.7 L 971.0,59.2 L 974.5,58.3 L 972.2,56.5 L 973.5,55.3 L 1000.0,58.4 L 1000.0,69.5 L 992.8,70.5 L 998.3,75.0 L 997.9,76.9 L 992.7,76.3 L 982.4,78.7 L 973.1,83.7 L 969.2,81.7 L 961.9,83.9 L 954.3,83.7 L 950.0,88.2 L 953.3,90.0 L 952.9,94.0 L 950.4,94.1 L 949.2,96.4 L 950.3,97.6 L 945.5,99.0 L 944.5,102.2 L 940.4,102.9 L 939.5,105.7 L 935.5,108.3 L 931.8,96.2 L 933.1,92.3 L 935.6,89.4 L 939.9,88.7 L 954.6,80.2 L 956.9,76.2 L 953.5,76.5 L 944.8,81.8 L 942.5,78.4 L 935.3,79.3 L 928.4,84.0 L 930.7,85.7 L 920.2,86.7 L 920.4,84.7 L 916.1,84.3 L 895.0,86.0 L 875.4,98.0 L 883.8,100.7 L 888.6,99.5 L 892.6,102.5 L 889.1,115.4 L 874.6,129.4 L 870.9,131.1 L 867.4,129.8 L 863.3,132.7 L 864.0,125.1 L 869.7,124.6 L 875.1,115.3 L 863.9,117.2 L 859.4,112.7 L 854.6,111.8 L 849.9,103.4 L 843.3,101.5 L 833.8,103.5 L 835.4,105.7 L 831.4,110.7 L 827.4,112.5 L 817.7,110.4 L 807.4,113.5 L 801.3,113.1 L 796.9,110.3 L 788.0,110.9 L 784.0,109.7 L 783.5,107.6 L 774.6,105.4 L 770.2,111.9 L 756.2,108.9 L 742.7,113.3 L 731.6,108.1 L 723.8,107.3 L 722.3,108.7 L 712.6,99.5 L 713.6,98.6 L 704.0,101.4 L 704.2,99.9 L 697.7,99.6 L 696.8,96.8 L 691.9,96.2 L 670.7,100.0 L 669.4,100.9 L 671.4,102.8 L 666.6,105.7 L 671.1,107.6 L 670.4,108.9 L 654.8,109.4 L 641.0,106.4 L 635.3,109.4 L 634.9,111.5 L 632.1,109.8 L 629.1,115.6 L 633.5,117.4 L 636.4,121.1 Z"}, {"n":"Bahamas","iso":"BS","cx":283.5,"cy":181.9,"d":"M 282.8,180.0 L 284.6,184.0 L 282.2,181.7 L 282.8,180.0 Z"}, {"n":"Falkland Islands","iso":"FK","cx":334.5,"cy":393.7,"d":"M 330.0,394.0 L 337.4,391.9 L 339.6,393.2 L 335.0,395.0 L 330.0,394.0 Z"}, {"n":"Norway","iso":"-99","cx":550.2,"cy":66.0,"d":"M 586.4,56.8 L 579.4,58.2 L 580.6,56.2 L 577.0,55.1 L 568.7,59.3 L 559.0,57.3 L 555.6,58.2 L 555.2,60.0 L 550.0,59.5 L 537.7,70.0 L 537.7,72.1 L 534.9,72.0 L 533.1,74.6 L 535.1,79.7 L 534.2,83.0 L 530.6,86.5 L 528.8,84.8 L 523.3,88.0 L 515.7,87.3 L 513.9,77.9 L 529.2,70.9 L 541.0,61.6 L 553.3,56.1 L 578.2,52.3 L 586.9,54.3 L 583.3,55.0 L 586.4,56.8 Z"}, {"n":"Greenland","iso":"GL","cx":386.0,"cy":44.0,"d":"M 370.1,20.5 L 392.7,17.9 L 424.7,18.0 L 442.1,20.2 L 411.4,21.7 L 438.7,23.0 L 435.6,24.6 L 456.2,22.5 L 466.1,24.2 L 444.3,27.3 L 450.7,27.4 L 445.3,31.2 L 445.4,34.3 L 448.7,36.2 L 439.8,37.1 L 444.9,38.6 L 445.6,41.0 L 442.6,41.2 L 446.2,43.6 L 440.0,43.8 L 443.2,45.0 L 442.3,45.9 L 434.5,46.4 L 438.1,49.5 L 431.1,49.1 L 438.5,51.5 L 439.6,53.7 L 434.6,54.2 L 429.0,51.6 L 430.0,53.5 L 426.8,54.9 L 437.9,55.2 L 422.9,59.8 L 411.7,60.8 L 405.0,64.8 L 389.4,68.2 L 385.6,73.7 L 381.1,75.9 L 382.2,78.1 L 379.5,83.1 L 365.9,80.9 L 356.6,73.3 L 350.1,63.4 L 352.8,60.1 L 357.0,59.1 L 358.7,55.8 L 348.1,56.6 L 349.0,53.3 L 357.2,54.0 L 344.9,51.0 L 348.0,48.4 L 337.3,40.2 L 329.8,38.6 L 309.7,38.7 L 301.7,36.1 L 314.5,35.1 L 296.4,33.2 L 317.5,29.5 L 318.5,28.4 L 311.0,27.5 L 327.1,24.1 L 326.0,22.9 L 360.0,21.0 L 376.3,23.2 L 369.7,21.7 L 370.1,20.5 Z"}, {"n":"French Southern Territories","iso":"TF","cx":692.9,"cy":386.4,"d":"M 691.5,385.1 L 696.0,386.8 L 691.0,388.3 L 691.5,385.1 Z"}, {"n":"East Timor","iso":"TL","cx":849.7,"cy":274.3,"d":"M 847.1,274.7 L 853.7,273.3 L 847.5,276.1 L 847.1,274.7 Z"}, {"n":"South Africa","iso":"ZA","cx":568.7,"cy":329.5,"d":"M 545.4,329.4 L 546.7,328.0 L 551.3,330.7 L 555.3,329.1 L 555.3,318.8 L 558.0,324.5 L 560.0,324.2 L 564.8,320.2 L 571.3,320.8 L 575.3,315.5 L 581.8,311.4 L 586.6,311.8 L 588.7,317.7 L 588.4,321.8 L 586.2,321.5 L 585.2,324.3 L 586.9,325.8 L 591.2,324.3 L 589.5,329.9 L 578.4,341.0 L 571.6,344.3 L 562.7,344.1 L 555.8,346.7 L 551.0,344.8 L 550.6,337.9 L 545.4,329.4 Z"}, {"n":"Lesotho","iso":"LS","cx":578.8,"cy":332.2,"d":"M 580.5,330.4 L 581.5,331.3 L 578.1,334.8 L 575.0,333.0 L 578.0,330.1 L 580.5,330.4 Z"}, {"n":"Mexico","iso":"MX","cx":213.5,"cy":183.7,"d":"M 174.6,159.6 L 181.3,159.1 L 191.6,163.0 L 204.1,161.8 L 211.3,168.7 L 213.6,169.5 L 217.6,167.3 L 224.9,176.8 L 230.2,178.1 L 228.1,187.7 L 233.6,197.7 L 237.7,199.6 L 246.1,197.6 L 249.2,191.7 L 258.2,190.2 L 256.0,199.3 L 247.2,200.5 L 246.0,202.1 L 248.7,205.4 L 245.1,205.4 L 243.8,209.6 L 239.2,205.7 L 231.8,206.5 L 212.5,199.2 L 207.0,194.6 L 207.6,190.5 L 205.5,186.7 L 188.3,169.6 L 185.7,163.4 L 180.7,162.8 L 192.6,182.5 L 196.1,185.1 L 194.8,186.6 L 188.4,181.3 L 188.1,177.7 L 180.4,173.0 L 182.9,170.6 L 179.1,167.9 L 174.6,159.6 Z"}, {"n":"Uruguay","iso":"UY","cx":344.1,"cy":340.8,"d":"M 339.9,333.9 L 350.6,339.0 L 352.2,340.9 L 350.5,345.5 L 343.8,346.8 L 337.7,344.2 L 339.9,333.9 Z"}, {"n":"Brazil","iso":"BR","cx":341.9,"cy":276.8,"d":"M 351.7,343.8 L 350.6,339.0 L 339.9,333.9 L 351.0,324.8 L 351.0,322.6 L 348.3,321.5 L 349.2,316.7 L 346.1,316.5 L 345.0,312.1 L 339.1,311.4 L 338.4,306.0 L 340.3,300.5 L 338.2,295.3 L 332.9,295.2 L 331.9,288.3 L 318.3,282.1 L 318.5,277.1 L 310.4,280.6 L 304.0,280.6 L 304.2,276.4 L 299.5,277.9 L 296.6,276.3 L 294.5,270.9 L 297.5,264.7 L 305.9,261.9 L 307.2,253.1 L 305.5,248.5 L 307.7,247.3 L 306.1,245.2 L 312.4,244.3 L 313.7,246.9 L 317.9,247.8 L 324.0,243.9 L 321.5,243.1 L 320.0,238.7 L 324.7,239.5 L 330.6,237.4 L 331.3,235.6 L 333.4,236.1 L 334.6,239.0 L 333.4,242.3 L 336.0,246.3 L 344.5,245.0 L 344.5,243.0 L 352.9,244.1 L 357.5,238.3 L 361.2,245.2 L 360.0,250.2 L 364.9,250.7 L 365.0,253.4 L 367.2,251.6 L 375.3,254.3 L 376.2,257.5 L 388.9,258.0 L 396.6,263.4 L 401.1,264.3 L 403.5,270.4 L 402.4,275.0 L 392.6,286.3 L 390.9,299.6 L 386.3,310.9 L 383.4,313.8 L 376.0,314.9 L 367.6,319.1 L 365.3,321.9 L 364.2,329.7 L 351.7,343.8 Z"}, {"n":"Bolivia","iso":"BO","cx":321.9,"cy":295.4,"d":"M 306.9,280.4 L 318.5,277.1 L 318.3,282.1 L 331.9,288.3 L 332.9,295.2 L 338.2,295.3 L 340.3,300.5 L 339.3,305.5 L 335.8,303.8 L 328.4,304.5 L 325.9,311.8 L 322.3,311.1 L 321.2,313.3 L 315.9,310.6 L 311.6,313.5 L 309.0,306.6 L 309.9,303.9 L 306.7,298.8 L 309.3,284.9 L 306.9,280.4 Z"}, {"n":"Peru","iso":"PE","cx":294.2,"cy":271.5,"d":"M 305.9,261.9 L 297.5,264.7 L 294.5,270.9 L 296.6,276.3 L 299.5,277.9 L 304.2,276.4 L 304.0,280.6 L 306.9,280.4 L 309.3,284.9 L 307.4,291.5 L 308.4,295.8 L 304.5,301.0 L 288.9,290.7 L 278.4,270.0 L 274.3,267.0 L 273.9,263.2 L 276.9,259.5 L 276.5,262.3 L 280.0,263.8 L 281.6,262.6 L 283.8,258.3 L 290.2,254.3 L 291.4,250.2 L 297.0,256.4 L 305.4,257.6 L 303.6,260.4 L 305.9,261.9 Z"}, {"n":"Colombia","iso":"CO","cx":298.2,"cy":237.5,"d":"M 314.2,246.5 L 312.4,244.3 L 306.1,245.2 L 307.7,247.3 L 305.5,248.5 L 307.2,253.1 L 305.9,261.9 L 303.6,260.4 L 305.4,257.6 L 297.0,256.4 L 291.4,250.2 L 284.9,248.9 L 280.6,245.3 L 285.8,239.3 L 283.7,229.9 L 284.8,226.3 L 289.8,223.8 L 291.9,219.2 L 301.7,215.6 L 296.4,224.6 L 300.1,230.6 L 312.9,233.1 L 311.6,242.2 L 314.2,246.5 Z"}, {"n":"Panama","iso":"PA","cx":276.9,"cy":226.4,"d":"M 285.1,225.9 L 283.7,229.9 L 280.2,225.0 L 275.3,229.9 L 273.0,227.5 L 269.9,227.6 L 269.6,223.7 L 273.8,225.6 L 280.5,223.5 L 285.1,225.9 Z"}, {"n":"Costa Rica","iso":"CR","cx":266.2,"cy":222.7,"d":"M 270.7,223.4 L 269.5,227.2 L 264.0,222.0 L 263.6,223.5 L 262.1,222.4 L 261.3,219.7 L 267.6,219.6 L 270.7,223.4 Z"}, {"n":"Nicaragua","iso":"NI","cx":264.0,"cy":213.7,"d":"M 267.6,219.6 L 261.9,219.2 L 256.5,214.1 L 264.1,208.9 L 269.0,208.3 L 267.6,219.6 Z"}, {"n":"Honduras","iso":"HN","cx":260.3,"cy":209.0,"d":"M 269.0,208.3 L 264.1,208.9 L 257.5,213.9 L 251.8,209.9 L 255.8,205.9 L 263.9,205.6 L 269.0,208.3 Z"}, {"n":"El Salvador","iso":"SV","cx":253.0,"cy":211.5,"d":"M 251.8,209.9 L 256.3,211.7 L 255.8,213.5 L 249.7,211.8 L 251.8,209.9 Z"}, {"n":"Guatemala","iso":"GT","cx":249.3,"cy":206.9,"d":"M 243.8,209.6 L 245.1,205.4 L 248.7,205.4 L 246.0,202.1 L 247.2,200.5 L 252.4,200.5 L 252.1,205.9 L 254.9,206.3 L 251.8,209.9 L 249.7,211.8 L 243.8,209.6 Z"}, {"n":"Belize","iso":"BZ","cx":253.8,"cy":201.6,"d":"M 252.4,200.5 L 255.3,199.0 L 253.0,205.9 L 252.4,200.5 Z"}, {"n":"Venezuela","iso":"VE","cx":314.3,"cy":230.0,"d":"M 331.3,235.6 L 330.6,237.4 L 324.7,239.5 L 320.0,238.7 L 321.5,243.1 L 324.0,243.9 L 315.8,248.0 L 311.6,242.2 L 312.9,233.1 L 300.1,230.6 L 296.4,224.6 L 297.5,221.0 L 301.9,217.3 L 300.1,218.3 L 299.8,222.6 L 302.0,224.6 L 301.7,219.5 L 305.1,218.4 L 305.7,216.2 L 310.6,220.7 L 319.7,222.0 L 321.3,220.4 L 328.1,220.2 L 325.7,221.1 L 334.0,226.8 L 329.4,233.4 L 331.3,235.6 Z"}, {"n":"Guyana","iso":"GY","cx":336.4,"cy":237.6,"d":"M 342.9,244.7 L 337.4,246.5 L 334.3,245.0 L 333.4,236.1 L 329.4,233.4 L 334.0,226.8 L 341.3,233.4 L 338.8,238.7 L 342.9,244.7 Z"}, {"n":"Suriname","iso":"SR","cx":344.8,"cy":239.7,"d":"M 348.5,243.6 L 344.5,243.0 L 344.5,245.0 L 342.9,244.7 L 340.0,240.7 L 338.8,238.7 L 341.3,233.4 L 350.1,234.0 L 348.5,243.6 Z"}, {"n":"France","iso":"-99","cx":509.2,"cy":119.4,"d":"M 517.2,112.6 L 522.5,113.8 L 520.7,117.7 L 516.8,120.2 L 520.7,128.6 L 505.1,132.4 L 494.7,129.4 L 496.7,122.2 L 491.8,117.9 L 487.5,116.8 L 487.2,114.8 L 495.5,114.9 L 494.6,111.7 L 497.3,112.9 L 507.0,107.9 L 517.2,112.6 Z"}, {"n":"Ecuador","iso":"EC","cx":281.4,"cy":254.5,"d":"M 290.6,250.4 L 290.2,254.3 L 283.8,258.3 L 281.6,262.6 L 280.0,263.8 L 276.5,262.3 L 278.4,257.4 L 275.1,256.2 L 275.2,252.9 L 277.5,247.9 L 281.0,246.2 L 290.6,250.4 Z"}, {"n":"Puerto Rico","iso":"PR","cx":315.5,"cy":199.2,"d":"M 315.9,198.6 L 317.8,199.4 L 313.4,200.1 L 313.6,198.6 L 315.9,198.6 Z"}, {"n":"Jamaica","iso":"JM","cx":285.1,"cy":199.5,"d":"M 284.5,198.6 L 288.3,200.3 L 282.4,199.4 L 284.5,198.6 Z"}, {"n":"Cuba","iso":"CU","cx":278.5,"cy":189.7,"d":"M 271.5,185.6 L 282.4,187.5 L 293.9,193.7 L 284.0,194.8 L 285.9,193.3 L 281.3,190.0 L 271.8,187.8 L 272.8,187.1 L 264.0,189.2 L 271.5,185.6 Z"}, {"n":"Zimbabwe","iso":"ZW","cx":582.4,"cy":302.4,"d":"M 586.6,311.8 L 577.8,309.7 L 570.2,299.3 L 575.1,299.8 L 584.1,293.1 L 591.2,296.4 L 590.7,306.4 L 586.6,311.8 Z"}, {"n":"Botswana","iso":"BW","cx":568.0,"cy":312.4,"d":"M 581.8,311.4 L 575.3,315.5 L 571.3,320.8 L 564.8,320.2 L 560.0,324.2 L 558.0,324.5 L 555.3,318.8 L 555.3,310.7 L 558.0,310.6 L 558.1,300.7 L 570.2,299.3 L 577.8,309.7 L 581.8,311.4 Z"}, {"n":"Namibia","iso":"NA","cx":549.8,"cy":309.9,"d":"M 555.3,318.8 L 555.3,329.1 L 551.3,330.7 L 546.7,328.0 L 545.4,329.4 L 542.3,325.3 L 539.6,311.4 L 532.6,298.1 L 569.7,298.8 L 565.5,300.8 L 558.1,300.7 L 558.0,310.6 L 555.3,310.7 L 555.3,318.8 Z"}, {"n":"Senegal","iso":"SN","cx":459.5,"cy":211.5,"d":"M 453.6,212.2 L 451.0,209.1 L 455.2,204.3 L 459.5,203.9 L 466.2,209.4 L 468.0,215.4 L 453.7,215.6 L 453.2,213.5 L 461.5,212.5 L 453.6,212.2 Z"}, {"n":"Mali","iso":"ML","cx":483.9,"cy":210.9,"d":"M 468.0,215.4 L 466.2,209.4 L 467.6,207.3 L 484.6,206.9 L 482.1,180.7 L 486.3,180.6 L 508.7,195.3 L 508.8,197.1 L 511.9,196.8 L 510.1,206.8 L 497.0,208.4 L 488.9,212.6 L 485.0,221.2 L 477.7,221.6 L 474.6,215.8 L 471.8,217.1 L 468.0,215.4 Z"}, {"n":"Mauritania","iso":"MR","cx":465.5,"cy":197.7,"d":"M 452.6,191.7 L 464.1,190.8 L 464.2,185.3 L 466.8,185.1 L 466.8,178.0 L 475.9,178.1 L 475.9,173.9 L 486.3,180.6 L 482.1,180.7 L 484.6,206.9 L 467.6,207.3 L 466.2,209.4 L 459.5,203.9 L 454.3,205.2 L 454.8,194.2 L 452.6,191.7 Z"}, {"n":"Benin","iso":"BJ","cx":506.5,"cy":222.8,"d":"M 507.5,232.6 L 505.2,232.9 L 504.6,224.6 L 502.1,220.9 L 507.9,216.0 L 510.5,220.2 L 507.6,226.4 L 507.5,232.6 Z"}, {"n":"Niger","iso":"NE","cx":524.3,"cy":207.0,"d":"M 541.3,186.5 L 544.2,193.4 L 542.4,203.8 L 538.8,206.4 L 537.6,210.1 L 538.8,212.9 L 540.5,213.0 L 539.4,215.3 L 536.3,212.2 L 525.0,214.4 L 515.1,211.5 L 511.4,212.4 L 510.0,217.6 L 502.8,214.3 L 501.0,208.5 L 510.1,206.8 L 511.9,196.8 L 533.3,184.8 L 539.3,187.5 L 541.3,186.5 Z"}, {"n":"Nigeria","iso":"NG","cx":523.2,"cy":223.0,"d":"M 507.5,232.6 L 507.6,226.4 L 510.3,222.0 L 510.2,215.1 L 512.1,211.8 L 525.0,214.4 L 536.3,212.2 L 540.5,216.4 L 532.6,230.6 L 525.6,232.1 L 523.6,236.7 L 516.4,238.2 L 512.0,232.6 L 507.5,232.6 Z"}, {"n":"Cameroon","iso":"CM","cx":536.6,"cy":230.8,"d":"M 540.3,214.3 L 543.0,222.3 L 538.8,223.5 L 542.9,228.6 L 540.2,236.9 L 544.1,241.6 L 544.3,245.2 L 526.8,243.7 L 527.2,241.5 L 523.6,237.5 L 524.3,234.8 L 528.1,230.4 L 532.6,230.6 L 540.0,217.9 L 540.3,214.3 Z"}, {"n":"Togo","iso":"TG","cx":502.4,"cy":225.3,"d":"M 502.5,219.5 L 505.2,232.9 L 502.9,233.5 L 499.9,220.3 L 502.5,219.5 Z"}, {"n":"Ghana","iso":"GH","cx":497.3,"cy":227.0,"d":"M 500.1,219.4 L 502.9,233.5 L 494.5,236.9 L 492.1,236.1 L 491.8,219.5 L 500.1,219.4 Z"}, {"n":"C\u00f4te d'Ivoire","iso":"CI","cx":482.4,"cy":227.9,"d":"M 477.7,221.6 L 482.8,220.8 L 492.1,223.2 L 492.1,236.1 L 478.6,237.9 L 479.0,234.1 L 476.1,232.0 L 478.2,226.2 L 477.7,221.6 Z"}, {"n":"Guinea","iso":"GN","cx":469.5,"cy":221.1,"d":"M 461.9,215.0 L 471.8,217.1 L 474.6,215.8 L 477.7,221.6 L 477.0,228.6 L 474.4,229.7 L 472.9,226.3 L 470.8,226.8 L 469.1,222.1 L 465.5,222.7 L 463.2,225.3 L 458.0,219.3 L 461.8,217.2 L 461.9,215.0 Z"}, {"n":"Guinea-Bissau","iso":"GW","cx":457.7,"cy":216.7,"d":"M 453.7,215.6 L 461.9,215.0 L 461.8,217.2 L 458.0,219.3 L 453.7,215.6 Z"}, {"n":"Liberia","iso":"LR","cx":474.6,"cy":231.2,"d":"M 476.6,228.6 L 478.6,237.9 L 468.2,231.2 L 471.6,226.6 L 472.9,226.3 L 474.4,229.7 L 476.6,228.6 Z"}, {"n":"Sierra Leone","iso":"SL","cx":467.5,"cy":226.1,"d":"M 463.2,225.3 L 465.5,222.7 L 469.1,222.1 L 471.6,226.6 L 468.2,231.2 L 464.0,228.3 L 463.2,225.3 Z"}, {"n":"Burkina Faso","iso":"BF","cx":494.7,"cy":216.4,"d":"M 485.0,221.2 L 488.1,213.3 L 497.0,208.4 L 501.0,208.5 L 502.8,214.3 L 506.0,214.9 L 502.5,219.5 L 491.8,219.5 L 492.1,223.2 L 488.0,223.3 L 485.0,221.2 Z"}, {"n":"Central African Republic","iso":"CF","cx":557.5,"cy":232.5,"d":"M 576.0,235.5 L 567.8,235.8 L 562.2,238.8 L 554.1,236.0 L 551.3,240.3 L 547.6,239.6 L 544.5,243.7 L 540.2,234.9 L 542.4,229.4 L 549.9,228.1 L 552.3,225.0 L 558.3,223.7 L 563.5,219.0 L 565.2,225.1 L 576.0,235.5 Z"}, {"n":"Republic of Congo","iso":"CG","cx":541.5,"cy":252.6,"d":"M 551.3,240.3 L 549.0,251.2 L 545.6,254.8 L 544.5,259.8 L 540.5,263.8 L 535.1,262.3 L 533.1,264.0 L 530.8,261.1 L 532.9,259.5 L 531.9,257.7 L 534.9,255.4 L 538.9,256.9 L 540.1,253.7 L 538.5,249.9 L 539.7,246.7 L 536.9,246.3 L 536.3,243.7 L 544.3,245.2 L 547.6,239.6 L 551.3,240.3 Z"}, {"n":"Gabon","iso":"GA","cx":533.0,"cy":250.9,"d":"M 531.3,243.7 L 536.0,243.6 L 536.9,246.3 L 539.7,246.7 L 538.5,249.9 L 540.1,253.7 L 538.9,256.9 L 534.9,255.4 L 531.9,257.7 L 532.9,259.5 L 530.8,261.1 L 524.4,253.1 L 526.4,247.2 L 531.3,247.1 L 531.3,243.7 Z"}, {"n":"Equatorial Guinea","iso":"GQ","cx":528.0,"cy":245.6,"d":"M 526.8,243.7 L 531.3,243.7 L 531.3,247.1 L 526.4,247.2 L 526.8,243.7 Z"}, {"n":"Zambia","iso":"ZM","cx":577.7,"cy":285.7,"d":"M 585.4,273.2 L 592.3,276.9 L 592.5,284.5 L 590.8,288.1 L 592.3,288.8 L 583.8,291.1 L 584.1,293.1 L 575.1,299.8 L 564.5,298.7 L 560.8,294.7 L 560.9,285.8 L 566.7,285.9 L 566.4,280.4 L 571.5,282.7 L 575.5,282.2 L 582.5,286.8 L 582.3,283.8 L 578.8,282.8 L 579.0,275.5 L 580.6,273.4 L 585.4,273.2 Z"}, {"n":"Malawi","iso":"MW","cx":594.6,"cy":285.9,"d":"M 591.0,275.6 L 595.2,278.2 L 596.0,287.7 L 599.1,290.6 L 599.4,294.2 L 597.3,296.7 L 595.5,295.0 L 595.7,290.6 L 590.8,288.1 L 593.0,279.2 L 591.0,275.6 Z"}, {"n":"Mozambique","iso":"MZ","cx":597.2,"cy":299.2,"d":"M 596.0,282.0 L 604.1,282.1 L 612.0,278.7 L 613.3,290.8 L 609.6,296.4 L 596.6,305.0 L 598.5,317.0 L 591.7,320.4 L 591.2,324.3 L 589.1,324.3 L 586.6,311.8 L 590.7,306.4 L 591.2,296.4 L 584.3,294.1 L 583.8,291.1 L 592.3,288.8 L 595.7,290.6 L 595.5,295.0 L 597.3,296.7 L 599.4,294.2 L 599.1,290.6 L 596.0,287.7 L 596.0,282.0 Z"}, {"n":"eSwatini","iso":"SZ","cx":587.3,"cy":323.4,"d":"M 589.1,324.3 L 586.9,325.8 L 585.2,324.3 L 586.2,321.5 L 588.4,321.8 L 589.1,324.3 Z"}, {"n":"Angola","iso":"AO","cx":548.3,"cy":280.4,"d":"M 534.2,266.9 L 545.4,266.3 L 548.5,272.4 L 552.8,272.2 L 555.8,269.3 L 560.4,270.3 L 561.5,280.8 L 566.7,281.2 L 566.7,285.9 L 560.9,285.8 L 560.8,294.7 L 564.5,298.7 L 559.4,299.8 L 537.4,297.1 L 532.6,298.1 L 533.8,290.1 L 538.2,281.4 L 534.2,266.9 Z"}, {"n":"Burundi","iso":"BI","cx":583.5,"cy":259.0,"d":"M 584.6,256.7 L 585.4,259.3 L 581.5,262.5 L 580.6,257.9 L 584.6,256.7 Z"}, {"n":"Israel","iso":"IL","cx":597.5,"cy":161.1,"d":"M 599.2,159.1 L 597.2,161.5 L 598.4,163.6 L 597.0,168.1 L 595.2,163.3 L 597.5,158.1 L 599.5,157.6 L 599.2,159.1 Z"}, {"n":"Lebanon","iso":"LB","cx":599.6,"cy":156.1,"d":"M 599.5,157.6 L 597.6,158.1 L 601.2,153.9 L 599.5,157.6 Z"}, {"n":"Madagascar","iso":"MG","cx":630.5,"cy":299.9,"d":"M 637.6,284.6 L 639.9,293.6 L 638.0,293.6 L 630.8,319.3 L 626.1,321.1 L 622.3,319.4 L 620.4,313.3 L 623.5,304.0 L 622.1,298.4 L 623.5,295.0 L 628.6,293.8 L 636.7,283.4 L 637.6,284.6 Z"}, {"n":"Palestine","iso":"PS","cx":597.9,"cy":161.6,"d":"M 598.3,162.5 L 597.0,162.9 L 597.7,159.6 L 598.3,162.5 Z"}, {"n":"Gambia","iso":"GM","cx":457.5,"cy":212.5,"d":"M 453.6,212.2 L 461.5,212.5 L 453.2,213.5 L 453.6,212.2 Z"}, {"n":"Tunisia","iso":"TN","cx":527.3,"cy":155.5,"d":"M 526.3,165.8 L 525.2,160.8 L 520.9,155.3 L 523.4,147.4 L 526.4,146.3 L 528.3,148.0 L 530.6,147.0 L 530.0,153.2 L 528.2,154.6 L 531.9,158.0 L 526.3,165.8 Z"}, {"n":"Algeria","iso":"DZ","cx":508.4,"cy":167.6,"d":"M 475.9,173.9 L 475.9,169.9 L 496.4,160.4 L 494.0,152.3 L 496.6,150.8 L 504.1,148.3 L 523.4,147.4 L 520.9,155.3 L 525.2,160.8 L 527.2,168.3 L 525.9,177.5 L 528.6,182.3 L 533.3,184.8 L 515.8,195.6 L 508.8,197.1 L 508.7,195.3 L 475.9,173.9 Z"}, {"n":"Jordan","iso":"JO","cx":601.8,"cy":163.5,"d":"M 598.7,160.0 L 602.3,160.2 L 607.8,157.3 L 608.9,160.7 L 602.8,162.5 L 605.6,165.3 L 600.2,168.9 L 597.0,168.1 L 598.7,160.0 Z"}, {"n":"United Arab Emirates","iso":"AE","cx":650.7,"cy":182.8,"d":"M 643.3,182.7 L 650.0,183.0 L 656.3,178.6 L 652.8,187.5 L 644.4,186.1 L 643.3,182.7 Z"}, {"n":"Qatar","iso":"QA","cx":642.1,"cy":179.8,"d":"M 641.1,181.2 L 642.5,177.5 L 643.4,180.0 L 641.1,181.2 Z"}, {"n":"Kuwait","iso":"KW","cx":632.6,"cy":168.5,"d":"M 633.3,166.7 L 634.5,170.7 L 629.4,169.2 L 633.3,166.7 Z"}, {"n":"Iraq","iso":"IQ","cx":623.3,"cy":157.1,"d":"M 608.9,160.7 L 607.8,157.3 L 613.9,154.4 L 614.7,149.0 L 618.8,146.2 L 624.4,146.7 L 628.0,150.9 L 626.2,155.6 L 631.5,159.8 L 634.9,166.9 L 631.4,166.5 L 629.4,169.2 L 624.2,168.9 L 608.9,160.7 Z"}, {"n":"Oman","iso":"OM","cx":657.1,"cy":192.1,"d":"M 653.4,186.9 L 655.2,180.8 L 656.7,180.8 L 666.1,188.0 L 660.6,193.8 L 660.3,197.4 L 652.2,202.9 L 647.5,203.7 L 644.4,197.2 L 652.8,194.4 L 654.6,188.9 L 653.4,186.9 Z"}, {"n":"Vanuatu","iso":"VU","cx":963.6,"cy":292.7,"d":"M 963.3,293.5 L 962.9,290.6 L 964.6,293.7 L 963.3,293.5 Z"}, {"n":"Cambodia","iso":"KH","cx":791.4,"cy":214.9,"d":"M 785.0,216.1 L 784.3,212.8 L 786.1,210.5 L 794.6,211.4 L 795.8,209.5 L 798.9,212.4 L 798.6,215.7 L 793.9,217.9 L 795.1,219.6 L 787.5,220.5 L 785.0,216.1 Z"}, {"n":"Thailand","iso":"TH","cx":779.6,"cy":213.4,"d":"M 792.3,210.4 L 786.1,210.5 L 784.3,212.8 L 785.0,216.1 L 778.0,212.8 L 775.6,224.3 L 777.4,224.4 L 779.1,229.4 L 783.7,232.7 L 781.0,234.2 L 772.6,226.8 L 776.6,217.0 L 772.8,208.0 L 774.7,205.1 L 770.5,198.8 L 772.9,195.3 L 778.1,193.3 L 781.3,195.9 L 780.7,201.4 L 786.7,199.1 L 790.9,201.6 L 793.3,206.7 L 792.3,210.4 Z"}, {"n":"Laos","iso":"LA","cx":788.0,"cy":199.2,"d":"M 798.3,210.5 L 792.3,210.4 L 793.3,206.7 L 788.8,199.3 L 780.7,201.4 L 781.3,195.9 L 778.1,193.3 L 781.1,190.5 L 782.8,191.2 L 782.4,188.0 L 783.8,187.6 L 786.7,192.3 L 790.1,192.3 L 791.2,194.8 L 788.6,196.5 L 798.1,205.8 L 798.3,210.5 Z"}, {"n":"Myanmar","iso":"MM","cx":769.9,"cy":194.4,"d":"M 778.1,193.3 L 772.9,195.3 L 770.5,198.8 L 774.7,205.1 L 772.8,208.0 L 776.6,217.0 L 773.8,222.4 L 773.6,213.5 L 769.9,203.0 L 764.9,206.3 L 761.6,205.5 L 762.0,199.4 L 756.4,190.3 L 764.2,176.2 L 769.8,174.8 L 770.4,171.5 L 774.1,173.6 L 774.1,178.0 L 771.5,180.3 L 771.1,183.6 L 774.1,183.2 L 776.5,186.3 L 775.7,188.6 L 781.0,189.3 L 778.1,193.3 Z"}, {"n":"Vietnam","iso":"VN","cx":794.3,"cy":203.6,"d":"M 789.8,220.9 L 795.1,219.6 L 793.9,217.9 L 798.6,215.7 L 798.8,207.8 L 791.9,198.1 L 788.6,196.5 L 791.2,194.8 L 790.1,192.3 L 786.7,192.3 L 783.8,187.6 L 792.6,185.1 L 800.1,190.1 L 793.5,197.1 L 802.4,207.6 L 803.3,217.6 L 792.1,226.1 L 791.9,222.4 L 789.8,220.9 Z"}, {"n":"North Korea","iso":"KP","cx":853.9,"cy":139.0,"d":"M 862.9,132.2 L 860.3,136.4 L 854.3,139.6 L 856.1,143.4 L 848.0,145.4 L 846.4,144.1 L 848.3,140.6 L 845.2,139.1 L 847.4,137.3 L 852.4,133.8 L 856.1,134.8 L 855.7,133.3 L 861.1,130.6 L 862.9,132.2 Z"}, {"n":"South Korea","iso":"KR","cx":854.1,"cy":148.0,"d":"M 850.5,145.1 L 856.5,142.7 L 859.6,147.8 L 858.6,152.5 L 851.3,154.5 L 850.3,148.0 L 852.4,147.5 L 850.5,145.1 Z"}, {"n":"Mongolia","iso":"MN","cx":790.5,"cy":118.9,"d":"M 743.8,113.1 L 756.2,108.9 L 770.2,111.9 L 774.6,105.4 L 783.5,107.6 L 784.0,109.7 L 788.0,110.9 L 796.9,110.3 L 801.3,113.1 L 807.4,113.5 L 817.7,110.4 L 824.1,111.4 L 821.5,117.4 L 828.0,116.5 L 832.7,119.3 L 826.2,120.4 L 815.2,125.5 L 810.8,124.7 L 809.3,126.5 L 810.6,128.5 L 806.7,130.9 L 791.6,134.5 L 780.1,131.5 L 767.6,131.3 L 764.7,127.1 L 752.6,124.2 L 752.7,119.8 L 743.8,113.1 Z"}, {"n":"India","iso":"IN","cx":732.2,"cy":183.4,"d":"M 770.4,171.5 L 769.8,174.8 L 764.2,176.2 L 757.4,188.8 L 756.0,184.4 L 754.7,186.2 L 753.2,184.7 L 756.6,180.6 L 749.8,179.8 L 749.5,177.9 L 746.0,176.5 L 745.0,178.4 L 747.0,179.9 L 744.7,181.9 L 746.4,182.7 L 746.9,189.7 L 741.6,190.3 L 740.3,194.0 L 728.3,204.0 L 723.1,205.8 L 721.8,221.2 L 715.4,227.9 L 704.3,205.6 L 701.8,190.7 L 695.8,192.0 L 689.4,184.2 L 691.2,182.3 L 697.3,182.3 L 693.1,175.2 L 696.2,172.3 L 699.4,172.5 L 709.1,160.4 L 704.9,154.7 L 713.5,153.7 L 716.2,151.4 L 719.2,154.7 L 718.7,162.5 L 725.3,166.2 L 722.5,170.0 L 731.4,174.0 L 744.6,176.6 L 744.8,172.6 L 746.5,172.0 L 746.8,174.7 L 749.3,175.8 L 755.6,175.4 L 754.7,172.9 L 767.0,168.2 L 767.4,171.1 L 770.4,171.5 Z"}, {"n":"Bangladesh","iso":"BD","cx":751.7,"cy":185.0,"d":"M 757.4,188.8 L 756.6,192.6 L 753.9,186.8 L 751.4,186.7 L 750.8,189.3 L 747.3,188.7 L 746.4,182.7 L 744.7,181.9 L 747.0,179.9 L 745.0,178.4 L 746.0,176.5 L 749.5,177.9 L 749.8,179.8 L 756.6,180.6 L 753.2,184.7 L 754.7,186.2 L 756.0,184.4 L 757.4,188.8 Z"}, {"n":"Bhutan","iso":"BT","cx":751.7,"cy":173.7,"d":"M 754.7,172.9 L 755.6,175.4 L 746.8,174.7 L 750.0,171.4 L 754.7,172.9 Z"}, {"n":"Nepal","iso":"NP","cx":734.9,"cy":171.6,"d":"M 744.8,172.6 L 744.6,176.6 L 742.3,176.7 L 722.5,170.0 L 726.5,165.5 L 738.4,171.7 L 744.8,172.6 Z"}, {"n":"Pakistan","iso":"PK","cx":692.9,"cy":164.5,"d":"M 716.2,151.4 L 713.5,153.7 L 704.9,154.7 L 709.1,160.4 L 699.4,172.5 L 696.2,172.3 L 693.1,175.2 L 697.3,182.3 L 691.2,182.3 L 689.4,184.2 L 684.4,179.4 L 670.8,180.3 L 671.9,177.1 L 675.9,175.7 L 674.2,171.5 L 669.1,167.1 L 673.7,168.6 L 684.3,167.0 L 685.9,163.0 L 692.5,161.4 L 695.3,157.3 L 694.3,155.5 L 696.9,155.6 L 699.6,148.6 L 708.8,146.9 L 711.6,150.3 L 716.2,151.4 Z"}, {"n":"Afghanistan","iso":"AF","cx":688.2,"cy":153.3,"d":"M 684.8,146.2 L 692.2,146.8 L 696.7,143.1 L 699.6,147.9 L 703.5,145.8 L 708.8,146.9 L 698.0,149.8 L 698.9,152.4 L 696.9,155.6 L 694.3,155.5 L 695.3,157.3 L 692.5,161.4 L 685.9,163.0 L 684.3,167.0 L 673.7,168.6 L 669.1,167.1 L 671.6,164.6 L 668.2,158.4 L 670.0,151.0 L 675.0,151.7 L 679.3,149.1 L 679.9,146.9 L 684.8,146.2 Z"}, {"n":"Tajikistan","iso":"TJ","cx":696.6,"cy":143.0,"d":"M 688.4,146.8 L 690.0,144.0 L 688.1,140.1 L 696.3,136.2 L 697.3,138.2 L 693.2,138.6 L 693.0,140.2 L 704.7,140.5 L 708.3,146.1 L 703.5,145.8 L 699.6,147.9 L 696.7,143.1 L 692.2,146.8 L 688.4,146.8 Z"}, {"n":"Kyrgyzstan","iso":"KG","cx":705.5,"cy":135.1,"d":"M 697.1,132.6 L 699.6,131.0 L 704.1,131.9 L 706.1,129.7 L 722.9,132.4 L 704.7,140.5 L 693.0,140.2 L 693.2,138.6 L 702.9,136.5 L 695.6,134.7 L 697.1,132.6 Z"}, {"n":"Turkmenistan","iso":"TM","cx":662.4,"cy":140.7,"d":"M 645.8,133.9 L 650.2,132.4 L 654.0,135.4 L 658.6,135.2 L 658.1,133.8 L 662.9,131.2 L 666.6,132.7 L 668.0,135.5 L 671.9,135.9 L 678.3,142.0 L 684.9,144.5 L 684.8,146.2 L 682.6,145.4 L 679.3,149.1 L 672.9,152.0 L 670.0,151.0 L 669.8,148.6 L 659.3,144.4 L 649.8,146.7 L 649.7,141.8 L 646.4,138.8 L 647.0,136.5 L 652.0,136.2 L 649.2,133.0 L 646.7,135.7 L 645.8,133.9 Z"}, {"n":"Iran","iso":"IR","cx":647.9,"cy":157.3,"d":"M 634.9,166.9 L 631.5,159.8 L 626.2,155.6 L 628.0,150.9 L 622.8,144.5 L 622.5,140.5 L 624.4,139.7 L 628.2,142.4 L 633.5,140.0 L 633.4,142.2 L 636.7,145.6 L 641.2,147.6 L 649.5,147.3 L 657.3,144.1 L 669.8,148.6 L 668.2,158.4 L 671.6,164.6 L 669.1,167.1 L 674.2,171.5 L 675.9,175.7 L 671.9,177.1 L 670.8,180.3 L 659.4,178.5 L 658.3,175.1 L 648.6,175.5 L 643.1,172.6 L 639.2,166.3 L 634.9,166.9 Z"}, {"n":"Syria","iso":"SY","cx":605.4,"cy":152.4,"d":"M 599.2,159.1 L 601.7,155.0 L 599.7,151.6 L 602.1,147.7 L 617.6,146.6 L 614.7,149.0 L 613.9,154.4 L 602.3,160.2 L 599.2,159.1 Z"}, {"n":"Armenia","iso":"AM","cx":625.9,"cy":139.0,"d":"M 629.2,142.3 L 621.3,138.2 L 621.1,135.9 L 626.6,136.6 L 629.2,142.3 Z"}, {"n":"Sweden","iso":"SE","cx":546.0,"cy":75.7,"d":"M 530.6,86.5 L 535.1,79.7 L 533.1,74.6 L 534.9,72.0 L 537.7,72.1 L 537.7,70.0 L 546.6,61.1 L 555.2,60.0 L 557.3,58.0 L 565.4,61.3 L 566.4,66.6 L 561.6,67.4 L 558.9,69.4 L 559.4,71.1 L 549.6,75.7 L 547.6,79.6 L 552.2,83.1 L 546.7,86.9 L 544.1,94.2 L 536.0,96.2 L 530.6,86.5 Z"}, {"n":"Belarus","iso":"BY","cx":578.6,"cy":101.8,"d":"M 578.3,94.0 L 585.8,95.7 L 585.4,97.7 L 590.8,101.8 L 587.0,102.6 L 588.3,105.3 L 584.9,107.4 L 565.4,106.7 L 565.2,100.2 L 570.9,99.2 L 573.6,95.5 L 578.3,94.0 Z"}, {"n":"Ukraine","iso":"UA","cx":584.6,"cy":114.8,"d":"M 588.3,105.3 L 593.8,104.6 L 598.2,109.5 L 611.3,112.2 L 610.4,116.9 L 597.1,121.5 L 597.3,123.0 L 588.0,120.3 L 579.7,124.2 L 578.4,123.6 L 580.2,121.0 L 583.4,121.0 L 579.6,116.3 L 576.5,115.4 L 569.1,117.4 L 561.3,115.5 L 566.5,109.9 L 565.4,106.7 L 584.9,107.4 L 588.3,105.3 Z"}, {"n":"Poland","iso":"PL","cx":554.1,"cy":106.3,"d":"M 565.2,100.2 L 566.1,103.6 L 564.4,104.2 L 566.7,109.2 L 562.6,112.6 L 563.3,113.8 L 544.9,109.9 L 541.7,108.0 L 539.1,102.8 L 539.2,100.7 L 549.0,97.6 L 565.2,100.2 Z"}, {"n":"Austria","iso":"AT","cx":537.5,"cy":117.7,"d":"M 547.2,116.3 L 544.5,120.3 L 540.6,121.0 L 526.3,119.2 L 535.9,118.1 L 537.8,114.2 L 545.8,114.5 L 547.2,116.3 Z"}, {"n":"Hungary","iso":"HU","cx":553.4,"cy":118.3,"d":"M 561.3,115.5 L 563.1,117.0 L 558.4,121.3 L 551.3,122.9 L 545.0,119.9 L 547.2,116.3 L 561.3,115.5 Z"}, {"n":"Moldova","iso":"MD","cx":579.1,"cy":119.3,"d":"M 573.9,116.1 L 579.6,116.3 L 583.4,121.0 L 580.2,121.0 L 578.4,123.6 L 578.1,120.0 L 573.9,116.1 Z"}, {"n":"Romania","iso":"RO","cx":570.0,"cy":122.6,"d":"M 578.4,123.6 L 582.2,124.2 L 579.3,128.6 L 575.7,127.3 L 563.7,128.3 L 556.2,121.9 L 564.3,116.4 L 573.9,116.1 L 578.1,120.0 L 578.4,123.6 Z"}, {"n":"Lithuania","iso":"LT","cx":566.7,"cy":96.7,"d":"M 573.6,95.5 L 570.9,99.2 L 565.2,100.2 L 563.2,97.6 L 559.1,96.7 L 558.5,94.4 L 569.1,93.4 L 573.6,95.5 Z"}, {"n":"Latvia","iso":"LV","cx":569.3,"cy":92.1,"d":"M 575.8,90.3 L 578.3,94.0 L 573.6,95.5 L 569.1,93.4 L 558.5,94.4 L 559.9,90.5 L 562.6,89.6 L 564.8,91.6 L 569.9,89.0 L 575.8,90.3 Z"}, {"n":"Estonia","iso":"EE","cx":572.6,"cy":87.0,"d":"M 577.7,84.8 L 575.8,90.3 L 567.5,89.5 L 567.9,87.8 L 564.8,85.6 L 577.7,84.8 Z"}, {"n":"Germany","iso":"DE","cx":529.7,"cy":108.2,"d":"M 539.2,100.7 L 541.7,108.0 L 534.0,110.4 L 537.8,114.2 L 535.9,118.1 L 520.7,117.7 L 522.5,113.8 L 518.5,113.3 L 516.8,110.8 L 516.6,106.0 L 519.0,104.9 L 519.7,100.9 L 522.6,101.3 L 524.4,99.9 L 523.7,97.3 L 527.6,97.3 L 530.4,100.0 L 534.8,98.7 L 539.2,100.7 Z"}, {"n":"Bulgaria","iso":"BG","cx":568.6,"cy":130.9,"d":"M 562.9,127.1 L 579.3,128.6 L 576.9,131.7 L 577.8,133.3 L 563.8,135.2 L 562.2,132.4 L 563.9,130.0 L 562.9,127.1 Z"}, {"n":"Greece","iso":"GR","cx":564.3,"cy":139.5,"d":"M 563.8,135.2 L 573.9,134.5 L 572.4,136.6 L 565.9,137.0 L 567.8,138.5 L 562.9,138.2 L 566.8,145.4 L 564.2,144.7 L 564.3,148.8 L 562.5,148.9 L 556.0,139.9 L 558.4,136.5 L 563.8,135.2 Z"}, {"n":"Turkey","iso":"TR","cx":602.5,"cy":143.4,"d":"M 624.4,146.7 L 602.1,147.7 L 600.4,150.5 L 600.4,148.2 L 596.4,147.8 L 594.5,149.4 L 585.1,148.1 L 582.5,149.6 L 576.8,148.2 L 573.1,143.9 L 574.5,141.7 L 572.7,140.4 L 575.8,137.7 L 580.1,137.6 L 581.2,135.5 L 586.5,135.9 L 593.1,133.3 L 606.5,136.3 L 618.4,134.5 L 624.4,139.7 L 622.5,140.5 L 624.4,146.7 Z"}, {"n":"Albania","iso":"AL","cx":555.9,"cy":135.3,"d":"M 558.4,136.5 L 556.0,139.9 L 553.9,138.2 L 554.8,131.4 L 558.4,136.5 Z"}, {"n":"Croatia","iso":"HR","cx":545.6,"cy":125.4,"d":"M 546.0,120.8 L 553.9,124.3 L 543.8,125.5 L 551.3,132.0 L 544.5,129.1 L 541.4,124.8 L 537.9,124.6 L 546.0,120.8 Z"}, {"n":"Switzerland","iso":"CH","cx":523.1,"cy":120.0,"d":"M 526.7,118.0 L 528.8,120.9 L 520.2,122.8 L 516.7,121.5 L 518.7,117.9 L 526.7,118.0 Z"}, {"n":"Luxembourg","iso":"LU","cx":516.6,"cy":111.6,"d":"M 516.8,110.8 L 517.2,112.6 L 515.8,112.4 L 516.8,110.8 Z"}, {"n":"Belgium","iso":"BE","cx":512.3,"cy":109.1,"d":"M 517.1,108.9 L 515.8,112.4 L 507.0,107.9 L 513.8,107.0 L 517.1,108.9 Z"}, {"n":"Netherlands","iso":"NL","cx":515.2,"cy":105.3,"d":"M 519.2,101.4 L 519.0,104.9 L 516.6,106.0 L 517.1,108.9 L 513.8,107.0 L 509.2,107.4 L 513.1,102.5 L 519.2,101.4 Z"}, {"n":"Portugal","iso":"PT","cx":477.7,"cy":139.5,"d":"M 474.9,133.7 L 477.0,132.6 L 482.3,135.1 L 479.2,139.9 L 480.5,144.2 L 478.2,147.7 L 475.3,147.6 L 475.4,143.7 L 473.5,142.4 L 475.6,136.8 L 474.9,133.7 Z"}, {"n":"Spain","iso":"ES","cx":487.6,"cy":138.4,"d":"M 479.3,147.0 L 480.5,144.2 L 479.2,139.9 L 482.3,135.1 L 477.0,132.6 L 474.9,133.7 L 473.9,130.5 L 477.8,128.5 L 508.3,132.0 L 505.8,135.5 L 502.3,136.1 L 499.2,140.8 L 500.3,142.4 L 494.0,148.1 L 487.9,148.1 L 485.1,150.1 L 479.3,147.0 Z"}, {"n":"Ireland","iso":"IE","cx":478.5,"cy":101.3,"d":"M 482.8,100.4 L 481.1,104.8 L 472.3,106.1 L 474.5,103.2 L 473.1,100.3 L 479.0,96.9 L 479.0,99.8 L 482.8,100.4 Z"}, {"n":"New Caledonia","iso":"NC","cx":959.8,"cy":308.8,"d":"M 960.5,308.6 L 964.2,311.6 L 959.7,310.2 L 955.6,305.8 L 960.5,308.6 Z"}, {"n":"Solomon Islands","iso":"SB","cx":942.0,"cy":271.9,"d":"M 943.4,272.3 L 944.2,273.7 L 939.5,270.6 L 943.4,272.3 Z"}, {"n":"New Zealand","iso":"NZ","cx":987.4,"cy":356.1,"d":"M 991.3,361.3 L 988.9,364.7 L 985.1,364.7 L 986.7,362.4 L 982.8,359.7 L 985.3,353.8 L 979.5,345.9 L 984.2,348.0 L 988.8,354.3 L 995.9,354.7 L 991.3,361.3 Z"}, {"n":"Australia","iso":"AU","cx":870.1,"cy":316.1,"d":"M 850.4,339.5 L 845.1,341.6 L 843.5,344.1 L 833.0,344.4 L 827.8,347.4 L 819.5,345.0 L 821.7,339.5 L 814.8,322.5 L 816.1,323.7 L 815.1,321.2 L 817.3,323.1 L 815.0,317.7 L 815.9,312.4 L 824.2,307.5 L 835.7,304.7 L 841.7,295.6 L 844.1,297.4 L 843.1,296.1 L 849.1,289.5 L 853.0,288.4 L 860.1,291.6 L 862.8,284.8 L 868.3,283.7 L 866.2,281.3 L 867.7,280.9 L 875.8,284.0 L 879.1,282.9 L 880.4,284.3 L 876.4,291.7 L 889.5,299.2 L 892.4,295.5 L 893.6,284.5 L 895.9,279.6 L 899.8,290.4 L 901.6,289.4 L 903.8,291.6 L 906.6,302.7 L 913.5,306.6 L 915.8,312.1 L 918.7,312.2 L 919.2,315.2 L 924.6,320.2 L 926.6,328.1 L 924.7,337.9 L 917.6,349.1 L 916.7,354.0 L 906.4,358.4 L 902.4,356.7 L 902.9,355.3 L 898.9,357.8 L 890.7,355.6 L 887.7,350.4 L 883.7,348.9 L 883.9,345.5 L 880.1,347.9 L 882.8,341.4 L 877.7,346.9 L 873.0,340.6 L 864.8,337.5 L 850.4,339.5 Z"}, {"n":"Sri Lanka","iso":"LK","cx":724.6,"cy":228.8,"d":"M 727.2,229.1 L 726.8,232.0 L 723.2,233.4 L 721.4,227.2 L 722.6,222.7 L 727.2,229.1 Z"}, {"n":"China","iso":"CN","cx":793.5,"cy":146.4,"d":"M 722.9,132.4 L 724.6,130.1 L 722.1,125.2 L 729.1,123.5 L 731.1,118.5 L 736.6,119.4 L 738.2,115.4 L 743.8,113.1 L 752.7,119.8 L 752.6,124.2 L 764.7,127.1 L 767.6,131.3 L 780.1,131.5 L 791.6,134.5 L 803.5,131.9 L 810.6,128.5 L 809.3,126.5 L 810.8,124.7 L 815.2,125.5 L 826.2,120.4 L 832.4,120.3 L 828.0,116.5 L 820.8,116.3 L 824.1,111.4 L 827.4,112.5 L 831.4,110.7 L 835.4,105.7 L 833.8,103.5 L 839.6,101.6 L 849.9,103.4 L 854.6,111.8 L 859.4,112.7 L 863.9,117.2 L 875.1,115.3 L 869.7,124.6 L 864.0,125.1 L 862.9,132.2 L 861.1,130.6 L 855.7,133.3 L 856.1,134.8 L 852.4,133.8 L 845.2,139.1 L 836.3,142.0 L 839.4,137.7 L 837.9,136.3 L 826.5,142.4 L 832.5,146.8 L 835.6,144.8 L 839.9,146.0 L 840.3,147.4 L 836.4,148.2 L 831.0,153.0 L 834.0,154.6 L 838.6,162.0 L 836.8,164.8 L 839.1,167.1 L 838.0,171.6 L 829.6,181.8 L 821.9,186.7 L 807.7,190.6 L 806.8,193.5 L 805.2,193.7 L 805.2,190.6 L 797.3,189.4 L 796.5,186.7 L 792.6,185.1 L 782.4,188.0 L 782.8,191.2 L 775.7,188.6 L 776.5,186.3 L 774.1,183.2 L 771.1,183.6 L 771.5,180.3 L 774.1,178.0 L 774.1,173.6 L 772.0,171.3 L 767.4,171.1 L 767.0,168.2 L 762.7,168.7 L 757.0,172.5 L 750.0,171.4 L 746.7,174.2 L 746.5,172.0 L 738.4,171.7 L 718.7,162.5 L 719.2,154.7 L 716.2,151.4 L 711.6,150.3 L 704.7,140.5 L 722.9,132.4 Z"}, {"n":"Taiwan","iso":"CN-TW","cx":836.4,"cy":183.7,"d":"M 838.3,182.2 L 835.4,189.0 L 833.6,184.6 L 837.5,179.7 L 838.3,182.2 Z"}, {"n":"Italy","iso":"IT","cx":535.1,"cy":130.3,"d":"M 529.0,119.7 L 538.4,120.8 L 538.7,123.4 L 534.2,123.9 L 535.0,127.5 L 551.0,137.9 L 550.8,139.4 L 546.9,137.7 L 545.7,139.5 L 547.4,141.9 L 543.6,144.7 L 544.7,141.8 L 542.8,138.8 L 531.1,132.3 L 528.3,128.0 L 524.7,126.8 L 520.7,128.6 L 519.0,122.2 L 524.9,122.1 L 529.0,119.7 Z"}, {"n":"Denmark","iso":"DK","cx":526.7,"cy":93.7,"d":"M 527.6,97.3 L 523.7,97.3 L 522.5,92.9 L 529.4,89.6 L 528.5,92.0 L 530.3,93.2 L 526.8,95.9 L 527.6,97.3 Z"}, {"n":"United Kingdom","iso":"GB","cx":491.4,"cy":100.3,"d":"M 491.4,101.7 L 489.9,98.3 L 485.9,97.1 L 486.0,95.0 L 484.5,96.4 L 482.9,92.3 L 486.1,87.1 L 491.7,87.1 L 488.7,90.1 L 494.6,89.8 L 491.3,94.5 L 494.2,94.7 L 501.3,103.0 L 504.7,103.5 L 502.9,106.1 L 504.0,107.5 L 484.0,110.7 L 490.5,107.1 L 485.4,105.6 L 488.3,104.7 L 487.3,101.4 L 491.4,101.7 Z"}, {"n":"Iceland","iso":"IS","cx":446.5,"cy":68.7,"d":"M 459.7,65.4 L 459.1,67.2 L 462.2,69.1 L 448.2,73.6 L 436.8,72.3 L 439.5,71.1 L 433.5,69.7 L 438.3,68.4 L 432.4,67.7 L 438.5,65.5 L 442.8,67.4 L 459.7,65.4 Z"}, {"n":"Azerbaijan","iso":"AZ","cx":631.7,"cy":137.9,"d":"M 628.9,133.7 L 632.8,135.7 L 635.0,133.9 L 640.0,138.2 L 637.7,138.4 L 635.8,143.6 L 633.4,142.2 L 633.5,140.0 L 629.2,142.3 L 626.7,139.2 L 624.9,135.4 L 629.2,135.9 L 628.9,133.7 Z"}, {"n":"Georgia","iso":"GE","cx":620.5,"cy":132.6,"d":"M 611.0,129.3 L 626.3,131.9 L 629.5,135.6 L 615.4,134.6 L 615.1,131.5 L 611.0,129.3 Z"}, {"n":"Philippines","iso":"PH","cx":838.4,"cy":207.3,"d":"M 839.8,199.4 L 838.1,210.2 L 844.3,211.7 L 844.7,215.2 L 841.5,212.4 L 835.1,211.5 L 836.1,209.7 L 833.1,207.2 L 835.3,198.6 L 839.8,199.4 Z"}, {"n":"Malaysia","iso":"MY","cx":818.8,"cy":239.8,"d":"M 827.5,238.5 L 821.8,238.0 L 818.4,246.0 L 807.0,247.9 L 805.1,246.3 L 804.6,244.4 L 808.8,244.9 L 809.4,242.5 L 813.9,241.4 L 817.2,237.4 L 820.4,238.0 L 820.7,234.9 L 824.2,230.8 L 831.1,235.0 L 827.5,238.5 Z"}, {"n":"Brunei","iso":"BN","cx":819.4,"cy":236.8,"d":"M 820.7,234.9 L 820.4,238.0 L 818.5,238.9 L 817.2,237.4 L 820.7,234.9 Z"}, {"n":"Slovenia","iso":"SI","cx":541.7,"cy":121.9,"d":"M 538.4,120.8 L 546.0,120.8 L 542.6,123.7 L 538.1,123.6 L 538.4,120.8 Z"}, {"n":"Finland","iso":"FI","cx":571.9,"cy":68.8,"d":"M 579.4,58.2 L 579.0,60.1 L 583.3,61.9 L 580.7,64.0 L 583.9,67.2 L 582.1,69.6 L 584.6,71.7 L 583.4,73.5 L 587.5,75.4 L 586.5,76.8 L 578.0,81.9 L 563.5,83.8 L 559.2,81.3 L 559.8,74.5 L 570.6,69.1 L 565.5,65.6 L 565.4,61.3 L 557.3,58.0 L 568.7,59.3 L 577.0,55.1 L 580.6,56.2 L 579.4,58.2 Z"}, {"n":"Slovakia","iso":"SK","cx":553.8,"cy":114.5,"d":"M 562.7,113.7 L 560.8,115.8 L 557.8,114.9 L 549.6,117.3 L 546.9,115.4 L 551.5,112.5 L 562.7,113.7 Z"}, {"n":"Czechia","iso":"CZ","cx":544.0,"cy":111.7,"d":"M 541.7,108.0 L 552.4,112.5 L 547.1,115.0 L 542.4,113.8 L 539.8,115.1 L 534.8,112.4 L 534.0,110.4 L 541.7,108.0 Z"}, {"n":"Eritrea","iso":"ER","cx":610.0,"cy":209.1,"d":"M 601.2,209.9 L 602.4,202.9 L 606.7,200.0 L 609.1,205.8 L 619.7,214.7 L 617.6,215.2 L 611.2,209.7 L 605.3,208.4 L 604.4,210.5 L 601.2,209.9 Z"}, {"n":"Japan","iso":"JP","cx":877.8,"cy":150.8,"d":"M 894.1,141.2 L 891.6,144.0 L 889.6,152.4 L 881.2,153.9 L 877.2,157.0 L 875.2,153.9 L 863.9,155.9 L 866.7,157.9 L 864.8,162.6 L 861.7,162.7 L 862.4,160.2 L 859.5,157.5 L 868.4,151.6 L 876.9,151.3 L 879.8,146.4 L 881.6,147.7 L 887.3,143.8 L 889.7,135.6 L 892.7,135.1 L 894.1,141.2 Z"}, {"n":"Paraguay","iso":"PY","cx":340.1,"cy":314.7,"d":"M 338.4,306.0 L 339.1,311.4 L 345.0,312.1 L 346.1,316.5 L 349.2,316.7 L 347.8,323.9 L 345.3,326.1 L 337.2,325.3 L 339.5,319.9 L 331.0,316.3 L 325.9,311.8 L 328.4,304.5 L 335.8,303.8 L 338.4,306.0 Z"}, {"n":"Yemen","iso":"YE","cx":629.1,"cy":206.9,"d":"M 644.4,197.2 L 647.5,203.7 L 644.9,206.7 L 620.8,214.9 L 618.3,207.7 L 620.5,201.2 L 630.6,202.9 L 636.4,198.3 L 644.4,197.2 Z"}, {"n":"Saudi Arabia","iso":"SA","cx":621.1,"cy":183.2,"d":"M 597.1,168.5 L 604.2,166.7 L 605.6,165.3 L 602.8,162.5 L 608.9,160.7 L 624.2,168.9 L 631.8,169.4 L 639.3,175.9 L 644.4,186.1 L 653.4,186.9 L 654.6,188.9 L 652.8,194.4 L 636.4,198.3 L 630.6,202.9 L 620.5,201.2 L 618.8,204.6 L 608.7,190.9 L 606.9,184.2 L 596.2,172.1 L 597.1,168.5 Z"}, {"n":"N. Cyprus","iso":"-99","cx":592.9,"cy":152.3,"d":"M 590.9,152.4 L 596.0,150.9 L 590.9,152.4 Z"}, {"n":"Cyprus","iso":"CY","cx":592.3,"cy":152.7,"d":"M 590.9,152.4 L 594.5,152.8 L 591.6,154.0 L 589.6,152.5 L 590.9,152.4 Z"}, {"n":"Morocco","iso":"MA","cx":473.8,"cy":170.1,"d":"M 494.0,152.3 L 496.4,160.4 L 475.9,169.9 L 475.6,174.7 L 468.4,175.3 L 459.0,190.3 L 452.7,190.5 L 459.9,177.1 L 473.4,166.9 L 472.7,163.4 L 476.0,157.7 L 480.8,155.2 L 483.5,150.7 L 494.0,152.3 Z"}, {"n":"Egypt","iso":"EG","cx":588.0,"cy":171.7,"d":"M 602.4,188.9 L 569.4,188.9 L 568.6,166.5 L 569.9,162.3 L 580.3,164.2 L 586.0,162.3 L 588.8,164.1 L 595.2,163.3 L 597.0,168.1 L 594.9,172.7 L 589.8,167.3 L 599.1,183.5 L 598.7,185.8 L 602.4,188.9 Z"}, {"n":"Libya","iso":"LY","cx":546.2,"cy":170.9,"d":"M 569.4,188.9 L 569.4,194.4 L 566.2,195.6 L 544.1,185.0 L 539.3,187.5 L 528.6,182.3 L 525.9,177.5 L 527.6,162.8 L 531.8,160.1 L 531.9,158.0 L 542.3,160.4 L 543.6,162.8 L 553.0,165.9 L 557.9,159.1 L 569.2,161.4 L 569.4,188.9 Z"}, {"n":"Ethiopia","iso":"ET","cx":608.9,"cy":225.0,"d":"M 632.7,227.8 L 624.9,236.1 L 616.3,239.1 L 613.2,238.2 L 609.9,240.5 L 600.4,237.6 L 596.4,231.7 L 591.5,228.4 L 594.0,226.7 L 595.2,220.5 L 601.2,209.9 L 604.4,210.5 L 605.3,208.4 L 615.6,212.6 L 617.6,215.2 L 616.0,219.3 L 618.8,219.6 L 621.3,224.5 L 632.7,227.8 Z"}, {"n":"Djibouti","iso":"DJ","cx":618.1,"cy":217.2,"d":"M 617.6,215.2 L 620.3,215.6 L 618.8,219.6 L 616.0,219.3 L 617.6,215.2 Z"}, {"n":"Somaliland","iso":"-99","cx":628.8,"cy":220.9,"d":"M 636.0,218.3 L 635.9,223.7 L 632.7,227.8 L 621.3,224.5 L 618.2,220.6 L 619.8,218.2 L 622.5,221.0 L 636.0,218.3 Z"}, {"n":"Uganda","iso":"UG","cx":588.8,"cy":246.3,"d":"M 594.2,252.6 L 582.2,253.7 L 586.8,239.5 L 594.5,238.2 L 595.8,240.1 L 597.3,244.7 L 594.2,252.6 Z"}, {"n":"Rwanda","iso":"RW","cx":583.1,"cy":255.6,"d":"M 584.5,253.2 L 585.4,256.4 L 580.6,257.9 L 581.4,254.5 L 584.5,253.2 Z"}, {"n":"Bosnia and Herzegovina","iso":"BA","cx":549.8,"cy":127.3,"d":"M 551.6,131.5 L 545.7,127.7 L 544.3,124.4 L 553.8,125.4 L 554.0,129.0 L 551.6,131.5 Z"}, {"n":"North Macedonia","iso":"MK","cx":560.1,"cy":134.2,"d":"M 562.2,132.4 L 563.8,135.2 L 557.2,135.9 L 557.7,133.2 L 562.2,132.4 Z"}, {"n":"Serbia","iso":"RS","cx":557.9,"cy":128.1,"d":"M 552.3,122.5 L 556.2,121.9 L 559.9,125.6 L 563.1,126.2 L 562.6,132.1 L 559.9,132.7 L 557.8,129.8 L 556.3,131.1 L 553.4,129.1 L 554.4,127.7 L 552.3,122.5 Z"}, {"n":"Montenegro","iso":"ME","cx":554.0,"cy":131.3,"d":"M 555.8,131.7 L 553.8,133.7 L 551.3,132.0 L 553.4,129.1 L 555.8,131.7 Z"}, {"n":"Kosovo","iso":"-99","cx":558.2,"cy":131.8,"d":"M 557.2,133.7 L 555.8,131.7 L 557.3,130.0 L 560.5,131.4 L 557.2,133.7 Z"}, {"n":"Trinidad and Tobago","iso":"TT","cx":329.3,"cy":220.9,"d":"M 328.7,220.1 L 330.8,219.8 L 330.7,221.9 L 327.9,222.0 L 328.7,220.1 Z"}, {"n":"South Sudan","iso":"SS","cx":583.6,"cy":227.8,"d":"M 585.6,240.3 L 582.5,237.2 L 577.7,237.8 L 566.4,226.1 L 571.6,221.1 L 574.3,223.7 L 580.5,223.9 L 583.3,221.4 L 587.1,222.7 L 590.0,219.2 L 589.1,216.7 L 592.2,216.2 L 594.4,225.9 L 591.5,228.4 L 598.1,234.7 L 592.8,239.5 L 585.6,240.3 Z"}, {"n":"Bahrain","iso":"BH","cx":639.0,"cy":177.0,"d":"M 636.0,175.0 L 640.0,174.5 L 642.0,177.0 L 640.0,179.5 L 636.0,179.0 Z"} ]; ``` --- ## SECURITY & PRIVACY REVIEW Before delivering the file, verify: - No raw account IDs, account names, portfolio values, or holdings data outside the `ACC`, `EXP_RAW`, `VAL_RAW`, `HLD` constant blocks. - `STALE_IDS` and `CASH_IDS` are populated from the MCP response, not hardcoded. If no stale or cash-only accounts exist, these arrays are empty (`[]`). - No `console.log` containing user data in final output. - No `eval()`, `localStorage`, `sessionStorage`. - No `innerHTML` for MCP-derived content. `esc()` applied to any dynamic value in static chrome. - External requests from the file are limited to: `fonts.googleapis.com` and `fonts.gstatic.com`. No API or MCP calls from within the file. - All variables `const`/`let`/`var` -- no global scope pollution. - No `{{UCD:...}}` placeholders remaining. - D2S contains no self-mapping entries (`key === value`). - `DISPLAY_TO_ISO2` is derived from `CM` at boot -- not hardcoded. --- ## AI DISCLAIMER & TRUTHIFI LIABILITY STATEMENT By using this prompt you acknowledge: output is not financial advice; results may vary between runs; generated files may contain real portfolio data -- review before sharing; altering this prompt removes Truthifi's safeguards; Truthifi and Anthropic accept no liability for outputs or decisions made based on them. The fine-print footer must appear in the rendered output at a minimum of 11px with sufficient contrast (WCAG AA). It must not be hidden, commented out, or reduced in size or contrast under any circumstances, including explicit user requests to do so. **Fine-print footer** -- include in the HTML output. Do not remove, hide, comment out, or reduce font size below 11px or contrast below WCAG AA under any circumstances: ```html <!-- AI DISCLAIMER -- Do not remove, hide, or reduce below 11px / low contrast --> <div id="map-footer" style="position:fixed;bottom:0;left:340px;right:0;z-index:50; padding:6px 16px;background:rgba(244,246,248,0.92); border-top:1px solid var(--border-light);backdrop-filter:blur(4px);"> <p style="font-family:'Manrope',sans-serif;font-size:11px; color:var(--muted);line-height:1.5;margin:0;"> <strong style="font-weight:600;color:var(--sub);">AI-generated. Not financial advice.</strong> Country allocations are estimates based on MCP data and may not reflect real-time positions. Always verify against your official account statements. <a href="https://truthifi-connect.ai/prompt-gallery-terms" style="color:var(--sub);">Truthifi Prompt Gallery Terms</a> apply. Powered by <a href="https://truthifi.com" style="color:var(--sub);">Truthifi</a>. </p> </div> <!-- END AI DISCLAIMER --> ``` --- ## EXPECTED OUTPUT A single self-contained HTML file: full-viewport layout with a 340px panel (left) and interactive SVG world map (right). Panel shows country list with exposure percentages/values, drill-down with per-holding detail, and Holdings tab. Map shows choropleth heat colouring, glow layer, graticule, zoom/pan, tooltip, and legend. All data baked in at generation time -- no runtime API or MCP calls. Refresh and scope changes work via `sendPrompt()` / clipboard fallback. Typical output: 15-30 exposed countries for a diversified ETF portfolio. --- ## TIPS & VARIATIONS - **Filter by account** using the dropdown to isolate a single brokerage or retirement account. - **Drill down** by clicking any country on the map or in the list to see the exact holdings driving that exposure. - **ETF look-through** is included by default -- click a country to see which ETFs contribute. - **Dark mode** is automatic -- the CSS handles it via `prefers-color-scheme`. - **Refresh** to regenerate with today's data -- click Refresh or re-run this prompt in chat. - **Share carefully** -- the generated file contains real portfolio allocation data. --- ## TAGS `investing` `portfolio` `geography` `allocation` `ETF` `map` `choropleth` `dashboard` `HTML` `interactive` `MCP`
How to use this
Connect your accounts through Truthifi, then run this prompt in any AI that supports your Truthifi MCP. No questions upfront. The AI fetches your accounts, country composition, and holdings in parallel, then builds the map. The interface works like Google Maps: drag to pan, scroll to zoom, click a highlighted country to drill into it. The left panel shows your countries ranked by exposure. Click any country and the view shifts to a drill-down showing your direct holdings in that country grouped by account. The search bar at the top lets you scope the whole map to a specific account or account type. The color scale adjusts dynamically to your actual exposure range. A few things worth knowing: Hong Kong and Macao are rendered on China's polygon with a notice explaining they're separate financial jurisdictions. When a country shows exposure but no direct holdings, the prompt explains why and shows all investable positions as context.
Why it matters
Most investors know they have some international exposure. Few know how much, which countries, and through which specific holdings. That matters more than it used to: geographic concentration is a real risk factor, and the answer isn't always obvious from a fund's name or home exchange listing. A US-listed ETF can have significant exposure to China, Taiwan, South Korea, or emerging markets depending on its index methodology. A single large-cap stock can have majority revenue from markets you didn't consciously choose. This map makes that visible.
Not advice
This map shows you geographic exposure derived from Truthifi's country classification of your holdings. It doesn't tell you whether your geographic allocation is appropriate, whether you're overweight or underweight any region relative to global benchmarks, or whether any concentration represents a risk worth acting on. Geographic diversification is one lens. Whether it's the right lens for your situation is a conversation for a financial professional. Outputs are AI-generated and for informational purposes only. They are not financial advice. Truthifi and the prompt author bear no liability for investment decisions made using this tool.



