{"id":2467,"date":"2025-02-06T12:57:49","date_gmt":"2025-02-06T12:57:49","guid":{"rendered":"https:\/\/dili.am\/?page_id=2467"},"modified":"2026-10-01T12:00:21","modified_gmt":"2026-10-01T12:00:21","slug":"find-us","status":"publish","type":"page","link":"https:\/\/dili.am\/am\/find-us\/","title":{"rendered":"\u0533\u057f\u056b\u0580 \u0574\u0565\u0566"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"2467\" class=\"elementor elementor-2467\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a08bdaa e-flex e-con-boxed e-con e-parent\" data-id=\"a08bdaa\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8403135 elementor-widget elementor-widget-heading\" data-id=\"8403135\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u0533\u0576\u0565\u055b\u0584 \u0534\u056b\u056c\u056b \u056f\u0561\u0569\u0576\u0561\u0574\u0569\u0565\u0580\u0584\u056b \u057f\u0565\u057d\u0561\u056f\u0561\u0576\u056b\u0576 \u0561\u057c\u0581\u0561\u0576\u0581 \u057d\u0578\u0582\u057a\u0565\u0580\u0574\u0561\u0580\u056f\u0565\u057f\u0576\u0565\u0580\u0578\u0582\u0574\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f273af2 e-flex e-con-boxed e-con e-parent\" data-id=\"f273af2\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-1e72738 e-grid e-con-full e-con e-child\" data-id=\"1e72738\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-c01fd85 e-con-full e-flex e-con e-child\" data-id=\"c01fd85\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6e238f6 elementor-widget elementor-widget-image\" data-id=\"6e238f6\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/yerevan-city.am\/shop\/brand-details\/2494\" target=\"_blank\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1000\" height=\"1000\" src=\"https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/city.png\" class=\"attachment-large size-large wp-image-4057\" alt=\"\" srcset=\"https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/city.png 1000w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/city-300x300.png 300w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/city-150x150.png 150w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/city-768x768.png 768w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/city-12x12.png 12w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/city-540x540.png 540w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/city-240x240.png 240w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-415b07d elementor-align-left elementor-widget elementor-widget-button\" data-id=\"415b07d\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/yerevan-city.am\/shop\/brand-details\/2494\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-arrow-right\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">\u0533\u0576\u0565\u055b\u0584 \u0540\u056b\u0574\u0561<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bea7372 e-con-full e-flex e-con e-child\" data-id=\"bea7372\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6d518d2 elementor-widget elementor-widget-image\" data-id=\"6d518d2\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.sas.am\/catalog\/brand_dili\/\" target=\"_blank\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1000\" height=\"1000\" src=\"https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/sas.png\" class=\"attachment-large size-large wp-image-4058\" alt=\"\" srcset=\"https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/sas.png 1000w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/sas-300x300.png 300w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/sas-150x150.png 150w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/sas-768x768.png 768w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/sas-12x12.png 12w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/sas-540x540.png 540w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/sas-240x240.png 240w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35cf71c elementor-align-left elementor-widget elementor-widget-button\" data-id=\"35cf71c\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.sas.am\/catalog\/brand_dili\/\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-arrow-right\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">\u0533\u0576\u0565\u055b\u0584 \u0540\u056b\u0574\u0561<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-662e347 e-con-full e-flex e-con e-child\" data-id=\"662e347\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-43b93a2 elementor-widget elementor-widget-image\" data-id=\"43b93a2\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/parma.am\/hy\/product\/brand?slug=dili\" target=\"_blank\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1000\" height=\"1000\" src=\"https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/parma.png\" class=\"attachment-large size-large wp-image-4059\" alt=\"\" srcset=\"https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/parma.png 1000w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/parma-300x300.png 300w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/parma-150x150.png 150w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/parma-768x768.png 768w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/parma-12x12.png 12w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/parma-540x540.png 540w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/parma-240x240.png 240w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-458f28c elementor-align-left elementor-widget elementor-widget-button\" data-id=\"458f28c\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/parma.am\/hy\/product\/brand?slug=dili\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-arrow-right\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">\u0533\u0576\u0565\u055b\u0584 \u0540\u056b\u0574\u0561<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3d30ec7 e-con-full e-flex e-con e-child\" data-id=\"3d30ec7\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f011151 elementor-widget elementor-widget-image\" data-id=\"f011151\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/carrefour.am\/am\/shopbrand\/dili\" target=\"_blank\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"1000\" src=\"https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/carrefour.png\" class=\"attachment-large size-large wp-image-4060\" alt=\"\" srcset=\"https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/carrefour.png 1000w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/carrefour-300x300.png 300w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/carrefour-150x150.png 150w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/carrefour-768x768.png 768w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/carrefour-12x12.png 12w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/carrefour-540x540.png 540w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/carrefour-240x240.png 240w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7ff21e5 elementor-align-left elementor-widget elementor-widget-button\" data-id=\"7ff21e5\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/carrefour.am\/am\/shopbrand\/dili\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-arrow-right\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">\u0533\u0576\u0565\u055b\u0584 \u0540\u056b\u0574\u0561<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4d42f3a e-con-full e-flex e-con e-child\" data-id=\"4d42f3a\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5cf9b0d elementor-widget elementor-widget-image\" data-id=\"5cf9b0d\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.rockfour.am\/hy\/shop\/?f_attrid%5Bbrand%5D%5B0%5D=1545\" target=\"_blank\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"1000\" src=\"https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/1Rockfour.png\" class=\"attachment-large size-large wp-image-4061\" alt=\"\" srcset=\"https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/1Rockfour.png 1000w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/1Rockfour-300x300.png 300w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/1Rockfour-150x150.png 150w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/1Rockfour-768x768.png 768w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/1Rockfour-12x12.png 12w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/1Rockfour-540x540.png 540w, https:\/\/dili.am\/wp-content\/uploads\/2026\/04\/1Rockfour-240x240.png 240w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a22d276 elementor-align-left elementor-widget elementor-widget-button\" data-id=\"a22d276\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.rockfour.am\/hy\/shop\/?f_attrid%5Bbrand%5D%5B0%5D=1545\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-arrow-right\" viewbox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">\u0533\u0576\u0565\u055b\u0584 \u0540\u056b\u0574\u0561<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4556996 e-flex e-con-boxed e-con e-parent\" data-id=\"4556996\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8a7248e elementor-widget elementor-widget-spacer\" data-id=\"8a7248e\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8dd3a47 e-con-full e-flex e-con e-parent\" data-id=\"8dd3a47\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2625666 elementor-widget elementor-widget-html\" data-id=\"2625666\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <meta charset=\"utf-8\">\r\n        <style>\r\n            @import url('https:\/\/fonts.googleapis.com\/css2?family=Outfit:wght@400;500;600&display=swap');\r\n            @font-face { font-family: \"Mardoto\"; font-display: swap; src: url(\"data:font\/woff2;base64,d09GMgABAAAAAC0wABEAAAAAZAQAACzPAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbiVIcgT4GYABcCIEQCZptEQgKgY1M\/x8BNgIkA4MMC4FIAAQgBYc6ByAMgTEb5FpVRoWNA8AMJW2MRAgbBwKKYRZFsHFAkHlfLPn\/c3JjDK0Bq+4\/ISg7MVTBMAwKY6497703iDooGAZ9j2gmHDIUn1dgdGRkPmEqr36nVS0j89d59FmR2YMfzpg5sPl2clC6jhiZcRn1kenaI5YIxR\/CG\/Wd6nyExj7J\/Xud2Xv\/v29LlqyQs2FFS2hYAKIuUFGZCrHKpM9smzJ3192kYw\/CNoeJ0RhvfZuFjYKNQaqYYBR2X0DFQgUDPTYP83rQH9RH+vYR4d96HxDimtf2mTP3JAckzNyEChG1bL3LDiFajP3CvSLbqHAxGoVE6ZSFA2MQGs35oM7PJ1MchyxLNicGyXaA\/+cjHSAPa5el3SbA8dalc+1R90rDmLKWU1\/ZlgsUQH0Kgl5Rip0\/zB1mbdPJZf\/\/bWoX3nv\/j+IAS3FkB9Be4KJiLVU5qUYTVrfVlnNmMQMAdHS5kEBI+PbtdrMCI\/VA2IYMi4YY\/l1aK5Oh201mDksKUSEIfSALLIHmY3b\/HLSKJKv6SjLi6P9VCYQbBda15XJQgvkwc6h2xkZrKUMnZ+gJ+zMKLOq20\/Z4S2ARRJlWwQ4QM8Tj8uJ0zebaziExAvmeQ6fNtMSjHFhwfXv\/\/7dpb\/ueTPJn1BYfsSaqfqCo0jSjd98b1lgzIxk0tmONjLPKj2DXxxnZOR7JuxlJ9if7kzdAVOXIMiz4A1EV4IqIOixz+rR9qhRtH3j+uXf6Z6UXsCyxtBNQZGu8PrW2Tepj2zbq4rHJO1kyp717KKpWyllZQDWFehJYGCArlz3GxMTbnQ0fQ3Ad+2V+Scxe2jTp5bqKCMMAwyGQ3K9f77Fcl\/FMXaQYBbhbFxCA6vCpxmgEgchkRKMhNh6ITkeCBSORIpE4cUiCBCRJEpIjBylUg6lTjzRqRBCAhS4ELi77YYGEAEDtGXe6n0kFEhjYF2GrCaflDFgYHq0YsglZgtfx3gYIg4QQLjHiZEAJSqCGUoz1cxp0YAXT1gCvqxFUVuAWuodQvCPcdLcMh2cY\/1zY03gm2DB4w1lc9K68ZGBXcAuloRpHld7uCv8ryvWi4zf2NNzjMPMHNNxbdA1iOCKYSWQWCivNKWeT5PG46LKrrtEZvPjwVaREqVbMFQyDMsixBMgMkuBkBAtIwcSKhQZzCsVZiA0zD2QXUVxGcRXhGhY6xEDmheAD8kVSBCmBKUXW6i0w1zFkHESozCLZrMsiIdJZRXUehJjOdVlXRcZisrQnQAIxCUIRgkkoiigUMSiSUKShKLbLKlRRcqoiNBjMGhGasWi9pGJiEIApX0G6t7kjzSozsoLqF9taluD+or8AgYIECxEqjJ2DS4RIMRIkSpEmXYYceQqVqVCpSrUayJ8TB4AQAAMAgKDv5LHXVRrJ8tek0HIvKVmQtyIJeIUhDFU4hacTAS4VLitWdzSMJqx60Q7gxYGBqQfSkYrpOpHAnxCMbSWhs1i9qV2mD1gwJuUdKH4vrGrBZ8fx0UJMlWSmutkv85GkZnxQhNF7avH4eZxEY0tSVRswHsoqW2JUrZFgVK1I1ez8aRdV4OrkqKzVerVKaYxWTLcgs32ThLey0kQaiBnjEgC3WYrhLKXSAQDh4Ec+zl4J8AQpMTcbB8Ff0DXUWQEAIDd9cxwDt1gQseGRPyE5r2skjCn4hCQytWGksfsPiB7lCU106N2fV3\/J\/bwO\/MzPlZ\/XAeKQfuWVnicJtwCACfUBf7cK9v8Hk5aBhtxfHFeVHWzcefHbufJUqI8yH99AtauOg+v4p9RILEG8DCMF9v7B0Nuje\/oUeGDD6XOcIr8MVJb+ZwEKcivXxlriLeG6DHsgcI\/ekYBFmTpqQAf+cGnSp35n7HHUjuhysNRNTz8HK9bkN+CT4\/GIUgOe9oanz4oi0Ekdd0J8ICQxMbCVt9zoRwamyL+kFjlSJOViXHZ6gWN0HI2aVzfUjA5bwrNAuE\/ijNJAYH3u5J7+1UPLVfOfDTGqXVKiX4cT4km4ecQddWAEGpY60ORxoFVPp95Yq8TiaECsWHTFPjxGiZ2qwU3+6KQpe5L6ZifuPpGL\/19nvWzbNY10EuKxSacaRK2C6iw42TiEYeDceBPssOqh0YsssQN9AiIOJ6rH1Etfu4v25tgB9HX12f4zIQZSbJ6JOs2Mw83mbPSdUXAf+Rc2YKjrDaDqSOoiLtxyNBYxylsqOpINpIF4LjduqIjqpDaROlQznd4SOrcuYijZoD4xqnbPg2YO1ojVF9aNGaBojcwrwqTjEHsOwAF3lwg3jnpldQA\/w8N8xxFA1y1bxD8jkPOWyhoj8hfU91G9OLrYOw\/FfA\/1EQc\/8sORYu8k7J19oRu7N7DDeyhwBxdivXIRq2fN1ShHmS\/hA1fHEOcC6nbJxYG5NObzAKqT1ZsVLd9XDQ9SYYRuWBk4SRyEmSL+mooXVy0AJkMiCZd7EmP7YcAwU0DTzwPr6jGiV09WGsUjEuvv5ngWKkD4fKE0Owv+XG0eqiNHAascfRTyJwoCGgoDOooCBooDJkoCFkoDHZQFbDQOdHtnEOrr0pW98yBoSN5XCZf88wktaxp\/T7to2d749249wQyD24hzPMEFFlxiwRUWLLBgiQXXWHCDBbdY8BRLagmsxipaZUc2CwYyUgb+FPGW96brN8waXDlXN8cNgAkCaUtalDo6dS7ZEIC29M0ufpCTbTFubsWMs1F4pZaqOxdNnS+1B96j7znADKuSYS2i4yk5FkNwm+C6sS6LZR99e98ph8AqJjZ0Eq7HLyLHIzR3Vx2PpyeJbDVjT1C0oPUYTUgQRKYM7+TBRF4nIVybYjtWfX8oktmtFzb7FERAanRjvzB1y4UCgjmrm7xfgdV8up3BWQyNzCgNkhdIgF\/qyVh1En6qw3xhKifNJ+pr7FqbyEIoKuPjCg3XqhzrHD0JLaAxdkKdqTuSisn0ctwXFdt2EoBGknFaNEKb4xOUaRNo1ohGlWoqGg\/xyOs3LdFKTtAkyxTTJGiRVtFJcKI+2jkdEpi4mVinrC7+3XLBpM0jjg1RTAKpXRwHgyjZHHm8F6HBqlgjvMvAFjEm6c6Isp1LBerJkgnPAiZr3GuXfkAAWCfH64miZvN+di5D0BDJ4ZYbDMfmVANWtSnryCvB6a9c9NQcV1fiUxZ6o6\/WPHWlmddqnnkuTpJmc8xHpmfRYMP1ErpuIkhRNZHfmUgHNZ98F0U3gEYWIfJv1MVumWcbOa7\/IyaJTOwitey1V2XR2JSJW8WKbvbitCJGukVwZ9zKjlkkuAHfVv21b\/SQ5eICFzy8nZU7w3frAjLQeeSS92qelOj+SghGggbjvKUSZlibiGqd0WZZ6JEWdtIWcBJGV8DLkE5fIEgYQ3EY4SeC7BkrJCljqpDliMwVipSxVEMFS1XqYoMmYWwFugwZ7AWGhHEU44SNiszlFkvKuKpxYwXjrnCkjKfaXSjYi+M9MKWQ7KE4vI4vN5TWHxTy4evUnxP\/Gbp1kExtDjTmMFpW7unqPbyD4PTxCR2ZzJHZHFnMkbVmaA660w8TOnGaE5c5cZsTT81wHTzn6odMKSmJq9ou7biWsbf67iczp+kfoUDYuaF0yNpB9An+bAVQN8CZDhw2p8H1nxt7sqYle8eRL4znlsgKccEJ3IV5QchrRq8MhR+ngeJ901Hi4n+fGQ3aPmygOdycUn+8H2hljtY2mPA8nvOIhxve9KGbewpbXM\/Luop6YTDUDvhQx28HMJdZOjXz2NT1JwPYALZnB2XLM48XLB\/J6CZ9da+w5WGr56opHbJjRw6blmu13LqWO3g8Ny2zruV9fWser41bPnAOcs4KK4b+rydrhZO6orz0XgytZUBYOj4wTDXEK7Jjwwe9A+ThVCMS4b8HIewcKKwV75F8bjvptl8FUVA2MhSLAfwiqgHnGXg2FHJcowgI+0vSJotgUJ9gQKNOFUjcZ9AYXoR7BZr6gjpgaSfQVkrYRyToGOajVBmKwwrq8qB9aWoYqvfiQbxaDLLN0KzCBe\/JJMDtTyBZaEhYzZIveESDMYhRnNDecZnBAATBctPDCorQCow+B5FoUmbp7Y0b6HhlA5KRXipmeZElSEsYWpwY1ARADQzYpbJbL74zaV85exQIuayaBSVGaDXKFisCfrh1GtX\/5EkxDdgs4JvaLtklppq2JI\/hP2BYbUu1MET5yKeUeGe3N5GS4TzWbt44jeQqhQ1UhLkApnZwCdhAxWNYql+nVk3jowYcWLiy0CWMcCmhbsuSlfy9YgpjvAgLeHG2xAjABdh3WZaQpADHSrrkbjCa0ONPcVbDMvBzf+hYgt3QU6dmLMmjKS0WlsG3MIVly4r1bfvAhXG1LeEFnQR2ec7oAQ\/vBH4PZHAsx+TgqLY0rliAZlET0jg\/S6DIT0pY8\/ET0kzR2Xb1l1V\/6325ZDzwsZxnggChe11lMQhGhnSBiO3oViKFZB+z3ZD6rGsg2zoA6Wdr1ViwijIQ9kncK0Uc2qpd3vvaCQyKjD9ZQOr6vFaO5pjBomwlYEyaDZMm2hC3lJtkFLgSmTPqjtWCmUKucJ70XKJVVSTc0dCn1u16tRYpsvTTTHnrPXb8n2wOEj4aziA6JscyLBAp0mygoXS93hpE8DIvH382tGbVKQzHof9C+dlSYa2u5R6G7NvMhIBgo\/ZezA3UJLLjfIwvuIWVLkwtHDNMAgxAioOcTHsRv1Fp3IKiFREibbA+dg21LqpI8GgDbUH57tVWePLqS\/vRRwPMnSZlzPPxaOlRM1kJjsmVRdSTsimaJ\/IZAM\/knqCO7BJh+E+o6G\/7GuFlgOMGVbz8RwTvnYRLk7wI7MT+swrybKCZak\/5KOWbkWOOI0SWUPwQEsagPEvXW5SDZ+997aU8AxXCYIX4peoK4GniiIEdz31n68BTXGi22XhEixvYXVX8GxiZ1dKt9UUOYTogFVr861rX13ptjMLVm6B84Zr\/6DX9hS2BnceySDmgshLnz2CBvDTI5UJi0Xn5xaMLW2wXFaDMufd6cs3p8gIoh2F3ioAilg8Vc2j4g8tD1EgiuQZp7iWOM4mNW8A6XZ7xQQfkKgfM6gE3bkedl4b0y5UVPOH8XyxroE4qhZ6OEyT1RGnc5ZNRdVGovPSucgpSrgJlCXlJeYiCEXwtQjdtPFC5\/UKbODaSoCq4Usq7hZwcSB0aHSUhL\/nsFeRdrm86yQQQrU+3FHZywUaRyr35gGI34stksvReXZ3t+IuSfukUPeN86jIdiq\/+fEpTknRUxeP1NFSIyGRUFm+qicAsV0ELpmyFnsF8qsx7n6QvvagzK6jKEU8IlSKXh7r7odrPzPCtCTYJE77WaevTVVMU+bA3juZ1abXAiThK8FbVl0pMUZ4FRTsARIhG72m94M+abOxc8TOYvXvPyWSjWWxLqICiML83\/G0IpJAiH1ZoVaTc0DdG5OMUfhsS2agUUQVws1ITTV8E7\/0aKL8qz7gOWevLG+soRWgb1IyGJAEUAUW2kpdUhChBsJrkpf1aUFSOw17VPJRhqnr6Wx2qJRgD7A9U2oNefZH+0NRwV8\/k8JC+WB8m9\/e7Hzqjr6VPpN8r4ES12M2rVOZD7pR4amjr7OmaEn6cvG8xiXDbMNsQ2fi6n\/BNHAJVzB9DJoONP\/\/3h4b+VTX8HDSByamYjQYJz49b5xAODYVlzYjPT1lnEvmjpGw30pcN+4ZYX+K1OCIO1OgmUyNNTPdpVH18MZ\/LcKzWjPfv+ZkWrlUdXvRgsHgfhHZNUlgUPjUYnpCaGS6KBJsV1Y6uN1X+O3ikVfJkO3oHbmTxpFBC5GBOCXd09XgoctLSWNz9fulLz9SCJSqo0phQBmRgoU+HG4pO53KDbN6LI+Z8MtaZUHdFcs+BrdXxp2+m9rauxGYu1G6pzTx5K4a1jZlRNfkultX6NrZ6MuOj6OPA6Joz\/c6yK2Nyncc8yd0K6KC5q6ayo6URW4R0K8WkEpcWTYY03m+F8H\/Qy9cHdw4VrX3bPWrWJ+4z+dhjltATQphlMJCrCxM47acvEayqh6xPOIgcaLkfbePtcm0PxEAGxGeRloftwi0sdLlLHtntOWYF7t4UIH0JuScGFkXvKX14Ja2wfJla4FLvTRYXbH6cV+kjtYPlFQcGR+hVIbAx6+DgkG\/gRuRZ5k7ZronDcl2sXWewPaQ1HHZY8WwvT3aNH8iqLtLKOLUkH+9D1O1OfGf03Ym0\/BMX198Zep+CwxfOIi0P2YUHypoTzeHFY\/9\/pGUqMwS+fFpbBFcAmSAItqNaRo8lXhDPBPgUc7wzj3GPhdOQ3vk+aZzy+i9m6CgF1I\/HobGH01NVC+tLz\/pn9mSmZ\/WcDShZ\/XfRORp5M25bZcS92crKc+d5nYZi49LyFfmqM6dUpqq3H9zWEbEFl8fHR2lxGV+3X0whRNyeOopMN0Xg7W0RhAwzD3\/SZy53Nfr++upMXHfD19hViiMf6C6LOzoluMbYz6FvVpOPbSnQk9DgSkbpjWzN4v1go\/oDtMjd\/48SHl3KGIPtbL\/YjYhAxpjVLejTT\/F\/LPRX9bLEXL\/hg40FvkGF3V4pCV1ITIHfQmWN6Ftcb88PKm2piFowmWNKN6wV0um0M\/\/Xo4P\/Y5pPNSzgw0qGEZmCeSa99ljHiC9+Kh11malF7x+Tfbt1g18qFcecnEzIThuODB1O0hZtGq169zt\/cgza0qQ4BYwQqoL9Cf0XXCouX+id3+nicQUnn++CBQtvQS9turTnY1PC3sbpmZWv0Qxt4pFxrPquRPLIZGSWirs0KVvI\/D6x0+UnzLp6+Hv\/L9EvcmzvdFyWymHR4YJruMFXSIaIIAfHf9jWnDZFfSnKTET8e+ouOtcW7aM5\/h6mZ4wLiduP35nlg2ZQfyhCVNW26wKVF4zvfQ3B1uFqoRuM6GSvfSsVmP4\/U1nhvMHg5KHjPTyUV3SUHWr7PrcI8+LCGyawvj0uKDBDS0rx8vc2tpD6uNzVRN77h+iH\/GBd\/WNh7XDwrl8qE5W\/56PX36uDeWUnXia3cp+V5VwvEtO6hrvI9e6e2V6k8ZpjNnyL5dIofn5RheB9LJv1M6tppUmcGM7sRkaTm13QGT5meG324og4P9Wdsu6Rirq\/XbpxSy9uPHz0\/N7VBPS4p12ZaePp4gQ5HCGsdMQ94941MWqn20fzggyK6hhA4nERg6YpX1fCPOBWOG4ykfVPwYTJNlvXuTnB3C6+UhNHenSELaPRMqm1JFjSmNRs5kiNjnJkYM1TF9sx2w4I4yJPVldjhjD2gBIZM8Q1WIRO\/M9f4x7iuvx7WbR8jXvteEfDk395Q0P\/8xsfd+h3MB+D\/KGkE0hfp12\/XXj1XXPjs9mjQcQ2ikmPaGw2aziA0BbvHIS49oLpLzs5cVhukoV+Hv2s1R86cXhM9miTJ+TRSbnjJDBeVZI\/XhUFmaXMRktO1OSXjFWHSQh2+GEEWt+f7HoZuJqRj1OELEDzKQf5AcnmrQ5v3k4tiN6Nv\/7j6fBn1KGlND4tpSy2uXs5MoLO86Q4tJrHDnvFtCSgCeU0BHuTED4ulZNNv5jSh9tPsA08SsqYPH7i\/Fnh+Yrs+EyvFAenOBnXZcG5d69JNq\/7BEB6eUz6QGHnuaEpATgPF9oWJ1NTCDTSvoDU15m\/\/t4VSlHz5qoW6uPXuZqDceuLtBpxWrlsCp\/3V0kD36SBb+iPqUhyPpYOS3OeqkiMYr\/StcXLuaa0AA7wB4rF3yiYJG\/3ASqVeM2ru1rIn5BMSiy9Pjy3dLVccOY1OycgA8qeVfqGgPQ51brd7wou7BtPPmrwZHFb00LpENsOrZerqxuH1rXXBDIgOFPNTnKPhrL7bN37gvDs46hEIS0aDepB+nMTDk2FpJXPk8mDMTrJsZ1zwWWXgGbVBfIRLM+wAF0x6LAPV7j3emBT7Yeo9nG5jOHI7uuJJSkx9vbRiXCkQ4SFdYxHMdqd969Z+7HSC9atBuoaV7uz+vObA80vzwjO\/JvpeBnJIgcdStIeq3\/YSskKMhsFDSoQI13JyffPYlAAZF8KPAtZp3T9yqz9ZNmzQHpZAKTP7Yh8AYdTp+8Mo2FmzxnYvHM\/qmGZ9q08F3\/PeVCgyMv8dZfR1vaCWbzerd2a+OoMvUaB6B\/eGrmrrkpDoF5XpedsF4cJ8nXeQmR\/UIoREDF5EDI9xoOfok31nmpMosRUUdwmshQcLdT6FGJKb4ZLqwR7jhBIL1vjR9IXLAP\/ujI3ff6O1YG+Uig\/rJj1esQ\/PW2OmvnwIEyiMfzmiWP9SV2x78q6knMQQg+EJ2Gz9wNzuf1WSNTqnWSW6RTrC1MvnZhWv7sUQlCPdeOUYolxDMwWEjoayp6NtL8l1ylWN+GSyuuuo\/I50kKedylVmJh2tXWb6c0h5mX0G6PV+5AqQNaRZ4XoYG3pqNzgPRy\/sSPojjir63qtzG7meCS7xr8m4S8QN1zdLhQ4+Lt1bzZcYQAunLPa4hQIWERTJ1ckcpfLzbAMvfnHniXpE4miuVCNzP3N\/i3+1j4RF9pQRUyyPjKYEGVUiY4uxbs7FmX5BwRl+sOL3PcKTBPi5s\/kMurO5sbOJ1TmzvSnlbpiHmn77iI7+UW5GVJdBZ7MHx1BSGf8YBkzPVWAm1NT4cd9z7nm72VNNHdxq1EX7HZNN93ePWB3uknjq6O7g3sSMRIXFpZkF2vkSnH262DP4dttwnPDttYQEtY3TaiVQl9u\/y1iT\/K1T0sMxVo2btuaPuOE8DPP9s9PWryc0Vi7nJG+lMeqXpmuLvWY8d2b6BqAMbEPtktAc6oaJvJYit\/YrgA7ltE\/A82ASofZS60+XmVFPl4h+d4Oxei9iHI2+zFbvowfu9YW6M722PWZTcmRDYI0HiaEU\/wroOzZlPV6cJwQyGYOYS\/QNq389vWMO3uTML2BjYyY\/HynWYQveWWWLCD\/eIR85bftYWKM3KJS85r5B9htdZEp5YvlooaENa7mYPy6mFZ5NrUOmjeyqyHrwnJirerz+XTHsbL4qPGg3o97PEswpOiyBKfJ9BGZDvYsXMDbge1pCoSquz0W2nyQFHn3sT9ChdAj7CNwPjQ3g3G2bj4n4k6rZnPEynwubSmj+MfHDzxcy0hb3USbZlP9sfYRDGs2dl9P3vojJov1qC7\/B4SjRwTXHott5E3JX+sRUD2mGYmUaHoCapK6ORV5DCeTY+jJ9UOVutvj26xGOvNG66ZbJl9tVZgCJkFFX3FVCE1M5F0iMSXbZX9\/nDiCT5g0mAYQ6w3Sh9P7JiF9Q+kJ8GcTxISWRWxFe8UiNqGFGIQOZLPnQuZNIsnL4\/WOp1OTuRLiCqT5ggMBcXkT\/p8WLL4lly9mZzGkvJnhY1I7f1g5rgR6Zf8XCqwWHe+8XLkj2P1BBnx6RrSCZB7yzA2i\/A3jSwC1qgQ1tHKKspsRx2hP63dGi9bGKEHlKvkrkZTrVEIDE6C\/2PW1inq\/R7Ivov5FL6WHCJVIFXibK7skKCEVvZWoSh7OuwPNap+ueQFPJXwYfj5npZyiHWpUjThGa4n1hlfdHZOSHN23rr8RYhSMnAwpbS33GDP0wfZzz+vPOj3+VyIqWM79M170S68+GF+G7I3eFqjjmO0hx7c321OAjm\/x0THHo+SmN33uauSPswq\/W2cj7ILcSAg0OZGW+Y0PKhOm+ARyDMeVWBnVeLRzsM8\/v6VrjdGklPmumZr2V+esac9+M6YENTeFUAVL5MX9JmZIlnxpY8N5G0des59o7v1QHh5+PgCR6BVZw67aDmaAfTk7tkvvUJU\/GcThTeqwjR6B0hft4yYINQ+RowZyuzDUmxEUjKrj4LKJ9TteHMRQIxiYeoyZnJTMso3NsrnZ5eq1L5sBDcTAw1Nodh3+0rLkKSds+3i0PgK997x+UuSYLkqve7ePBH7GlGsqIZYwpDcd6\/ta0Zr\/HvJTQyWyI2sSvQIQ4efDy4\/LNREOHz5qDUmK3EH84JDrgIQJIMeDVnBheD3UAoas8IJTzpkESOID0kmA3OB\/wiV1Ld8Z6rIBFHehCkRhQSDEhQC0wHsyPWHPFxeoM0umbdgK6tqLTJxBT6SxQOH3YiztFMH9xJl47dqByDEXsNdhyYwxoOMkoE3qOqdpAUKE9K2z4004\/Dl0Qf6KfUQD20IrtJqhfi8C1hip2rStRdUKr6Vu19tx\/9fUfaMKEPF\/tXiPNt2iJtOkSDYi3\/N72lVUDSeAC5dS4ZW6SYtkhxXmHJ8T5EmYWjEaMSxJ+PBdzbl7sh73f43dN0rCBtG5xE1qRBfA9Jwu7oNvDAN5akVNYSPQY2oeIjaB6bdTFQM2q1mLBo3kspXU8R3D7RwWgkvdvYAJ0EaP5BmUVnDl+1DCi8mkbecEcXecyxNKW+F2fDzUhhIEd4CI0KIU5+7BA6WqHgAHo0xwKxndFUDwP5Lsfpv7qFgWYICjq2fM9G33KGPWCdJZYdNrXiYmK75VMatiORGAKbdKY6h8NA1m0JNFuVL6Vo2C1BkLmrkH4njVKSVh7nAQaRxQ9yLTGelTiqRN4tRSB6cjmGYDod\/5OHbh4A0irVYdSPryCmtBDHEmVSJRluTspYwLM7Hc9w6XnsnKz\/0S1spa4qtfSBazllCBhTnLeOvER17u8v7SyZFk06a143RXBi3IPC7JOA3TN3iF4YhH7N0WUmNUFTnrdLWG\/eyMSwZk9Vu3KpAiaSvKuAPZPkGkoTXLDPW04Ciuhc6dmBglLGgRQvaBhWS2arAqFa1iBjZbon3QxEHEadG33gZrwZaC1WU3IvWF6Qyz0hGkEWCpQ3j79heUy680H2dpEkcWfoTgfxUnY+O17tsiLRoePAld6TJLY4HD2a4MB35o\/r\/1ZNKwTi0HR74OF90WKTc8O8HduRHCIODmnOTlNaFLRk0RAzEOJmZaW+lgTc9oiY85PsQM7YbmhKi6kVilKrdIL7aTIxleb5AGrPLtIzmQwQgZgT7IkpkLECBg8QxF74grEIXoRCoyEhGCAH+aKDzNu7JVxWYY7ByaQywUSd4hgi5rLg+RuE+NYMMSQBI544x0LGTylWh7RMhu1bqXgi0a1\/bdoRLoADEVfD6JdaYAmao3o1LD7LZEs2p0zz97lCRUuADTTdnrJKk39XraJDIRVVDSBuR+pDkXItJNy59iz95yId3Tc8AiaHyg9xvQzjkEa+UgCP6kVQZNk\/c4p3hmmqvt+6jwd23xiVhsnxexY6+ZwV5fOX3R0KuzWsynmcxEPg6\/I8lSenV\/6f7eHJwoMrVLq\/UCiwLS+3ZXPLNc0kC7RSVfYeBUAkmh4lVVuQAK5FwwWVEv3A7nNKZuCK3n1jAVSntA1V2zw5ZYlfuQxuVtZ5Vmsn3Y910Jecg3R1k7YxWltKdFRivk9ZbWFZvNnXxsDtRUFY6WcKF05UI6IbMC\/PAMR9sCDhGmPxuWAfH5RhnXxM2EUUXdIC8hgkpSr62oC8aplqhYsaRkQQhZAOZ1+dH1HC+AVBDa5ffFhLnve0qZYGAfC7xAQZOICzZR2FGVI5nmA81RCjPtqagy4iANUYqAJ\/ThU1ZRT\/AKr7+sdWtDU5qsFfnYYmG9agtTpawlUlTRApT7xMKIDsLgPRpPELWA6bI0tsJuE\/ZxjW2r8jkHeMmLOAQDg13psie8jEyTa9E5khbRZhAgk9rbavF3ECDg21oUCso1HdpQXq4N5eSVoesqNDwRRnCyyM6EGGmOsYGvLD1VuS9GmaPFwZ0b1oXOocqNdD8wu1AXxJAMqTc83yNtUahIL+\/QtqyopTib1Vutiar7VUj\/dZ8eSiYor9rGdVLSTGas0MP38vYdhARHArJGkanSSToAHpxJYUirZEohLsGDcAcBTOTVFcO3hnI2SSZq\/lqVfcwcw5b60Q6T2dfe5iqNIIjEqnIbCBOtNrqi8GRU4LPGGXWGgp3XZHOcDLwiwdQnxddtgIPdvIWEjNdtJ1Pvsx9CPYRAoK7Ll1ygFGNbtoju7wlWqWvVnRkg8IurLbv\/OVq9dUKExWkyhgFn6oOuYJyqqT+PqPFvE+C3kzl7wfvrns0Et9wttEh6aKaWcRM6G2axvtGlmX8CrlW5LyZsIWnB+nZ4IelYqzwzSqJHf64GtqAOJGc46e6QPMVNXQnTmslc+NoAljxcWFyUGCMTFfUlc7wXrRzsIFMpAJ\/ndUdDmeXAirlEmPPQjISqrlYZlbKLDpRbkSwA5QEzyXto18qlgCFnFfNyCGTo8Fh0wiAmG7JyIQLPnSKosvdhYKKx0qYLYZ72KfdjX+NYuJbjLArK0gy1UGdQzXENZiKaafpI9BCjUk46n6rBuT8GkE\/wvuY27XW1nHOm+wavHXMPLA\/pQPJB1BLEwhQbHsqzI6Xso3HM+R6V642hXtR7a\/BFK2neNHGaGZ9nrZrdarkEBam4FAV3nxRJ1dDSltPOIsWA1+QNjoiCKOkUiwFdflGELdLZ3reJD2zjfZinLs\/TaSMQboGdezMH1f5Onri+0T7EZiaTR0T6riQL4aGol0lMj0tShFVZ+LEI2aZIa\/cDAA9XpzEzO8fEq5hAWDPrafFpQ0\/qn1dUakGCRCkrog3eSh4S6cmF1rUiMywwdvLtDE1VT1ArpFTl1yip5AxIELHQDvkhQiorIkjlT2uBeHjrfB+posB8KitMMPZaWdtZ7AzikvoAJGu1al8yJuH\/heLW4NKQ6ECwmG7KsWMVSutnG6NZDvF4V5vhNvXuFQeiw3Wjx9DfSi\/3P8LiJFUVr5gpT0fpeP3zSq909Jr3c1TrCozymvmK2TI6y3l7eH5akTdSBgWcdUroEP5+BBADTOezFDreIwzVamhs6ZeRCmSYUCKziPJejz2v1mj9rQTr1XJRi6pEjlx63KM0GBQQcunVoWUVxiZvGlpYD0TQZJLRVpWNVwmaar9ERcEDKUH7HXz1FI3n9Nw9T8ptSkuxVf2o\/8XJzt3\/19B9o9Yw1BV9oYPuPMSqzgJSG2ntPHqzGmK\/YYbjslPBM131WK0aevs5SQYWZ\/84vqeB+5fop\/XQ1fH0vK3+227QbFHzLorDWWK5mD+XgQcL7v5sx19lcjoEd9\/WIXqVdeGm+F7nRZrp94mqPmV6P4shCVNYBGzMwk7FvXhY\/tZWrAu9DpKKC19aHPjciK+0Op45QGvPO9PTyErk4tH7ty+fP7h3+9b1qxfPn\/o6UrB6ROZ+ZxgNC3eJTieywT9GjKeE1Fl0PQmwkZ82Us6MhlroPTM8XORsaf\/\/SvEAz05a11FzkJOOroUDTTeHvCiBDS1vIm7gk7DVQWp320wAgBGnc+i4s64H4AxnUtaCP9m+A73ZDjV8MvkNrUxU9V16Cc0ra7XQ+ydRtzaUeRaLxnkkNnFhmdJ\/BlsxCXKYjcnI0tbz3KGElT6IT61jEZ8+wcnRgR0mqxg7FXJzq04bmPr6VFPezMliRb\/CFljM7msUT+js4lllngPrWZ5gaVsZWn01i1jsxcvPdKsFOlA2GbdBAszENcc4PtwfwCo2XUk56yovc7DuA2IOnrgmTPxHtjNGc+Xl6\/cNg\/ZhkfQ8bfnJyIpH1GDXmtJKn8\/g7CJVGBoEwix8rvsTNb7ls+ZRd3B7g+GrC3NzKOdM5QmeK6rRNM6eUW\/WGZqG5Ix6mXHTMNYs3m3OZ9OW1UxSJvxp3Z\/7kpNcU3\/oLSi8a4i7+UgKMIQDdky5iE8CVX1MFwf3fh4jR0e5T7oyn3+TztVoONNB71kiS7x9w1QYhs9faqmqF4soAhbb9\/5u1qtlNI9mbVPLMs9ShAh9yaRr\/4biqxhs\/fIE3cCgzVmsMTroNTbFeJ1Nl1tV28Sbk25V5R3icL8VSdfU3hF+Qs5wleOsJbidSwH5vidwVrtEDMFhcA0cHbUxdaaC52cZQbWle8gGDGjJlpkcLNE7+l6QjsifPq9w79BFtCEO7QaLEftwNPEc52enx4fbdU51eWIYb\/5vpvGnmEnhBwP4CcBGV7vBmviWI8617CEM1kAwW2i\/muEEBP9B\/nm2mm99yc+9fO2y\/J2JgPEP5H0IcyL5LwHay7ucizX8DiIoaFkQr1MDIAIPPGfBLxIevROd+us9QZ4oG9O3ReiZe5QPQky31uz+hPihrD\/hjMppDoWnMJOcP6N\/y0z\/S+f2lCMK5K6o4o8QIC+3DsHvZ0mIW911VOutrnPuTbaeczanREvMHpgU+IHWIsR38u\/PMQKiKscpA3qID+zJXQdZEi4+khDdJwiAhDb4b6Najpxy\/E8yQwEAwMmdxOY\/64qTf8afE3W3HQPWSwwIjTGf\/XsA9UYQdHfPA3RYqD2efuWHG+2E+WsK8lxl\/8ihDnhFn247KvRMYByj9QuCmn1Eu6sTCgsstVeSMgSfX9b6G9ugBLjReBP5aHv8tcTHjT\/1wSxJiOqgf8Gw9HV9ZEVobODuZZuojepliqy8I582FVJFwZAC2Gbm9rwQ0Ns+u0EyJV3okQoZ0wXlQ7rIbel66lrEamVzIsP28BEYKqcJQjc4tqq6Kf\/\/G7V2hyheI0+qaFAwUpBFFiAqHjJx\/ZOR3yK5qqGEHX8Fqg2KG9QNttWMa4obLxNbbw9aDZ42fb6vi4HAbw73aGF7XtXAUXDv\/oDPmIF6\/\/uZrutyAnuVBseVz057WKaQAvT4tmtmQRBTpcd+ABxXSoUQgNX9kIRNDgDcD9B\/NtLGJGaaHh7CRXh\/CNF9P0S4XFQPMdGLwSEStXgdIisq2EMUXoV3WvUQa9Elpx4eTUR9wd2wEbPG9OrWY4LBxcEpmqGCxJ1dhVpFR+wwbMJwV4kxkPp4pV2oK9XkJfVA\/phxhgBpHEgjRGEcO7tuvVwjk9qELZ5w2CC7Ka1WqyFxacpc224QrlIg\/EiZTt23MjCy1imM47gmXrbi+bLFC1UIfS3GcUbGrlU6jziu17AhAWRDJEvZtDRMSQO3la6HUmk8yL0WApA1rE3+7hPGpZDYVkWBZch5pQPKkARl9oWRSV+8UIyRQIGIZciSjiek8g53ydMIIYyUSxqopXZKGgrZnToYJgPuwGORiZCPlMtVYHctNlI+JL28QAoOKUUb\/IIUKg3NI1Jak0DppdFqMzCqTicL4QBoK1Vpn6NxXBFCrHHtZOMRafxWxuUpYan4vt\/NrliWAjGTOzxLd1Idls5\/xbmyMEEgzM1x8v9W1b+agOz8E9x6pQGC+svOyqOqjb3X1uxKQT89iZekQRNru7U1hfkvKg7iEXHKSZE9UjHhemSstgAZdxJCWyOOK9obAlECTYbQLgdpZ+I7ljgN7iBvmryXmMH9lo4lpWjwL\/83H1LDHeNzH0zKIMhYBAAA\") format(\"woff2\"); }\r\n\r\n            .dili-map-container {\r\n                width: 100%;\r\n                height: 60%;\r\n                position: relative;\r\n                display: flex;\r\n                flex-direction: column;\r\n                font-family: 'Outfit', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\r\n            }\r\n            \r\n            .dili-controls {\r\n                position: relative;\r\n                background: white;\r\n                border-radius: 8px;\r\n                box-shadow: 0 2px 6px rgba(0,0,0,0.1);\r\n                width: 100%;\r\n                padding: 15px;\r\n                box-sizing: border-box;\r\n                font-family: 'Outfit', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\r\n            }\r\n            \r\n            @media (min-width: 768px) {\r\n                .dili-controls {\r\n                    position: absolute;\r\n                    top: 20px;\r\n                    left: 20px;\r\n                    z-index: 1000;\r\n                    width: 300px;\r\n                }\r\n            }\r\n            \r\n            .dili-title {\r\n                font-size: 24px;\r\n                font-weight: bold;\r\n                margin-bottom: 10px;\r\n                color: #3b8061; \/* Green from Dili brand *\/\r\n                font-family: 'Outfit', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\r\n            }\r\n            \r\n            .dili-subtitle {\r\n                font-size: 15px;\r\n                color: #e73137; \/* Red from Dili brand *\/\r\n                margin-bottom: 15px;\r\n                font-family: 'Outfit', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\r\n            }\r\n            \r\n            .dili-select {\r\n                width: 100%;\r\n                padding: 10px;\r\n                border: 1px solid #ddd;\r\n                border-radius: 4px;\r\n                margin-bottom: 10px;\r\n                font-size: 14px;\r\n                appearance: none;\r\n                background: url('data:image\/svg+xml;utf8,<svg fill=\"%23000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M7 10l5 5 5-5z\"\/><path d=\"M0 0h24v24H0z\" fill=\"none\"\/><\/svg>') no-repeat;\r\n                background-position: right 10px center;\r\n                background-color: white;\r\n                font-family: 'Outfit', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\r\n                padding-left: 45px !important;\r\n            }\r\n            \r\n            .find-closest-btn {\r\n                width: 100% !important;\r\n                padding: 10px !important;\r\n                background-color: #000000 !important; \/* Green from Dili brand *\/\r\n                color: #ffffff !important;\r\n                border: none !important;\r\n                border-radius: 4px !important;\r\n                cursor: pointer !important;\r\n                font-size: 15px !important;\r\n                transition: background-color 0.2s !important;\r\n                font-family: 'Outfit', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif !important;\r\n            }\r\n            \r\n            .find-closest-btn:hover {\r\n                background-color: #333333 !important; \/* Red from Dili brand *\/\r\n            }\r\n            \r\n            .dili-select:focus {\r\n                outline: none !important;\r\n                border-color: #000000  !important; \/* Green from Dili brand *\/\r\n            }\r\n            \r\n            #dili-map {\r\n                height: 70vh;\r\n                width: 100%;\r\n            }\r\n            \r\n            @media (max-width: 767px) {\r\n                #dili-map {\r\n                    height: 60vh;\r\n                }\r\n            }\r\n            \r\n            \/* Popups. zeromaze-map builds the popup box itself with inline styles and\r\n               no class, so we style it by its content (:has) and need !important. *\/\r\n            #dili-map div:has(> .custom-popup),\r\n            #dili-map div:has(> .user-popup) {\r\n                background: #3b8061 !important; \/* Green from Dili brand *\/\r\n                color: #ffffff !important;\r\n                border-radius: 8px !important;\r\n                padding: 10px !important;\r\n                margin-top: -10px; \/* engine offsets popups 34px up, lift clear of our 32px pin + tip *\/\r\n                text-align: center;\r\n                font-family: 'Outfit', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif !important;\r\n            }\r\n            \r\n            \/* the little tip under the bubble (Leaflet's .leaflet-popup-tip) *\/\r\n            #dili-map div:has(> .custom-popup)::after,\r\n            #dili-map div:has(> .user-popup)::after {\r\n                content: '';\r\n                position: absolute;\r\n                left: 50%;\r\n                bottom: -6px;\r\n                margin-left: -6px;\r\n                border: 6px solid transparent;\r\n                border-bottom: 0;\r\n                border-top-color: #3b8061;\r\n            }\r\n            \r\n            \/* the location dot is centered on its point (not a 32px pin), so sit lower *\/\r\n            #dili-map div:has(> .user-popup) {\r\n                margin-top: 18px;\r\n            }\r\n\r\n            .user-popup {\r\n                font-size: 14px;\r\n                font-weight: bold;\r\n            }\r\n            \r\n            .custom-popup {\r\n                padding: 0;\r\n            }\r\n            \r\n            .custom-popup h3 {\r\n                margin: 0 0 2px 0;\r\n                font-size: 14px;\r\n                font-weight: bold;\r\n                color: white;\r\n            }\r\n            \r\n            .custom-popup p {\r\n                margin: 0;\r\n                font-size: 13px;\r\n                color: rgba(255, 255, 255, 0.9);\r\n            }\r\n            \r\n            \/* zeromaze-map has no zoom control, these buttons replace Leaflet's *\/\r\n            .dili-zoom {\r\n                position: absolute;\r\n                right: 10px;\r\n                bottom: 28px; \/* clears the OSM attribution strip *\/\r\n                z-index: 4;\r\n                display: flex;\r\n                flex-direction: column;\r\n                border-radius: 8px;\r\n                overflow: hidden;\r\n                box-shadow: 0 2px 6px rgba(0,0,0,0.1);\r\n            }\r\n            \r\n            .dili-zoom button {\r\n                background: #3b8061; \/* Green from Dili brand *\/\r\n                color: #ffffff;\r\n                border: none;\r\n                width: 36px;\r\n                height: 36px;\r\n                padding: 0;\r\n                font-size: 18px;\r\n                font-weight: bold;\r\n                line-height: 36px;\r\n                cursor: pointer;\r\n                transition: all 0.2s ease;\r\n            }\r\n            \r\n            .dili-zoom button:hover {\r\n                background: #e73137; \/* Red from Dili brand *\/\r\n            }\r\n            \r\n            .dili-zoom button:first-child {\r\n                border-bottom: 1px solid rgba(255,255,255,0.2);\r\n            }\r\n            \r\n            @keyframes pulse {\r\n                0% {\r\n                    transform: scale(1);\r\n                    opacity: 1;\r\n                }\r\n                50% {\r\n                    opacity: 0.0;\r\n                }\r\n                100% {\r\n                    transform: scale(3);\r\n                    opacity: 0;\r\n                }\r\n            }\r\n            \r\n            .pulse-ring {\r\n                animation: pulse 2s ease-out infinite;\r\n                transform-origin: center;\r\n            }\r\n            \r\n            \/* Category Container *\/\r\n            .dili-category {\r\n                margin-bottom: 20px;\r\n            }\r\n            \r\n            \/* Category Headers *\/\r\n            .dili-category-header {\r\n                font-family: 'Outfit', sans-serif;\r\n                font-size: 16px;\r\n                font-weight: 500;\r\n                color: #3b8061; \/* Green from Dili brand *\/\r\n                margin-bottom: 8px;\r\n                padding-left: 2px;\r\n            }\r\n            \r\n            \/* Select Dropdowns *\/\r\n            .dili-select {\r\n                width: 100%;\r\n                padding: 10px 30px 10px 10px;\r\n                border: 1px solid #ddd;\r\n                border-radius: 4px;\r\n                font-size: 14px;\r\n                padding-left: 45px !important;\r\n                appearance: none;\r\n                background: url('data:image\/svg+xml;utf8,<svg fill=\"%23000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M7 10l5 5 5-5z\"\/><path d=\"M0 0h24v24H0z\" fill=\"none\"\/><\/svg>') no-repeat;\r\n                background-position: right 10px center;\r\n                background-color: white;\r\n                font-family: 'Outfit', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\r\n            }\r\n            \r\n            .dili-select:focus {\r\n                outline: none;\r\n                border-color: #3b8061; \/* Green from Dili brand *\/\r\n                box-shadow: 0 0 0 2px rgba(59, 128, 97, 0.2); \/* Green with opacity *\/\r\n            }\r\n            \r\n            \/* Location Indicators *\/\r\n            .location-indicator {\r\n                display: inline-block;\r\n                width: 10px;\r\n                height: 10px;\r\n                border-radius: 50%;\r\n                margin-right: 8px;\r\n                vertical-align: middle;\r\n            }\r\n            \r\n            \/* Color scheme for different location types *\/\r\n            .location-indicator.supermarket { \r\n                background-color: #000000; \/* Blue for supermarkets *\/\r\n            }\r\n            \r\n            .location-indicator.chain { \r\n                background-color: #e73137; \/* Red for chain stores *\/\r\n            }\r\n            \r\n            .location-indicator.shop { \r\n                background-color: #3b8061; \/* Green for individual shops *\/\r\n            }\r\n            \r\n            \/* Option Styling *\/\r\n            .dili-select option {\r\n                padding: 8px;\r\n                font-family: 'Outfit', sans-serif;\r\n            }\r\n            \r\n            \/* Hover states *\/\r\n            .dili-select option:hover {\r\n                background-color: #f5f5f5;\r\n            }\r\n            \r\n            \/* Disabled states *\/\r\n            .dili-select:disabled {\r\n                background-color: #f5f5f5;\r\n                cursor: not-allowed;\r\n            }\r\n            \r\n            .select-wrapper {\r\n                position: relative;\r\n                width: 100%;\r\n                margin-bottom: 10px;\r\n            }\r\n            \r\n            .select-color-indicator {\r\n                position: absolute;\r\n                left: 10px;\r\n                top: 50%;\r\n                transform: translateY(-50%);\r\n                width: 10px;\r\n                height: 10px;\r\n                border-radius: 50%;\r\n                pointer-events: none;\r\n            }\r\n            \r\n            \/* Color indicators for each category *\/\r\n            .supermarkets-indicator { background-color: #000000; } \/* Blue *\/\r\n            .chains-indicator { background-color: #e73137; } \/* Red *\/\r\n            .shops-indicator { background-color: #3b8061; } \/* Green *\/\r\n            \r\n            \/* Style for selected state *\/\r\n            .dili-select:focus {\r\n                outline: none;\r\n            }\r\n            \r\n            .dili-select.active-category {\r\n                border-width: 2px;\r\n                border-style: solid;\r\n            }\r\n            \r\n            @keyframes markerEntrance {\r\n                0% {\r\n                    opacity: 0;\r\n                }\r\n                100% {\r\n                    opacity: 1;\r\n                }\r\n            }\r\n            \r\n            .marker-entrance {\r\n                animation: markerEntrance 0.5s ease-in forwards;\r\n            }\r\n            \r\n            \/* For staggered animations when showing multiple markers *\/\r\n            .marker-entrance[data-index] {\r\n                animation-delay: calc(var(--index) * 50ms);\r\n            }\r\n            \r\n            \/* Ensure SVG is optimized for animation *\/\r\n            .custom-div-icon svg {\r\n                will-change: opacity;\r\n            }\r\n            \r\n            .select-wrapper {\r\n                position: relative;\r\n                margin-bottom: 10px;\r\n            }\r\n            \r\n            .select-wrapper::before {\r\n                content: '';\r\n                position: absolute;\r\n                left: 15px;\r\n                top: 45%;\r\n                transform: translateY(-50%);\r\n                width: 24px;\r\n                height: 24px;\r\n                z-index: 99;\r\n                background-repeat: no-repeat;\r\n                background-position: center;\r\n            }\r\n            \r\n            #supermarkets-select-wrapper::before {\r\n\t\t\t\tbackground-image: url(\"data:image\/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 32 32' xmlns='http:\/\/www.w3.org\/2000\/svg'%3E%3Cpath d='M16 2C10.477 2 6 6.477 6 12c0 6.5 10 18 10 18s10-11.5 10-18c0-5.523-4.477-10-10-10zm0 14a4 4 0 110-8 4 4 0 010 8z' fill='%23e73137' stroke='%23000000' stroke-width='1'\/%3E%3C\/svg%3E\");\r\n\t\t\t}\r\n            \r\n            #shops-select-wrapper::before {\r\n                background-image: url(\"data:image\/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 32 32' xmlns='http:\/\/www.w3.org\/2000\/svg'%3E%3Cpath d='M16 2C10.477 2 6 6.477 6 12c0 6.5 10 18 10 18s10-11.5 10-18c0-5.523-4.477-10-10-10zm0 14a4 4 0 110-8 4 4 0 010 8z' fill='%233b8061' stroke='%23000000' stroke-width='1'\/%3E%3C\/svg%3E\");\r\n            }\r\n        <\/style>\r\n    <\/head>\r\n    <body>\r\n        <div class=\"dili-map-container\">\r\n            <div class=\"dili-controls\">\r\n                <div class=\"dili-title\">\u0548\u0580\u057f\u0565\u055e\u0572 \u0563\u0576\u0565\u056c \u0534\u056b\u056c\u056b<\/div>\r\n                <div class=\"dili-subtitle\">\u0533\u057f\u056b\u0580 \u0574\u0565\u0580 \u056f\u0561\u0569\u0576\u0561\u0574\u0569\u0565\u0580\u0584\u0568<\/div>\r\n                \r\n                <!-- Supermarkets Dropdown (Merged with Chain Stores) -->\r\n                <div class=\"select-wrapper\" id=\"supermarkets-select-wrapper\">\r\n                    <select class=\"dili-select\" id=\"supermarkets-select\">\r\n                        <option value=\"\">\u054d\u0578\u0582\u057a\u0565\u0580\u0574\u0561\u0580\u056f\u0565\u057f\u0576\u0565\u0580<\/option>\r\n                        <option value=\"all-supermarkets\">\u0532\u0578\u056c\u0578\u0580 \u057d\u0578\u0582\u057a\u0565\u0580\u0574\u0561\u0580\u056f\u0565\u057f\u0576\u0565\u0580\u0568<\/option>\r\n                        <option value=\"yerevan-city\">Yerevan City<\/option>\r\n                        <option value=\"sas\">SAS<\/option>\r\n                        <option value=\"carrefour\">Carrefour<\/option>\r\n                        <option value=\"88\">88<\/option>\r\n                        <option value=\"evrika\">Evrika<\/option>\r\n                        <option value=\"parma\">Parma<\/option>\r\n                        <option value=\"tsiran\">Tsiran<\/option>\r\n                        <option value=\"zovq\">Zovq<\/option>\r\n                        <option value=\"chinar\">Chinar<\/option>\r\n                        <option value=\"rock-four\">Rock Four<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n                \r\n                <!-- Local Shops Dropdown -->\r\n\t\t\t\t<div class=\"select-wrapper\" id=\"shops-select-wrapper\">\r\n\t\t\t\t\t<select class=\"dili-select\" id=\"shops-select\">\r\n\t\t\t\t\t\t<option value=\"\">\u053d\u0561\u0576\u0578\u0582\u0569\u0576\u0565\u0580<\/option>\r\n\t\t\t\t\t\t<option value=\"all-shops\">\u0532\u0578\u056c\u0578\u0580 \u056d\u0561\u0576\u0578\u0582\u0569\u0576\u0565\u0580\u0568<\/option>\r\n\t\t\t\t\t\t<option value=\"barev\">Barev<\/option>\r\n\t\t\t\t\t\t<option value=\"yeritsyan\">Yeritsyan<\/option>\r\n\t\t\t\t\t\t<option value=\"etalon\">Etalon<\/option>\r\n\t\t\t\t\t\t<option value=\"express\">Express<\/option>\r\n\t\t\t\t\t\t<option value=\"tteni\">Tteni<\/option>\r\n\t\t\t\t\t\t<option value=\"kayzer\">Kayzer<\/option>\r\n\t\t\t\t\t\t<option value=\"maximum\">Maximum<\/option>\r\n\t\t\t\t\t\t<option value=\"mush\">Mush<\/option>\r\n\t\t\t\t\t\t<option value=\"van\">Van<\/option>\r\n\t\t\t\t\t\t<option value=\"sky\">Sky<\/option>\r\n\t\t\t\t\t\t<option value=\"titan\">Titan<\/option>\r\n\t\t\t\t\t\t<option value=\"gurmenia\">Gurmenia<\/option>\r\n\t\t\t\t\t<\/select>\r\n\t\t\t\t<\/div>\r\n                \r\n                <button class=\"find-closest-btn\" onclick=\"findClosestLocation()\">\r\n\t\t\t\t\t\u0533\u057f\u0576\u0565\u056c \u0561\u0574\u0565\u0576\u0561\u0574\u0578\u057f \r\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/dili.am\/wp-content\/uploads\/2025\/02\/logobigwhite.png\"\r\n\t\t\t\t\talt=\"Dili\"\r\n\t\t\t\t\tstyle=\"height: 16px; vertical-align: middle; margin-left: 5px; margin-bottom: 2px;\">\r\n\t\t\t\t<\/button>\r\n            <\/div>\r\n            <div id=\"dili-map\"><\/div>\r\n        <\/div>\r\n        \r\n        <!-- zeromaze-map vector engine (ZMV) + its tile worker, inlined by maps\/build.py so this\r\n             snippet needs no hosted files. Replaced Leaflet + CARTO tiles, which started serving\r\n             \"API KEY REQUIRED\" images instead of the map. -->\r\n        <script>\"use strict\";var ZMV=(()=>{var bt=Object.defineProperty;var Bt=Object.getOwnPropertyDescriptor;var zt=Object.getOwnPropertyNames;var Ut=Object.prototype.hasOwnProperty;var Dt=(p,t)=>{for(var e in t)bt(p,e,{get:t[e],enumerable:!0})},Gt=(p,t,e,r)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of zt(t))!Ut.call(p,i)&&i!==e&&bt(p,i,{get:()=>t[i],enumerable:!(r=Bt(t,i))||r.enumerable});return p};var It=p=>Gt(bt({},\"__esModule\",{value:!0}),p);var Qt={};Dt(Qt,{BACKGROUND:()=>lt,BRAND:()=>Tt,DARK:()=>Mt,LIGHT:()=>xt,Marker:()=>ot,Popup:()=>at,STYLE:()=>it,STYLES:()=>St,VERSION:()=>Et,VectorRenderer:()=>st,ZeroMap:()=>mt,brandStyle:()=>Ct,decodeMVT:()=>Ft,hex:()=>d,vectorFactory:()=>Kt});var wt=85.0511287798;function $(p,t){let e=Math.max(-wt,Math.min(wt,t)),r=(p+180)\/360,i=Math.sin(e*Math.PI\/180),s=.5-Math.log((1+i)\/(1-i))\/(4*Math.PI);return{x:r,y:s}}function J(p,t){let e=p*360-180,r=Math.PI-2*Math.PI*t,i=180\/Math.PI*Math.atan(.5*(Math.exp(r)-Math.exp(-r)));return{lng:e,lat:i}}var K=256;function ht(p,t,e){let r=$(p,t),i=K*Math.pow(2,e);return{x:r.x*i,y:r.y*i}}function rt(p,t){return Math.max(t.minZoom,Math.min(t.maxZoom,Math.round(p.zoom)))}function j(p,t,e){let r=ht(p.lng,p.lat,p.zoom),i=ht(t,e,p.zoom),s=i.x-r.x,n=i.y-r.y,o=p.bearing||0;if(o){let a=Math.cos(o),m=Math.sin(o),g=s*a+n*m,b=-s*m+n*a;s=g,n=b}return{x:s+p.width\/2,y:n+p.height\/2}}function ct(p,t,e){let r=ht(p.lng,p.lat,p.zoom),i=K*Math.pow(2,p.zoom),s=t-p.width\/2,n=e-p.height\/2,o=p.bearing||0;if(o){let g=Math.cos(o),b=Math.sin(o),T=s*g-n*b,v=s*b+n*g;s=T,n=v}let a=(r.x+s)\/i,m=(r.y+n)\/i;return J(a,m)}function tt(p,t){let e=rt(p,t),r=Math.pow(2,e),i=K*Math.pow(2,p.zoom),s=K*Math.pow(2,p.zoom-e),n=ht(p.lng,p.lat,p.zoom),o=n.x-p.width\/2,a=n.y-p.height\/2,m=p.bearing||0,g=Math.cos(m),b=Math.sin(m),T=1\/0,v=1\/0,l=-1\/0,h=-1\/0,x=[[0,0],[p.width,0],[p.width,p.height],[0,p.height]];for(let[M,w]of x){let A=M-p.width\/2,R=w-p.height\/2,C=A*g-R*b,B=A*b+R*g,S=n.x+C,P=n.y+B;S<T&&(T=S),S>l&&(l=S),P<v&&(v=P),P>h&&(h=P)}let c=M=>M\/i*r,u=Math.floor(c(T)),f=Math.floor(c(l)),y=Math.floor(c(v)),_=Math.floor(c(h)),E=[];for(let M=y;M<=_;M++)if(!(M<0||M>=r))for(let w=u;w<=f;w++){let A=(w%r+r)%r,R=w\/r*i-o,C=M\/r*i-a;E.push({x:A,y:M,z:e,screenX:R,screenY:C,size:s})}return E}var gt=p=>(Math.exp(p)+Math.exp(-p))\/2,At=p=>(Math.exp(p)-Math.exp(-p))\/2,Vt=p=>At(p)\/gt(p);function Lt(p,t,e=1.42){let[r,i,s]=p,[n,o,a]=t,m=e*e,g=m*m,b=n-r,T=o-i,v=b*b+T*T,l=Math.sqrt(v);if(v<1e-12||!isFinite(l)){let E=Math.abs(Math.log(a\/s))\/e||0;return{interp:M=>[r+M*b,i+M*T,s*Math.pow(a\/s,M)],S:E}}let h=(a*a-s*s+g*v)\/(2*s*m*l),x=(a*a-s*s-g*v)\/(2*a*m*l),c=Math.log(Math.sqrt(h*h+1)-h),f=(Math.log(Math.sqrt(x*x+1)-x)-c)\/e,y=gt(c),_=At(c);return{interp:E=>{let M=E*f,w=s\/(m*l)*(y*Vt(e*M+c)-_),A=s*y\/gt(e*M+c);return[r+w*b,i+w*T,A]},S:f}}function Rt(p){return p<.5?4*p*p*p:1-Math.pow(-2*p+2,3)\/2}var nt=class{constructor(t,e,r){this.dprCap=2;this.dprOverride=null;this.maxTiles=512;this.fadeMs=200;this.contextLost=!1;this.preloadRing=1;this.preloadZoomOut=!0;this.preloadZoomIn=!0;this.lastRenderMs=0;this.drawCalls=0;this.uploads=0;this.uploadMs=0;this.aPos=0;this.tiles=new Map;this.frame=0;this.prevZ=-1;this.preloadTimer=0;this.onContextLost=t=>{t.preventDefault(),this.contextLost=!0;for(let e of this.tiles.values())e.tex=null,e.loaded=!1};this.onContextRestored=()=>{this.contextLost=!1,this.initGL();for(let t of this.tiles.values())t.tex=null,t.loaded=!1,t.decoded=!t.failed&&t.img.complete&&t.img.naturalWidth>0;this.onNeedRender()};this.canvas=t,this.source=e,this.onNeedRender=r;let i=t.getContext(\"webgl\",{antialias:!1,alpha:!1,premultipliedAlpha:!1});if(!i)throw new Error(\"WebGL not available\");this.gl=i,t.addEventListener(\"webglcontextlost\",this.onContextLost,!1),t.addEventListener(\"webglcontextrestored\",this.onContextRestored,!1),this.initGL()}initGL(){let t=this.gl;this.prog=this.buildProgram(),this.aPos=t.getAttribLocation(this.prog,\"a_pos\"),this.uRes=t.getUniformLocation(this.prog,\"u_res\"),this.uDest=t.getUniformLocation(this.prog,\"u_dest\"),this.uUv=t.getUniformLocation(this.prog,\"u_uv\"),this.uAlpha=t.getUniformLocation(this.prog,\"u_alpha\"),this.uTex=t.getUniformLocation(this.prog,\"u_tex\"),this.quadBuf=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.quadBuf),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]),t.STATIC_DRAW)}buildProgram(){let t=this.gl,e=`\r\n      attribute vec2 a_pos;\r\n      uniform vec2 u_res;\r\n      uniform vec4 u_dest;\r\n      uniform vec4 u_uv;\r\n      varying vec2 v_uv;\r\n      void main() {\r\n        vec2 px = u_dest.xy + a_pos * u_dest.zw;\r\n        vec2 clip = (px \/ u_res) * 2.0 - 1.0;\r\n        gl_Position = vec4(clip.x, -clip.y, 0.0, 1.0);\r\n        v_uv = u_uv.xy + a_pos * u_uv.zw;\r\n      }`,r=`\r\n      precision mediump float;\r\n      uniform sampler2D u_tex;\r\n      uniform float u_alpha;\r\n      varying vec2 v_uv;\r\n      void main() {\r\n        vec4 c = texture2D(u_tex, v_uv);\r\n        gl_FragColor = vec4(c.rgb, c.a * u_alpha);\r\n      }`,i=t.createProgram();if(t.attachShader(i,this.compile(t.VERTEX_SHADER,e)),t.attachShader(i,this.compile(t.FRAGMENT_SHADER,r)),t.linkProgram(i),!t.getProgramParameter(i,t.LINK_STATUS))throw new Error(\"program link: \"+t.getProgramInfoLog(i));return i}compile(t,e){let r=this.gl,i=r.createShader(t);if(r.shaderSource(i,e),r.compileShader(i),!r.getShaderParameter(i,r.COMPILE_STATUS))throw new Error(\"shader compile: \"+r.getShaderInfoLog(i));return i}dpr(){var e,r;let t=(r=(e=this.dprOverride)!=null?e:window.devicePixelRatio)!=null?r:1;return Math.min(this.dprCap,t)}tileUrl(t,e,r){let i=this.source.subdomains,s=i[(e+r)%i.length],n=this.dpr()>1?\"@2x\":\"\";return this.source.urlTemplate.replace(\"{s}\",s).replace(\"{z}\",String(t)).replace(\"{x}\",String(e)).replace(\"{y}\",String(r)).replace(\"{r}\",n)}uploadTexture(t){let e=this.gl,r=performance.now(),i=e.createTexture();e.bindTexture(e.TEXTURE_2D,i),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.img),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),t.tex=i,t.loaded=!0,this.uploadMs+=performance.now()-r,this.uploads++}getTile(t,e,r,i){let s=`${t}\/${e}\/${r}${this.dpr()>1?\"@2x\":\"\"}`,n=this.tiles.get(s);if(n)return n;if(!i)return;let o=new Image;o.crossOrigin=\"anonymous\",n={img:o,tex:null,decoded:!1,decodedAt:0,loaded:!1,failed:!1,fadeStart:0,frame:0},this.tiles.set(s,n);let a=n;return o.onload=()=>{a.decoded=!0,a.decodedAt=performance.now(),this.onNeedRender()},o.onerror=()=>{a.failed=!0},o.src=this.tileUrl(t,e,r),n}drawQuad(t,e,r,i,s,n,o){let a=this.gl;a.bindTexture(a.TEXTURE_2D,t),a.uniform4f(this.uDest,e,r,i,s),a.uniform4f(this.uUv,n[0],n[1],n[2],n[3]),a.uniform1f(this.uAlpha,o),a.drawArrays(a.TRIANGLES,0,6),this.drawCalls++}ancestor(t){for(let e=t.z-1;e>=this.source.minZoom&&t.z-e<=6;e--){let r=1<<t.z-e,i=Math.floor(t.x\/r),s=Math.floor(t.y\/r),n=this.getTile(e,i,s,!1);if(n&&n.loaded&&n.tex){let o=1\/r;return{entry:n,uv:[(t.x-i*r)*o,(t.y-s*r)*o,o,o]}}}return null}drawCoverage(t,e,r,i){let s=this.ancestor(t);if(s&&(this.drawQuad(s.entry.tex,e,r,i,i,s.uv,1),s.entry.frame=this.frame),t.z<this.source.maxZoom){let n=i\/2;for(let o=0;o<2;o++)for(let a=0;a<2;a++){let m=this.getTile(t.z+1,t.x*2+a,t.y*2+o,!1);m&&m.loaded&&m.tex&&(this.drawQuad(m.tex,e+a*n,r+o*n,n,n,[0,0,1,1],1),m.frame=this.frame)}}}render(t){if(this.contextLost||this.gl.isContextLost())return;let e=this.gl,r=this.dpr(),i=Math.max(1,Math.round(t.width*r)),s=Math.max(1,Math.round(t.height*r));(this.canvas.width!==i||this.canvas.height!==s)&&(this.canvas.width=i,this.canvas.height=s),this.frame++,this.drawCalls=0;let n=performance.now(),o=n;e.viewport(0,0,i,s),e.clearColor(.9,.9,.88,1),e.clear(e.COLOR_BUFFER_BIT),e.enable(e.BLEND),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA),e.useProgram(this.prog),e.bindBuffer(e.ARRAY_BUFFER,this.quadBuf),e.enableVertexAttribArray(this.aPos),e.vertexAttribPointer(this.aPos,2,e.FLOAT,!1,0,0),e.uniform2f(this.uRes,i,s),e.uniform1i(this.uTex,0),e.activeTexture(e.TEXTURE0);let a=6,m=!1,g=!1,b={minZoom:this.source.minZoom,maxZoom:this.source.maxZoom},T=rt(t,b),v=T!==this.prevZ;for(let l of tt(t,b)){let h=this.getTile(l.z,l.x,l.y,!0);h&&h.decoded&&!h.loaded&&(performance.now()-n<a?this.uploadTexture(h):m=!0);let x=l.screenX*r,c=l.screenY*r,u=l.size*r,f=!!(h&&h.loaded&&h.tex),y=1;f&&(h.frame===this.frame-1||(o-h.decodedAt<120||v?h.fadeStart=o:h.fadeStart=0),y=h.fadeStart?Math.min(1,(o-h.fadeStart)\/this.fadeMs):1,y<1&&(g=!0)),(!f||y<1)&&this.drawCoverage(l,x,c,u),f&&(this.drawQuad(h.tex,x,c,u,u,[0,0,1,1],y),h.frame=this.frame)}this.prevZ=T,this.lastRenderMs=performance.now()-n,m||g?this.onNeedRender():this.schedulePreload(t),this.tiles.size>this.maxTiles&&this.evict()}schedulePreload(t){clearTimeout(this.preloadTimer);let e={lng:t.lng,lat:t.lat,zoom:t.zoom,width:t.width,height:t.height};this.preloadTimer=window.setTimeout(()=>this.preload(e),200)}preload(t){if(this.contextLost)return;let e={minZoom:this.source.minZoom,maxZoom:this.source.maxZoom},r=rt(t,e),i=this.preloadRing,s=(n,o,a)=>{if(n<e.minZoom||n>e.maxZoom)return;let m=1<<n;a<0||a>=m||this.getTile(n,(o%m+m)%m,a,!0)};for(let n of tt(t,e)){for(let o=-i;o<=i;o++)for(let a=-i;a<=i;a++)s(r,n.x+a,n.y+o);this.preloadZoomOut&&s(r-1,n.x>>1,n.y>>1),this.preloadZoomIn&&(s(r+1,n.x*2,n.y*2),s(r+1,n.x*2+1,n.y*2),s(r+1,n.x*2,n.y*2+1),s(r+1,n.x*2+1,n.y*2+1))}}evict(){let t=[...this.tiles.entries()].sort((r,i)=>r[1].frame-i[1].frame),e=this.tiles.size-this.maxTiles;for(let[r,i]of t){if(e<=0||i.frame===this.frame)break;i.tex&&this.gl.deleteTexture(i.tex),this.tiles.delete(r),e--}}get attribution(){return this.source.attribution}get minZoom(){return this.source.minZoom}get maxZoom(){return this.source.maxZoom}stats(){return{tiles:this.tiles.size,drawCalls:this.drawCalls,lastRenderMs:+this.lastRenderMs.toFixed(3),uploads:this.uploads,avgUploadMs:this.uploads?+(this.uploadMs\/this.uploads).toFixed(3):0}}clearTiles(){for(let t of this.tiles.values())t.tex&&this.gl.deleteTexture(t.tex);this.tiles.clear(),this.uploads=0,this.uploadMs=0}setSource(t){this.source=t,this.clearTiles(),this.prevZ=-1,this.onNeedRender()}};var vt=(p,t,e)=>Math.max(t,Math.min(e,p)),ut=class{constructor(t){this.pointers=new Map;this.panLL=null;this.pinchLL=null;this.pinchDist0=0;this.pinchZoom0=0;this.lastHint=0;this.samples=[];this.lastTapT=0;this.lastTapX=0;this.lastTapY=0;this.tapDrag=null;this.tapDragPxPerZoom=110;this.dragStarted=!1;this.enabled=!0;this.onSelectStart=t=>{this.enabled&&this.pointers.size>0&&t.preventDefault()};this.onDown=t=>{if(!this.enabled)return;let e=this.pos(t);if(this.pointers.set(t.pointerId,{x:e.x,y:e.y,type:t.pointerType,downT:performance.now(),downX:e.x,downY:e.y}),this.t.stopAnim(),this.t.stopMotion(),this.samples=[{t:performance.now(),x:e.x,y:e.y}],t.pointerType!==\"touch\"){try{this.t.canvas.setPointerCapture(t.pointerId)}catch{}t.preventDefault()}let r=performance.now();t.pointerType===\"touch\"&&this.pointers.size===1&&r-this.lastTapT<300&&Math.hypot(e.x-this.lastTapX,e.y-this.lastTapY)<30?this.tapDrag={ll:this.t.screenToLngLatAt(e.x,e.y),ax:e.x,ay:e.y,startY:e.y,zoom0:this.t.cam.zoom,active:!1}:this.pointers.size>=2&&(this.tapDrag=null),this.resetGesture()};this.onMove=t=>{if(!this.enabled)return;let e=this.pointers.get(t.pointerId);if(!e)return;let r=this.pos(t);if(e.x=r.x,e.y=r.y,this.isPinch()&&this.pinchLL){t.preventDefault(),this.armDrag();let[s,n]=this.touches(),o={x:(s.x+n.x)\/2,y:(s.y+n.y)\/2},a=Math.hypot(s.x-n.x,s.y-n.y);if(this.pinchDist0>0){let m=vt(this.pinchZoom0+Math.log2(a\/this.pinchDist0),this.t.minZoom,this.t.maxZoom);this.t.setZoomKeepCenter(m),this.t.panAnchor(this.pinchLL.lng,this.pinchLL.lat,o.x,o.y)}return}if(this.tapDrag&&this.touches().length===1){let s=e.y-this.tapDrag.startY;if(this.tapDrag.active||Math.abs(s)>4){this.tapDrag.active=!0,t.preventDefault(),this.armDrag();let n=vt(this.tapDrag.zoom0+s\/this.tapDragPxPerZoom,this.t.minZoom,this.t.maxZoom);this.t.setZoomKeepCenter(n),this.t.panAnchor(this.tapDrag.ll.lng,this.tapDrag.ll.lat,this.tapDrag.ax,this.tapDrag.ay)}return}let i=this.panPt();if(i&&this.panLL){t.pointerType!==\"touch\"&&t.preventDefault(),Math.hypot(i.x-i.downX,i.y-i.downY)>3&&this.armDrag(),this.t.panAnchor(this.panLL.lng,this.panLL.lat,i.x,i.y),this.samples.push({t:performance.now(),x:i.x,y:i.y}),this.samples.length>6&&this.samples.shift();return}this.touches().length===1&&this.t.cooperative&&this.hint(\"Use two fingers to move the map\")};this.onUp=t=>{if(!this.enabled)return;let e=this.pointers.get(t.pointerId),r=!this.isPinch()&&!!this.panLL,i=!!(this.tapDrag&&this.tapDrag.active);this.pointers.delete(t.pointerId);try{this.t.canvas.releasePointerCapture(t.pointerId)}catch{}e&&e.type===\"touch\"&&!i&&this.handleTap(e);let s=e?Math.hypot(e.x-e.downX,e.y-e.downY):0;r&&s>10&&!i&&this.fling(performance.now()),this.tapDrag=null,this.pointers.size===0&&(this.dragStarted=!1),this.resetGesture()};this.onWheel=t=>{if(!this.enabled)return;if(this.t.cooperative&&!(t.ctrlKey||t.metaKey)){this.hint(\"Use Ctrl + scroll to zoom\");return}t.preventDefault(),this.t.stopAnim();let e=this.pos(t),r=t.deltaY;t.deltaMode===1?r*=32:t.deltaMode===2&&(r*=this.t.cam.height);let i=vt(-r*.005,-1,1);this.t.zoomBy(i,e.x,e.y)};this.onDblClick=t=>{if(!this.enabled)return;t.preventDefault();let e=this.pos(t);this.t.zoomBy(t.shiftKey?-1:1,e.x,e.y)};this.t=t;let e=t.canvas;this.applyTouchAction(),e.style.userSelect=\"none\",e.style.webkitUserSelect=\"none\",e.style.webkitTouchCallout=\"none\",e.style.webkitTapHighlightColor=\"transparent\",e.addEventListener(\"pointerdown\",this.onDown),e.addEventListener(\"pointermove\",this.onMove,{passive:!1}),e.addEventListener(\"pointerup\",this.onUp),e.addEventListener(\"pointercancel\",this.onUp),e.addEventListener(\"wheel\",this.onWheel,{passive:!1}),e.addEventListener(\"dblclick\",this.onDblClick),document.addEventListener(\"selectstart\",this.onSelectStart)}applyTouchAction(){this.t.canvas.style.touchAction=this.enabled?this.t.cooperative?\"pan-x pan-y\":\"none\":\"auto\"}setEnabled(t){if(t!==this.enabled){if(this.enabled=t,!t){for(let e of this.pointers.keys())try{this.t.canvas.releasePointerCapture(e)}catch{}this.pointers.clear(),this.panLL=null,this.pinchLL=null,this.tapDrag=null,this.dragStarted=!1,this.samples=[]}this.applyTouchAction()}}armDrag(){this.dragStarted||(this.dragStarted=!0,this.t.notifyDragStart())}pos(t){let e=this.t.canvas.getBoundingClientRect();return{x:t.clientX-e.left,y:t.clientY-e.top}}touches(){return[...this.pointers.values()].filter(t=>t.type===\"touch\")}isPinch(){return this.touches().length>=2}panPt(){let t=[...this.pointers.values()].find(r=>r.type!==\"touch\");if(t)return t;let e=this.touches();return e.length===1&&!this.t.cooperative?e[0]:null}resetGesture(){if(this.isPinch()){let[t,e]=this.touches(),r={x:(t.x+e.x)\/2,y:(t.y+e.y)\/2};this.pinchDist0=Math.hypot(t.x-e.x,t.y-e.y),this.pinchZoom0=this.t.cam.zoom,this.pinchLL=this.t.screenToLngLatAt(r.x,r.y),this.panLL=null}else{let t=this.panPt();this.panLL=t?this.t.screenToLngLatAt(t.x,t.y):null,this.pinchLL=null}}fling(t){let e=this.samples;if(e.length<1)return;let r=e[e.length-1],i=e.length-1;for(;i>0&&t-e[i-1].t<=90;)i--;let s=e[i],n=t-s.t;if(n<=0)return;let o=(r.x-s.x)\/n,a=(r.y-s.y)\/n;Math.hypot(o,a)>.05&&this.t.flingPan(o,a),this.samples=[]}handleTap(t){let e=performance.now(),r=Math.hypot(t.x-t.downX,t.y-t.downY);e-t.downT<250&&r<12&&(e-this.lastTapT<300&&Math.hypot(t.x-this.lastTapX,t.y-this.lastTapY)<30?(this.t.zoomBy(1,t.x,t.y),this.lastTapT=0,navigator.vibrate&&navigator.vibrate(8)):(this.lastTapT=e,this.lastTapX=t.x,this.lastTapY=t.y))}hint(t){let e=performance.now();e-this.lastHint<900||(this.lastHint=e,this.t.showHint(t))}};var Et=\"0.18.0\",Zt={urlTemplate:\"https:\/\/{s}.basemaps.cartocdn.com\/rastertiles\/voyager\/{z}\/{x}\/{y}{r}.png\",subdomains:\"abcd\",minZoom:0,maxZoom:20,attribution:\"\\xA9 OpenStreetMap contributors \\xA9 CARTO\"},et=(p,t,e)=>Math.max(t,Math.min(e,p)),mt=class{constructor(t,e={}){this.rafPending=!1;this.animId=0;this.hintEl=null;this.hintTimer=0;this.navRAF=0;this.navTarget=null;this.motionRAF=0;this.lastMotionT=0;this.zoomTarget=null;this.zoomAnchorSx=0;this.zoomAnchorSy=0;this.zoomAnchorLng=0;this.zoomAnchorLat=0;this.panVX=0;this.panVY=0;this.markers=new Set;this.overlayInGL=!1;this.openPopup=null;this.listeners=new Map;this._moving=!1;this._mLng=0;this._mLat=0;this._mZoom=0;this._mBearing=0;this._mLastT=0;this._settleRAF=0;this.motionTick=t=>{let e=Math.max(0,Math.min(t-this.lastMotionT,40));this.lastMotionT=t;let r=!1;if(this.zoomTarget!==null){let i=this.zoomTarget-this.cam.zoom;Math.abs(i)>.001?(this.cam.zoom+=i*(1-Math.exp(-e\/70)),r=!0):(this.cam.zoom=this.zoomTarget,this.zoomTarget=null),this._panAnchor(this.zoomAnchorLng,this.zoomAnchorLat,this.zoomAnchorSx,this.zoomAnchorSy)}if(this.panVX||this.panVY){this._panBy(this.panVX*e,this.panVY*e);let i=Math.exp(-e\/325);this.panVX*=i,this.panVY*=i,Math.hypot(this.panVX,this.panVY)<.02?(this.panVX=0,this.panVY=0):r=!0}this.renderFrame(),this.motionRAF=r?requestAnimationFrame(this.motionTick):0};this.navTick=()=>{let t=this.navTarget;if(!t){this.navRAF=0;return}let e=.16;this.cam.lng+=(t.lng-this.cam.lng)*e,this.cam.lat+=(t.lat-this.cam.lat)*e,this.cam.zoom+=(t.zoom-this.cam.zoom)*e;let r=this.cam.bearing||0,i=(t.bearing-r)%(2*Math.PI);i>Math.PI?i-=2*Math.PI:i<-Math.PI&&(i+=2*Math.PI),this.cam.bearing=r+i*e,this.renderFrame(),this.navRAF=requestAnimationFrame(this.navTick)};this.settleTick=()=>{let t=!!this.animId||!!this.motionRAF||!!this.navRAF;this._moving&&!t&&performance.now()-this._mLastT>40?(this._moving=!1,this._settleRAF=0,this.emit(\"moveend\")):this._moving?this._settleRAF=requestAnimationFrame(this.settleTick):this._settleRAF=0};var m,g;let r=typeof t==\"string\"?document.querySelector(t):t;if(!r)throw new Error(\"ZeroMap: container not found\");this.container=r,this.source=e.source||Zt,this.cooperative=(m=e.cooperativeGestures)!=null?m:!0,getComputedStyle(r).position===\"static\"&&(r.style.position=\"relative\"),r.style.overflow=\"hidden\";let i=document.createElement(\"canvas\");i.style.cssText=\"position:absolute;inset:0;width:100%;height:100%;display:block;\",r.appendChild(i),this.canvas=i;let[s,n]=e.center||[44.5,40.18];this.cam={lng:s,lat:n,zoom:(g=e.zoom)!=null?g:12,width:r.clientWidth,height:r.clientHeight},this._mLng=s,this._mLat=n,this._mZoom=this.cam.zoom,this._mBearing=0;let o=()=>this.requestRender();this.renderer=e.renderer?e.renderer(i,o):new nt(i,this.source,o),this.overlayInGL=typeof this.renderer.setOverlay==\"function\",this.markerLayer=document.createElement(\"div\"),this.markerLayer.style.cssText=\"position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:2;\",r.appendChild(this.markerLayer),this.overlayInGL&&i.addEventListener(\"click\",b=>{let T=i.getBoundingClientRect(),v=b.clientX-T.left,l=b.clientY-T.top,h=null;for(let x of this.markers)!x.dom&&x._hit(this,v,l)&&(h=x);h?h._click():this._openPopup(null)}),e.attribution!==!1&&this.addAttribution(e.attribution),this.input=new ut(this),e.interactive===!1&&this.input.setEnabled(!1),new ResizeObserver(()=>{this.cam.width=r.clientWidth,this.cam.height=r.clientHeight,this.requestRender()}).observe(r),this.requestRender()}get minZoom(){return this.renderer.minZoom}get maxZoom(){return this.renderer.maxZoom}screenToLngLatAt(t,e){return ct(this.cam,t,e)}_panAnchor(t,e,r,i){let s=K*Math.pow(2,this.cam.zoom),n=$(t,e),o=n.x*s-(r-this.cam.width\/2),a=n.y*s-(i-this.cam.height\/2),m=J(o\/s,a\/s);this.cam.lng=m.lng,this.cam.lat=m.lat}panAnchor(t,e,r,i){this._panAnchor(t,e,r,i),this.requestRender()}_panBy(t,e){let r=K*Math.pow(2,this.cam.zoom),i=$(this.cam.lng,this.cam.lat),s=J((i.x*r-t)\/r,(i.y*r-e)\/r);this.cam.lng=s.lng,this.cam.lat=s.lat}setZoomKeepCenter(t){this.cam.zoom=et(t,this.minZoom,this.maxZoom),this.requestRender()}zoomAround(t,e,r){let i=ct(this.cam,e,r);this.cam.zoom=et(t,this.minZoom,this.maxZoom),this.panAnchor(i.lng,i.lat,e,r)}zoomBy(t,e,r){this.stopAnim(),this.panVX=0,this.panVY=0,this.zoomTarget===null&&(this.zoomTarget=this.cam.zoom),this.zoomTarget=et(this.zoomTarget+t,this.minZoom,this.maxZoom),this.zoomAnchorSx=e,this.zoomAnchorSy=r;let i=ct(this.cam,e,r);this.zoomAnchorLng=i.lng,this.zoomAnchorLat=i.lat,this.startMotion()}flingPan(t,e){this.stopAnim(),this.panVX=t,this.panVY=e,this.startMotion()}stopMotion(){this.motionRAF&&cancelAnimationFrame(this.motionRAF),this.motionRAF=0,this.zoomTarget=null,this.panVX=0,this.panVY=0}startMotion(){this.motionRAF||(this.lastMotionT=performance.now(),this.motionRAF=requestAnimationFrame(this.motionTick))}setView(t,e,r){this.stopAnim(),this.stopMotion(),this.cam.lng=t,this.cam.lat=e,this.cam.zoom=et(r,this.minZoom,this.maxZoom),this.requestRender()}setBearing(t){this.cam.bearing=t,this.requestRender()}get bearing(){return this.cam.bearing||0}setDevicePixelRatio(t){this.renderer.dprOverride=t,this.requestRender()}flyTo(t){var h,x,c;this.stopAnim(),this.stopMotion();let e=K,r=$(this.cam.lng,this.cam.lat),i=[r.x*e,r.y*e,this.cam.width\/Math.pow(2,this.cam.zoom)],s=et((h=t.zoom)!=null?h:this.cam.zoom,this.minZoom,this.maxZoom),[n,o]=(x=t.center)!=null?x:[this.cam.lng,this.cam.lat],a=$(n,o),m=[a.x*e,a.y*e,this.cam.width\/Math.pow(2,s)],{interp:g,S:b}=Lt(i,m,1.42),T=(c=t.duration)!=null?c:et(b*450,300,3e3),v=performance.now(),l=u=>{let f=(u-v)\/T;f>=1&&(f=1);let[y,_,E]=g(Rt(f)),M=J(y\/e,_\/e);this.cam.lng=M.lng,this.cam.lat=M.lat,this.cam.zoom=Math.log2(this.cam.width\/E),this.renderFrame(),this.animId=f<1?requestAnimationFrame(l):0};this.animId=requestAnimationFrame(l)}stopAnim(){this.animId&&cancelAnimationFrame(this.animId),this.animId=0}redraw(){this.requestRender()}setInteractive(t){this.input.setEnabled(t)}boundsCamera(t,e={}){var c,u;if(!t.length)return{lng:this.cam.lng,lat:this.cam.lat,zoom:this.cam.zoom};let r=1\/0,i=1\/0,s=-1\/0,n=-1\/0;for(let[f,y]of t){let _=$(f,y);_.x<r&&(r=_.x),_.x>s&&(s=_.x),_.y<i&&(i=_.y),_.y>n&&(n=_.y)}let o=(c=e.padding)!=null?c:0,a=Array.isArray(o)?o[0]:o,m=Array.isArray(o)?o[1]:o,g=Math.max(1,this.cam.width-2*a),b=Math.max(1,this.cam.height-2*m),T=s-r,v=n-i,l=1\/0;T>1e-9&&(l=Math.min(l,Math.log2(g\/(T*K)))),v>1e-9&&(l=Math.min(l,Math.log2(b\/(v*K))));let h=Math.min(this.maxZoom,(u=e.maxZoom)!=null?u:this.maxZoom);isFinite(l)||(l=h),l=et(l,this.minZoom,h);let x=J((r+s)\/2,(i+n)\/2);return{lng:x.lng,lat:x.lat,zoom:l}}getBoundsZoom(t,e={}){return this.boundsCamera(t,e).zoom}fitBounds(t,e={}){let r=this.boundsCamera(t,e);this.setView(r.lng,r.lat,r.zoom)}flyToBounds(t,e={}){let r=this.boundsCamera(t,e);this.flyTo({center:[r.lng,r.lat],zoom:r.zoom,duration:e.duration})}panTo(t,e={}){this.flyTo({center:t,zoom:this.cam.zoom,duration:e.duration})}zoomIn(){this.zoomBy(1,this.cam.width\/2,this.cam.height\/2)}zoomOut(){this.zoomBy(-1,this.cam.width\/2,this.cam.height\/2)}getCenter(){return{lng:this.cam.lng,lat:this.cam.lat}}getZoom(){return this.cam.zoom}distance(t,e){let r=63710088e-1,i=Math.PI\/180,s=(e[1]-t[1])*i,n=(e[0]-t[0])*i,o=t[1]*i,a=e[1]*i,m=Math.sin(s\/2)**2+Math.cos(o)*Math.cos(a)*Math.sin(n\/2)**2;return 2*r*Math.asin(Math.min(1,Math.sqrt(m)))}setSource(t){this.source=t;let e=this.renderer;e.setSource&&e.setSource(t),this.setZoomKeepCenter(this.cam.zoom)}setPerformanceMode(t){let e=this.renderer;e.setPerformanceMode&&e.setPerformanceMode(t)}resize(){this.cam.width=this.container.clientWidth,this.cam.height=this.container.clientHeight,this.requestRender()}navFollow(t,e,r,i){var s,n;this.stopAnim(),this.stopMotion(),this.navTarget={lng:t,lat:e,bearing:r,zoom:(n=i!=null?i:(s=this.navTarget)==null?void 0:s.zoom)!=null?n:17},this.navRAF||(this.navRAF=requestAnimationFrame(this.navTick))}navStop(){this.navRAF&&cancelAnimationFrame(this.navRAF),this.navRAF=0,this.navTarget=null}stats(){return{cam:{lng:+this.cam.lng.toFixed(5),lat:+this.cam.lat.toFixed(5),zoom:+this.cam.zoom.toFixed(3)},animating:!!this.animId,...this.renderer.stats()}}showHint(t){if(!this.hintEl){let e=document.createElement(\"div\");e.style.cssText=\"position:absolute;left:50%;top:14px;transform:translateX(-50%);z-index:3;background:rgba(20,20,20,.78);color:#fff;font:13px system-ui,sans-serif;padding:7px 14px;border-radius:8px;pointer-events:none;opacity:0;transition:opacity .18s;white-space:nowrap;\",this.container.appendChild(e),this.hintEl=e}this.hintEl.textContent=t,this.hintEl.style.opacity=\"1\",clearTimeout(this.hintTimer),this.hintTimer=window.setTimeout(()=>{this.hintEl&&(this.hintEl.style.opacity=\"0\")},1100)}addAttribution(t){let e=document.createElement(\"div\");e.textContent=typeof t==\"string\"?t:this.renderer.attribution,e.style.cssText=\"position:absolute;right:0;bottom:0;z-index:2;font:11px\/1.6 system-ui,sans-serif;background:rgba(255,255,255,.7);padding:0 5px;color:#333;pointer-events:none;\",this.container.appendChild(e)}requestRender(){this.rafPending||(this.rafPending=!0,requestAnimationFrame(()=>{this.rafPending=!1,this.renderFrame()}))}renderFrame(){let t=this.renderer;this.overlayInGL&&t.setOverlay&&t.setOverlay(this.overlayData()),t.setZoomFocus&&(this.zoomTarget!==null?t.setZoomFocus(this.zoomAnchorSx,this.zoomAnchorSy):t.setZoomFocus(null,null)),this.renderer.render(this.cam);for(let e of this.markers)e._update(this);this.openPopup&&this.openPopup._update(this),this.trackMotion()}trackMotion(){let t=this.cam,e=t.bearing||0,r=t.zoom!==this._mZoom;(t.lng!==this._mLng||t.lat!==this._mLat||r||e!==this._mBearing)&&(this._mLng=t.lng,this._mLat=t.lat,this._mZoom=t.zoom,this._mBearing=e,this._mLastT=performance.now(),this._moving||(this._moving=!0,this.emit(\"movestart\")),this.emit(\"move\"),r&&this.emit(\"zoom\"),this._settleRAF||(this._settleRAF=requestAnimationFrame(this.settleTick)))}on(t,e){let r=this.listeners.get(t);return r||(r=new Set,this.listeners.set(t,r)),r.add(e),this}off(t,e){var r;return(r=this.listeners.get(t))==null||r.delete(e),this}emit(t){let e=this.listeners.get(t);if(!(!e||!e.size))for(let r of[...e])try{r(this.cam)}catch(i){console.error('ZeroMap \"'+t+'\" listener threw:',i)}}notifyDragStart(){this.emit(\"dragstart\")}overlayData(){let t=[],e=this.openPopup?this.openPopup.getMarker():null;for(let r of this.markers)r.dom||t.push({lng:r.lng,lat:r.lat,color:r.color,label:r.label,popup:r===e?r.popupHtml:void 0});return t}addMarker(t){let e=new ot(this,t);return this.markers.add(e),this.requestRender(),e}project(t,e){return j(this.cam,t,e)}_openPopup(t){this.openPopup&&this.openPopup!==t&&this.openPopup._hide(),this.openPopup=t,t&&t._show(this),this.requestRender()}},Xt=p=>`<svg width=\"26\" height=\"34\" viewBox=\"0 0 26 34\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M13 0C5.8 0 0 5.8 0 13c0 9 13 21 13 21s13-12 13-21C26 5.8 20.2 0 13 0z\" fill=\"${p}\"\/><circle cx=\"13\" cy=\"13\" r=\"5\" fill=\"#fff\"\/><\/svg>`,ot=class{constructor(t,e){this.el=null;this.popup=null;if(this.map=t,this.lng=e.lng,this.lat=e.lat,this.color=e.color||\"#e0533d\",this.label=e.label,this.anchor=e.anchor||\"bottom\",this.onClick=e.onClick,this.dom=!t.overlayInGL||!!e.html,this.dom){let r=document.createElement(\"div\");r.className=e.className||\"\",r.style.cssText=\"position:absolute;left:0;top:0;pointer-events:auto;cursor:pointer;\",r.style.transform=\"translate(-50%,\"+(this.anchor===\"bottom\"?\"-100%\":\"-50%\")+\")\",r.innerHTML=e.html||Xt(this.color),r.addEventListener(\"click\",i=>{i.stopPropagation(),this._click()}),t.markerLayer.appendChild(r),this.el=r,this._update(t)}}bindPopup(t){return this.popupHtml=t,this.popup=new at(this,t),this}setLngLat(t,e){return this.lng=t,this.lat=e,this.el&&this._update(this.map),this}remove(){this.el&&this.el.remove(),this.popup&&this.popup._hide(),this.map.markers.delete(this)}_click(){this.onClick&&this.onClick(),this.popup&&this.map._openPopup(this.popup.isOpen?null:this.popup)}_hit(t,e,r){let i=t.project(this.lng,this.lat);return e>=i.x-13&&e<=i.x+13&&r>=i.y-34&&r<=i.y+2}_update(t){if(!this.el)return;let e=t.project(this.lng,this.lat);this.el.style.left=e.x+\"px\",this.el.style.top=e.y+\"px\"}},at=class{constructor(t,e){this.el=null;this.isOpen=!1;this.marker=t,this.html=e}getMarker(){return this.marker}_show(t){if(this.isOpen=!0,!!this.marker.dom){if(!this.el){let e=document.createElement(\"div\");e.style.cssText=\"position:absolute;left:0;top:0;transform:translate(-50%,calc(-100% - 34px));background:#fff;color:#222;padding:8px 12px;border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.18);font:13px system-ui,sans-serif;white-space:nowrap;pointer-events:auto;z-index:3;\",e.innerHTML=this.html,t.markerLayer.appendChild(e),this.el=e}this.el.style.display=\"block\",this._update(t)}}_hide(){this.isOpen=!1,this.el&&(this.el.style.display=\"none\")}_update(t){if(!this.el)return;let e=t.project(this.marker.lng,this.marker.lat);this.el.style.left=e.x+\"px\",this.el.style.top=e.y+\"px\"}};function d(p,t=1){let e=parseInt(p.slice(1),16);return[(e>>16&255)\/255,(e>>8&255)\/255,(e&255)\/255,t]}var lt=d(\"#f3f1ea\"),it=[{source:\"land\",type:\"fill\",color:d(\"#e9ece1\"),kinds:{grass:d(\"#d8e8c9\"),garden:d(\"#d8e8c9\"),meadow:d(\"#d8e8c9\"),grassland:d(\"#d8e8c9\"),scrub:d(\"#d7e4c4\"),park:d(\"#c6e4b4\"),recreation_ground:d(\"#c6e4b4\"),village_green:d(\"#c6e4b4\"),golf_course:d(\"#c6e4b4\"),playground:d(\"#cdeac0\"),allotments:d(\"#dae6c8\"),orchard:d(\"#d3e6c0\"),forest:d(\"#c9ddb0\"),wood:d(\"#c9ddb0\"),farmland:d(\"#ece9da\"),farmyard:d(\"#e7e1d1\"),residential:d(\"#eceae5\"),industrial:d(\"#e7e3db\"),retail:d(\"#ece7de\"),commercial:d(\"#ece7de\"),cemetery:d(\"#dbe2ce\"),grave_yard:d(\"#dbe2ce\"),quarry:d(\"#e5e1d7\")}},{source:\"sites\",type:\"fill\",color:d(\"#eceae3\"),kinds:{hospital:d(\"#f0dcd6\"),university:d(\"#ece0c8\"),college:d(\"#ece0c8\"),school:d(\"#ece0c8\"),kindergarten:d(\"#ece0c8\"),sports_centre:d(\"#d7e8c6\"),parking:d(\"#e7e5de\"),construction:d(\"#e8e2d6\")}},{source:\"water_polygons\",type:\"fill\",color:d(\"#8ecae6\")},{source:\"water_lines\",type:\"line\",color:d(\"#6fb4dd\"),width:1.6,kinds:{river:{width:2.6},canal:{width:2.2},stream:{width:1.5},ditch:{width:1.1},drain:{width:1.1}}},{source:\"buildings\",type:\"fill\",color:d(\"#dcd3bf\")},{source:\"streets\",type:\"line\",color:d(\"#ffffff\"),width:2,kinds:{motorway:{color:d(\"#f6b981\"),width:5.5},trunk:{color:d(\"#f7c690\"),width:5},primary:{color:d(\"#fbd0a0\"),width:4.5},secondary:{color:d(\"#ffe7b3\"),width:3.4},tertiary:{color:d(\"#ffffff\"),width:2.8},residential:{color:d(\"#ffffff\"),width:2.2},unclassified:{color:d(\"#ffffff\"),width:2},living_street:{color:d(\"#f5f2eb\"),width:2},service:{color:d(\"#f2efe8\"),width:1.3},track:{color:d(\"#e9e2d4\"),width:1.1},path:{color:d(\"#e6dccb\"),width:1}}},{source:\"boundaries\",type:\"line\",color:d(\"#caa9ca\"),width:.8}],xt={name:\"light\",background:lt,layers:it,label:{color:\"#3f3b36\",halo:\"#ffffff\",street:\"#8a8377\"}},Ht=[{source:\"land\",type:\"fill\",color:d(\"#1b1f28\"),kinds:{grass:d(\"#1e2a1e\"),garden:d(\"#1e2a1e\"),meadow:d(\"#1e2a1e\"),grassland:d(\"#1e2a1e\"),scrub:d(\"#1f291b\"),park:d(\"#213520\"),recreation_ground:d(\"#213520\"),village_green:d(\"#213520\"),golf_course:d(\"#203320\"),playground:d(\"#1f2e1e\"),allotments:d(\"#212a1b\"),orchard:d(\"#1f2b1f\"),forest:d(\"#1b2a1b\"),wood:d(\"#1b2a1b\"),farmland:d(\"#232519\"),farmyard:d(\"#26241a\"),residential:d(\"#1d212b\"),industrial:d(\"#20242e\"),retail:d(\"#232734\"),commercial:d(\"#232734\"),cemetery:d(\"#1c281c\"),grave_yard:d(\"#1c281c\"),quarry:d(\"#242019\")}},{source:\"sites\",type:\"fill\",color:d(\"#20242e\"),kinds:{hospital:d(\"#331f27\"),university:d(\"#2b2820\"),college:d(\"#2b2820\"),school:d(\"#2b2820\"),kindergarten:d(\"#2b2820\"),sports_centre:d(\"#1f2d1f\"),parking:d(\"#1e222b\"),construction:d(\"#232019\")}},{source:\"water_polygons\",type:\"fill\",color:d(\"#163a52\")},{source:\"water_lines\",type:\"line\",color:d(\"#3f82ad\"),width:1.6,kinds:{river:{width:2.6},canal:{width:2.2},stream:{width:1.5},ditch:{width:1.1},drain:{width:1.1}}},{source:\"buildings\",type:\"fill\",color:d(\"#272c3b\")},{source:\"streets\",type:\"line\",color:d(\"#3a4152\"),width:2,kinds:{motorway:{color:d(\"#bb8a56\"),width:5.5},trunk:{color:d(\"#a87f52\"),width:5},primary:{color:d(\"#977450\"),width:4.5},secondary:{color:d(\"#54607a\"),width:3.4},tertiary:{color:d(\"#48516a\"),width:2.8},residential:{color:d(\"#3a4254\"),width:2.2},unclassified:{color:d(\"#3a4254\"),width:2},living_street:{color:d(\"#333a4a\"),width:2},service:{color:d(\"#2e3441\"),width:1.3},track:{color:d(\"#2a303c\"),width:1.1},path:{color:d(\"#2a303c\"),width:1}}},{source:\"boundaries\",type:\"line\",color:d(\"#5a4a5a\"),width:.8}],Mt={name:\"dark\",background:d(\"#12151c\"),layers:Ht,label:{color:\"#d3dae6\",halo:\"#0b0d12\",street:\"#8a92a1\"}},Nt=[{source:\"land\",type:\"fill\",color:d(\"#efe9dd\"),kinds:{grass:d(\"#dfe6cf\"),garden:d(\"#dfe6cf\"),grassland:d(\"#dfe6cf\"),park:d(\"#d1e2ba\"),recreation_ground:d(\"#d1e2ba\"),village_green:d(\"#d1e2ba\"),playground:d(\"#d8e6c6\"),forest:d(\"#cddbb4\"),wood:d(\"#cddbb4\"),orchard:d(\"#d5e2c0\"),farmland:d(\"#eae4d2\"),residential:d(\"#f0ebe0\"),industrial:d(\"#e9e2d4\"),retail:d(\"#efe7d8\"),cemetery:d(\"#dbe1cd\"),grave_yard:d(\"#dbe1cd\")}},{source:\"sites\",type:\"fill\",color:d(\"#ece7dc\"),kinds:{hospital:d(\"#eedcd3\"),university:d(\"#e9ddc6\"),college:d(\"#e9ddc6\"),school:d(\"#e9ddc6\"),sports_centre:d(\"#d7e6c2\"),parking:d(\"#e6e1d5\"),construction:d(\"#e8e1d2\")}},{source:\"water_polygons\",type:\"fill\",color:d(\"#9cc7c4\")},{source:\"water_lines\",type:\"line\",color:d(\"#7fb4b0\"),width:1.6,kinds:{river:{width:2.6},canal:{width:2.2},stream:{width:1.5},ditch:{width:1.1}}},{source:\"buildings\",type:\"fill\",color:d(\"#e1d6c0\")},{source:\"streets\",type:\"line\",color:d(\"#ffffff\"),width:2,kinds:{motorway:{color:d(\"#d98b63\"),width:5.5},trunk:{color:d(\"#e0996f\"),width:5},primary:{color:d(\"#e8ac86\"),width:4.5},secondary:{color:d(\"#f2cfa6\"),width:3.4},tertiary:{color:d(\"#ffffff\"),width:2.8},residential:{color:d(\"#ffffff\"),width:2.2},service:{color:d(\"#f4efe6\"),width:1.3},track:{color:d(\"#e9e0d0\"),width:1.1}}}],Tt={name:\"brand\",background:d(\"#f5efe3\"),layers:Nt,label:{color:\"#4f3f30\",halo:\"#fbf6ec\",street:\"#9a8a72\"}},St={light:xt,dark:Mt,brand:Tt};function Ot(p,t,e){let r=Math.max(p,t,e),i=Math.min(p,t,e),s=(r+i)\/2,n=r-i;if(n<1e-6)return{h:0,s:0,l:s};let o=s>.5?n\/(2-r-i):n\/(r+i),a;return r===p?a=(t-e)\/n+(t<e?6:0):r===t?a=(e-p)\/n+2:a=(p-t)\/n+4,{h:a\/6,s:o,l:s}}function yt(p,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1\/6?p+(t-p)*6*e:e<1\/2?t:e<2\/3?p+(t-p)*(2\/3-e)*6:p}function Pt(p,t,e){if(t===0)return[e,e,e];let r=e<.5?e*(1+t):e+t-e*t,i=2*e-r;return[yt(i,r,p+1\/3),yt(i,r,p),yt(i,r,p-1\/3)]}function kt(p,t,e){let[r,i,s]=Pt(p,t,e),n=o=>Math.round(Math.max(0,Math.min(1,o))*255).toString(16).padStart(2,\"0\");return\"#\"+n(r)+n(i)+n(s)}function Ct(p,t=\"brand\"){let e=d(p),{h:r,s:i}=Ot(e[0],e[1],e[2]),s=Math.max(.25,Math.min(i,.72)),n=(g,b,T=1)=>{let v=Pt(r,Math.max(0,Math.min(1,g)),b);return[v[0],v[1],v[2],T]},o=it.map(g=>g.type===\"line\"?{...g,kinds:g.kinds?{...g.kinds}:void 0}:{...g,kinds:g.kinds?{...g.kinds}:void 0}),a=o.find(g=>g.source===\"land\");a&&(a.color=n(s*.22,.935));let m=o.find(g=>g.source===\"streets\");return m&&m.kinds&&(m.kinds.motorway={color:n(s,.62),width:5.5},m.kinds.trunk={color:n(s*.92,.66),width:5},m.kinds.primary={color:n(s*.8,.72),width:4.5},m.kinds.secondary={color:n(s*.55,.82),width:3.4}),{name:t,background:n(s*.28,.955),layers:o,label:{color:kt(r,Math.min(s,.5),.3),halo:\"#ffffff\",street:kt(r,s*.35,.5)}}}var _t={\"train-front\":[\"M8 3.1V7a4 4 0 0 0 8 0V3.1\",\"m9 15-1-1\",\"m15 15 1-1\",\"M9 19c-2.8 0-5-2.2-5-5v-4a8 8 0 0 1 16 0v4c0 2.8-2.2 5-5 5Z\",\"m8 19-2 3\",\"m16 19 2 3\"],bus:[\"M8 6v6\",\"M15 6v6\",\"M2 12h19.6\",\"M18 18h3s.5-1.7.8-2.8c.1-.4.2-.8.2-1.2 0-.4-.1-.8-.2-1.2l-1.4-5C20.1 6.8 19.1 6 18 6H4a2 2 0 0 0-2 2v10h3\",\"M 5 18 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\",\"M9 18h5\",\"M 14 18 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\"],\"cable-car\":[\"M10 3h.01\",\"M14 2h.01\",\"m2 9 20-5\",\"M12 12V6.5\",\"M 7 12 h 10 a 3 3 0 0 1 3 3 v 4 a 3 3 0 0 1 -3 3 h -10 a 3 3 0 0 1 -3 -3 v -4 a 3 3 0 0 1 3 -3 Z\",\"M9 12v5\",\"M15 12v5\",\"M4 17h16\"],\"graduation-cap\":[\"M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z\",\"M22 10v6\",\"M6 12.5V16a6 3 0 0 0 12 0v-3.5\"],\"book-open\":[\"M12 5v16\",\"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z\"],school:[\"M14 21v-3a2 2 0 0 0-4 0v3\",\"M18 4.933V21\",\"m4 6 7.106-3.79a2 2 0 0 1 1.788 0L20 6\",\"m6 11-3.52 2.147a1 1 0 0 0-.48.854V19a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5a1 1 0 0 0-.48-.853L18 11\",\"M6 4.933V21\",\"M 10 9 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\"],baby:[\"M10 16c.5.3 1.2.5 2 .5s1.5-.2 2-.5\",\"M15 12h.01\",\"M19.38 6.813A9 9 0 0 1 20.8 10.2a2 2 0 0 1 0 3.6 9 9 0 0 1-17.6 0 2 2 0 0 1 0-3.6A9 9 0 0 1 12 3c2 0 3.5 1.1 3.5 2.5s-.9 2.5-2 2.5c-.8 0-1.5-.4-1.5-1\",\"M9 12h.01\"],cross:[\"M4 9a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h4a1 1 0 0 1 1 1v4a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2v-4a1 1 0 0 1 1-1h4a2 2 0 0 0 2-2v-2a2 2 0 0 0-2-2h-4a1 1 0 0 1-1-1V4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4a1 1 0 0 1-1 1z\"],stethoscope:[\"M11 2v2\",\"M5 2v2\",\"M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1\",\"M8 15a6 6 0 0 0 12 0v-3\",\"M 18 10 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\"],\"paw-print\":[\"M 9 4 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\",\"M 16 8 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\",\"M 18 16 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\",\"M9 10a5 5 0 0 1 5 5v3.5a3.5 3.5 0 0 1-6.84 1.045Q6.52 17.48 4.46 16.84A3.5 3.5 0 0 1 5.5 10Z\"],landmark:[\"M10 18v-7\",\"M11.119 2.205a2 2 0 0 1 1.762 0l7.84 3.846A.5.5 0 0 1 20.5 7h-17a.5.5 0 0 1-.22-.949z\",\"M14 18v-7\",\"M18 18v-7\",\"M3 22h18\",\"M6 18v-7\"],shield:[\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"],flame:[\"M12 3q1 4 4 6.5t3 5.5a1 1 0 0 1-14 0 5 5 0 0 1 1-3 1 1 0 0 0 5 0c0-2-1.5-3-1.5-5q0-2 2.5-4\"],mail:[\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\",\"M 4 4 h 16 a 2 2 0 0 1 2 2 v 12 a 2 2 0 0 1 -2 2 h -16 a 2 2 0 0 1 -2 -2 v -12 a 2 2 0 0 1 2 -2 Z\"],drama:[\"M10 11h.01\",\"M14 6h.01\",\"M18 6h.01\",\"M6.5 13.1h.01\",\"M22 5c0 9-4 12-6 12s-6-3-6-12c0-2 2-3 6-3s6 1 6 3\",\"M17.4 9.9c-.8.8-2 .8-2.8 0\",\"M10.1 7.1C9 7.2 7.7 7.7 6 8.6c-3.5 2-4.7 3.9-3.7 5.6 4.5 7.8 9.5 8.4 11.2 7.4.9-.5 1.9-2.1 1.9-4.7\",\"M9.1 16.5c.3-1.1 1.4-1.7 2.4-1.4\"],clapperboard:[\"m12.296 3.464 3.02 3.956\",\"M20.2 6 3 11l-.9-2.4c-.3-1.1.3-2.2 1.3-2.5l13.5-4c1.1-.3 2.2.3 2.5 1.3z\",\"M3 11h18v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\",\"m6.18 5.276 3.1 3.899\"],\"disc-3\":[\"M 2 12 a 10 10 0 1 0 20 0 a 10 10 0 1 0 -20 0\",\"M6 12c0-1.7.7-3.2 1.8-4.2\",\"M 10 12 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\",\"M18 12c0 1.7-.7 3.2-1.8 4.2\"],\"shopping-bag\":[\"M16 10a4 4 0 0 1-8 0\",\"M3.103 6.034h17.794\",\"M3.4 5.467a2 2 0 0 0-.4 1.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.667a2 2 0 0 0-.4-1.2l-2-2.667A2 2 0 0 0 17 2H7a2 2 0 0 0-1.6.8z\"],\"shopping-basket\":[\"m15 11-1 9\",\"m19 11-4-7\",\"M2 11h20\",\"m3.5 11 1.6 7.4a2 2 0 0 0 2 1.6h9.8a2 2 0 0 0 2-1.6l1.7-7.4\",\"M4.5 15.5h15\",\"m5 11 4-7\",\"m9 11 1 9\"],\"shopping-cart\":[\"M 7 21 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0\",\"M 18 21 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0\",\"M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12\"],church:[\"M10 9h4\",\"M12 7v5\",\"M14 21v-3a2 2 0 0 0-4 0v3\",\"m18 9 3.52 2.147a1 1 0 0 1 .48.854V19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-6.999a1 1 0 0 1 .48-.854L6 9\",\"M6 21V7a1 1 0 0 1 .376-.782l5-3.999a1 1 0 0 1 1.249.001l5 4A1 1 0 0 1 18 7v14\"],trees:[\"M10 10v.2A3 3 0 0 1 8.9 16H5a3 3 0 0 1-1-5.8V10a3 3 0 0 1 6 0Z\",\"M7 16v6\",\"M13 19v3\",\"M12 19h8.3a1 1 0 0 0 .7-1.7L18 14h.3a1 1 0 0 0 .7-1.7L16 9h.2a1 1 0 0 0 .8-1.7L13 3l-1.4 1.5\"],\"ferris-wheel\":[\"M 10 12 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\",\"M12 2v4\",\"m6.8 15-3.5 2\",\"m20.7 7-3.5 2\",\"M6.8 9 3.3 7\",\"m20.7 17-3.5-2\",\"m9 22 3-8 3 8\",\"M8 22h8\",\"M18 18.7a9 9 0 1 0-12 0\"],trophy:[\"M10 14.66V17a1 1 0 0 1-1 1 2 2 0 0 0-2 2v2\",\"M14 14.66V17a1 1 0 0 0 1 1 2 2 0 0 1 2 2v2\",\"M17.916 10H19.5A2.5 2.5 0 0 0 22 7.5V5a1 1 0 0 0-1-1h-3\",\"M4 22h16\",\"M6 9a6 6 0 0 0 12 0V3a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1z\",\"M6.084 10H4.5A2.5 2.5 0 0 1 2 7.5V5a1 1 0 0 1 1-1h3\"],dumbbell:[\"M17.596 12.768a2 2 0 1 0 2.829-2.829l-1.768-1.767a2 2 0 0 0 2.828-2.829l-2.828-2.828a2 2 0 0 0-2.829 2.828l-1.767-1.768a2 2 0 1 0-2.829 2.829z\",\"m2.5 21.5 1.4-1.4\",\"m20.1 3.9 1.4-1.4\",\"M5.343 21.485a2 2 0 1 0 2.829-2.828l1.767 1.768a2 2 0 1 0 2.829-2.829l-6.364-6.364a2 2 0 1 0-2.829 2.829l1.768 1.767a2 2 0 0 0-2.828 2.829z\",\"m9.6 14.4 4.8-4.8\"],bed:[\"M2 4v16\",\"M2 8h18a2 2 0 0 1 2 2v10\",\"M2 17h20\",\"M6 8v9\"],utensils:[\"M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2\",\"M7 2v20\",\"M21 15V2a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7\"],sandwich:[\"m2.37 11.223 8.372-6.777a2 2 0 0 1 2.516 0l8.371 6.777\",\"M21 15a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-5.25\",\"M3 15a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h9\",\"m6.67 15 6.13 4.6a2 2 0 0 0 2.8-.4l3.15-4.2\",\"M 3 11 h 18 a 1 1 0 0 1 1 1 v 2 a 1 1 0 0 1 -1 1 h -18 a 1 1 0 0 1 -1 -1 v -2 a 1 1 0 0 1 1 -1 Z\"],coffee:[\"M10 2v2\",\"M14 2v2\",\"M16 8a1 1 0 0 1 1 1v8a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1h14a4 4 0 1 1 0 8h-1\",\"M6 2v2\"],croissant:[\"M10.2 18H4.774a1.5 1.5 0 0 1-1.352-.97 11 11 0 0 1 .132-6.487\",\"M18 10.2V4.774a1.5 1.5 0 0 0-.97-1.352 11 11 0 0 0-6.486.132\",\"M18 5a4 3 0 0 1 4 3 2 2 0 0 1-2 2 10 10 0 0 0-5.139 1.42\",\"M5 18a3 4 0 0 0 3 4 2 2 0 0 0 2-2 10 10 0 0 1 1.42-5.14\",\"M8.709 2.554a10 10 0 0 0-6.155 6.155 1.5 1.5 0 0 0 .676 1.626l9.807 5.42a2 2 0 0 0 2.718-2.718l-5.42-9.807a1.5 1.5 0 0 0-1.626-.676\"],wine:[\"M8 22h8\",\"M7 10h10\",\"M12 15v7\",\"M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z\"],beer:[\"M17 11h1a3 3 0 0 1 0 6h-1\",\"M9 12v6\",\"M13 12v6\",\"M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z\",\"M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8\"],banknote:[\"M 4 6 h 16 a 2 2 0 0 1 2 2 v 8 a 2 2 0 0 1 -2 2 h -16 a 2 2 0 0 1 -2 -2 v -8 a 2 2 0 0 1 2 -2 Z\",\"M 10 12 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\",\"M6 12h.01M18 12h.01\"],pill:[\"m10.5 20.5 10-10a4.95 4.95 0 1 0-7-7l-10 10a4.95 4.95 0 1 0 7 7Z\",\"m8.5 8.5 7 7\"],fuel:[\"M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 4 0v-6.998a2 2 0 0 0-.59-1.42L18 5\",\"M14 21V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v16\",\"M2 21h13\",\"M3 9h11\"],carrot:[\"M15 16a1 1 0 0 0-7-7q-4 4-5.987 12.385a.5.5 0 0 0 .602.602Q11 20 15 16l-3-3\",\"M15 9q4 4 7 0-3-4-7 0 4-4 0-7-4 3 0 7\",\"m8 15-2.58-2.58\"],beef:[\"M16.4 13.7A6.5 6.5 0 1 0 6.28 6.6c-1.1 3.13-.78 3.9-3.18 6.08A3 3 0 0 0 5 18c4 0 8.4-1.8 11.4-4.3\",\"m18.5 6 2.19 4.5a6.48 6.48 0 0 1-2.29 7.2C15.4 20.2 11 22 7 22a3 3 0 0 1-2.68-1.66L2.4 16.5\",\"M 10 8.5 a 2.5 2.5 0 1 0 5 0 a 2.5 2.5 0 1 0 -5 0\"],\"cup-soda\":[\"m6 8 1.75 12.28a2 2 0 0 0 2 1.72h4.54a2 2 0 0 0 2-1.72L18 8\",\"M5 8h14\",\"M7 15a6.47 6.47 0 0 1 5 0 6.47 6.47 0 0 0 5 0\",\"m12 8 1-6h2\"],fish:[\"M6.5 12c.94-3.46 4.94-6 8.5-6 3.56 0 6.06 2.54 7 6-.94 3.47-3.44 6-7 6s-7.56-2.53-8.5-6Z\",\"M18 12v.5\",\"M16 17.93a9.77 9.77 0 0 1 0-11.86\",\"M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33\",\"M10.46 7.26C10.2 5.88 9.17 4.24 8 3h5.8a2 2 0 0 1 1.98 1.67l.23 1.4\",\"m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98\"],shirt:[\"M20.38 3.46 16 2a4 4 0 0 1-8 0L3.62 3.46a2 2 0 0 0-1.34 2.23l.58 3.47a1 1 0 0 0 .99.84H6v10c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V10h2.15a1 1 0 0 0 .99-.84l.58-3.47a2 2 0 0 0-1.34-2.23z\"],footprints:[\"M4 16v-2.38C4 11.5 2.97 10.5 3 8c.03-2.72 1.49-6 4.5-6C9.37 2 10 3.8 10 5.5c0 3.11-2 5.66-2 8.68V16a2 2 0 1 1-4 0Z\",\"M20 20v-2.38c0-2.12 1.03-3.12 1-5.62-.03-2.72-1.49-6-4.5-6C14.63 6 14 7.8 14 9.5c0 3.11 2 5.66 2 8.68V20a2 2 0 1 0 4 0Z\",\"M16 17h4\",\"M4 13h4\"],gem:[\"M10.5 3 8 9l4 13 4-13-2.5-6\",\"M17 3a2 2 0 0 1 1.6.8l3 4a2 2 0 0 1 .013 2.382l-7.99 10.986a2 2 0 0 1-3.247 0l-7.99-10.986A2 2 0 0 1 2.4 7.8l2.998-3.997A2 2 0 0 1 7 3z\",\"M2 9h20\"],briefcase:[\"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\",\"M 4 6 h 16 a 2 2 0 0 1 2 2 v 10 a 2 2 0 0 1 -2 2 h -16 a 2 2 0 0 1 -2 -2 v -10 a 2 2 0 0 1 2 -2 Z\"],sparkles:[\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\",\"M20 2v4\",\"M22 4h-4\",\"M 2 20 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\"],scissors:[\"M 3 6 a 3 3 0 1 0 6 0 a 3 3 0 1 0 -6 0\",\"M8.12 8.12 12 12\",\"M20 4 8.12 15.88\",\"M 3 18 a 3 3 0 1 0 6 0 a 3 3 0 1 0 -6 0\",\"M14.8 14.8 20 20\"],glasses:[\"M 2 15 a 4 4 0 1 0 8 0 a 4 4 0 1 0 -8 0\",\"M 14 15 a 4 4 0 1 0 8 0 a 4 4 0 1 0 -8 0\",\"M14 15a2 2 0 0 0-2-2 2 2 0 0 0-2 2\",\"M2.5 13 5 7c.7-1.3 1.4-2 3-2\",\"M21.5 13 19 7c-.7-1.3-1.5-2-3-2\"],sofa:[\"M20 9V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v3\",\"M2 16a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v1.5a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5V11a2 2 0 0 0-4 0z\",\"M4 18v2\",\"M20 18v2\",\"M12 4v9\"],hammer:[\"m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9\",\"m18 15 4-4\",\"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5\"],sprout:[\"M14 9.536V7a4 4 0 0 1 4-4h1.5a.5.5 0 0 1 .5.5V5a4 4 0 0 1-4 4 4 4 0 0 0-4 4c0 2 1 3 1 5a5 5 0 0 1-1 3\",\"M4 9a5 5 0 0 1 8 4 5 5 0 0 1-8-4\",\"M5 21h14\"],\"paint-roller\":[\"M 4 2 h 12 a 2 2 0 0 1 2 2 v 2 a 2 2 0 0 1 -2 2 h -12 a 2 2 0 0 1 -2 -2 v -2 a 2 2 0 0 1 2 -2 Z\",\"M10 16v-2a2 2 0 0 1 2-2h8a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2\",\"M 9 16 h 2 a 1 1 0 0 1 1 1 v 4 a 1 1 0 0 1 -1 1 h -2 a 1 1 0 0 1 -1 -1 v -4 a 1 1 0 0 1 1 -1 Z\"],plug:[\"M12 22v-5\",\"M15 8V2\",\"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z\",\"M9 8V2\"],smartphone:[\"M 7 2 h 10 a 2 2 0 0 1 2 2 v 16 a 2 2 0 0 1 -2 2 h -10 a 2 2 0 0 1 -2 -2 v -16 a 2 2 0 0 1 2 -2 Z\",\"M12 18h.01\"],monitor:[\"M 4 3 h 16 a 2 2 0 0 1 2 2 v 10 a 2 2 0 0 1 -2 2 h -16 a 2 2 0 0 1 -2 -2 v -10 a 2 2 0 0 1 2 -2 Z\",\"M 8 21 L 16 21\",\"M 12 17 L 12 21\"],book:[\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20\"],pencil:[\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\"m15 5 4 4\"],blocks:[\"M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2\",\"M 15 2 h 6 a 1 1 0 0 1 1 1 v 6 a 1 1 0 0 1 -1 1 h -6 a 1 1 0 0 1 -1 -1 v -6 a 1 1 0 0 1 1 -1 Z\"],gift:[\"M12 7v14\",\"M20 11v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8\",\"M7.5 7a1 1 0 0 1 0-5A4.8 8 0 0 1 12 7a4.8 8 0 0 1 4.5-5 1 1 0 0 1 0 5\",\"M 4 7 h 16 a 1 1 0 0 1 1 1 v 2 a 1 1 0 0 1 -1 1 h -16 a 1 1 0 0 1 -1 -1 v -2 a 1 1 0 0 1 1 -1 Z\"],flower:[\"M 9 12 a 3 3 0 1 0 6 0 a 3 3 0 1 0 -6 0\",\"M12 16.5A4.5 4.5 0 1 1 7.5 12 4.5 4.5 0 1 1 12 7.5a4.5 4.5 0 1 1 4.5 4.5 4.5 4.5 0 1 1-4.5 4.5\",\"M12 7.5V9\",\"M7.5 12H9\",\"M16.5 12H15\",\"M12 16.5V15\",\"m8 8 1.88 1.88\",\"M14.12 9.88 16 8\",\"m8 16 1.88-1.88\",\"M14.12 14.12 16 16\"],bike:[\"M 15 17.5 a 3.5 3.5 0 1 0 7 0 a 3.5 3.5 0 1 0 -7 0\",\"M 2 17.5 a 3.5 3.5 0 1 0 7 0 a 3.5 3.5 0 1 0 -7 0\",\"M 14 5 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0\",\"M12 17.5V14l-3-3 4-3 2 3h2\"],car:[\"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2\",\"M 5 17 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\",\"M9 17h6\",\"M 15 17 a 2 2 0 1 0 4 0 a 2 2 0 1 0 -4 0\"],newspaper:[\"M15 18h-5\",\"M18 14h-8\",\"M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-4 0v-9a2 2 0 0 1 2-2h2\",\"M 11 6 h 6 a 1 1 0 0 1 1 1 v 2 a 1 1 0 0 1 -1 1 h -6 a 1 1 0 0 1 -1 -1 v -2 a 1 1 0 0 1 1 -1 Z\"],plane:[\"M17.8 19.2 16 11l3.5-3.5C21 6 21.5 4 21 3c-1-.5-3 0-4.5 1.5L13 8 4.8 6.2c-.5-.1-.9.1-1.1.5l-.3.5c-.2.5-.1 1 .3 1.3L9 12l-2 3H4l-1 1 3 2 2 3 1-1v-3l3-2 3.5 5.3c.3.4.8.5 1.3.3l.5-.2c.4-.3.6-.7.5-1.2z\"],\"washing-machine\":[\"M3 6h3\",\"M17 6h.01\",\"M 5 2 h 14 a 2 2 0 0 1 2 2 v 16 a 2 2 0 0 1 -2 2 h -14 a 2 2 0 0 1 -2 -2 v -16 a 2 2 0 0 1 2 -2 Z\",\"M 7 13 a 5 5 0 1 0 10 0 a 5 5 0 1 0 -10 0\",\"M12 18a2.5 2.5 0 0 0 0-5 2.5 2.5 0 0 1 0-5\"],store:[\"M15 21v-5a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v5\",\"M17.774 10.31a1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.451 0 1.12 1.12 0 0 0-1.548 0 2.5 2.5 0 0 1-3.452 0 1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.77-3.248l2.889-4.184A2 2 0 0 1 7 2h10a2 2 0 0 1 1.653.873l2.895 4.192a2.5 2.5 0 0 1-3.774 3.244\",\"M4 10.95V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8.05\"],\"map-pin\":[\"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\"M 9 10 a 3 3 0 1 0 6 0 a 3 3 0 1 0 -6 0\"]},pt={metro:\"train-front\",bus_station:\"bus\",cablecar:\"cable-car\",university:\"graduation-cap\",college:\"graduation-cap\",library:\"book-open\",school:\"school\",kindergarten:\"baby\",hospital:\"cross\",clinic:\"stethoscope\",doctors:\"stethoscope\",dentist:\"stethoscope\",veterinary:\"paw-print\",townhall:\"landmark\",courthouse:\"landmark\",embassy:\"landmark\",museum:\"landmark\",community_centre:\"landmark\",police:\"shield\",fire_station:\"flame\",post_office:\"mail\",theatre:\"drama\",arts_centre:\"drama\",cinema:\"clapperboard\",nightclub:\"disc-3\",mall:\"shopping-bag\",department_store:\"shopping-bag\",marketplace:\"shopping-basket\",supermarket:\"shopping-cart\",worship:\"church\",park:\"trees\",theme_park:\"ferris-wheel\",zoo:\"paw-print\",stadium:\"trophy\",sports_centre:\"dumbbell\",hotel:\"bed\",hostel:\"bed\",guest_house:\"bed\",motel:\"bed\",restaurant:\"utensils\",fast_food:\"sandwich\",cafe:\"coffee\",bakery:\"croissant\",bar:\"wine\",pub:\"beer\",bank:\"banknote\",atm:\"banknote\",pharmacy:\"pill\",fuel:\"fuel\",convenience:\"shopping-basket\",greengrocer:\"carrot\",butcher:\"beef\",alcohol:\"wine\",beverages:\"cup-soda\",seafood:\"fish\",clothes:\"shirt\",shoes:\"footprints\",jewelry:\"gem\",bag:\"briefcase\",beauty:\"sparkles\",hairdresser:\"scissors\",cosmetics:\"sparkles\",chemist:\"sparkles\",optician:\"glasses\",furniture:\"sofa\",hardware:\"hammer\",doityourself:\"hammer\",garden_centre:\"sprout\",paint:\"paint-roller\",electronics:\"plug\",mobile_phone:\"smartphone\",computer:\"monitor\",books:\"book\",stationery:\"pencil\",toys:\"blocks\",sports:\"dumbbell\",gift:\"gift\",florist:\"flower\",bicycle:\"bike\",car:\"car\",car_rental:\"car\",car_wash:\"car\",pet:\"paw-print\",kiosk:\"newspaper\",newsagent:\"newspaper\",travel_agency:\"plane\",laundry:\"washing-machine\",shop:\"store\",place:\"map-pin\",_default:\"map-pin\"};var st=class{constructor(t,e,r={}){this.contextLost=!1;this.rotC=1;this.rotS=0;this.attribution=\"\\xA9 OpenStreetMap contributors\";this.minZoom=0;this.maxZoom=19;this.tileMaxZoom=14;this.dprOverride=null;this.urlTemplate=\"https:\/\/vector.openstreetmap.org\/shortbread_v1\/{z}\/{x}\/{y}.mvt\";this.maxTiles=900;this.tileCache=!0;this.maxCachedTiles=2e3;this.lastTrim=0;this.lastEvict=0;this.preloadRing=1;this.preloadZoomOut=!0;this.preloadZoomIn=!0;this.lookaheadFrames=10;this.uploadBudgetMs=6;this.coldRevealBudgetMs=12;this.preloadTimer=0;this.lastRenderMs=0;this.drawCalls=0;this.builtCount=0;this.tiles=new Map;this.frame=0;this.workers=[];this.workerBusy=[];this.workerTask=[];this.workerSince=[];this.workerUrl=\"dist\/worker_vec.js\";this.currentStyleLayers=it;this.workerTimeoutMs=1e4;this.reqQueue=[];this.nextId=1;this.pending=new Map;this.fp={};this.lp={};this.labelTex=new Map;this.labelState=new Map;this.lastLabelT=0;this.poiState=new Map;this.lastPoiT=0;this.labelsFading=!1;this.sp={};this.gb={};this.glyphScratch=new Float32Array(96e3);this.glyphUV=new Map;this.iconUV=new Map;this.glyphPen={x:0,y:0,rowH:0};this.glyphAtlasDirty=!1;this.glyphAtlasDpr=0;this.ATLAS=1024;this.streetState=new Map;this.lastStreetT=0;this.lastStreetZoom=-1;this.lastStreetCX=0;this.lastStreetCY=0;this.lastStreetLayoutT=-1e9;this.lastStreetBearing=0;this._labelRects=[];this._occupiedRects=[];this._poiRects=[];this.housePlaced=[];this.lastHouseCX=0;this.lastHouseCY=0;this.pinTex=new Map;this.markerTex=new Map;this.popupTex=new Map;this.overlay=[];this.lineAA=!0;this.performanceMode=\"full\";this.liteDropSources=[];this.minimalDropSources=[\"buildings\",\"sites\"];this.motionBlur=(navigator.hardwareConcurrency||4)>=4;this.blurGain=1.25;this.maxBlur=.029;this.blurMinStrength=.004;this.panGain=.55;this.maxPanBlur=.028;this.prevZoomForBlur=0;this.prevLngForBlur=0;this.prevLatForBlur=0;this.blurInit=!1;this.blurFocusX=null;this.blurFocusY=null;this.bp={};this.fbo=null;this.fboTex=null;this.fboW=0;this.fboH=0;this.gp={};this.bg=lt;this.labelColor=\"#3f3b36\";this.labelHalo=\"#ffffff\";this.streetColor=\"#8a8377\";this.streetMinZoom={motorway:14,trunk:14,primary:14,secondary:15,tertiary:15,residential:16,living_street:16,unclassified:16,pedestrian:16,service:17,track:17,path:17};this.showHousenumbers=!0;this.houseNumberMinZoom=18;this.houseNumberCap=120;this.houseScale=.82;this.houseScaleZoomGain=.16;this.houseScaleMax=1.08;this.showPois=!0;this.poiCap=48;this.poiTextPx=13;this.poiBadgeBg=\"#ffffff\";this.poiIconColor=\"#c65a37\";this.poiBadgeSize=26;this.poiIconFill=.56;this.poiLabelGap=2;this.poiCategoryColor={metro:\"#2f6fb0\",bus_station:\"#2f6fb0\",cablecar:\"#2f6fb0\",hospital:\"#d1433f\",university:\"#2a8a8a\",college:\"#2a8a8a\",library:\"#2a8a8a\",townhall:\"#7a5ea8\",courthouse:\"#7a5ea8\",embassy:\"#7a5ea8\",museum:\"#7a5ea8\",theatre:\"#a5478c\",cinema:\"#a5478c\",arts_centre:\"#a5478c\",mall:\"#d17a2a\",department_store:\"#d17a2a\",supermarket:\"#d17a2a\",marketplace:\"#d17a2a\",worship:\"#6b5d4f\",park:\"#3d9a52\",theme_park:\"#3d9a52\",zoo:\"#3d9a52\",stadium:\"#3d9a52\",sports_centre:\"#3d9a52\",hotel:\"#c15b7a\",restaurant:\"#d9663d\",fast_food:\"#d9663d\",cafe:\"#9a6a3c\",bakery:\"#9a6a3c\",bar:\"#8e3b5e\",pub:\"#8e3b5e\",bank:\"#2f8f6b\",atm:\"#2f8f6b\",pharmacy:\"#4aa34a\",fuel:\"#5a6b7a\",nightclub:\"#a5478c\",clinic:\"#3f7ea8\",doctors:\"#3f7ea8\",dentist:\"#3f7ea8\",veterinary:\"#3d9a52\",school:\"#2a8a8a\",kindergarten:\"#e0a52e\",police:\"#3a5a8f\",fire_station:\"#d1433f\",post_office:\"#2f6fb0\",community_centre:\"#7a5ea8\",hostel:\"#c15b7a\",guest_house:\"#c15b7a\",motel:\"#c15b7a\",convenience:\"#6a9a3f\",greengrocer:\"#6a9a3f\",butcher:\"#6a9a3f\",beverages:\"#6a9a3f\",seafood:\"#6a9a3f\",alcohol:\"#8e3b5e\",clothes:\"#b5568f\",shoes:\"#b5568f\",jewelry:\"#b5568f\",bag:\"#b5568f\",beauty:\"#c9598a\",hairdresser:\"#c9598a\",cosmetics:\"#c9598a\",chemist:\"#c9598a\",optician:\"#c9598a\",furniture:\"#8a6a3c\",hardware:\"#8a6a3c\",doityourself:\"#8a6a3c\",paint:\"#8a6a3c\",garden_centre:\"#3d9a52\",florist:\"#3d9a52\",sports:\"#3d9a52\",bicycle:\"#3d9a52\",electronics:\"#3a7ca5\",mobile_phone:\"#3a7ca5\",computer:\"#3a7ca5\",books:\"#d17a2a\",stationery:\"#d17a2a\",toys:\"#d17a2a\",gift:\"#c15b7a\",car:\"#5a6b7a\",car_rental:\"#5a6b7a\",car_wash:\"#5a6b7a\",laundry:\"#6a6a6a\",pet:\"#6b5d4f\",kiosk:\"#6a6a6a\",newsagent:\"#6a6a6a\",travel_agency:\"#2f6fb0\",shop:\"#8a7a6a\",place:\"#8a7a6a\"};this.poiCollectMinZoom=17.5;this.poiDefaultMinZoom=18;this.landmarkMinZoom={metro:18,mall:18,hospital:18,university:18,stadium:18,museum:18,zoo:18,park:18,townhall:18,bus_station:18,cablecar:18,theatre:18,cinema:18,marketplace:18,theme_park:18,courthouse:18,embassy:18,worship:18,college:18,arts_centre:18,department_store:18.5,library:18.5,sports_centre:18.5,supermarket:18.5,hotel:18.5,pharmacy:18.5,bank:18.5,restaurant:18.5,fuel:18.5,fast_food:18.5,cafe:18.5,bar:19,pub:19,bakery:19,clinic:18.5,school:18.5,police:18.5,fire_station:18.5,post_office:18.5,hostel:18.5,nightclub:19,doctors:19,dentist:19,veterinary:19,kindergarten:19,community_centre:19,car_rental:19,car_wash:19,atm:19,guest_house:19,motel:19,convenience:19,greengrocer:19,butcher:19,alcohol:19,beverages:19,seafood:19,clothes:19,shoes:19,jewelry:19,bag:19,beauty:19,hairdresser:19,cosmetics:19,chemist:19,optician:19,furniture:19,hardware:19,doityourself:19,garden_centre:19,paint:19,electronics:19,mobile_phone:19,computer:19,books:19,stationery:19,toys:19,sports:19,gift:19,florist:19,bicycle:19,car:19,pet:19,kiosk:19,newsagent:19,travel_agency:19,laundry:19,shop:19,place:19};this.onContextLost=t=>{t.preventDefault(),this.contextLost=!0};this.onContextRestored=()=>{this.contextLost=!1,this.initGL(),this.fbo=null,this.fboTex=null,this.fboW=0,this.fboH=0,this.tiles.clear(),this.pending.clear(),this.reqQueue=[],this.labelTex.clear(),this.resetGlyphAtlas(this.dpr()),this.streetState.clear(),this.housePlaced=[],this.poiState.clear(),this.builtCount=0,this.blurInit=!1,this.onNeedRender()};this.canvas=t,this.onNeedRender=e;let i=t.getContext(\"webgl\",{antialias:!0,alpha:!1});if(!i)throw new Error(\"WebGL not available\");this.gl=i,t.addEventListener(\"webglcontextlost\",this.onContextLost,!1),t.addEventListener(\"webglcontextrestored\",this.onContextRestored,!1),this.initGL(),this.workerUrl=r.workerUrl||\"dist\/worker_vec.js\";let s=r.workers||Math.min(8,Math.max(2,(navigator.hardwareConcurrency||4)-1));for(let n=0;n<s;n++){let o=new Worker(this.workerUrl),a=n;o.onmessage=m=>this.onWorkerMessage(m,a),o.onerror=()=>this.recoverWorker(a),this.workers.push(o),this.workerBusy.push(!1),this.workerTask.push(null),this.workerSince.push(0)}this.waitForLabelFont()}waitForLabelFont(){let t=document.fonts;if(!t)return;let e=()=>{for(let r of this.labelTex.values())this.gl.deleteTexture(r.tex);this.labelTex.clear(),this.resetGlyphAtlas(this.dpr()),this.housePlaced=[],this.poiState.clear(),this.onNeedRender()};t.load&&Promise.all([t.load('400 12px \"Helvetica World\"'),t.load('400 12px \"Mardoto\"')]).then(e).catch(()=>{}),t.addEventListener&&t.addEventListener(\"loadingdone\",e)}onWorkerMessage(t,e){let{id:r,ok:i,fills:s,lines:n}=t.data,o=this.pending.get(r);this.pending.delete(r),this.workerBusy[e]=!1,this.workerTask[e]=null,o&&(o.inflight=!1,i?(o.fills=s,o.lines=n,o.labels=t.data.labels||[],o.streetLabels=t.data.streetLabels||[],o.houseNumbers=t.data.houseNumbers||[],o.poiLabels=t.data.poiLabels||[]):o.failed=!0),this.dispatchTiles(),this.onNeedRender()}dispatchTiles(){let t=performance.now();for(let i=0;i<this.workers.length;i++)this.workerBusy[i]&&this.workerTask[i]&&t-this.workerSince[i]>this.workerTimeoutMs&&this.recoverWorker(i);if(!this.reqQueue.length)return;let e=[];for(let i of this.reqQueue)i.queued&&!i.built&&this.tiles.get(i.key)===i&&t-i.wantTime<=1e3?e.push(i):i.queued=!1;this.reqQueue=e;let r=0;for(let i=0;i<this.workerBusy.length;i++)this.workerBusy[i]||r++;if(!(!r||!this.reqQueue.length)){this.reqQueue.sort((i,s)=>i.priority-s.priority);for(let i=0;i<this.workers.length&&this.reqQueue.length;i++){if(this.workerBusy[i])continue;let s=this.reqQueue.shift();s.queued=!1,s.inflight=!0;let n=this.nextId++;this.pending.set(n,s),this.workerBusy[i]=!0,this.workerTask[i]=s,this.workerSince[i]=t,this.workers[i].postMessage({id:n,url:s.url})}}}recoverWorker(t){let e=this.workerTask[t];if(e){for(let[i,s]of this.pending)if(s===e){this.pending.delete(i);break}}try{this.workers[t].terminate()}catch{}let r=new Worker(this.workerUrl);r.onmessage=i=>this.onWorkerMessage(i,t),r.onerror=()=>this.recoverWorker(t),r.postMessage({type:\"style\",layers:this.workerStyleLayers()}),this.tileCache||r.postMessage({type:\"config\",tileCache:!1}),this.workers[t]=r,this.workerBusy[t]=!1,this.workerTask[t]=null,this.workerSince[t]=0,e&&!e.built&&!e.failed&&(e.inflight=!1,e.queued=!0,e.wantTime=performance.now(),this.reqQueue.push(e)),this.onNeedRender()}dpr(){var t,e;return Math.min(2,(e=(t=this.dprOverride)!=null?t:window.devicePixelRatio)!=null?e:1)}compile(t,e){let r=this.gl,i=r.createShader(t);if(r.shaderSource(i,e),r.compileShader(i),!r.getShaderParameter(i,r.COMPILE_STATUS))throw new Error(\"vec shader: \"+r.getShaderInfoLog(i));return i}link(t,e){let r=this.gl,i=r.createProgram();if(r.attachShader(i,this.compile(r.VERTEX_SHADER,t)),r.attachShader(i,this.compile(r.FRAGMENT_SHADER,e)),r.linkProgram(i),!r.getProgramParameter(i,r.LINK_STATUS))throw new Error(\"vec link: \"+r.getProgramInfoLog(i));return i}initGL(){let t=this.gl,e=\"vec3 unpackRGB(float p){ float b=mod(p,256.0); float g=mod(floor(p\/256.0),256.0); float r=floor(p\/65536.0); return vec3(r,g,b)\/255.0; }\",r=\"uniform vec2 u_rot; vec2 zmRot(vec2 px, vec2 res){ vec2 d=px-res*0.5; return vec2(d.x*u_rot.x+d.y*u_rot.y, -d.x*u_rot.y+d.y*u_rot.x)+res*0.5; }\";this.fillProg=this.link(`attribute vec2 a_pos; attribute float a_c; uniform vec2 u_res; uniform vec4 u_dest; varying vec3 v_color; ${e} ${r}\r\n       void main(){ vec2 px=u_dest.xy+a_pos*u_dest.zw; vec2 c=(zmRot(px,u_res)\/u_res)*2.0-1.0; gl_Position=vec4(c.x,-c.y,0.0,1.0); v_color=unpackRGB(a_c); }`,\"precision mediump float; uniform float u_fade; varying vec3 v_color; void main(){ gl_FragColor=vec4(v_color,1.0)*u_fade; }\"),this.fp.pos=t.getAttribLocation(this.fillProg,\"a_pos\"),this.fp.color=t.getAttribLocation(this.fillProg,\"a_c\"),this.fp.res=t.getUniformLocation(this.fillProg,\"u_res\"),this.fp.dest=t.getUniformLocation(this.fillProg,\"u_dest\"),this.fp.fade=t.getUniformLocation(this.fillProg,\"u_fade\"),this.fp.rot=t.getUniformLocation(this.fillProg,\"u_rot\"),this.lineProg=this.link(`attribute vec2 a_pos; attribute vec2 a_norm; attribute float a_hw; attribute float a_c;\r\n       uniform vec2 u_res; uniform vec4 u_dest; uniform float u_dpr; uniform mediump float u_aa;\r\n       varying vec3 v_color; varying float v_dist; varying float v_solid; ${e} ${r}\r\n       void main(){ float hw=abs(a_hw); float ext=hw+u_aa; vec2 px=u_dest.xy+a_pos*u_dest.zw + a_norm*(ext*u_dpr);\r\n         vec2 c=(zmRot(px,u_res)\/u_res)*2.0-1.0; gl_Position=vec4(c.x,-c.y,0.0,1.0); v_color=unpackRGB(a_c);\r\n         v_dist=sign(a_hw)*ext*u_dpr; v_solid=hw*u_dpr; }`,`precision mediump float; uniform float u_fade; uniform mediump float u_aa; varying vec3 v_color; varying float v_dist; varying float v_solid;\r\n       void main(){ float cov=1.0; if(u_aa>0.5) cov=1.0-smoothstep(v_solid-0.7, v_solid+0.7, abs(v_dist));\r\n         gl_FragColor=vec4(v_color,1.0)*(u_fade*cov); }`),this.lp.pos=t.getAttribLocation(this.lineProg,\"a_pos\"),this.lp.norm=t.getAttribLocation(this.lineProg,\"a_norm\"),this.lp.hw=t.getAttribLocation(this.lineProg,\"a_hw\"),this.lp.color=t.getAttribLocation(this.lineProg,\"a_c\"),this.lp.res=t.getUniformLocation(this.lineProg,\"u_res\"),this.lp.dest=t.getUniformLocation(this.lineProg,\"u_dest\"),this.lp.dpr=t.getUniformLocation(this.lineProg,\"u_dpr\"),this.lp.fade=t.getUniformLocation(this.lineProg,\"u_fade\"),this.lp.aa=t.getUniformLocation(this.lineProg,\"u_aa\"),this.lp.rot=t.getUniformLocation(this.lineProg,\"u_rot\"),this.spriteProg=this.link(`attribute vec2 a_pos; uniform vec2 u_res; uniform vec4 u_dest; varying vec2 v_uv;\r\n       void main(){ vec2 px=u_dest.xy+a_pos*u_dest.zw; vec2 c=(px\/u_res)*2.0-1.0; gl_Position=vec4(c.x,-c.y,0.0,1.0); v_uv=a_pos; }`,\"precision mediump float; uniform sampler2D u_tex; uniform float u_alpha; varying vec2 v_uv; void main(){ gl_FragColor=texture2D(u_tex,v_uv)*u_alpha; }\"),this.sp.pos=t.getAttribLocation(this.spriteProg,\"a_pos\"),this.sp.res=t.getUniformLocation(this.spriteProg,\"u_res\"),this.sp.dest=t.getUniformLocation(this.spriteProg,\"u_dest\"),this.sp.tex=t.getUniformLocation(this.spriteProg,\"u_tex\"),this.sp.alpha=t.getUniformLocation(this.spriteProg,\"u_alpha\"),this.glyphBatchProg=this.link(`attribute vec2 a_pos; attribute vec2 a_uv; attribute float a_alpha; uniform vec2 u_res;\r\n       varying vec2 v_uv; varying float v_a;\r\n       void main(){ vec2 c=(a_pos\/u_res)*2.0-1.0; gl_Position=vec4(c.x,-c.y,0.0,1.0); v_uv=a_uv; v_a=a_alpha; }`,`precision mediump float; uniform sampler2D u_tex; varying vec2 v_uv; varying float v_a;\r\n       void main(){ gl_FragColor=texture2D(u_tex,v_uv)*v_a; }`),this.gb.pos=t.getAttribLocation(this.glyphBatchProg,\"a_pos\"),this.gb.uv=t.getAttribLocation(this.glyphBatchProg,\"a_uv\"),this.gb.alpha=t.getAttribLocation(this.glyphBatchProg,\"a_alpha\"),this.gb.res=t.getUniformLocation(this.glyphBatchProg,\"u_res\"),this.gb.tex=t.getUniformLocation(this.glyphBatchProg,\"u_tex\"),this.glyphBuf=t.createBuffer(),this.glyphAtlas=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this.glyphAtlas),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),this.glyphCanvas=document.createElement(\"canvas\"),this.glyphCanvas.width=this.ATLAS,this.glyphCanvas.height=this.ATLAS,this.glyphCtx=this.glyphCanvas.getContext(\"2d\"),this.quadBuf=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,this.quadBuf),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]),t.STATIC_DRAW),this.blurProg=this.link(\"attribute vec2 a_pos; varying vec2 v_uv; void main(){ v_uv=a_pos; gl_Position=vec4(a_pos*2.0-1.0,0.0,1.0); }\",`precision mediump float; uniform sampler2D u_tex; uniform float u_strength; uniform vec2 u_center; uniform vec2 u_pan; varying vec2 v_uv;\r\n       void main(){ vec2 dir=u_strength*(v_uv-u_center)+u_pan; vec4 s=vec4(0.0);\r\n         for(int i=0;i<8;i++){ float t=float(i)\/7.0; s+=texture2D(u_tex, v_uv - dir*t); }\r\n         gl_FragColor=s\/8.0; }`),this.bp.pos=t.getAttribLocation(this.blurProg,\"a_pos\"),this.bp.tex=t.getUniformLocation(this.blurProg,\"u_tex\"),this.bp.strength=t.getUniformLocation(this.blurProg,\"u_strength\"),this.bp.center=t.getUniformLocation(this.blurProg,\"u_center\"),this.bp.pan=t.getUniformLocation(this.blurProg,\"u_pan\"),this.gridProg=this.link(`attribute vec2 a_pos; uniform vec2 u_res; uniform vec4 u_dest; varying vec2 v_uv; ${r}\r\n       void main(){ vec2 px=u_dest.xy+a_pos*u_dest.zw; vec2 c=(zmRot(px,u_res)\/u_res)*2.0-1.0; gl_Position=vec4(c.x,-c.y,0.0,1.0); v_uv=a_pos; }`,`precision mediump float; uniform float u_div; uniform float u_cellpx; uniform float u_linew; varying vec2 v_uv;\r\n       void main(){ vec2 f=fract(v_uv*u_div); vec2 dpx=min(f,1.0-f)*u_cellpx; float d=min(dpx.x,dpx.y);\r\n         float line=(1.0-smoothstep(u_linew*0.5, u_linew*1.5, d))*0.09; gl_FragColor=vec4(0.0,0.0,0.0,line); }`),this.gp.pos=t.getAttribLocation(this.gridProg,\"a_pos\"),this.gp.res=t.getUniformLocation(this.gridProg,\"u_res\"),this.gp.dest=t.getUniformLocation(this.gridProg,\"u_dest\"),this.gp.div=t.getUniformLocation(this.gridProg,\"u_div\"),this.gp.cellpx=t.getUniformLocation(this.gridProg,\"u_cellpx\"),this.gp.linew=t.getUniformLocation(this.gridProg,\"u_linew\"),this.gp.rot=t.getUniformLocation(this.gridProg,\"u_rot\")}drawGrid(t,e,r,i,s,n){let o=this.gl;o.enable(o.SCISSOR_TEST),this.scissorRot(t,e,r,r,s,n),o.useProgram(this.gridProg),o.bindBuffer(o.ARRAY_BUFFER,this.quadBuf),o.enableVertexAttribArray(this.gp.pos),o.vertexAttribPointer(this.gp.pos,2,o.FLOAT,!1,0,0),o.uniform2f(this.gp.res,s,n),o.uniform2f(this.gp.rot,this.rotC,this.rotS),o.uniform4f(this.gp.dest,t,e,r,r);let a=4;o.uniform1f(this.gp.div,a),o.uniform1f(this.gp.cellpx,r\/a),o.uniform1f(this.gp.linew,Math.max(1,i)),o.drawArrays(o.TRIANGLES,0,6),this.drawCalls++,o.disable(o.SCISSOR_TEST)}setOverlay(t){this.overlay=t}setZoomFocus(t,e){this.blurFocusX=t,this.blurFocusY=e}ensureFBO(t,e){if(this.fbo&&this.fboW===t&&this.fboH===e)return;let r=this.gl;this.fboTex&&r.deleteTexture(this.fboTex),this.fbo&&r.deleteFramebuffer(this.fbo),this.fboTex=r.createTexture(),r.bindTexture(r.TEXTURE_2D,this.fboTex),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t,e,0,r.RGBA,r.UNSIGNED_BYTE,null),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),this.fbo=r.createFramebuffer(),r.bindFramebuffer(r.FRAMEBUFFER,this.fbo),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,this.fboTex,0),r.bindFramebuffer(r.FRAMEBUFFER,null),this.fboW=t,this.fboH=e}texFromCanvas(t){let e=this.gl,r=e.createTexture();return e.bindTexture(e.TEXTURE_2D,r),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),r}getPinTex(t){let e=this.pinTex.get(t);if(e)return e;let r=this.dpr(),i=26,s=34,n=document.createElement(\"canvas\");n.width=Math.round(i*r),n.height=Math.round(s*r);let o=n.getContext(\"2d\");o.scale(r,r),o.fillStyle=t,o.fill(new Path2D(\"M13 0C5.8 0 0 5.8 0 13c0 9 13 21 13 21s13-12 13-21C26 5.8 20.2 0 13 0z\")),o.fillStyle=\"#fff\",o.beginPath(),o.arc(13,13,5,0,Math.PI*2),o.fill();let a={tex:this.texFromCanvas(n),w:i,h:s};return this.pinTex.set(t,a),a}getMarkerLabelTex(t){let e=this.markerTex.get(t);if(e)return e;let r=this.dpr(),i=12,s=6,n=3,o=document.createElement(\"canvas\"),a=o.getContext(\"2d\"),m=\"600 \"+i+\"px system-ui, -apple-system, sans-serif\";a.font=m;let g=Math.ceil(a.measureText(t).width)+s*2,b=i+n*2+2;o.width=Math.round(g*r),o.height=Math.round(b*r),a=o.getContext(\"2d\"),a.scale(r,r),a.font=m,a.textAlign=\"center\",a.textBaseline=\"middle\",a.lineJoin=\"round\",a.lineWidth=3,a.strokeStyle=\"#ffffff\",a.strokeText(t,g\/2,b\/2),a.fillStyle=\"#2a2a2a\",a.fillText(t,g\/2,b\/2);let T={tex:this.texFromCanvas(o),w:g,h:b};return this.markerTex.set(t,T),T}getPopupTex(t){let e=this.popupTex.get(t);if(e)return e;let r=this.dpr(),i=\/^\\s*<b>\/i.test(t),s=t.replace(\/<br\\s*\\\/?>\/gi,`\r\n`).replace(\/<[^>]+>\/g,\"\").split(`\r\n`).map(A=>A.trim()).filter(A=>A.length);s.length||s.push(\"\");let n=13,o=18,a=12,m=8,g=8,b=8,T=A=>(A===0&&i?\"700 \":\"400 \")+n+\"px system-ui, sans-serif\",v=document.createElement(\"canvas\").getContext(\"2d\"),l=0;s.forEach((A,R)=>{v.font=T(R),l=Math.max(l,v.measureText(A).width)});let h=Math.ceil(l)+a*2,x=s.length*o+m*2,c=x+g+4,u=document.createElement(\"canvas\");u.width=Math.round(h*r),u.height=Math.round(c*r);let f=u.getContext(\"2d\");f.scale(r,r),f.fillStyle=\"#ffffff\",f.shadowColor=\"rgba(0,0,0,.22)\",f.shadowBlur=8,f.shadowOffsetY=2;let y=1,_=1,E=h-2,M=x-2;f.beginPath(),f.moveTo(y+b,_),f.arcTo(y+E,_,y+E,_+M,b),f.arcTo(y+E,_+M,y,_+M,b),f.arcTo(y,_+M,y,_,b),f.arcTo(y,_,y+E,_,b),f.closePath(),f.fill(),f.beginPath(),f.moveTo(h\/2-g,x-1),f.lineTo(h\/2+g,x-1),f.lineTo(h\/2,x-1+g),f.closePath(),f.fill(),f.shadowColor=\"transparent\",f.textAlign=\"left\",f.textBaseline=\"middle\",s.forEach((A,R)=>{f.font=T(R),f.fillStyle=R===0?\"#1a1a1a\":\"#5a5a5a\",f.fillText(A,a,m+o*R+o\/2)});let w={tex:this.texFromCanvas(u),w:h,h:c};return this.popupTex.set(t,w),w}drawOverlay(t,e,r,i){if(!this.overlay.length)return;let s=this.gl;s.useProgram(this.spriteProg),s.blendFunc(s.SRC_ALPHA,s.ONE_MINUS_SRC_ALPHA),s.bindBuffer(s.ARRAY_BUFFER,this.quadBuf),s.enableVertexAttribArray(this.sp.pos),s.vertexAttribPointer(this.sp.pos,2,s.FLOAT,!1,0,0),s.uniform2f(this.sp.res,r,i),s.uniform1i(this.sp.tex,0),s.uniform1f(this.sp.alpha,1),s.activeTexture(s.TEXTURE0);let n=(o,a,m,g)=>{let b=Math.round((a-o.w\/2)*e),T=Math.round((g?m-o.h:m-o.h\/2)*e);s.bindTexture(s.TEXTURE_2D,o.tex),s.uniform4f(this.sp.dest,b,T,Math.round(o.w*e),Math.round(o.h*e)),s.drawArrays(s.TRIANGLES,0,6),this.drawCalls++};for(let o of this.overlay){let a=j(t,o.lng,o.lat);a.x<-60||a.y<-60||a.x>t.width+60||a.y>t.height+60||(o.label&&n(this.getMarkerLabelTex(o.label),a.x,a.y+6,!1),n(this.getPinTex(o.color),a.x,a.y,!0))}for(let o of this.overlay){if(!o.popup)continue;let a=j(t,o.lng,o.lat),m=this.getPopupTex(o.popup),g=Math.round((a.x-m.w\/2)*e),b=Math.round((a.y-34-(m.h-4))*e);s.bindTexture(s.TEXTURE_2D,m.tex),s.uniform4f(this.sp.dest,g,b,Math.round(m.w*e),Math.round(m.h*e)),s.drawArrays(s.TRIANGLES,0,6),this.drawCalls++}}tileUrl(t,e,r){return this.urlTemplate.replace(\"{z}\",String(t)).replace(\"{x}\",String(e)).replace(\"{y}\",String(r))}getTile(t,e,r,i=1e9){let s=`${t}\/${e}\/${r}`,n=this.tiles.get(s);return n?(!n.built&&!n.failed&&!n.inflight&&(n.wantTime=performance.now(),i<n.priority&&(n.priority=i),n.queued||(n.queued=!0,this.reqQueue.push(n))),n):(n={requested:!0,fills:null,lines:null,labels:[],streetLabels:[],houseNumbers:[],poiLabels:[],built:!1,builtAt:0,failed:!1,fillBuf:null,fillCount:0,lineBuf:null,lineCount:0,frame:0,touchedAt:0,key:s,url:this.tileUrl(t,e,r),priority:i,queued:!0,inflight:!1,wantTime:performance.now()},this.tiles.set(s,n),this.reqQueue.push(n),n)}upload(t){let e=this.gl;t.fillBuf=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t.fillBuf),e.bufferData(e.ARRAY_BUFFER,t.fills,e.STATIC_DRAW),t.fillCount=t.fills.length\/3,t.lineBuf=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t.lineBuf),e.bufferData(e.ARRAY_BUFFER,t.lines,e.STATIC_DRAW),t.lineCount=t.lines.length\/6,t.built=!0,t.builtAt=performance.now(),t.fills=null,t.lines=null,this.builtCount++}scissorRot(t,e,r,i,s,n){let o=this.gl;if(this.rotS===0&&this.rotC===1){o.scissor(Math.floor(t),Math.floor(n-(e+i)),Math.ceil(r),Math.ceil(i));return}let a=s\/2,m=n\/2,g=this.rotC,b=this.rotS,T=1\/0,v=1\/0,l=-1\/0,h=-1\/0,x=[[t,e],[t+r,e],[t+r,e+i],[t,e+i]];for(let[c,u]of x){let f=c-a,y=u-m,_=f*g+y*b+a,E=-f*b+y*g+m;_<T&&(T=_),_>l&&(l=_),E<v&&(v=E),E>h&&(h=E)}o.scissor(Math.floor(T),Math.floor(n-h),Math.ceil(l-T),Math.ceil(h-v))}drawGeom(t,e,r,i,s,n,o,a,m,g,b,T,v){let l=this.gl;l.enable(l.SCISSOR_TEST),this.scissorRot(n,o,a,m,b,T),t.fillCount&&(l.useProgram(this.fillProg),l.uniform2f(this.fp.res,b,T),l.uniform2f(this.fp.rot,this.rotC,this.rotS),l.uniform1f(this.fp.fade,v),l.uniform4f(this.fp.dest,e,r,i,s),l.bindBuffer(l.ARRAY_BUFFER,t.fillBuf),l.enableVertexAttribArray(this.fp.pos),l.vertexAttribPointer(this.fp.pos,2,l.FLOAT,!1,12,0),l.enableVertexAttribArray(this.fp.color),l.vertexAttribPointer(this.fp.color,1,l.FLOAT,!1,12,8),l.drawArrays(l.TRIANGLES,0,t.fillCount),this.drawCalls++),t.lineCount&&(l.useProgram(this.lineProg),l.uniform2f(this.lp.res,b,T),l.uniform2f(this.lp.rot,this.rotC,this.rotS),l.uniform1f(this.lp.fade,v),l.uniform4f(this.lp.dest,e,r,i,s),l.uniform1f(this.lp.dpr,g),l.uniform1f(this.lp.aa,this.lineAA?1:0),l.bindBuffer(l.ARRAY_BUFFER,t.lineBuf),l.enableVertexAttribArray(this.lp.pos),l.vertexAttribPointer(this.lp.pos,2,l.FLOAT,!1,24,0),l.enableVertexAttribArray(this.lp.norm),l.vertexAttribPointer(this.lp.norm,2,l.FLOAT,!1,24,8),l.enableVertexAttribArray(this.lp.hw),l.vertexAttribPointer(this.lp.hw,1,l.FLOAT,!1,24,16),l.enableVertexAttribArray(this.lp.color),l.vertexAttribPointer(this.lp.color,1,l.FLOAT,!1,24,20),l.drawArrays(l.TRIANGLES,0,t.lineCount),this.drawCalls++),l.disable(l.SCISSOR_TEST)}drawTile(t,e,r,i,s,n){let o=e.screenX*r,a=e.screenY*r,m=e.size*r;this.drawGeom(t,o,a,m,m,o,a,m,m,r,i,s,n)}ancestorFor(t,e,r){for(let i=1;i<=5;i++){let s=t-i;if(s<this.minZoom)break;let n=e>>i,o=r>>i,a=this.tiles.get(`${s}\/${n}\/${o}`);if(a&&a.built){let m=1<<i;return{entry:a,ox:(e-(n<<i))\/m,oy:(r-(o<<i))\/m,s:1\/m}}}return null}render(t){if(this.contextLost||this.gl.isContextLost())return;let e=t.bearing||0;this.rotC=Math.cos(e),this.rotS=Math.sin(e);let r=this.gl,i=this.dpr(),s=Math.max(1,Math.round(t.width*i)),n=Math.max(1,Math.round(t.height*i));(this.canvas.width!==s||this.canvas.height!==n)&&(this.canvas.width=s,this.canvas.height=n),this.frame++,this.drawCalls=0;let o=performance.now(),a=t.zoom-this.prevZoomForBlur,m=0,g=0;if(this.blurInit){let L=j(t,this.prevLngForBlur,this.prevLatForBlur);m=(L.x-t.width\/2)\/t.width,g=(L.y-t.height\/2)\/t.height}let b=this.blurInit?t.lng-this.prevLngForBlur:0,T=this.blurInit?t.lat-this.prevLatForBlur:0;this.prevZoomForBlur=t.zoom,this.prevLngForBlur=t.lng,this.prevLatForBlur=t.lat,this.blurInit=!0;let v=Math.min(this.maxBlur,Math.abs(a)*this.blurGain),l=v>this.blurMinStrength,h=l?0:m*this.panGain,x=l?0:-g*this.panGain,c=Math.hypot(h,x);if(c>this.maxPanBlur){let L=this.maxPanBlur\/c;h*=L,x*=L,c=this.maxPanBlur}let u=this.motionBlur&&(l||c>this.blurMinStrength);r.viewport(0,0,s,n),u?(this.ensureFBO(s,n),r.bindFramebuffer(r.FRAMEBUFFER,this.fbo)):r.bindFramebuffer(r.FRAMEBUFFER,null),r.clearColor(this.bg[0],this.bg[1],this.bg[2],1),r.clear(r.COLOR_BUFFER_BIT),r.enable(r.BLEND),r.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA);let f={minZoom:this.minZoom,maxZoom:this.tileMaxZoom},y=[...tt(t,f)],_=!l&&Math.abs(b)<1e-7&&Math.abs(T)<1e-7,E=0;for(let L of y){let F=this.tiles.get(`${L.z}\/${L.x}\/${L.y}`);F&&F.built&&E++}let w=_&&y.length>0&&E<y.length*.5?this.coldRevealBudgetMs:this.uploadBudgetMs,A=0,R=0,C=!1,B=!1,S=[],P=[],H=[],z=[],G=this.showPois&&t.zoom>=this.poiCollectMinZoom,U=this.showHousenumbers&&t.zoom>=this.houseNumberMinZoom-.5,I=t.zoom!==this.lastStreetZoom||e!==this.lastStreetBearing||o-this.lastStreetLayoutT>200;this.lastStreetBearing=e;let N=t.width\/2,O=t.height\/2;y.sort((L,F)=>(L.screenX+L.size\/2-N)**2+(L.screenY+L.size\/2-O)**2-((F.screenX+F.size\/2-N)**2+(F.screenY+F.size\/2-O)**2));let W=0;for(let L of y){let F=this.getTile(L.z,L.x,L.y,W++);if(F.touchedAt=o,F.fills&&!F.built)if(R<w||A===0){let k=performance.now();this.upload(F),R+=performance.now()-k,A++}else C=!0;else!F.built&&!F.failed&&(C=!0);let X=F.built?Math.min(1,(o-F.builtAt)\/220):0,V=L.screenX*i,D=L.screenY*i,Z=L.size*i;if(!F.built||X<1){let k=this.ancestorFor(L.z,L.x,L.y);if(k){k.entry.touchedAt=o;let Y=Z\/k.s;if(this.drawGeom(k.entry,V-k.ox*Y,D-k.oy*Y,Y,Y,V,D,Z,Z,i,s,n,1),!F.built){let q=L.size\/k.s;for(let Q of k.entry.labels)Q.x<k.ox||Q.x>=k.ox+k.s||Q.y<k.oy||Q.y>=k.oy+k.s||S.push({name:Q.name,kind:Q.kind,rank:Q.rank,sx:L.screenX+(Q.x-k.ox)*q,sy:L.screenY+(Q.y-k.oy)*q})}}else F.built||this.drawGrid(V,D,Z,i,s,n)}if(F.built){F.frame=this.frame,X<1&&(B=!0),this.drawTile(F,L,i,s,n,X);for(let k of F.labels)S.push({name:k.name,kind:k.kind,rank:k.rank,sx:L.screenX+k.x*L.size,sy:L.screenY+k.y*L.size});if(I)for(let k of F.streetLabels){let Y=[];for(let q=0;q<k.pts.length;q+=2)Y.push(L.screenX+k.pts[q]*L.size,L.screenY+k.pts[q+1]*L.size);P.push({name:k.name,kind:k.kind,pts:Y})}if(U&&I)for(let k of F.houseNumbers)H.push({text:k.text,sx:L.screenX+k.x*L.size,sy:L.screenY+k.y*L.size});if(G)for(let k of F.poiLabels)z.push({name:k.name,kind:k.kind,rank:k.rank,sx:L.screenX+k.x*L.size,sy:L.screenY+k.y*L.size})}}if(!l&&this.blurInit&&(b!==0||T!==0)){let L=this.lookaheadFrames,F={...t,lng:t.lng+b*L,lat:t.lat+T*L},X=900;for(let V of tt(F,f))this.getTile(V.z,V.x,V.y,X++).touchedAt=o}if(this.dispatchTiles(),this.rotS!==0){let L=t.width\/2,F=t.height\/2,X=this.rotC,V=this.rotS;for(let D of S){let Z=D.sx-L,k=D.sy-F;D.sx=Z*X+k*V+L,D.sy=-Z*V+k*X+F}for(let D of P){let Z=D.pts;for(let k=0;k<Z.length;k+=2){let Y=Z[k]-L,q=Z[k+1]-F;Z[k]=Y*X+q*V+L,Z[k+1]=-Y*V+q*X+F}}for(let D of H){let Z=D.sx-L,k=D.sy-F;D.sx=Z*X+k*V+L,D.sy=-Z*V+k*X+F}for(let D of z){let Z=D.sx-L,k=D.sy-F;D.sx=Z*X+k*V+L,D.sy=-Z*V+k*X+F}}if(this.drawLabelsGL(S,t.width,t.height,i,o,a),this.drawStreetLabelsGL(P,t.width,t.height,i,o,t.zoom,a,t,I),this.drawPOILabelsGL(z,t,i,o,a),this.drawHouseNumbersGL(H,i,t,I),this.drawOverlay(t,i,s,n),u){r.bindFramebuffer(r.FRAMEBUFFER,null),r.viewport(0,0,s,n),r.disable(r.BLEND),r.useProgram(this.blurProg),r.bindBuffer(r.ARRAY_BUFFER,this.quadBuf),r.enableVertexAttribArray(this.bp.pos),r.vertexAttribPointer(this.bp.pos,2,r.FLOAT,!1,0,0),r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,this.fboTex),r.uniform1i(this.bp.tex,0);let L=this.blurFocusX!=null?this.blurFocusX\/t.width:.5,F=this.blurFocusY!=null?this.blurFocusY\/t.height:.5;r.uniform2f(this.bp.center,L,1-F),r.uniform1f(this.bp.strength,v*(a>=0?1:-1)),r.uniform2f(this.bp.pan,h,x),r.drawArrays(r.TRIANGLES,0,6),r.enable(r.BLEND),this.onNeedRender()}this.lastRenderMs=performance.now()-o,C||B||this.labelsFading?this.onNeedRender():this.schedulePreload(t),this.tiles.size>this.maxTiles&&(this.pending.size===0||o-this.lastEvict>400)&&(this.evict(),this.lastEvict=o)}schedulePreload(t){clearTimeout(this.preloadTimer);let e={lng:t.lng,lat:t.lat,zoom:t.zoom,width:t.width,height:t.height};this.preloadTimer=window.setTimeout(()=>this.preload(e),200)}preload(t){let e={minZoom:this.minZoom,maxZoom:this.tileMaxZoom},r=rt(t,e),i=this.preloadRing,s=performance.now(),n=(a,m,g)=>{if(a<this.minZoom||a>this.tileMaxZoom)return;let b=1<<a;g<0||g>=b||(this.getTile(a,(m%b+b)%b,g,1e6).touchedAt=s)},o=tt(t,e);for(let a of o)for(let m=-i;m<=i;m++)for(let g=-i;g<=i;g++)n(r,a.x+g,a.y+m);for(let a of o)this.preloadZoomOut&&n(r-1,a.x>>1,a.y>>1),this.preloadZoomIn&&(n(r+1,a.x*2,a.y*2),n(r+1,a.x*2+1,a.y*2),n(r+1,a.x*2,a.y*2+1),n(r+1,a.x*2+1,a.y*2+1));this.dispatchTiles(),this.tileCache&&s-this.lastTrim>15e3&&(this.lastTrim=s,this.trimTileCache())}getLabelTex(t){let e=this.labelTex.get(t);if(e)return e;let r=this.dpr(),i=14,s=4,n=document.createElement(\"canvas\"),o=n.getContext(\"2d\"),a=\"400 \"+i+'px \"Helvetica World\", \"Helvetica Neue\", Helvetica, \"Mardoto\", Arial, sans-serif';o.font=a;let m=Math.ceil(o.measureText(t).width)+s*2,g=i+s*2+4;n.width=Math.round(m*r),n.height=Math.round(g*r),o=n.getContext(\"2d\"),o.scale(r,r),o.font=a,o.textAlign=\"center\",o.textBaseline=\"middle\",o.lineJoin=\"round\",o.lineWidth=3,o.strokeStyle=this.labelHalo,o.strokeText(t,m\/2,g\/2),o.fillStyle=this.labelColor,o.fillText(t,m\/2,g\/2);let b=this.gl,T=b.createTexture();b.bindTexture(b.TEXTURE_2D,T),b.pixelStorei(b.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,n),b.pixelStorei(b.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE),b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);let v={tex:T,w:m,h:g};return this.labelTex.set(t,v),v}drawLabelsGL(t,e,r,i,s,n){let o=new Map;for(let c of t){let u=o.get(c.name);(!u||c.rank>u.rank)&&o.set(c.name,c)}let a=[...o.values()].sort((c,u)=>u.rank-c.rank),m=[],g=new Set;for(let c of a){if(g.size>=42)break;if(c.sx<0||c.sy<0||c.sx>e||c.sy>r)continue;let u=this.getLabelTex(c.name),f=[c.sx-u.w\/2,c.sy-u.h\/2,c.sx+u.w\/2,c.sy+u.h\/2],y=!1;for(let _ of m)if(!(f[2]<_[0]||f[0]>_[2]||f[3]<_[1]||f[1]>_[3])){y=!0;break}y||(m.push(f),g.add(c.name))}this._labelRects=m;for(let c of g){let u=o.get(c),f=this.labelState.get(c);f||(f={opacity:0,target:1,sx:u.sx,sy:u.sy},this.labelState.set(c,f)),f.target=1,f.sx=u.sx,f.sy=u.sy}for(let[c,u]of this.labelState)if(!g.has(c)){u.target=0;let f=o.get(c);f&&(u.sx=f.sx,u.sy=f.sy)}let b=Math.min(s-this.lastLabelT,60);this.lastLabelT=s;let T=1-Math.exp(-b\/55),v=Math.min(1,Math.abs(n)*5.5),l=Math.max(T,v);this.labelsFading=!1;let h=this.gl,x=!1;for(let[c,u]of this.labelState){if(u.opacity+=(u.target-u.opacity)*l,u.target===0&&u.opacity<.02){this.labelState.delete(c);continue}if(Math.abs(u.target-u.opacity)>.01&&(this.labelsFading=!0),u.opacity<.02)continue;let f=this.getLabelTex(c);x||(h.useProgram(this.spriteProg),h.blendFunc(h.ONE,h.ONE_MINUS_SRC_ALPHA),h.bindBuffer(h.ARRAY_BUFFER,this.quadBuf),h.enableVertexAttribArray(this.sp.pos),h.vertexAttribPointer(this.sp.pos,2,h.FLOAT,!1,0,0),h.uniform2f(this.sp.res,e*i,r*i),h.uniform1i(this.sp.tex,0),h.activeTexture(h.TEXTURE0),x=!0),h.uniform1f(this.sp.alpha,u.opacity),h.bindTexture(h.TEXTURE_2D,f.tex),h.uniform4f(this.sp.dest,Math.round((u.sx-f.w\/2)*i),Math.round((u.sy-f.h\/2)*i),Math.round(f.w*i),Math.round(f.h*i)),h.drawArrays(h.TRIANGLES,0,6),this.drawCalls++}}resetGlyphAtlas(t){this.glyphUV.clear(),this.iconUV.clear(),this.glyphPen={x:0,y:0,rowH:0},this.glyphAtlasDpr=t,this.glyphCtx.clearRect(0,0,this.ATLAS,this.ATLAS),this.glyphAtlasDirty=!0}ensureIcon(t,e){e!==this.glyphAtlasDpr&&this.resetGlyphAtlas(e);let r=pt[t]||pt._default,i=this.poiCategoryColor[t]||this.poiIconColor,s=r+\"|\"+i,n=this.iconUV.get(s);if(n)return n;let o=(_t[r]||_t[pt._default]).map(_=>new Path2D(_)),a=Math.round(this.poiBadgeSize*e),m=Math.round(3*e),g=a+m*2,b=a+m*2;this.glyphPen.x+g>this.ATLAS&&(this.glyphPen.x=0,this.glyphPen.y+=this.glyphPen.rowH,this.glyphPen.rowH=0);let T=this.glyphPen.x,v=this.glyphPen.y;this.glyphPen.x+=g,b>this.glyphPen.rowH&&(this.glyphPen.rowH=b);let l=this.glyphCtx,h=T+m+a\/2,x=v+m+a\/2,c=a\/2-Math.max(1,e);l.save(),l.shadowColor=\"rgba(0,0,0,0.30)\",l.shadowBlur=2*e,l.shadowOffsetY=.5*e,l.beginPath(),l.arc(h,x,c,0,Math.PI*2),l.fillStyle=this.poiBadgeBg,l.fill(),l.shadowColor=\"transparent\",l.lineWidth=Math.max(1,1*e),l.strokeStyle=\"rgba(0,0,0,0.16)\",l.stroke(),l.translate(h,x);let u=a*this.poiIconFill\/24;l.scale(u,u),l.translate(-12,-12),l.lineCap=\"round\",l.lineJoin=\"round\",l.strokeStyle=i,l.lineWidth=2.2;for(let _ of o)l.stroke(_);l.restore();let f=this.ATLAS,y={u0:T\/f,v0:v\/f,u1:(T+g)\/f,v1:(v+b)\/f,cw:g,ch:b};return this.iconUV.set(s,y),this.glyphAtlasDirty=!0,y}ensureGlyph(t,e,r=11){e!==this.glyphAtlasDpr&&this.resetGlyphAtlas(e);let i=r===11?t:t+\"\u0001\"+r,s=this.glyphUV.get(i);if(s)return s;let n=r*e,o=3*e,a=this.glyphCtx,m=\"400 \"+n+'px \"Helvetica World\", \"Helvetica Neue\", Helvetica, \"Mardoto\", Arial, sans-serif';a.font=m;let g=a.measureText(t).width,b=Math.ceil(g)+o*2,T=Math.ceil(n)+o*2+2;this.glyphPen.x+b>this.ATLAS&&(this.glyphPen.x=0,this.glyphPen.y+=this.glyphPen.rowH,this.glyphPen.rowH=0);let v=this.glyphPen.x,l=this.glyphPen.y;this.glyphPen.x+=b,T>this.glyphPen.rowH&&(this.glyphPen.rowH=T),a.textAlign=\"center\",a.textBaseline=\"middle\",a.lineJoin=\"round\",a.lineWidth=2.5*e,a.strokeStyle=this.labelHalo,a.strokeText(t,v+b\/2,l+T\/2),a.fillStyle=this.streetColor,a.fillText(t,v+b\/2,l+T\/2);let h=this.ATLAS,x={u0:v\/h,v0:l\/h,u1:(v+b)\/h,v1:(l+T)\/h,cw:b,ch:T,adv:g\/e};return this.glyphUV.set(i,x),this.glyphAtlasDirty=!0,x}uploadGlyphAtlas(){if(!this.glyphAtlasDirty)return;let t=this.gl;t.bindTexture(t.TEXTURE_2D,this.glyphAtlas),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,this.glyphCanvas),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),this.glyphAtlasDirty=!1}layoutStreet(t,e,r){let i=e.length\/2;if(i<2)return null;let s=0,n=0;for(let y=1;y<i;y++)s+=e[y*2]-e[(y-1)*2],n+=e[y*2+1]-e[(y-1)*2+1];let o=Math.abs(s)<.001?n<=0:s>=0,a=[],m=[];for(let y=0;y<i;y++){let _=o?y:i-1-y;a.push(e[_*2]),m.push(e[_*2+1])}let g=[],b=[0],T=0;for(let y=1;y<i;y++){let _=Math.hypot(a[y]-a[y-1],m[y]-m[y-1]);g.push(_),T+=_,b.push(T)}if(T<12)return null;let v=[...t],l=1.2,h=[],x=0;for(let y=0;y<v.length;y++){let _=this.ensureGlyph(v[y],r).adv;h.push(_),x+=_+(y?l:0)}if(x>T-6)return null;let c=y=>{let _=Math.max(0,Math.min(T,y)),E=1;for(;E<i-1&&b[E]<_;)E++;let M=(_-b[E-1])\/(g[E-1]||1);return{x:a[E-1]+(a[E]-a[E-1])*M,y:m[E-1]+(m[E]-m[E-1])*M,ang:Math.atan2(m[E]-m[E-1],a[E]-a[E-1])}},u=(T-x)\/2,f=[];for(let y=0;y<v.length;y++){let _=h[y];if(v[y]!==\" \"){let E=c(u+_\/2),M=E.ang;Math.cos(M)<0&&(M+=Math.PI),f.push({ch:v[y],cx:E.x,cy:E.y,rot:M})}u+=_+l}return f.length?{glyphs:f}:null}drawStreetLabelsGL(t,e,r,i,s,n,o,a,m){var f;if(m){let y=new Map;for(let R of t){if(n<((f=this.streetMinZoom[R.kind])!=null?f:16))continue;let C=0,B=R.pts;for(let P=2;P<B.length;P+=2)C+=Math.hypot(B[P]-B[P-2],B[P+1]-B[P-1]);let S=y.get(R.name);(!S||C>S.len)&&y.set(R.name,{name:R.name,kind:R.kind,pts:R.pts,len:C})}let _={motorway:6,trunk:5,primary:4,secondary:3,tertiary:2,residential:1,living_street:1},E=[...y.values()].sort((R,C)=>(_[C.kind]||0)-(_[R.kind]||0)||C.len-R.len),M=new Map;for(let R of E){let C=this.layoutStreet(R.name,R.pts,i);C&&M.set(R.name,C.glyphs)}let w=this._labelRects.slice(),A=new Set;for(let R of E){if(A.size>=80)break;let C=M.get(R.name);if(!C)continue;let B=[],S=!1;for(let P of C){let H=[P.cx-5,P.cy-6,P.cx+5,P.cy+6];B.push(H);for(let z of w)if(!(H[2]<z[0]||H[0]>z[2]||H[3]<z[1]||H[1]>z[3])){S=!0;break}if(S)break}if(!S){for(let P of B)w.push(P);A.add(R.name)}}for(let[R,C]of M){let B=this.streetState.get(R);B||(B={opacity:0,target:0,glyphs:C},this.streetState.set(R,B)),B.glyphs=C,B.target=A.has(R)?1:0}for(let[R,C]of this.streetState)M.has(R)||(C.target=0);this._occupiedRects=w,this.lastStreetZoom=n,this.lastStreetCX=a.lng,this.lastStreetCY=a.lat,this.lastStreetLayoutT=s}let g=0,b=0;if(!m){let y=j(a,this.lastStreetCX,this.lastStreetCY);g=y.x-e\/2,b=y.y-r\/2}let T=Math.min(s-this.lastStreetT,60);this.lastStreetT=s;let v=Math.max(1-Math.exp(-T\/55),Math.min(1,Math.abs(o)*5.5)),l=this.glyphScratch,h=0;for(let[y,_]of this.streetState){if(_.opacity+=(_.target-_.opacity)*v,_.target===0&&_.opacity<.02){this.streetState.delete(y);continue}if(Math.abs(_.target-_.opacity)>.01&&(this.labelsFading=!0),_.opacity<.02)continue;let E=_.opacity;for(let M of _.glyphs){if(h+30>l.length){let D=new Float32Array(l.length*2);D.set(l),this.glyphScratch=l=D}let w=this.ensureGlyph(M.ch,i),A=(M.cx+g)*i,R=(M.cy+b)*i,C=w.cw\/2,B=w.ch\/2,S=Math.cos(M.rot),P=Math.sin(M.rot),H=A-C*S+B*P,z=R-C*P-B*S,G=A+C*S+B*P,U=R+C*P-B*S,I=A-C*S-B*P,N=R-C*P+B*S,O=A+C*S-B*P,W=R+C*P+B*S,L=w.u0,F=w.v0,X=w.u1,V=w.v1;l[h++]=H,l[h++]=z,l[h++]=L,l[h++]=F,l[h++]=E,l[h++]=G,l[h++]=U,l[h++]=X,l[h++]=F,l[h++]=E,l[h++]=I,l[h++]=N,l[h++]=L,l[h++]=V,l[h++]=E,l[h++]=I,l[h++]=N,l[h++]=L,l[h++]=V,l[h++]=E,l[h++]=G,l[h++]=U,l[h++]=X,l[h++]=F,l[h++]=E,l[h++]=O,l[h++]=W,l[h++]=X,l[h++]=V,l[h++]=E}}if(!h)return;this.uploadGlyphAtlas();let x=this.gl;x.useProgram(this.glyphBatchProg),x.blendFunc(x.ONE,x.ONE_MINUS_SRC_ALPHA),x.bindBuffer(x.ARRAY_BUFFER,this.glyphBuf),x.bufferData(x.ARRAY_BUFFER,l.subarray(0,h),x.DYNAMIC_DRAW);let c=4,u=5*c;x.enableVertexAttribArray(this.gb.pos),x.vertexAttribPointer(this.gb.pos,2,x.FLOAT,!1,u,0),x.enableVertexAttribArray(this.gb.uv),x.vertexAttribPointer(this.gb.uv,2,x.FLOAT,!1,u,2*c),x.enableVertexAttribArray(this.gb.alpha),x.vertexAttribPointer(this.gb.alpha,1,x.FLOAT,!1,u,4*c),x.uniform2f(this.gb.res,e*i,r*i),x.activeTexture(x.TEXTURE0),x.bindTexture(x.TEXTURE_2D,this.glyphAtlas),x.uniform1i(this.gb.tex,0),x.drawArrays(x.TRIANGLES,0,h\/5),this.drawCalls++,x.disableVertexAttribArray(this.gb.uv),x.disableVertexAttribArray(this.gb.alpha)}drawPOILabelsGL(t,e,r,i,s){var E;let n=e.width,o=e.height,a=this.poiTextPx,m=new Map;for(let M of t){let w=(E=this.landmarkMinZoom[M.kind])!=null?E:this.poiDefaultMinZoom;if(e.zoom<w)continue;let A=m.get(M.name);(!A||M.rank>A.rank)&&m.set(M.name,M)}let g=[...m.values()].sort((M,w)=>w.rank-M.rank||(M.name<w.name?-1:M.name>w.name?1:0)),b=g.filter(M=>{var w,A;return((A=(w=this.poiState.get(M.name))==null?void 0:w.opacity)!=null?A:0)>.5}).concat(g.filter(M=>{var w,A;return((A=(w=this.poiState.get(M.name))==null?void 0:w.opacity)!=null?A:0)<=.5})),T=this._occupiedRects.slice();this._poiRects=[];let v=new Set,l=40;for(let M of b){if(v.size>=this.poiCap)break;if(M.sx<-l||M.sy<-l||M.sx>n+l||M.sy>o+l)continue;let w=0;for(let P of M.name)w+=this.ensureGlyph(P,r,a).adv;let A=this.poiBadgeSize\/2,R=a+3,C=Math.max(A,w\/2),B=[M.sx-C,M.sy-A,M.sx+C,M.sy+A+this.poiLabelGap+R],S=!1;for(let P of T)if(!(B[2]<P[0]||B[0]>P[2]||B[3]<P[1]||B[1]>P[3])){S=!0;break}S||(T.push(B),this._poiRects.push(B),v.add(M.name))}for(let M of v){let w=m.get(M),A=this.poiState.get(M);A||(A={opacity:0,target:1,sx:w.sx,sy:w.sy,kind:w.kind},this.poiState.set(M,A)),A.target=1,A.sx=w.sx,A.sy=w.sy,A.kind=w.kind}for(let[M,w]of this.poiState)if(!v.has(M)){w.target=0;let A=m.get(M);A&&(w.sx=A.sx,w.sy=A.sy)}let h=Math.min(i-this.lastPoiT,60);this.lastPoiT=i;let x=Math.max(1-Math.exp(-h\/55),Math.min(1,Math.abs(s)*5.5)),c=this.glyphScratch,u=0;for(let[M,w]of this.poiState){if(w.opacity+=(w.target-w.opacity)*x,w.target===0&&w.opacity<.02){this.poiState.delete(M);continue}if(Math.abs(w.target-w.opacity)>.01&&(this.labelsFading=!0),w.opacity<.02)continue;let A=w.opacity,R=[...M],C=[],B=0;for(let z of R){let G=this.ensureGlyph(z,r,a).adv;C.push(G),B+=G}let S=this.ensureIcon(w.kind,r);if(u+30>c.length){let z=new Float32Array(c.length*2);z.set(c),this.glyphScratch=c=z}{let z=Math.round(w.sx*r-S.cw\/2),G=Math.round(w.sy*r-S.ch\/2),U=z+S.cw,I=G+S.ch;c[u++]=z,c[u++]=G,c[u++]=S.u0,c[u++]=S.v0,c[u++]=A,c[u++]=U,c[u++]=G,c[u++]=S.u1,c[u++]=S.v0,c[u++]=A,c[u++]=z,c[u++]=I,c[u++]=S.u0,c[u++]=S.v1,c[u++]=A,c[u++]=z,c[u++]=I,c[u++]=S.u0,c[u++]=S.v1,c[u++]=A,c[u++]=U,c[u++]=G,c[u++]=S.u1,c[u++]=S.v0,c[u++]=A,c[u++]=U,c[u++]=I,c[u++]=S.u1,c[u++]=S.v1,c[u++]=A}let P=w.sx-B\/2,H=(w.sy+this.poiBadgeSize\/2+this.poiLabelGap+a\/2)*r;for(let z=0;z<R.length;z++){let G=C[z];if(R[z]===\" \"){P+=G;continue}let U=this.ensureGlyph(R[z],r,a);if(u+30>c.length){let L=new Float32Array(c.length*2);L.set(c),this.glyphScratch=c=L}let I=Math.round((P+G\/2)*r-U.cw\/2),N=Math.round(H-U.ch\/2),O=I+U.cw,W=N+U.ch;c[u++]=I,c[u++]=N,c[u++]=U.u0,c[u++]=U.v0,c[u++]=A,c[u++]=O,c[u++]=N,c[u++]=U.u1,c[u++]=U.v0,c[u++]=A,c[u++]=I,c[u++]=W,c[u++]=U.u0,c[u++]=U.v1,c[u++]=A,c[u++]=I,c[u++]=W,c[u++]=U.u0,c[u++]=U.v1,c[u++]=A,c[u++]=O,c[u++]=N,c[u++]=U.u1,c[u++]=U.v0,c[u++]=A,c[u++]=O,c[u++]=W,c[u++]=U.u1,c[u++]=U.v1,c[u++]=A,P+=G}}if(!u)return;this.uploadGlyphAtlas();let f=this.gl;f.useProgram(this.glyphBatchProg),f.blendFunc(f.ONE,f.ONE_MINUS_SRC_ALPHA),f.bindBuffer(f.ARRAY_BUFFER,this.glyphBuf),f.bufferData(f.ARRAY_BUFFER,c.subarray(0,u),f.DYNAMIC_DRAW);let y=4,_=5*y;f.enableVertexAttribArray(this.gb.pos),f.vertexAttribPointer(this.gb.pos,2,f.FLOAT,!1,_,0),f.enableVertexAttribArray(this.gb.uv),f.vertexAttribPointer(this.gb.uv,2,f.FLOAT,!1,_,2*y),f.enableVertexAttribArray(this.gb.alpha),f.vertexAttribPointer(this.gb.alpha,1,f.FLOAT,!1,_,4*y),f.uniform2f(this.gb.res,n*r,o*r),f.activeTexture(f.TEXTURE0),f.bindTexture(f.TEXTURE_2D,this.glyphAtlas),f.uniform1i(this.gb.tex,0),f.drawArrays(f.TRIANGLES,0,u\/5),this.drawCalls++,f.disableVertexAttribArray(this.gb.uv),f.disableVertexAttribArray(this.gb.alpha)}drawHouseNumbersGL(t,e,r,i){let s=r.width,n=r.height,o=this.houseNumberMinZoom,a=Math.max(0,Math.min(1,(r.zoom-(o-.5))\/.5));if(!this.showHousenumbers||a<=.01){this.housePlaced=[];return}let m=Math.min(this.houseScaleMax,this.houseScale+Math.max(0,r.zoom-o)*this.houseScaleZoomGain);if(i){let u=[],f=this._occupiedRects.concat(this._poiRects);for(let y of t){if(u.length>=this.houseNumberCap)break;if(y.sx<-40||y.sx>s+40||y.sy<-40||y.sy>n+40)continue;let _=0;for(let R of y.text)_+=this.ensureGlyph(R,e).adv*m;let E=_\/2,M=6*m+2,w=[y.sx-E,y.sy-M,y.sx+E,y.sy+M],A=!1;for(let R of f)if(!(w[2]<R[0]||w[0]>R[2]||w[3]<R[1]||w[1]>R[3])){A=!0;break}A||(f.push(w),u.push(y))}this.housePlaced=u,this.lastHouseCX=r.lng,this.lastHouseCY=r.lat}if(!this.housePlaced.length)return;let g=0,b=0;if(!i){let u=j(r,this.lastHouseCX,this.lastHouseCY);g=u.x-s\/2,b=u.y-n\/2}let T=a,v=this.glyphScratch,l=0;for(let u of this.housePlaced){let f=[...u.text],y=[],_=0;for(let w of f){let A=this.ensureGlyph(w,e).adv*m;y.push(A),_+=A}let E=u.sx+g-_\/2,M=(u.sy+b)*e;for(let w=0;w<f.length;w++){let A=y[w];if(f[w]===\" \"){E+=A;continue}let R=this.ensureGlyph(f[w],e);if(l+30>v.length){let W=new Float32Array(v.length*2);W.set(v),this.glyphScratch=v=W}let C=(E+A\/2)*e,B=R.cw\/2*m,S=R.ch\/2*m,P=C-B,H=C+B,z=M-S,G=M+S,U=R.u0,I=R.v0,N=R.u1,O=R.v1;v[l++]=P,v[l++]=z,v[l++]=U,v[l++]=I,v[l++]=T,v[l++]=H,v[l++]=z,v[l++]=N,v[l++]=I,v[l++]=T,v[l++]=P,v[l++]=G,v[l++]=U,v[l++]=O,v[l++]=T,v[l++]=P,v[l++]=G,v[l++]=U,v[l++]=O,v[l++]=T,v[l++]=H,v[l++]=z,v[l++]=N,v[l++]=I,v[l++]=T,v[l++]=H,v[l++]=G,v[l++]=N,v[l++]=O,v[l++]=T,E+=A}}if(!l)return;this.uploadGlyphAtlas();let h=this.gl;h.useProgram(this.glyphBatchProg),h.blendFunc(h.ONE,h.ONE_MINUS_SRC_ALPHA),h.bindBuffer(h.ARRAY_BUFFER,this.glyphBuf),h.bufferData(h.ARRAY_BUFFER,v.subarray(0,l),h.DYNAMIC_DRAW);let x=4,c=5*x;h.enableVertexAttribArray(this.gb.pos),h.vertexAttribPointer(this.gb.pos,2,h.FLOAT,!1,c,0),h.enableVertexAttribArray(this.gb.uv),h.vertexAttribPointer(this.gb.uv,2,h.FLOAT,!1,c,2*x),h.enableVertexAttribArray(this.gb.alpha),h.vertexAttribPointer(this.gb.alpha,1,h.FLOAT,!1,c,4*x),h.uniform2f(this.gb.res,s*e,n*e),h.activeTexture(h.TEXTURE0),h.bindTexture(h.TEXTURE_2D,this.glyphAtlas),h.uniform1i(this.gb.tex,0),h.drawArrays(h.TRIANGLES,0,l\/5),this.drawCalls++,h.disableVertexAttribArray(this.gb.uv),h.disableVertexAttribArray(this.gb.alpha)}evict(){let e=performance.now(),r=[...this.tiles.entries()].sort((s,n)=>s[1].touchedAt-n[1].touchedAt),i=this.tiles.size-this.maxTiles;for(let[s,n]of r){if(i<=0||e-n.touchedAt<1500)break;n.fillBuf&&this.gl.deleteBuffer(n.fillBuf),n.lineBuf&&this.gl.deleteBuffer(n.lineBuf),this.tiles.delete(s);for(let[o,a]of this.pending)if(a===n){this.pending.delete(o);break}i--}}async trimTileCache(){if(!(!this.tileCache||typeof caches==\"undefined\"))try{let t=await caches.open(\"zeromap-tiles-v1\"),e=await t.keys(),r=e.length-this.maxCachedTiles;for(let i=0;i<r;i++)await t.delete(e[i])}catch{}}setTileCache(t){this.tileCache=t;for(let e of this.workers)e.postMessage({type:\"config\",tileCache:t})}setStyle(t){this.bg=t.background,this.labelColor=t.label.color,this.labelHalo=t.label.halo,this.streetColor=t.label.street,this.currentStyleLayers=t.layers,this.pushStyleToWorkers(),this.clearBuiltTiles();for(let e of this.labelTex.values())this.gl.deleteTexture(e.tex);this.labelTex.clear(),this.resetGlyphAtlas(this.dpr()),this.onNeedRender()}setPerformanceMode(t){t!==this.performanceMode&&(this.performanceMode=t,this.motionBlur=t===\"full\"?(navigator.hardwareConcurrency||4)>=4:!1,this.pushStyleToWorkers(),this.clearBuiltTiles(),this.onNeedRender())}workerStyleLayers(){let t=this.performanceMode===\"minimal\"?this.minimalDropSources:this.performanceMode===\"lite\"?this.liteDropSources:null;return t&&t.length?this.currentStyleLayers.filter(e=>!t.includes(e.source)):this.currentStyleLayers}pushStyleToWorkers(){let t=this.workerStyleLayers();for(let e of this.workers)e.postMessage({type:\"style\",layers:t})}clearBuiltTiles(){for(let t of this.tiles.values())t.fillBuf&&this.gl.deleteBuffer(t.fillBuf),t.lineBuf&&this.gl.deleteBuffer(t.lineBuf);this.tiles.clear(),this.pending.clear(),this.reqQueue=[],this.streetState.clear(),this.housePlaced=[],this.poiState.clear(),this.builtCount=0}stats(){let t=0;for(let e of this.tiles.values())e.built&&t++;return{tiles:this.tiles.size,built:t,drawCalls:this.drawCalls,lastRenderMs:+this.lastRenderMs.toFixed(3),workers:this.workers.length}}};var dt=class{constructor(t,e=0,r=t.length){this.buf=t,this.pos=e,this.end=r}varint(){let t=0,e=0,r;do r=this.buf[this.pos++],t+=(r&127)*Math.pow(2,e),e+=7;while(r>=128);return t}svarint(){let t=this.varint();return t%2===1?-(t+1)\/2:t\/2}string(t){let e=new TextDecoder().decode(this.buf.subarray(this.pos,this.pos+t));return this.pos+=t,e}skip(t){t===0?this.varint():t===2?this.pos+=this.varint():t===5?this.pos+=4:t===1&&(this.pos+=8)}float(){let t=new DataView(this.buf.buffer,this.buf.byteOffset+this.pos,4);return this.pos+=4,t.getFloat32(0,!0)}double(){let t=new DataView(this.buf.buffer,this.buf.byteOffset+this.pos,8);return this.pos+=8,t.getFloat64(0,!0)}};function ft(p,t,e){for(;p.pos<t;){let r=p.varint();e(r>>3,r&7)}}function Wt(p,t){let e=\"\";return ft(p,t,(r,i)=>{r===1&&i===2?e=p.string(p.varint()):r===2&&i===5?e=p.float():r===3&&i===1?e=p.double():r===4&&i===0||r===5&&i===0?e=p.varint():r===6&&i===0?e=p.svarint():r===7&&i===0?e=p.varint()!==0:p.skip(i)}),e}function Yt(p,t){let e=[],r=[],i=0,s=0;for(;p.pos<t;){let n=p.varint(),o=n&7,a=n>>3;if(o===1)for(let m=0;m<a;m++)r.length&&e.push(r),r=[],i+=p.svarint(),s+=p.svarint(),r.push(i,s);else if(o===2)for(let m=0;m<a;m++)i+=p.svarint(),s+=p.svarint(),r.push(i,s);else o===7&&r.length&&(e.push(r),r=[])}return r.length&&e.push(r),e}function qt(p,t){let e=\"\",r=4096,i=[],s=[],n=[];ft(p,t,(a,m)=>{if(a===1&&m===2)e=p.string(p.varint());else if(a===5&&m===0)r=p.varint();else if(a===3&&m===2)i.push(p.string(p.varint()));else if(a===4&&m===2){let g=p.varint(),b=p.pos+g;s.push(Wt(p,b)),p.pos=b}else if(a===2&&m===2){let g=p.varint();n.push([p.pos,p.pos+g]),p.pos+=g}else p.skip(m)});let o=[];for(let[a,m]of n){let g=new dt(p.buf,a,m),b=0,T=0,v=[],l=[];ft(g,m,(x,c)=>{if(x===1&&c===0)b=g.varint();else if(x===3&&c===0)T=g.varint();else if(x===2&&c===2){let u=g.varint(),f=g.pos+u;for(;g.pos<f;)v.push(g.varint())}else if(x===4&&c===2){let u=g.varint();l=Yt(g,g.pos+u)}else g.skip(c)});let h={};for(let x=0;x+1<v.length;x+=2){let c=i[v[x]],u=s[v[x+1]];c!==void 0&&u!==void 0&&(h[c]=u)}o.push({type:T,rings:l,props:h,id:b})}return{name:e,extent:r,features:o}}function Ft(p){let t=new dt(p),e=[];return ft(t,t.end,(r,i)=>{if(r===3&&i===2){let s=t.varint(),n=t.pos+s;e.push(qt(t,n)),t.pos=n}else t.skip(i)}),e}function Kt(p,t){return new st(p,t)}return It(Qt);})();\r\n\/\/# sourceMappingURL=zeromap-vec.global.js.map\r\n<\/script>\r\n        <script type=\"text\/plain\" id=\"dili-zmv-worker\">\"use strict\";(()=>{var E=class{constructor(n,t=0,r=n.length){this.buf=n,this.pos=t,this.end=r}varint(){let n=0,t=0,r;do r=this.buf[this.pos++],n+=(r&127)*Math.pow(2,t),t+=7;while(r>=128);return n}svarint(){let n=this.varint();return n%2===1?-(n+1)\/2:n\/2}string(n){let t=new TextDecoder().decode(this.buf.subarray(this.pos,this.pos+n));return this.pos+=n,t}skip(n){n===0?this.varint():n===2?this.pos+=this.varint():n===5?this.pos+=4:n===1&&(this.pos+=8)}float(){let n=new DataView(this.buf.buffer,this.buf.byteOffset+this.pos,4);return this.pos+=4,n.getFloat32(0,!0)}double(){let n=new DataView(this.buf.buffer,this.buf.byteOffset+this.pos,8);return this.pos+=8,n.getFloat64(0,!0)}};function Z(e,n,t){for(;e.pos<n;){let r=e.varint();t(r>>3,r&7)}}function be(e,n){let t=\"\";return Z(e,n,(r,i)=>{r===1&&i===2?t=e.string(e.varint()):r===2&&i===5?t=e.float():r===3&&i===1?t=e.double():r===4&&i===0||r===5&&i===0?t=e.varint():r===6&&i===0?t=e.svarint():r===7&&i===0?t=e.varint()!==0:e.skip(i)}),t}function xe(e,n){let t=[],r=[],i=0,o=0;for(;e.pos<n;){let s=e.varint(),a=s&7,l=s>>3;if(a===1)for(let f=0;f<l;f++)r.length&&t.push(r),r=[],i+=e.svarint(),o+=e.svarint(),r.push(i,o);else if(a===2)for(let f=0;f<l;f++)i+=e.svarint(),o+=e.svarint(),r.push(i,o);else a===7&&r.length&&(t.push(r),r=[])}return r.length&&t.push(r),t}function ge(e,n){let t=\"\",r=4096,i=[],o=[],s=[];Z(e,n,(l,f)=>{if(l===1&&f===2)t=e.string(e.varint());else if(l===5&&f===0)r=e.varint();else if(l===3&&f===2)i.push(e.string(e.varint()));else if(l===4&&f===2){let u=e.varint(),p=e.pos+u;o.push(be(e,p)),e.pos=p}else if(l===2&&f===2){let u=e.varint();s.push([e.pos,e.pos+u]),e.pos+=u}else e.skip(f)});let a=[];for(let[l,f]of s){let u=new E(e.buf,l,f),p=0,d=0,h=[],y=[];Z(u,f,(x,v)=>{if(x===1&&v===0)p=u.varint();else if(x===3&&v===0)d=u.varint();else if(x===2&&v===2){let _=u.varint(),g=u.pos+_;for(;u.pos<g;)h.push(u.varint())}else if(x===4&&v===2){let _=u.varint();y=xe(u,u.pos+_)}else u.skip(v)});let k={};for(let x=0;x+1<h.length;x+=2){let v=i[h[x]],_=o[h[x+1]];v!==void 0&&_!==void 0&&(k[v]=_)}a.push({type:d,rings:y,props:k,id:p})}return{name:t,extent:r,features:a}}function q(e){let n=new E(e),t=[];return Z(n,n.end,(r,i)=>{if(r===3&&i===2){let o=n.varint(),s=n.pos+o;t.push(ge(n,s)),n.pos=s}else n.skip(i)}),t}var B=new Set,Y=!1;function J(e,n,t=2){let r=n&&n.length,i=r?n[0]*t:e.length;B.size&&B.clear();let o=re(e,0,i,t,!0),s=[];if(!o||o.next===o.prev)return s;let a=0,l=0,f=0;if(r&&(o=Me(e,n,o,t)),e.length>80*t){a=e[0],l=e[1];let u=a,p=l;for(let d=t;d<i;d+=t){let h=e[d],y=e[d+1];h<a&&(a=h),y<l&&(l=y),h>u&&(u=h),y>p&&(p=y)}f=Math.max(u-a,p-l),f=f!==0?32767\/f:0}return D(o,s,a,l,f),s}function re(e,n,t,r,i){let o=null;if(i===Ce(e,n,t,r)>0)for(let s=n;s<t;s+=r)o=te(s\/r|0,e[s],e[s+1],o);else for(let s=t-r;s>=n;s-=r)o=te(s\/r|0,e[s],e[s+1],o);return o&&T(o,o.next)&&(P(o),o=o.next),o}function L(e,n=e){let t=n===e,r=e,i;do i=!1,r!==r.next&&(B.size===0||!B.has(r))&&(T(r,r.next)||b(r.prev,r,r.next)===0)?((t||r===n)&&(n=r.prev),Y=!0,P(r),r=r.prev,i=!0):(t||r!==n)&&(r=r.next,i=!t);while(i||r!==n);return n}function D(e,n,t,r,i){i&&Te(e,t,r,i);let o=e,s=!1;for(;e.prev!==e.next;){let a=e.prev,l=e.next;if(b(a,e,l)<0&&(i?ve(e,t,r,i):we(e))){n.push(a.i,e.i,l.i),P(e),e=l,o=l;continue}if(e=l,e===o){if(Y=!1,e=L(e),Y){o=e;continue}if(!s){e=_e(e,n),o=e,s=!0;continue}Se(e,n,t,r,i);break}}}function we(e){let n=e.prev,t=e,r=e.next,i=n.x,o=t.x,s=r.x,a=n.y,l=t.y,f=r.y,u=Math.min(i,o,s),p=Math.min(a,l,f),d=Math.max(i,o,s),h=Math.max(a,l,f),y=r.next;for(;y!==n;){if(y.x>=u&&y.x<=d&&y.y>=p&&y.y<=h&&!(i===y.x&&a===y.y)&&N(i,a,o,l,s,f,y.x,y.y)&&b(y.prev,y,y.next)>=0)return!1;y=y.next}return!0}function ve(e,n,t,r){let i=e.prev,o=e,s=e.next,a=i.x,l=o.x,f=s.x,u=i.y,p=o.y,d=s.y,h=Math.min(a,l,f),y=Math.min(u,p,d),k=Math.max(a,l,f),x=Math.max(u,p,d),v=X(h,y,n,t,r),_=X(k,x,n,t,r),g=e.prevZ;for(;g&&g.z>=v;){if(g.x>=h&&g.x<=k&&g.y>=y&&g.y<=x&&g!==s&&!(a===g.x&&u===g.y)&&N(a,u,l,p,f,d,g.x,g.y)&&b(g.prev,g,g.next)>=0)return!1;g=g.prevZ}let w=e.nextZ;for(;w&&w.z<=_;){if(w.x>=h&&w.x<=k&&w.y>=y&&w.y<=x&&w!==s&&!(a===w.x&&u===w.y)&&N(a,u,l,p,f,d,w.x,w.y)&&b(w.prev,w,w.next)>=0)return!1;w=w.nextZ}return!0}function _e(e,n){let t=e,r=!1;do{let i=t.prev,o=t.next.next;se(i,t,t.next,o,!1)&&G(i,o)&&G(o,i)&&(n.push(i.i,t.i,o.i),P(t),P(t.next),t=e=o,r=!0),t=t.next}while(t!==e);return r?L(t):t}function Se(e,n,t,r,i){let o=e;do{let s=o.next.next;for(;s!==o.prev;){if(o.i!==s.i&&Ee(o,s)){let a=ce(o,s);o=L(o,o.next),a=L(a,a.next),D(o,n,t,r,i),D(a,n,t,r,i);return}s=s.next}o=o.next}while(o!==e)}var O=!1;function Me(e,n,t,r){let i=[];for(let o=0,s=n.length;o<s;o++){let a=n[o]*r,l=o<s-1?n[o+1]*r:e.length,f=re(e,a,l,r,!1);f===f.next&&B.add(f),i.push(Pe(f))}i.sort(Le),Ve(e.length\/r,n.length),oe(t,t),O=!0;for(let o=0;o<i.length;o++)t=Ae(i[o],t);return O=!1,L(t)}function Le(e,n){return e.x-n.x||e.y-n.y||(e.next.y-e.y)\/(e.next.x-e.x)-(n.next.y-n.y)\/(n.next.x-n.x)}function Ae(e,n){let t=Fe(e,n);if(!t)return n;let r=ce(t,e),i=r.next;return oe(t,i.next),L(r,r.next),L(t,t.next)}var ie=16,m=new Float64Array(0),z=0,j=[],K=[];function Ve(e,n){let t=Math.ceil((e+2*n)\/ie)+n+2;m.length<t*4&&(m=new Float64Array(t*4)),z=0}function oe(e,n){let t=e;do{let r=z++;j[r]=t;let i=1\/0,o=1\/0,s=-1\/0,a=-1\/0,l=0;do{let u=t.next;t.z=r,t.x<i&&(i=t.x),t.x>s&&(s=t.x),t.y<o&&(o=t.y),t.y>a&&(a=t.y),u.x<i&&(i=u.x),u.x>s&&(s=u.x),u.y<o&&(o=u.y),u.y>a&&(a=u.y),t=u}while(++l<ie&&t!==n);K[r]=t;let f=r*4;m[f]=i,m[f+1]=o,m[f+2]=s,m[f+3]=a}while(t!==n)}function Re(e,n){let t=e.z*4;n.x<m[t]&&(m[t]=n.x),n.y<m[t+1]&&(m[t+1]=n.y),n.x>m[t+2]&&(m[t+2]=n.x),n.y>m[t+3]&&(m[t+3]=n.y)}function ee(e){let n=K[e];for(;n.prev.next!==n;)n=n.next;return K[e]=n,n}function ne(e){let n=j[e];for(;n.prev.next!==n;)n=n.next;return j[e]=n,n}function Fe(e,n){let t=n,r=e.x,i=e.y,o=-1\/0,s;if(T(e,t))return t;for(let d=0,h=0;d<z;d++,h+=4){if(i<m[h+1]||i>m[h+3]||m[h]>r||m[h+2]<=o)continue;let y=ee(d);t=ne(d);do{if(t.prev.next===t){if(T(e,t.next))return t.next;if(i<=t.y&&i>=t.next.y&&t.next.y!==t.y){let k=t.x+(i-t.y)*(t.next.x-t.x)\/(t.next.y-t.y);if(k<=r&&k>o&&(o=k,s=t.x<t.next.x?t:t.next,k===r))return s}}t=t.next}while(t!==y)}if(!s)return null;let a=s.x,l=s.y,f=Math.min(i,l),u=Math.max(i,l),p=1\/0;for(let d=0,h=0;d<z;d++,h+=4){if(m[h+2]<a||m[h]>r||m[h+3]<f||m[h+1]>u)continue;let y=ee(d);t=ne(d);do{if(t.prev.next===t&&r>=t.x&&t.x>=a&&r!==t.x&&N(i<l?r:o,i,a,l,i<l?o:r,i,t.x,t.y)){let k=Math.abs(i-t.y)\/(r-t.x);(G(t,e)||t.y===i&&t.next.y===i&&t.next.x>r)&&(k<p||k===p&&(t.x>s.x||t.x===s.x&&Be(s,t)))&&(s=t,p=k)}t=t.next}while(t!==y)}return s}function Be(e,n){return b(e.prev,e,n.prev)<0&&b(n.next,e,e.next)<0}var S=[],V=[],M=new Uint32Array(0),R=new Uint32Array(0),F=new Uint32Array(256);function Te(e,n,t,r){let i=e,o=0;do i.z=X(i.x,i.y,n,t,r),S[o++]=i,i=i.next;while(i!==e);Ge(o);let s=null;for(let a=0;a<o;a++){let l=S[a];l.prevZ=s,s&&(s.nextZ=l),s=l}s.nextZ=null}function Ge(e){if(e<=32){for(let n=1;n<e;n++){let t=S[n],r=t.z,i=n-1;for(;i>=0&&S[i].z>r;)S[i+1]=S[i],i--;S[i+1]=t}return}M.length<e&&(M=new Uint32Array(e),R=new Uint32Array(e),V=new Array(e));for(let n=0;n<e;n++)M[n]=S[n].z;H(e,S,M,V,R,0),H(e,V,R,S,M,8),H(e,S,M,V,R,16),H(e,V,R,S,M,24)}function H(e,n,t,r,i,o){F.fill(0);for(let a=0;a<e;a++)F[t[a]>>>o&255]++;let s=0;for(let a=0;a<256;a++){let l=F[a];F[a]=s,s+=l}for(let a=0;a<e;a++){let l=t[a],f=F[l>>>o&255]++;r[f]=n[a],i[f]=l}}function X(e,n,t,r,i){return e=(e-t)*i|0,n=(n-r)*i|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,e|n<<1}function Pe(e){let n=e,t=e;do(n.x<t.x||n.x===t.x&&n.y<t.y)&&(t=n),n=n.next;while(n!==e);return t}function N(e,n,t,r,i,o,s,a){return(i-s)*(n-a)>=(e-s)*(o-a)&&(e-s)*(r-a)>=(t-s)*(n-a)&&(t-s)*(o-a)>=(i-s)*(r-a)}function Ee(e,n){let t=T(e,n)&&b(e.prev,e,e.next)>0&&b(n.prev,n,n.next)>0;return e.next.i!==n.i&&(t||G(e,n)&&G(n,e)&&(b(e.prev,e,n.prev)!==0||b(e,n.prev,n)!==0))&&!Ze(e,n)&&(t||He(e,n))}function b(e,n,t){return(n.y-e.y)*(t.x-n.x)-(n.x-e.x)*(t.y-n.y)}function T(e,n){return e.x===n.x&&e.y===n.y}function se(e,n,t,r,i=!0){let o=b(e,n,t),s=b(e,n,r),a=b(t,r,e),l=b(t,r,n);return(o>0&&s<0||o<0&&s>0)&&(a>0&&l<0||a<0&&l>0)?!0:i?!!(o===0&&C(e,t,n)||s===0&&C(e,r,n)||a===0&&C(t,e,r)||l===0&&C(t,n,r)):!1}function C(e,n,t){return n.x<=Math.max(e.x,t.x)&&n.x>=Math.min(e.x,t.x)&&n.y<=Math.max(e.y,t.y)&&n.y>=Math.min(e.y,t.y)}function Ze(e,n){let t=Math.min(e.x,n.x),r=Math.max(e.x,n.x),i=Math.min(e.y,n.y),o=Math.max(e.y,n.y),s=e;do{let a=s.next;if(s.x>r&&a.x>r||s.x<t&&a.x<t||s.y>o&&a.y>o||s.y<i&&a.y<i){s=a;continue}if(s.i!==e.i&&a.i!==e.i&&s.i!==n.i&&a.i!==n.i&&se(s,a,e,n))return!0;s=a}while(s!==e);return!1}function G(e,n){return b(e.prev,e,e.next)<0?b(e,n,e.next)>=0&&b(e,e.prev,n)>=0:b(e,n,e.prev)<0||b(e,e.next,n)<0}function He(e,n){let t=e,r=!1,i=(e.x+n.x)\/2,o=(e.y+n.y)\/2;do{let s=t.next;t.y>o!=s.y>o&&i<(s.x-t.x)*(o-t.y)\/(s.y-t.y)+t.x&&(r=!r),t=s}while(t!==e);return r}function ce(e,n){let t=W(e.i,e.x,e.y),r=W(n.i,n.x,n.y),i=e.next,o=n.prev;return e.next=n,n.prev=e,t.next=i,i.prev=t,r.next=t,t.prev=r,o.next=r,r.prev=o,r}function te(e,n,t,r){let i=W(e,n,t);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function P(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ),O&&Re(e.prev,e.next)}function W(e,n,t){return{i:e,x:n,y:t,prev:null,next:null,z:0,prevZ:null,nextZ:null}}function Ce(e,n,t,r){let i=0;for(let o=n,s=t-r;o<t;o+=r)i+=(e[s]-e[o])*(e[o+1]+e[s+1]),s=o;return i}function c(e,n=1){let t=parseInt(e.slice(1),16);return[(t>>16&255)\/255,(t>>8&255)\/255,(t&255)\/255,n]}var qe=c(\"#f3f1ea\"),U=[{source:\"land\",type:\"fill\",color:c(\"#e9ece1\"),kinds:{grass:c(\"#d8e8c9\"),garden:c(\"#d8e8c9\"),meadow:c(\"#d8e8c9\"),grassland:c(\"#d8e8c9\"),scrub:c(\"#d7e4c4\"),park:c(\"#c6e4b4\"),recreation_ground:c(\"#c6e4b4\"),village_green:c(\"#c6e4b4\"),golf_course:c(\"#c6e4b4\"),playground:c(\"#cdeac0\"),allotments:c(\"#dae6c8\"),orchard:c(\"#d3e6c0\"),forest:c(\"#c9ddb0\"),wood:c(\"#c9ddb0\"),farmland:c(\"#ece9da\"),farmyard:c(\"#e7e1d1\"),residential:c(\"#eceae5\"),industrial:c(\"#e7e3db\"),retail:c(\"#ece7de\"),commercial:c(\"#ece7de\"),cemetery:c(\"#dbe2ce\"),grave_yard:c(\"#dbe2ce\"),quarry:c(\"#e5e1d7\")}},{source:\"sites\",type:\"fill\",color:c(\"#eceae3\"),kinds:{hospital:c(\"#f0dcd6\"),university:c(\"#ece0c8\"),college:c(\"#ece0c8\"),school:c(\"#ece0c8\"),kindergarten:c(\"#ece0c8\"),sports_centre:c(\"#d7e8c6\"),parking:c(\"#e7e5de\"),construction:c(\"#e8e2d6\")}},{source:\"water_polygons\",type:\"fill\",color:c(\"#8ecae6\")},{source:\"water_lines\",type:\"line\",color:c(\"#6fb4dd\"),width:1.6,kinds:{river:{width:2.6},canal:{width:2.2},stream:{width:1.5},ditch:{width:1.1},drain:{width:1.1}}},{source:\"buildings\",type:\"fill\",color:c(\"#dcd3bf\")},{source:\"streets\",type:\"line\",color:c(\"#ffffff\"),width:2,kinds:{motorway:{color:c(\"#f6b981\"),width:5.5},trunk:{color:c(\"#f7c690\"),width:5},primary:{color:c(\"#fbd0a0\"),width:4.5},secondary:{color:c(\"#ffe7b3\"),width:3.4},tertiary:{color:c(\"#ffffff\"),width:2.8},residential:{color:c(\"#ffffff\"),width:2.2},unclassified:{color:c(\"#ffffff\"),width:2},living_street:{color:c(\"#f5f2eb\"),width:2},service:{color:c(\"#f2efe8\"),width:1.3},track:{color:c(\"#e9e2d4\"),width:1.1},path:{color:c(\"#e6dccb\"),width:1}}},{source:\"boundaries\",type:\"line\",color:c(\"#caa9ca\"),width:.8}];var ze=[{source:\"land\",type:\"fill\",color:c(\"#1b1f28\"),kinds:{grass:c(\"#1e2a1e\"),garden:c(\"#1e2a1e\"),meadow:c(\"#1e2a1e\"),grassland:c(\"#1e2a1e\"),scrub:c(\"#1f291b\"),park:c(\"#213520\"),recreation_ground:c(\"#213520\"),village_green:c(\"#213520\"),golf_course:c(\"#203320\"),playground:c(\"#1f2e1e\"),allotments:c(\"#212a1b\"),orchard:c(\"#1f2b1f\"),forest:c(\"#1b2a1b\"),wood:c(\"#1b2a1b\"),farmland:c(\"#232519\"),farmyard:c(\"#26241a\"),residential:c(\"#1d212b\"),industrial:c(\"#20242e\"),retail:c(\"#232734\"),commercial:c(\"#232734\"),cemetery:c(\"#1c281c\"),grave_yard:c(\"#1c281c\"),quarry:c(\"#242019\")}},{source:\"sites\",type:\"fill\",color:c(\"#20242e\"),kinds:{hospital:c(\"#331f27\"),university:c(\"#2b2820\"),college:c(\"#2b2820\"),school:c(\"#2b2820\"),kindergarten:c(\"#2b2820\"),sports_centre:c(\"#1f2d1f\"),parking:c(\"#1e222b\"),construction:c(\"#232019\")}},{source:\"water_polygons\",type:\"fill\",color:c(\"#163a52\")},{source:\"water_lines\",type:\"line\",color:c(\"#3f82ad\"),width:1.6,kinds:{river:{width:2.6},canal:{width:2.2},stream:{width:1.5},ditch:{width:1.1},drain:{width:1.1}}},{source:\"buildings\",type:\"fill\",color:c(\"#272c3b\")},{source:\"streets\",type:\"line\",color:c(\"#3a4152\"),width:2,kinds:{motorway:{color:c(\"#bb8a56\"),width:5.5},trunk:{color:c(\"#a87f52\"),width:5},primary:{color:c(\"#977450\"),width:4.5},secondary:{color:c(\"#54607a\"),width:3.4},tertiary:{color:c(\"#48516a\"),width:2.8},residential:{color:c(\"#3a4254\"),width:2.2},unclassified:{color:c(\"#3a4254\"),width:2},living_street:{color:c(\"#333a4a\"),width:2},service:{color:c(\"#2e3441\"),width:1.3},track:{color:c(\"#2a303c\"),width:1.1},path:{color:c(\"#2a303c\"),width:1}}},{source:\"boundaries\",type:\"line\",color:c(\"#5a4a5a\"),width:.8}],en={name:\"dark\",background:c(\"#12151c\"),layers:ze,label:{color:\"#d3dae6\",halo:\"#0b0d12\",street:\"#8a92a1\"}},Ne=[{source:\"land\",type:\"fill\",color:c(\"#efe9dd\"),kinds:{grass:c(\"#dfe6cf\"),garden:c(\"#dfe6cf\"),grassland:c(\"#dfe6cf\"),park:c(\"#d1e2ba\"),recreation_ground:c(\"#d1e2ba\"),village_green:c(\"#d1e2ba\"),playground:c(\"#d8e6c6\"),forest:c(\"#cddbb4\"),wood:c(\"#cddbb4\"),orchard:c(\"#d5e2c0\"),farmland:c(\"#eae4d2\"),residential:c(\"#f0ebe0\"),industrial:c(\"#e9e2d4\"),retail:c(\"#efe7d8\"),cemetery:c(\"#dbe1cd\"),grave_yard:c(\"#dbe1cd\")}},{source:\"sites\",type:\"fill\",color:c(\"#ece7dc\"),kinds:{hospital:c(\"#eedcd3\"),university:c(\"#e9ddc6\"),college:c(\"#e9ddc6\"),school:c(\"#e9ddc6\"),sports_centre:c(\"#d7e6c2\"),parking:c(\"#e6e1d5\"),construction:c(\"#e8e1d2\")}},{source:\"water_polygons\",type:\"fill\",color:c(\"#9cc7c4\")},{source:\"water_lines\",type:\"line\",color:c(\"#7fb4b0\"),width:1.6,kinds:{river:{width:2.6},canal:{width:2.2},stream:{width:1.5},ditch:{width:1.1}}},{source:\"buildings\",type:\"fill\",color:c(\"#e1d6c0\")},{source:\"streets\",type:\"line\",color:c(\"#ffffff\"),width:2,kinds:{motorway:{color:c(\"#d98b63\"),width:5.5},trunk:{color:c(\"#e0996f\"),width:5},primary:{color:c(\"#e8ac86\"),width:4.5},secondary:{color:c(\"#f2cfa6\"),width:3.4},tertiary:{color:c(\"#ffffff\"),width:2.8},residential:{color:c(\"#ffffff\"),width:2.2},service:{color:c(\"#f4efe6\"),width:1.3},track:{color:c(\"#e9e0d0\"),width:1.1}}}],nn={name:\"brand\",background:c(\"#f5efe3\"),layers:Ne,label:{color:\"#4f3f30\",halo:\"#fbf6ec\",street:\"#9a8a72\"}};function ae(e,n){return e.kinds&&typeof n==\"string\"&&e.kinds[n]?e.kinds[n]:e.color}function le(e,n){var t;if(e.kinds&&typeof n==\"string\"&&e.kinds[n]){let r=e.kinds[n];return{color:r.color||e.color,width:(t=r.width)!=null?t:e.width}}return{color:e.color,width:e.width}}var ue={\"pt:station\":{kind:\"metro\",rank:100},\"pt:bus_station\":{kind:\"bus_station\",rank:70},\"pt:aerialway_station\":{kind:\"cablecar\",rank:74},\"amenity:university\":{kind:\"university\",rank:90},\"amenity:college\":{kind:\"college\",rank:62},\"amenity:hospital\":{kind:\"hospital\",rank:88},\"amenity:townhall\":{kind:\"townhall\",rank:72},\"amenity:courthouse\":{kind:\"courthouse\",rank:60},\"amenity:library\":{kind:\"library\",rank:48},\"amenity:theatre\":{kind:\"theatre\",rank:66},\"amenity:cinema\":{kind:\"cinema\",rank:60},\"amenity:arts_centre\":{kind:\"arts_centre\",rank:52},\"amenity:marketplace\":{kind:\"marketplace\",rank:58},\"amenity:place_of_worship\":{kind:\"worship\",rank:56},\"office:diplomatic\":{kind:\"embassy\",rank:55},\"shop:mall\":{kind:\"mall\",rank:92},\"shop:department_store\":{kind:\"department_store\",rank:64},\"shop:supermarket\":{kind:\"supermarket\",rank:44},\"tourism:museum\":{kind:\"museum\",rank:80},\"tourism:hotel\":{kind:\"hotel\",rank:42},\"tourism:theme_park\":{kind:\"theme_park\",rank:66},\"tourism:zoo\":{kind:\"zoo\",rank:70},\"leisure:park\":{kind:\"park\",rank:68},\"leisure:stadium\":{kind:\"stadium\",rank:82},\"leisure:sports_centre\":{kind:\"sports_centre\",rank:46},\"amenity:restaurant\":{kind:\"restaurant\",rank:38},\"amenity:fast_food\":{kind:\"fast_food\",rank:34},\"amenity:cafe\":{kind:\"cafe\",rank:34},\"shop:bakery\":{kind:\"bakery\",rank:30},\"amenity:bar\":{kind:\"bar\",rank:30},\"amenity:pub\":{kind:\"pub\",rank:30},\"amenity:nightclub\":{kind:\"nightclub\",rank:28},\"amenity:bank\":{kind:\"bank\",rank:40},\"amenity:atm\":{kind:\"atm\",rank:24},\"amenity:pharmacy\":{kind:\"pharmacy\",rank:40},\"amenity:clinic\":{kind:\"clinic\",rank:38},\"amenity:doctors\":{kind:\"doctors\",rank:34},\"amenity:dentist\":{kind:\"dentist\",rank:32},\"amenity:veterinary\":{kind:\"veterinary\",rank:28},\"amenity:school\":{kind:\"school\",rank:44},\"amenity:kindergarten\":{kind:\"kindergarten\",rank:30},\"amenity:police\":{kind:\"police\",rank:42},\"amenity:fire_station\":{kind:\"fire_station\",rank:42},\"amenity:post_office\":{kind:\"post_office\",rank:34},\"amenity:community_centre\":{kind:\"community_centre\",rank:30},\"amenity:fuel\":{kind:\"fuel\",rank:34},\"amenity:car_rental\":{kind:\"car_rental\",rank:24},\"amenity:car_wash\":{kind:\"car_wash\",rank:22},\"tourism:hostel\":{kind:\"hostel\",rank:30},\"tourism:guest_house\":{kind:\"guest_house\",rank:26},\"tourism:motel\":{kind:\"motel\",rank:26},\"shop:convenience\":{kind:\"convenience\",rank:26},\"shop:greengrocer\":{kind:\"greengrocer\",rank:24},\"shop:butcher\":{kind:\"butcher\",rank:26},\"shop:alcohol\":{kind:\"alcohol\",rank:24},\"shop:beverages\":{kind:\"beverages\",rank:22},\"shop:seafood\":{kind:\"seafood\",rank:24},\"shop:clothes\":{kind:\"clothes\",rank:28},\"shop:shoes\":{kind:\"shoes\",rank:26},\"shop:jewelry\":{kind:\"jewelry\",rank:28},\"shop:bag\":{kind:\"bag\",rank:24},\"shop:beauty\":{kind:\"beauty\",rank:26},\"shop:hairdresser\":{kind:\"hairdresser\",rank:26},\"shop:cosmetics\":{kind:\"cosmetics\",rank:24},\"shop:chemist\":{kind:\"chemist\",rank:26},\"shop:optician\":{kind:\"optician\",rank:26},\"shop:furniture\":{kind:\"furniture\",rank:28},\"shop:hardware\":{kind:\"hardware\",rank:26},\"shop:doityourself\":{kind:\"doityourself\",rank:26},\"shop:garden_centre\":{kind:\"garden_centre\",rank:24},\"shop:paint\":{kind:\"paint\",rank:22},\"shop:electronics\":{kind:\"electronics\",rank:28},\"shop:mobile_phone\":{kind:\"mobile_phone\",rank:28},\"shop:computer\":{kind:\"computer\",rank:28},\"shop:books\":{kind:\"books\",rank:28},\"shop:stationery\":{kind:\"stationery\",rank:22},\"shop:toys\":{kind:\"toys\",rank:24},\"shop:sports\":{kind:\"sports\",rank:26},\"shop:gift\":{kind:\"gift\",rank:22},\"shop:florist\":{kind:\"florist\",rank:24},\"shop:bicycle\":{kind:\"bicycle\",rank:24},\"shop:car\":{kind:\"car\",rank:26},\"shop:pet\":{kind:\"pet\",rank:24},\"shop:kiosk\":{kind:\"kiosk\",rank:20},\"shop:newsagent\":{kind:\"newsagent\",rank:20},\"shop:travel_agency\":{kind:\"travel_agency\",rank:24},\"shop:laundry\":{kind:\"laundry\",rank:22},\"shop:dry_cleaning\":{kind:\"laundry\",rank:22}},fe=new Set([\"bench\",\"waste_basket\",\"waste_disposal\",\"drinking_water\",\"vending_machine\",\"toilets\",\"post_box\",\"telephone\",\"surveillance\",\"fountain\",\"shelter\",\"recycling\",\"parking\",\"parking_space\",\"parking_entrance\",\"bicycle_parking\",\"motorcycle_parking\",\"bicycle_rental\",\"car_sharing\",\"charging_station\",\"clock\",\"hunting_stand\",\"grit_bin\",\"bbq\",\"fire_hydrant\",\"street_lamp\",\"tree\",\"water_point\",\"taxi\",\"bureau_de_change\",\"vacant\",\"no\",\"ticket_validator\",\"compressed_air\"]);function ye(e,n=U){let t=[],r=[];for(let i of n){let o=e.find(a=>a.name===i.source);if(!o)continue;let s=1\/o.extent;for(let a of o.features)if(i.type===\"fill\"&&a.type===3)je(t,a.rings,s,ae(i,a.props.kind));else if(i.type===\"line\"&&a.type===2){let l=le(i,a.props.kind);for(let f of a.rings)Ke(r,f,s,l.width,l.color)}}return{fills:new Float32Array(t),lines:new Float32Array(r),labels:Oe(e),streetLabels:De(e),houseNumbers:Ye(e),poiLabels:Ie(e)}}function Ue(e){let n=e.name_en||e.name;if(!n)return null;for(let t=0;t<n.length;t++){let r=n.charCodeAt(t);if(r>=1024&&r<=1791||r>=12352&&r<=12543||r>=19968&&r<=40959)return null}return String(n)}function Ie(e){let n=[],t=e.find(i=>i.name===\"public_transport\");t&&de(t,n,i=>{var o;return ue[\"pt:\"+String((o=i.kind)!=null?o:\"\")]});let r=e.find(i=>i.name===\"pois\");return r&&de(r,n,i=>{for(let o of[\"amenity\",\"shop\",\"tourism\",\"leisure\",\"office\"]){let s=i[o];if(s!=null&&s!==\"\"){let a=ue[o+\":\"+String(s)];if(a)return a}}if(i.shop&&!fe.has(String(i.shop)))return{kind:\"shop\",rank:20};for(let o of[\"amenity\",\"tourism\",\"office\",\"craft\"]){let s=i[o];if(s!=null&&s!==\"\"&&!fe.has(String(s)))return{kind:\"place\",rank:18}}}),n}function de(e,n,t){let r=1\/e.extent;for(let i of e.features){if(i.type!==1)continue;let o=t(i.props);if(!o)continue;let s=Ue(i.props);if(s)for(let a of i.rings)a.length>=2&&n.push({x:a[0]*r,y:a[1]*r,name:s,kind:o.kind,rank:o.rank})}}function Ye(e){let n=[],t=e.find(i=>i.name===\"addresses\");if(!t)return n;let r=1\/t.extent;for(let i of t.features){if(i.type!==1)continue;let o=i.props.housenumber;if(o==null||o===\"\")continue;let s=String(o);for(let a of i.rings)a.length>=2&&n.push({x:a[0]*r,y:a[1]*r,text:s})}return n}function De(e){let n=e.find(o=>o.name===\"street_labels\");if(!n)return[];let t=1\/n.extent,r=new Map;for(let o of n.features){if(o.type!==2)continue;let s=o.props.name_en||o.props.name;if(!s)continue;let a=String(o.props.kind||\"\");for(let l of o.rings){if(l.length<4)continue;let f=0;for(let d=2;d<l.length;d+=2)f+=Math.hypot(l[d]-l[d-2],l[d+1]-l[d-1]);let u=r.get(s);if(u&&f<=u.len)continue;let p=[];for(let d=0;d<l.length;d+=2)p.push(l[d]*t,l[d+1]*t);r.set(s,{kind:a,pts:p,len:f})}}let i=[];for(let[o,s]of r)i.push({name:o,kind:s.kind,pts:s.pts});return i}function Oe(e){let n=[],t=e.find(i=>i.name===\"place_labels\");if(!t)return n;let r=1\/t.extent;for(let i of t.features){if(i.type!==1)continue;let o=i.props.name_en||i.props.name;if(!o)continue;let s=String(i.props.kind||\"\"),a=Number(i.props.population)||0;for(let l of i.rings)l.length>=2&&n.push({x:l[0]*r,y:l[1]*r,name:String(o),kind:s,rank:a})}return n}function he(e){let n=0;for(let t=0,r=e.length;t<r;t+=2){let i=(t+2)%r;n+=e[t]*e[i+1]-e[i]*e[t+1]}return n\/2}function me(e){return Math.round(e[0]*255)*65536+Math.round(e[1]*255)*256+Math.round(e[2]*255)}function je(e,n,t,r){if(!n.length)return;let i=me(r),o=Math.sign(he(n[0]))||1,s=[],a=()=>{if(!s.length)return;let l=[],f=[];for(let p=0;p<s.length;p++){p>0&&f.push(l.length\/2);let d=s[p];for(let h=0;h<d.length;h+=2)l.push(d[h]*t,d[h+1]*t)}let u=J(l,f.length?f:void 0,2);for(let p=0;p<u.length;p++){let d=u[p]*2;e.push(l[d],l[d+1],i)}s=[]};for(let l of n){if(l.length<6)continue;(Math.sign(he(l))||o)===o&&s.length&&a(),s.push(l)}a()}function Ke(e,n,t,r,i){let o=n.length\/2;if(o<2)return;let s=r\/2,a=[];for(let u=0;u<o;u++)a.push([n[u*2]*t,n[u*2+1]*t]);let l=[];for(let u=0;u<o;u++){let p=u>0?pe(a[u][0]-a[u-1][0],a[u][1]-a[u-1][1]):null,d=u<o-1?pe(a[u+1][0]-a[u][0],a[u+1][1]-a[u][1]):null;if(p&&d){let h=[-p[1],p[0]],y=[-d[1],d[0]],k=h[0]+y[0],x=h[1]+y[1],v=Math.hypot(k,x);v<1e-6?(k=h[0],x=h[1]):(k\/=v,x\/=v);let _=1\/Math.max(.35,k*h[0]+x*h[1]);_=Math.min(_,3),l.push([k*_,x*_])}else{let h=p||d;l.push([-h[1],h[0]])}}let f=me(i);for(let u=0;u<o-1;u++){let p=a[u],d=a[u+1],h=l[u],y=l[u+1];A(e,p,h,s,f),A(e,p,[-h[0],-h[1]],-s,f),A(e,d,y,s,f),A(e,p,[-h[0],-h[1]],-s,f),A(e,d,[-y[0],-y[1]],-s,f),A(e,d,y,s,f)}}function pe(e,n){let t=Math.hypot(e,n)||1;return[e\/t,n\/t]}function A(e,n,t,r,i){e.push(n[0],n[1],t[0],t[1],r,i)}var Q=self,ke=U,Xe=\"zeromap-tiles-v1\",$=!0,I;function We(){return I===void 0&&(I=$&&typeof caches!=\"undefined\"?caches.open(Xe).catch(()=>null):Promise.resolve(null)),I}async function Je(e){let n=await We();if(n)try{let r=await n.match(e);if(r)return await r.arrayBuffer()}catch{}let t=await fetch(e);if(!t.ok)throw new Error(\"http \"+t.status);if(n)try{n.put(e,t.clone()).catch(()=>{})}catch{}return await t.arrayBuffer()}Q.onmessage=async e=>{let n=e.data;if(n.type===\"style\"){ke=n.layers;return}if(n.type===\"config\"){typeof n.tileCache==\"boolean\"&&n.tileCache!==$&&($=n.tileCache,I=void 0);return}let{id:t,url:r}=n;try{let i=await Je(r),o=q(new Uint8Array(i)),{fills:s,lines:a,labels:l,streetLabels:f,houseNumbers:u,poiLabels:p}=ye(o,ke);Q.postMessage({id:t,ok:!0,fills:s,lines:a,labels:l,streetLabels:f,houseNumbers:u,poiLabels:p},[s.buffer,a.buffer])}catch{Q.postMessage({id:t,ok:!1})}};})();\r\n\/\/# sourceMappingURL=worker_vec.js.map\r\n<\/script>\r\n        <script>\r\n            document.addEventListener('DOMContentLoaded', function() {\r\n                initMap();\r\n            });\r\n            \r\n            \/\/ Store locations data\r\n            const diliLocations = {\r\n\t\t\t\t\/\/ Supermarkets\r\n\t\t\t\t\"all-supermarkets\": [], \/\/ Will be populated by combining all other supermarket locations\r\n\t\t\t\t\r\n\t\t\t\t\/\/ Supermarket chains\r\n\t\t\t\t\"yerevan-city\": [\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0556\u0578\u0582\u0579\u056b\u056f\u056b 1\/1\", coords: [40.199413, 44.476695] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0540\u0561\u0576\u0580\u0561\u057a\u0565\u057f\u0578\u0582\u0569\u0575\u0561\u0576 67\/1\", coords: [40.178297, 44.519221] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0532\u0561\u0576\u0561\u057e\u0561\u0576 19\", coords: [40.188687, 44.592811] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0555\u0570\u0561\u0576\u0578\u057e 26\/9\", coords: [40.180040, 44.445757] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0531\u057e\u0561\u0576 \u0531\u057c\u056b\u0576\u057b \u0539\u0561\u0572\u0561\u0574\u0561\u057d 5,33\", coords: [40.232648, 44.569122] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0531\u0580\u0574\u0565\u0576\u0561\u056f \u0531\u0580\u0574\u0565\u0576\u0561\u056f\u0575\u0561\u0576 143\", coords: [40.185793, 44.541796] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0532\u0561\u0563\u0580\u0561\u057f\u0578\u0582\u0576\u0575\u0561\u0581 5\/3\", coords: [40.155148, 44.479039] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0533\u0561\u0575\u056b 11\/16\", coords: [40.197303, 44.566460] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0567\u0580\u0565\u0562\u0578\u0582\u0576\u056b 17\/1\", coords: [40.142595, 44.520739] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u053f\u0578\u0574\u056b\u057f\u0561\u057d\u056b 60\/2\", coords: [40.205991, 44.521404] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0544\u0561\u0577\u057f\u0578\u0581\u056b 5\", coords: [40.178669, 44.503923] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0547\u056b\u0580\u0561\u0566\u056b 20\/80\", coords: [40.203987, 44.461962] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u054c\u0578\u0582\u0562\u056b\u0576\u0575\u0561\u0576\u0581 15\/5\", coords: [40.202444, 44.545407] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u054d\u0565\u0562\u0561\u057d\u057f\u056b\u0561 141\/5\", coords: [40.171427, 44.457129] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u054f\u056b\u0563\u0580\u0561\u0576 \u0544\u0565\u056e 10\", coords: [40.174541, 44.513553] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0550\u0561\u0586\u0586\u0578\u0582 55\/1\", coords: [40.173329, 44.443223] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0544\u0561\u0577\u057f\u0578\u0581\u056b \u057a\u0578\u0572\u0578\u057f\u0561 20\/4\", coords: [40.182052, 44.509582] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0540\u0578\u057e\u0570\u0561\u0576\u0576\u056b\u057d\u0575\u0561\u0576 \u0569\u0561\u0572\u0561\u0574\u0561\u057d 24\/7\", coords: [40.217782, 44.581232] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u053e\u0561\u0580\u0561\u057e \u0561\u0572\u0562\u0575\u0578\u0582\u0580 53\/9\", coords: [40.216666, 44.548838] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0531\u0580\u0561\u0574 \u053d\u0561\u0579\u0561\u057f\u0580\u0575\u0561\u0576 3\", coords: [40.203208, 44.491867] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u054f\u056b\u0563\u0580\u0561\u0576 \u0544\u0565\u056e 37\/1\", coords: [40.166210, 44.513463] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u053e\u056b\u056e\u0565\u057c\u0576\u0561\u056f\u0561\u0562\u0565\u0580\u0564\u056b \u056d\u0573\u0578\u0582\u0572\u056b 3\", coords: [40.179406, 44.488301] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u054f\u056b\u0563\u0580\u0561\u0576 \u054a\u0565\u057f\u0580\u0578\u057d\u0575\u0561\u0576\u056b 25\/5\", coords: [40.220357, 44.493053] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u053d\u0561\u0572\u0561\u0572 \u0534\u0578\u0576\u056b 13\", coords: [40.127012, 44.528312] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0544\u0561\u0566\u0574\u0561\u0576\u0575\u0561\u0576 1\", coords: [40.209779, 44.464127] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u053f\u0578\u0574\u056b\u057f\u0561\u057d 1\", coords: [40.200977, 44.493358] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0535\u0572\u056b\u0577\u0565 \u0539\u0561\u0564\u0587\u0578\u057d\u0575\u0561\u0576 12\/20\", coords: [40.142774, 44.487852] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0553\u0561\u0583\u0561\u0566\u0575\u0561\u0576\u056b 8\", coords: [40.201521, 44.504866] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u054d\u0561\u0575\u0561\u0569 \u0546\u0578\u057e\u0561 13\", coords: [40.184836, 44.517864] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0531\u0580\u057f\u0561\u0577\u0561\u057f \u053e\u0578\u057e\u0561\u056f\u0561\u056c \u053b\u057d\u0561\u056f\u0578\u057e\u056b 64\/1\", coords: [39.951508, 44.550913] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0531\u0562\u0578\u057e\u0575\u0561\u0576 3-\u0580\u0564 \u0574\u056f\u0580\u0577 7\/2\", coords: [40.276098, 44.636694] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0537\u057b\u0574\u056b\u0561\u056e\u056b\u0576 \u0539\u0578\u0582\u0574\u0561\u0576\u0575\u0561\u0576\u056b \u0583\u0578\u0572\u0578\u0581 9\", coords: [40.165948, 44.288938] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0540\u0580\u0561\u0566\u0564\u0561\u0576 \u0536\u0578\u0580\u0561\u057e\u0561\u0580 \u0531\u0576\u0564\u0580\u0561\u0576\u056b\u056f\u056b 187\", coords: [40.547004, 44.769995] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0540\u0580\u0561\u0566\u0564\u0561\u0576 \u0536\u0578\u0580\u0561\u057e\u0561\u0580 \u0531\u0576\u0564\u0580\u0561\u0576\u056b\u056f\u056b 66\", coords: [40.535895, 44.770767] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0544\u0580\u0563\u0561\u057e\u0561\u0576 \u0533\u0580\u056b\u0563\u0578\u0580\u0575\u0561\u0576 30\/1\", coords: [39.969447, 44.531384] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0531\u0562\u0578\u057e\u0575\u0561\u0576 \u0555\u0563\u0578\u057d\u057f\u0578\u057d\u056b 23, 4\", coords: [40.272087, 44.627477] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0533\u0578\u0580\u056f\u0578\u0582 62\", coords: [40.786898, 43.848143] },\r\n\t\t\t\t\t{ name: \"Yerevan City\", address: \"\u054e\u0561\u0576\u0561\u0571\u0578\u0580 \u054f\u056b\u0563\u0580\u0561\u0576 \u0544\u0565\u056e\u056b \u0583\u0578\u0572\u0578\u0581 36\/2\", coords: [40.808934, 44.491095] }\r\n\t\t\t\t],\r\n\t\t\t\t\r\n\t\t\t\t\"sas\": [\r\n\t\t\t\t\t{ name: \"SAS\", address: \"\u0531\u0576\u0564\u0580\u0561\u0576\u056b\u056f\u056b 40\/5\", coords: [40.177401, 44.445532] },\r\n\t\t\t\t\t{ name: \"SAS\", address: \"\u0540\u0561\u056c\u0561\u0562\u0575\u0561\u0576 22\/5\", coords: [40.200357, 44.480063] },\r\n\t\t\t\t\t{ name: \"SAS\", address: \"\u0531\u0580\u0577\u0561\u056f\u0578\u0582\u0576\u0575\u0561\u0581 11\/1\", coords: [40.166141, 44.505917] },\r\n\t\t\t\t\t{ name: \"SAS\", address: \"\u0532\u0561\u0572\u0580\u0561\u0574\u0575\u0561\u0576 85\", coords: [40.196465, 44.493340] },\r\n\t\t\t\t\t{ name: \"SAS\", address: \"\u0539\u0578\u0582\u0574\u0561\u0576\u0575\u0561\u0576 31\", coords: [40.185938, 44.512160] },\r\n\t\t\t\t\t{ name: \"SAS\", address: \"\u053b\u057d\u0561\u0570\u0561\u056f\u0575\u0561\u0576 35\", coords: [40.186365, 44.522527] },\r\n\t\t\t\t\t{ name: \"SAS\", address: \"\u053f\u056b\u0587\u0575\u0561\u0576 1\u0531\", coords: [40.192910, 44.483890] },\r\n\t\t\t\t\t{ name: \"SAS\", address: \"\u053f\u0578\u0574\u056b\u057f\u0561\u057d 52\", coords: [40.206452, 44.514208] },\r\n\t\t\t\t\t{ name: \"SAS\", address: \"\u0554\u0561\u057b\u0561\u0566\u0576\u0578\u0582\u0576\u056b 20\/1\", coords: [40.171516, 44.518305] }\r\n\t\t\t\t],\r\n\t\t\t\t\r\n\t\t\t\t\"carrefour\": [\r\n\t\t\t\t\t{ name: \"Carrefour\", address: \"\u0531\u0580\u0563\u056b\u0577\u057f\u056b 11\/3\", coords: [40.172006, 44.503644] },\r\n\t\t\t\t\t{ name: \"Carrefour\", address: \"\u0531\u0580\u0577\u0561\u056f\u0578\u0582\u0576\u0575\u0561\u0581 \u057a\u0578\u0572\u0578\u057f\u0561 34\/3\", coords: [40.155334, 44.499745] },\r\n\t\t\t\t\t{ name: \"Carrefour\", address: \"\u0533\u0575\u0578\u0582\u056c\u0562\u0565\u0576\u056f\u0575\u0561\u0576 30\/3\", coords: [40.200343, 44.496368] },\r\n\t\t\t\t\t{ name: \"Carrefour\", address: \"\u054f\u056b\u0563\u0580\u0561\u0576 \u0544\u0565\u056e 16\", coords: [40.171950, 44.512870] }\r\n\t\t\t\t],\r\n\t\t\t\t\r\n\t\t\t\t\"88\": [\r\n\t\t\t\t\t{ name: \"88\", address: \"\u054a\u0561\u0580\u0578\u0582\u0575\u0580 \u054d\u0587\u0561\u056f 4\u0583\u2024 2 \u0583\u0561\u056f\u0578\u0582\u0572\u056b\", coords: [40.224860, 44.575554] },\r\n\t\t\t\t\t{ name: \"88\", address: \"\u0555\u0580\u0562\u0565\u056c\u056b 67\/2\", coords: [40.193613, 44.488472] },\r\n\t\t\t\t\t{ name: \"88\", address: \"\u0540\u0561\u056c\u0561\u0562\u0575\u0561\u0576 9\/4\", coords: [40.191849, 44.478383] },\r\n\t\t\t\t\t{ name: \"88\", address: \"\u0544\u0561\u0577\u057f\u0578\u0581\u056b 42\/4\", coords: [40.185022, 44.513076] }\r\n\t\t\t\t],\r\n\t\t\t\t\r\n\t\t\t\t\"evrika\": [\r\n\t\t\t\t\t{ name: \"Evrika\", address: \"\u0532\u0561\u0564\u0561\u056c \u0544\u0578\u0582\u0580\u0561\u0564\u0575\u0561\u0576\u056b 3\/68\", coords: [40.186324, 44.564370] },\r\n\t\t\t\t\t{ name: \"Evrika\", address: \"\u0544\u0561\u0580\u0577\u0561\u056c \u053d\u0578\u0582\u0564\u0575\u0561\u056f\u0578\u057e\u056b 214\/2\", coords: [40.217272, 44.581591] },\r\n\t\t\t\t\t{ name: \"Evrika\", address: \"\u0532\u0561\u0562\u0561\u0575\u0561\u0576 36\", coords: [40.199902, 44.512780] },\r\n\t\t\t\t\t{ name: \"Evrika\", address: \"\u0532\u0561\u0572\u0580\u0561\u0574\u0575\u0561\u0576 2\", coords: [40.188914, 44.514109] },\r\n\t\t\t\t\t{ name: \"Evrika\", address: \"\u0534\u0565\u0574\u056b\u0580\u0573\u0575\u0561\u0576 12\/14\", coords: [40.189190, 44.507390] },\r\n\t\t\t\t\t{ name: \"Evrika\", address: \"\u054d\u0561\u0575\u0561\u0569-\u0546\u0578\u057e\u0561 19\/1\", coords: [40.182989, 44.520092] }\r\n\t\t\t\t],\r\n                \r\n\t\t\t\t\"tsiran\": [\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u0531\u0577\u056d\u0561\u0562\u0561\u0564\u056b 1\/1\", coords: [40.220701, 44.575958] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u054c\u0578\u057d\u057f\u0578\u0574\u056b 30\", coords: [40.166720, 44.517972] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u0532\u0561\u0577\u056b\u0576\u057b\u0561\u0572\u0575\u0561\u0576 188\/1\", coords: [40.207878, 44.468520] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u0533\u0561\u0575\u056b \u057a\u0578\u0572\u0578\u057f\u0561, 8\/2\", coords: [40.199806, 44.566068] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u054f\u056b\u0563\u0580\u0561\u0576 \u054a\u0565\u057f\u0580\u0578\u057d\u0575\u0561\u0576 40\/1\", coords: [40.221665, 44.494427] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u0540\u0580\u0561\u0579\u0575\u0561 \u0554\u0578\u0579\u0561\u0580 2\u0531\", coords: [40.197636, 44.493700] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u0547\u056b\u0576\u0561\u0580\u0561\u0580\u0576\u0565\u0580 15\", coords: [40.194701, 44.473434] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u054f\u056b\u0579\u056b\u0576\u0561 29\/2\", coords: [40.183292, 44.459465] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u0554\u0561\u057b\u0561\u0566\u0576\u0578\u0582\u0576\u0578\u0582 1\", coords: [40.170379, 44.519814] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u0537\u057b\u0574\u056b\u0561\u056e\u056b\u0576 \u053c\u0565\u0578\u0576\u056b\u0564 \u0531\u0566\u0563\u0561\u056c\u0564\u0575\u0561\u0576 2\/1\", coords: [40.164080, 44.297310] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u054e\u0561\u0572\u0561\u0580\u0577\u0561\u057a\u0561\u057f \u054d\u057a\u0561\u0576\u0564\u0561\u0580\u0575\u0561\u0576 \u0583\u0578\u0572\u0578\u0581 29\/37\", coords: [40.171647, 44.296106] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u0534\u056b\u056c\u056b\u057b\u0561\u0576 \u0544\u0575\u0561\u057d\u0576\u056b\u056f\u0575\u0561\u0576 57\", coords: [40.742639, 44.871630] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u0534\u056b\u056c\u056b\u057b\u0561\u0576 \u0544. \u0533\u0578\u0580\u056f\u056b 50\", coords: [40.738860, 44.864794] }\r\n\t\t\t\t],\r\n\t\t\t\t\r\n\t\t\t\t\"zovq\": [\r\n\t\t\t\t\t{ name: \"Zovq\", address: \"\u0531\u057e\u0561\u0576-\u0531\u057c\u056b\u0576\u057b 2-\u0580\u0564 \u0574\u056b\u056f\u0580\u0578\u0577\u0580\u057b\u0561\u0576 2\/20\", coords: [40.223580, 44.572239] },\r\n\t\t\t\t\t{ name: \"Zovq\", address: \"\u0532\u0561\u0563\u0580\u0561\u057f\u0578\u0582\u0576\u0575\u0561\u0581 12\", coords: [40.152528, 44.481025] },\r\n\t\t\t\t\t{ name: \"Zovq\", address: \"\u0533\u0575\u0578\u0582\u056c\u0562\u0565\u0576\u056f\u0575\u0561\u0576 19\/3\", coords: [40.195962, 44.498685] },\r\n\t\t\t\t\t{ name: \"Zovq\", address: \"\u0540\u0561\u056f\u0578\u0562 \u0540\u0561\u056f\u0578\u0562\u0575\u0561\u0576 8\/2\", coords: [40.201817, 44.490619] },\r\n\t\t\t\t\t{ name: \"Zovq\", address: \"\u054a\u057f\u0572\u0576\u056b \u0546\u0578\u0580 \u0569\u0561\u0572\u0561\u0574\u0561\u057d 1-\u056b\u0576 \u0583\u0578\u0572\u0578\u0581 13\", coords: [40.244179, 44.578267] },\r\n\t\t\t\t\t{ name: \"Zovq\", address: \"\u0553\u0561\u0583\u0561\u0566\u0575\u0561\u0576 14\", coords: [40.203146, 44.503294] },\r\n\t\t\t\t\t{ name: \"Zovq\", address: \"\u0546\u0561\u056c\u0562\u0561\u0576\u0564\u0575\u0561\u0576 102\", coords: [40.181294, 44.519975] },\r\n\t\t\t\t\t{ name: \"Zovq\", address: \"\u054d\u0561\u0580\u0575\u0561\u0576 12\/13\", coords: [40.186413, 44.507875] },\r\n\t\t\t\t\t{ name: \"Zovq\", address: \"\u0554\u0561\u057b\u0561\u0566\u0576\u0578\u0582\u0576\u0578\u0582 8\/10\", coords: [40.169153, 44.519715] },\r\n\t\t\t\t\t{ name: \"Zovq\", address: \"\u0540\u0561\u0576\u0580\u0561\u057a\u0565\u057f\u0578\u0582\u0569\u0575\u0561\u0576 71\", coords: [40.178600, 44.520101] }\r\n\t\t\t\t],\r\n\t\t\t\t\r\n\t\t\t\t\"chinar\": [\r\n\t\t\t\t\t{ name: \"Chinar\", address: \"\u0531\u057e\u0561\u0576 \u053e\u0561\u0580\u0561\u057e \u0561\u0572\u0562\u0575\u0578\u0582\u0580 55\/15\", coords: [40.218828, 44.550078] },\r\n\t\t\t\t\t{ name: \"Chinar\", address: \"\u053c\u057e\u0578\u057e\u0575\u0561\u0576 14\/1\", coords: [40.203270, 44.562313] },\r\n\t\t\t\t\t{ name: \"Chinar\", address: \"\u053d\u0578\u0580\u0565\u0576\u0561\u0581\u056b 47\", coords: [40.163570, 44.516589] },\r\n\t\t\t\t\t{ name: \"Chinar\", address: \"\u0531\u0564\u0578\u0576\u0581 6\/3\", coords: [40.212458, 44.523443] }\r\n\t\t\t\t],\r\n\t\t\t\t\r\n\t\t\t\t\"parma\": [\r\n\t\t\t\t\t{ name: \"Parma\", address: \"\u0540\u0575\u0578\u0582\u057d\u056b\u057d\u0561\u0575\u056b\u0576 \u057a\u0578\u0572\u0578\u057f\u0561 3\/85\", coords: [40.183161, 44.515367] },\r\n\t\t\t\t\t{ name: \"Parma\", address: \"\u0544\u0561\u0580\u0577\u0561\u056c \u0532\u0561\u0562\u0561\u057b\u0561\u0576\u0575\u0561\u0576 4\/12\", coords: [40.220371, 44.573066] },\r\n\t\t\t\t\t{ name: \"Parma\", address: \"\u054a\u0578\u0582\u0577\u056f\u056b\u0576 49\", coords: [40.185332, 44.508576] },\r\n\t\t\t\t\t{ name: \"Parma\", address: \"\u0531\u0570\u0561\u0580\u0578\u0576\u0575\u0561\u0576 1\/6\", coords: [40.207313, 44.533459] },\r\n\t\t\t\t\t{ name: \"Parma\", address: \"\u054e\u0561\u0572\u0561\u0580\u0577\u0575\u0561\u0576 10\", coords: [40.198221, 44.502198] },\r\n\t\t\t\t\t{ name: \"Parma\", address: \"\u054e\u0561\u0572\u0561\u0580\u0577\u0575\u0561\u0576 19\", coords: [40.203876, 44.497634] },\r\n\t\t\t\t\t{ name: \"Parma\", address: \"\u053d\u0578\u0580\u0565\u0576\u0561\u0581\u056b 9\", coords: [40.178049, 44.507372] }\r\n\t\t\t\t],\r\n\t\t\t\t\r\n\t\t\t\t\"rock-four\": [\r\n\t\t\t\t\t{ name: \"Rock Four\", address: \"\u0531\u0580\u0561\u0574\u056b 86\/89\", coords: [40.184326, 44.507246] },\r\n\t\t\t\t\t{ name: \"Rock Four\", address: \"\u0532\u0575\u0578\u0582\u0566\u0561\u0576\u0564 17\", coords: [40.179964, 44.511424] },\r\n\t\t\t\t\t{ name: \"Rock Four\", address: \"\u0544\u0561\u0577\u057f\u0578\u0581 48\/77\", coords: [40.188625, 44.517325] }\r\n\t\t\t\t],\r\n\t\t\t\t\r\n\t\t\t\t\/\/ Shops that were moved from supermarkets to local shops\r\n\t\t\t\t\"barev\": [\r\n\t\t\t\t\t{ name: \"Barev\", address: \"\u0539\u0578\u0582\u0574\u0561\u0576\u0575\u0561\u0576 20\/20\", coords: [40.181087, 44.519670] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\"yeritsyan\": [\r\n\t\t\t\t\t{ name: \"Yeritsyan\", address: \"\u0553\u0561\u0583\u0561\u0566\u0575\u0561\u0576 21\/92\", coords: [40.205116, 44.501326] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\"etalon\": [\r\n\t\t\t\t\t{ name: \"Etalon\", address: \"\u0532\u0561\u0577\u056b\u0576\u057b\u0561\u0572\u0575\u0561\u0576 175\/2\", coords: [40.203773, 44.467541] },\r\n\t\t\t\t\t{ name: \"Etalon\", address: \"\u0531.\u0532\u0561\u0562\u0561\u057b\u0561\u0576\u0575\u0561\u0576 59\/1\", coords: [40.167836, 44.439163] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\"express\": [\r\n\t\t\t\t\t{ name: \"Express\", address: \"\u054d\u0565\u0580\u0578 \u053d\u0561\u0576\u0566\u0561\u0564\u0575\u0561\u0576 131\/10\", coords: [40.193234, 44.541059] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\"tteni\": [\r\n\t\t\t\t\t{ name: \"Tteni\", address: \"\u0555\u0570\u0561\u0576 \u0534\u0578\u0582\u0580\u0575\u0561\u0576 22\/4\", coords: [40.186799, 44.545488] },\r\n\t\t\t\t\t{ name: \"Tteni\", address: \"\u0533\u0575\u0578\u0582\u0580\u057b\u0575\u0561\u0576 1\/3\", coords: [40.196361, 44.563975] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\"kayzer\": [\r\n\t\t\t\t\t{ name: \"Kayzer\", address: \"\u0536\u0578\u0580\u0561\u057e\u0561\u0580 \u0531\u0576\u0564\u0580\u0561\u0576\u056b\u056f\u056b 148\/2\", coords: [40.166251, 44.442163] },\r\n\t\t\t\t\t{ name: \"Kayzer\", address: \"\u0544\u0561\u0580\u0563\u0561\u0580\u0575\u0561\u0576 23\/6\", coords: [40.204551, 44.474682] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\"maximum\": [\r\n\t\t\t\t\t{ name: \"Maximum\", address: \"\u053c\u0565\u0576\u056b\u0576\u0563\u0580\u0561\u0564\u0575\u0561\u0576 50\", coords: [40.191201, 44.464891] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\"mush\": [\r\n\t\t\t\t\t{ name: \"Mush\", address: \"\u0531\u0572\u0561\u0575\u0561\u0576 19\", coords: [40.186276, 44.518996] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\"van\": [\r\n\t\t\t\t\t{ name: \"Van\", address: \"\u0532\u0561\u0563\u0580\u0561\u057f\u0578\u0582\u0576\u0575\u0561\u0581 17\", coords: [40.151825, 44.483630] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\"sky\": [\r\n\t\t\t\t\t{ name: \"Sky\", address: \"\u054e\u0565\u0580\u056b\u0576 \u0531\u0576\u057f\u0561\u057c\u0561\u0575\u056b\u0576 4\", coords: [40.197057, 44.511100] },\r\n\t\t\t\t\t{ name: \"Sky\", address: \"\u0546\u0561\u0566\u0561\u0580\u0562\u0565\u056f\u0575\u0561\u0576 \u0569\u0561\u0572\u2024 19\/19\", coords: [40.213395, 44.463076] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\"titan\": [\r\n\t\t\t\t\t{ name: \"Titan\", address: \"\u0533\u0561\u0580\u0565\u0563\u056b\u0576 \u0546\u056a\u0564\u0565\u0570 9\/44\", coords: [40.151632, 44.487843] },\r\n\t\t\t\t\t{ name: \"Titan\", address: \"\u054e\u0561\u0572\u0561\u0580\u0577\u0575\u0561\u0576 14\/1\", coords: [40.199985, 44.500922] },\r\n\t\t\t\t\t{ name: \"Titan\", address: \"\u0531\u0580\u057f\u0561\u0577\u0561\u057f \u0555\u0563\u0578\u057d\u057f\u0578\u057d\u056b 23 107\", coords: [39.959645, 44.541041] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\"gurmenia\": [\r\n\t\t\t\t\t{ name: \"Gurmenia\", address: \"\u0539\u0578\u0582\u0574\u0561\u0576\u0575\u0561\u0576 5\u0531\", coords: [40.179461, 44.521332] }\r\n\t\t\t\t],\r\n\r\n\t\t\t\t\/\/ Other local shops\r\n\t\t\t\t\"all-shops\": [\r\n\t\t\t\t\t{ name: \"Market\", address: \"\u054e\u0561\u0572\u0561\u0580\u0577\u0561\u057a\u0561\u057f \u054e. \u053f\u0578\u057d\u057f\u0561\u0576\u0575\u0561\u0576 0\u0531\", coords: [40.160676, 44.300462] },\r\n\t\t\t\t\t{ name: \"AGA\", address: \"\u0531\u0580\u057f\u0561\u0577\u0561\u057f \u0544\u0561\u0580\u0584\u057d\u056b \u0583\u0578\u0572\u0578\u0581 17\/1\", coords: [39.957336, 44.548740] },\r\n\t\t\t\t\t{ name: \"Alexim\", address: \"\u0537\u057b\u0574\u056b\u0561\u056e\u056b\u0576 \u0532\u0561\u0572\u0580\u0561\u0574\u0575\u0561\u0576 \u0583\u0578\u0572. 63\", coords: [40.170607, 44.290797] },\r\n\t\t\t\t\t{ name: \"Anahit\", address: \"\u0531\u0580\u0574\u0561\u057e\u056b\u0580 \u0549\u0561\u0580\u0565\u0576\u0581\u056b \u0583\u0578\u0572\u0578\u0581 8\/6\", coords: [40.149082, 44.032253] },\r\n\t\t\t\t\t{ name: \"ISO Mall\", address: \"\u0531\u0580\u0574\u0561\u057e\u056b\u0580 \u0535\u0580\u0587\u0561\u0576\u0575\u0561\u0576 \u0583\u0578\u0572\u0578\u0581 17\/3\", coords: [40.145518, 44.034759] },\r\n\t\t\t\t\t{ name: \"MVM\", address: \"\u0546\u0578\u0580 \u0540\u0561\u0573\u0576 \u054f\u0578\u057c\u0578\u0566\u0575\u0561\u0576 \u0583\u0578\u0572\u0578\u0581 19\", coords: [40.303284, 44.580989] },\r\n\t\t\t\t\t{ name: \"Shen Tun\", address: \"\u0537\u057b\u0574\u056b\u0561\u056e\u056b\u0576 \u0544\u0561\u0575\u0561\u056f\u0578\u057e\u057d\u056f\u0578\u0582 \u0583. 7\", coords: [40.171771, 44.283844] },\r\n\t\t\t\t\t{ name: \"Rokola\", address: \"\u0531\u0562\u0578\u057e\u0575\u0561\u0576 \u0537.\u054a\u0565\u057f\u0580\u0578\u057d\u0575\u0561\u0576 1\/16\", coords: [40.281100, 44.625330] },\r\n\t\t\t\t\t{ name: \"Safaria\", address: \"\u0549\u0561\u0580\u0565\u0576\u0581\u0561\u057e\u0561\u0576 \u053d\u0561\u0576\u057b\u0575\u0561\u0576 \u0583\u0578\u0572\u0578\u0581 12\", coords: [40.403400, 44.641379] },\r\n\t\t\t\t\t{ name: \"Vagas\", address: \"\u0549\u0561\u0580\u0565\u0576\u0581\u0561\u057e\u0561\u0576 \u054f\u0565\u0580\u0575\u0561\u0576 1\", coords: [40.402526, 44.643857] },\r\n\t\t\t\t\t{ name: \"Terminal\", address: \"\u0546\u0578\u0580 \u0540\u0561\u0573\u0576 \u0549\u0561\u0580\u0565\u0576\u0581\u056b 9\/1\", coords: [40.300905, 44.583450] },\r\n\t\t\t\t\t{ name: \"Qnar\", address: \"\u0531\u0580\u0574\u0561\u057e\u056b\u0580 \u054d\u0561\u0575\u0561\u0569-\u0546\u0578\u057e\u0561\u0575\u056b \u0583\u0578\u0572\u0578\u0581 204\", coords: [40.156905, 44.027932] },\r\n\t\t\t\t\t{ name: \"Original\", address: \"\u0531\u0562\u0578\u057e\u0575\u0561\u0576 \u0540\u0561\u0576\u0580\u0561\u057a\u0565\u057f\u0578\u0582\u0569\u0575\u0561\u0576 \u057a\u0578\u0572\u0578\u057f\u0561 22\/10\/1\", coords: [40.270676, 44.626471] },\r\n\t\t\t\t\t{ name: \"Original\", address: \"\u0531\u0562\u0578\u057e\u0575\u0561\u0576 \u0540\u0561\u057f\u056b\u057d\u056b 1\/80\", coords: [40.278231, 44.640916] },\r\n\t\t\t\t\t{ name: \"Original\", address: \"\u0531\u0562\u0578\u057e\u0575\u0561\u0576 \u054d\u0587\u0561\u0576\u056b 2\", coords: [40.274117, 44.621296] },\r\n\t\t\t\t\t{ name: \"Fresh\", address: \"\u053b\u057b\u0587\u0561\u0576 \u0531\u0576\u056f\u0561\u056d\u0578\u0582\u0569\u0575\u0561\u0576 28\", coords: [40.879650, 45.147503] },\r\n\t\t\t\t\t{ name: \"Fresh\", address: \"\u053b\u057b\u0587\u0561\u0576 \u0535\u0580\u0587\u0561\u0576\u0575\u0561\u0576 1\", coords: [40.880195, 45.143981] },\r\n\t\t\t\t\t{ name: \"Tsiran\", address: \"\u054e\u0561\u0576\u0561\u0571\u0578\u0580 \u054f\u056b\u0563\u0580\u0561\u0576 \u0574\u0565\u056e 73-1\/1-1\", coords: [40.808989, 44.492810] },\r\n\t\t\t\t\t{ name: \"Ararat\", address: \"\u054e\u0561\u0576\u0561\u0571\u0578\u0580 \u0547\u056b\u0576\u0561\u0580\u0561\u0580\u0576\u0565\u0580\u056b \u0583. 2.1\/4\", coords: [40.799576, 44.516221] },\r\n\t\t\t\t\t{ name: \"Green Plaza\", address: \"\u054e\u0561\u0576\u0561\u0571\u0578\u0580 \u0533\u0580\u056b\u0563\u0578\u0580 \u053c\u0578\u0582\u057d\u0561\u057e\u0578\u0580\u056b\u0579 49\", coords: [40.811787, 44.492253] },\r\n\t\t\t\t\t{ name: \"Green Plaza\", address: \"\u054e\u0561\u0576\u0561\u0571\u0578\u0580 \u0544\u0575\u0561\u057d\u0576\u056b\u056f\u0575\u0561\u0576 8\u0561\", coords: [40.802839, 44.488966] },\r\n\t\t\t\t\t{ name: \"Danielyan\", address: \"\u054e\u0561\u0576\u0561\u0571\u0578\u0580 \u053d\u0578\u0580\u0565\u0576\u0561\u0581\u056b 1\u0563\", coords: [40.813650, 44.487591] },\r\n\t\t\t\t\t{ name: \"Tigran Mets\", address: \"\u0534\u056b\u056c\u056b\u057b\u0561\u0576 \u0547\u0561\u0570\u0578\u0582\u0574\u0575\u0561\u0576 28\", coords: [40.753727, 44.896190] },\r\n\t\t\t\t\t{ name: \"Qaxcri Ashxarh\", address: \"\u0534\u056b\u056c\u056b\u057b\u0561\u0576 \u0533\u0565\u057f\u0561\u0583\u0576\u0575\u0561 \u0583 12\", coords: [40.738532, 44.853457] },\r\n\t\t\t\t\t{ name: \"Okey\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0533. \u0546\u056a\u0564\u0565\u0570\u056b 7\/15\", coords: [40.799241, 43.847578] },\r\n\t\t\t\t\t{ name: \"Dijaz wine\", address: \"\u0534\u056b\u056c\u056b\u057b\u0561\u0576 \u0539\u0565\u0572\u0578\u0582\u057f 2 1\/1\", coords: [40.778076, 44.926158] },\r\n\t\t\t\t\t{ name: \"Sos Shirak\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0533\u0578\u0580\u056f\u0578\u0582 68\/29\", coords: [40.786659, 43.849015] },\r\n\t\t\t\t\t{ name: \"Karona\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0533\u0578\u0580\u056f\u0578\u0582 \u0583\u0578\u0572\u0578\u0581 56\", coords: [40.786973, 43.847407] },\r\n\t\t\t\t\t{ name: \"Karona\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0544\u0578\u0582\u057d\u0561\u0575\u0565\u056c\u0575\u0561\u0576 76\", coords: [40.782616, 43.853722] },\r\n\t\t\t\t\t{ name: \"Karona\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u054a\u0561\u0580\u0578\u0582\u0575\u0580 \u054d\u0587\u0561\u056f\u056b \u0583\u0578\u0572\u0578\u0581 11\", coords: [40.828718, 43.827186] },\r\n\t\t\t\t\t{ name: \"Karona\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0531\u056c\u0565\u056f \u0544\u0561\u0576\u0578\u0582\u056f\u0575\u0561\u0576 13\", coords: [40.793438, 43.843212] },\r\n\t\t\t\t\t{ name: \"Karona\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0540\u0561\u0572\u0569\u0561\u0576\u0561\u056f\u056b 56\", coords: [40.781913, 43.844245] },\r\n\t\t\t\t\t{ name: \"Hegera\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0542\u0561\u0576\u0564\u056b\u056c\u0575\u0561\u0576 \u0583\u0578\u0572\u0578\u0581 24\", coords: [40.791472, 43.855105] },\r\n\t\t\t\t\t{ name: \"Basen Govq\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0535\u0580\u0587\u0561\u0576\u0575\u0561\u0576 3\/4\", coords: [40.777789, 43.854387] },\r\n\t\t\t\t\t{ name: \"Basen Govq\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u054a\u0561\u0580\u0578\u0582\u0575\u0580 \u054d\u0587\u0561\u056f\u056b \u0583. 15\/3\", coords: [40.829080, 43.824473] },\r\n\t\t\t\t\t{ name: \"Basen Govq\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u054f\u056b\u0563\u0580\u0561\u0576 \u0544\u0565\u056e \u057a\u0578\u0572. 3\/4\", coords: [40.790503, 43.848197] },\r\n\t\t\t\t\t{ name: \"Bellissimo\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u053c\u0561\u056c\u0561\u0575\u0561\u0576 \u0583\u0578\u0572\u0578\u0581 10\", coords: [40.772981, 43.836393] },\r\n\t\t\t\t\t{ name: \"Basen Govq\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0533. \u0546\u056a\u0564\u0565\u0570 2\/20\", coords: [40.804115, 43.847515] },\r\n\t\t\t\t\t{ name: \"Gugo-Gago\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u054f\u0580\u0564. \u0543\u0561\u0580\u057f. \u0583. 1\/3\", coords: [40.820475, 43.830806] },\r\n\t\t\t\t\t{ name: \"Gurman\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0546\u056b\u056f\u0578\u056c\u0561\u0575 \u054c\u056b\u056a\u056f\u0578\u057e\u056b \u0583.1\", coords: [40.786973, 43.844595] },\r\n\t\t\t\t\t{ name: \"Viva market\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0547\u0579\u0565\u0564\u0580\u056b\u0576\u056b 24\", coords: [40.802170, 43.846805] },\r\n\t\t\t\t\t{ name: \"Gyumri City\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u053d\u0580\u056b\u0574\u0575\u0561\u0576 \u0540\u0561\u0575\u0580\u056b\u056f \u0583. 55\/1\", coords: [40.793397, 43.848997] },\r\n\t\t\t\t\t{ name: \"Pabeda\", address: \"\u0533\u0575\u0578\u0582\u0574\u0580\u056b \u0540\u0561\u0572\u0569\u0561\u0576\u0561\u056f\u056b \u057a. 50\", coords: [40.781551, 43.844002] },\r\n\t\t\t\t\t{ name: \"New City\", address: \"\u0534\u056b\u056c\u056b\u057b\u0561\u0576 \u053f\u0561\u056c\u056b\u0576\u056b\u0576\u056b 99\/9\", coords: [40.739079, 44.853843] },\r\n\t\t\t\t\t{ name: \"Inna\", address: \"\u0534\u056b\u056c\u056b\u057b\u0561\u0576 \u053f\u0561\u056c\u056b\u0576\u056b\u0576\u056b 237\/5\", coords: [40.740787, 44.841761] },\r\n\t\t\t\t\t{ name: \"Mini Market\", address: \"\u053b\u057b\u0587\u0561\u0576 \u0544\u0561\u0575\u056b\u057d\u056b 28\u0583. 29\", coords: [40.876097, 45.146703] },\r\n\t\t\t\t\t{ name: \"Ijevan City\", address: \"\u053b\u057b\u0587\u0561\u0576 \u0533\u0561\u0576\u056b\u0576\u056b 7\", coords: [40.874843, 45.144511] }\r\n\t\t\t\t]\r\n\t\t\t};\r\n            let map;\r\n            let markers = [];\r\n            let currentPopup = null;\r\n            let userPosition = null;\r\n            let userMarker = null;\r\n\r\n            \/\/ zeromaze-map takes [lng, lat]; our data stays [lat, lng] like Leaflet had it.\r\n            function toLngLat(coords) {\r\n                return [coords[1], coords[0]];\r\n            }\r\n\r\n            \/\/ Leaflet had paddingTopLeft [150, 20] on desktop to keep pins out from under the\r\n            \/\/ controls panel. zeromaze-map only does symmetric [x, y] padding, so 160 each side.\r\n            function framePadding() {\r\n                return window.innerWidth < 768 ? [10, 10] : [160, 20];\r\n            }\r\n\r\n            function pinHtml(color, index) {\r\n                const indexStyle = index === undefined ? '' : ` style=\"--index: ${index}\"`;\r\n                return `<div class=\"marker-entrance\"${indexStyle}>\r\n                        <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n                            <path d=\"M16 2C10.477 2 6 6.477 6 12c0 6.5 10 18 10 18s10-11.5 10-18c0-5.523-4.477-10-10-10zm0 14a4 4 0 110-8 4 4 0 010 8z\"\r\n                                fill=\"${color}\"\r\n                                stroke=\"#000000\"\r\n                                stroke-width=\"1\"\/>\r\n                        <\/svg>\r\n                    <\/div>`;\r\n            }\r\n\r\n            \/\/ One pin + its popup. Same markup every Leaflet divIcon block used to build.\r\n            function addPin(location, color, index) {\r\n                const marker = map.addMarker({\r\n                    lng: location.coords[1],\r\n                    lat: location.coords[0],\r\n                    html: pinHtml(color, index),\r\n                    className: 'custom-div-icon',\r\n                    anchor: 'bottom'\r\n                }).bindPopup(`\r\n                    <div class=\"custom-popup\">\r\n                        <h3>${location.name}<\/h3>\r\n                        <p>${location.address}<\/p>\r\n                    <\/div>\r\n                `);\r\n                marker.coords = location.coords;\r\n                markers.push(marker);\r\n                return marker;\r\n            }\r\n\r\n            function clearMarkers() {\r\n                markers.forEach(marker => marker.remove());\r\n                markers = [];\r\n            }\r\n\r\n            \/\/ Only the private _openPopup can open a popup from code (no public API in v0.18).\r\n            function openMarkerPopup(marker) {\r\n                try { map._openPopup(marker.popup); } catch (e) { \/* popup just stays closed *\/ }\r\n            }\r\n\r\n            \/\/ durations are milliseconds here, Leaflet's were seconds\r\n            function flyToCoordsList(coordsList, durationMs, maxZoom) {\r\n                map.flyToBounds(coordsList.map(toLngLat), {\r\n                    padding: framePadding(),\r\n                    maxZoom: maxZoom,\r\n                    duration: durationMs\r\n                });\r\n            }\r\n\r\n            function fitCoordsList(coordsList, maxZoom) {\r\n                map.fitBounds(coordsList.map(toLngLat), {\r\n                    padding: framePadding(),\r\n                    maxZoom: maxZoom\r\n                });\r\n            }\r\n\r\n            function calculateDistance(lat1, lon1, lat2, lon2) {\r\n                const R = 6371; \/\/ Radius of the earth in km\r\n                const dLat = (lat2 - lat1) * Math.PI \/ 180;\r\n                const dLon = (lon2 - lon1) * Math.PI \/ 180;\r\n                const a = \r\n                    Math.sin(dLat\/2) * Math.sin(dLat\/2) +\r\n                    Math.cos(lat1 * Math.PI \/ 180) * Math.cos(lat2 * Math.PI \/ 180) * \r\n                    Math.sin(dLon\/2) * Math.sin(dLon\/2);\r\n                const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\r\n                return R * c; \/\/ Distance in km\r\n            }\r\n            \r\n            function getAllLocations() {\r\n                let allLocations = [];\r\n                Object.entries(diliLocations).forEach(([type, locations]) => {\r\n                    if (type !== 'all-supermarkets' && type !== 'all-shops') {\r\n                        locations.forEach(location => {\r\n                            allLocations.push({\r\n                                ...location,\r\n                                type: type\r\n                            });\r\n                        });\r\n                    }\r\n                });\r\n                return allLocations;\r\n            }\r\n            \r\n            \/\/ Function to determine marker color based on location type\r\n            function getMarkerColor(locationType) {\r\n\t\t\t\t\/\/ All supermarket locations get black markers\r\n\t\t\t\tif (locationType === 'all-supermarkets' || \r\n\t\t\t\t\t(locationType !== 'all-shops' && \r\n                     locationType !== 'barev' && \r\n                     locationType !== 'yeritsyan' && \r\n                     locationType !== 'etalon' && \r\n                     locationType !== 'express' && \r\n                     locationType !== 'tteni' && \r\n                     locationType !== 'kayzer' && \r\n                     locationType !== 'maximum' && \r\n                     locationType !== 'mush' && \r\n                     locationType !== 'van' && \r\n                     locationType !== 'sky' && \r\n                     locationType !== 'titan' && \r\n                     locationType !== 'gurmenia')) {\r\n\t\t\t\t\treturn '#e73137'; \/\/ Red for all supermarkets\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\/\/ Local shops get green markers\r\n\t\t\t\treturn '#3b8061'; \/\/ Green for local shops\r\n\t\t\t}\r\n            \r\n            \/\/ Function to add markers with animation\r\n            function addMarkersWithAnimation(locations, locationType) {\r\n                clearMarkers();\r\n\r\n                const bounds = [];\r\n                const markerColor = getMarkerColor(locationType);\r\n\r\n                locations.forEach((location, index) => {\r\n                    setTimeout(() => {\r\n                        addPin(location, markerColor);\r\n                        bounds.push(location.coords);\r\n\r\n                        if (index === locations.length - 1) {\r\n                            flyToCoordsList(bounds, 500, 15);\r\n\r\n                            if (locations.length === 1) {\r\n                                setTimeout(() => {\r\n                                    map.flyTo({ center: toLngLat(location.coords), zoom: 14, duration: 600 });\r\n                                }, 600);\r\n                            }\r\n                        }\r\n                    }, index * 5);\r\n                });\r\n            }\r\n            \r\n            function updateMarkers(locationType) {\r\n                if (!locationType) return;\r\n                \r\n                if (locationType === 'all-supermarkets') {\r\n                    clearMarkers();\r\n\r\n                    const bounds = [];\r\n                    const allChains = Object.keys(diliLocations).filter(key => \r\n                        key !== 'all-supermarkets' && \r\n                        key !== 'all-shops' && \r\n                        key !== 'barev' && \r\n                        key !== 'yeritsyan' && \r\n                        key !== 'etalon' && \r\n                        key !== 'express' && \r\n                        key !== 'tteni' && \r\n                        key !== 'kayzer' && \r\n                        key !== 'maximum' && \r\n                        key !== 'mush' && \r\n                        key !== 'van' && \r\n                        key !== 'sky' && \r\n                        key !== 'titan' && \r\n                        key !== 'gurmenia'\r\n                    );\r\n                    \r\n                    let markerIndex = 0;\r\n                    allChains.forEach((chain, chainIndex) => {\r\n                        if (diliLocations[chain] && diliLocations[chain].length > 0) {\r\n                            diliLocations[chain].forEach((location, locationIndex) => {\r\n                                setTimeout(() => {\r\n                                    addPin(location, '#e73137');\r\n                                    bounds.push(location.coords);\r\n                                }, (chainIndex * 10) + (locationIndex * 2));\r\n                            });\r\n                        }\r\n                    });\r\n                    \r\n                    setTimeout(() => {\r\n                        if (bounds.length > 0) {\r\n                            flyToCoordsList(bounds, 1500, 15);\r\n                        }\r\n                    }, 200);\r\n                    \r\n                } else if (locationType === 'all-shops') {\r\n                    \/\/ Display all local shops including the shops we moved\r\n                    const allLocalShops = [...diliLocations['all-shops']];\r\n                    \r\n                    \/\/ Add shops that were moved from supermarkets to local shops\r\n                    const shopCategories = ['barev', 'yeritsyan', 'etalon', 'express', 'tteni', 'kayzer', 'maximum', 'mush', 'van', 'sky', 'titan', 'gurmenia'];\r\n                    \r\n                    shopCategories.forEach(category => {\r\n                        if (diliLocations[category] && diliLocations[category].length > 0) {\r\n                            allLocalShops.push(...diliLocations[category]);\r\n                        }\r\n                    });\r\n                    \r\n                    addMarkersWithAnimation(allLocalShops, locationType);\r\n                } else if (diliLocations[locationType]) {\r\n                    \/\/ Display markers for the selected chain or shop\r\n                    addMarkersWithAnimation(diliLocations[locationType], locationType);\r\n                }\r\n            }\r\n            \r\n            \/\/ Event listeners for dropdowns\r\n            document.addEventListener('DOMContentLoaded', function() {\r\n                const dropdowns = [\r\n                    'supermarkets-select',\r\n                    'shops-select'\r\n                ];\r\n                \r\n                dropdowns.forEach(selectId => {\r\n                    const select = document.getElementById(selectId);\r\n                    if (select) {\r\n                        select.addEventListener('change', function(e) {\r\n                            const selectedType = e.target.value;\r\n                            if (selectedType) {\r\n                                \/\/ Clear other dropdowns\r\n                                dropdowns.forEach(id => {\r\n                                    if (id !== selectId) {\r\n                                        const otherSelect = document.getElementById(id);\r\n                                        if (otherSelect) {\r\n                                            otherSelect.value = '';\r\n                                        }\r\n                                    }\r\n                                });\r\n                                updateMarkers(selectedType);\r\n                            }\r\n                        });\r\n                    }\r\n                });\r\n            });\r\n            \r\n            function findClosestLocation() {\r\n                if (!userPosition) {\r\n                    if (navigator.geolocation) {\r\n                        navigator.geolocation.getCurrentPosition(\r\n                            (position) => {\r\n                                userPosition = position;\r\n                                findClosestFromPosition(position);\r\n                            },\r\n                            (error) => {\r\n                                console.error('Error getting location:', error);\r\n                                alert('Please enable location services to use this feature');\r\n                            }\r\n                        );\r\n                    } else {\r\n                        alert('Geolocation is not supported by your browser');\r\n                    }\r\n                } else {\r\n                    findClosestFromPosition(userPosition);\r\n                }\r\n            }\r\n            \r\n            function findClosestFromPosition(position) {\r\n                const supermarketsSelect = document.getElementById('supermarkets-select');\r\n                const shopsSelect = document.getElementById('shops-select');\r\n                \r\n                let locationsToSearch = [];\r\n                let activeDropdown = null;\r\n                \r\n                if (supermarketsSelect.value) {\r\n                    if (supermarketsSelect.value === 'all-supermarkets') {\r\n                        \/\/ Get all supermarket locations\r\n                        Object.keys(diliLocations).forEach(key => {\r\n                            if (key !== 'all-supermarkets' && \r\n                                key !== 'all-shops' && \r\n                                key !== 'barev' && \r\n                                key !== 'yeritsyan' && \r\n                                key !== 'etalon' && \r\n                                key !== 'express' && \r\n                                key !== 'tteni' && \r\n                                key !== 'kayzer' && \r\n                                key !== 'maximum' && \r\n                                key !== 'mush' && \r\n                                key !== 'van' && \r\n                                key !== 'sky' && \r\n                                key !== 'titan' && \r\n                                key !== 'gurmenia') {\r\n                                diliLocations[key].forEach(location => {\r\n                                    locationsToSearch.push({\r\n                                        ...location,\r\n                                        type: key\r\n                                    });\r\n                                });\r\n                            }\r\n                        });\r\n                    } else {\r\n                        \/\/ Get locations for the selected supermarket chain\r\n                        locationsToSearch = diliLocations[supermarketsSelect.value].map(location => ({\r\n                            ...location,\r\n                            type: supermarketsSelect.value\r\n                        }));\r\n                    }\r\n                    activeDropdown = 'supermarkets-select';\r\n                } else if (shopsSelect.value) {\r\n                    if (shopsSelect.value === 'all-shops') {\r\n                        \/\/ Get all local shops including moved ones\r\n                        const allShops = [...diliLocations['all-shops']];\r\n                        \r\n                        \/\/ Add shops that were moved from supermarkets to local shops\r\n                        const shopCategories = ['barev', 'yeritsyan', 'etalon', 'express', 'tteni', 'kayzer', 'maximum', 'mush', 'van', 'sky', 'titan', 'gurmenia'];\r\n                        \r\n                        shopCategories.forEach(category => {\r\n                            if (diliLocations[category] && diliLocations[category].length > 0) {\r\n                                diliLocations[category].forEach(location => {\r\n                                    allShops.push(location);\r\n                                });\r\n                            }\r\n                        });\r\n                        \r\n                        locationsToSearch = allShops.map(location => ({\r\n                            ...location,\r\n                            type: 'all-shops'\r\n                        }));\r\n                    } else {\r\n                        \/\/ Get locations for the selected shop\r\n                        locationsToSearch = diliLocations[shopsSelect.value].map(location => ({\r\n                            ...location,\r\n                            type: shopsSelect.value\r\n                        }));\r\n                    }\r\n                    activeDropdown = 'shops-select';\r\n                } else {\r\n                    locationsToSearch = getAllLocations();\r\n                }\r\n                \r\n                let closest = null;\r\n                let minDistance = Infinity;\r\n                \r\n                locationsToSearch.forEach(location => {\r\n                    if (location.coords && location.coords[0] && location.coords[1]) {\r\n                        const distance = calculateDistance(\r\n                            position.coords.latitude,\r\n                            position.coords.longitude,\r\n                            location.coords[0],\r\n                            location.coords[1]\r\n                        );\r\n                        if (distance < minDistance) {\r\n                            minDistance = distance;\r\n                            closest = location;\r\n                        }\r\n                    }\r\n                });\r\n                \r\n                if (closest) {\r\n                    ['supermarkets-select', 'shops-select'].forEach(id => {\r\n                        const dropdown = document.getElementById(id);\r\n                        if (dropdown) {\r\n                            if (id === activeDropdown) {\r\n                                dropdown.value = closest.type;\r\n                                let borderColor = id === 'supermarkets-select' ? '#e73137' : '#3b8061';\r\n                                \r\n                                dropdown.style.borderColor = borderColor;\r\n                                dropdown.style.borderWidth = '2px';\r\n                                dropdown.style.boxShadow = `0 0 0 1px ${borderColor}`;\r\n                            } else {\r\n                                dropdown.value = '';\r\n                                dropdown.style.borderColor = '#ddd';\r\n                                dropdown.style.borderWidth = '1px';\r\n                                dropdown.style.boxShadow = 'none';\r\n                            }\r\n                        }\r\n                    });\r\n                    \r\n                    addMarkersWithAnimation([closest], closest.type);\r\n                    \r\n                    map.flyTo({ center: toLngLat(closest.coords), zoom: 14, duration: 500 });\r\n\r\n                    setTimeout(() => {\r\n                        markers.forEach(marker => {\r\n                            if (marker.coords[0] === closest.coords[0] &&\r\n                                marker.coords[1] === closest.coords[1]) {\r\n                                openMarkerPopup(marker);\r\n                            }\r\n                        });\r\n                    }, 600);\r\n                }\r\n            }\r\n            \r\n            \/\/ Function to show all locations\r\n            function showAllLocations() {\r\n                clearMarkers();\r\n                const bounds = [];\r\n                let markerIndex = 0;\r\n                \r\n                \/\/ Show all supermarkets\r\n                const allChains = Object.keys(diliLocations).filter(key => \r\n                    key !== 'all-supermarkets' && \r\n                    key !== 'all-shops' && \r\n                    key !== 'barev' && \r\n                    key !== 'yeritsyan' && \r\n                    key !== 'etalon' && \r\n                    key !== 'express' && \r\n                    key !== 'tteni' && \r\n                    key !== 'kayzer' && \r\n                    key !== 'maximum' && \r\n                    key !== 'mush' && \r\n                    key !== 'van' && \r\n                    key !== 'sky' && \r\n                    key !== 'titan' && \r\n                    key !== 'gurmenia'\r\n                );\r\n                \r\n                allChains.forEach(chain => {\r\n                    if (diliLocations[chain]) {\r\n                        diliLocations[chain].forEach(location => {\r\n                            addLocationMarker(location, chain, bounds, markerIndex++);\r\n                        });\r\n                    }\r\n                });\r\n                \r\n                \/\/ Show all local shops\r\n                if (diliLocations['all-shops'].length > 0) {\r\n                    diliLocations['all-shops'].forEach(location => {\r\n                        addLocationMarker(location, 'all-shops', bounds, markerIndex++);\r\n                    });\r\n                }\r\n                \r\n                \/\/ Show all moved shops\r\n                const shopCategories = ['barev', 'yeritsyan', 'etalon', 'express', 'tteni', 'kayzer', 'maximum', 'mush', 'van', 'sky', 'titan', 'gurmenia'];\r\n                shopCategories.forEach(category => {\r\n                    if (diliLocations[category] && diliLocations[category].length > 0) {\r\n                        diliLocations[category].forEach(location => {\r\n                            addLocationMarker(location, category, bounds, markerIndex++);\r\n                        });\r\n                    }\r\n                });\r\n                \r\n                if (bounds.length > 0) {\r\n                    fitCoordsList(bounds, window.innerWidth < 768 ? 20 : 15);\r\n                }\r\n            }\r\n\r\n            function addLocationMarker(location, locationType, bounds, index) {\r\n                if (location.coords && location.coords[0] && location.coords[1]) {\r\n                    addPin(location, getMarkerColor(locationType), index);\r\n                    bounds.push(location.coords);\r\n                }\r\n            }\r\n            \r\n            function initMap() {\r\n                \/\/ The tile worker is inlined above as text, so it runs from a blob: URL\r\n                \/\/ (a worker URL on another domain would be blocked by the browser).\r\n                const workerSource = document.getElementById('dili-zmv-worker').textContent;\r\n                const workerUrl = URL.createObjectURL(new Blob([workerSource], { type: 'text\/javascript' }));\r\n                const mapEl = document.getElementById('dili-map');\r\n\r\n                \/\/ cooperativeGestures = ctrl+scroll to zoom and two-finger drag on touch, with a\r\n                \/\/ hint. Replaces the old scrollWheelZoom\/dragging toggles we did by hand.\r\n                map = new ZMV.ZeroMap(mapEl, {\r\n                    center: [44.5152, 40.1872], \/\/ Yerevan center, [lng, lat]\r\n                    zoom: 12,\r\n                    cooperativeGestures: true,\r\n                    renderer: (c, r) => new ZMV.VectorRenderer(c, r, { workerUrl: workerUrl })\r\n                });\r\n                try {\r\n                    map.renderer.setStyle(ZMV.brandStyle('#3b8061')); \/\/ Dili green\r\n                } catch (e) { \/* default light style is fine *\/ }\r\n\r\n                \/\/ Weak Android phones get the lighter render mode. deviceMemory only exists in\r\n                \/\/ Chromium; iOS caps hardwareConcurrency at 4, so trusting it alone would strip\r\n                \/\/ the map on every iPhone.\r\n                try {\r\n                    const dm = navigator.deviceMemory;\r\n                    if (dm !== undefined && (dm < 4 || (navigator.hardwareConcurrency || 8) <= 4)) {\r\n                        map.setPerformanceMode('lite');\r\n                    }\r\n                } catch (e) { \/* full mode is fine *\/ }\r\n\r\n                const zoomControls = document.createElement('div');\r\n                zoomControls.className = 'dili-zoom';\r\n                zoomControls.innerHTML = '<button type=\"button\" aria-label=\"Zoom in\">+<\/button>' +\r\n                    '<button type=\"button\" aria-label=\"Zoom out\">&minus;<\/button>';\r\n                zoomControls.children[0].addEventListener('click', () => map.zoomIn());\r\n                zoomControls.children[1].addEventListener('click', () => map.zoomOut());\r\n                mapEl.appendChild(zoomControls);\r\n\r\n                showAllLocations();\r\n\r\n                const yerevanBounds = [\r\n                    [40.1672, 44.4848], \/\/ Southwest coordinates of Yerevan\r\n                    [40.2047, 44.5441]  \/\/ Northeast coordinates of Yerevan\r\n                ];\r\n                fitCoordsList(yerevanBounds, window.innerWidth < 768 ? 20 : 15);\r\n                \r\n                \/\/ Handle dropdown changes\r\n                const dropdowns = ['supermarkets-select', 'shops-select'];\r\n                dropdowns.forEach(selectId => {\r\n                    const select = document.getElementById(selectId);\r\n                    if (select) {\r\n                        select.addEventListener('change', function(e) {\r\n                            const selectedType = e.target.value;\r\n                            \r\n                            dropdowns.forEach(id => {\r\n                                const dropdown = document.getElementById(id);\r\n                                dropdown.style.borderColor = '#ddd';\r\n                                dropdown.style.borderWidth = '1px';\r\n                                dropdown.style.boxShadow = 'none';\r\n                            });\r\n                            \r\n                            if (selectedType) {\r\n                                dropdowns.forEach(id => {\r\n                                    if (id !== selectId) {\r\n                                        const otherSelect = document.getElementById(id);\r\n                                        if (otherSelect) {\r\n                                            otherSelect.value = '';\r\n                                        }\r\n                                    }\r\n                                });\r\n                                \r\n                                updateMarkers(selectedType);\r\n                                \r\n                                let borderColor = selectId === 'supermarkets-select' ? '#000000' : '#3b8061';\r\n                                \r\n                                select.style.borderColor = borderColor;\r\n                                select.style.borderWidth = '2px';\r\n                                select.style.boxShadow = `0 0 0 1px ${borderColor}`;\r\n                            } else {\r\n                                showAllLocations();\r\n                            }\r\n                        });\r\n                    }\r\n                });\r\n                \r\n                \/\/ Initialize user location\r\n                if (navigator.geolocation) {\r\n                    navigator.geolocation.getCurrentPosition(\r\n                        (position) => {\r\n                            userPosition = position;\r\n                            const { latitude, longitude } = position.coords;\r\n                            \r\n                            if (userMarker) {\r\n                                userMarker.remove();\r\n                            }\r\n\r\n                            userMarker = map.addMarker({\r\n                                lng: longitude,\r\n                                lat: latitude,\r\n                                anchor: 'center',\r\n                                className: 'user-location-marker',\r\n                                html: `<svg viewBox=\"0 0 30 30\" width=\"30\" height=\"30\">\r\n                                        <circle class=\"pulse-ring\" cx=\"15\" cy=\"15\" r=\"8\" \r\n                                                fill=\"none\" \r\n                                                stroke=\"#3b8061\" \r\n                                                stroke-width=\"1\" \r\n                                                opacity=\"0.6\"\/>\r\n                                        <circle cx=\"15\" cy=\"15\" r=\"8\" \r\n                                                fill=\"#3b8061\" \r\n                                                stroke=\"#ffffff\" \r\n                                                stroke-width=\"2\"\/>\r\n                                        <circle cx=\"15\" cy=\"15\" r=\"3\" \r\n                                                fill=\"#ffffff\"\/>\r\n                                    <\/svg>`\r\n                            }).bindPopup('<div class=\"user-popup\">Your Location<\/div>');\r\n\r\n                            openMarkerPopup(userMarker);\r\n                        },\r\n                        (error) => {\r\n                            console.error('Error getting location:', error);\r\n                            showAllLocations();\r\n                        },\r\n                        {\r\n                            enableHighAccuracy: true,\r\n                            timeout: 10000,\r\n                            maximumAge: 0\r\n                        }\r\n                    );\r\n                } else {\r\n                    console.log('Geolocation is not supported');\r\n                    showAllLocations();\r\n                }\r\n            }\r\n        <\/script>\r\n    <\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Buy the \u201cDili\u201d dairy product range in online supermarkets Buy Now Buy Now Buy Now Buy Now Buy Now Where to buy Dili? Find our dairy products SupermarketsAll SupermarketsYerevan CitySASCarrefour88EvrikaParmaTsiranZovqChinarRock Four Local ShopsAll Local ShopsBarevYeritsyanEtalonExpressTteniKayzerMaximumMushVanSkyTitanGurmenia Find Closest<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2467","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/dili.am\/am\/wp-json\/wp\/v2\/pages\/2467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dili.am\/am\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dili.am\/am\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dili.am\/am\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dili.am\/am\/wp-json\/wp\/v2\/comments?post=2467"}],"version-history":[{"count":73,"href":"https:\/\/dili.am\/am\/wp-json\/wp\/v2\/pages\/2467\/revisions"}],"predecessor-version":[{"id":4275,"href":"https:\/\/dili.am\/am\/wp-json\/wp\/v2\/pages\/2467\/revisions\/4275"}],"wp:attachment":[{"href":"https:\/\/dili.am\/am\/wp-json\/wp\/v2\/media?parent=2467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}