summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/gendata.js72
-rw-r--r--tools/genlayout.py33
-rw-r--r--tools/layout.svg449
3 files changed, 518 insertions, 36 deletions
diff --git a/tools/gendata.js b/tools/gendata.js
index 7abf269..4e10a79 100644
--- a/tools/gendata.js
+++ b/tools/gendata.js
@@ -14,10 +14,10 @@ let areas = []
let zone_areas = {}
let next_location_id = 0
-function def_area(id, name, type, zone, x, y, w, h) {
+function def_area(id, name, type, zone) {
let loc = next_location_id++
locations[id] = loc
- areas.push({loc, id, name, type, zone, x, y, w, h})
+ areas.push({loc, id, name, type, zone})
if (zone) {
if (!(zone in zone_areas)) {
zone_areas[zone] = []
@@ -32,40 +32,40 @@ def_area("DEPLOY", "Deployment")
def_area("ELIMINATED", "Eliminated")
// countries
-def_area("FRANCE", "France", COUNTRY, null, 1690.3, 244.8, 94, 94)
-def_area("TUNISIA", "Tunisia", COUNTRY, "TUNISIA", 2499.9, 1667.6, 94, 94)
-def_area("MOROCCO", "Morocco", COUNTRY, "MOROCCO", 109, 1765, 94, 94)
-
-def_area("I-1", "Barika", RURAL, "I", 1708.1, 1117.9)
-def_area("I-2", "Batna", REMOTE, "I", 2185.6, 1390.9)
-def_area("I-3", "Biskra", REMOTE, "I", 1853.6, 1620.9)
-def_area("I-4", "Tebessa", RURAL, "I", 2299.6, 1120.9)
-
-def_area("CONSTANTINE", "Constantine", URBAN, "II", 2066.6, 315.8)
-def_area("II-1", "Setif", RURAL, "II", 1917.6, 800.8)
-def_area("II-2", "Phillippeville", RURAL, "II", 2200.6, 584.9)
-def_area("II-3", "Souk Ahras", RURAL, "II", 2347.6, 848.9)
-
-def_area("III-1", "Tizi Ouzou", RURAL, "III", 1473.6, 578.9)
-def_area("III-2", "Bordj Bou Arreridj", RURAL, "III", 1465.6, 832.9)
-def_area("III-3", "Bougie", RURAL, "III", 1703.6, 616.9)
-
-def_area("ALGIERS", "Algiers", URBAN, "IV", 1185.6, 346.8)
-def_area("IV-1", "Medea", RURAL, "IV", 1212, 727)
-def_area("IV-2", "Orleansville", RURAL, "IV", 982, 780.2)
-
-def_area("ORAN", "Oran", URBAN, "V", 430.6, 588.8)
-def_area("V-1", "Mecheria", REMOTE, "V", 234, 1485.7)
-def_area("V-2", "Tlemcen", RURAL, "V", 173, 1140.9)
-def_area("V-3", "Sidi Bel Abbes", RURAL, "V", 476, 1038)
-def_area("V-4", "Mostaganem", RURAL, "V", 741, 863.9)
-def_area("V-5", "Saida", REMOTE, "V", 501, 1419.1)
-def_area("V-6", "Mascara", REMOTE, "V", 785, 1302.9)
-def_area("V-7", "Ain Sefra", REMOTE, "V", 752, 1670.9)
-def_area("V-8", "Laghouat", REMOTE, "V", 1191, 1615.6)
-
-def_area("VI-1", "Sidi Aissa", REMOTE, "VI", 1385, 1186)
-def_area("VI-2", "Ain Qussera", RURAL, "VI", 1070.6, 1235.6)
+def_area("FRANCE", "France", COUNTRY, null)
+def_area("TUNISIA", "Tunisia", COUNTRY, "TUNISIA")
+def_area("MOROCCO", "Morocco", COUNTRY, "MOROCCO")
+
+def_area("I-1", "Barika", RURAL, "I")
+def_area("I-2", "Batna", REMOTE, "I")
+def_area("I-3", "Biskra", REMOTE, "I")
+def_area("I-4", "Tebessa", RURAL, "I")
+
+def_area("CONSTANTINE", "Constantine", URBAN, "II")
+def_area("II-1", "Setif", RURAL, "II")
+def_area("II-2", "Phillippeville", RURAL, "II")
+def_area("II-3", "Souk Ahras", RURAL, "II")
+
+def_area("III-1", "Tizi Ouzou", RURAL, "III")
+def_area("III-2", "Bordj Bou Arreridj", RURAL, "III")
+def_area("III-3", "Bougie", RURAL, "III")
+
+def_area("ALGIERS", "Algiers", URBAN, "IV")
+def_area("IV-1", "Medea", RURAL, "IV")
+def_area("IV-2", "Orleansville", RURAL, "IV")
+
+def_area("ORAN", "Oran", URBAN, "V")
+def_area("V-1", "Mecheria", REMOTE, "V")
+def_area("V-2", "Tlemcen", RURAL, "V")
+def_area("V-3", "Sidi Bel Abbes", RURAL, "V")
+def_area("V-4", "Mostaganem", RURAL, "V")
+def_area("V-5", "Saida", REMOTE, "V")
+def_area("V-6", "Mascara", REMOTE, "V")
+def_area("V-7", "Ain Sefra", REMOTE, "V")
+def_area("V-8", "Laghouat", REMOTE, "V")
+
+def_area("VI-1", "Sidi Aissa", REMOTE, "VI")
+def_area("VI-2", "Ain Qussera", RURAL, "VI")
let adjecents = {}
diff --git a/tools/genlayout.py b/tools/genlayout.py
new file mode 100644
index 0000000..2e7bafe
--- /dev/null
+++ b/tools/genlayout.py
@@ -0,0 +1,33 @@
+from bs4 import BeautifulSoup
+
+SCALE = 1.8033333333333332
+
+def readsvg(filename):
+ with open(filename) as fp:
+ soup = BeautifulSoup(fp, features="xml")
+
+ result = []
+ boxes = soup.find('g', id='Mission-Boxes')
+ for box in boxes.find_all('g', recursive=False):
+ area_name = box.attrs.get('serif:id', box.attrs['id'])
+ for rect in box.find_all('rect'):
+ rect_id = rect.attrs.get('serif:id', rect.attrs['id'])
+ x = float(rect.attrs['x'])
+ y = float(rect.attrs['y'])
+ w = float(rect.attrs['width'])
+ h = float(rect.attrs['height'])
+ xc = round((x+w/2.0)/SCALE)
+ yc = round((y+h/2.0)/SCALE)
+ name = area_name + '-' + rect_id
+ result.append([name, xc, yc])
+
+ return result
+
+def print_list(data):
+ print("const LAYOUT = {")
+ for (name, x, y) in data:
+ print(f'\t"{name}": [{x}, {y}],')
+ print("}")
+
+result = readsvg("tools/layout.svg")
+print_list(result)
diff --git a/tools/layout.svg b/tools/layout.svg
new file mode 100644
index 0000000..00c43af
--- /dev/null
+++ b/tools/layout.svg
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="100%" height="100%" viewBox="0 0 2705 1985" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
+ <g id="Mission-Boxes" serif:id="Mission Boxes">
+ <g id="Laghouat">
+ <g id="OC">
+ <rect id="OC1" serif:id="OC" x="1487.38" y="1715.19" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL">
+ <rect id="PTL1" serif:id="PTL" x="1130.76" y="1762.19" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS">
+ <rect id="OPS1" serif:id="OPS" x="1414.38" y="1552.66" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG">
+ <rect id="UG1" serif:id="UG" x="1098.76" y="1577.48" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK">
+ <rect id="MK1" serif:id="MK" x="1273.36" y="1595.45" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Ain-Sefra" serif:id="Ain Sefra">
+ <g id="OC2" serif:id="OC">
+ <rect id="OC3" serif:id="OC" x="800.256" y="1779.47" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL2" serif:id="PTL">
+ <rect id="PTL3" serif:id="PTL" x="619.629" y="1781.47" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS2" serif:id="OPS">
+ <rect id="OPS3" serif:id="OPS" x="836.256" y="1632.82" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG2" serif:id="UG">
+ <rect id="UG3" serif:id="UG" x="435.629" y="1763.66" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK2" serif:id="MK">
+ <rect id="MK3" serif:id="MK" x="543.5" y="1694.19" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Mascara">
+ <g id="OC4" serif:id="OC">
+ <rect id="OC5" serif:id="OC" x="904.382" y="1430.43" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL4" serif:id="PTL">
+ <rect id="PTL5" serif:id="PTL" x="779.256" y="1473.43" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS4" serif:id="OPS">
+ <rect id="OPS5" serif:id="OPS" x="905.382" y="1315.9" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG4" serif:id="UG">
+ <rect id="UG5" serif:id="UG" x="780.756" y="1342.9" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK4" serif:id="MK">
+ <rect id="MK5" serif:id="MK" x="754.5" y="1248.59" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Saida">
+ <g id="OC6" serif:id="OC">
+ <rect id="OC7" serif:id="OC" x="644.382" y="1553.47" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL6" serif:id="PTL">
+ <rect id="PTL7" serif:id="PTL" x="508.5" y="1577.47" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS6" serif:id="OPS">
+ <rect id="OPS7" serif:id="OPS" x="617" y="1370.94" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG6" serif:id="UG">
+ <rect id="UG7" serif:id="UG" x="494" y="1371.94" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK6" serif:id="MK">
+ <rect id="MK7" serif:id="MK" x="505" y="1474.32" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Mecheria">
+ <g id="OC8" serif:id="OC">
+ <rect id="OC9" serif:id="OC" x="354.382" y="1618.47" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL8" serif:id="PTL">
+ <rect id="PTL9" serif:id="PTL" x="243.5" y="1635.47" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS8" serif:id="OPS">
+ <rect id="OPS9" serif:id="OPS" x="345.5" y="1433.94" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG8" serif:id="UG">
+ <rect id="UG9" serif:id="UG" x="237.756" y="1454.43" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK8" serif:id="MK">
+ <rect id="MK9" serif:id="MK" x="371.846" y="1523.47" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Mostaganem">
+ <g id="OC10" serif:id="OC">
+ <rect id="OC11" serif:id="OC" x="852.382" y="1075.71" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL10" serif:id="PTL">
+ <rect id="PTL11" serif:id="PTL" x="748.5" y="983.707" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS10" serif:id="OPS">
+ <rect id="OPS11" serif:id="OPS" x="814.382" y="746.015" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG10" serif:id="UG">
+ <rect id="UG11" serif:id="UG" x="715.756" y="805.221" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK10" serif:id="MK">
+ <rect id="MK11" serif:id="MK" x="862.454" y="963.829" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Sidi-Bel-Abbes" serif:id="Sidi Bel Abbes">
+ <g id="OC12" serif:id="OC">
+ <rect id="OC13" serif:id="OC" x="625.382" y="1113.71" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL12" serif:id="PTL">
+ <rect id="PTL13" serif:id="PTL" x="504" y="1187.71" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS12" serif:id="OPS">
+ <rect id="OPS13" serif:id="OPS" x="571.382" y="944.735" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG12" serif:id="UG">
+ <rect id="UG13" serif:id="UG" x="414.756" y="956.176" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK12" serif:id="MK">
+ <rect id="MK13" serif:id="MK" x="423.045" y="1099.2" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Tlemcen">
+ <g id="OC14" serif:id="OC">
+ <rect id="OC15" serif:id="OC" x="291.382" y="1291.47" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL14" serif:id="PTL">
+ <rect id="PTL15" serif:id="PTL" x="181" y="1229.47" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS14" serif:id="OPS">
+ <rect id="OPS15" serif:id="OPS" x="291.382" y="1153.59" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG14" serif:id="UG">
+ <rect id="UG15" serif:id="UG" x="163.756" y="1095.94" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK14" serif:id="MK">
+ <rect id="MK15" serif:id="MK" x="195.454" y="963.829" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Orleansville">
+ <g id="OC16" serif:id="OC">
+ <rect id="OC17" serif:id="OC" x="1079.38" y="997" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL16" serif:id="PTL">
+ <rect id="PTL17" serif:id="PTL" x="991.756" y="910" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS16" serif:id="OPS">
+ <rect id="OPS17" serif:id="OPS" x="1099.76" y="855.235" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG16" serif:id="UG">
+ <rect id="UG17" serif:id="UG" x="992.756" y="772.427" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK16" serif:id="MK">
+ <rect id="MK17" serif:id="MK" x="1099" y="748.015" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Medea">
+ <g id="OC18" serif:id="OC">
+ <rect id="OC19" serif:id="OC" x="1316" y="846.472" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL18" serif:id="PTL">
+ <rect id="PTL19" serif:id="PTL" x="1224.76" y="932.545" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS18" serif:id="OPS">
+ <rect id="OPS19" serif:id="OPS" x="1346.26" y="730.221" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG18" serif:id="UG">
+ <rect id="UG19" serif:id="UG" x="1225.76" y="739.941" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK18" serif:id="MK">
+ <rect id="MK19" serif:id="MK" x="1351.5" y="624.5" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Ain-Qussera" serif:id="Ain Qussera">
+ <g id="OC20" serif:id="OC">
+ <rect id="OC21" serif:id="OC" x="1217.13" y="1392.47" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL20" serif:id="PTL">
+ <rect id="PTL21" serif:id="PTL" x="1067.5" y="1311.47" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS20" serif:id="OPS">
+ <rect id="OPS21" serif:id="OPS" x="1222.13" y="1119.24" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG20" serif:id="UG">
+ <rect id="UG21" serif:id="UG" x="1046" y="1153.31" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK20" serif:id="MK">
+ <rect id="MK21" serif:id="MK" x="1143.5" y="1203.53" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Sidi-Aissa" serif:id="Sidi Aissa">
+ <g id="OC22" serif:id="OC">
+ <rect id="OC23" serif:id="OC" x="1512.5" y="1302.47" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL22" serif:id="PTL">
+ <rect id="PTL23" serif:id="PTL" x="1388.5" y="1370.47" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS22" serif:id="OPS">
+ <rect id="OPS23" serif:id="OPS" x="1530.5" y="1118.24" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG22" serif:id="UG">
+ <rect id="UG23" serif:id="UG" x="1379" y="1066.94" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK22" serif:id="MK">
+ <rect id="MK23" serif:id="MK" x="1348.5" y="1280.53" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Bougie">
+ <g id="OC24" serif:id="OC">
+ <rect id="OC25" serif:id="OC" x="1817.69" y="725.472" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL24" serif:id="PTL">
+ <rect id="PTL25" serif:id="PTL" x="1715.06" y="725.472" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS24" serif:id="OPS">
+ <rect id="OPS25" serif:id="OPS" x="1818.69" y="618.941" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG24" serif:id="UG">
+ <rect id="UG25" serif:id="UG" x="1716.06" y="618.941" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK24" serif:id="MK">
+ <rect id="MK25" serif:id="MK" x="1849.88" y="508.5" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Bordj-Bou-Arreridj" serif:id="Bordj Bou Arreridj">
+ <g id="OC26" serif:id="OC">
+ <rect id="OC27" serif:id="OC" x="1571.38" y="941.472" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL26" serif:id="PTL">
+ <rect id="PTL27" serif:id="PTL" x="1469.76" y="942.472" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS26" serif:id="OPS">
+ <rect id="OPS27" serif:id="OPS" x="1572.38" y="835.941" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG26" serif:id="UG">
+ <rect id="UG27" serif:id="UG" x="1470.76" y="836.941" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK26" serif:id="MK">
+ <rect id="MK27" serif:id="MK" x="1665.5" y="933.01" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Tizi-Ouzou" serif:id="Tizi Ouzou">
+ <g id="OC28" serif:id="OC">
+ <rect id="OC29" serif:id="OC" x="1589.38" y="703.472" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL28" serif:id="PTL">
+ <rect id="PTL29" serif:id="PTL" x="1485.76" y="703.472" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS28" serif:id="OPS">
+ <rect id="OPS29" serif:id="OPS" x="1588.38" y="597.941" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG28" serif:id="UG">
+ <rect id="UG29" serif:id="UG" x="1485.76" y="597.941" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK28" serif:id="MK">
+ <rect id="MK29" serif:id="MK" x="1485.2" y="434.666" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Biskra">
+ <g id="OC30" serif:id="OC">
+ <rect id="OC31" serif:id="OC" x="2028.13" y="1751.99" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL30" serif:id="PTL">
+ <rect id="PTL31" serif:id="PTL" x="1772.5" y="1707.99" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS30" serif:id="OPS">
+ <rect id="OPS31" serif:id="OPS" x="2154.76" y="1631.46" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG30" serif:id="UG">
+ <rect id="UG31" serif:id="UG" x="1742.5" y="1508.46" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK30" serif:id="MK">
+ <rect id="MK31" serif:id="MK" x="1914.5" y="1564.95" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Batna">
+ <g id="OC32" serif:id="OC">
+ <rect id="OC33" serif:id="OC" x="2277.81" y="1510.59" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL32" serif:id="PTL">
+ <rect id="PTL33" serif:id="PTL" x="2022.68" y="1425.59" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS32" serif:id="OPS">
+ <rect id="OPS33" serif:id="OPS" x="2311.74" y="1370.06" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG32" serif:id="UG">
+ <rect id="UG33" serif:id="UG" x="1969.18" y="1291.3" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK32" serif:id="MK">
+ <rect id="MK33" serif:id="MK" x="2092.27" y="1312.95" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Tebessa">
+ <g id="OC34" serif:id="OC">
+ <rect id="OC35" serif:id="OC" x="2360.63" y="1231.86" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL34" serif:id="PTL">
+ <rect id="PTL35" serif:id="PTL" x="2213.13" y="1202.86" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS34" serif:id="OPS">
+ <rect id="OPS35" serif:id="OPS" x="2424.81" y="1119.33" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG34" serif:id="UG">
+ <rect id="UG35" serif:id="UG" x="2081.18" y="1113" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK34" serif:id="MK">
+ <rect id="MK35" serif:id="MK" x="2181.56" y="1077.04" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Barika">
+ <g id="OC36" serif:id="OC">
+ <rect id="OC37" serif:id="OC" x="1814.38" y="1249.42" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL36" serif:id="PTL">
+ <rect id="PTL37" serif:id="PTL" x="1681.26" y="1291.42" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS36" serif:id="OPS">
+ <rect id="OPS37" serif:id="OPS" x="1913.38" y="1081.85" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG36" serif:id="UG">
+ <rect id="UG37" serif:id="UG" x="1696.76" y="1034.08" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK36" serif:id="MK">
+ <rect id="MK37" serif:id="MK" x="1687.33" y="1156.02" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Souk-Ahras" serif:id="Souk Ahras">
+ <g id="OC38" serif:id="OC">
+ <rect id="OC39" serif:id="OC" x="2460.37" y="954.472" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL38" serif:id="PTL">
+ <rect id="PTL39" serif:id="PTL" x="2357.75" y="953.472" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS38" serif:id="OPS">
+ <rect id="OPS39" serif:id="OPS" x="2469.37" y="844.941" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG38" serif:id="UG">
+ <rect id="UG39" serif:id="UG" x="2353.75" y="840.941" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK38" serif:id="MK">
+ <rect id="MK39" serif:id="MK" x="2451.09" y="682.903" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Constantine">
+ <g id="OC40" serif:id="OC">
+ <rect id="OC41" serif:id="OC" x="2173.57" y="436.472" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL40" serif:id="PTL">
+ <rect id="PTL41" serif:id="PTL" x="2070.94" y="436.472" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS40" serif:id="OPS">
+ <rect id="OPS41" serif:id="OPS" x="2173.57" y="329.941" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG40" serif:id="UG">
+ <rect id="UG41" serif:id="UG" x="2070.94" y="329.941" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK40" serif:id="MK">
+ <rect id="MK41" serif:id="MK" x="2270" y="234" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Phillippeville">
+ <g id="OC42" serif:id="OC">
+ <rect id="OC43" serif:id="OC" x="2205.13" y="936" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL42" serif:id="PTL">
+ <rect id="PTL43" serif:id="PTL" x="2217.76" y="783.469" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS42" serif:id="OPS">
+ <rect id="OPS43" serif:id="OPS" x="2316.76" y="686.939" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG42" serif:id="UG">
+ <rect id="UG43" serif:id="UG" x="2214.76" y="581.939" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK42" serif:id="MK">
+ <rect id="MK43" serif:id="MK" x="2317.5" y="516" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Setif">
+ <g id="OC44" serif:id="OC">
+ <rect id="OC45" serif:id="OC" x="2015.26" y="938" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL44" serif:id="PTL">
+ <rect id="PTL45" serif:id="PTL" x="1843.26" y="904" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS44" serif:id="OPS">
+ <rect id="OPS45" serif:id="OPS" x="2060.38" y="639.998" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG44" serif:id="UG">
+ <rect id="UG45" serif:id="UG" x="1952.76" y="697.484" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK44" serif:id="MK">
+ <rect id="MK45" serif:id="MK" x="2047.76" y="804" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Algiers">
+ <g id="OC46" serif:id="OC">
+ <rect id="OC47" serif:id="OC" x="1299.38" y="470.472" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL46" serif:id="PTL">
+ <rect id="PTL47" serif:id="PTL" x="1196.76" y="470.472" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS46" serif:id="OPS">
+ <rect id="OPS47" serif:id="OPS" x="1299.38" y="363.941" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG46" serif:id="UG">
+ <rect id="UG47" serif:id="UG" x="1196.76" y="363.941" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK46" serif:id="MK">
+ <rect id="MK47" serif:id="MK" x="1352.5" y="264" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Oran">
+ <g id="OC48" serif:id="OC">
+ <rect id="OC49" serif:id="OC" x="537.627" y="710.472" width="77" height="77" style="fill:#ed2939;fill-opacity:0.5;"/>
+ </g>
+ <g id="PTL48" serif:id="PTL">
+ <rect id="PTL49" serif:id="PTL" x="435" y="710.472" width="77" height="77" style="fill:#78ed29;fill-opacity:0.5;"/>
+ </g>
+ <g id="OPS48" serif:id="OPS">
+ <rect id="OPS49" serif:id="OPS" x="537.627" y="603.941" width="77" height="77" style="fill:#a629ed;fill-opacity:0.5;"/>
+ </g>
+ <g id="UG48" serif:id="UG">
+ <rect id="UG49" serif:id="UG" x="435" y="603.941" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK48" serif:id="MK">
+ <rect id="MK49" serif:id="MK" x="579.5" y="503.396" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Morocco">
+ <g id="UG50" serif:id="UG">
+ <rect id="UG51" serif:id="UG" x="117.5" y="1773.55" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="Tunisia">
+ <g id="UG52" serif:id="UG">
+ <rect id="UG53" serif:id="UG" x="2508.5" y="1676.05" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ <g id="France">
+ <g id="UG54" serif:id="UG">
+ <rect id="UG55" serif:id="UG" x="1698.78" y="253.33" width="77" height="77" style="fill:#edb029;fill-opacity:0.5;"/>
+ </g>
+ <g id="MK50" serif:id="MK">
+ <rect id="MK51" serif:id="MK" x="1787.44" y="192.298" width="77" height="77" style="fill:#2f29ed;fill-opacity:0.5;"/>
+ </g>
+ </g>
+ </g>
+</svg>